From 66e510e5f2e47e049e157ab046d0499f14b8f700 Mon Sep 17 00:00:00 2001 From: dana-cfc4 Date: Wed, 18 Jan 2023 12:03:55 +0200 Subject: [PATCH] Add available fields, remove default version, manage no version selected --- src/Blocks/EmbedEEATableauBlock/View.jsx | 59 +++++++++++++----------- src/CustomWidgets/UrlParamsWidget.jsx | 29 ++++++++++++ src/Tableau/View.jsx | 2 +- src/TableauBlock/View.jsx | 51 +++++++++++--------- src/TableauBlock/schema.js | 2 +- src/Views/VisualizationView.jsx | 23 +++++---- src/Widgets/VisualizationWidget.jsx | 15 ++++-- src/Widgets/schema.js | 14 ++++-- src/index.js | 2 + src/less/tableau.less | 16 +++++++ 10 files changed, 146 insertions(+), 67 deletions(-) create mode 100644 src/CustomWidgets/UrlParamsWidget.jsx diff --git a/src/Blocks/EmbedEEATableauBlock/View.jsx b/src/Blocks/EmbedEEATableauBlock/View.jsx index c3f8862..f49c2a5 100644 --- a/src/Blocks/EmbedEEATableauBlock/View.jsx +++ b/src/Blocks/EmbedEEATableauBlock/View.jsx @@ -36,34 +36,41 @@ const View = (props) => { {data?.vis_url ? ( <> -
- {props.mode === 'edit' ? ( -
-

- == Tableau{' '} - {tableau_visualization?.general?.version || '2.8.0'} loaded - == -

+ {tableau_visualization?.general?.url && + tableau_visualization?.general?.version ? ( + <> +
+ {props.mode === 'edit' ? ( +
+

+ == Tableau {tableau_visualization?.general?.version}{' '} + loaded == +

+
+ ) : ( + '' + )} +
- ) : ( - '' - )} - -
- - {show_sources && - data_provenance && - data_provenance?.data?.data_provenance && - tableau_visualization ? ( - - ) : show_sources ? ( -
Data provenance is not set in the visualization
+ {show_sources && + data_provenance && + data_provenance?.data?.data_provenance && + tableau_visualization ? ( + + ) : show_sources ? ( +
Data provenance is not set in the visualization
+ ) : ( + '' + )} + + ) : !tableau_visualization?.general?.url ? ( +
Url is not set in the visualization
) : ( - '' +
Version is not set in the visualization
)} ) : ( diff --git a/src/CustomWidgets/UrlParamsWidget.jsx b/src/CustomWidgets/UrlParamsWidget.jsx new file mode 100644 index 0000000..51d8f66 --- /dev/null +++ b/src/CustomWidgets/UrlParamsWidget.jsx @@ -0,0 +1,29 @@ +import React from 'react'; +import '@eeacms/volto-tableau/less/tableau.less'; + +const UrlParamsWidget = () => { + const fields = [ + 'embed', + 'isGuestRedirectFromVizportal', + 'showShareOptions', + 'jsdebug', + 'sheetname', + 'display_count', + 'showVizHome', + 'origin', + 'device', + ]; + + return ( +
+

Available Fields:

+ {fields.map((field) => ( +

+ {field} +

+ ))} +
+ ); +}; + +export default UrlParamsWidget; diff --git a/src/Tableau/View.jsx b/src/Tableau/View.jsx index 47568ac..a014ba3 100644 --- a/src/Tableau/View.jsx +++ b/src/Tableau/View.jsx @@ -23,7 +23,7 @@ const Tableau = (props) => { screen = {}, setError = () => {}, setLoaded = () => {}, - version = '2.8.0', + version = '', } = props; const { autoScale = false, diff --git a/src/TableauBlock/View.jsx b/src/TableauBlock/View.jsx index e88a141..6a24077 100644 --- a/src/TableauBlock/View.jsx +++ b/src/TableauBlock/View.jsx @@ -34,14 +34,15 @@ const View = (props) => { description = null, autoScale = false, } = data; - const version = - props.data.version || config.settings.tableauVersion || '2.8.0'; + const version = props.data.version || config.settings.tableauVersion; const device = getDevice(config, screen.page?.width || Infinity); const breakpointUrl = breakpointUrls.filter( (breakpoint) => breakpoint.device === device, )[0]?.url; const url = breakpointUrl || data.url; + const displayCondition = url && version; + React.useEffect(() => { setMounted(true); /* eslint-disable-next-line */ @@ -67,33 +68,39 @@ const View = (props) => { return mounted ? (
- {props.mode === 'edit' ? ( -
+
+ {displayCondition && props.mode === 'edit' ? (

== Tableau {version} loaded ==

- {!props.data.url ?

URL required

: ''} - {error ?

{error}

: ''} -
- ) : ( - '' - )} + ) : null} + {!url ?

URL required

: ''} + {url && !version ? ( +

Version required

+ ) : ( + '' + )} + {error ?

{error}

: ''} +
+ {loaded && title ?

{title}

: ''} {loaded && description ? (

{description}

) : ( '' )} - + {displayCondition ? ( + + ) : null}
) : ( '' diff --git a/src/TableauBlock/schema.js b/src/TableauBlock/schema.js index ea003c8..884ce49 100644 --- a/src/TableauBlock/schema.js +++ b/src/TableauBlock/schema.js @@ -82,7 +82,7 @@ export default (config) => ({ '2.0.3', ].map((version) => [version, `tableau-${version}`]), ], - default: config.settings.tableauVersion || '2.8.0', + default: config.settings.tableauVersion, }, url: { title: 'Url', diff --git a/src/Views/VisualizationView.jsx b/src/Views/VisualizationView.jsx index 115b151..801db73 100644 --- a/src/Views/VisualizationView.jsx +++ b/src/Views/VisualizationView.jsx @@ -12,6 +12,8 @@ const VisualizationView = (props) => {
{!tableau_visualization_data.general?.url ? (

URL required

+ ) : !tableau_visualization_data.general?.version ? ( +

Version required

) : tableauError ? (

{tableauError}

) : ( @@ -23,19 +25,20 @@ const VisualizationView = (props) => { }; return (
- {!tableau_visualization_data.general?.url || tableauError ? ( + {!tableau_visualization_data?.general?.url || + !tableau_visualization_data?.general?.version || + tableauError ? ( ) : ( - '' + )} -
); }; diff --git a/src/Widgets/VisualizationWidget.jsx b/src/Widgets/VisualizationWidget.jsx index 5f16d07..1d80c0f 100644 --- a/src/Widgets/VisualizationWidget.jsx +++ b/src/Widgets/VisualizationWidget.jsx @@ -40,6 +40,8 @@ const VisualizationWidget = (props) => {
{intValue && intValue.general && !intValue.general.url ? (

URL required

+ ) : intValue && intValue.general && !intValue.general.version ? ( +

Version required

) : tableauError ? (

{tableauError}

) : ( @@ -57,7 +59,8 @@ const VisualizationWidget = (props) => { setIntValue({ ...intValue, general: { - version: '2.8.0', + url: intValue?.general?.url, + version: '', }, }); } @@ -73,7 +76,7 @@ const VisualizationWidget = (props) => { }); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [intValue]); + }, []); return ( @@ -115,7 +118,9 @@ const VisualizationWidget = (props) => { /> - {(intValue && intValue.general && !intValue.general.url) || + {(intValue && + intValue.general && + (!intValue.general.url || !intValue.general.version)) || tableauError ? ( ) : ( @@ -147,7 +152,9 @@ const VisualizationWidget = (props) => { )} - {(intValue && intValue.general && !intValue.general.url) || + {(intValue && + intValue.general && + (!intValue.general.url || !intValue.general.version)) || tableauError ? ( ) : ( diff --git a/src/Widgets/schema.js b/src/Widgets/schema.js index 4b8dd1d..fa4e375 100644 --- a/src/Widgets/schema.js +++ b/src/Widgets/schema.js @@ -27,7 +27,7 @@ const generalSchema = (config) => { '2.0.3', ].map((version) => [version, `tableau-${version}`]), ], - default: config.settings.tableauVersion || '2.8.0', + default: config.settings.tableauVersion, }, url: { title: 'Url', @@ -92,7 +92,11 @@ const optionsSchema = { const urlParametersSchema = { title: 'Parameter', fieldsets: [ - { id: 'default', title: 'Default', fields: ['field', 'urlParam'] }, + { + id: 'default', + title: 'Default', + fields: ['field', 'urlParam'], + }, ], properties: { field: { @@ -139,7 +143,7 @@ const extraOptionsSchema = (config) => { { id: 'default', title: 'Extra Options Data', - fields: ['urlParameters', 'breakpointUrls'], + fields: ['urlParameters', 'availableFields', 'breakpointUrls'], }, ], @@ -150,6 +154,10 @@ const extraOptionsSchema = (config) => { schema: urlParametersSchema, description: 'Set a list of url parameters to filter the tableau', }, + availableFields: { + title: 'Available Fields:', + widget: 'url_params_widget', + }, breakpointUrls: { title: 'Breakpoint urls', widget: 'object_list', diff --git a/src/index.js b/src/index.js index 478f4a9..4e6533c 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,7 @@ import EmbedTableauView from './Blocks/EmbedEEATableauBlock/View'; import EmbedTableauEdit from './Blocks/EmbedEEATableauBlock/Edit'; import { VisualizationView } from './Views'; import { VisualizationWidget } from './Widgets'; +import UrlParamsWidget from './CustomWidgets/UrlParamsWidget'; import tableauStore from './store'; @@ -72,6 +73,7 @@ const applyConfig = (config) => { config.views.contentTypesViews.tableau_visualization = VisualizationView; config.widgets.id.tableau_visualization_data = VisualizationWidget; + config.widgets.widget.url_params_widget = UrlParamsWidget; return config; }; diff --git a/src/less/tableau.less b/src/less/tableau.less index d5c0905..38f24bd 100644 --- a/src/less/tableau.less +++ b/src/less/tableau.less @@ -108,4 +108,20 @@ } } +.availableFieldsContainer { + padding: 0 5px 5px 0; + border-bottom: 1px solid #d9d9d9; +} + +.availableFieldsTitle { + font-size: 13px; + font-weight: bold; + color: darkgray; +} + +.availableFields { + font-size: 12px; + padding: 0 5px; +} + .loadAddonOverrides();