@sis-cc/dotstatsuite-components 22.0.1 → 22.0.3
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/bridge-d3-react/src/index.js +18 -0
- package/dist/bridge-d3-react/src/index.js.map +1 -0
- package/dist/bridge-d3-react/src/react-chart-factory.js +44 -0
- package/dist/bridge-d3-react/src/react-chart-factory.js.map +1 -0
- package/dist/rules/src/chart/getAxisOptions.js +256 -0
- package/dist/rules/src/chart/getAxisOptions.js.map +1 -0
- package/dist/rules/src/chart/getBaseOptions.js +77 -0
- package/dist/rules/src/chart/getBaseOptions.js.map +1 -0
- package/dist/rules/src/chart/getChartOptions.js +120 -0
- package/dist/rules/src/chart/getChartOptions.js.map +1 -0
- package/dist/rules/src/chart/getGridOptions.js +46 -0
- package/dist/rules/src/chart/getGridOptions.js.map +1 -0
- package/dist/rules/src/chart/getTooltipOptions.js +223 -0
- package/dist/rules/src/chart/getTooltipOptions.js.map +1 -0
- package/dist/rules/src/constants.js +65 -0
- package/dist/rules/src/constants.js.map +1 -0
- package/dist/rules/src/date.js +121 -0
- package/dist/rules/src/date.js.map +1 -0
- package/dist/rules/src/dimension-utils.js +57 -0
- package/dist/rules/src/dimension-utils.js.map +1 -0
- package/dist/rules/src/factories/choro-series.js +68 -0
- package/dist/rules/src/factories/choro-series.js.map +1 -0
- package/dist/rules/src/factories/sample-focus.js +25 -0
- package/dist/rules/src/factories/sample-focus.js.map +1 -0
- package/dist/rules/src/factories/sample-series.js +53 -0
- package/dist/rules/src/factories/sample-series.js.map +1 -0
- package/dist/rules/src/factories/scatter-dimension.js +35 -0
- package/dist/rules/src/factories/scatter-dimension.js.map +1 -0
- package/dist/rules/src/factories/scatter-focus.js +42 -0
- package/dist/rules/src/factories/scatter-focus.js.map +1 -0
- package/dist/rules/src/factories/scatter-series.js +91 -0
- package/dist/rules/src/factories/scatter-series.js.map +1 -0
- package/dist/rules/src/factories/stacked-dimension.js +32 -0
- package/dist/rules/src/factories/stacked-dimension.js.map +1 -0
- package/dist/rules/src/factories/stacked-series.js +188 -0
- package/dist/rules/src/factories/stacked-series.js.map +1 -0
- package/dist/rules/src/factories/symbol-dimension.js +32 -0
- package/dist/rules/src/factories/symbol-dimension.js.map +1 -0
- package/dist/rules/src/factories/symbol-series.js +65 -0
- package/dist/rules/src/factories/symbol-series.js.map +1 -0
- package/dist/rules/src/factories/timeline-focus.js +21 -0
- package/dist/rules/src/factories/timeline-focus.js.map +1 -0
- package/dist/rules/src/factories/timeline-series.js +94 -0
- package/dist/rules/src/factories/timeline-series.js.map +1 -0
- package/dist/rules/src/get-values-enhanced.js +133 -0
- package/dist/rules/src/get-values-enhanced.js.map +1 -0
- package/dist/rules/src/header/getDefaultSubtitle.js +44 -0
- package/dist/rules/src/header/getDefaultSubtitle.js.map +1 -0
- package/dist/rules/src/header/getHeaderUnits.js +21 -0
- package/dist/rules/src/header/getHeaderUnits.js.map +1 -0
- package/dist/rules/src/header/getSubtitleFlags.js +47 -0
- package/dist/rules/src/header/getSubtitleFlags.js.map +1 -0
- package/dist/rules/src/header/getTitleFlags.js +12 -0
- package/dist/rules/src/header/getTitleFlags.js.map +1 -0
- package/dist/rules/src/index.js +379 -0
- package/dist/rules/src/index.js.map +1 -0
- package/dist/rules/src/layout.js +107 -0
- package/dist/rules/src/layout.js.map +1 -0
- package/dist/rules/src/observation-formater.js +86 -0
- package/dist/rules/src/observation-formater.js.map +1 -0
- package/dist/rules/src/preparators/formatValue.js +96 -0
- package/dist/rules/src/preparators/formatValue.js.map +1 -0
- package/dist/rules/src/preparators/getObservations.js +22 -0
- package/dist/rules/src/preparators/getObservations.js.map +1 -0
- package/dist/rules/src/preparators/getReportingYearStart.js +19 -0
- package/dist/rules/src/preparators/getReportingYearStart.js.map +1 -0
- package/dist/rules/src/properties/errors.js +22 -0
- package/dist/rules/src/properties/errors.js.map +1 -0
- package/dist/rules/src/properties/focus.js +72 -0
- package/dist/rules/src/properties/focus.js.map +1 -0
- package/dist/rules/src/properties/getAvailableChartTypes.js +31 -0
- package/dist/rules/src/properties/getAvailableChartTypes.js.map +1 -0
- package/dist/rules/src/properties/getHeaderProps.js +76 -0
- package/dist/rules/src/properties/getHeaderProps.js.map +1 -0
- package/dist/rules/src/properties/getInformationsStateFromNewProps.js +50 -0
- package/dist/rules/src/properties/getInformationsStateFromNewProps.js.map +1 -0
- package/dist/rules/src/properties/getObservationsType.js +28 -0
- package/dist/rules/src/properties/getObservationsType.js.map +1 -0
- package/dist/rules/src/properties/getStringifiedSubtitle.js +9 -0
- package/dist/rules/src/properties/getStringifiedSubtitle.js.map +1 -0
- package/dist/rules/src/properties/index.js +384 -0
- package/dist/rules/src/properties/index.js.map +1 -0
- package/dist/rules/src/properties/linear.js +123 -0
- package/dist/rules/src/properties/linear.js.map +1 -0
- package/dist/rules/src/properties/scatter.js +156 -0
- package/dist/rules/src/properties/scatter.js.map +1 -0
- package/dist/rules/src/properties/stacked.js +96 -0
- package/dist/rules/src/properties/stacked.js.map +1 -0
- package/dist/rules/src/properties/symbol.js +76 -0
- package/dist/rules/src/properties/symbol.js.map +1 -0
- package/dist/rules/src/properties/utils.js +86 -0
- package/dist/rules/src/properties/utils.js.map +1 -0
- package/dist/rules/src/sdmx-data/index.js +38 -0
- package/dist/rules/src/sdmx-data/index.js.map +1 -0
- package/dist/rules/src/table/factories/getCellValue.js +53 -0
- package/dist/rules/src/table/factories/getCellValue.js.map +1 -0
- package/dist/rules/src/v8-transformer.js +174 -0
- package/dist/rules/src/v8-transformer.js.map +1 -0
- package/dist/rules2/src/applyHierarchicalCodesToDim.js +126 -0
- package/dist/rules2/src/applyHierarchicalCodesToDim.js.map +1 -0
- package/dist/rules2/src/combinedValuesDisplay.js +77 -0
- package/dist/rules2/src/combinedValuesDisplay.js.map +1 -0
- package/dist/rules2/src/constants.js +9 -0
- package/dist/rules2/src/constants.js.map +1 -0
- package/dist/rules2/src/duplicateObservations.js +38 -0
- package/dist/rules2/src/duplicateObservations.js.map +1 -0
- package/dist/rules2/src/enhanceObservations.js +98 -0
- package/dist/rules2/src/enhanceObservations.js.map +1 -0
- package/dist/rules2/src/getAttributesSeries.js +39 -0
- package/dist/rules2/src/getAttributesSeries.js.map +1 -0
- package/dist/rules2/src/getCombinationDefinitions.js +50 -0
- package/dist/rules2/src/getCombinationDefinitions.js.map +1 -0
- package/dist/rules2/src/getDataflowAttributes.js +25 -0
- package/dist/rules2/src/getDataflowAttributes.js.map +1 -0
- package/dist/rules2/src/getDataflowTooltipAttributesIds.js +33 -0
- package/dist/rules2/src/getDataflowTooltipAttributesIds.js.map +1 -0
- package/dist/rules2/src/getDimensionValuesIndexes.js +16 -0
- package/dist/rules2/src/getDimensionValuesIndexes.js.map +1 -0
- package/dist/rules2/src/getHCodelistsRefsInData.js +35 -0
- package/dist/rules2/src/getHCodelistsRefsInData.js.map +1 -0
- package/dist/rules2/src/getHeaderCombinations.js +51 -0
- package/dist/rules2/src/getHeaderCombinations.js.map +1 -0
- package/dist/rules2/src/getHeaderCoordinates.js +10 -0
- package/dist/rules2/src/getHeaderCoordinates.js.map +1 -0
- package/dist/rules2/src/getHeaderSubtitle.js +37 -0
- package/dist/rules2/src/getHeaderSubtitle.js.map +1 -0
- package/dist/rules2/src/getHeaderTitle.js +18 -0
- package/dist/rules2/src/getHeaderTitle.js.map +1 -0
- package/dist/rules2/src/getMSDInformations.js +26 -0
- package/dist/rules2/src/getMSDInformations.js.map +1 -0
- package/dist/rules2/src/getManyValuesDimensions.js +37 -0
- package/dist/rules2/src/getManyValuesDimensions.js.map +1 -0
- package/dist/rules2/src/getMetadataCoordinates.js +40 -0
- package/dist/rules2/src/getMetadataCoordinates.js.map +1 -0
- package/dist/rules2/src/getNotDisplayedIds.js +56 -0
- package/dist/rules2/src/getNotDisplayedIds.js.map +1 -0
- package/dist/rules2/src/getOneValueDimensions.js +37 -0
- package/dist/rules2/src/getOneValueDimensions.js.map +1 -0
- package/dist/rules2/src/getSeriesCombinations.js +27 -0
- package/dist/rules2/src/getSeriesCombinations.js.map +1 -0
- package/dist/rules2/src/hasCellMetadata.js +17 -0
- package/dist/rules2/src/hasCellMetadata.js.map +1 -0
- package/dist/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js +60 -0
- package/dist/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js.map +1 -0
- package/dist/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js +38 -0
- package/dist/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js.map +1 -0
- package/dist/rules2/src/index.js +47 -0
- package/dist/rules2/src/index.js.map +1 -0
- package/dist/rules2/src/parseAttributes.js +44 -0
- package/dist/rules2/src/parseAttributes.js.map +1 -0
- package/dist/rules2/src/parseCombinations.js +105 -0
- package/dist/rules2/src/parseCombinations.js.map +1 -0
- package/dist/rules2/src/parseHierarchicalCodelist.js +34 -0
- package/dist/rules2/src/parseHierarchicalCodelist.js.map +1 -0
- package/dist/rules2/src/parseMetadataSeries.js +124 -0
- package/dist/rules2/src/parseMetadataSeries.js.map +1 -0
- package/dist/rules2/src/prepareData.js +78 -0
- package/dist/rules2/src/prepareData.js.map +1 -0
- package/dist/rules2/src/refineAttributes.js +19 -0
- package/dist/rules2/src/refineAttributes.js.map +1 -0
- package/dist/rules2/src/refineDimensions.js +21 -0
- package/dist/rules2/src/refineDimensions.js.map +1 -0
- package/dist/rules2/src/refineTimePeriod.js +130 -0
- package/dist/rules2/src/refineTimePeriod.js.map +1 -0
- package/dist/rules2/src/sdmx3.0DataFormatPatch.js +12 -0
- package/dist/rules2/src/sdmx3.0DataFormatPatch.js.map +1 -0
- package/dist/rules2/src/table/declineObservationsOverAttributes.js +35 -0
- package/dist/rules2/src/table/declineObservationsOverAttributes.js.map +1 -0
- package/dist/rules2/src/table/getCells.js +96 -0
- package/dist/rules2/src/table/getCells.js.map +1 -0
- package/dist/rules2/src/table/getCellsAttributesIds.js +41 -0
- package/dist/rules2/src/table/getCellsAttributesIds.js.map +1 -0
- package/dist/rules2/src/table/getCellsMetadataCoordinates.js +16 -0
- package/dist/rules2/src/table/getCellsMetadataCoordinates.js.map +1 -0
- package/dist/rules2/src/table/getCuratedCells.js +36 -0
- package/dist/rules2/src/table/getCuratedCells.js.map +1 -0
- package/dist/rules2/src/table/getFlagsAndNotes.js +26 -0
- package/dist/rules2/src/table/getFlagsAndNotes.js.map +1 -0
- package/dist/rules2/src/table/getIndexedCombinationsByDisplay.js +19 -0
- package/dist/rules2/src/table/getIndexedCombinationsByDisplay.js.map +1 -0
- package/dist/rules2/src/table/getLayout.js +87 -0
- package/dist/rules2/src/table/getLayout.js.map +1 -0
- package/dist/rules2/src/table/getLayoutData2.js +205 -0
- package/dist/rules2/src/table/getLayoutData2.js.map +1 -0
- package/dist/rules2/src/table/getSortedLayoutIndexes.js +141 -0
- package/dist/rules2/src/table/getSortedLayoutIndexes.js.map +1 -0
- package/dist/rules2/src/table/getTableLabelAccessor.js +11 -0
- package/dist/rules2/src/table/getTableLabelAccessor.js.map +1 -0
- package/dist/rules2/src/table/getTableLayoutIds.js +317 -0
- package/dist/rules2/src/table/getTableLayoutIds.js.map +1 -0
- package/dist/rules2/src/table/getTableProps.js +85 -0
- package/dist/rules2/src/table/getTableProps.js.map +1 -0
- package/dist/rules2/src/table/parseSeriesIndexesHierarchies.js +82 -0
- package/dist/rules2/src/table/parseSeriesIndexesHierarchies.js.map +1 -0
- package/dist/rules2/src/table/parseValueHierarchy.js +29 -0
- package/dist/rules2/src/table/parseValueHierarchy.js.map +1 -0
- package/dist/rules2/src/table/refineLayoutSize2.js +324 -0
- package/dist/rules2/src/table/refineLayoutSize2.js.map +1 -0
- package/dist/rules2/src/utils.js +29 -0
- package/dist/rules2/src/utils.js.map +1 -0
- package/dist/viewer/src/chart.js +50 -0
- package/dist/viewer/src/chart.js.map +1 -0
- package/dist/viewer/src/chartUtils/options.js +33 -0
- package/dist/viewer/src/chartUtils/options.js.map +1 -0
- package/dist/viewer/src/chartUtils/series.js +54 -0
- package/dist/viewer/src/chartUtils/series.js.map +1 -0
- package/dist/viewer/src/footer.js +39 -0
- package/dist/viewer/src/footer.js.map +1 -0
- package/dist/viewer/src/header.js +12 -0
- package/dist/viewer/src/header.js.map +1 -0
- package/dist/viewer/src/index.js +160 -0
- package/dist/viewer/src/index.js.map +1 -0
- package/dist/viewer/src/legends/AxisLegend.js +42 -0
- package/dist/viewer/src/legends/AxisLegend.js.map +1 -0
- package/dist/viewer/src/legends/ChartLegends.js +80 -0
- package/dist/viewer/src/legends/ChartLegends.js.map +1 -0
- package/dist/viewer/src/legends/FocusLegend.js +67 -0
- package/dist/viewer/src/legends/FocusLegend.js.map +1 -0
- package/dist/viewer/src/legends/Legend.js +51 -0
- package/dist/viewer/src/legends/Legend.js.map +1 -0
- package/dist/viewer/src/legends/SeriesLegend.js +77 -0
- package/dist/viewer/src/legends/SeriesLegend.js.map +1 -0
- package/dist/viewer/src/utils.js +24 -0
- package/dist/viewer/src/utils.js.map +1 -0
- package/package.json +1 -1
- package/src/app.js +13 -0
- package/src/bridge-d3-react/README.md +42 -0
- package/src/bridge-d3-react/src/app.js +64 -0
- package/src/bridge-d3-react/src/index.js +16 -0
- package/src/bridge-d3-react/src/mock-choro.js +394 -0
- package/src/bridge-d3-react/src/react-chart-factory.jsx +65 -0
- package/src/index.js +10 -0
- package/src/rules/README.md +23 -0
- package/src/rules/src/chart/getAxisOptions.js +263 -0
- package/src/rules/src/chart/getBaseOptions.js +84 -0
- package/src/rules/src/chart/getChartOptions.js +118 -0
- package/src/rules/src/chart/getGridOptions.js +52 -0
- package/src/rules/src/chart/getTooltipOptions.js +230 -0
- package/src/rules/src/constants.js +64 -0
- package/src/rules/src/date.js +118 -0
- package/src/rules/src/dimension-utils.js +54 -0
- package/src/rules/src/factories/choro-series.js +65 -0
- package/src/rules/src/factories/sample-focus.js +22 -0
- package/src/rules/src/factories/sample-series.js +50 -0
- package/src/rules/src/factories/scatter-dimension.js +32 -0
- package/src/rules/src/factories/scatter-focus.js +39 -0
- package/src/rules/src/factories/scatter-series.js +92 -0
- package/src/rules/src/factories/stacked-dimension.js +29 -0
- package/src/rules/src/factories/stacked-series.js +185 -0
- package/src/rules/src/factories/symbol-dimension.js +29 -0
- package/src/rules/src/factories/symbol-series.js +62 -0
- package/src/rules/src/factories/timeline-focus.js +18 -0
- package/src/rules/src/factories/timeline-series.js +91 -0
- package/src/rules/src/get-values-enhanced.js +134 -0
- package/src/rules/src/header/getDefaultSubtitle.js +40 -0
- package/src/rules/src/header/getHeaderUnits.js +17 -0
- package/src/rules/src/header/getSubtitleFlags.js +43 -0
- package/src/rules/src/header/getTitleFlags.js +8 -0
- package/src/rules/src/header/index.js +4 -0
- package/src/rules/src/index.js +400 -0
- package/src/rules/src/layout.js +113 -0
- package/src/rules/src/observation-formater.js +83 -0
- package/src/rules/src/preparators/enhanceObservations.js +152 -0
- package/src/rules/src/preparators/formatValue.js +93 -0
- package/src/rules/src/preparators/getObservations.js +19 -0
- package/src/rules/src/preparators/getReportingYearStart.js +16 -0
- package/src/rules/src/properties/errors.js +19 -0
- package/src/rules/src/properties/focus.js +69 -0
- package/src/rules/src/properties/getAvailableChartTypes.js +34 -0
- package/src/rules/src/properties/getHeaderProps.js +74 -0
- package/src/rules/src/properties/getInformationsStateFromNewProps.js +47 -0
- package/src/rules/src/properties/getObservationsType.js +29 -0
- package/src/rules/src/properties/getStringifiedSubtitle.js +6 -0
- package/src/rules/src/properties/index.js +424 -0
- package/src/rules/src/properties/information.js +84 -0
- package/src/rules/src/properties/linear.js +129 -0
- package/src/rules/src/properties/scatter.js +158 -0
- package/src/rules/src/properties/stacked.js +98 -0
- package/src/rules/src/properties/symbol.js +79 -0
- package/src/rules/src/properties/utils.js +110 -0
- package/src/rules/src/sdmx-data/index.js +39 -0
- package/src/rules/src/table/factories/getCellValue.js +50 -0
- package/src/rules/src/table/index.js +1 -0
- package/src/rules/src/v8-transformer.js +177 -0
- package/src/rules2/src/applyHierarchicalCodesToDim.js +123 -0
- package/src/rules2/src/combinedValuesDisplay.js +74 -0
- package/src/rules2/src/constants.js +6 -0
- package/src/rules2/src/duplicateObservations.js +35 -0
- package/src/rules2/src/enhanceObservations.js +95 -0
- package/src/rules2/src/getAdvAttrSeriesAtCoordinates.js +29 -0
- package/src/rules2/src/getAttributesSeries.js +36 -0
- package/src/rules2/src/getCombinationDefinitions.js +47 -0
- package/src/rules2/src/getDataflowAttributes.js +23 -0
- package/src/rules2/src/getDataflowTooltipAttributesIds.js +31 -0
- package/src/rules2/src/getDimensionValuesIndexes.js +13 -0
- package/src/rules2/src/getHCodelistsRefsInData.js +32 -0
- package/src/rules2/src/getHeaderCombinations.js +48 -0
- package/src/rules2/src/getHeaderCoordinates.js +7 -0
- package/src/rules2/src/getHeaderSubtitle.js +34 -0
- package/src/rules2/src/getHeaderTitle.js +15 -0
- package/src/rules2/src/getMSDInformations.js +23 -0
- package/src/rules2/src/getManyValuesDimensions.js +34 -0
- package/src/rules2/src/getMetadataCoordinates.js +37 -0
- package/src/rules2/src/getMetadataStructureFromData.js +17 -0
- package/src/rules2/src/getNotDisplayedIds.js +53 -0
- package/src/rules2/src/getOneValueDimensions.js +34 -0
- package/src/rules2/src/getSeriesCombinations.js +24 -0
- package/src/rules2/src/hasCellMetadata.js +14 -0
- package/src/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js +57 -0
- package/src/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js +35 -0
- package/src/rules2/src/index.js +50 -0
- package/src/rules2/src/parseAttributes.js +41 -0
- package/src/rules2/src/parseCombinations.js +102 -0
- package/src/rules2/src/parseHierarchicalCodelist.js +48 -0
- package/src/rules2/src/parseMetadataSeries.js +121 -0
- package/src/rules2/src/prepareData.js +75 -0
- package/src/rules2/src/refineAttributes.js +16 -0
- package/src/rules2/src/refineDimensions.js +18 -0
- package/src/rules2/src/refineMetadataCoordinates.js +28 -0
- package/src/rules2/src/refineTimePeriod.js +127 -0
- package/src/rules2/src/sdmx3.0DataFormatPatch.js +9 -0
- package/src/rules2/src/table/declineObservationsOverAttributes.js +32 -0
- package/src/rules2/src/table/getCells.js +93 -0
- package/src/rules2/src/table/getCellsAttributesIds.js +38 -0
- package/src/rules2/src/table/getCellsMetadataCoordinates.js +13 -0
- package/src/rules2/src/table/getCombinationDimensionsData.js +39 -0
- package/src/rules2/src/table/getCuratedCells.js +33 -0
- package/src/rules2/src/table/getFlagsAndNotes.js +23 -0
- package/src/rules2/src/table/getIndexedCombinationsByDisplay.js +16 -0
- package/src/rules2/src/table/getLayout.js +84 -0
- package/src/rules2/src/table/getLayoutData2.js +202 -0
- package/src/rules2/src/table/getSortedLayoutIndexes.js +138 -0
- package/src/rules2/src/table/getTableLabelAccessor.js +9 -0
- package/src/rules2/src/table/getTableLayoutIds.js +314 -0
- package/src/rules2/src/table/getTableProps.js +82 -0
- package/src/rules2/src/table/parseSeriesIndexesHierarchies.js +79 -0
- package/src/rules2/src/table/parseValueHierarchy.js +33 -0
- package/src/rules2/src/table/refineLayoutSize2.js +321 -0
- package/src/rules2/src/utils.js +37 -0
- package/src/viewer/mocks/bar.js +33 -0
- package/src/viewer/mocks/gpp-symbol.js +93 -0
- package/src/viewer/mocks/gpp-time.js +1103 -0
- package/src/viewer/mocks/row.js +39 -0
- package/src/viewer/mocks/scatter.js +93 -0
- package/src/viewer/mocks/stack.js +161 -0
- package/src/viewer/src/app/leg.js +36 -0
- package/src/viewer/src/app/nodata-res.js +22 -0
- package/src/viewer/src/app/nodata-sized.js +23 -0
- package/src/viewer/src/app/one-table-cell.js +70 -0
- package/src/viewer/src/app/table.js +423 -0
- package/src/viewer/src/app/use-case-1.js +33 -0
- package/src/viewer/src/app/use-case-2.js +38 -0
- package/src/viewer/src/app/use-case-3.js +18 -0
- package/src/viewer/src/app.js +116 -0
- package/src/viewer/src/chart.jsx +52 -0
- package/src/viewer/src/chartUtils/options.js +30 -0
- package/src/viewer/src/chartUtils/series.js +51 -0
- package/src/viewer/src/footer.jsx +23 -0
- package/src/viewer/src/header.jsx +10 -0
- package/src/viewer/src/index.jsx +158 -0
- package/src/viewer/src/legends/AxisLegend.jsx +41 -0
- package/src/viewer/src/legends/ChartLegends.jsx +66 -0
- package/src/viewer/src/legends/FocusLegend.jsx +63 -0
- package/src/viewer/src/legends/Legend.jsx +46 -0
- package/src/viewer/src/legends/SeriesLegend.jsx +78 -0
- package/src/viewer/src/utils.js +21 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
|
|
3
|
+
export default D3Chart => class ReactChart extends Component {
|
|
4
|
+
constructor(props) {
|
|
5
|
+
super(props);
|
|
6
|
+
// shouldComponentUpdate is useful to determine isDirty
|
|
7
|
+
// but can't be used alone since we still want to update meta
|
|
8
|
+
this.needD3Update = true;
|
|
9
|
+
this.chart = null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
componentDidMount() {
|
|
13
|
+
super.componentDidMount && super.componentDidMount();
|
|
14
|
+
|
|
15
|
+
if (!this.needD3Update) return;
|
|
16
|
+
|
|
17
|
+
this.chart = new D3Chart(
|
|
18
|
+
this.refs.chart,
|
|
19
|
+
this.props.options,
|
|
20
|
+
this.props.data,
|
|
21
|
+
this.props.getInitialOptions,
|
|
22
|
+
this.props.getAxisOptions
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
this.needD3Update = false;
|
|
26
|
+
|
|
27
|
+
/*if (isFunction(this.props.getInitialOptions)) {
|
|
28
|
+
this.props.getInitialOptions(cloneDeep(this.chart.options));
|
|
29
|
+
}*/
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
componentDidUpdate() {
|
|
33
|
+
super.componentDidUpdate && super.componentDidUpdate();
|
|
34
|
+
|
|
35
|
+
if (!this.needD3Update) return;
|
|
36
|
+
|
|
37
|
+
this.chart && this.chart.update && this.chart.update(
|
|
38
|
+
this.refs.chart,
|
|
39
|
+
this.props.options,
|
|
40
|
+
this.props.data,
|
|
41
|
+
this.props.getInitialOptions,
|
|
42
|
+
this.props.getAxisOptions
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
this.needD3Update = false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
componentWillUnmount() {
|
|
49
|
+
super.componentWillUnmount && super.componentWillUnmount();
|
|
50
|
+
|
|
51
|
+
this.chart && this.chart.destroy && this.chart.destroy(this.refs.chart);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
shouldComponentUpdate(nextProps) {
|
|
55
|
+
super.shouldComponentUpdate && super.shouldComponentUpdate(nextProps);
|
|
56
|
+
|
|
57
|
+
this.needD3Update = this.props.data !== nextProps.data || this.props.options !== nextProps.options;
|
|
58
|
+
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
render() {
|
|
63
|
+
return <div ref="chart"></div>;
|
|
64
|
+
}
|
|
65
|
+
};
|
package/src/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//import { createRequire } from 'node:module';
|
|
2
|
+
//const require = createRequire(import.meta.url);
|
|
3
|
+
//const pkg = require('../package.json');
|
|
4
|
+
//
|
|
5
|
+
//console.info(`${pkg.name}@${pkg.version}`);
|
|
6
|
+
|
|
7
|
+
export * as rules from './rules/src';
|
|
8
|
+
export * as rules2 from './rules2/src';
|
|
9
|
+
|
|
10
|
+
export { default as Viewer } from './viewer/src/index.jsx';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# rules
|
|
2
|
+
|
|
3
|
+
The library scopes business logic regarding sdmx parsing and refining. This library is responsible for generating table and charts data series from sdmx data.
|
|
4
|
+
|
|
5
|
+
## usage
|
|
6
|
+
|
|
7
|
+
```javascript
|
|
8
|
+
import { rules } from '@sis-cc/dotstatsuite-components';
|
|
9
|
+
|
|
10
|
+
rules.extractSdmxArtefacts(data);
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## misc
|
|
14
|
+
|
|
15
|
+
Top-level methods are memoized to have a good performance.
|
|
16
|
+
Factory methods have been extracted from a component and are not yet memoized.
|
|
17
|
+
|
|
18
|
+
The memoization has been used to make the library easy to use, parsing methods can be heavy
|
|
19
|
+
regarding data and being forced to use them carefully generally lead to complexity.
|
|
20
|
+
|
|
21
|
+
## api
|
|
22
|
+
|
|
23
|
+
TODO
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import * as R from 'ramda';
|
|
2
|
+
import numeral from 'numeral';
|
|
3
|
+
import dateFns from 'date-fns';
|
|
4
|
+
import isMonday from 'date-fns/is_monday';
|
|
5
|
+
import isTuesday from 'date-fns/is_tuesday';
|
|
6
|
+
import isWednesday from 'date-fns/is_wednesday';
|
|
7
|
+
import isThursday from 'date-fns/is_thursday';
|
|
8
|
+
import isFriday from 'date-fns/is_friday';
|
|
9
|
+
import isSaturday from 'date-fns/is_saturday';
|
|
10
|
+
import isSunday from 'date-fns/is_sunday';
|
|
11
|
+
import getISOWeek from 'date-fns/get_iso_week';
|
|
12
|
+
import { getLocale, dateWithoutTZ } from '../date';
|
|
13
|
+
import {
|
|
14
|
+
BAR,
|
|
15
|
+
CHORO,
|
|
16
|
+
H_SYMBOL,
|
|
17
|
+
ROW,
|
|
18
|
+
SCATTER,
|
|
19
|
+
STACKED_BAR,
|
|
20
|
+
STACKED_ROW,
|
|
21
|
+
TIMELINE,
|
|
22
|
+
V_SYMBOL
|
|
23
|
+
} from '../constants';
|
|
24
|
+
|
|
25
|
+
const defaultTimeFormats = {
|
|
26
|
+
A: 'YYYY',
|
|
27
|
+
S: 'YYYY-[S][SEMESTER]',
|
|
28
|
+
Q: 'YYYY-[Q]Q',
|
|
29
|
+
M: 'YYYY-MMM',
|
|
30
|
+
W: 'YYYY-[W]WW',
|
|
31
|
+
B: 'YYYY-[W]WW',
|
|
32
|
+
D: 'YYYY-MM-DD',
|
|
33
|
+
H: 'YYYY-MM-DD[T]HH:mm:ss',
|
|
34
|
+
N: 'YYYY-MM-DD[T]HH:mm:ss',
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const getTimeProc = (frequency, timeFormats = {}, locale) => {
|
|
38
|
+
if (frequency === 'W' || frequency === 'B') {
|
|
39
|
+
return datum => {
|
|
40
|
+
const isoWeek = getISOWeek(datum);
|
|
41
|
+
if (isoWeek !== 1) {
|
|
42
|
+
return dateFns.format(datum, 'YYYY-[W]WW', { locale: getLocale(locale) })
|
|
43
|
+
}
|
|
44
|
+
const seventhDay = dateFns.endOfWeek(datum, { weekStartsOn: 1 });
|
|
45
|
+
return dateFns.format(seventhDay, 'YYYY-[W]WW', { locale: getLocale(locale) })
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const format = R.pipe(
|
|
49
|
+
R.mergeRight(defaultTimeFormats),
|
|
50
|
+
R.ifElse(
|
|
51
|
+
R.has(frequency),
|
|
52
|
+
R.prop(frequency),
|
|
53
|
+
R.prop('A')
|
|
54
|
+
)
|
|
55
|
+
)(timeFormats);
|
|
56
|
+
return datum => dateFns.format(dateWithoutTZ(new Date(datum)), format, { locale: getLocale(locale) });
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const getTimeFrequency = (data) => {
|
|
60
|
+
const frequency = R.prop('frequency', data);
|
|
61
|
+
if (frequency === 'W' || frequency === 'B') {
|
|
62
|
+
const date = R.pathOr(['series', 0, 'datapoints', 'x']);
|
|
63
|
+
return R.cond([
|
|
64
|
+
[isMonday, R.always('monday')],
|
|
65
|
+
[isTuesday, R.always('tueday')],
|
|
66
|
+
[isWednesday, R.always('wednesday')],
|
|
67
|
+
[isThursday, R.always('thursday')],
|
|
68
|
+
[isFriday, R.always('friday')],
|
|
69
|
+
[isSaturday, R.always('saturday')],
|
|
70
|
+
[isSunday, R.always('sunday')],
|
|
71
|
+
[R.T, R.always('monday')],
|
|
72
|
+
])(date);
|
|
73
|
+
}
|
|
74
|
+
return R.cond([
|
|
75
|
+
[R.equals('A'), R.always('year')],
|
|
76
|
+
[R.equals('S'), R.always('month')],
|
|
77
|
+
[R.equals('Q'), R.always('month')],
|
|
78
|
+
[R.equals('M'), R.always('month')],
|
|
79
|
+
[R.equals('D'), R.always('day')],
|
|
80
|
+
[R.equals('H'), R.always('hour')],
|
|
81
|
+
[R.equals('N'), R.always('minute')],
|
|
82
|
+
[R.T, R.always('year')],
|
|
83
|
+
])(frequency);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const getTimeStep = R.cond([
|
|
87
|
+
[R.equals('A'), R.always(1)],
|
|
88
|
+
[R.equals('S'), R.always(6)],
|
|
89
|
+
[R.equals('Q'), R.always(3)],
|
|
90
|
+
[R.equals('M'), R.always(1)],
|
|
91
|
+
[R.equals('W'), R.always(1)],
|
|
92
|
+
[R.equals('B'), R.always(1)],
|
|
93
|
+
[R.equals('D'), R.always(1)],
|
|
94
|
+
[R.equals('H'), R.always(1)],
|
|
95
|
+
[R.equals('N'), R.always(1)],
|
|
96
|
+
[R.T, R.always(1)],
|
|
97
|
+
]);
|
|
98
|
+
|
|
99
|
+
export const getAxisOptions = (data, type, options, timeFormats, locale) => {
|
|
100
|
+
|
|
101
|
+
const axis = {
|
|
102
|
+
linear: { pivot: { color: 'white' } },
|
|
103
|
+
ordinal: { gap: .3, padding: .3 },
|
|
104
|
+
thickness: 0,
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const linearProc = d => {
|
|
108
|
+
if (Math.abs(d) < 0.01 && d) {
|
|
109
|
+
return numeral(d).format('0.[00]e+0');
|
|
110
|
+
}
|
|
111
|
+
return numeral(d).format('0,0.[00]');
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
return R.pipe(
|
|
115
|
+
R.propOr({}, 'axis'),
|
|
116
|
+
R.mergeDeepRight({ x: axis, y: axis }),
|
|
117
|
+
R.cond([
|
|
118
|
+
[
|
|
119
|
+
R.always(R.equals(BAR, type)),
|
|
120
|
+
R.pipe(
|
|
121
|
+
R.mergeDeepRight({
|
|
122
|
+
x: { format: { proc: R.identity }, tick: { thickness: 0, size: 0 } },
|
|
123
|
+
y: {
|
|
124
|
+
font: { baseline: 'ideographic' },
|
|
125
|
+
format: { proc: linearProc },
|
|
126
|
+
padding: 10,
|
|
127
|
+
tick: { thickness: 0 },
|
|
128
|
+
}
|
|
129
|
+
}),
|
|
130
|
+
R.over(R.lensPath(['y', 'linear', 'pivot', 'value']), R.when(R.isNil, R.always(0)))
|
|
131
|
+
)
|
|
132
|
+
],
|
|
133
|
+
[
|
|
134
|
+
R.always(R.equals(ROW, type)),
|
|
135
|
+
R.pipe(
|
|
136
|
+
R.mergeDeepRight({
|
|
137
|
+
x: {
|
|
138
|
+
format: { proc: linearProc },
|
|
139
|
+
orient: 'top',
|
|
140
|
+
padding: 10,
|
|
141
|
+
tick: { thickness: 0 },
|
|
142
|
+
},
|
|
143
|
+
y: {
|
|
144
|
+
format: { proc: R.identity },
|
|
145
|
+
ordinal: { minDisplaySize: 300 },
|
|
146
|
+
tick: { thickness: 0, size: 0 },
|
|
147
|
+
}
|
|
148
|
+
}),
|
|
149
|
+
R.over(R.lensPath(['x', 'linear', 'pivot', 'value']), R.when(R.isNil, R.always(0)))
|
|
150
|
+
)
|
|
151
|
+
],
|
|
152
|
+
[
|
|
153
|
+
R.always(R.equals(SCATTER, type)),
|
|
154
|
+
R.mergeDeepRight({
|
|
155
|
+
x: {
|
|
156
|
+
format: { proc: linearProc },
|
|
157
|
+
tick: { thickness: 0, size: 0 },
|
|
158
|
+
},
|
|
159
|
+
y: {
|
|
160
|
+
font: { baseline: 'ideographic' },
|
|
161
|
+
format: { proc: linearProc },
|
|
162
|
+
padding: 10,
|
|
163
|
+
tick: { thickness: 0 },
|
|
164
|
+
}
|
|
165
|
+
})
|
|
166
|
+
],
|
|
167
|
+
[
|
|
168
|
+
R.always(R.equals(TIMELINE, type)),
|
|
169
|
+
R.pipe(
|
|
170
|
+
R.mergeDeepRight({
|
|
171
|
+
x: {
|
|
172
|
+
format: {
|
|
173
|
+
isTime: true,
|
|
174
|
+
pattern: null,
|
|
175
|
+
proc: getTimeProc(R.prop('frequency', data), timeFormats, locale)
|
|
176
|
+
},
|
|
177
|
+
tick: { size: -6, minorSize: -3, thickness: 2, minorThickness: 2, color: 'white' },
|
|
178
|
+
},
|
|
179
|
+
y: {
|
|
180
|
+
font: { baseline: 'ideographic' },
|
|
181
|
+
format: { proc: d => numeral(d).format('0,0.[00]') },
|
|
182
|
+
padding: 10,
|
|
183
|
+
tick: { thickness: 0 },
|
|
184
|
+
}
|
|
185
|
+
}),
|
|
186
|
+
R.evolve({
|
|
187
|
+
x: R.pipe(
|
|
188
|
+
R.set(R.lensPath(['linear', 'frequency']), getTimeFrequency(data)),
|
|
189
|
+
R.set(R.lensPath(['linear', 'step']), getTimeStep(R.prop('frequency', data))),
|
|
190
|
+
R.over(
|
|
191
|
+
R.lensPath(['tick', 'step']),
|
|
192
|
+
R.pipe(R.when(R.isNil, R.always(1)), R.multiply(getTimeStep(R.prop('frequency', data))))
|
|
193
|
+
)
|
|
194
|
+
)
|
|
195
|
+
})
|
|
196
|
+
)
|
|
197
|
+
],
|
|
198
|
+
[
|
|
199
|
+
R.always(R.equals(H_SYMBOL, type)),
|
|
200
|
+
R.mergeDeepRight({
|
|
201
|
+
x: {
|
|
202
|
+
format: { proc: linearProc },
|
|
203
|
+
orient: 'top',
|
|
204
|
+
padding: 10,
|
|
205
|
+
tick: { thickness: 0 },
|
|
206
|
+
},
|
|
207
|
+
y: {
|
|
208
|
+
format: { proc: R.identity },
|
|
209
|
+
ordinal: { minDisplaySize: 300 },
|
|
210
|
+
tick: { thickness: 0, size: 5 },
|
|
211
|
+
}
|
|
212
|
+
})
|
|
213
|
+
],
|
|
214
|
+
[
|
|
215
|
+
R.always(R.equals(V_SYMBOL, type)),
|
|
216
|
+
R.mergeDeepRight({
|
|
217
|
+
x: { format: { proc: R.identity }, tick: { thickness: 0, size: 0 } },
|
|
218
|
+
y: {
|
|
219
|
+
font: { baseline: 'ideographic' },
|
|
220
|
+
format: { proc: linearProc },
|
|
221
|
+
padding: 10,
|
|
222
|
+
tick: { thickness: 0 },
|
|
223
|
+
}
|
|
224
|
+
})
|
|
225
|
+
],
|
|
226
|
+
[
|
|
227
|
+
R.always(R.equals(STACKED_BAR, type)),
|
|
228
|
+
R.pipe(
|
|
229
|
+
R.mergeDeepRight({
|
|
230
|
+
x: { format: { proc: R.identity }, tick: { thickness: 0, size: 0 } },
|
|
231
|
+
y: {
|
|
232
|
+
font: { baseline: 'ideographic' },
|
|
233
|
+
format: { proc: linearProc },
|
|
234
|
+
padding: 10,
|
|
235
|
+
tick: { thickness: 0 },
|
|
236
|
+
}
|
|
237
|
+
}),
|
|
238
|
+
R.over(R.lensPath(['y', 'linear', 'pivot', 'value']), R.when(R.isNil, R.always(0)))
|
|
239
|
+
)
|
|
240
|
+
],
|
|
241
|
+
[
|
|
242
|
+
R.always(R.equals(STACKED_ROW, type)),
|
|
243
|
+
R.pipe(
|
|
244
|
+
R.mergeDeepRight({
|
|
245
|
+
x: {
|
|
246
|
+
format: { proc: linearProc },
|
|
247
|
+
orient: 'top',
|
|
248
|
+
padding: 10,
|
|
249
|
+
tick: { thickness: 0 },
|
|
250
|
+
},
|
|
251
|
+
y: {
|
|
252
|
+
format: { proc: R.identity },
|
|
253
|
+
ordinal: { minDisplaySize: 300 },
|
|
254
|
+
tick: { thickness: 0, size: 0 }
|
|
255
|
+
}
|
|
256
|
+
}),
|
|
257
|
+
R.over(R.lensPath(['x', 'linear', 'pivot', 'value']), R.when(R.isNil, R.always(0)))
|
|
258
|
+
)
|
|
259
|
+
],
|
|
260
|
+
[R.T, R.identity]
|
|
261
|
+
])
|
|
262
|
+
)(options);
|
|
263
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as R from 'ramda';
|
|
2
|
+
import {
|
|
3
|
+
BAR,
|
|
4
|
+
CHORO,
|
|
5
|
+
H_SYMBOL,
|
|
6
|
+
ROW,
|
|
7
|
+
SCATTER,
|
|
8
|
+
STACKED_BAR,
|
|
9
|
+
STACKED_ROW,
|
|
10
|
+
TIMELINE,
|
|
11
|
+
V_SYMBOL
|
|
12
|
+
} from '../constants';
|
|
13
|
+
|
|
14
|
+
export const getBaseOptions = (type, options) => R.pipe(
|
|
15
|
+
R.propOr({}, 'base'),
|
|
16
|
+
R.cond([
|
|
17
|
+
[
|
|
18
|
+
R.always(R.equals(BAR, type)),
|
|
19
|
+
R.mergeDeepRight({
|
|
20
|
+
minDisplayHeight: 100,
|
|
21
|
+
minDisplayWidth: 300,
|
|
22
|
+
padding: { top: 20 },
|
|
23
|
+
innerPadding: { left: 20, right: 20, bottom: 10 }
|
|
24
|
+
})
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
R.always(R.equals(ROW, type)),
|
|
28
|
+
R.mergeDeepRight({
|
|
29
|
+
minDisplayHeight: 300,
|
|
30
|
+
minDisplayWidth: 100,
|
|
31
|
+
padding: { top: 10, left: 10, right: 20 }
|
|
32
|
+
})
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
R.always(R.equals(SCATTER, type)),
|
|
36
|
+
R.mergeDeepRight({
|
|
37
|
+
minDisplayHeight: 100,
|
|
38
|
+
minDisplayWidth: 100,
|
|
39
|
+
padding: { top: 40, right: 10 }
|
|
40
|
+
})
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
R.always(R.equals(TIMELINE, type)),
|
|
44
|
+
R.mergeDeepRight({
|
|
45
|
+
minDisplayHeight: 300,
|
|
46
|
+
minDisplayWidth: 100,
|
|
47
|
+
isAnnotated: false,
|
|
48
|
+
padding: { top: 20 },
|
|
49
|
+
innerPadding: { left: 40, right: 40 }
|
|
50
|
+
})
|
|
51
|
+
],
|
|
52
|
+
[
|
|
53
|
+
R.always(R.equals(H_SYMBOL, type)),
|
|
54
|
+
R.mergeDeepRight({
|
|
55
|
+
minDisplayHeight: 300,
|
|
56
|
+
minDisplayWidth: 100,
|
|
57
|
+
padding: { top: 10, left: 10, right: 20 }
|
|
58
|
+
})
|
|
59
|
+
],
|
|
60
|
+
[
|
|
61
|
+
R.always(R.equals(V_SYMBOL, type)),
|
|
62
|
+
R.mergeDeepRight({
|
|
63
|
+
minDisplayHeight: 100,
|
|
64
|
+
minDisplayWidth: 300,
|
|
65
|
+
padding: { top: 20 },
|
|
66
|
+
innerPadding: { left: 20, right: 20, bottom: 10 }
|
|
67
|
+
})
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
R.always(R.equals(STACKED_BAR, type)),
|
|
71
|
+
R.mergeDeepRight({
|
|
72
|
+
minDisplayHeight: 100,
|
|
73
|
+
minDisplayWidth: 300,
|
|
74
|
+
padding: { top: 20 },
|
|
75
|
+
innerPadding: { left: 20, right: 20, bottom: 10 }
|
|
76
|
+
})
|
|
77
|
+
],
|
|
78
|
+
[
|
|
79
|
+
R.always(R.equals(STACKED_ROW, type)),
|
|
80
|
+
R.mergeDeepRight({ padding: { top: 10, left: 10, right: 20 } })
|
|
81
|
+
],
|
|
82
|
+
[R.T, R.identity]
|
|
83
|
+
])
|
|
84
|
+
)(options);
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import * as R from 'ramda';
|
|
2
|
+
import numeral from 'numeral';
|
|
3
|
+
import { getAxisOptions } from './getAxisOptions';
|
|
4
|
+
import { getBaseOptions } from './getBaseOptions';
|
|
5
|
+
import { getGridOptions } from './getGridOptions';
|
|
6
|
+
import { getTooltipOptions } from './getTooltipOptions';
|
|
7
|
+
import { SCATTER, STACKED_BAR, STACKED_ROW, TIMELINE } from '../constants';
|
|
8
|
+
|
|
9
|
+
export const FOCUS_COLORS = {
|
|
10
|
+
highlightColors: ['#E73741', '#0F8FD9', '#993484', '#DF521E', '#719E24', '#E1B400', '#32A674', '#0B68AF'],
|
|
11
|
+
baselineColors: ['#0B1E2D']
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const symbolMarkers = () => {
|
|
15
|
+
const paths = {
|
|
16
|
+
circle: size => {
|
|
17
|
+
const r = Math.sqrt(size) / 2;
|
|
18
|
+
return `M0,${r} A${r},${r} 0 1,1 0,${-r} A${r},${r} 0 1,1 0,${r} Z`;
|
|
19
|
+
},
|
|
20
|
+
square: size => {
|
|
21
|
+
const r = Math.sqrt(size) / 2;
|
|
22
|
+
return `M${-r},${-r} L${r},${-r} ${r},${r} ${-r},${r} Z`;
|
|
23
|
+
},
|
|
24
|
+
cross: size => {
|
|
25
|
+
const r = Math.sqrt(size) / 2;
|
|
26
|
+
return `M${-r},${r} L${r},${-r} M${r},${r} L${-r},${-r}`;
|
|
27
|
+
},
|
|
28
|
+
'triangle': size => {
|
|
29
|
+
const rx = Math.sqrt(size) / Math.sqrt(3);
|
|
30
|
+
const ry = Math.sqrt(size) / 2;
|
|
31
|
+
return `M0,${-ry} L${rx},${ry} ${-rx},${ry} Z`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return ([
|
|
35
|
+
{ style: { stroke: '#39617D', fill: '#39617D' }, path: paths.circle },
|
|
36
|
+
{ style: { stroke: '#39617D', fill: '#DBEBF2' }, rotate: 45, path: paths.square },
|
|
37
|
+
{ style: { stroke: '#39617D', fill: '#39617D', strokeWidth: 2 }, path: paths.cross },
|
|
38
|
+
{ style: { stroke: '#39617D', fill: '#DBEBF2' }, path: paths.square },
|
|
39
|
+
{ style: { stroke: '#39617D', fill: '#39617D' }, path: paths.triangle }
|
|
40
|
+
]);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const getAnnotationOptions = (type, options) => R.pipe(
|
|
44
|
+
R.pathOr({}, ['serie', 'annotation']),
|
|
45
|
+
R.mergeRight({
|
|
46
|
+
format: {
|
|
47
|
+
datapoint: { proc: d => numeral(d).format('0,0.[00]') }
|
|
48
|
+
}
|
|
49
|
+
}),
|
|
50
|
+
R.cond([
|
|
51
|
+
[
|
|
52
|
+
R.always(R.equals(SCATTER, type)),
|
|
53
|
+
R.mergeRight({ display: 'never' })
|
|
54
|
+
],
|
|
55
|
+
[
|
|
56
|
+
R.always(R.equals(TIMELINE, type)),
|
|
57
|
+
R.mergeDeepRight({ format: { datapoint: { pattern: '.2f' } } })
|
|
58
|
+
],
|
|
59
|
+
[R.T, R.identity]
|
|
60
|
+
])
|
|
61
|
+
)(options);
|
|
62
|
+
|
|
63
|
+
export const getChartOptions = (data, type, options, tooltipFonts, timeFormats, locale) => {
|
|
64
|
+
const defaultSerieColors = R.ifElse(
|
|
65
|
+
R.anyPass([R.equals(STACKED_BAR), R.equals(STACKED_ROW)]),
|
|
66
|
+
R.always(['#607D8B']),
|
|
67
|
+
R.always(['#8EA4B1'])
|
|
68
|
+
)(type);
|
|
69
|
+
|
|
70
|
+
return ({
|
|
71
|
+
axis: getAxisOptions(data, type, options, timeFormats, locale),
|
|
72
|
+
background: R.pipe(
|
|
73
|
+
R.propOr({}, 'background'),
|
|
74
|
+
R.mergeRight({ color: '#DBEBF2' })
|
|
75
|
+
)(options),
|
|
76
|
+
base: getBaseOptions(type, options),
|
|
77
|
+
grid: getGridOptions(type, options),
|
|
78
|
+
map: R.pipe(
|
|
79
|
+
R.propOr({}, 'map'),
|
|
80
|
+
R.mergeRight({ intBoundariesColor: '#8EA4B1' })
|
|
81
|
+
)(options),
|
|
82
|
+
serie: {
|
|
83
|
+
...R.propOr({}, 'serie', options),
|
|
84
|
+
annotation: getAnnotationOptions(type, options),
|
|
85
|
+
choropleth: R.pipe(
|
|
86
|
+
R.pathOr({}, ['serie', 'choropleth']),
|
|
87
|
+
R.mergeRight({
|
|
88
|
+
divisions: 4,
|
|
89
|
+
domain: 'YlorRd',
|
|
90
|
+
invert: false,
|
|
91
|
+
labelDisplay: 'none',
|
|
92
|
+
})
|
|
93
|
+
)(options),
|
|
94
|
+
stacked: R.pipe(
|
|
95
|
+
R.pathOr({}, ['serie', 'stacked']),
|
|
96
|
+
R.mergeRight({ strokeThickness: 1, strokeColor: '#F8FAFC' })
|
|
97
|
+
)(options),
|
|
98
|
+
symbol: R.pipe(
|
|
99
|
+
R.pathOr({}, ['serie', 'symbol']),
|
|
100
|
+
R.mergeRight({
|
|
101
|
+
markers: symbolMarkers(),
|
|
102
|
+
markerDefaultSize: 60,
|
|
103
|
+
markerDefaultStrokeWidth: 1,
|
|
104
|
+
gapMinMaxColor: '#607D8B',
|
|
105
|
+
gapMinMaxThickness: 1,
|
|
106
|
+
gapAxisMinColor: 'white',
|
|
107
|
+
gapAxisMinThickness: 1
|
|
108
|
+
})
|
|
109
|
+
)(options),
|
|
110
|
+
colors: R.pathOr(defaultSerieColors, ['serie', 'colors'], options),
|
|
111
|
+
overColors: R.pathOr(['#39617D'], ['serie', 'overColors'], options),
|
|
112
|
+
highlightColors: R.pathOr(FOCUS_COLORS.highlightColors, ['serie', 'highlightColors'], options),
|
|
113
|
+
baselineColors: R.pathOr(FOCUS_COLORS.baselineColors, ['serie', 'baselineColors'], options),
|
|
114
|
+
tooltip: getTooltipOptions(data, type, options, tooltipFonts, timeFormats, locale)
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as R from 'ramda';
|
|
2
|
+
import {
|
|
3
|
+
BAR,
|
|
4
|
+
CHORO,
|
|
5
|
+
H_SYMBOL,
|
|
6
|
+
ROW,
|
|
7
|
+
STACKED_BAR,
|
|
8
|
+
STACKED_ROW,
|
|
9
|
+
TIMELINE,
|
|
10
|
+
V_SYMBOL
|
|
11
|
+
} from '../constants';
|
|
12
|
+
|
|
13
|
+
export const getGridOptions = (type, options) => {
|
|
14
|
+
const grid = { baselines: [0], color: 'white' };
|
|
15
|
+
const hideGrid = R.assoc('thickness', 0);
|
|
16
|
+
|
|
17
|
+
return R.pipe(
|
|
18
|
+
R.propOr({}, 'grid'),
|
|
19
|
+
R.mergeDeepRight({ x: grid, y: grid }),
|
|
20
|
+
R.cond([
|
|
21
|
+
[
|
|
22
|
+
R.always(R.equals(BAR, type)),
|
|
23
|
+
R.mergeDeepRight({ x: { thickness: 0 } })
|
|
24
|
+
],
|
|
25
|
+
[
|
|
26
|
+
R.always(R.equals(ROW, type)),
|
|
27
|
+
R.mergeDeepRight({ y: { thickness: 0 } })
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
R.always(R.equals(TIMELINE, type)),
|
|
31
|
+
R.mergeDeepRight({ x: { thickness: 0 } })
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
R.always(R.equals(H_SYMBOL, type)),
|
|
35
|
+
R.mergeDeepRight({ y: { thickness: 0 } })
|
|
36
|
+
],
|
|
37
|
+
[
|
|
38
|
+
R.always(R.equals(V_SYMBOL, type)),
|
|
39
|
+
R.mergeDeepRight({ x: { thickness: 0 } })
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
R.always(R.equals(STACKED_BAR, type)),
|
|
43
|
+
R.mergeDeepRight({ x: { thickness: 0 } })
|
|
44
|
+
],
|
|
45
|
+
[
|
|
46
|
+
R.always(R.equals(STACKED_ROW, type)),
|
|
47
|
+
R.mergeDeepRight({ y: { thickness: 0 } })
|
|
48
|
+
],
|
|
49
|
+
[R.T, R.identity]
|
|
50
|
+
])
|
|
51
|
+
)(options);
|
|
52
|
+
};
|