From 33c29708381376fb0eb24a053b0c47e1221074b4 Mon Sep 17 00:00:00 2001 From: Paul Rosenzweig <paulrosenzweig@users.noreply.github.com> Date: Tue, 13 Aug 2019 18:16:40 -0400 Subject: [PATCH] Add message with link to docs for fields without any filter widgets (#10340) --- .../template_tags/TagEditorParam.jsx | 62 ++++++++++++------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx index e94088dbcc5..ee34b3f115c 100644 --- a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx +++ b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx @@ -2,6 +2,7 @@ import React, { Component } from "react"; import { t } from "ttag"; import _ from "underscore"; import { connect } from "react-redux"; +import { Link } from "react-router"; import Toggle from "metabase/components/Toggle.jsx"; import InputBlurChange from "metabase/components/InputBlurChange.jsx"; @@ -17,6 +18,7 @@ import { fetchField } from "metabase/redux/metadata"; import { getMetadata } from "metabase/selectors/metadata"; import { SchemaTableAndFieldDataSelector } from "metabase/query_builder/components/DataSelector"; import Metadata from "metabase-lib/lib/metadata/Metadata"; +import MetabaseSettings from "metabase/lib/settings"; import type { FieldId } from "metabase/meta/types/Field"; type Props = { @@ -106,7 +108,7 @@ export default class TagEditorParam extends Component { render() { const { tag, database, databases, metadata } = this.props; - let widgetOptions, + let widgetOptions = [], table, fieldMetadataLoaded = false; if (tag.type === "dimension" && Array.isArray(tag.dimension)) { @@ -122,6 +124,7 @@ export default class TagEditorParam extends Component { const isDimension = tag.type === "dimension"; const hasSelectedDimensionField = isDimension && Array.isArray(tag.dimension); + const hasWidgetOptions = widgetOptions && widgetOptions.length > 0; return ( <div className="pb2 mb2 border-bottom border-dark"> <h3 className="pb2">{tag.name}</h3> @@ -176,28 +179,41 @@ export default class TagEditorParam extends Component { </div> )} - {widgetOptions && widgetOptions.length > 0 && ( - <div className="pb1"> - <h5 className="pb1 text-normal">{t`Filter widget type`}</h5> - <Select - className="border-medium bg-white block" - value={tag["widget-type"]} - onChange={e => - this.setParameterAttribute("widget-type", e.target.value) - } - isInitiallyOpen={!tag["widget-type"]} - placeholder={t`Select…`} - > - {[{ name: "None", type: undefined }] - .concat(widgetOptions) - .map(widgetOption => ( - <Option key={widgetOption.type} value={widgetOption.type}> - {widgetOption.name} - </Option> - ))} - </Select> - </div> - )} + <div className="pb1"> + <h5 className="pb1 text-normal">{t`Filter widget type`}</h5> + <Select + className="border-med bg-white block" + value={tag["widget-type"]} + onChange={e => + this.setParameterAttribute("widget-type", e.target.value) + } + isInitiallyOpen={!tag["widget-type"] && hasWidgetOptions} + placeholder={t`Select…`} + > + {[{ name: "None", type: undefined }] + .concat(widgetOptions) + .map(widgetOption => ( + <Option key={widgetOption.type} value={widgetOption.type}> + {widgetOption.name} + </Option> + ))} + </Select> + {hasSelectedDimensionField && !hasWidgetOptions && ( + <p className="pb1"> + {t`There aren't any filter widgets for this type of field yet.`}{" "} + <Link + to={MetabaseSettings.docsUrl( + "users-guide/13-sql-parameters", + "the-field-filter-variable-type", + )} + target="_blank" + className="link" + > + {t`Learn more`} + </Link> + </p> + )} + </div> <div className="flex align-center pb1"> <h5 className="text-normal mr1">{t`Required?`}</h5> -- GitLab