diff --git a/src/actions/src/vis-state-actions.ts b/src/actions/src/vis-state-actions.ts index edb0e5db74..48b04b8fa8 100644 --- a/src/actions/src/vis-state-actions.ts +++ b/src/actions/src/vis-state-actions.ts @@ -367,20 +367,24 @@ export function setFilterAnimationWindow({ export type AddFilterUpdaterAction = { dataId?: string | string[] | null; + id?: string; }; /** * Add a new filter * @memberof visStateActions * @param dataId - dataset `id` this new filter is associated with + * @param id - `id` for the new filter * @returns action * @public */ export function addFilter( - dataId: string | null + dataId: string | null, + id?: string ): Merge { return { type: ActionTypes.ADD_FILTER, - dataId + dataId, + id }; } diff --git a/src/components/src/common/color-legend.tsx b/src/components/src/common/color-legend.tsx index e63c2e5c70..4b183a447c 100644 --- a/src/components/src/common/color-legend.tsx +++ b/src/components/src/common/color-legend.tsx @@ -165,7 +165,7 @@ export default class ColorLegend extends Component { const height = legends.data.length * (ROW_H + GAP); return ( - + {legends.data.map((color, idx) => ( { +export function getDefaultFilter({ + dataId, + id +}: { + dataId?: string | null | string[]; + id?: string; +} = {}): FilterBase { return { ...DEFAULT_FILTER_STRUCTURE, // store it as dataId and it could be one or many - // @ts-expect-error returns empty array for null, not array of nulls - dataId: toArray(dataId), - id: generateHashId(FILTER_ID_LENGTH) + dataId: dataId ? toArray(dataId) : [], + id: id || generateHashId(FILTER_ID_LENGTH) }; } @@ -267,7 +272,7 @@ export function validateFilter, L>( } const initializeFilter: Filter = { - ...getDefaultFilter(filter.dataId), + ...getDefaultFilter({dataId: filter.dataId}), ...filter, dataId: filterDataId, name: toArray(filter.name) @@ -516,7 +521,7 @@ export function getFilterFunction { - return getDefaultFilter(dataId); + return getDefaultFilter({dataId}); } export function filterDataByFilterTypes( @@ -850,10 +855,7 @@ export function getTimeWidgetTitleFormatter(domain: [number, number]): string | */ export function isFilterValidToSave(filter: any): boolean { return ( - filter?.type && - Array.isArray(filter?.name) && - (filter?.name.length || filter?.layerId.length) && - isValidFilterValue(filter?.type, filter?.value) + filter?.type && Array.isArray(filter?.name) && (filter?.name.length || filter?.layerId.length) ); } @@ -1099,7 +1101,7 @@ export function generatePolygonFilter< const dataId = layers.map(l => l.config.dataId).filter(notNullorUndefined); const layerId = layers.map(l => l.id); const name = layers.map(l => l.config.label); - const filter = getDefaultFilter(dataId); + const filter = getDefaultFilter({dataId}); return { ...filter, fixedDomain: true, diff --git a/src/utils/src/index.ts b/src/utils/src/index.ts index 4643e39d11..d9d9a2d18f 100644 --- a/src/utils/src/index.ts +++ b/src/utils/src/index.ts @@ -100,7 +100,7 @@ export {snapToMarks} from './plot'; export {transformRequest, isStyleUsingMapboxTiles} from './map-style-utils/mapbox-utils'; // Map -export {onViewPortChange, getMapLayersFromSplitMaps, getViewportFromMapState} from './map-utils'; +export * from './map-utils'; export {createDataContainer, createIndexedDataContainer, getSampleData as getSampleContainerData} from './data-container-utils'; export type {DataContainerInterface} from './data-container-interface'; diff --git a/test/node/reducers/vis-state-test.js b/test/node/reducers/vis-state-test.js index 3b24c1fb1f..a01dd8c8ae 100644 --- a/test/node/reducers/vis-state-test.js +++ b/test/node/reducers/vis-state-test.js @@ -256,7 +256,7 @@ test('#visStateReducer', t => { test('#visStateReducer -> ADD_FILTER', t => { const dataId = 'kitten'; - const newFilter = getDefaultFilter(dataId); + const newFilter = getDefaultFilter({dataId}); const newReducer = reducer({filters: [mockFilter]}, VisStateActions.addFilter(dataId)); const expectedReducer = {filters: [mockFilter, newFilter]}; @@ -2290,7 +2290,7 @@ test('#visStateReducer -> SET_FILTER.dataId', t => { let newFilter = newState.filters[1]; let expectedFilter = { - ...getDefaultFilter(testCsvDataId), + ...getDefaultFilter({dataId: testCsvDataId}), id: newFilter.id }; @@ -2302,7 +2302,7 @@ test('#visStateReducer -> SET_FILTER.dataId', t => { newFilter = newState.filters[1]; expectedFilter = { - ...getDefaultFilter(testCsvDataId), + ...getDefaultFilter({dataId: testCsvDataId}), id: newFilter.id }; @@ -2750,7 +2750,7 @@ test('#visStateReducer -> SET_FILTER_PLOT', t => { ); const expectedFilterWName = { - ...getDefaultFilter('smoothie'), + ...getDefaultFilter({dataId: 'smoothie'}), freeze: true, fixedDomain: true, id: filterId,