From 41dbd570d009ba5294ce67fd7574055bd1f2821e Mon Sep 17 00:00:00 2001 From: Jacob Wasilkowski <4933392+jwasilgeo@users.noreply.github.com> Date: Tue, 2 Aug 2022 12:37:30 -0500 Subject: [PATCH] [Enhancement] add disableDataOperation to dataset (#1897) * [Enhancement] add disableDataOperation to dataset * add disableCreateColumn true to tile dataset Signed-off-by: Shan He Signed-off-by: Jacob Wasilkowski * lint Signed-off-by: Jacob Wasilkowski --- src/actions/actions.ts | 3 +- src/schemas/index.ts | 2 +- src/utils/table-utils/kepler-table.ts | 26 +++++++++----- test/fixtures/test-hex-id-data.js | 5 ++- test/node/reducers/vis-state-merger-test.js | 10 ++++-- test/node/reducers/vis-state-test.js | 40 ++++++++++++++++----- 6 files changed, 63 insertions(+), 23 deletions(-) diff --git a/src/actions/actions.ts b/src/actions/actions.ts index 84dc381dd0..7dbdb87ba9 100644 --- a/src/actions/actions.ts +++ b/src/actions/actions.ts @@ -50,7 +50,8 @@ export type ProtoDataset = { // table-injected metadata metadata?: any; - supportedFilterTypes?: string[]; + supportedFilterTypes?: string[] | null; + disableDataOperation?: boolean; }; export type AddDataToMapOptions = { diff --git a/src/schemas/index.ts b/src/schemas/index.ts index a06e113a3d..86183fa517 100644 --- a/src/schemas/index.ts +++ b/src/schemas/index.ts @@ -35,7 +35,7 @@ export type { export {CURRENT_VERSION, VERSIONS} from './versions'; export type { ParsedLayer, - ParsedFilter, + ParsedFilter } from './vis-state-schema'; export { visStateSchemaV1, diff --git a/src/utils/table-utils/kepler-table.ts b/src/utils/table-utils/kepler-table.ts index 1c1ccd2c25..62917f1572 100644 --- a/src/utils/table-utils/kepler-table.ts +++ b/src/utils/table-utils/kepler-table.ts @@ -133,7 +133,9 @@ class KeplerTable { sortOrder?: number[] | null; pinnedColumns?: string[]; - supportedFilterTypes: string[] | undefined; + supportedFilterTypes?: string[] | null; + disableDataOperation?: boolean; + // table-injected metadata metadata: object; @@ -142,13 +144,15 @@ class KeplerTable { data, color, metadata, - supportedFilterTypes + supportedFilterTypes = null, + disableDataOperation = false }: { info?: ProtoDataset['info']; data: ProtoDataset['data']; color: RGBColor; metadata?: ProtoDataset['metadata']; supportedFilterTypes?: ProtoDataset['supportedFilterTypes']; + disableDataOperation?: ProtoDataset['disableDataOperation']; }) { // TODO - what to do if validation fails? Can kepler handle exceptions? // const validatedData = validateInputData(data); @@ -162,7 +166,7 @@ class KeplerTable { const datasetInfo = { id: generateHashId(4), label: 'new dataset', - ...(info || {}) + ...info }; const dataId = datasetInfo.id; // @ts-expect-error @@ -183,14 +187,19 @@ class KeplerTable { })); const allIndexes = dataContainer.getPlainIndex(); + const defaultMetadata = { + id: datasetInfo.id, + // @ts-ignore + format: datasetInfo.format || '', + label: datasetInfo.label || '' + }; this.id = datasetInfo.id; this.label = datasetInfo.label; this.color = color; this.metadata = { - ...metadata, - id: datasetInfo.id, - label: datasetInfo.label + ...defaultMetadata, + ...metadata }; this.dataContainer = dataContainer; @@ -200,9 +209,8 @@ class KeplerTable { this.fieldPairs = findPointFieldPairs(fields); this.fields = fields; this.gpuFilter = getGpuFilterProps([], dataId, fields); - if (supportedFilterTypes) { - this.supportedFilterTypes = supportedFilterTypes; - } + this.supportedFilterTypes = supportedFilterTypes; + this.disableDataOperation = disableDataOperation; } /** diff --git a/test/fixtures/test-hex-id-data.js b/test/fixtures/test-hex-id-data.js index 89f38c4fcb..a8ba9974fd 100644 --- a/test/fixtures/test-hex-id-data.js +++ b/test/fixtures/test-hex-id-data.js @@ -438,8 +438,11 @@ export const expectedMergedDataset = { color: 'dont test me', metadata: { id: 'h3-hex-id', - label: 'new dataset' + label: 'new dataset', + format: '' }, + supportedFilterTypes: null, + disableDataOperation: false, dataContainer, allIndexes: indices, filteredIndex: indices, diff --git a/test/node/reducers/vis-state-merger-test.js b/test/node/reducers/vis-state-merger-test.js index 01ec7fb6b8..54a2a41997 100644 --- a/test/node/reducers/vis-state-merger-test.js +++ b/test/node/reducers/vis-state-merger-test.js @@ -1532,8 +1532,11 @@ test('VisStateMerger.v1 -> mergeFilters -> multiFilters', t => { [testCsvDataId]: { metadata: { id: testCsvDataId, - label: 'hello.csv' + label: 'hello.csv', + format: '' }, + supportedFilterTypes: null, + disableDataOperation: false, fields: tFields0, dataContainer: dc0, allIndexes: [ @@ -1606,8 +1609,11 @@ test('VisStateMerger.v1 -> mergeFilters -> multiFilters', t => { [testGeoJsonDataId]: { metadata: { id: testGeoJsonDataId, - label: 'zip.geojson' + label: 'zip.geojson', + format: '' }, + supportedFilterTypes: null, + disableDataOperation: false, fields: tFields1, filterRecord: { dynamicDomain: [mergedRateFilter, mergedTripFilter], diff --git a/test/node/reducers/vis-state-test.js b/test/node/reducers/vis-state-test.js index 15997a35d4..0c17ad5b92 100644 --- a/test/node/reducers/vis-state-test.js +++ b/test/node/reducers/vis-state-test.js @@ -1258,7 +1258,9 @@ test('#visStateReducer -> UPDATE_VIS_DATA.2 -> to empty state', t => { suffix: ['lat', 'lng'] } ], - metadata: {id: 'smoothie', label: 'exciting dataset', album: 'taro_and_blue'} + metadata: {id: 'smoothie', label: 'exciting dataset', album: 'taro_and_blue', format: ''}, + supportedFilterTypes: null, + disableDataOperation: false } }; @@ -1404,8 +1406,11 @@ test('#visStateReducer -> UPDATE_VIS_DATA.3 -> merge w/ existing state', t => { smoothie: { metadata: { id: 'smoothie', - label: 'smoothie and milkshake' + label: 'smoothie and milkshake', + format: '' }, + supportedFilterTypes: null, + disableDataOperation: false, fields: expectedFields, dataContainer: createDataContainer(mockRawData.rows, {fields: mockRawData.fields}), color: 'donnot test me', @@ -1526,8 +1531,11 @@ test('#visStateReducer -> UPDATE_VIS_DATA.4.Geojson -> geojson data', t => { const expectedDatasets = { metadata: { id: 'milkshake', - label: 'king milkshake' + label: 'king milkshake', + format: '' }, + supportedFilterTypes: null, + disableDataOperation: false, id: 'milkshake', label: 'king milkshake', color: 'donnot test me', @@ -1734,8 +1742,11 @@ test('#visStateReducer -> UPDATE_VIS_DATA -> mergeFilters', t => { smoothie: { metadata: { id: 'smoothie', - label: 'smoothie and milkshake' + label: 'smoothie and milkshake', + format: '' }, + supportedFilterTypes: null, + disableDataOperation: false, fields: expectedFields.map(f => f.name === mockFilter.name ? { @@ -2039,8 +2050,11 @@ test('#visStateReducer -> setFilter.dynamicDomain & cpu', t => { const expectedDataset = { metadata: { id: 'smoothie', - label: 'queen smoothie' + label: 'queen smoothie', + format: '' }, + supportedFilterTypes: null, + disableDataOperation: false, id: 'smoothie', label: 'queen smoothie', color: 'donnot test me', @@ -2125,7 +2139,9 @@ test('#visStateReducer -> setFilter.dynamicDomain & cpu', t => { fixedDomain: null, cpu: {[updatedFilterWValue.id]: 'added'}, gpu: null - } + }, + supportedFilterTypes: null, + disableDataOperation: false }; cmpDataset(t, expectedFilteredDataset, stateWithFilterValue.datasets.smoothie); @@ -2349,7 +2365,9 @@ function testSetFilterDynamicDomainGPU(t, setFilter) { fixedDomain: null, cpu: null, gpu: {[filterId]: 'value_changed'} - } + }, + supportedFilterTypes: null, + disableDataOperation: false }; const actualTripField = stateWithFilterValue.datasets.milkshake.fields[4]; @@ -2547,7 +2565,9 @@ test('#visStateReducer -> setFilter.fixedDomain & DynamicDomain & gpu & cpu', t fixedDomain: {[filterId]: 'value_changed'}, cpu: null, gpu: {[filterId]: 'value_changed'} - } + }, + supportedFilterTypes: null, + disableDataOperation: false }; // check filter by ts @@ -2617,7 +2637,9 @@ test('#visStateReducer -> setFilter.fixedDomain & DynamicDomain & gpu & cpu', t fixedDomain: null, cpu: {[filterId1]: 'added'}, gpu: null - } + }, + supportedFilterTypes: null, + disableDataOperation: false }; cmpDataset(t, expectedFilteredDataset, stateWidthTsAndNameFilter.datasets.smoothie);