コード例 #1
0
ファイル: dashboard.js プロジェクト: aq/metabase
    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);
    };
コード例 #2
0
ファイル: dashboard.js プロジェクト: aplusphilic/metabase
  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,
    };
  };