@undp/data-viz 2.0.7 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChoroplethMap.cjs +1 -1
- package/dist/ChoroplethMap.js +1 -1
- package/dist/DataCards.cjs +1 -1
- package/dist/DataCards.js +1 -1
- package/dist/GriddedGraphs.cjs +1 -1
- package/dist/GriddedGraphs.cjs.map +1 -1
- package/dist/GriddedGraphs.d.ts +1 -0
- package/dist/GriddedGraphs.js +152 -140
- package/dist/GriddedGraphs.js.map +1 -1
- package/dist/GriddedGraphsFromConfig.d.ts +1 -0
- package/dist/HybridMap.cjs +1 -1
- package/dist/HybridMap.js +1 -1
- package/dist/MultiGraphDashboard.cjs +1 -1
- package/dist/MultiGraphDashboard.cjs.map +1 -1
- package/dist/MultiGraphDashboard.d.ts +1 -0
- package/dist/MultiGraphDashboard.js +88 -83
- package/dist/MultiGraphDashboard.js.map +1 -1
- package/dist/MultiGraphDashboardFromConfig.d.ts +1 -0
- package/dist/PerformanceIntensiveMultiGraphDashboard.cjs +1 -1
- package/dist/PerformanceIntensiveMultiGraphDashboard.cjs.map +1 -1
- package/dist/PerformanceIntensiveMultiGraphDashboard.d.ts +1 -0
- package/dist/PerformanceIntensiveMultiGraphDashboard.js +74 -70
- package/dist/PerformanceIntensiveMultiGraphDashboard.js.map +1 -1
- package/dist/PerformanceIntensiveMultiGraphDashboardFromConfig.d.ts +1 -0
- package/dist/SingleGraphDashboard.cjs +1 -1
- package/dist/SingleGraphDashboard.cjs.map +1 -1
- package/dist/SingleGraphDashboard.d.ts +1 -0
- package/dist/SingleGraphDashboard.js +122 -119
- package/dist/SingleGraphDashboard.js.map +1 -1
- package/dist/SingleGraphDashboardFromConfig.d.ts +1 -0
- package/dist/SingleGraphDashboardThreeDGraphs.cjs +1 -1
- package/dist/SingleGraphDashboardThreeDGraphs.cjs.map +1 -1
- package/dist/SingleGraphDashboardThreeDGraphs.d.ts +1 -0
- package/dist/SingleGraphDashboardThreeDGraphs.js +126 -122
- package/dist/SingleGraphDashboardThreeDGraphs.js.map +1 -1
- package/dist/SingleGraphDashboardThreeDGraphsFromConfig.d.ts +1 -0
- package/dist/ThreeDGlobe.cjs +1 -1
- package/dist/ThreeDGlobe.js +1 -1
- package/dist/Types.d.ts +1 -0
- package/dist/{getGraphList-gf02xgT2.cjs → getGraphList-CA17dvFB.cjs} +2 -2
- package/dist/getGraphList-CA17dvFB.cjs.map +1 -0
- package/dist/{getGraphList-BpEWn1Tk.js → getGraphList-Dxwo9TDb.js} +7 -1
- package/dist/{getGraphList-BpEWn1Tk.js.map → getGraphList-Dxwo9TDb.js.map} +1 -1
- package/dist/getSchema.cjs +1 -1
- package/dist/getSchema.js +1 -1
- package/dist/getUniqValue-DsqSii6M.js +11 -0
- package/dist/getUniqValue-DsqSii6M.js.map +1 -0
- package/dist/getUniqValue-NX8DgwND.cjs +2 -0
- package/dist/getUniqValue-NX8DgwND.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -4
- package/dist/transformData.cjs +1 -1
- package/dist/transformData.js +2 -2
- package/dist/{transformDataForAggregation-CjwEAUOR.js → transformDataForAggregation-DEU__LUl.js} +2 -2
- package/dist/{transformDataForAggregation-CjwEAUOR.js.map → transformDataForAggregation-DEU__LUl.js.map} +1 -1
- package/dist/{transformDataForAggregation-DAGK2BZy.cjs → transformDataForAggregation-XNg0OGYE.cjs} +2 -2
- package/dist/{transformDataForAggregation-DAGK2BZy.cjs.map → transformDataForAggregation-XNg0OGYE.cjs.map} +1 -1
- package/dist/{transformDataForGraphFromFile-D5TMQYYd.js → transformDataForGraphFromFile-CSG24iF6.js} +2 -2
- package/dist/{transformDataForGraphFromFile-D5TMQYYd.js.map → transformDataForGraphFromFile-CSG24iF6.js.map} +1 -1
- package/dist/{transformDataForGraphFromFile-B1zJSPRP.cjs → transformDataForGraphFromFile-CzepNVGZ.cjs} +2 -2
- package/dist/{transformDataForGraphFromFile-B1zJSPRP.cjs.map → transformDataForGraphFromFile-CzepNVGZ.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +2 -2
- package/dist/validateSchema.cjs +1 -1
- package/dist/validateSchema.js +1 -1
- package/package.json +1 -1
- package/dist/getGraphList-gf02xgT2.cjs.map +0 -1
- package/dist/getUniqValue-BKHCm3zE.js +0 -11
- package/dist/getUniqValue-BKHCm3zE.js.map +0 -1
- package/dist/getUniqValue-RViz8tTw.cjs +0 -2
- package/dist/getUniqValue-RViz8tTw.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingleGraphDashboard.cjs","sources":["../src/Components/Dashboard/SingleGraphDashboard.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useRef, useState } from 'react';\r\nimport intersection from 'lodash.intersection';\r\nimport flattenDeep from 'lodash.flattendeep';\r\nimport isEqual from 'fast-deep-equal';\r\nimport { createFilter, DropdownSelect } from '@undp/design-system-react/DropdownSelect';\r\nimport { CheckboxGroup, CheckboxGroupItem } from '@undp/design-system-react/CheckboxGroup';\r\nimport { RadioGroup, RadioGroupItem } from '@undp/design-system-react/RadioGroup';\r\nimport { Spinner } from '@undp/design-system-react/Spinner';\r\nimport { Label } from '@undp/design-system-react/Label';\r\n\r\nimport { GraphContainer } from '../Elements/GraphContainer';\r\n\r\nimport GraphEl from './GraphEl';\r\n\r\nimport {\r\n AdvancedDataSelectionDataType,\r\n AggregationSettingsDataType,\r\n DataFilterDataType,\r\n DataSelectionDataType,\r\n DataSettingsDataType,\r\n FilterSettingsDataType,\r\n FilterUiSettingsDataType,\r\n GraphConfigurationDataType,\r\n GraphSettingsDataType,\r\n GraphType,\r\n HighlightDataPointSettingsDataType,\r\n} from '@/Types';\r\nimport {\r\n fetchAndParseCSV,\r\n fetchAndParseJSON,\r\n fetchAndParseMultipleDataSources,\r\n fetchAndTransformDataFromAPI,\r\n} from '@/Utils/fetchAndParseData';\r\nimport { transformDataForGraph } from '@/Utils/transformData/transformDataForGraph';\r\nimport { getUniqValue } from '@/Utils/getUniqValue';\r\nimport { transformDataForAggregation } from '@/Utils/transformData/transformDataForAggregation';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { filterData } from '@/Utils/transformData/filterData';\r\nimport { checkIfMultiple } from '@/Utils/checkIfMultiple';\r\nimport { transformColumnsToArray } from '@/Utils/transformData/transformColumnsToArray';\r\nimport { graphList } from '@/Utils/getGraphList';\r\nimport { transformDefaultValue } from '@/Utils/transformDataForSelect';\r\n\r\ninterface Props {\r\n graphSettings?: GraphSettingsDataType;\r\n readableHeader?: {\r\n value: string;\r\n label: string;\r\n }[];\r\n dataSettings: DataSettingsDataType;\r\n filters?: FilterUiSettingsDataType[];\r\n highlightDataPointSettings?: HighlightDataPointSettingsDataType;\r\n noOfFiltersPerRow?: number;\r\n graphType: GraphType;\r\n dataTransform?: {\r\n keyColumn: string;\r\n aggregationColumnsSetting?: AggregationSettingsDataType[];\r\n };\r\n dataFilters?: DataFilterDataType[];\r\n graphDataConfiguration?: GraphConfigurationDataType[];\r\n dataSelectionOptions?: DataSelectionDataType[];\r\n advancedDataSelectionOptions?: AdvancedDataSelectionDataType[];\r\n debugMode?: boolean;\r\n uiMode?: 'light' | 'normal';\r\n updateFilters?: (_d: string) => void;\r\n}\r\n\r\nconst addMinAndMax = (config: GraphConfigurationDataType[]) => {\r\n if (\r\n config.findIndex(d => d.chartConfigId === 'yMin') !== -1 &&\r\n config.findIndex(d => d.chartConfigId === 'yMax') !== -1\r\n )\r\n return config;\r\n const configTemp = [...config];\r\n if (config.findIndex(d => d.chartConfigId === 'yMin') === -1) {\r\n configTemp.push({\r\n chartConfigId: 'yMin',\r\n columnId: `${config[config.findIndex(d => d.chartConfigId === 'y')].columnId}Min`,\r\n });\r\n }\r\n if (config.findIndex(d => d.chartConfigId === 'yMax') === -1) {\r\n configTemp.push({\r\n chartConfigId: 'yMax',\r\n columnId: `${config[config.findIndex(d => d.chartConfigId === 'y')].columnId}Max`,\r\n });\r\n }\r\n return configTemp;\r\n};\r\n\r\nconst getGraphSettings = (\r\n dataSelectionOptions: DataSelectionDataType[],\r\n updatedConfig?: GraphConfigurationDataType[],\r\n) => {\r\n const updatedSettings =\r\n updatedConfig?.map(c => {\r\n const indx = dataSelectionOptions?.findIndex(opt => opt.chartConfigId === c.chartConfigId);\r\n if (indx === -1) return {};\r\n const allowedValIndx = dataSelectionOptions[indx]?.allowedColumnIds?.findIndex(\r\n col => col.value === c.columnId,\r\n );\r\n if (allowedValIndx === -1) return {};\r\n return dataSelectionOptions[indx].allowedColumnIds[allowedValIndx].graphSettings || {};\r\n }) || [];\r\n return Object.assign({}, ...updatedSettings);\r\n};\r\n\r\nexport function SingleGraphDashboard(props: Props) {\r\n const {\r\n graphSettings,\r\n dataSettings,\r\n filters,\r\n graphType,\r\n dataTransform,\r\n graphDataConfiguration,\r\n dataFilters,\r\n debugMode,\r\n dataSelectionOptions,\r\n advancedDataSelectionOptions,\r\n readableHeader,\r\n noOfFiltersPerRow = 4,\r\n updateFilters,\r\n uiMode = 'normal',\r\n highlightDataPointSettings,\r\n } = props;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [filteredData, setFilteredData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [data, setData] = useState<any>(undefined);\r\n const [graphConfig, setGraphConfig] = useState<GraphConfigurationDataType[] | undefined>(\r\n graphDataConfiguration,\r\n );\r\n const [advancedGraphSettings, setAdvancedGraphSettings] = useState<GraphSettingsDataType>({});\r\n const [highlightedDataPointList, setHighlightedDataPointList] = useState<\r\n (string | number)[] | undefined\r\n >(undefined);\r\n const [highlightedDataPointOptions, setHighlightedDataPointOption] = useState<\r\n { label: string | number; value: string | number }[]\r\n >([]);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n const prevGraphDataConfigRef = useRef<GraphConfigurationDataType[] | undefined>(\r\n graphDataConfiguration,\r\n );\r\n const [filterSettings, setFilterSettings] = useState<FilterSettingsDataType[]>([]);\r\n\r\n const filterConfig = {\r\n ignoreCase: true,\r\n ignoreAccents: true,\r\n trim: true,\r\n };\r\n\r\n const updateFiltersEvent = useEffectEvent(() => {\r\n const filterSettingsTemp = (filters || []).map(el => ({\r\n filter: el.column,\r\n label: el.label || `Filter by ${el.column}`,\r\n singleSelect: el.singleSelect,\r\n clearable: el.clearable,\r\n defaultValue: transformDefaultValue(el.defaultValue),\r\n value: transformDefaultValue(el.defaultValue),\r\n availableValues: getUniqValue(data, el.column)\r\n .filter(v => !el.excludeValues?.includes(`${v}`))\r\n .map(v => ({ value: v, label: v })),\r\n allowSelectAll: el.allowSelectAll,\r\n width: el.width,\r\n }));\r\n setFilterSettings(filterSettingsTemp);\r\n });\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const dataFromFile = dataSettings.dataURL\r\n ? typeof dataSettings.dataURL === 'string'\r\n ? dataSettings.fileType === 'json'\r\n ? await fetchAndParseJSON(\r\n dataSettings.dataURL,\r\n dataSettings.columnsToArray,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : dataSettings.fileType === 'api'\r\n ? await fetchAndTransformDataFromAPI(\r\n dataSettings.dataURL,\r\n dataSettings.apiHeaders,\r\n dataSettings.columnsToArray,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : await fetchAndParseCSV(\r\n dataSettings.dataURL,\r\n dataSettings.dataTransformation,\r\n dataSettings.columnsToArray,\r\n debugMode,\r\n dataSettings.delimiter,\r\n true,\r\n )\r\n : await fetchAndParseMultipleDataSources(\r\n dataSettings.dataURL,\r\n dataSettings.idColumnTitle,\r\n )\r\n : await transformColumnsToArray(dataSettings.data, dataSettings.columnsToArray);\r\n setData(dataFromFile);\r\n } catch (error) {\r\n console.error('Data fetching error:', error);\r\n }\r\n };\r\n fetchData();\r\n updateFiltersEvent();\r\n }, [dataSettings, debugMode]);\r\n\r\n useEffect(() => {\r\n updateFiltersEvent();\r\n }, [filters]);\r\n\r\n const filteredDataEvent = useEffectEvent(() => {\r\n if (!data || filterSettings.length === 0) setFilteredData(data);\r\n else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const result = data.filter((item: any) =>\r\n filterSettings.every(filter =>\r\n filter.value && flattenDeep([filter.value]).length > 0\r\n ? intersection(\r\n flattenDeep([item[filter.filter]]),\r\n flattenDeep([filter.value]).map(el => el.value),\r\n ).length > 0\r\n : true,\r\n ),\r\n );\r\n setFilteredData(result);\r\n }\r\n });\r\n useEffect(() => {\r\n filteredDataEvent();\r\n }, [filterSettings, data]);\r\n\r\n useEffect(() => {\r\n if (dataSelectionOptions)\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setAdvancedGraphSettings(getGraphSettings(dataSelectionOptions, graphDataConfiguration));\r\n }, [dataSelectionOptions, graphDataConfiguration]);\r\n\r\n const updateHighlightedDataPointOptions = useEffectEvent(() => {\r\n if (highlightDataPointSettings?.column && filteredData)\r\n setHighlightedDataPointOption(\r\n getUniqValue(filteredData, highlightDataPointSettings.column)\r\n .filter(v => !highlightDataPointSettings?.excludeValues?.includes(`${v}`))\r\n .map(d => ({ value: d, label: d })),\r\n );\r\n });\r\n\r\n useEffect(() => {\r\n updateHighlightedDataPointOptions();\r\n }, [highlightDataPointSettings]);\r\n\r\n useEffect(() => {\r\n if (!isEqual(prevGraphDataConfigRef.current, graphDataConfiguration)) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setGraphConfig(graphDataConfiguration);\r\n prevGraphDataConfigRef.current = graphDataConfiguration;\r\n }\r\n }, [graphDataConfiguration]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const handleFilterChange = (filter: string, values: any) => {\r\n setFilterSettings(prev => prev.map(f => (f.filter === filter ? { ...f, value: values } : f)));\r\n };\r\n\r\n const graphData = !data\r\n ? undefined\r\n : transformDataForGraph(\r\n dataTransform\r\n ? transformDataForAggregation(\r\n filterData(data, dataFilters || []),\r\n dataTransform.keyColumn,\r\n dataTransform.aggregationColumnsSetting,\r\n )\r\n : filterData(data, dataFilters || []),\r\n graphType,\r\n graphType === 'lineChartWithConfidenceInterval' && graphConfig\r\n ? addMinAndMax(graphConfig)\r\n : graphConfig,\r\n );\r\n return (\r\n <GraphContainer\r\n className={graphSettings?.classNames?.graphContainer}\r\n style={graphSettings?.styles?.graphContainer}\r\n id={graphSettings?.graphID}\r\n ref={graphParentDiv}\r\n aria-label={graphSettings?.ariaLabel}\r\n backgroundColor={graphSettings?.backgroundColor ?? false}\r\n theme={graphSettings?.theme || 'light'}\r\n language={graphSettings?.language || 'en'}\r\n width={graphSettings?.width}\r\n height={graphSettings?.height}\r\n padding={graphSettings?.padding}\r\n minHeight={graphSettings?.minHeight}\r\n relativeHeight={graphSettings?.relativeHeight}\r\n >\r\n {data ||\r\n graphList\r\n .filter(el => el.geoHubMapPresentation)\r\n .map(el => el.graphID)\r\n .indexOf(graphType) !== -1 ? (\r\n <>\r\n {advancedGraphSettings?.graphTitle ||\r\n advancedGraphSettings?.graphDescription ||\r\n graphSettings?.graphTitle ||\r\n graphSettings?.graphDescription ||\r\n graphSettings?.graphDownload ||\r\n graphSettings?.dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: advancedGraphSettings?.styles?.title || graphSettings?.styles?.title,\r\n description:\r\n advancedGraphSettings?.styles?.description || graphSettings?.styles?.description,\r\n }}\r\n classNames={{\r\n title: advancedGraphSettings?.classNames?.title || graphSettings?.classNames?.title,\r\n description:\r\n advancedGraphSettings?.classNames?.description ||\r\n graphSettings?.classNames?.description,\r\n }}\r\n graphTitle={advancedGraphSettings?.graphTitle || graphSettings?.graphTitle}\r\n graphDescription={\r\n advancedGraphSettings?.graphDescription || graphSettings?.graphDescription\r\n }\r\n width={advancedGraphSettings?.width || graphSettings?.width}\r\n graphDownload={graphSettings?.graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n graphSettings?.dataDownload && data ? (data.length > 0 ? data : null) : null\r\n }\r\n />\r\n ) : null}\r\n {filterSettings.length !== 0 ||\r\n (dataSelectionOptions || []).length !== 0 ||\r\n (advancedDataSelectionOptions || []).length !== 0 ||\r\n highlightDataPointSettings ? (\r\n <div className='flex flex-wrap items-start gap-x-4 gap-y-0 w-full'>\r\n {advancedDataSelectionOptions?.map((d, i) => (\r\n <div\r\n style={{\r\n width:\r\n d.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: d.ui !== 'radio' ? 0 : 1,\r\n minWidth: '240px',\r\n }}\r\n className='pb-4'\r\n key={i}\r\n >\r\n <Label className='mb-2'>{d.label || 'Graph by'}</Label>\r\n {d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.options.map(opt => ({\r\n ...opt,\r\n value: opt.label,\r\n }))}\r\n size='sm'\r\n isClearable={false}\r\n isSearchable\r\n variant={uiMode}\r\n controlShouldRenderValue\r\n defaultValue={\r\n d.defaultValue\r\n ? {\r\n ...d.defaultValue,\r\n value: d.defaultValue?.label,\r\n }\r\n : {\r\n ...d.options[0],\r\n value: d.options[0].label,\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n setAdvancedGraphSettings(el?.graphSettings || {});\r\n setGraphConfig(el?.dataConfiguration);\r\n }}\r\n />\r\n ) : (\r\n <RadioGroup\r\n defaultValue={d.defaultValue?.label || d.options[0].label}\r\n variant={uiMode}\r\n onValueChange={el => {\r\n const selectedOption =\r\n d.options[d.options.findIndex(opt => opt.label === el)];\r\n setAdvancedGraphSettings(selectedOption.graphSettings || {});\r\n setGraphConfig(selectedOption.dataConfiguration);\r\n }}\r\n >\r\n {d.options.map((el, j) => (\r\n <RadioGroupItem label={el.label} value={el.label} key={j} />\r\n ))}\r\n </RadioGroup>\r\n )}\r\n </div>\r\n ))}\r\n {dataSelectionOptions?.map((d, i) => (\r\n <div\r\n style={{\r\n width:\r\n d.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: d.ui !== 'radio' ? 0 : 1,\r\n minWidth: '240px',\r\n }}\r\n className='pb-4'\r\n key={i}\r\n >\r\n <Label className='mb-2'>{d.label || `Visualize ${d.chartConfigId} by`}</Label>\r\n {!checkIfMultiple(d.chartConfigId, graphConfig || []) ? (\r\n d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.allowedColumnIds}\r\n size='sm'\r\n isClearable={false}\r\n isSearchable\r\n variant={uiMode}\r\n controlShouldRenderValue\r\n defaultValue={\r\n graphDataConfiguration\r\n ? d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(\r\n j =>\r\n j.value ===\r\n (graphDataConfiguration[\r\n graphDataConfiguration.findIndex(\r\n el => el.chartConfigId === d.chartConfigId,\r\n )\r\n ].columnId as string),\r\n )\r\n ]\r\n : undefined\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n const newGraphConfig = {\r\n columnId: el?.value as string,\r\n chartConfigId: d.chartConfigId,\r\n };\r\n const updatedConfig = graphConfig?.map(item =>\r\n item.chartConfigId === newGraphConfig.chartConfigId\r\n ? newGraphConfig\r\n : item,\r\n );\r\n setAdvancedGraphSettings(\r\n getGraphSettings(dataSelectionOptions, updatedConfig),\r\n );\r\n setGraphConfig(updatedConfig);\r\n }}\r\n />\r\n ) : (\r\n <RadioGroup\r\n variant={uiMode}\r\n defaultValue={\r\n graphDataConfiguration\r\n ? d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(\r\n j =>\r\n j.value ===\r\n (graphDataConfiguration[\r\n graphDataConfiguration.findIndex(\r\n el => el.chartConfigId === d.chartConfigId,\r\n )\r\n ].columnId as string),\r\n )\r\n ].label\r\n : ''\r\n }\r\n onValueChange={el => {\r\n const selectedOption =\r\n d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(opt => opt.label === el)\r\n ];\r\n const newGraphConfig = {\r\n columnId: selectedOption.value,\r\n chartConfigId: d.chartConfigId,\r\n };\r\n const updatedConfig = graphConfig?.map(item =>\r\n item.chartConfigId === newGraphConfig.chartConfigId\r\n ? newGraphConfig\r\n : item,\r\n );\r\n setAdvancedGraphSettings(\r\n getGraphSettings(dataSelectionOptions, updatedConfig),\r\n );\r\n setGraphConfig(updatedConfig);\r\n }}\r\n >\r\n {d.allowedColumnIds.map((el, j) => (\r\n <RadioGroupItem label={el.label} value={el.label} key={j} />\r\n ))}\r\n </RadioGroup>\r\n )\r\n ) : d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.allowedColumnIds}\r\n size='sm'\r\n isMulti\r\n isSearchable\r\n variant={uiMode}\r\n controlShouldRenderValue\r\n defaultValue={\r\n graphDataConfiguration\r\n ? (\r\n graphDataConfiguration[\r\n graphDataConfiguration.findIndex(\r\n el => el.chartConfigId === d.chartConfigId,\r\n )\r\n ].columnId as string[]\r\n ).map(\r\n el =>\r\n d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(j => j.value === el)\r\n ],\r\n )\r\n : undefined\r\n }\r\n filterOption={createFilter(filterConfig)}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n const newGraphConfig = {\r\n columnId: (el || []).map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (item: any) => item.value,\r\n ) as string[],\r\n chartConfigId: d.chartConfigId,\r\n };\r\n const updatedConfig = graphConfig?.map(item =>\r\n item.chartConfigId === newGraphConfig.chartConfigId\r\n ? newGraphConfig\r\n : item,\r\n );\r\n setGraphConfig(updatedConfig);\r\n }}\r\n />\r\n ) : (\r\n <CheckboxGroup\r\n variant={uiMode}\r\n defaultValue={\r\n graphDataConfiguration\r\n ? (\r\n graphDataConfiguration[\r\n graphDataConfiguration.findIndex(\r\n el => el.chartConfigId === d.chartConfigId,\r\n )\r\n ].columnId as string[]\r\n )\r\n .map(\r\n el =>\r\n d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(j => j.value === el)\r\n ],\r\n )\r\n .map(el => el.value)\r\n : []\r\n }\r\n onValueChange={el => {\r\n const newGraphConfig = {\r\n columnId: el || [],\r\n chartConfigId: d.chartConfigId,\r\n };\r\n const updatedConfig = graphConfig?.map(item =>\r\n item.chartConfigId === newGraphConfig.chartConfigId\r\n ? newGraphConfig\r\n : item,\r\n );\r\n setGraphConfig(updatedConfig);\r\n }}\r\n >\r\n {d.allowedColumnIds.map((el, j) => (\r\n <CheckboxGroupItem label={el.label} value={el.label} key={j} />\r\n ))}\r\n </CheckboxGroup>\r\n )}\r\n </div>\r\n ))}\r\n {filterSettings?.map((d, i) => (\r\n <div\r\n style={{\r\n width:\r\n d.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n minWidth: '240px',\r\n }}\r\n className='pb-4'\r\n key={i}\r\n >\r\n <Label className='mb-2'>{d.label}</Label>\r\n {d.singleSelect ? (\r\n <DropdownSelect\r\n options={d.availableValues}\r\n variant={uiMode}\r\n isClearable={d.clearable === undefined ? true : d.clearable}\r\n isSearchable\r\n controlShouldRenderValue\r\n filterOption={createFilter(filterConfig)}\r\n onChange={el => {\r\n handleFilterChange(d.filter, el);\r\n }}\r\n value={d.value}\r\n defaultValue={d.defaultValue}\r\n />\r\n ) : (\r\n <>\r\n {d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.availableValues}\r\n variant={uiMode}\r\n size='sm'\r\n isMulti\r\n isClearable={d.clearable === undefined ? true : d.clearable}\r\n isSearchable\r\n controlShouldRenderValue\r\n filterOption={createFilter(filterConfig)}\r\n onChange={el => {\r\n handleFilterChange(d.filter, el);\r\n }}\r\n value={d.value}\r\n defaultValue={d.defaultValue}\r\n />\r\n ) : (\r\n <CheckboxGroup\r\n variant={uiMode}\r\n defaultValue={\r\n d.defaultValue\r\n ? (\r\n d.defaultValue as {\r\n value: string | number;\r\n label: string | number;\r\n }[]\r\n ).map(el => `${el.value}`)\r\n : []\r\n }\r\n value={\r\n d.value\r\n ? (\r\n d.value as {\r\n value: string | number;\r\n label: string | number;\r\n }[]\r\n ).map(el => `${el.value}`)\r\n : undefined\r\n }\r\n onValueChange={el => {\r\n handleFilterChange(\r\n d.filter,\r\n d.availableValues.filter(v => el.indexOf(`${v.value}`) !== -1),\r\n );\r\n }}\r\n >\r\n {d.availableValues.map((el, j) => (\r\n <CheckboxGroupItem\r\n label={`${el.label}`}\r\n value={`${el.value}`}\r\n key={j}\r\n />\r\n ))}\r\n </CheckboxGroup>\r\n )}\r\n {d.allowSelectAll ? (\r\n <button\r\n type='button'\r\n className='bg-transparent border-0 p-0 mt-2 cursor-pointer text-primary-blue-600 dark:text-primary-blue-400'\r\n onClick={() => {\r\n handleFilterChange(d.filter, d.availableValues);\r\n }}\r\n >\r\n Select all options\r\n </button>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n ))}\r\n {highlightDataPointSettings ? (\r\n <div\r\n style={{\r\n width:\r\n highlightDataPointSettings.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n minWidth: '240px',\r\n }}\r\n className='pb-4'\r\n >\r\n <Label className='mb-2'>\r\n {highlightDataPointSettings.label || 'Highlight data'}\r\n </Label>\r\n <DropdownSelect\r\n options={highlightedDataPointOptions}\r\n variant={uiMode}\r\n size='sm'\r\n isMulti\r\n isClearable\r\n isSearchable\r\n controlShouldRenderValue\r\n filterOption={createFilter(filterConfig)}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n setHighlightedDataPointList(el?.map((d: any) => d.value));\r\n }}\r\n value={highlightedDataPointList?.map(d => ({\r\n label: d,\r\n value: d,\r\n }))}\r\n defaultValue={highlightDataPointSettings.defaultValues?.map(d => ({\r\n label: d,\r\n value: d,\r\n }))}\r\n />\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n <GraphEl\r\n graph={graphType}\r\n graphData={graphData}\r\n graphDataConfiguration={graphConfig}\r\n debugMode={debugMode}\r\n readableHeader={readableHeader || []}\r\n updateFilters={updateFilters}\r\n settings={{\r\n ...(graphSettings || {}),\r\n ...advancedGraphSettings,\r\n graphTitle: undefined,\r\n graphDescription: undefined,\r\n graphDownload: false,\r\n dataDownload: false,\r\n backgroundColor: undefined,\r\n width: undefined,\r\n height: undefined,\r\n relativeHeight: undefined,\r\n minHeight: undefined,\r\n padding: '0',\r\n theme: graphSettings?.theme,\r\n ...(highlightedDataPointList\r\n ? {\r\n highlightedDataPoints: highlightedDataPointList,\r\n highlightedIds: highlightedDataPointList?.map(d => `${d}`),\r\n highlightedLines: highlightedDataPointList?.map(d => d),\r\n }\r\n : {}),\r\n }}\r\n />\r\n </>\r\n ) : (\r\n <div className='w-full flex justify-center p-4'>\r\n <Spinner />\r\n </div>\r\n )}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["addMinAndMax","config","findIndex","d","chartConfigId","configTemp","push","columnId","getGraphSettings","dataSelectionOptions","updatedConfig","updatedSettings","map","c","indx","opt","allowedValIndx","allowedColumnIds","col","value","graphSettings","Object","assign","SingleGraphDashboard","props","dataSettings","filters","graphType","dataTransform","graphDataConfiguration","dataFilters","debugMode","advancedDataSelectionOptions","readableHeader","noOfFiltersPerRow","updateFilters","uiMode","highlightDataPointSettings","filteredData","setFilteredData","useState","undefined","data","setData","graphConfig","setGraphConfig","advancedGraphSettings","setAdvancedGraphSettings","highlightedDataPointList","setHighlightedDataPointList","highlightedDataPointOptions","setHighlightedDataPointOption","graphParentDiv","useRef","prevGraphDataConfigRef","filterSettings","setFilterSettings","filterConfig","ignoreCase","ignoreAccents","trim","updateFiltersEvent","useEffectEvent","filterSettingsTemp","el","filter","column","label","singleSelect","clearable","defaultValue","transformDefaultValue","availableValues","getUniqValue","v","excludeValues","includes","allowSelectAll","width","useEffect","dataFromFile","dataURL","fileType","fetchAndParseJSON","columnsToArray","dataTransformation","fetchAndTransformDataFromAPI","apiHeaders","fetchAndParseCSV","delimiter","fetchAndParseMultipleDataSources","idColumnTitle","transformColumnsToArray","error","console","fetchData","filteredDataEvent","length","result","item","every","flattenDeep","intersection","updateHighlightedDataPointOptions","isEqual","current","handleFilterChange","values","prev","f","graphData","transformDataForGraph","transformDataForAggregation","filterData","keyColumn","aggregationColumnsSetting","jsx","GraphContainer","classNames","graphContainer","styles","graphID","ariaLabel","backgroundColor","theme","language","height","padding","minHeight","relativeHeight","graphList","geoHubMapPresentation","indexOf","jsxs","Fragment","graphTitle","graphDescription","graphDownload","dataDownload","GraphHeader","title","description","i","flexGrow","flexShrink","ui","minWidth","Label","DropdownSelect","options","dataConfiguration","RadioGroup","selectedOption","j","RadioGroupItem","checkIfMultiple","createFilter","newGraphConfig","CheckboxGroup","CheckboxGroupItem","defaultValues","GraphEl","highlightedDataPoints","highlightedIds","highlightedLines","Spinner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SingleGraphDashboard.cjs","sources":["../src/Components/Dashboard/SingleGraphDashboard.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useRef, useState } from 'react';\r\nimport intersection from 'lodash.intersection';\r\nimport flattenDeep from 'lodash.flattendeep';\r\nimport isEqual from 'fast-deep-equal';\r\nimport { createFilter, DropdownSelect } from '@undp/design-system-react/DropdownSelect';\r\nimport { CheckboxGroup, CheckboxGroupItem } from '@undp/design-system-react/CheckboxGroup';\r\nimport { RadioGroup, RadioGroupItem } from '@undp/design-system-react/RadioGroup';\r\nimport { Spinner } from '@undp/design-system-react/Spinner';\r\nimport { Label } from '@undp/design-system-react/Label';\r\n\r\nimport { GraphContainer } from '../Elements/GraphContainer';\r\n\r\nimport GraphEl from './GraphEl';\r\n\r\nimport {\r\n AdvancedDataSelectionDataType,\r\n AggregationSettingsDataType,\r\n DataFilterDataType,\r\n DataSelectionDataType,\r\n DataSettingsDataType,\r\n FilterSettingsDataType,\r\n FilterUiSettingsDataType,\r\n GraphConfigurationDataType,\r\n GraphSettingsDataType,\r\n GraphType,\r\n HighlightDataPointSettingsDataType,\r\n} from '@/Types';\r\nimport {\r\n fetchAndParseCSV,\r\n fetchAndParseJSON,\r\n fetchAndParseMultipleDataSources,\r\n fetchAndTransformDataFromAPI,\r\n} from '@/Utils/fetchAndParseData';\r\nimport { transformDataForGraph } from '@/Utils/transformData/transformDataForGraph';\r\nimport { getUniqValue } from '@/Utils/getUniqValue';\r\nimport { transformDataForAggregation } from '@/Utils/transformData/transformDataForAggregation';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { filterData } from '@/Utils/transformData/filterData';\r\nimport { checkIfMultiple } from '@/Utils/checkIfMultiple';\r\nimport { transformColumnsToArray } from '@/Utils/transformData/transformColumnsToArray';\r\nimport { graphList } from '@/Utils/getGraphList';\r\nimport { transformDefaultValue } from '@/Utils/transformDataForSelect';\r\n\r\ninterface Props {\r\n graphSettings?: GraphSettingsDataType;\r\n readableHeader?: {\r\n value: string;\r\n label: string;\r\n }[];\r\n dataSettings: DataSettingsDataType;\r\n filters?: FilterUiSettingsDataType[];\r\n highlightDataPointSettings?: HighlightDataPointSettingsDataType;\r\n noOfFiltersPerRow?: number;\r\n graphType: GraphType;\r\n dataTransform?: {\r\n keyColumn: string;\r\n aggregationColumnsSetting?: AggregationSettingsDataType[];\r\n };\r\n dataFilters?: DataFilterDataType[];\r\n graphDataConfiguration?: GraphConfigurationDataType[];\r\n dataSelectionOptions?: DataSelectionDataType[];\r\n advancedDataSelectionOptions?: AdvancedDataSelectionDataType[];\r\n debugMode?: boolean;\r\n uiMode?: 'light' | 'normal';\r\n updateFilters?: (_d: string) => void;\r\n}\r\n\r\nconst addMinAndMax = (config: GraphConfigurationDataType[]) => {\r\n if (\r\n config.findIndex(d => d.chartConfigId === 'yMin') !== -1 &&\r\n config.findIndex(d => d.chartConfigId === 'yMax') !== -1\r\n )\r\n return config;\r\n const configTemp = [...config];\r\n if (config.findIndex(d => d.chartConfigId === 'yMin') === -1) {\r\n configTemp.push({\r\n chartConfigId: 'yMin',\r\n columnId: `${config[config.findIndex(d => d.chartConfigId === 'y')].columnId}Min`,\r\n });\r\n }\r\n if (config.findIndex(d => d.chartConfigId === 'yMax') === -1) {\r\n configTemp.push({\r\n chartConfigId: 'yMax',\r\n columnId: `${config[config.findIndex(d => d.chartConfigId === 'y')].columnId}Max`,\r\n });\r\n }\r\n return configTemp;\r\n};\r\n\r\nconst getGraphSettings = (\r\n dataSelectionOptions: DataSelectionDataType[],\r\n updatedConfig?: GraphConfigurationDataType[],\r\n) => {\r\n const updatedSettings =\r\n updatedConfig?.map(c => {\r\n const indx = dataSelectionOptions?.findIndex(opt => opt.chartConfigId === c.chartConfigId);\r\n if (indx === -1) return {};\r\n const allowedValIndx = dataSelectionOptions[indx]?.allowedColumnIds?.findIndex(\r\n col => col.value === c.columnId,\r\n );\r\n if (allowedValIndx === -1) return {};\r\n return dataSelectionOptions[indx].allowedColumnIds[allowedValIndx].graphSettings || {};\r\n }) || [];\r\n return Object.assign({}, ...updatedSettings);\r\n};\r\n\r\nexport function SingleGraphDashboard(props: Props) {\r\n const {\r\n graphSettings,\r\n dataSettings,\r\n filters,\r\n graphType,\r\n dataTransform,\r\n graphDataConfiguration,\r\n dataFilters,\r\n debugMode,\r\n dataSelectionOptions,\r\n advancedDataSelectionOptions,\r\n readableHeader,\r\n noOfFiltersPerRow = 4,\r\n updateFilters,\r\n uiMode = 'normal',\r\n highlightDataPointSettings,\r\n } = props;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [filteredData, setFilteredData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [data, setData] = useState<any>(undefined);\r\n const [graphConfig, setGraphConfig] = useState<GraphConfigurationDataType[] | undefined>(\r\n graphDataConfiguration,\r\n );\r\n const [advancedGraphSettings, setAdvancedGraphSettings] = useState<GraphSettingsDataType>({});\r\n const [highlightedDataPointList, setHighlightedDataPointList] = useState<\r\n (string | number)[] | undefined\r\n >(undefined);\r\n const [highlightedDataPointOptions, setHighlightedDataPointOption] = useState<\r\n { label: string | number; value: string | number }[]\r\n >([]);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n const prevGraphDataConfigRef = useRef<GraphConfigurationDataType[] | undefined>(\r\n graphDataConfiguration,\r\n );\r\n const [filterSettings, setFilterSettings] = useState<FilterSettingsDataType[]>([]);\r\n\r\n const filterConfig = {\r\n ignoreCase: true,\r\n ignoreAccents: true,\r\n trim: true,\r\n };\r\n\r\n const updateFiltersEvent = useEffectEvent(() => {\r\n const filterSettingsTemp = (filters || []).map(el => ({\r\n filter: el.column,\r\n label: el.label || `Filter by ${el.column}`,\r\n singleSelect: el.singleSelect,\r\n clearable: el.clearable,\r\n ui: el.ui,\r\n defaultValue: transformDefaultValue(el.defaultValue),\r\n value: transformDefaultValue(el.defaultValue),\r\n availableValues: getUniqValue(data, el.column)\r\n .filter(v => !el.excludeValues?.includes(`${v}`))\r\n .map(v => ({ value: v, label: v })),\r\n allowSelectAll: el.allowSelectAll,\r\n width: el.width,\r\n }));\r\n setFilterSettings(filterSettingsTemp);\r\n });\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const dataFromFile = dataSettings.dataURL\r\n ? typeof dataSettings.dataURL === 'string'\r\n ? dataSettings.fileType === 'json'\r\n ? await fetchAndParseJSON(\r\n dataSettings.dataURL,\r\n dataSettings.columnsToArray,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : dataSettings.fileType === 'api'\r\n ? await fetchAndTransformDataFromAPI(\r\n dataSettings.dataURL,\r\n dataSettings.apiHeaders,\r\n dataSettings.columnsToArray,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : await fetchAndParseCSV(\r\n dataSettings.dataURL,\r\n dataSettings.dataTransformation,\r\n dataSettings.columnsToArray,\r\n debugMode,\r\n dataSettings.delimiter,\r\n true,\r\n )\r\n : await fetchAndParseMultipleDataSources(\r\n dataSettings.dataURL,\r\n dataSettings.idColumnTitle,\r\n )\r\n : await transformColumnsToArray(dataSettings.data, dataSettings.columnsToArray);\r\n setData(dataFromFile);\r\n } catch (error) {\r\n console.error('Data fetching error:', error);\r\n }\r\n };\r\n fetchData();\r\n updateFiltersEvent();\r\n }, [dataSettings, debugMode]);\r\n\r\n useEffect(() => {\r\n updateFiltersEvent();\r\n }, [filters, data]);\r\n\r\n const filteredDataEvent = useEffectEvent(() => {\r\n if (!data || filterSettings.length === 0) setFilteredData(data);\r\n else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const result = data.filter((item: any) =>\r\n filterSettings.every(filter =>\r\n filter.value && flattenDeep([filter.value]).length > 0\r\n ? intersection(\r\n flattenDeep([item[filter.filter]]),\r\n flattenDeep([filter.value]).map(el => el.value),\r\n ).length > 0\r\n : true,\r\n ),\r\n );\r\n setFilteredData(result);\r\n }\r\n });\r\n useEffect(() => {\r\n filteredDataEvent();\r\n }, [filterSettings, data]);\r\n\r\n useEffect(() => {\r\n if (dataSelectionOptions)\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setAdvancedGraphSettings(getGraphSettings(dataSelectionOptions, graphDataConfiguration));\r\n }, [dataSelectionOptions, graphDataConfiguration]);\r\n\r\n const updateHighlightedDataPointOptions = useEffectEvent(() => {\r\n if (highlightDataPointSettings?.column && filteredData)\r\n setHighlightedDataPointOption(\r\n getUniqValue(filteredData, highlightDataPointSettings.column)\r\n .filter(v => !highlightDataPointSettings?.excludeValues?.includes(`${v}`))\r\n .map(d => ({ value: d, label: d })),\r\n );\r\n });\r\n\r\n useEffect(() => {\r\n updateHighlightedDataPointOptions();\r\n }, [highlightDataPointSettings]);\r\n\r\n useEffect(() => {\r\n if (!isEqual(prevGraphDataConfigRef.current, graphDataConfiguration)) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setGraphConfig(graphDataConfiguration);\r\n prevGraphDataConfigRef.current = graphDataConfiguration;\r\n }\r\n }, [graphDataConfiguration]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const handleFilterChange = (filter: string, values: any) => {\r\n setFilterSettings(prev => prev.map(f => (f.filter === filter ? { ...f, value: values } : f)));\r\n };\r\n\r\n const graphData = !data\r\n ? undefined\r\n : transformDataForGraph(\r\n dataTransform\r\n ? transformDataForAggregation(\r\n filterData(data, dataFilters || []),\r\n dataTransform.keyColumn,\r\n dataTransform.aggregationColumnsSetting,\r\n )\r\n : filterData(data, dataFilters || []),\r\n graphType,\r\n graphType === 'lineChartWithConfidenceInterval' && graphConfig\r\n ? addMinAndMax(graphConfig)\r\n : graphConfig,\r\n );\r\n return (\r\n <GraphContainer\r\n className={graphSettings?.classNames?.graphContainer}\r\n style={graphSettings?.styles?.graphContainer}\r\n id={graphSettings?.graphID}\r\n ref={graphParentDiv}\r\n aria-label={graphSettings?.ariaLabel}\r\n backgroundColor={graphSettings?.backgroundColor ?? false}\r\n theme={graphSettings?.theme || 'light'}\r\n language={graphSettings?.language || 'en'}\r\n width={graphSettings?.width}\r\n height={graphSettings?.height}\r\n padding={graphSettings?.padding}\r\n minHeight={graphSettings?.minHeight}\r\n relativeHeight={graphSettings?.relativeHeight}\r\n >\r\n {data ||\r\n graphList\r\n .filter(el => el.geoHubMapPresentation)\r\n .map(el => el.graphID)\r\n .indexOf(graphType) !== -1 ? (\r\n <>\r\n {advancedGraphSettings?.graphTitle ||\r\n advancedGraphSettings?.graphDescription ||\r\n graphSettings?.graphTitle ||\r\n graphSettings?.graphDescription ||\r\n graphSettings?.graphDownload ||\r\n graphSettings?.dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: advancedGraphSettings?.styles?.title || graphSettings?.styles?.title,\r\n description:\r\n advancedGraphSettings?.styles?.description || graphSettings?.styles?.description,\r\n }}\r\n classNames={{\r\n title: advancedGraphSettings?.classNames?.title || graphSettings?.classNames?.title,\r\n description:\r\n advancedGraphSettings?.classNames?.description ||\r\n graphSettings?.classNames?.description,\r\n }}\r\n graphTitle={advancedGraphSettings?.graphTitle || graphSettings?.graphTitle}\r\n graphDescription={\r\n advancedGraphSettings?.graphDescription || graphSettings?.graphDescription\r\n }\r\n width={advancedGraphSettings?.width || graphSettings?.width}\r\n graphDownload={graphSettings?.graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n graphSettings?.dataDownload && data ? (data.length > 0 ? data : null) : null\r\n }\r\n />\r\n ) : null}\r\n {filterSettings.length !== 0 ||\r\n (dataSelectionOptions || []).length !== 0 ||\r\n (advancedDataSelectionOptions || []).length !== 0 ||\r\n highlightDataPointSettings ? (\r\n <div className='flex flex-wrap items-start gap-x-4 gap-y-0 w-full'>\r\n {advancedDataSelectionOptions?.map((d, i) => (\r\n <div\r\n style={{\r\n width:\r\n d.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: d.ui !== 'radio' ? 0 : 1,\r\n minWidth: '240px',\r\n }}\r\n className='pb-4'\r\n key={i}\r\n >\r\n <Label className='mb-2'>{d.label || 'Graph by'}</Label>\r\n {d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.options.map(opt => ({\r\n ...opt,\r\n value: opt.label,\r\n }))}\r\n size='sm'\r\n isClearable={false}\r\n isSearchable\r\n variant={uiMode}\r\n controlShouldRenderValue\r\n defaultValue={\r\n d.defaultValue\r\n ? {\r\n ...d.defaultValue,\r\n value: d.defaultValue?.label,\r\n }\r\n : {\r\n ...d.options[0],\r\n value: d.options[0].label,\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n setAdvancedGraphSettings(el?.graphSettings || {});\r\n setGraphConfig(el?.dataConfiguration);\r\n }}\r\n />\r\n ) : (\r\n <RadioGroup\r\n defaultValue={d.defaultValue?.label || d.options[0].label}\r\n variant={uiMode}\r\n onValueChange={el => {\r\n const selectedOption =\r\n d.options[d.options.findIndex(opt => opt.label === el)];\r\n setAdvancedGraphSettings(selectedOption.graphSettings || {});\r\n setGraphConfig(selectedOption.dataConfiguration);\r\n }}\r\n >\r\n {d.options.map((el, j) => (\r\n <RadioGroupItem label={el.label} value={el.label} key={j} />\r\n ))}\r\n </RadioGroup>\r\n )}\r\n </div>\r\n ))}\r\n {dataSelectionOptions?.map((d, i) => (\r\n <div\r\n style={{\r\n width:\r\n d.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: d.ui !== 'radio' ? 0 : 1,\r\n minWidth: '240px',\r\n }}\r\n className='pb-4'\r\n key={i}\r\n >\r\n <Label className='mb-2'>{d.label || `Visualize ${d.chartConfigId} by`}</Label>\r\n {!checkIfMultiple(d.chartConfigId, graphConfig || []) ? (\r\n d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.allowedColumnIds}\r\n size='sm'\r\n isClearable={false}\r\n isSearchable\r\n variant={uiMode}\r\n controlShouldRenderValue\r\n defaultValue={\r\n graphDataConfiguration\r\n ? d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(\r\n j =>\r\n j.value ===\r\n (graphDataConfiguration[\r\n graphDataConfiguration.findIndex(\r\n el => el.chartConfigId === d.chartConfigId,\r\n )\r\n ].columnId as string),\r\n )\r\n ]\r\n : undefined\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n const newGraphConfig = {\r\n columnId: el?.value as string,\r\n chartConfigId: d.chartConfigId,\r\n };\r\n const updatedConfig = graphConfig?.map(item =>\r\n item.chartConfigId === newGraphConfig.chartConfigId\r\n ? newGraphConfig\r\n : item,\r\n );\r\n setAdvancedGraphSettings(\r\n getGraphSettings(dataSelectionOptions, updatedConfig),\r\n );\r\n setGraphConfig(updatedConfig);\r\n }}\r\n />\r\n ) : (\r\n <RadioGroup\r\n variant={uiMode}\r\n defaultValue={\r\n graphDataConfiguration\r\n ? d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(\r\n j =>\r\n j.value ===\r\n (graphDataConfiguration[\r\n graphDataConfiguration.findIndex(\r\n el => el.chartConfigId === d.chartConfigId,\r\n )\r\n ].columnId as string),\r\n )\r\n ].label\r\n : ''\r\n }\r\n onValueChange={el => {\r\n const selectedOption =\r\n d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(opt => opt.label === el)\r\n ];\r\n const newGraphConfig = {\r\n columnId: selectedOption.value,\r\n chartConfigId: d.chartConfigId,\r\n };\r\n const updatedConfig = graphConfig?.map(item =>\r\n item.chartConfigId === newGraphConfig.chartConfigId\r\n ? newGraphConfig\r\n : item,\r\n );\r\n setAdvancedGraphSettings(\r\n getGraphSettings(dataSelectionOptions, updatedConfig),\r\n );\r\n setGraphConfig(updatedConfig);\r\n }}\r\n >\r\n {d.allowedColumnIds.map((el, j) => (\r\n <RadioGroupItem label={el.label} value={el.label} key={j} />\r\n ))}\r\n </RadioGroup>\r\n )\r\n ) : d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.allowedColumnIds}\r\n size='sm'\r\n isMulti\r\n isSearchable\r\n variant={uiMode}\r\n controlShouldRenderValue\r\n defaultValue={\r\n graphDataConfiguration\r\n ? (\r\n graphDataConfiguration[\r\n graphDataConfiguration.findIndex(\r\n el => el.chartConfigId === d.chartConfigId,\r\n )\r\n ].columnId as string[]\r\n ).map(\r\n el =>\r\n d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(j => j.value === el)\r\n ],\r\n )\r\n : undefined\r\n }\r\n filterOption={createFilter(filterConfig)}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n const newGraphConfig = {\r\n columnId: (el || []).map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (item: any) => item.value,\r\n ) as string[],\r\n chartConfigId: d.chartConfigId,\r\n };\r\n const updatedConfig = graphConfig?.map(item =>\r\n item.chartConfigId === newGraphConfig.chartConfigId\r\n ? newGraphConfig\r\n : item,\r\n );\r\n setGraphConfig(updatedConfig);\r\n }}\r\n />\r\n ) : (\r\n <CheckboxGroup\r\n variant={uiMode}\r\n defaultValue={\r\n graphDataConfiguration\r\n ? (\r\n graphDataConfiguration[\r\n graphDataConfiguration.findIndex(\r\n el => el.chartConfigId === d.chartConfigId,\r\n )\r\n ].columnId as string[]\r\n )\r\n .map(\r\n el =>\r\n d.allowedColumnIds[\r\n d.allowedColumnIds.findIndex(j => j.value === el)\r\n ],\r\n )\r\n .map(el => el.value)\r\n : []\r\n }\r\n onValueChange={el => {\r\n const newGraphConfig = {\r\n columnId: el || [],\r\n chartConfigId: d.chartConfigId,\r\n };\r\n const updatedConfig = graphConfig?.map(item =>\r\n item.chartConfigId === newGraphConfig.chartConfigId\r\n ? newGraphConfig\r\n : item,\r\n );\r\n setGraphConfig(updatedConfig);\r\n }}\r\n >\r\n {d.allowedColumnIds.map((el, j) => (\r\n <CheckboxGroupItem label={el.label} value={el.label} key={j} />\r\n ))}\r\n </CheckboxGroup>\r\n )}\r\n </div>\r\n ))}\r\n {filterSettings?.map((d, i) => (\r\n <div\r\n style={{\r\n width:\r\n d.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n minWidth: '240px',\r\n }}\r\n className='pb-4'\r\n key={i}\r\n >\r\n <Label className='mb-2'>{d.label}</Label>\r\n {d.singleSelect ? (\r\n d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.availableValues}\r\n variant={uiMode}\r\n isClearable={d.clearable === undefined ? true : d.clearable}\r\n isSearchable\r\n controlShouldRenderValue\r\n filterOption={createFilter(filterConfig)}\r\n onChange={el => {\r\n handleFilterChange(d.filter, el);\r\n }}\r\n value={d.value}\r\n defaultValue={d.defaultValue}\r\n />\r\n ) : (\r\n <RadioGroup\r\n variant={uiMode}\r\n defaultValue={(d.defaultValue as { value: string; label: string }).value}\r\n onValueChange={el => {\r\n handleFilterChange(\r\n d.filter,\r\n d.availableValues.filter(v => v.value === el),\r\n );\r\n }}\r\n >\r\n {d.availableValues.map((el, j) => (\r\n <RadioGroupItem label={`${el.label}`} value={`${el.value}`} key={j} />\r\n ))}\r\n </RadioGroup>\r\n )\r\n ) : (\r\n <>\r\n {d.ui !== 'radio' ? (\r\n <DropdownSelect\r\n options={d.availableValues}\r\n variant={uiMode}\r\n size='sm'\r\n isMulti\r\n isClearable={d.clearable === undefined ? true : d.clearable}\r\n isSearchable\r\n controlShouldRenderValue\r\n filterOption={createFilter(filterConfig)}\r\n onChange={el => {\r\n handleFilterChange(d.filter, el);\r\n }}\r\n value={d.value}\r\n defaultValue={d.defaultValue}\r\n />\r\n ) : (\r\n <CheckboxGroup\r\n variant={uiMode}\r\n defaultValue={\r\n d.defaultValue\r\n ? (\r\n d.defaultValue as {\r\n value: string | number;\r\n label: string | number;\r\n }[]\r\n ).map(el => `${el.value}`)\r\n : []\r\n }\r\n value={\r\n d.value\r\n ? (\r\n d.value as {\r\n value: string | number;\r\n label: string | number;\r\n }[]\r\n ).map(el => `${el.value}`)\r\n : undefined\r\n }\r\n onValueChange={el => {\r\n handleFilterChange(\r\n d.filter,\r\n d.availableValues.filter(v => el.indexOf(`${v.value}`) !== -1),\r\n );\r\n }}\r\n >\r\n {d.availableValues.map((el, j) => (\r\n <CheckboxGroupItem\r\n label={`${el.label}`}\r\n value={`${el.value}`}\r\n key={j}\r\n />\r\n ))}\r\n </CheckboxGroup>\r\n )}\r\n {d.allowSelectAll ? (\r\n <button\r\n type='button'\r\n className='bg-transparent border-0 p-0 mt-2 cursor-pointer text-primary-blue-600 dark:text-primary-blue-400'\r\n onClick={() => {\r\n handleFilterChange(d.filter, d.availableValues);\r\n }}\r\n >\r\n Select all options\r\n </button>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n ))}\r\n {highlightDataPointSettings ? (\r\n <div\r\n style={{\r\n width:\r\n highlightDataPointSettings.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n minWidth: '240px',\r\n }}\r\n className='pb-4'\r\n >\r\n <Label className='mb-2'>\r\n {highlightDataPointSettings.label || 'Highlight data'}\r\n </Label>\r\n <DropdownSelect\r\n options={highlightedDataPointOptions}\r\n variant={uiMode}\r\n size='sm'\r\n isMulti\r\n isClearable\r\n isSearchable\r\n controlShouldRenderValue\r\n filterOption={createFilter(filterConfig)}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n setHighlightedDataPointList(el?.map((d: any) => d.value));\r\n }}\r\n value={highlightedDataPointList?.map(d => ({\r\n label: d,\r\n value: d,\r\n }))}\r\n defaultValue={highlightDataPointSettings.defaultValues?.map(d => ({\r\n label: d,\r\n value: d,\r\n }))}\r\n />\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n <GraphEl\r\n graph={graphType}\r\n graphData={graphData}\r\n graphDataConfiguration={graphConfig}\r\n debugMode={debugMode}\r\n readableHeader={readableHeader || []}\r\n updateFilters={updateFilters}\r\n settings={{\r\n ...(graphSettings || {}),\r\n ...advancedGraphSettings,\r\n graphTitle: undefined,\r\n graphDescription: undefined,\r\n graphDownload: false,\r\n dataDownload: false,\r\n backgroundColor: undefined,\r\n width: undefined,\r\n height: undefined,\r\n relativeHeight: undefined,\r\n minHeight: undefined,\r\n padding: '0',\r\n theme: graphSettings?.theme,\r\n ...(highlightedDataPointList\r\n ? {\r\n highlightedDataPoints: highlightedDataPointList,\r\n highlightedIds: highlightedDataPointList?.map(d => `${d}`),\r\n highlightedLines: highlightedDataPointList?.map(d => d),\r\n }\r\n : {}),\r\n }}\r\n />\r\n </>\r\n ) : (\r\n <div className='w-full flex justify-center p-4'>\r\n <Spinner />\r\n </div>\r\n )}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["addMinAndMax","config","findIndex","d","chartConfigId","configTemp","push","columnId","getGraphSettings","dataSelectionOptions","updatedConfig","updatedSettings","map","c","indx","opt","allowedValIndx","allowedColumnIds","col","value","graphSettings","Object","assign","SingleGraphDashboard","props","dataSettings","filters","graphType","dataTransform","graphDataConfiguration","dataFilters","debugMode","advancedDataSelectionOptions","readableHeader","noOfFiltersPerRow","updateFilters","uiMode","highlightDataPointSettings","filteredData","setFilteredData","useState","undefined","data","setData","graphConfig","setGraphConfig","advancedGraphSettings","setAdvancedGraphSettings","highlightedDataPointList","setHighlightedDataPointList","highlightedDataPointOptions","setHighlightedDataPointOption","graphParentDiv","useRef","prevGraphDataConfigRef","filterSettings","setFilterSettings","filterConfig","ignoreCase","ignoreAccents","trim","updateFiltersEvent","useEffectEvent","filterSettingsTemp","el","filter","column","label","singleSelect","clearable","ui","defaultValue","transformDefaultValue","availableValues","getUniqValue","v","excludeValues","includes","allowSelectAll","width","useEffect","dataFromFile","dataURL","fileType","fetchAndParseJSON","columnsToArray","dataTransformation","fetchAndTransformDataFromAPI","apiHeaders","fetchAndParseCSV","delimiter","fetchAndParseMultipleDataSources","idColumnTitle","transformColumnsToArray","error","console","fetchData","filteredDataEvent","length","result","item","every","flattenDeep","intersection","updateHighlightedDataPointOptions","isEqual","current","handleFilterChange","values","prev","f","graphData","transformDataForGraph","transformDataForAggregation","filterData","keyColumn","aggregationColumnsSetting","jsx","GraphContainer","classNames","graphContainer","styles","graphID","ariaLabel","backgroundColor","theme","language","height","padding","minHeight","relativeHeight","graphList","geoHubMapPresentation","indexOf","jsxs","Fragment","graphTitle","graphDescription","graphDownload","dataDownload","GraphHeader","title","description","i","flexGrow","flexShrink","minWidth","Label","DropdownSelect","options","dataConfiguration","RadioGroup","selectedOption","j","RadioGroupItem","checkIfMultiple","createFilter","newGraphConfig","CheckboxGroup","CheckboxGroupItem","defaultValues","GraphEl","highlightedDataPoints","highlightedIds","highlightedLines","Spinner"],"mappings":"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"}
|