@lightdash/common 0.2104.7 → 0.2104.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/cjs/.tsbuildinfo +1 -0
- package/dist/cjs/authorization/index.d.ts +1 -4
- package/dist/cjs/authorization/index.d.ts.map +1 -1
- package/dist/cjs/authorization/index.js +0 -4
- package/dist/cjs/authorization/index.js.map +1 -1
- package/dist/cjs/ee/AiAgent/chartConfig/web/getWebAiChartConfig.d.ts +8 -8
- package/dist/cjs/ee/AiAgent/index.d.ts +2 -2
- package/dist/cjs/ee/AiAgent/schemas/parser.d.ts +24 -24
- package/dist/cjs/ee/AiAgent/schemas/tools/toolDashboardV2Args.d.ts +96 -96
- package/dist/cjs/ee/AiAgent/schemas/tools/toolRunQueryArgs.d.ts +48 -48
- package/dist/cjs/ee/AiAgent/utils.d.ts +8 -8
- package/dist/cjs/index.d.ts +23 -449
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +21 -55
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/pivot/index.d.ts +1 -0
- package/dist/cjs/pivot/index.d.ts.map +1 -1
- package/dist/cjs/pivot/index.js +1 -0
- package/dist/cjs/pivot/index.js.map +1 -1
- package/dist/cjs/pivot/pivotConfig.d.ts +7 -0
- package/dist/cjs/pivot/pivotConfig.d.ts.map +1 -0
- package/dist/cjs/pivot/pivotConfig.js +32 -0
- package/dist/cjs/pivot/pivotConfig.js.map +1 -0
- package/dist/cjs/types/api.d.ts +447 -0
- package/dist/cjs/types/api.d.ts.map +1 -1
- package/dist/cjs/types/api.js +50 -1
- package/dist/cjs/types/api.js.map +1 -1
- package/dist/cjs/types/auth.d.ts +2 -1
- package/dist/cjs/types/auth.d.ts.map +1 -1
- package/dist/cjs/types/auth.js +4 -4
- package/dist/cjs/types/auth.js.map +1 -1
- package/dist/cjs/types/changeset.d.ts +10 -10
- package/dist/cjs/types/pivot.d.ts +0 -2
- package/dist/cjs/types/pivot.d.ts.map +1 -1
- package/dist/cjs/types/pivot.js +0 -29
- package/dist/cjs/types/pivot.js.map +1 -1
- package/dist/cjs/types/resourceViewItem.d.ts +1 -1
- package/dist/esm/.tsbuildinfo +1 -0
- package/dist/esm/authorization/index.d.ts +1 -4
- package/dist/esm/authorization/index.d.ts.map +1 -1
- package/dist/esm/authorization/index.js +0 -4
- package/dist/esm/authorization/index.js.map +1 -1
- package/dist/esm/ee/AiAgent/chartConfig/web/getWebAiChartConfig.d.ts +8 -8
- package/dist/esm/ee/AiAgent/index.d.ts +2 -2
- package/dist/esm/ee/AiAgent/schemas/parser.d.ts +24 -24
- package/dist/esm/ee/AiAgent/schemas/tools/toolDashboardV2Args.d.ts +96 -96
- package/dist/esm/ee/AiAgent/schemas/tools/toolRunQueryArgs.d.ts +48 -48
- package/dist/esm/ee/AiAgent/utils.d.ts +8 -8
- package/dist/esm/index.d.ts +23 -449
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +16 -50
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pivot/index.d.ts +1 -0
- package/dist/esm/pivot/index.d.ts.map +1 -1
- package/dist/esm/pivot/index.js +1 -0
- package/dist/esm/pivot/index.js.map +1 -1
- package/dist/esm/pivot/pivotConfig.d.ts +7 -0
- package/dist/esm/pivot/pivotConfig.d.ts.map +1 -0
- package/dist/esm/pivot/pivotConfig.js +28 -0
- package/dist/esm/pivot/pivotConfig.js.map +1 -0
- package/dist/esm/types/api.d.ts +447 -0
- package/dist/esm/types/api.d.ts.map +1 -1
- package/dist/esm/types/api.js +46 -0
- package/dist/esm/types/api.js.map +1 -1
- package/dist/esm/types/auth.d.ts +2 -1
- package/dist/esm/types/auth.d.ts.map +1 -1
- package/dist/esm/types/auth.js +2 -2
- package/dist/esm/types/auth.js.map +1 -1
- package/dist/esm/types/changeset.d.ts +10 -10
- package/dist/esm/types/pivot.d.ts +0 -2
- package/dist/esm/types/pivot.d.ts.map +1 -1
- package/dist/esm/types/pivot.js +1 -27
- package/dist/esm/types/pivot.js.map +1 -1
- package/dist/esm/types/resourceViewItem.d.ts +1 -1
- package/dist/types/.tsbuildinfo +1 -0
- package/dist/types/authorization/buildAccountHelpers.js +11 -0
- package/dist/types/authorization/buildAccountHelpers.js.map +1 -0
- package/dist/types/authorization/index.d.ts +1 -4
- package/dist/types/authorization/index.d.ts.map +1 -1
- package/dist/types/authorization/index.js +62 -0
- package/dist/types/authorization/index.js.map +1 -0
- package/dist/types/authorization/index.mock.js +42 -0
- package/dist/types/authorization/index.mock.js.map +1 -0
- package/dist/types/authorization/index.test.js +220 -0
- package/dist/types/authorization/index.test.js.map +1 -0
- package/dist/types/authorization/jwtAbility.js +77 -0
- package/dist/types/authorization/jwtAbility.js.map +1 -0
- package/dist/types/authorization/jwtAbility.test.js +416 -0
- package/dist/types/authorization/jwtAbility.test.js.map +1 -0
- package/dist/types/authorization/organizationMemberAbility.js +318 -0
- package/dist/types/authorization/organizationMemberAbility.js.map +1 -0
- package/dist/types/authorization/organizationMemberAbility.mock.js +34 -0
- package/dist/types/authorization/organizationMemberAbility.mock.js.map +1 -0
- package/dist/types/authorization/organizationMemberAbility.test.js +1265 -0
- package/dist/types/authorization/organizationMemberAbility.test.js.map +1 -0
- package/dist/types/authorization/parseAccount.js +28 -0
- package/dist/types/authorization/parseAccount.js.map +1 -0
- package/dist/types/authorization/parseScopes.js +31 -0
- package/dist/types/authorization/parseScopes.js.map +1 -0
- package/dist/types/authorization/parseScopes.test.js +102 -0
- package/dist/types/authorization/parseScopes.test.js.map +1 -0
- package/dist/types/authorization/projectMemberAbility.js +239 -0
- package/dist/types/authorization/projectMemberAbility.js.map +1 -0
- package/dist/types/authorization/projectMemberAbility.mock.js +27 -0
- package/dist/types/authorization/projectMemberAbility.mock.js.map +1 -0
- package/dist/types/authorization/projectMemberAbility.test.js +1031 -0
- package/dist/types/authorization/projectMemberAbility.test.js.map +1 -0
- package/dist/types/authorization/roleToScopeMapping.js +150 -0
- package/dist/types/authorization/roleToScopeMapping.js.map +1 -0
- package/dist/types/authorization/roleToScopeMapping.test.js +561 -0
- package/dist/types/authorization/roleToScopeMapping.test.js.map +1 -0
- package/dist/types/authorization/roleToScopeMapping.testUtils.js +319 -0
- package/dist/types/authorization/roleToScopeMapping.testUtils.js.map +1 -0
- package/dist/types/authorization/roleToScopeParity.test.js +194 -0
- package/dist/types/authorization/roleToScopeParity.test.js.map +1 -0
- package/dist/types/authorization/scopeAbilityBuilder.js +57 -0
- package/dist/types/authorization/scopeAbilityBuilder.js.map +1 -0
- package/dist/types/authorization/scopeAbilityBuilder.test.js +1348 -0
- package/dist/types/authorization/scopeAbilityBuilder.test.js.map +1 -0
- package/dist/types/authorization/scopes.js +613 -0
- package/dist/types/authorization/scopes.js.map +1 -0
- package/dist/types/authorization/serviceAccountAbility.js +303 -0
- package/dist/types/authorization/serviceAccountAbility.js.map +1 -0
- package/dist/types/authorization/types.js +2 -0
- package/dist/types/authorization/types.js.map +1 -0
- package/dist/types/compiler/exploreCompiler.js +462 -0
- package/dist/types/compiler/exploreCompiler.js.map +1 -0
- package/dist/types/compiler/exploreCompiler.mock.js +2016 -0
- package/dist/types/compiler/exploreCompiler.mock.js.map +1 -0
- package/dist/types/compiler/exploreCompiler.test.js +679 -0
- package/dist/types/compiler/exploreCompiler.test.js.map +1 -0
- package/dist/types/compiler/fieldSetExpander.js +119 -0
- package/dist/types/compiler/fieldSetExpander.js.map +1 -0
- package/dist/types/compiler/fieldSetExpander.test.js +184 -0
- package/dist/types/compiler/fieldSetExpander.test.js.map +1 -0
- package/dist/types/compiler/filtersCompiler.js +337 -0
- package/dist/types/compiler/filtersCompiler.js.map +1 -0
- package/dist/types/compiler/filtersCompiler.mock.js +496 -0
- package/dist/types/compiler/filtersCompiler.mock.js.map +1 -0
- package/dist/types/compiler/filtersCompiler.test.js +570 -0
- package/dist/types/compiler/filtersCompiler.test.js.map +1 -0
- package/dist/types/compiler/lightdashProjectConfig.js +37 -0
- package/dist/types/compiler/lightdashProjectConfig.js.map +1 -0
- package/dist/types/compiler/parameters.js +75 -0
- package/dist/types/compiler/parameters.js.map +1 -0
- package/dist/types/compiler/parameters.test.js +216 -0
- package/dist/types/compiler/parameters.test.js.map +1 -0
- package/dist/types/compiler/translator.js +707 -0
- package/dist/types/compiler/translator.js.map +1 -0
- package/dist/types/compiler/translator.mock.js +1901 -0
- package/dist/types/compiler/translator.mock.js.map +1 -0
- package/dist/types/compiler/translator.test.js +323 -0
- package/dist/types/compiler/translator.test.js.map +1 -0
- package/dist/types/constants/pivot.js +7 -0
- package/dist/types/constants/pivot.js.map +1 -0
- package/dist/types/constants/sessionStorageKeys.js +6 -0
- package/dist/types/constants/sessionStorageKeys.js.map +1 -0
- package/dist/types/constants/sqlRunner.js +3 -0
- package/dist/types/constants/sqlRunner.js.map +1 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.js +285 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.js.map +1 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.mock.js +224 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.mock.js.map +1 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.test.js +129 -0
- package/dist/types/dbt/DbtSchemaEditor/DbtSchemaEditor.test.js.map +1 -0
- package/dist/types/dbt/schemas/lightdashMetadata.json +385 -0
- package/dist/types/dbt/schemas/lightdashV10.json +72 -0
- package/dist/types/dbt/schemas/lightdashV11.json +72 -0
- package/dist/types/dbt/schemas/lightdashV12.json +63 -0
- package/dist/types/dbt/schemas/lightdashV7.json +72 -0
- package/dist/types/dbt/schemas/lightdashV8.json +76 -0
- package/dist/types/dbt/schemas/lightdashV9.json +72 -0
- package/dist/types/dbt/schemas/manifestV10.json +5545 -0
- package/dist/types/dbt/schemas/manifestV11.json +6041 -0
- package/dist/types/dbt/schemas/manifestV12.json +22567 -0
- package/dist/types/dbt/schemas/manifestV7.json +6481 -0
- package/dist/types/dbt/schemas/manifestV8.json +4358 -0
- package/dist/types/dbt/schemas/manifestV9.json +4879 -0
- package/dist/types/dbt/validation.js +67 -0
- package/dist/types/dbt/validation.js.map +1 -0
- package/dist/types/ee/AiAgent/adminTypes.js +2 -0
- package/dist/types/ee/AiAgent/adminTypes.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/shared/formatFieldLabel.js +10 -0
- package/dist/types/ee/AiAgent/chartConfig/shared/formatFieldLabel.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/generateBarVizConfigTool/getVerticalBarChartEchartsConfig.js +60 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/generateBarVizConfigTool/getVerticalBarChartEchartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/generateTimeSeriesVizConfigTool/getTimeSeriesChartEchartsConfig.js +60 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/generateTimeSeriesVizConfigTool/getTimeSeriesChartEchartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/getSlackAiEchartsConfig.js +33 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/getSlackAiEchartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/index.js +2 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/index.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/getRunQueryEchartsConfig.js +43 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/getRunQueryEchartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/bar.js +98 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/bar.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/funnel.js +38 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/funnel.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/horizontalBar.js +65 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/horizontalBar.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/line.js +105 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/line.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/pie.js +34 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/pie.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/scatter.js +66 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/runQueryTool/viz/scatter.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/shared/getCommonEChartsConfig.js +104 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/shared/getCommonEChartsConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/types.js +2 -0
- package/dist/types/ee/AiAgent/chartConfig/slack/types.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateBarVizConfigTool/getVerticalBarChartConfig.js +65 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateBarVizConfigTool/getVerticalBarChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateTableVizConfigTool/getTableChartConfig.js +5 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateTableVizConfigTool/getTableChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateTimeSeriesVizConfigTool/getTimeSeriesChartConfig.js +63 -0
- package/dist/types/ee/AiAgent/chartConfig/web/generateTimeSeriesVizConfigTool/getTimeSeriesChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/getWebAiChartConfig.d.ts +8 -8
- package/dist/types/ee/AiAgent/chartConfig/web/getWebAiChartConfig.js +51 -0
- package/dist/types/ee/AiAgent/chartConfig/web/getWebAiChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/index.js +6 -0
- package/dist/types/ee/AiAgent/chartConfig/web/index.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/getRunQueryChartConfig.js +73 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/getRunQueryChartConfig.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/bar.js +91 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/bar.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/funnel.js +17 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/funnel.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/horizontalBar.js +52 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/horizontalBar.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/line.js +96 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/line.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/pie.js +15 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/pie.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/scatter.js +66 -0
- package/dist/types/ee/AiAgent/chartConfig/web/runQueryTool/viz/scatter.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/canRenderAsChart.js +24 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/canRenderAsChart.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/formatPivotValueLabel.js +15 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/formatPivotValueLabel.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/getAvailableChartTypes.js +11 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/getAvailableChartTypes.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/getGroupByDimensions.js +15 -0
- package/dist/types/ee/AiAgent/chartConfig/web/shared/getGroupByDimensions.js.map +1 -0
- package/dist/types/ee/AiAgent/chartConfig/web/types.js +2 -0
- package/dist/types/ee/AiAgent/chartConfig/web/types.js.map +1 -0
- package/dist/types/ee/AiAgent/constants.js +2 -0
- package/dist/types/ee/AiAgent/constants.js.map +1 -0
- package/dist/types/ee/AiAgent/filterExploreByTags.js +94 -0
- package/dist/types/ee/AiAgent/filterExploreByTags.js.map +1 -0
- package/dist/types/ee/AiAgent/filterExploreByTags.test.js +634 -0
- package/dist/types/ee/AiAgent/filterExploreByTags.test.js.map +1 -0
- package/dist/types/ee/AiAgent/followUpTools.js +33 -0
- package/dist/types/ee/AiAgent/followUpTools.js.map +1 -0
- package/dist/types/ee/AiAgent/index.d.ts +2 -2
- package/dist/types/ee/AiAgent/index.js +43 -0
- package/dist/types/ee/AiAgent/index.js.map +1 -0
- package/dist/types/ee/AiAgent/requestTypes.js +2 -0
- package/dist/types/ee/AiAgent/requestTypes.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/customMetrics.js +50 -0
- package/dist/types/ee/AiAgent/schemas/customMetrics.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/fieldId.js +11 -0
- package/dist/types/ee/AiAgent/schemas/fieldId.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/booleanFilters.js +29 -0
- package/dist/types/ee/AiAgent/schemas/filters/booleanFilters.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/dateFilters.js +84 -0
- package/dist/types/ee/AiAgent/schemas/filters/dateFilters.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/index.js +98 -0
- package/dist/types/ee/AiAgent/schemas/filters/index.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/numberFilters.js +53 -0
- package/dist/types/ee/AiAgent/schemas/filters/numberFilters.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/filters/stringFilters.js +33 -0
- package/dist/types/ee/AiAgent/schemas/filters/stringFilters.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/index.js +9 -0
- package/dist/types/ee/AiAgent/schemas/index.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/outputMetadata.js +5 -0
- package/dist/types/ee/AiAgent/schemas/outputMetadata.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/parser.d.ts +24 -24
- package/dist/types/ee/AiAgent/schemas/parser.js +43 -0
- package/dist/types/ee/AiAgent/schemas/parser.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/sortField.js +14 -0
- package/dist/types/ee/AiAgent/schemas/sortField.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcBaseSchemas.js +28 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcBaseSchemas.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentChangeFromPrevious.js +14 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentChangeFromPrevious.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentOfColumnTotal.js +14 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentOfColumnTotal.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentOfPreviousValue.js +14 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcPercentOfPreviousValue.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcRankInColumn.js +10 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcRankInColumn.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcRunningTotal.js +10 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcRunningTotal.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcWindowFunction.js +105 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcWindowFunction.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcs.js +168 -0
- package/dist/types/ee/AiAgent/schemas/tableCalcs/tableCalcs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/toolSchemaBuilder.js +37 -0
- package/dist/types/ee/AiAgent/schemas/toolSchemaBuilder.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/index.js +16 -0
- package/dist/types/ee/AiAgent/schemas/tools/index.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardArgs.js +103 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardV2Args.d.ts +96 -96
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardV2Args.js +50 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolDashboardV2Args.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindChartsArgs.js +34 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindChartsArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindContentArgs.js +33 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindContentArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindDashboardsArgs.js +36 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindDashboardsArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindExploresArgs.js +45 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindExploresArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindFieldsArgs.js +34 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolFindFieldsArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolImproveContextArgs.js +60 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolImproveContextArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolProposeChangeArgs.js +157 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolProposeChangeArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolRunMetricQueryArgs.js +41 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolRunMetricQueryArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolRunQueryArgs.d.ts +48 -48
- package/dist/types/ee/AiAgent/schemas/tools/toolRunQueryArgs.js +151 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolRunQueryArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js +46 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolTableVizArgs.js +53 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolTableVizArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolTimeSeriesArgs.js +58 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolTimeSeriesArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolVerticalBarArgs.js +53 -0
- package/dist/types/ee/AiAgent/schemas/tools/toolVerticalBarArgs.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizationMetadata.js +9 -0
- package/dist/types/ee/AiAgent/schemas/visualizationMetadata.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/index.js +58 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/index.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/tableViz.js +38 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/tableViz.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/timeSeriesViz.js +63 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/timeSeriesViz.js.map +1 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/verticalBarViz.js +68 -0
- package/dist/types/ee/AiAgent/schemas/visualizations/verticalBarViz.js.map +1 -0
- package/dist/types/ee/AiAgent/types.js +12 -0
- package/dist/types/ee/AiAgent/types.js.map +1 -0
- package/dist/types/ee/AiAgent/utils.d.ts +8 -8
- package/dist/types/ee/AiAgent/utils.js +82 -0
- package/dist/types/ee/AiAgent/utils.js.map +1 -0
- package/dist/types/ee/AiAgent/validators.js +10 -0
- package/dist/types/ee/AiAgent/validators.js.map +1 -0
- package/dist/types/ee/commercialFeatureFlags.js +10 -0
- package/dist/types/ee/commercialFeatureFlags.js.map +1 -0
- package/dist/types/ee/embed/index.js +90 -0
- package/dist/types/ee/embed/index.js.map +1 -0
- package/dist/types/ee/index.js +19 -0
- package/dist/types/ee/index.js.map +1 -0
- package/dist/types/ee/scim/errors.js +22 -0
- package/dist/types/ee/scim/errors.js.map +1 -0
- package/dist/types/ee/scim/types.js +2 -0
- package/dist/types/ee/scim/types.js.map +1 -0
- package/dist/types/ee/serviceAccounts/types.js +8 -0
- package/dist/types/ee/serviceAccounts/types.js.map +1 -0
- package/dist/types/index.d.ts +23 -449
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +652 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mock.js +44 -0
- package/dist/types/index.mock.js.map +1 -0
- package/dist/types/index.test.js +123 -0
- package/dist/types/index.test.js.map +1 -0
- package/dist/types/pivot/derivePivotConfigFromChart.js +206 -0
- package/dist/types/pivot/derivePivotConfigFromChart.js.map +1 -0
- package/dist/types/pivot/derivePivotConfigFromChart.mock.js +112 -0
- package/dist/types/pivot/derivePivotConfigFromChart.mock.js.map +1 -0
- package/dist/types/pivot/derivePivotConfigFromChart.test.js +418 -0
- package/dist/types/pivot/derivePivotConfigFromChart.test.js.map +1 -0
- package/dist/types/pivot/index.d.ts +1 -0
- package/dist/types/pivot/index.d.ts.map +1 -1
- package/dist/types/pivot/index.js +5 -0
- package/dist/types/pivot/index.js.map +1 -0
- package/dist/types/pivot/pivotConfig.d.ts +7 -0
- package/dist/types/pivot/pivotConfig.d.ts.map +1 -0
- package/dist/types/pivot/pivotConfig.js +28 -0
- package/dist/types/pivot/pivotConfig.js.map +1 -0
- package/dist/types/pivot/pivotQueryResults.js +1034 -0
- package/dist/types/pivot/pivotQueryResults.js.map +1 -0
- package/dist/types/pivot/pivotQueryResults.mock.js +2412 -0
- package/dist/types/pivot/pivotQueryResults.mock.js.map +1 -0
- package/dist/types/pivot/pivotQueryResults.test.js +1222 -0
- package/dist/types/pivot/pivotQueryResults.test.js.map +1 -0
- package/dist/types/pivot/utils.js +14 -0
- package/dist/types/pivot/utils.js.map +1 -0
- package/dist/types/schemas/json/chart-as-code-1.0.json +436 -0
- package/dist/types/schemas/json/dashboard-as-code-1.0.json +349 -0
- package/dist/types/schemas/json/lightdash-dbt-2.0.json +1417 -0
- package/dist/types/schemas/json/lightdash-project-config-1.0.json +138 -0
- package/dist/types/templating/template.js +30 -0
- package/dist/types/templating/template.js.map +1 -0
- package/dist/types/templating/template.mock.js +45 -0
- package/dist/types/templating/template.mock.js.map +1 -0
- package/dist/types/templating/template.test.js +21 -0
- package/dist/types/templating/template.test.js.map +1 -0
- package/dist/types/types/SshKeyPair.js +2 -0
- package/dist/types/types/SshKeyPair.js.map +1 -0
- package/dist/types/types/account.js +2 -0
- package/dist/types/types/account.js.map +1 -0
- package/dist/types/types/analytics.js +29 -0
- package/dist/types/types/analytics.js.map +1 -0
- package/dist/types/types/any.js +2 -0
- package/dist/types/types/any.js.map +1 -0
- package/dist/types/types/api/comments.js +2 -0
- package/dist/types/types/api/comments.js.map +1 -0
- package/dist/types/types/api/email.js +2 -0
- package/dist/types/types/api/email.js.map +1 -0
- package/dist/types/types/api/errors.js +2 -0
- package/dist/types/types/api/errors.js.map +1 -0
- package/dist/types/types/api/notifications.js +5 -0
- package/dist/types/types/api/notifications.js.map +1 -0
- package/dist/types/types/api/paginatedQuery.js +3 -0
- package/dist/types/types/api/paginatedQuery.js.map +1 -0
- package/dist/types/types/api/parameters.js +2 -0
- package/dist/types/types/api/parameters.js.map +1 -0
- package/dist/types/types/api/share.js +2 -0
- package/dist/types/types/api/share.js.map +1 -0
- package/dist/types/types/api/sort.js +2 -0
- package/dist/types/types/api/sort.js.map +1 -0
- package/dist/types/types/api/spotlight.js +2 -0
- package/dist/types/types/api/spotlight.js.map +1 -0
- package/dist/types/types/api/success.js +2 -0
- package/dist/types/types/api/success.js.map +1 -0
- package/dist/types/types/api/uuid.js +2 -0
- package/dist/types/types/api/uuid.js.map +1 -0
- package/dist/types/types/api.d.ts +447 -0
- package/dist/types/types/api.d.ts.map +1 -1
- package/dist/types/types/api.js +57 -0
- package/dist/types/types/api.js.map +1 -0
- package/dist/types/types/applyDimensionOverrides.test.js +338 -0
- package/dist/types/types/applyDimensionOverrides.test.js.map +1 -0
- package/dist/types/types/auth.d.ts +2 -1
- package/dist/types/types/auth.d.ts.map +1 -1
- package/dist/types/types/auth.js +42 -0
- package/dist/types/types/auth.js.map +1 -0
- package/dist/types/types/bigQuerySSO.js +2 -0
- package/dist/types/types/bigQuerySSO.js.map +1 -0
- package/dist/types/types/catalog.js +50 -0
- package/dist/types/types/catalog.js.map +1 -0
- package/dist/types/types/changeset.d.ts +10 -10
- package/dist/types/types/changeset.js +72 -0
- package/dist/types/types/changeset.js.map +1 -0
- package/dist/types/types/coder.js +2 -0
- package/dist/types/types/coder.js.map +1 -0
- package/dist/types/types/comments.js +2 -0
- package/dist/types/types/comments.js.map +1 -0
- package/dist/types/types/conditionalFormatting.js +25 -0
- package/dist/types/types/conditionalFormatting.js.map +1 -0
- package/dist/types/types/content.js +19 -0
- package/dist/types/types/content.js.map +1 -0
- package/dist/types/types/csv.js +2 -0
- package/dist/types/types/csv.js.map +1 -0
- package/dist/types/types/dashboard.js +46 -0
- package/dist/types/types/dashboard.js.map +1 -0
- package/dist/types/types/dbt.js +262 -0
- package/dist/types/types/dbt.js.map +1 -0
- package/dist/types/types/dbtFromSchema.js +2 -0
- package/dist/types/types/dbtFromSchema.js.map +1 -0
- package/dist/types/types/deepPartial.js +7 -0
- package/dist/types/types/deepPartial.js.map +1 -0
- package/dist/types/types/downloadFile.js +9 -0
- package/dist/types/types/downloadFile.js.map +1 -0
- package/dist/types/types/email.js +2 -0
- package/dist/types/types/email.js.map +1 -0
- package/dist/types/types/errors.js +496 -0
- package/dist/types/types/errors.js.map +1 -0
- package/dist/types/types/explore.js +24 -0
- package/dist/types/types/explore.js.map +1 -0
- package/dist/types/types/featureFlags.js +62 -0
- package/dist/types/types/featureFlags.js.map +1 -0
- package/dist/types/types/field.js +473 -0
- package/dist/types/types/field.js.map +1 -0
- package/dist/types/types/field.test.js +90 -0
- package/dist/types/types/field.test.js.map +1 -0
- package/dist/types/types/fieldMatch.js +2 -0
- package/dist/types/types/fieldMatch.js.map +1 -0
- package/dist/types/types/filter.js +287 -0
- package/dist/types/types/filter.js.map +1 -0
- package/dist/types/types/filter.test.js +372 -0
- package/dist/types/types/filter.test.js.map +1 -0
- package/dist/types/types/filterGrammar.js +358 -0
- package/dist/types/types/filterGrammar.js.map +1 -0
- package/dist/types/types/filterGrammar.test.js +549 -0
- package/dist/types/types/filterGrammar.test.js.map +1 -0
- package/dist/types/types/filterGrammarConversion.js +94 -0
- package/dist/types/types/filterGrammarConversion.js.map +1 -0
- package/dist/types/types/filterGrammarConversion.test.js +260 -0
- package/dist/types/types/filterGrammarConversion.test.js.map +1 -0
- package/dist/types/types/gdrive.js +2 -0
- package/dist/types/types/gdrive.js.map +1 -0
- package/dist/types/types/gitIntegration.js +2 -0
- package/dist/types/types/gitIntegration.js.map +1 -0
- package/dist/types/types/groups.js +4 -0
- package/dist/types/types/groups.js.map +1 -0
- package/dist/types/types/job.js +67 -0
- package/dist/types/types/job.js.map +1 -0
- package/dist/types/types/knex-paginate.js +2 -0
- package/dist/types/types/knex-paginate.js.map +1 -0
- package/dist/types/types/lightdashProjectConfig.js +4 -0
- package/dist/types/types/lightdashProjectConfig.js.map +1 -0
- package/dist/types/types/metricQuery.js +20 -0
- package/dist/types/types/metricQuery.js.map +1 -0
- package/dist/types/types/metricsExplorer.js +12 -0
- package/dist/types/types/metricsExplorer.js.map +1 -0
- package/dist/types/types/notifications.js +2 -0
- package/dist/types/types/notifications.js.map +1 -0
- package/dist/types/types/oauth.js +2 -0
- package/dist/types/types/oauth.js.map +1 -0
- package/dist/types/types/openIdIdentity.js +12 -0
- package/dist/types/types/openIdIdentity.js.map +1 -0
- package/dist/types/types/organization.js +20 -0
- package/dist/types/types/organization.js.map +1 -0
- package/dist/types/types/organizationMemberProfile.js +30 -0
- package/dist/types/types/organizationMemberProfile.js.map +1 -0
- package/dist/types/types/organizationWarehouseCredentials.js +2 -0
- package/dist/types/types/organizationWarehouseCredentials.js.map +1 -0
- package/dist/types/types/paginateResults.js +2 -0
- package/dist/types/types/paginateResults.js.map +1 -0
- package/dist/types/types/parameters.js +2 -0
- package/dist/types/types/parameters.js.map +1 -0
- package/dist/types/types/personalAccessToken.js +2 -0
- package/dist/types/types/personalAccessToken.js.map +1 -0
- package/dist/types/types/pinning.js +5 -0
- package/dist/types/types/pinning.js.map +1 -0
- package/dist/types/types/pivot.d.ts +0 -2
- package/dist/types/types/pivot.d.ts.map +1 -1
- package/dist/types/types/pivot.js +2 -0
- package/dist/types/types/pivot.js.map +1 -0
- package/dist/types/types/projectGroupAccess.js +2 -0
- package/dist/types/types/projectGroupAccess.js.map +1 -0
- package/dist/types/types/projectMemberProfile.js +2 -0
- package/dist/types/types/projectMemberProfile.js.map +1 -0
- package/dist/types/types/projectMemberRole.js +30 -0
- package/dist/types/types/projectMemberRole.js.map +1 -0
- package/dist/types/types/projects.js +149 -0
- package/dist/types/types/projects.js.map +1 -0
- package/dist/types/types/promotion.js +8 -0
- package/dist/types/types/promotion.js.map +1 -0
- package/dist/types/types/queryHistory.js +8 -0
- package/dist/types/types/queryHistory.js.map +1 -0
- package/dist/types/types/rename.js +6 -0
- package/dist/types/types/rename.js.map +1 -0
- package/dist/types/types/resourceViewItem.d.ts +1 -1
- package/dist/types/types/resourceViewItem.js +103 -0
- package/dist/types/types/resourceViewItem.js.map +1 -0
- package/dist/types/types/results.js +51 -0
- package/dist/types/types/results.js.map +1 -0
- package/dist/types/types/roles.js +2 -0
- package/dist/types/types/roles.js.map +1 -0
- package/dist/types/types/savedCharts.js +225 -0
- package/dist/types/types/savedCharts.js.map +1 -0
- package/dist/types/types/scheduler.js +87 -0
- package/dist/types/types/scheduler.js.map +1 -0
- package/dist/types/types/schedulerLog.js +2 -0
- package/dist/types/types/schedulerLog.js.map +1 -0
- package/dist/types/types/schedulerTaskList.js +31 -0
- package/dist/types/types/schedulerTaskList.js.map +1 -0
- package/dist/types/types/scopes.js +14 -0
- package/dist/types/types/scopes.js.map +1 -0
- package/dist/types/types/search.js +53 -0
- package/dist/types/types/search.js.map +1 -0
- package/dist/types/types/share.js +2 -0
- package/dist/types/types/share.js.map +1 -0
- package/dist/types/types/slack.js +2 -0
- package/dist/types/types/slack.js.map +1 -0
- package/dist/types/types/slackSettings.js +2 -0
- package/dist/types/types/slackSettings.js.map +1 -0
- package/dist/types/types/space.js +7 -0
- package/dist/types/types/space.js.map +1 -0
- package/dist/types/types/spotlightTableConfig.js +17 -0
- package/dist/types/types/spotlightTableConfig.js.map +1 -0
- package/dist/types/types/sqlRunner.js +41 -0
- package/dist/types/types/sqlRunner.js.map +1 -0
- package/dist/types/types/table.js +6 -0
- package/dist/types/types/table.js.map +1 -0
- package/dist/types/types/tags.js +2 -0
- package/dist/types/types/tags.js.map +1 -0
- package/dist/types/types/timeFrames.js +42 -0
- package/dist/types/types/timeFrames.js.map +1 -0
- package/dist/types/types/timezone.js +33 -0
- package/dist/types/types/timezone.js.map +1 -0
- package/dist/types/types/user.js +23 -0
- package/dist/types/types/user.js.map +1 -0
- package/dist/types/types/userAttributes.js +2 -0
- package/dist/types/types/userAttributes.js.map +1 -0
- package/dist/types/types/userWarehouseCredentials.js +2 -0
- package/dist/types/types/userWarehouseCredentials.js.map +1 -0
- package/dist/types/types/validation.js +29 -0
- package/dist/types/types/validation.js.map +1 -0
- package/dist/types/types/warehouse.js +6 -0
- package/dist/types/types/warehouse.js.map +1 -0
- package/dist/types/types/yamlSchema.js +2 -0
- package/dist/types/types/yamlSchema.js.map +1 -0
- package/dist/types/utils/accessors.js +27 -0
- package/dist/types/utils/accessors.js.map +1 -0
- package/dist/types/utils/accessors.test.js +45 -0
- package/dist/types/utils/accessors.test.js.map +1 -0
- package/dist/types/utils/additionalMetrics.js +54 -0
- package/dist/types/utils/additionalMetrics.js.map +1 -0
- package/dist/types/utils/api.js +5 -0
- package/dist/types/utils/api.js.map +1 -0
- package/dist/types/utils/assertUnreachable.js +10 -0
- package/dist/types/utils/assertUnreachable.js.map +1 -0
- package/dist/types/utils/booleanConverter.js +27 -0
- package/dist/types/utils/booleanConverter.js.map +1 -0
- package/dist/types/utils/booleanConverter.test.js +59 -0
- package/dist/types/utils/booleanConverter.test.js.map +1 -0
- package/dist/types/utils/catalogMetricsTree.js +2 -0
- package/dist/types/utils/catalogMetricsTree.js.map +1 -0
- package/dist/types/utils/changeset.js +132 -0
- package/dist/types/utils/changeset.js.map +1 -0
- package/dist/types/utils/changeset.mock.js +146 -0
- package/dist/types/utils/changeset.mock.js.map +1 -0
- package/dist/types/utils/changeset.test.js +248 -0
- package/dist/types/utils/changeset.test.js.map +1 -0
- package/dist/types/utils/charts.js +74 -0
- package/dist/types/utils/charts.js.map +1 -0
- package/dist/types/utils/colors.js +15 -0
- package/dist/types/utils/colors.js.map +1 -0
- package/dist/types/utils/colors.test.js +85 -0
- package/dist/types/utils/colors.test.js.map +1 -0
- package/dist/types/utils/conditionalFormatting.js +436 -0
- package/dist/types/utils/conditionalFormatting.js.map +1 -0
- package/dist/types/utils/conditionalFormatting.test.js +105 -0
- package/dist/types/utils/conditionalFormatting.test.js.map +1 -0
- package/dist/types/utils/convertCustomDimensionsToYaml.js +115 -0
- package/dist/types/utils/convertCustomDimensionsToYaml.js.map +1 -0
- package/dist/types/utils/convertCustomMetricsToYaml.js +15 -0
- package/dist/types/utils/convertCustomMetricsToYaml.js.map +1 -0
- package/dist/types/utils/customDimensions.js +27 -0
- package/dist/types/utils/customDimensions.js.map +1 -0
- package/dist/types/utils/dashboard.js +35 -0
- package/dist/types/utils/dashboard.js.map +1 -0
- package/dist/types/utils/dashboard.test.js +36 -0
- package/dist/types/utils/dashboard.test.js.map +1 -0
- package/dist/types/utils/dbt.js +4 -0
- package/dist/types/utils/dbt.js.map +1 -0
- package/dist/types/utils/dbt.test.js +39 -0
- package/dist/types/utils/dbt.test.js.map +1 -0
- package/dist/types/utils/dependencyGraph.js +51 -0
- package/dist/types/utils/dependencyGraph.js.map +1 -0
- package/dist/types/utils/dependencyGraph.test.js +113 -0
- package/dist/types/utils/dependencyGraph.test.js.map +1 -0
- package/dist/types/utils/email.js +76 -0
- package/dist/types/utils/email.js.map +1 -0
- package/dist/types/utils/email.test.js +49 -0
- package/dist/types/utils/email.test.js.map +1 -0
- package/dist/types/utils/fields.js +183 -0
- package/dist/types/utils/fields.js.map +1 -0
- package/dist/types/utils/fields.mock.js +150 -0
- package/dist/types/utils/fields.mock.js.map +1 -0
- package/dist/types/utils/fields.test.js +259 -0
- package/dist/types/utils/fields.test.js.map +1 -0
- package/dist/types/utils/filters.js +763 -0
- package/dist/types/utils/filters.js.map +1 -0
- package/dist/types/utils/filters.mock.js +450 -0
- package/dist/types/utils/filters.mock.js.map +1 -0
- package/dist/types/utils/filters.test.js +360 -0
- package/dist/types/utils/filters.test.js.map +1 -0
- package/dist/types/utils/formatting.js +552 -0
- package/dist/types/utils/formatting.js.map +1 -0
- package/dist/types/utils/formatting.mock.js +28 -0
- package/dist/types/utils/formatting.mock.js.map +1 -0
- package/dist/types/utils/formatting.test.js +1047 -0
- package/dist/types/utils/formatting.test.js.map +1 -0
- package/dist/types/utils/github.js +11 -0
- package/dist/types/utils/github.js.map +1 -0
- package/dist/types/utils/i18n/abstract.js +3 -0
- package/dist/types/utils/i18n/abstract.js.map +1 -0
- package/dist/types/utils/i18n/chartAsCode.js +132 -0
- package/dist/types/utils/i18n/chartAsCode.js.map +1 -0
- package/dist/types/utils/i18n/chartAsCode.test.js +350 -0
- package/dist/types/utils/i18n/chartAsCode.test.js.map +1 -0
- package/dist/types/utils/i18n/dashboardAsCode.js +58 -0
- package/dist/types/utils/i18n/dashboardAsCode.js.map +1 -0
- package/dist/types/utils/i18n/index.js +5 -0
- package/dist/types/utils/i18n/index.js.map +1 -0
- package/dist/types/utils/i18n/merge.js +20 -0
- package/dist/types/utils/i18n/merge.js.map +1 -0
- package/dist/types/utils/i18n/types.js +2 -0
- package/dist/types/utils/i18n/types.js.map +1 -0
- package/dist/types/utils/item.js +154 -0
- package/dist/types/utils/item.js.map +1 -0
- package/dist/types/utils/loadLightdashProjectConfig.js +49 -0
- package/dist/types/utils/loadLightdashProjectConfig.js.map +1 -0
- package/dist/types/utils/loadLightdashProjectConfig.mock.js +127 -0
- package/dist/types/utils/loadLightdashProjectConfig.mock.js.map +1 -0
- package/dist/types/utils/loadLightdashProjectConfig.test.js +137 -0
- package/dist/types/utils/loadLightdashProjectConfig.test.js.map +1 -0
- package/dist/types/utils/metricsExplorer.js +365 -0
- package/dist/types/utils/metricsExplorer.js.map +1 -0
- package/dist/types/utils/oauth.js +242 -0
- package/dist/types/utils/oauth.js.map +1 -0
- package/dist/types/utils/organization.js +23 -0
- package/dist/types/utils/organization.js.map +1 -0
- package/dist/types/utils/projectMemberRole.js +85 -0
- package/dist/types/utils/projectMemberRole.js.map +1 -0
- package/dist/types/utils/projectMemberRole.test.js +36 -0
- package/dist/types/utils/projectMemberRole.test.js.map +1 -0
- package/dist/types/utils/promises.js +5 -0
- package/dist/types/utils/promises.js.map +1 -0
- package/dist/types/utils/sanitizeHtml.js +111 -0
- package/dist/types/utils/sanitizeHtml.js.map +1 -0
- package/dist/types/utils/sanitizeHtml.test.js +101 -0
- package/dist/types/utils/sanitizeHtml.test.js.map +1 -0
- package/dist/types/utils/scheduler.js +85 -0
- package/dist/types/utils/scheduler.js.map +1 -0
- package/dist/types/utils/scheduler.test.js +41 -0
- package/dist/types/utils/scheduler.test.js.map +1 -0
- package/dist/types/utils/searchParams.js +8 -0
- package/dist/types/utils/searchParams.js.map +1 -0
- package/dist/types/utils/sleep.js +6 -0
- package/dist/types/utils/sleep.js.map +1 -0
- package/dist/types/utils/slug.test.js +129 -0
- package/dist/types/utils/slug.test.js.map +1 -0
- package/dist/types/utils/slugs.js +55 -0
- package/dist/types/utils/slugs.js.map +1 -0
- package/dist/types/utils/subtotals.js +4 -0
- package/dist/types/utils/subtotals.js.map +1 -0
- package/dist/types/utils/time.js +25 -0
- package/dist/types/utils/time.js.map +1 -0
- package/dist/types/utils/timeFrames.js +529 -0
- package/dist/types/utils/timeFrames.js.map +1 -0
- package/dist/types/utils/timeFrames.test.js +50 -0
- package/dist/types/utils/timeFrames.test.js.map +1 -0
- package/dist/types/utils/virtualView.js +98 -0
- package/dist/types/utils/virtualView.js.map +1 -0
- package/dist/types/utils/warehouse.js +57 -0
- package/dist/types/utils/warehouse.js.map +1 -0
- package/dist/types/visualizations/CartesianChartDataModel.js +515 -0
- package/dist/types/visualizations/CartesianChartDataModel.js.map +1 -0
- package/dist/types/visualizations/PieChartDataModel.js +258 -0
- package/dist/types/visualizations/PieChartDataModel.js.map +1 -0
- package/dist/types/visualizations/TableDataModel.js +96 -0
- package/dist/types/visualizations/TableDataModel.js.map +1 -0
- package/dist/types/visualizations/chartTransformations.js +107 -0
- package/dist/types/visualizations/chartTransformations.js.map +1 -0
- package/dist/types/visualizations/helpers/getCartesianAxisFormatterConfig.js +142 -0
- package/dist/types/visualizations/helpers/getCartesianAxisFormatterConfig.js.map +1 -0
- package/dist/types/visualizations/types/IResultsRunner.js +2 -0
- package/dist/types/visualizations/types/IResultsRunner.js.map +1 -0
- package/dist/types/visualizations/types/index.js +78 -0
- package/dist/types/visualizations/types/index.js.map +1 -0
- package/package.json +1 -1
- package/dist/tsconfig.types.tsbuildinfo +0 -1
|
@@ -0,0 +1,763 @@
|
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
|
+
import isNil from 'lodash/isNil';
|
|
3
|
+
import moment from 'moment';
|
|
4
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
5
|
+
import { DashboardTileTypes } from '../types/dashboard';
|
|
6
|
+
import { DimensionType, MetricType, TableCalculationType, convertFieldRefToFieldId, isCustomSqlDimension, isDimension, isTableCalculation, } from '../types/field';
|
|
7
|
+
import { FilterOperator, FilterType, UnitOfTime, isAndFilterGroup, isFilterGroup, isFilterRule, isFilterRuleDefinedForFieldId, isJoinModelRequiredFilter, } from '../types/filter';
|
|
8
|
+
import { TimeFrames } from '../types/timeFrames';
|
|
9
|
+
import assertUnreachable from './assertUnreachable';
|
|
10
|
+
import { formatDate } from './formatting';
|
|
11
|
+
import { getItemId, getItemType, isDateItem } from './item';
|
|
12
|
+
export const getFilterRulesFromGroup = (filterGroup) => {
|
|
13
|
+
if (filterGroup) {
|
|
14
|
+
const items = isAndFilterGroup(filterGroup)
|
|
15
|
+
? filterGroup.and
|
|
16
|
+
: filterGroup.or;
|
|
17
|
+
return items.reduce((sum, item) => isFilterGroup(item)
|
|
18
|
+
? [...sum, ...getFilterRulesFromGroup(item)]
|
|
19
|
+
: [...sum, item], []);
|
|
20
|
+
}
|
|
21
|
+
return [];
|
|
22
|
+
};
|
|
23
|
+
export const getTotalFilterRules = (filters) => [
|
|
24
|
+
...getFilterRulesFromGroup(filters.dimensions),
|
|
25
|
+
...getFilterRulesFromGroup(filters.metrics),
|
|
26
|
+
...getFilterRulesFromGroup(filters.tableCalculations),
|
|
27
|
+
];
|
|
28
|
+
export const countTotalFilterRules = (filters) => getTotalFilterRules(filters).length;
|
|
29
|
+
export const hasNestedGroups = (filters) => {
|
|
30
|
+
const hasGroups = (filterGroup) => {
|
|
31
|
+
const items = isAndFilterGroup(filterGroup)
|
|
32
|
+
? filterGroup.and
|
|
33
|
+
: filterGroup.or;
|
|
34
|
+
return items.some(isFilterGroup);
|
|
35
|
+
};
|
|
36
|
+
return ((!!filters.dimensions && hasGroups(filters.dimensions)) ||
|
|
37
|
+
(!!filters.metrics && hasGroups(filters.metrics)) ||
|
|
38
|
+
(!!filters.tableCalculations && hasGroups(filters.tableCalculations)));
|
|
39
|
+
};
|
|
40
|
+
export const getItemsFromFilterGroup = (filterGroup) => {
|
|
41
|
+
if (filterGroup) {
|
|
42
|
+
return isAndFilterGroup(filterGroup) ? filterGroup.and : filterGroup.or;
|
|
43
|
+
}
|
|
44
|
+
return [];
|
|
45
|
+
};
|
|
46
|
+
export const getFilterGroupItemsPropertyName = (filterGroup) => {
|
|
47
|
+
if (filterGroup) {
|
|
48
|
+
return isAndFilterGroup(filterGroup) ? 'and' : 'or';
|
|
49
|
+
}
|
|
50
|
+
return 'and';
|
|
51
|
+
};
|
|
52
|
+
export const getFilterTypeFromItemType = (type) => {
|
|
53
|
+
switch (type) {
|
|
54
|
+
case DimensionType.STRING:
|
|
55
|
+
case MetricType.STRING:
|
|
56
|
+
case TableCalculationType.STRING:
|
|
57
|
+
return FilterType.STRING;
|
|
58
|
+
case DimensionType.NUMBER:
|
|
59
|
+
case MetricType.NUMBER:
|
|
60
|
+
case MetricType.PERCENTILE:
|
|
61
|
+
case MetricType.MEDIAN:
|
|
62
|
+
case MetricType.AVERAGE:
|
|
63
|
+
case MetricType.COUNT:
|
|
64
|
+
case MetricType.COUNT_DISTINCT:
|
|
65
|
+
case MetricType.SUM:
|
|
66
|
+
case MetricType.MIN:
|
|
67
|
+
case MetricType.MAX:
|
|
68
|
+
case MetricType.PERCENT_OF_PREVIOUS:
|
|
69
|
+
case MetricType.PERCENT_OF_TOTAL:
|
|
70
|
+
case MetricType.RUNNING_TOTAL:
|
|
71
|
+
case TableCalculationType.NUMBER:
|
|
72
|
+
return FilterType.NUMBER;
|
|
73
|
+
case DimensionType.TIMESTAMP:
|
|
74
|
+
case MetricType.TIMESTAMP:
|
|
75
|
+
case DimensionType.DATE:
|
|
76
|
+
case MetricType.DATE:
|
|
77
|
+
case TableCalculationType.DATE:
|
|
78
|
+
case TableCalculationType.TIMESTAMP:
|
|
79
|
+
return FilterType.DATE;
|
|
80
|
+
case DimensionType.BOOLEAN:
|
|
81
|
+
case MetricType.BOOLEAN:
|
|
82
|
+
case TableCalculationType.BOOLEAN:
|
|
83
|
+
return FilterType.BOOLEAN;
|
|
84
|
+
default: {
|
|
85
|
+
return assertUnreachable(type, `No filter type found for field type: ${type}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
export const getFilterTypeFromItem = (item) => {
|
|
90
|
+
const type = getItemType(item);
|
|
91
|
+
return getFilterTypeFromItemType(type);
|
|
92
|
+
};
|
|
93
|
+
export const timeframeToUnitOfTime = (timeframe) => {
|
|
94
|
+
switch (timeframe) {
|
|
95
|
+
case TimeFrames.MILLISECOND:
|
|
96
|
+
return UnitOfTime.milliseconds;
|
|
97
|
+
case TimeFrames.SECOND:
|
|
98
|
+
return UnitOfTime.seconds;
|
|
99
|
+
case TimeFrames.MINUTE:
|
|
100
|
+
return UnitOfTime.minutes;
|
|
101
|
+
case TimeFrames.HOUR:
|
|
102
|
+
return UnitOfTime.hours;
|
|
103
|
+
case TimeFrames.DAY:
|
|
104
|
+
return UnitOfTime.days;
|
|
105
|
+
case TimeFrames.WEEK:
|
|
106
|
+
return UnitOfTime.weeks;
|
|
107
|
+
case TimeFrames.MONTH:
|
|
108
|
+
return UnitOfTime.months;
|
|
109
|
+
case TimeFrames.QUARTER:
|
|
110
|
+
return UnitOfTime.quarters;
|
|
111
|
+
case TimeFrames.YEAR:
|
|
112
|
+
return UnitOfTime.years;
|
|
113
|
+
default:
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
export const supportsSingleValue = (filterType, filterOperator) => [FilterType.STRING, FilterType.NUMBER].includes(filterType) &&
|
|
118
|
+
[
|
|
119
|
+
FilterOperator.EQUALS,
|
|
120
|
+
FilterOperator.NOT_EQUALS,
|
|
121
|
+
FilterOperator.STARTS_WITH,
|
|
122
|
+
FilterOperator.ENDS_WITH,
|
|
123
|
+
FilterOperator.INCLUDE,
|
|
124
|
+
FilterOperator.NOT_INCLUDE,
|
|
125
|
+
].includes(filterOperator);
|
|
126
|
+
export const isWithValueFilter = (filterOperator) => filterOperator !== FilterOperator.NULL &&
|
|
127
|
+
filterOperator !== FilterOperator.NOT_NULL;
|
|
128
|
+
export const getFilterRuleWithDefaultValue = (filterType, field, filterRule, values) => {
|
|
129
|
+
const filterRuleDefaults = {};
|
|
130
|
+
if (![FilterOperator.NULL, FilterOperator.NOT_NULL].includes(filterRule.operator) &&
|
|
131
|
+
values !== null) {
|
|
132
|
+
switch (filterType) {
|
|
133
|
+
case FilterType.DATE: {
|
|
134
|
+
const value = values ? values[0] : undefined;
|
|
135
|
+
const isTimestamp = !field ||
|
|
136
|
+
(isCustomSqlDimension(field)
|
|
137
|
+
? field.dimensionType
|
|
138
|
+
: field.type) === DimensionType.TIMESTAMP;
|
|
139
|
+
if (filterRule.operator === FilterOperator.IN_THE_PAST ||
|
|
140
|
+
filterRule.operator === FilterOperator.NOT_IN_THE_PAST ||
|
|
141
|
+
filterRule.operator === FilterOperator.IN_THE_NEXT ||
|
|
142
|
+
filterRule.operator === FilterOperator.IN_THE_CURRENT ||
|
|
143
|
+
filterRule.operator === FilterOperator.NOT_IN_THE_CURRENT) {
|
|
144
|
+
const numberValue = value === undefined || typeof value !== 'number'
|
|
145
|
+
? 1
|
|
146
|
+
: value;
|
|
147
|
+
const defaultUnitOfTime = isDimension(field) && field.timeInterval
|
|
148
|
+
? timeframeToUnitOfTime(field.timeInterval)
|
|
149
|
+
: UnitOfTime.days;
|
|
150
|
+
filterRuleDefaults.values = [numberValue];
|
|
151
|
+
filterRuleDefaults.settings = {
|
|
152
|
+
unitOfTime: defaultUnitOfTime,
|
|
153
|
+
completed: false,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
else if (isTimestamp) {
|
|
157
|
+
const valueIsDate = value !== undefined && typeof value !== 'number';
|
|
158
|
+
// NOTE: Using .format() makes this a standard ISO string
|
|
159
|
+
const timestampValue = valueIsDate
|
|
160
|
+
? dayjs(value).format()
|
|
161
|
+
: dayjs().format();
|
|
162
|
+
filterRuleDefaults.values = [timestampValue];
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const valueIsDate = value !== undefined && typeof value !== 'number';
|
|
166
|
+
const defaultTimeIntervalValues = {
|
|
167
|
+
[TimeFrames.DAY]: moment(),
|
|
168
|
+
[TimeFrames.WEEK]: moment(valueIsDate ? value : undefined).startOf('week'),
|
|
169
|
+
[TimeFrames.QUARTER]: moment(valueIsDate ? value : undefined).startOf('quarter'),
|
|
170
|
+
[TimeFrames.MONTH]: moment(valueIsDate ? value : undefined).startOf('month'),
|
|
171
|
+
[TimeFrames.YEAR]: moment(valueIsDate ? value : undefined).startOf('year'),
|
|
172
|
+
};
|
|
173
|
+
const fieldTimeInterval = isDimension(field) && field.timeInterval
|
|
174
|
+
? field.timeInterval
|
|
175
|
+
: undefined;
|
|
176
|
+
const defaultDate = fieldTimeInterval &&
|
|
177
|
+
defaultTimeIntervalValues[fieldTimeInterval]
|
|
178
|
+
? defaultTimeIntervalValues[fieldTimeInterval]
|
|
179
|
+
: moment();
|
|
180
|
+
const dateValue = valueIsDate
|
|
181
|
+
? formatDate(
|
|
182
|
+
// Treat the date as UTC, then remove its timezone information before formatting
|
|
183
|
+
moment.utc(value).format('YYYY-MM-DD'),
|
|
184
|
+
// For QUARTER, we don't want to use the field's time interval(YYYY-[Q]Q) because the date is already in the correct format when generating the SQL
|
|
185
|
+
fieldTimeInterval === TimeFrames.QUARTER
|
|
186
|
+
? undefined
|
|
187
|
+
: fieldTimeInterval, // Use the field's time interval if it has one
|
|
188
|
+
false)
|
|
189
|
+
: formatDate(defaultDate, undefined, false);
|
|
190
|
+
filterRuleDefaults.values = [dateValue];
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
case FilterType.BOOLEAN: {
|
|
195
|
+
filterRuleDefaults.values =
|
|
196
|
+
values !== undefined ? values : [false];
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
default:
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
...filterRule,
|
|
205
|
+
values: values !== undefined && values !== null ? values : [],
|
|
206
|
+
settings: undefined,
|
|
207
|
+
...filterRuleDefaults,
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
export const getFilterRuleFromFieldWithDefaultValue = (field, filterRule, values) => getFilterRuleWithDefaultValue(getFilterTypeFromItem(field), field, filterRule, values);
|
|
211
|
+
export const createFilterRuleFromField = (field, value) => getFilterRuleFromFieldWithDefaultValue(field, {
|
|
212
|
+
id: uuidv4(),
|
|
213
|
+
target: {
|
|
214
|
+
fieldId: getItemId(field),
|
|
215
|
+
},
|
|
216
|
+
operator: value === null ? FilterOperator.NULL : FilterOperator.EQUALS,
|
|
217
|
+
}, value ? [value] : []);
|
|
218
|
+
export const matchFieldExact = (a) => (b) => a.type === b.type && a.name === b.name && a.table === b.table;
|
|
219
|
+
export const matchFieldByTypeAndName = (a) => (b) => a.type === b.type && a.name === b.name;
|
|
220
|
+
export const matchFieldByType = (a) => (b) => a.type === b.type;
|
|
221
|
+
export const isTileFilterable = (tile) => ![DashboardTileTypes.MARKDOWN, DashboardTileTypes.LOOM].includes(tile.type);
|
|
222
|
+
const getDefaultTileTargets = (field, availableTileFilters) => Object.entries(availableTileFilters).reduce((acc, [tileUuid, availableFilters]) => {
|
|
223
|
+
if (!availableFilters)
|
|
224
|
+
return acc;
|
|
225
|
+
const filterableField = availableFilters.find(matchFieldExact(field));
|
|
226
|
+
if (!filterableField)
|
|
227
|
+
return acc;
|
|
228
|
+
return {
|
|
229
|
+
...acc,
|
|
230
|
+
[tileUuid]: {
|
|
231
|
+
fieldId: getItemId(filterableField),
|
|
232
|
+
tableName: filterableField.table,
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}, {});
|
|
236
|
+
export const applyDefaultTileTargets = (filterRule, field, availableTileFilters) => {
|
|
237
|
+
if (!filterRule.tileTargets) {
|
|
238
|
+
return {
|
|
239
|
+
...filterRule,
|
|
240
|
+
tileTargets: getDefaultTileTargets(field, availableTileFilters),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
return filterRule;
|
|
244
|
+
};
|
|
245
|
+
export const createDashboardFilterRuleFromField = ({ field, availableTileFilters, isTemporary, value, }) => getFilterRuleFromFieldWithDefaultValue(field, {
|
|
246
|
+
id: uuidv4(),
|
|
247
|
+
operator: value === null ? FilterOperator.NULL : FilterOperator.EQUALS,
|
|
248
|
+
target: {
|
|
249
|
+
fieldId: getItemId(field),
|
|
250
|
+
tableName: field.table,
|
|
251
|
+
fieldName: field.name,
|
|
252
|
+
},
|
|
253
|
+
tileTargets: getDefaultTileTargets(field, availableTileFilters),
|
|
254
|
+
disabled: !isTemporary,
|
|
255
|
+
label: undefined,
|
|
256
|
+
}, !isNil(value) ? [value] : null);
|
|
257
|
+
const getDefaultTileSqlTargets = (column, availableTileColumns) => Object.entries(availableTileColumns).reduce((acc, [tileUuid, availableColumns]) => {
|
|
258
|
+
if (!availableColumns)
|
|
259
|
+
return acc;
|
|
260
|
+
const filterableField = availableColumns.find((target) => target.reference === column.reference);
|
|
261
|
+
if (!filterableField)
|
|
262
|
+
return acc;
|
|
263
|
+
return {
|
|
264
|
+
...acc,
|
|
265
|
+
[tileUuid]: {
|
|
266
|
+
fieldId: filterableField.reference,
|
|
267
|
+
tableName: `sql_chart`,
|
|
268
|
+
isSqlColumn: true,
|
|
269
|
+
fallbackType: filterableField.type,
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}, {});
|
|
273
|
+
export const createDashboardFilterRuleFromSqlColumn = ({ column, availableTileColumns, isTemporary, value, }) => getFilterRuleWithDefaultValue(getFilterTypeFromItemType(column.type), undefined, {
|
|
274
|
+
id: uuidv4(),
|
|
275
|
+
operator: value === null ? FilterOperator.NULL : FilterOperator.EQUALS,
|
|
276
|
+
target: {
|
|
277
|
+
fieldId: column.reference,
|
|
278
|
+
tableName: 'sql_chart',
|
|
279
|
+
isSqlColumn: true,
|
|
280
|
+
fallbackType: column.type,
|
|
281
|
+
},
|
|
282
|
+
tileTargets: getDefaultTileSqlTargets(column, availableTileColumns),
|
|
283
|
+
disabled: !isTemporary,
|
|
284
|
+
label: undefined,
|
|
285
|
+
}, !isNil(value) ? [value] : null);
|
|
286
|
+
export const addFilterRule = ({ filters, field, value, }) => {
|
|
287
|
+
const groupKey = ((f) => {
|
|
288
|
+
if (isDimension(f) || isCustomSqlDimension(f)) {
|
|
289
|
+
return 'dimensions';
|
|
290
|
+
}
|
|
291
|
+
if (isTableCalculation(f)) {
|
|
292
|
+
return 'tableCalculations';
|
|
293
|
+
}
|
|
294
|
+
return 'metrics';
|
|
295
|
+
})(field);
|
|
296
|
+
const group = filters[groupKey];
|
|
297
|
+
return {
|
|
298
|
+
...filters,
|
|
299
|
+
[groupKey]: {
|
|
300
|
+
id: uuidv4(),
|
|
301
|
+
...group,
|
|
302
|
+
[getFilterGroupItemsPropertyName(group)]: [
|
|
303
|
+
...getItemsFromFilterGroup(group),
|
|
304
|
+
createFilterRuleFromField(field, value),
|
|
305
|
+
],
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
};
|
|
309
|
+
/**
|
|
310
|
+
* Takes a filter group and flattens it by merging nested groups into the parent group if they are the same filter group type
|
|
311
|
+
* @param filterGroup - The filter group to flatten
|
|
312
|
+
* @returns Flattened filter group
|
|
313
|
+
*/
|
|
314
|
+
const flattenSameFilterGroupType = (filterGroup) => {
|
|
315
|
+
const items = getItemsFromFilterGroup(filterGroup);
|
|
316
|
+
return {
|
|
317
|
+
id: filterGroup.id,
|
|
318
|
+
[getFilterGroupItemsPropertyName(filterGroup)]: items.reduce((acc, item) => {
|
|
319
|
+
if (isFilterGroup(item)) {
|
|
320
|
+
const flatGroup = flattenSameFilterGroupType(item);
|
|
321
|
+
// If the parent group is the same type as the current group, we merge the current group items into the parent group
|
|
322
|
+
if (getFilterGroupItemsPropertyName(flatGroup) ===
|
|
323
|
+
getFilterGroupItemsPropertyName(filterGroup)) {
|
|
324
|
+
return [...acc, ...getItemsFromFilterGroup(flatGroup)];
|
|
325
|
+
}
|
|
326
|
+
// If the parent group is not the same type as the current group, we just add the current group as an item
|
|
327
|
+
return [...acc, flatGroup];
|
|
328
|
+
}
|
|
329
|
+
return [...acc, item];
|
|
330
|
+
}, []),
|
|
331
|
+
};
|
|
332
|
+
};
|
|
333
|
+
/**
|
|
334
|
+
* Checks if a dimension value is an invalid date before it is added to the filter
|
|
335
|
+
* @param item - The field to compare against the value
|
|
336
|
+
* @param value - The value to check
|
|
337
|
+
* @returns True if the value is an invalid date, false otherwise
|
|
338
|
+
*/
|
|
339
|
+
export const isDimensionValueInvalidDate = (item, value) => isDateItem(item) && value.raw === 'Invalid Date'; // Message from moment.js when it can't parse a date
|
|
340
|
+
/**
|
|
341
|
+
* Takes a filter group and build a filters object from it based on the field type
|
|
342
|
+
* @param filterGroup - The filter group to extract filters from
|
|
343
|
+
* @param fields - Fields to compare against the filter group items to determine types
|
|
344
|
+
* @returns Filters object with dimensions, metrics, and table calculations
|
|
345
|
+
*/
|
|
346
|
+
export const getFiltersFromGroup = (filterGroup, fields) => {
|
|
347
|
+
const flatFilterGroup = flattenSameFilterGroupType(filterGroup);
|
|
348
|
+
const items = getItemsFromFilterGroup(flatFilterGroup);
|
|
349
|
+
return items.reduce((accumulator, item) => {
|
|
350
|
+
if (isFilterRule(item)) {
|
|
351
|
+
// when filter group item is a filter rule, we find the field it's targeting
|
|
352
|
+
const fieldInRule = fields.find((field) => getItemId(field) === item.target.fieldId);
|
|
353
|
+
// determine the type of the field and add the rule it to the correct filters object property
|
|
354
|
+
// always keep the parent filter group type (AND/OR) when adding the filter rules
|
|
355
|
+
if (fieldInRule) {
|
|
356
|
+
if (isDimension(fieldInRule) ||
|
|
357
|
+
isCustomSqlDimension(fieldInRule)) {
|
|
358
|
+
accumulator.dimensions = {
|
|
359
|
+
id: uuidv4(),
|
|
360
|
+
...accumulator.dimensions,
|
|
361
|
+
[getFilterGroupItemsPropertyName(flatFilterGroup)]: [
|
|
362
|
+
...getItemsFromFilterGroup(accumulator.dimensions),
|
|
363
|
+
item,
|
|
364
|
+
],
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
else if (isTableCalculation(fieldInRule)) {
|
|
368
|
+
accumulator.tableCalculations = {
|
|
369
|
+
id: uuidv4(),
|
|
370
|
+
...accumulator.tableCalculations,
|
|
371
|
+
[getFilterGroupItemsPropertyName(flatFilterGroup)]: [
|
|
372
|
+
...getItemsFromFilterGroup(accumulator.tableCalculations),
|
|
373
|
+
item,
|
|
374
|
+
],
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
accumulator.metrics = {
|
|
379
|
+
id: uuidv4(),
|
|
380
|
+
...accumulator.metrics,
|
|
381
|
+
[getFilterGroupItemsPropertyName(flatFilterGroup)]: [
|
|
382
|
+
...getItemsFromFilterGroup(accumulator.metrics),
|
|
383
|
+
item,
|
|
384
|
+
],
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
if (isFilterGroup(item)) {
|
|
390
|
+
// when filter group item is a filter group, we need to recursively call this function to extract filters objects from the nested group
|
|
391
|
+
// then we add each field type filter group - from nested filters group - into the correct parent filters object property keeping the parent filter group type (AND/OR)
|
|
392
|
+
const filters = getFiltersFromGroup(item, fields);
|
|
393
|
+
if (filters.dimensions) {
|
|
394
|
+
accumulator.dimensions = {
|
|
395
|
+
id: uuidv4(),
|
|
396
|
+
...accumulator.dimensions,
|
|
397
|
+
[getFilterGroupItemsPropertyName(flatFilterGroup)]: [
|
|
398
|
+
...getItemsFromFilterGroup(accumulator.dimensions),
|
|
399
|
+
filters.dimensions,
|
|
400
|
+
],
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
if (filters.metrics) {
|
|
404
|
+
accumulator.metrics = {
|
|
405
|
+
id: uuidv4(),
|
|
406
|
+
...accumulator.metrics,
|
|
407
|
+
[getFilterGroupItemsPropertyName(flatFilterGroup)]: [
|
|
408
|
+
...getItemsFromFilterGroup(accumulator.metrics),
|
|
409
|
+
filters.metrics,
|
|
410
|
+
],
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
if (filters.tableCalculations) {
|
|
414
|
+
accumulator.tableCalculations = {
|
|
415
|
+
id: uuidv4(),
|
|
416
|
+
...accumulator.tableCalculations,
|
|
417
|
+
[getFilterGroupItemsPropertyName(flatFilterGroup)]: [
|
|
418
|
+
...getItemsFromFilterGroup(accumulator.tableCalculations),
|
|
419
|
+
filters.tableCalculations,
|
|
420
|
+
],
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
return accumulator;
|
|
425
|
+
}, {});
|
|
426
|
+
};
|
|
427
|
+
export const deleteFilterRuleFromGroup = (filterGroup, id) => {
|
|
428
|
+
const items = getItemsFromFilterGroup(filterGroup);
|
|
429
|
+
// If the filter group contains the rule we want to delete, we remove it
|
|
430
|
+
if (items.some((rule) => rule.id === id)) {
|
|
431
|
+
return {
|
|
432
|
+
id: filterGroup.id,
|
|
433
|
+
[getFilterGroupItemsPropertyName(filterGroup)]: items.filter((rule) => rule.id !== id),
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
const groupGroups = items.filter(isFilterGroup);
|
|
437
|
+
const groupItems = items.filter(isFilterRule);
|
|
438
|
+
// If the filter group contains nested groups, we recursively call this function on each nested group
|
|
439
|
+
const newGroups = groupGroups.map((group) => deleteFilterRuleFromGroup(group, id));
|
|
440
|
+
return {
|
|
441
|
+
id: filterGroup.id,
|
|
442
|
+
[getFilterGroupItemsPropertyName(filterGroup)]: [
|
|
443
|
+
...groupItems,
|
|
444
|
+
...newGroups,
|
|
445
|
+
],
|
|
446
|
+
};
|
|
447
|
+
};
|
|
448
|
+
export const getDashboardFilterRulesForTile = (tileUuid, rules, needsExplicitTileOverride = false) => rules
|
|
449
|
+
.filter((rule) => !rule.disabled)
|
|
450
|
+
.map((filter) => {
|
|
451
|
+
const tileConfig = filter.tileTargets?.[tileUuid];
|
|
452
|
+
// If the config is false, we remove this filter
|
|
453
|
+
if (tileConfig === false) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
// If the tile isn't in the tileTarget overrides,
|
|
457
|
+
// we return the filter and don't treat this tile
|
|
458
|
+
// differently.
|
|
459
|
+
if (tileConfig === undefined) {
|
|
460
|
+
// If needs explicit override, we remove this filter
|
|
461
|
+
if (needsExplicitTileOverride) {
|
|
462
|
+
return null;
|
|
463
|
+
}
|
|
464
|
+
return filter;
|
|
465
|
+
}
|
|
466
|
+
return {
|
|
467
|
+
...filter,
|
|
468
|
+
target: tileConfig,
|
|
469
|
+
};
|
|
470
|
+
})
|
|
471
|
+
.filter((f) => f !== null);
|
|
472
|
+
export const getTabUuidsForFilterRules = (dashboardTiles, filters, filterableFieldsByTileUuid) => {
|
|
473
|
+
if (!dashboardTiles)
|
|
474
|
+
return {};
|
|
475
|
+
return dashboardTiles.reduce((acc, tile) => {
|
|
476
|
+
if (!tile.tabUuid || !isTileFilterable(tile)) {
|
|
477
|
+
return acc;
|
|
478
|
+
}
|
|
479
|
+
const filterIdsForTile = getDashboardFilterRulesForTile(tile.uuid, filters.dimensions)
|
|
480
|
+
.filter((filterRule) => {
|
|
481
|
+
const tileConfig = filterRule.tileTargets?.[tile.uuid];
|
|
482
|
+
// TODO: Move this fallback logic to the getDashboardFilterRulesForTile function
|
|
483
|
+
if (tileConfig === undefined && filterableFieldsByTileUuid) {
|
|
484
|
+
return filterableFieldsByTileUuid[tile.uuid]?.some((f) => getItemId(f) === filterRule.target.fieldId);
|
|
485
|
+
}
|
|
486
|
+
// Apply filter to tile
|
|
487
|
+
return !!tileConfig;
|
|
488
|
+
})
|
|
489
|
+
.map((tileFilter) => tileFilter.id);
|
|
490
|
+
// Set filter id as key and tile tab uuids as values
|
|
491
|
+
filterIdsForTile.forEach((filterId) => {
|
|
492
|
+
if (!acc[filterId]) {
|
|
493
|
+
acc[filterId] = [];
|
|
494
|
+
}
|
|
495
|
+
if (tile.tabUuid && !acc[filterId].includes(tile.tabUuid)) {
|
|
496
|
+
acc[filterId].push(tile.tabUuid);
|
|
497
|
+
}
|
|
498
|
+
});
|
|
499
|
+
return acc;
|
|
500
|
+
}, {});
|
|
501
|
+
};
|
|
502
|
+
export const getDashboardFilterRulesForTileAndReferences = (tileUuid, references, rules) => getDashboardFilterRulesForTile(tileUuid, rules, true).filter((f) => f.target.isSqlColumn && references.includes(f.target.fieldId));
|
|
503
|
+
export const getDashboardFilterRulesForTables = (tables, rules) => rules.filter((f) => tables.includes(f.target.tableName));
|
|
504
|
+
export const getDashboardFilterRulesForTileAndTables = (tileUuid, tables, rules) => getDashboardFilterRulesForTables(tables, getDashboardFilterRulesForTile(tileUuid, rules));
|
|
505
|
+
export const getDashboardFiltersForTileAndTables = (tileUuid, tables, dashboardFilters) => ({
|
|
506
|
+
dimensions: getDashboardFilterRulesForTileAndTables(tileUuid, tables, dashboardFilters.dimensions),
|
|
507
|
+
metrics: getDashboardFilterRulesForTileAndTables(tileUuid, tables, dashboardFilters.metrics),
|
|
508
|
+
tableCalculations: getDashboardFilterRulesForTileAndTables(tileUuid, tables, dashboardFilters.tableCalculations),
|
|
509
|
+
});
|
|
510
|
+
const combineFilterGroups = (a, b) => ({
|
|
511
|
+
id: uuidv4(),
|
|
512
|
+
and: [a, b].filter((f) => !!f),
|
|
513
|
+
});
|
|
514
|
+
export const addFiltersToMetricQuery = (metricQuery, filters) => ({
|
|
515
|
+
...metricQuery,
|
|
516
|
+
filters: {
|
|
517
|
+
dimensions: combineFilterGroups(metricQuery.filters?.dimensions, filters.dimensions),
|
|
518
|
+
metrics: combineFilterGroups(metricQuery.filters?.metrics, filters.metrics),
|
|
519
|
+
tableCalculations: combineFilterGroups(metricQuery.filters?.tableCalculations, filters.tableCalculations),
|
|
520
|
+
},
|
|
521
|
+
});
|
|
522
|
+
/**
|
|
523
|
+
* This function is used to override the chart filter with the dashboard filter
|
|
524
|
+
* if the dashboard filter is a time or date dimension and the chart filter is a different granularity of the same dimension
|
|
525
|
+
* or if the dashboard filter is the same dimension as the chart filter
|
|
526
|
+
* Example:
|
|
527
|
+
* Chart has a filter order_date_month; User applies Dashboard filter order_date_year
|
|
528
|
+
* The chart filter will be overridden with the dashboard filter
|
|
529
|
+
* set in the timeBasedOverrideMap so we know which metric filter to override
|
|
530
|
+
* Another example:
|
|
531
|
+
* Chart has a filter is_completed: true; User applies Dashboard filter is_completed: false
|
|
532
|
+
* The chart filter will be overridden with the dashboard filter (is_completed: false)
|
|
533
|
+
* @param item - The item to override
|
|
534
|
+
* @param filterRulesList - The list of filter rules to check against
|
|
535
|
+
* @param timeBasedOverrideMap - The map of overridden filters
|
|
536
|
+
* @returns The overridden item
|
|
537
|
+
*/
|
|
538
|
+
const findAndOverrideChartFilter = (item, filterRulesList, timeBasedOverrideMap) => {
|
|
539
|
+
const identicalDashboardFilter = isFilterRule(item)
|
|
540
|
+
? filterRulesList.find((dashboardFilter) => {
|
|
541
|
+
const overrideData = timeBasedOverrideMap?.[dashboardFilter.id];
|
|
542
|
+
return (overrideData?.fieldsToChange.includes(item.target.fieldId) ||
|
|
543
|
+
dashboardFilter.target.fieldId === item.target.fieldId);
|
|
544
|
+
})
|
|
545
|
+
: undefined;
|
|
546
|
+
return identicalDashboardFilter
|
|
547
|
+
? {
|
|
548
|
+
...item,
|
|
549
|
+
target: {
|
|
550
|
+
fieldId: identicalDashboardFilter.target.fieldId,
|
|
551
|
+
},
|
|
552
|
+
id: identicalDashboardFilter.id,
|
|
553
|
+
values: identicalDashboardFilter.values,
|
|
554
|
+
...(identicalDashboardFilter.settings && {
|
|
555
|
+
settings: identicalDashboardFilter.settings,
|
|
556
|
+
}),
|
|
557
|
+
operator: identicalDashboardFilter.operator,
|
|
558
|
+
}
|
|
559
|
+
: item;
|
|
560
|
+
};
|
|
561
|
+
export const overrideChartFilter = (filterGroup, filterRules, timeBasedOverrideMap) => isAndFilterGroup(filterGroup)
|
|
562
|
+
? {
|
|
563
|
+
id: filterGroup.id,
|
|
564
|
+
and: filterGroup.and.map((item) => findAndOverrideChartFilter(item, filterRules, timeBasedOverrideMap)),
|
|
565
|
+
}
|
|
566
|
+
: {
|
|
567
|
+
id: filterGroup.id,
|
|
568
|
+
or: filterGroup.or.map((item) => findAndOverrideChartFilter(item, filterRules, timeBasedOverrideMap)),
|
|
569
|
+
};
|
|
570
|
+
const getDeduplicatedFilterRules = (filterRules, filterGroup) => {
|
|
571
|
+
const groupFilterRules = getFilterRulesFromGroup(filterGroup);
|
|
572
|
+
return filterRules.filter((rule) => !groupFilterRules.some((groupRule) => groupRule.id === rule.id));
|
|
573
|
+
};
|
|
574
|
+
/**
|
|
575
|
+
* Merges dashboard filters with existing filters using override tracking
|
|
576
|
+
* @param filterGroup - Existing filter group to override
|
|
577
|
+
* @param filterRules - Dashboard filter rules to apply
|
|
578
|
+
* @param timeBasedOverrideMap - Dictionary tracking time-based field relationships
|
|
579
|
+
* @returns New combined filter group with overrides applied
|
|
580
|
+
*/
|
|
581
|
+
export const overrideFilterGroupWithFilterRules = (filterGroup, filterRules, timeBasedOverrideMap) => {
|
|
582
|
+
if (!filterGroup) {
|
|
583
|
+
return {
|
|
584
|
+
id: uuidv4(),
|
|
585
|
+
and: filterRules,
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
const overriddenGroup = overrideChartFilter(filterGroup, filterRules, timeBasedOverrideMap);
|
|
589
|
+
// deduplicate the dashboard filter rules from the ones used when overriding the chart filterGroup
|
|
590
|
+
const deduplicatedRules = getDeduplicatedFilterRules(filterRules, overriddenGroup);
|
|
591
|
+
// if it's AND group we don't need to sub-group the rules - all can be in the same group
|
|
592
|
+
// if it's OR group we need to sub-group the rules
|
|
593
|
+
const overridenGroupItems = isAndFilterGroup(overriddenGroup)
|
|
594
|
+
? overriddenGroup.and
|
|
595
|
+
: [overriddenGroup];
|
|
596
|
+
return {
|
|
597
|
+
id: uuidv4(),
|
|
598
|
+
and: [...overridenGroupItems, ...deduplicatedRules],
|
|
599
|
+
};
|
|
600
|
+
};
|
|
601
|
+
const convertDashboardFilterRuleToFilterRule = (dashboardFilterRule) => ({
|
|
602
|
+
id: dashboardFilterRule.id,
|
|
603
|
+
target: {
|
|
604
|
+
// ...dashboardFilterRule.target,
|
|
605
|
+
fieldId: dashboardFilterRule.target.fieldId,
|
|
606
|
+
},
|
|
607
|
+
operator: dashboardFilterRule.operator,
|
|
608
|
+
values: dashboardFilterRule.values,
|
|
609
|
+
...(dashboardFilterRule.settings && {
|
|
610
|
+
settings: dashboardFilterRule.settings,
|
|
611
|
+
}),
|
|
612
|
+
...(dashboardFilterRule.disabled && {
|
|
613
|
+
disabled: dashboardFilterRule.disabled,
|
|
614
|
+
}),
|
|
615
|
+
});
|
|
616
|
+
const getFieldIdWithoutTable = (fieldId, tableName) => fieldId.replace(`${tableName}_`, '');
|
|
617
|
+
/**
|
|
618
|
+
* Tracks time-based metric filters that need overriding via external map
|
|
619
|
+
* @param metricQueryDimensionFilters - Existing dimension filters in the query
|
|
620
|
+
* @param dashboardFilterRule - Dashboard filter being applied
|
|
621
|
+
* @param explore - Explore context for field relationships
|
|
622
|
+
* @returns Filter rule with override data for external tracking
|
|
623
|
+
*/
|
|
624
|
+
export const trackWhichTimeBasedMetricFiltersToOverride = (metricQueryDimensionFilters, dashboardFilterRule, explore) => {
|
|
625
|
+
if (!explore)
|
|
626
|
+
return { filter: dashboardFilterRule };
|
|
627
|
+
const baseDimension = explore.tables[dashboardFilterRule.target.tableName]?.dimensions[getFieldIdWithoutTable(dashboardFilterRule.target.fieldId, dashboardFilterRule.target.tableName)];
|
|
628
|
+
if (!baseDimension?.timeIntervalBaseDimensionName) {
|
|
629
|
+
return { filter: dashboardFilterRule };
|
|
630
|
+
}
|
|
631
|
+
const traverseFilterGroup = (filterGroup) => {
|
|
632
|
+
if (!filterGroup)
|
|
633
|
+
return [];
|
|
634
|
+
return getItemsFromFilterGroup(filterGroup).reduce((acc, item) => {
|
|
635
|
+
if (isFilterGroup(item)) {
|
|
636
|
+
return [...acc, ...traverseFilterGroup(item)];
|
|
637
|
+
}
|
|
638
|
+
if (isFilterRule(item)) {
|
|
639
|
+
const itemFieldId = getFieldIdWithoutTable(item.target.fieldId, dashboardFilterRule.target.tableName);
|
|
640
|
+
const itemDimension = explore.tables[dashboardFilterRule.target.tableName]
|
|
641
|
+
?.dimensions[itemFieldId];
|
|
642
|
+
const isTimeOrDateDimension = itemDimension?.timeIntervalBaseDimensionName ===
|
|
643
|
+
baseDimension.timeIntervalBaseDimensionName;
|
|
644
|
+
if (isTimeOrDateDimension) {
|
|
645
|
+
return [...acc, item.target.fieldId];
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
return acc;
|
|
649
|
+
}, []);
|
|
650
|
+
};
|
|
651
|
+
const fieldsToChange = traverseFilterGroup(metricQueryDimensionFilters);
|
|
652
|
+
return fieldsToChange.length > 0
|
|
653
|
+
? {
|
|
654
|
+
filter: dashboardFilterRule,
|
|
655
|
+
overrideData: {
|
|
656
|
+
baseTimeDimensionName: baseDimension.timeIntervalBaseDimensionName,
|
|
657
|
+
fieldsToChange,
|
|
658
|
+
},
|
|
659
|
+
}
|
|
660
|
+
: { filter: dashboardFilterRule };
|
|
661
|
+
};
|
|
662
|
+
/**
|
|
663
|
+
* Adds dashboard filters to a metric query while tracking time-based overrides
|
|
664
|
+
* @param metricQuery - The original metric query
|
|
665
|
+
* @param dashboardFilters - Dashboard filters to apply
|
|
666
|
+
* @param explore - Explore context for field validation
|
|
667
|
+
* @returns Enhanced metric query with merged filters and override map
|
|
668
|
+
*/
|
|
669
|
+
export const addDashboardFiltersToMetricQuery = (metricQuery, dashboardFilters, explore) => {
|
|
670
|
+
const timeBasedOverrideMap = {};
|
|
671
|
+
const processedDimensionFilters = dashboardFilters.dimensions
|
|
672
|
+
.map((filter) => {
|
|
673
|
+
const result = trackWhichTimeBasedMetricFiltersToOverride(metricQuery.filters?.dimensions, filter, explore);
|
|
674
|
+
if (result.overrideData) {
|
|
675
|
+
timeBasedOverrideMap[filter.id] = result.overrideData;
|
|
676
|
+
}
|
|
677
|
+
return result.filter;
|
|
678
|
+
})
|
|
679
|
+
.map(convertDashboardFilterRuleToFilterRule);
|
|
680
|
+
return {
|
|
681
|
+
...metricQuery,
|
|
682
|
+
filters: {
|
|
683
|
+
dimensions: overrideFilterGroupWithFilterRules(metricQuery.filters?.dimensions, processedDimensionFilters, timeBasedOverrideMap),
|
|
684
|
+
metrics: overrideFilterGroupWithFilterRules(metricQuery.filters?.metrics, dashboardFilters.metrics.map(convertDashboardFilterRuleToFilterRule), undefined),
|
|
685
|
+
tableCalculations: overrideFilterGroupWithFilterRules(metricQuery.filters?.tableCalculations, dashboardFilters.tableCalculations.map(convertDashboardFilterRuleToFilterRule), undefined),
|
|
686
|
+
},
|
|
687
|
+
};
|
|
688
|
+
};
|
|
689
|
+
export const createFilterRuleFromModelRequiredFilterRule = (filter, tableName) => ({
|
|
690
|
+
id: filter.id,
|
|
691
|
+
target: {
|
|
692
|
+
fieldId: convertFieldRefToFieldId(filter.target.fieldRef, tableName),
|
|
693
|
+
},
|
|
694
|
+
operator: filter.operator,
|
|
695
|
+
values: filter.values,
|
|
696
|
+
...(filter.settings?.unitOfTime && {
|
|
697
|
+
settings: {
|
|
698
|
+
unitOfTime: filter.settings.unitOfTime,
|
|
699
|
+
},
|
|
700
|
+
}),
|
|
701
|
+
required: filter.required === undefined ? true : filter.required,
|
|
702
|
+
});
|
|
703
|
+
export const isFilterRuleInQuery = (dimension, filterRule, dimensionsFilterGroup) => {
|
|
704
|
+
let dimensionFieldId = filterRule.target.fieldId;
|
|
705
|
+
const timeDimension = dimension.isIntervalBase || dimension.timeInterval !== undefined;
|
|
706
|
+
if (!dimension.isIntervalBase && dimension.timeInterval) {
|
|
707
|
+
dimensionFieldId = dimensionFieldId.replace(`_${dimension.timeInterval.toLowerCase()}`, '');
|
|
708
|
+
}
|
|
709
|
+
return (dimensionsFilterGroup &&
|
|
710
|
+
isFilterRuleDefinedForFieldId(dimensionsFilterGroup, dimensionFieldId, timeDimension));
|
|
711
|
+
};
|
|
712
|
+
export const reduceRequiredDimensionFiltersToFilterRules = (requiredFilters, filters, explore) => {
|
|
713
|
+
const table = explore.tables[explore.baseTable];
|
|
714
|
+
return requiredFilters.reduce((acc, filter) => {
|
|
715
|
+
let dimension;
|
|
716
|
+
// This function already takes care of falling back to the base table if the fieldRef doesn't have 2 parts (falls back to base table name)
|
|
717
|
+
const filterRule = createFilterRuleFromModelRequiredFilterRule(filter, table.name);
|
|
718
|
+
if (isJoinModelRequiredFilter(filter)) {
|
|
719
|
+
const joinedTable = explore.tables[filter.target.tableName];
|
|
720
|
+
if (joinedTable) {
|
|
721
|
+
dimension = Object.values(joinedTable.dimensions).find((d) => getItemId(d) === filterRule.target.fieldId);
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
dimension = Object.values(table.dimensions).find((tc) => getItemId(tc) === filterRule.target.fieldId);
|
|
726
|
+
}
|
|
727
|
+
if (dimension && !isFilterRuleInQuery(dimension, filterRule, filters)) {
|
|
728
|
+
return [...acc, filterRule];
|
|
729
|
+
}
|
|
730
|
+
return acc;
|
|
731
|
+
}, []);
|
|
732
|
+
};
|
|
733
|
+
export const resetRequiredFilterRules = (filterGroup, requiredFiltersRef) => {
|
|
734
|
+
// Check if the input is a valid filter group
|
|
735
|
+
if (!isFilterGroup(filterGroup))
|
|
736
|
+
return filterGroup;
|
|
737
|
+
const filterGroupItems = isAndFilterGroup(filterGroup)
|
|
738
|
+
? filterGroup.and
|
|
739
|
+
: filterGroup.or;
|
|
740
|
+
// Iterate over each item in the filter group
|
|
741
|
+
const updatedItems = filterGroupItems.map((filterGroupItem) => {
|
|
742
|
+
// If the item is a filter rule, check if its id is not in the required filters reference
|
|
743
|
+
if (isFilterRule(filterGroupItem) &&
|
|
744
|
+
!requiredFiltersRef.includes(filterGroupItem.target.fieldId)) {
|
|
745
|
+
// Mark the filter rule as not required
|
|
746
|
+
const newFilterRule = {
|
|
747
|
+
...filterGroupItem,
|
|
748
|
+
required: false,
|
|
749
|
+
};
|
|
750
|
+
return newFilterRule;
|
|
751
|
+
}
|
|
752
|
+
// If the item is a nested filter group, recursively call the function
|
|
753
|
+
if (isFilterGroup(filterGroupItem)) {
|
|
754
|
+
return resetRequiredFilterRules(filterGroupItem, requiredFiltersRef);
|
|
755
|
+
}
|
|
756
|
+
return filterGroupItem;
|
|
757
|
+
});
|
|
758
|
+
return {
|
|
759
|
+
...filterGroup,
|
|
760
|
+
[getFilterGroupItemsPropertyName(filterGroup)]: updatedItems,
|
|
761
|
+
};
|
|
762
|
+
};
|
|
763
|
+
//# sourceMappingURL=filters.js.map
|