diff --git a/src/card/view/CardView.tsx b/src/card/view/CardView.tsx index 4ddfff2c9..0acff351e 100644 --- a/src/card/view/CardView.tsx +++ b/src/card/view/CardView.tsx @@ -22,6 +22,18 @@ const NeoCardView = ({ title, database, query, globalParameters, const cardHeight = heightPx - CARD_FOOTER_HEIGHT; const ref = React.useRef(); + const getLocalParameters = (parse_string): any => { + let re = /(?:^|\W)\$(\w+)(?!\w)/g, match, localQueryVariables: string[] = []; + while (match = re.exec(parse_string)) { + localQueryVariables.push(match[1]); + } + + if (!globalParameters) { + return {}; + } + return Object.fromEntries(Object.entries(globalParameters).filter(([local]) => localQueryVariables.includes(local))); + } + // @ts-ignore const reportHeader = downloadComponentAsImage(ref)} onToggleCardExpand={onToggleCardExpand} expanded={expanded} + parameters={getLocalParameters(title)} > ; @@ -59,17 +72,11 @@ const NeoCardView = ({ title, database, query, globalParameters, return globalParameters ? globalParameters[key] : undefined; } - const getLocalParameters = (): any => { - let re = /(?:^|\W)\$(\w+)(?!\w)/g, match, localQueryVariables: string[] = []; - while (match = re.exec(query)) { - localQueryVariables.push(match[1]); - } + // ONLY if the 'actions' extension is enabled, we send 'actionsRules' to the table visualization. + const filteredSettings = Object.fromEntries(Object.entries(settings).filter( + ([k, v]) => !(k == 'actionsRules' && dashboardSettings['extensions'] != null && !dashboardSettings['extensions'].includes('actions'))) + ); - if (!globalParameters) { - return {}; - } - return Object.fromEntries(Object.entries(globalParameters).filter(([local]) => localQueryVariables.includes(local))); - } // TODO - understand why CardContent is throwing a warning based on this style config. const cardContentStyle = { @@ -83,7 +90,7 @@ const NeoCardView = ({ title, database, query, globalParameters, { + onToggleCardSettings, onDownloadImage, onToggleCardExpand, expanded, parameters }) => { const [text, setText] = React.useState(title); + const [parsedText, setParsedText] = React.useState(title); + const [editing, setEditing] = React.useState(false); const [descriptionModalOpen, setDescriptionModalOpen] = React.useState(false); + function replaceParamsOnString(s, p){ + for (const [key, value] of Object.entries(p)) { + s= s.replace("$"+key+" ", value+" "); + } + return s; + } + // Ensure that we only trigger a text update event after the user has stopped typing. const debouncedTitleUpdate = useCallback( debounce(onTitleUpdate, 250), [], ); + useEffect(() => { + let titleParsed = replaceParamsOnString(`${title}`, parameters); + if(!editing) + setParsedText(titleParsed); + + }, [editing,parameters]) + useEffect(() => { // Reset text to the dashboard state when the page gets reorganized. if (text !== title) { @@ -35,6 +51,7 @@ const NeoCardViewHeader = ({ title, description, editable, onTitleUpdate, fullsc } }, [title]) + const cardTitle = <> @@ -45,13 +62,19 @@ const NeoCardViewHeader = ({ title, description, editable, onTitleUpdate, fullsc
{ + setEditing(true); + }} + onBlur={(e) => { + setEditing(false); + }} className={"no-underline large"} label="" disabled={!editable} placeholder="Report name..." fullWidth maxRows={4} - value={text} + value={editing ? text : parsedText} onChange={(event) => { setText(event.target.value); debouncedTitleUpdate(event.target.value); diff --git a/src/extensions/advancedcharts/chart/radar/RadarChart.tsx b/src/extensions/advancedcharts/chart/radar/RadarChart.tsx index c75bc4b5f..9b7d263be 100644 --- a/src/extensions/advancedcharts/chart/radar/RadarChart.tsx +++ b/src/extensions/advancedcharts/chart/radar/RadarChart.tsx @@ -60,7 +60,6 @@ import { NoDrawableDataErrorMessage } from '../../../../component/editor/CodeVie selection.values.concat([selection['index']]).forEach((k,i) => { const fieldIndex = r["_fieldLookup"][k]; if(k !== selection['index'] && isNaN(r["_fields"][fieldIndex])){ - console.log(k, r["_fields"][fieldIndex]) valid = false; } entry[k] = ""+r["_fields"][fieldIndex];