return async function(dispatch, getState) { const isPublicLink = Utils.isUUID(dashId); if (isPublicLink) { result = await PublicApi.dashboard({ uuid: dashId }); result = { ...result, id: dashId, ordered_cards: result.ordered_cards.map(dc => ({ ...dc, dashboard_id: dashId })) }; } else { result = await DashboardApi.get({ dashId: dashId }); } dispatch(setDashboardId(dashId)); if (result.parameters) { for (const parameter of result.parameters) { if (queryParams && queryParams[parameter.slug] != null) { dispatch(setParameterValue(parameter.id, queryParams[parameter.slug])); } else if (enableDefaultParameters && parameter.default != null) { dispatch(setParameterValue(parameter.id, parameter.default)); } } } if (!isPublicLink) { // fetch database metadata for every card _.chain(result.ordered_cards) .map((dc) => [dc.card].concat(dc.series)) .flatten() .filter(card => card && card.dataset_query && card.dataset_query.database) .map(card => card.dataset_query.database) .uniq() .each((dbId) => dispatch(fetchDatabaseMetadata(dbId))); } return normalize(result, dashboard); };
return async function(dispatch, getState) { const dashboardType = getDashboardType(dashId); if (dashboardType === "public") { result = await PublicApi.dashboard({ uuid: dashId }); result = { ...result, id: dashId, ordered_cards: result.ordered_cards.map(dc => ({ ...dc, dashboard_id: dashId, })), }; } else if (dashboardType === "embed") { result = await EmbedApi.dashboard({ token: dashId }); result = { ...result, id: dashId, ordered_cards: result.ordered_cards.map(dc => ({ ...dc, dashboard_id: dashId, })), }; } else if (dashboardType === "transient") { const subPath = dashId .split("/") .slice(3) .join("/"); result = await AutoApi.dashboard({ subPath }); result = { ...result, id: dashId, ordered_cards: result.ordered_cards.map(dc => ({ ...dc, dashboard_id: dashId, })), }; } else { result = await DashboardApi.get({ dashId: dashId }); } const parameterValues = {}; if (result.parameters) { for (const parameter of result.parameters) { if (queryParams && queryParams[parameter.slug] != null) { parameterValues[parameter.id] = queryParams[parameter.slug]; } else if (enableDefaultParameters && parameter.default != null) { parameterValues[parameter.id] = parameter.default; } } } if (dashboardType === "normal" || dashboardType === "transient") { // fetch database metadata for every card _.chain(result.ordered_cards) .map(dc => [dc.card].concat(dc.series)) .flatten() .filter( card => card && card.dataset_query && card.dataset_query.database, ) .map(card => card.dataset_query.database) .uniq() .each(dbId => dispatch(fetchDatabaseMetadata(dbId))); } // copy over any virtual cards from the dashcard to the underlying card/question result.ordered_cards.forEach(card => { if (card.visualization_settings.virtual_card) { card.card = Object.assign( card.card || {}, card.visualization_settings.virtual_card, ); } }); if (result.param_values) { dispatch(addParamValues(result.param_values)); } if (result.param_fields) { dispatch(addFields(result.param_fields)); } return { ...normalize(result, dashboard), // includes `result` and `entities` dashboardId: dashId, parameterValues: parameterValues, }; };