@lightdash/common 0.1468.0 → 0.1469.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1392,6 +1392,9 @@ exports.exploreWithMetricNumber = {
1392
1392
  source: sourceMock,
1393
1393
  isAutoGenerated: false,
1394
1394
  hidden: false,
1395
+ spotlight: {
1396
+ visibility: 'hide',
1397
+ },
1395
1398
  },
1396
1399
  m2: {
1397
1400
  fieldType: field_1.FieldType.METRIC,
@@ -303,7 +303,11 @@ const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, startOfWe
303
303
  ]));
304
304
  const convertedDbtMetrics = Object.fromEntries(dbtMetrics.map((metric) => [
305
305
  metric.name,
306
- convertDbtMetricToLightdashMetric(metric, model.name, tableLabel, spotlightConfig, model.meta.spotlight?.categories),
306
+ convertDbtMetricToLightdashMetric(metric, model.name, tableLabel, {
307
+ ...spotlightConfig,
308
+ default_visibility: model.meta.spotlight?.visibility ??
309
+ spotlightConfig.default_visibility,
310
+ }, model.meta.spotlight?.categories),
307
311
  ]));
308
312
  const allMetrics = Object.values({
309
313
  ...convertedDbtMetrics,
@@ -1,6 +1,7 @@
1
1
  import { type DbtMetric, type DbtModelNode, type V9MetricRef } from '../types/dbt';
2
2
  import { type Table } from '../types/explore';
3
3
  import { DimensionType } from '../types/field';
4
+ import type { LightdashProjectConfig } from '../types/lightdashProjectConfig';
4
5
  type WarehouseCatalog = {
5
6
  [database: string]: {
6
7
  [schema: string]: {
@@ -82,4 +83,11 @@ export declare const MODEL_WITH_ADDITIONAL_DIMENSIONS: DbtModelNode & {
82
83
  relation_name: string;
83
84
  };
84
85
  export declare const LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS: Omit<Table, 'lineageGraph'>;
86
+ export declare const SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE: LightdashProjectConfig;
87
+ export declare const MODEL_WITH_NO_CATEGORIES: DbtModelNode;
88
+ export declare const LIGHTDASH_TABLE_WITH_NO_CATEGORIES: Omit<Table, 'lineageGraph'>;
89
+ export declare const MODEL_WITH_MODEL_LEVEL_CATEGORIES: DbtModelNode;
90
+ export declare const LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES: Omit<Table, 'lineageGraph'>;
91
+ export declare const MODEL_WITH_METRIC_LEVEL_CATEGORIES: DbtModelNode;
92
+ export declare const LIGHTDASH_TABLE_WITH_METRIC_LEVEL_CATEGORIES: Omit<Table, 'lineageGraph'>;
85
93
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS = exports.MODEL_WITH_ADDITIONAL_DIMENSIONS = exports.LIGHTDASH_TABLE_SQL_WHERE = exports.expectedModelWithType = exports.warehouseSchemaWithUpperCaseColumn = exports.warehouseSchemaWithMissingColumn = exports.warehouseSchemaWithMissingTable = exports.warehouseSchema = exports.LIGHTDASH_TABLE_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_OFF_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_OFF_BOOLEAN_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_OFF_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_SNOWFLAKE = exports.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_BIGQUERY = exports.MODEL_WITH_NO_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_METRICS = exports.MODEL_WITH_WRONG_METRICS = exports.MODEL_WITH_WRONG_METRIC = exports.MODEL_WITH_METRIC = exports.LIGHTDASH_TABLE_WITH_DBT_V9_METRICS = exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = exports.LIGHTDASH_TABLE_WITHOUT_AUTO_METRICS = exports.MODEL_WITH_NO_METRICS = exports.MODEL_WITH_SQL_FILTER = exports.MODEL_WITH_SQL_WHERE = exports.LIGHTDASH_TABLE_WITH_GROUP_BLOCK = exports.LIGHTDASH_TABLE_WITH_GROUP_LABEL = exports.MODEL_WITH_GROUPS_BLOCK = exports.MODEL_WITH_GROUP_LABEL = exports.BASE_LIGHTDASH_TABLE = exports.model = exports.DBT_V9_METRIC = exports.DBT_METRIC_DERIVED = exports.DBT_METRIC_WITH_CUSTOM_SQL = exports.DBT_METRIC_WITH_SQL_FIELD = exports.DBT_METRIC_WITH_FILTER = exports.DBT_METRIC = exports.INVALID_ID_COLUMN_NAMES = exports.VALID_ID_COLUMN_NAMES = void 0;
3
+ exports.LIGHTDASH_TABLE_WITH_METRIC_LEVEL_CATEGORIES = exports.MODEL_WITH_METRIC_LEVEL_CATEGORIES = exports.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES = exports.MODEL_WITH_MODEL_LEVEL_CATEGORIES = exports.LIGHTDASH_TABLE_WITH_NO_CATEGORIES = exports.MODEL_WITH_NO_CATEGORIES = exports.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE = exports.LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS = exports.MODEL_WITH_ADDITIONAL_DIMENSIONS = exports.LIGHTDASH_TABLE_SQL_WHERE = exports.expectedModelWithType = exports.warehouseSchemaWithUpperCaseColumn = exports.warehouseSchemaWithMissingColumn = exports.warehouseSchemaWithMissingTable = exports.warehouseSchema = exports.LIGHTDASH_TABLE_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_OFF_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_OFF_BOOLEAN_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_OFF_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_SNOWFLAKE = exports.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_BIGQUERY = exports.MODEL_WITH_NO_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_METRICS = exports.MODEL_WITH_WRONG_METRICS = exports.MODEL_WITH_WRONG_METRIC = exports.MODEL_WITH_METRIC = exports.LIGHTDASH_TABLE_WITH_DBT_V9_METRICS = exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = exports.LIGHTDASH_TABLE_WITHOUT_AUTO_METRICS = exports.MODEL_WITH_NO_METRICS = exports.MODEL_WITH_SQL_FILTER = exports.MODEL_WITH_SQL_WHERE = exports.LIGHTDASH_TABLE_WITH_GROUP_BLOCK = exports.LIGHTDASH_TABLE_WITH_GROUP_LABEL = exports.MODEL_WITH_GROUPS_BLOCK = exports.MODEL_WITH_GROUP_LABEL = exports.BASE_LIGHTDASH_TABLE = exports.model = exports.DBT_V9_METRIC = exports.DBT_METRIC_DERIVED = exports.DBT_METRIC_WITH_CUSTOM_SQL = exports.DBT_METRIC_WITH_SQL_FIELD = exports.DBT_METRIC_WITH_FILTER = exports.DBT_METRIC = exports.INVALID_ID_COLUMN_NAMES = exports.VALID_ID_COLUMN_NAMES = void 0;
4
4
  const field_1 = require("../types/field");
5
5
  const table_1 = require("../types/table");
6
6
  const timeFrames_1 = require("../types/timeFrames");
@@ -1377,3 +1377,116 @@ exports.LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS = {
1377
1377
  },
1378
1378
  },
1379
1379
  };
1380
+ exports.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE = {
1381
+ spotlight: {
1382
+ default_visibility: 'show',
1383
+ categories: {
1384
+ category_1: { label: 'Category 1' },
1385
+ category_2: { label: 'Category 2', color: 'red' },
1386
+ },
1387
+ },
1388
+ };
1389
+ exports.MODEL_WITH_NO_CATEGORIES = {
1390
+ ...exports.MODEL_WITH_METRIC,
1391
+ meta: {
1392
+ spotlight: {
1393
+ visibility: 'hide',
1394
+ },
1395
+ },
1396
+ };
1397
+ exports.LIGHTDASH_TABLE_WITH_NO_CATEGORIES = {
1398
+ ...exports.LIGHTDASH_TABLE_WITH_METRICS,
1399
+ metrics: {
1400
+ ...{
1401
+ dbt_metric_1: {
1402
+ ...exports.LIGHTDASH_TABLE_WITH_DBT_METRICS.metrics.dbt_metric_1,
1403
+ spotlight: {
1404
+ ...exports.LIGHTDASH_TABLE_WITH_DBT_METRICS.metrics.dbt_metric_1
1405
+ .spotlight,
1406
+ visibility: 'hide',
1407
+ },
1408
+ },
1409
+ },
1410
+ ...Object.fromEntries(Object.entries(exports.LIGHTDASH_TABLE_WITH_METRICS.metrics).map(([key, metric]) => [
1411
+ key,
1412
+ {
1413
+ ...metric,
1414
+ spotlight: { ...metric.spotlight, visibility: 'hide' },
1415
+ index: (metric.index ?? 0) + 1,
1416
+ },
1417
+ ])),
1418
+ },
1419
+ dimensions: exports.LIGHTDASH_TABLE_WITH_METRICS.dimensions,
1420
+ };
1421
+ exports.MODEL_WITH_MODEL_LEVEL_CATEGORIES = {
1422
+ ...exports.MODEL_WITH_METRIC,
1423
+ meta: {
1424
+ spotlight: {
1425
+ visibility: 'hide',
1426
+ categories: ['category_1'],
1427
+ },
1428
+ },
1429
+ };
1430
+ exports.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES = {
1431
+ ...exports.LIGHTDASH_TABLE_WITH_NO_CATEGORIES,
1432
+ metrics: Object.fromEntries(Object.entries(exports.LIGHTDASH_TABLE_WITH_NO_CATEGORIES.metrics).map(([key, metric]) => [
1433
+ key,
1434
+ {
1435
+ ...metric,
1436
+ spotlight: {
1437
+ visibility: 'hide',
1438
+ categories: ['category_1'],
1439
+ },
1440
+ },
1441
+ ])),
1442
+ };
1443
+ exports.MODEL_WITH_METRIC_LEVEL_CATEGORIES = {
1444
+ ...exports.MODEL_WITH_MODEL_LEVEL_CATEGORIES,
1445
+ columns: {
1446
+ user_id: {
1447
+ name: 'user_id',
1448
+ data_type: field_1.DimensionType.STRING,
1449
+ meta: {
1450
+ metrics: {
1451
+ user_count: {
1452
+ type: field_1.MetricType.COUNT_DISTINCT,
1453
+ spotlight: {
1454
+ visibility: 'hide',
1455
+ categories: ['category_2'],
1456
+ },
1457
+ },
1458
+ },
1459
+ },
1460
+ },
1461
+ num_participating_athletes: {
1462
+ name: 'num_participating_athletes',
1463
+ data_type: field_1.DimensionType.NUMBER,
1464
+ meta: {
1465
+ dimension: {
1466
+ sql: 'num_participating_men + num_participating_women',
1467
+ },
1468
+ metrics: {
1469
+ total_num_participating_athletes: {
1470
+ type: field_1.MetricType.SUM,
1471
+ },
1472
+ },
1473
+ },
1474
+ },
1475
+ },
1476
+ };
1477
+ exports.LIGHTDASH_TABLE_WITH_METRIC_LEVEL_CATEGORIES = {
1478
+ ...exports.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES,
1479
+ metrics: Object.fromEntries(Object.entries(exports.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES.metrics).map(([key, metric]) => [
1480
+ key,
1481
+ {
1482
+ ...metric,
1483
+ spotlight: {
1484
+ visibility: 'hide',
1485
+ categories: [
1486
+ 'category_1',
1487
+ ...(key === 'user_count' ? ['category_2'] : []),
1488
+ ],
1489
+ },
1490
+ },
1491
+ ])),
1492
+ };
@@ -87,3 +87,17 @@ describe('convert tables from dbt models', () => {
87
87
  expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_GROUPS_BLOCK, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_GROUP_BLOCK);
88
88
  });
89
89
  });
90
+ describe('spotlight config', () => {
91
+ it('should convert dbt model with metrics when no categories are defined', () => {
92
+ expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_CATEGORIES, [translator_mock_1.DBT_METRIC], translator_mock_1.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE.spotlight)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_NO_CATEGORIES);
93
+ });
94
+ it('should convert dbt model with metrics when categories are defined', () => {
95
+ expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_MODEL_LEVEL_CATEGORIES, [translator_mock_1.DBT_METRIC], translator_mock_1.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE.spotlight)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES);
96
+ });
97
+ it('should convert dbt model with metrics when categories are defined and there is metric level assignment', () => {
98
+ expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_METRIC_LEVEL_CATEGORIES, [translator_mock_1.DBT_METRIC], translator_mock_1.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE.spotlight)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_METRIC_LEVEL_CATEGORIES);
99
+ });
100
+ it('should error when categories are assigned but not defined in the spotlight config', () => {
101
+ expect(() => (0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_METRIC_LEVEL_CATEGORIES, [translator_mock_1.DBT_METRIC], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toThrowError(`Invalid spotlight categories found in metric 'user_count': category_1, category_2. Categories must be defined in project config.`);
102
+ });
103
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightdash/common",
3
- "version": "0.1468.0",
3
+ "version": "0.1469.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [