@sqlrooms/kepler 0.29.0-rc.1 → 0.29.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -2
- package/dist/KeplerSlice.d.ts +29 -11
- package/dist/KeplerSlice.d.ts.map +1 -1
- package/dist/KeplerSlice.js +247 -112
- package/dist/KeplerSlice.js.map +1 -1
- package/dist/components/CustomDndContext.d.ts.map +1 -1
- package/dist/components/CustomDndContext.js +5 -2
- package/dist/components/CustomDndContext.js.map +1 -1
- package/dist/components/CustomFilterManager.d.ts.map +1 -1
- package/dist/components/CustomFilterManager.js +4 -1
- package/dist/components/CustomFilterManager.js.map +1 -1
- package/dist/components/CustomFilterPanelHeader.d.ts.map +1 -1
- package/dist/components/CustomFilterPanelHeader.js +5 -5
- package/dist/components/CustomFilterPanelHeader.js.map +1 -1
- package/dist/components/CustomInteractionManager.d.ts.map +1 -1
- package/dist/components/CustomInteractionManager.js +4 -1
- package/dist/components/CustomInteractionManager.js.map +1 -1
- package/dist/components/CustomLayerManager.d.ts.map +1 -1
- package/dist/components/CustomLayerManager.js +138 -17
- package/dist/components/CustomLayerManager.js.map +1 -1
- package/dist/components/CustomMapDrawPanel.d.ts +8 -0
- package/dist/components/CustomMapDrawPanel.d.ts.map +1 -0
- package/dist/components/CustomMapDrawPanel.js +28 -0
- package/dist/components/CustomMapDrawPanel.js.map +1 -0
- package/dist/components/CustomMapLegend.d.ts +4 -1
- package/dist/components/CustomMapLegend.d.ts.map +1 -1
- package/dist/components/CustomMapLegend.js +15 -5
- package/dist/components/CustomMapLegend.js.map +1 -1
- package/dist/components/CustomMapLegendPanel.d.ts +3 -3
- package/dist/components/CustomMapLegendPanel.d.ts.map +1 -1
- package/dist/components/CustomMapLegendPanel.js +19 -4
- package/dist/components/CustomMapLegendPanel.js.map +1 -1
- package/dist/components/KeplerAddDataDialog.d.ts +2 -3
- package/dist/components/KeplerAddDataDialog.d.ts.map +1 -1
- package/dist/components/KeplerAddDataDialog.js +18 -8
- package/dist/components/KeplerAddDataDialog.js.map +1 -1
- package/dist/components/KeplerImageExport.d.ts.map +1 -1
- package/dist/components/KeplerImageExport.js +26 -8
- package/dist/components/KeplerImageExport.js.map +1 -1
- package/dist/components/KeplerInjector.d.ts.map +1 -1
- package/dist/components/KeplerInjector.js +3 -1
- package/dist/components/KeplerInjector.js.map +1 -1
- package/dist/components/KeplerMapContainer.d.ts.map +1 -1
- package/dist/components/KeplerMapContainer.js +36 -4
- package/dist/components/KeplerMapContainer.js.map +1 -1
- package/dist/components/SplitMapIndexContext.d.ts +2 -0
- package/dist/components/SplitMapIndexContext.d.ts.map +1 -0
- package/dist/components/SplitMapIndexContext.js +3 -0
- package/dist/components/SplitMapIndexContext.js.map +1 -0
- package/dist/hooks/useDndEffects.d.ts +1 -1
- package/dist/hooks/useDndEffects.d.ts.map +1 -1
- package/dist/hooks/useDndEffects.js +4 -0
- package/dist/hooks/useDndEffects.js.map +1 -1
- package/dist/hooks/useDndLayers.d.ts +1 -1
- package/dist/hooks/useDndLayers.d.ts.map +1 -1
- package/dist/hooks/useDndLayers.js +4 -0
- package/dist/hooks/useDndLayers.js.map +1 -1
- package/dist/hooks/useKeplerStateActions.d.ts +7 -6
- package/dist/hooks/useKeplerStateActions.d.ts.map +1 -1
- package/dist/hooks/useKeplerStateActions.js +1 -1
- package/dist/hooks/useKeplerStateActions.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +20 -20
package/dist/KeplerSlice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeplerSlice.js","sourceRoot":"","sources":["../src/KeplerSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addDataToMap,\n addLayer as addLayerAction,\n deleteEntry,\n ActionTypes as KeplerActionTypes,\n registerEntry,\n removeDataset,\n requestMapStyles,\n wrapTo,\n} from '@kepler.gl/actions';\nimport {ALL_FIELD_TYPES, VectorTileDatasetMetadata} from '@kepler.gl/constants';\nimport {\n castDuckDBTypesForKepler,\n getDuckDBColumnTypes,\n getDuckDBColumnTypesMap,\n restoreGeoarrowMetadata,\n setGeoArrowWKBExtension,\n} from '@kepler.gl/duckdb';\nimport {Layer} from '@kepler.gl/layers';\nimport {arrowSchemaToFields} from '@kepler.gl/processors';\nimport {\n INITIAL_UI_STATE,\n keplerGlReducer,\n KeplerGlState,\n MapStyle,\n} from '@kepler.gl/reducers';\nimport {KeplerGLSchemaClass} from '@kepler.gl/schemas';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {AddDataToMapPayload} from '@kepler.gl/types';\nimport {\n DatabaseConnection,\n initApplicationConfig,\n KeplerApplicationConfig,\n} from '@kepler.gl/utils';\nimport {createId} from '@paralleldrive/cuid2';\nimport {KeplerMapSchema, KeplerSliceConfig} from '@sqlrooms/kepler-config';\nimport {\n BaseRoomStoreState,\n createSlice,\n DbSliceState,\n RoomShellSliceState,\n useBaseRoomShellStore,\n type StateCreator,\n} from '@sqlrooms/room-shell';\nimport * as arrow from 'apache-arrow';\nimport {produce, setAutoFreeze} from 'immer';\nimport {taskMiddleware} from 'react-palm/tasks';\nimport type {\n Action,\n AnyAction,\n MiddlewareAPI,\n Store as ReduxStore,\n} from 'redux';\nimport {compose, Dispatch, Middleware} from 'redux';\nimport {createLogger, ReduxLoggerOptions} from 'redux-logger';\nsetAutoFreeze(false); // Kepler attempts to mutate redux state, so we need to disable immer's auto freeze to avoid errors\n\nconst KeplerGLSchemaManager = new KeplerGLSchemaClass();\n\nclass DesktopKeplerTable extends KeplerTable {\n static getInputDataValidator = function () {\n // Default validator accepts only string timestamps\n return (d: any) => d;\n };\n}\n\nexport type KeplerGLBasicProps = {\n mapboxApiAccessToken?: string;\n};\n\nexport type CreateKeplerSliceOptions = {\n config?: Partial<KeplerSliceConfig>;\n initialKeplerState?: Partial<KeplerGlState>;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n actionLogging?: boolean | ReduxLoggerOptions;\n middlewares?: Middleware[];\n applicationConfig?: KeplerApplicationConfig;\n /**\n * Called when a kepler action is dispatched\n * @param mapId - The map id\n * @param action - The action\n */\n onAction?: (mapId: string, action: KeplerAction) => void;\n};\n\nexport function createDefaultKeplerConfig(\n props?: Partial<KeplerSliceConfig>,\n): KeplerSliceConfig {\n const mapId = createId();\n return {\n maps: [\n {\n id: mapId,\n name: 'Untitled Map',\n config: undefined,\n lastOpenedAt: Date.now(),\n },\n ],\n currentMapId: mapId,\n openTabs: [mapId],\n ...props,\n };\n}\n\nexport type KeplerAction = {\n type: string;\n payload?: unknown;\n};\n\nexport function hasMapId(action: KeplerAction): action is KeplerAction & {\n payload: {meta: {_id_: string}};\n} {\n return (\n typeof action.payload === 'object' &&\n action.payload !== null &&\n 'meta' in action.payload &&\n typeof action.payload.meta === 'object' &&\n action.payload.meta !== null &&\n '_id_' in action.payload.meta\n );\n}\n\n// support multiple kepler maps\nexport type KeplerGlReduxState = {[id: string]: KeplerGlState};\nexport type KeplerSliceState = {\n kepler: {\n config: KeplerSliceConfig;\n map: KeplerGlReduxState;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n forwardDispatch: {\n [mapId: string]: Dispatch;\n };\n initialize: () => Promise<void>;\n setConfig: (config: KeplerSliceConfig) => void;\n /**\n * Update the datasets in all the kepler map so that they correspond to\n * the latest table schemas in the database\n */\n syncKeplerDatasets: () => Promise<void>;\n addLayer: (mapId: string, layer: Layer, datasetId: string) => void;\n addTableToMap: (\n mapId: string,\n tableName: string,\n options?: AddDataToMapPayload['options'],\n ) => Promise<void>;\n addTileSetToMap: (\n mapId: string,\n tableName: string,\n tileset: {\n name: string;\n type: string;\n metadata: VectorTileDatasetMetadata;\n },\n tileMetadata: Record<string, any>,\n autoCreateLayers: boolean,\n ) => void;\n addConfigToMap: (mapId: string, config: KeplerMapSchema) => void;\n removeDatasetFromMaps: (datasetId: string) => void;\n dispatchAction: (mapId: string, action: KeplerAction) => void;\n setCurrentMapId: (mapId: string) => void;\n /**\n * Create a new map and return the map id\n * @param name - The name of the map\n * @returns The map id\n */\n createMap: (name?: string) => string;\n deleteMap: (mapId: string) => void;\n renameMap: (mapId: string, name: string) => void;\n closeMap: (mapId: string) => void;\n setOpenTabs: (tabIds: string[]) => void;\n getCurrentMap: () => KeplerMapSchema | undefined;\n registerKeplerMapIfNotExists: (mapId: string) => void;\n __reduxProviderStore: ReduxStore<KeplerGlReduxState, AnyAction> | undefined;\n };\n};\n\n// Auto save will be triggered in middleware on every kepler action\n// skip these actions to avoid unnecessary save\nconst SKIP_AUTO_SAVE_ACTIONS: string[] = [\n KeplerActionTypes.LAYER_HOVER,\n KeplerActionTypes.UPDATE_MAP,\n KeplerActionTypes.MOUSE_MOVE,\n];\n\nexport function createKeplerSlice({\n basicKeplerProps = {},\n config: initialConfigProps,\n initialKeplerState = {\n mapStyle: {styleType: 'positron'} as MapStyle,\n uiState: {\n ...INITIAL_UI_STATE,\n currentModal: null,\n mapControls: {\n visibleLayers: INITIAL_UI_STATE.mapControls.visibleLayers,\n mapLegend: {\n show: true,\n active: false,\n },\n toggle3d: {\n show: true,\n active: false,\n },\n },\n },\n },\n actionLogging = false,\n middlewares: additionalMiddlewares = [],\n applicationConfig,\n onAction,\n}: CreateKeplerSliceOptions = {}): StateCreator<KeplerSliceState> {\n const initialConfig = createDefaultKeplerConfig(initialConfigProps);\n initApplicationConfig({\n table: DesktopKeplerTable,\n ...applicationConfig,\n });\n const updateMapLastOpenedAt = (\n maps: KeplerSliceConfig['maps'],\n mapId: string,\n now: number = Date.now(),\n ) => {\n const map = maps.find((item) => item.id === mapId);\n if (map) {\n map.lastOpenedAt = now;\n }\n };\n return createSlice<\n KeplerSliceState,\n BaseRoomStoreState & KeplerSliceState & DbSliceState\n >((set, get) => {\n const keplerReducer = keplerGlReducer.initialState(initialKeplerState);\n const middlewares: Middleware[] = [\n taskMiddleware,\n saveKeplerConfigMiddleware,\n ...additionalMiddlewares,\n ];\n\n if (actionLogging) {\n const logger = createLogger(\n actionLogging === true ? {collapsed: true} : actionLogging,\n ) as Middleware;\n middlewares.push(logger);\n }\n\n const storeDispatch: Dispatch<KeplerAction> = (action) => {\n set((state: KeplerSliceState) => ({\n ...state,\n kepler: {\n ...state.kepler,\n map: keplerReducer(state.kepler.map, action),\n },\n }));\n\n // Call onAction if it's defined\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n onAction?.(mapId, action);\n return action;\n };\n // const forwardDispatch: {[id: string]: Dispatch} = {};\n return {\n kepler: {\n config: initialConfig,\n basicKeplerProps,\n map: {},\n dispatchAction: () => {},\n __reduxProviderStore: undefined,\n forwardDispatch: {},\n\n setConfig: (config: KeplerSliceConfig) => {\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config = config;\n }),\n );\n updateMapReduxStates();\n updateForwardDispatch();\n updateMapConfigs();\n get().kepler.syncKeplerDatasets();\n },\n\n async initialize() {\n const config = get().kepler.config;\n const currentMapId = config.currentMapId;\n const keplerInitialState: KeplerGlReduxState = keplerReducer(\n undefined,\n registerEntry({id: currentMapId}),\n );\n set({\n kepler: {\n ...get().kepler,\n map: keplerInitialState,\n dispatchAction: (mid, action) => {\n // wrapDispatch(wrapTo(mapId)(action));\n const dispatchToMap = get().kepler.forwardDispatch[mid];\n if (dispatchToMap) {\n dispatchToMap(wrapTo(mid, action));\n } else {\n console.error('dispatchAction: mapId not found', mid);\n }\n },\n __reduxProviderStore: {\n dispatch: storeDispatch,\n getState: () => get().kepler.map || {},\n subscribe: () => () => {},\n replaceReducer: () => {},\n // @ts-expect-error - Symbol.observable is not defined in the Redux type definitions\n [Symbol.observable]: () => {},\n },\n },\n });\n updateForwardDispatch();\n updateMapConfigs();\n await get().kepler.syncKeplerDatasets();\n requestMapStyle(config.currentMapId);\n },\n\n addLayer: (mapId, layer, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addLayerAction(layer, datasetId));\n },\n\n addTableToMap: async (mapId, tableName, options = {}) => {\n const connector = await get().db.getConnector();\n const duckDbColumns = await getDuckDBColumnTypes(\n {\n query: (query: string) => connector.query(query).result,\n } as DatabaseConnection,\n tableName,\n );\n const tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);\n const adjustedQuery = castDuckDBTypesForKepler(\n tableName,\n duckDbColumns,\n );\n const arrowResult = await connector.query(adjustedQuery).result;\n setGeoArrowWKBExtension(arrowResult, duckDbColumns);\n // TODO remove once DuckDB doesn't drop geoarrow metadata\n restoreGeoarrowMetadata(arrowResult, {});\n const fields = arrowSchemaToFields(arrowResult, tableDuckDBTypes);\n const cols = Array.from({length: arrowResult.numCols}, (_, i) =>\n arrowResult.getChildAt(i),\n ).filter((col) => col) as arrow.Vector[];\n\n if (fields && cols) {\n const datasets: AddDataToMapPayload['datasets'] = {\n data: {fields, cols, rows: [], arrowTable: arrowResult},\n info: {label: tableName, id: tableName},\n metadata: {tableName},\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({datasets, options}),\n );\n }\n },\n\n getCurrentMap: () => {\n return get().kepler.config.maps.find(\n (map) => map.id === get().kepler.config.currentMapId,\n );\n },\n\n setCurrentMapId: (mapId) => {\n return set((state) =>\n produce(state, (draft) => {\n const now = Date.now();\n draft.kepler.config.currentMapId = mapId;\n updateMapLastOpenedAt(draft.kepler.config.maps, mapId, now);\n }),\n );\n },\n\n createMap: (name) => {\n const mapId = createId();\n const now = Date.now();\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps.push({\n id: mapId,\n name: name ?? 'Untitled Map',\n lastOpenedAt: now,\n });\n draft.kepler.config.openTabs.push(mapId);\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n registerEntry({id: mapId}),\n );\n draft.kepler.forwardDispatch[mapId] = getForwardDispatch(mapId);\n }),\n );\n requestMapStyle(mapId);\n get().kepler.syncKeplerDatasets();\n return mapId;\n },\n\n async syncKeplerDatasets() {\n for (const mapId of Object.keys(get().kepler.map)) {\n const keplerDatasets = get().kepler.map[mapId]?.visState.datasets;\n for (const {table} of get().db.tables) {\n // TODO: remove this once getDuckDBColumnTypesMap can handle qualified table names\n // const qualifiedTable = table.toString();\n if (\n // !table.schema?.startsWith('__') && // skip internal schemas\n // !keplerDatasets?.[qualifiedTable]\n table.schema === 'main' &&\n !keplerDatasets?.[table.table]\n ) {\n await get().kepler.addTableToMap(mapId, table.table, {\n autoCreateLayers: false,\n centerMap: false,\n });\n }\n }\n }\n },\n\n deleteMap: (mapId) => {\n set((state) =>\n produce(state, (draft) => {\n const openTabs = draft.kepler.config.openTabs;\n const maps = draft.kepler.config.maps;\n const wasCurrentMap = draft.kepler.config.currentMapId === mapId;\n const deletingIndex = openTabs.indexOf(mapId);\n\n // Remove from maps and openTabs\n draft.kepler.config.maps = maps.filter((map) => map.id !== mapId);\n draft.kepler.config.openTabs = openTabs.filter(\n (id) => id !== mapId,\n );\n\n // If we deleted the current map, select another one\n if (wasCurrentMap) {\n const newOpenTabs = draft.kepler.config.openTabs;\n const remainingMaps = draft.kepler.config.maps;\n\n if (newOpenTabs.length > 0) {\n // Select from remaining open tabs\n const newIndex =\n deletingIndex === 0\n ? 0\n : Math.min(deletingIndex - 1, newOpenTabs.length - 1);\n const newSelectedId = newOpenTabs[newIndex];\n if (newSelectedId) {\n draft.kepler.config.currentMapId = newSelectedId;\n updateMapLastOpenedAt(\n draft.kepler.config.maps,\n newSelectedId,\n Date.now(),\n );\n }\n } else if (remainingMaps.length > 0) {\n // No open tabs left, open a closed map\n const mapToOpen = remainingMaps[0];\n if (mapToOpen) {\n draft.kepler.config.openTabs.push(mapToOpen.id);\n draft.kepler.config.currentMapId = mapToOpen.id;\n updateMapLastOpenedAt(\n draft.kepler.config.maps,\n mapToOpen.id,\n Date.now(),\n );\n }\n }\n }\n\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n\n delete draft.kepler.forwardDispatch[mapId];\n }),\n );\n },\n\n renameMap: (mapId, name) => {\n set((state) =>\n produce(state, (draft) => {\n const map = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (map) {\n map.name = name;\n }\n }),\n );\n },\n\n closeMap: (mapId) => {\n set((state) =>\n produce(state, (draft) => {\n const openTabs = draft.kepler.config.openTabs;\n\n // Don't close if it's the last open tab (defensive check, TabStrip also prevents this)\n if (openTabs.length <= 1) return;\n\n // Just remove from openTabs - TabStrip handles selection via onSelect before calling onClose\n draft.kepler.config.openTabs = openTabs.filter(\n (id) => id !== mapId,\n );\n }),\n );\n },\n\n setOpenTabs: (tabIds) => {\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.openTabs = tabIds;\n }),\n );\n },\n\n addDataToMap: (mapId: string, data: any) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addDataToMap(data));\n },\n\n addTileSetToMap: (\n mapId,\n tableName,\n tileset,\n tileMetadata,\n autoCreateLayers = true,\n ) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const dataset = {\n info: {\n label: tileset.name,\n type: tileset.type,\n format: 'rows',\n // important for kepler to reload this tileset\n id: tableName,\n },\n data: {\n fields: tileMetadata?.fields || [],\n rows: [],\n },\n metadata: {\n // duckdb table name\n tableName,\n ...tileMetadata,\n ...tileset.metadata,\n },\n // vector tile layer only supports gpu filtering for now\n supportedFilterTypes: [\n ALL_FIELD_TYPES.real,\n ALL_FIELD_TYPES.integer,\n ],\n disableDataOperation: true,\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({\n datasets: dataset,\n options: {\n autoCreateLayers,\n centerMap: true,\n },\n }),\n );\n },\n\n addConfigToMap: (mapId: string, config: any) => {\n // if map not registered, register it\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const parsedConfig = KeplerGLSchemaManager.parseSavedConfig(config);\n if (!parsedConfig) {\n throw new Error('Failed to parse config');\n }\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({config: parsedConfig, datasets: []}),\n );\n },\n\n registerKeplerMapIfNotExists(mapId: string) {\n if (!get().kepler.map[mapId]) {\n set({\n kepler: {\n ...get().kepler,\n map: keplerReducer(\n get().kepler.map,\n registerEntry({id: mapId}),\n ),\n forwardDispatch: {\n ...get().kepler.forwardDispatch,\n [mapId]: getForwardDispatch(mapId),\n },\n },\n });\n requestMapStyle(mapId);\n }\n },\n\n removeDatasetFromMaps: (datasetId: string) => {\n for (const mapId of Object.keys(get().kepler.map)) {\n const map = get().kepler.map[mapId];\n if (map) {\n get().kepler.dispatchAction(mapId, removeDataset(datasetId));\n }\n }\n },\n },\n };\n\n function requestMapStyle(mapId: string) {\n const {mapStyle} = get().kepler.map[mapId] || {};\n const style = mapStyle?.mapStyles[mapStyle.styleType];\n if (style) {\n get().kepler.dispatchAction(\n mapId,\n requestMapStyles({[style.id]: style}),\n );\n }\n }\n\n function saveKeplerConfigMiddleware() {\n return (next: (action: KeplerAction) => void) =>\n (action: KeplerAction) => {\n // get id from kepler action payload meta\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n const result = next(action);\n if (!SKIP_AUTO_SAVE_ACTIONS.includes(action.type) && mapId) {\n // save kepler config to store\n set((state) =>\n produce(state, (draft) => {\n const mapToSave = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (mapToSave && state.kepler.map?.[mapId]) {\n mapToSave.config = KeplerGLSchemaManager.getConfigToSave(\n state.kepler.map[mapId],\n ) as any;\n }\n }),\n );\n }\n // save kepler config to local storage\n return result;\n };\n }\n\n function updateMapConfigs() {\n const config = get().kepler.config;\n const keplerMaps = config.maps;\n for (const {id, config} of keplerMaps) {\n if (config) {\n get().kepler.addConfigToMap(id, config as unknown as KeplerMapSchema);\n }\n }\n }\n\n function updateMapReduxStates() {\n set((state) =>\n produce(state, (draft) => {\n // Delete redux state of maps that are not in the config\n for (const mapId of Object.keys(draft.kepler.map)) {\n if (!draft.kepler.config.maps.some((map) => map.id === mapId)) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n }\n }\n // Register redux state of maps that are not in the config\n for (const map of draft.kepler.config.maps) {\n if (!draft.kepler.map[map.id]) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n registerEntry({id: map.id}),\n );\n draft.kepler.forwardDispatch[map.id] = getForwardDispatch(map.id);\n }\n }\n }),\n );\n }\n\n function updateForwardDispatch() {\n const config = get().kepler.config;\n const currentMapId = config.currentMapId;\n const forwardDispatch = {\n [currentMapId]: getForwardDispatch(currentMapId),\n };\n if (config) {\n for (const {id} of config.maps) {\n forwardDispatch[id] = getForwardDispatch(id);\n }\n }\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.forwardDispatch = forwardDispatch;\n }),\n );\n }\n\n function getForwardDispatch(mapId: string): Dispatch<KeplerAction> {\n /** Adapted from applyMiddleware in redux */\n let wrapDispatch: (\n action: KeplerAction,\n ...args: any\n ) => KeplerAction = () => {\n throw new Error(\n 'Dispatching while constructing your middleware is not allowed. ' +\n 'Other middleware would not be applied to this dispatch.',\n );\n };\n const wrapToMap = wrapTo(mapId);\n const middlewareAPI: MiddlewareAPI<any, any> = {\n getState: get,\n dispatch: (action: Action, ...args: any) => {\n // need to forward here as well\n return wrapDispatch(wrapToMap(action), ...args);\n },\n };\n\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n wrapDispatch = compose<Dispatch>(...chain)(storeDispatch);\n return wrapDispatch as Dispatch<KeplerAction>;\n }\n });\n}\n\ntype RoomStateWithDiscuss = RoomShellSliceState & KeplerSliceState;\n\nexport function useStoreWithKepler<T>(\n selector: (state: RoomStateWithDiscuss) => T,\n): T {\n return useBaseRoomShellStore<RoomStateWithDiscuss, T>((state) =>\n selector(state as RoomStateWithDiscuss),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"KeplerSlice.js","sourceRoot":"","sources":["../src/KeplerSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addDataToMap,\n addFilter as addFilterAction,\n addLayer as addLayerAction,\n deleteEntry,\n interactionConfigChange,\n ActionTypes as KeplerActionTypes,\n registerEntry,\n removeDataset,\n requestMapStyles,\n setFilter as setFilterAction,\n setFilterAnimationTime as setFilterAnimationTimeAction,\n setFilterAnimationWindow as setFilterAnimationWindowAction,\n setFilterView as setFilterViewAction,\n toggleLayerForMap as toggleLayerForMapAction,\n toggleSplitMap as toggleSplitMapAction,\n wrapTo,\n} from '@kepler.gl/actions';\nimport {ALL_FIELD_TYPES, VectorTileDatasetMetadata} from '@kepler.gl/constants';\nimport {\n castDuckDBTypesForKepler,\n getDuckDBColumnTypes,\n getDuckDBColumnTypesMap,\n restoreGeoarrowMetadata,\n setGeoArrowWKBExtension,\n} from '@kepler.gl/duckdb';\nimport {arrowSchemaToFields} from '@kepler.gl/processors';\nimport {\n INITIAL_UI_STATE,\n keplerGlReducer,\n KeplerGlState,\n MapStyle,\n} from '@kepler.gl/reducers';\nimport {KeplerGLSchemaClass} from '@kepler.gl/schemas';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {\n AddDataToMapPayload,\n MinSavedLayer,\n ParsedLayer,\n} from '@kepler.gl/types';\nimport {\n DatabaseConnection,\n initApplicationConfig,\n KeplerApplicationConfig,\n} from '@kepler.gl/utils';\nimport {createId} from '@paralleldrive/cuid2';\nimport {KeplerMapSchema, KeplerSliceConfig} from '@sqlrooms/kepler-config';\nimport {\n BaseRoomStoreState,\n createSlice,\n DbSliceState,\n RoomShellSliceState,\n useBaseRoomShellStore,\n type StateCreator,\n} from '@sqlrooms/room-shell';\nimport {getTheme, type ResolvedTheme} from '@sqlrooms/ui';\nimport * as arrow from 'apache-arrow';\nimport {produce, setAutoFreeze} from 'immer';\nimport {taskMiddleware} from 'react-palm/tasks';\nimport type {\n Action,\n AnyAction,\n MiddlewareAPI,\n Store as ReduxStore,\n} from 'redux';\nimport {compose, Dispatch, Middleware} from 'redux';\nimport {createLogger, ReduxLoggerOptions} from 'redux-logger';\n\nsetAutoFreeze(false); // Kepler attempts to mutate redux state, so we need to disable immer's auto freeze to avoid errors\n\nconst KeplerGLSchemaManager = new KeplerGLSchemaClass();\n\nclass DesktopKeplerTable extends KeplerTable {\n static getInputDataValidator = function () {\n // Default validator accepts only string timestamps\n return (d: any) => d;\n };\n}\n\nexport type KeplerGLBasicProps = {\n mapboxApiAccessToken?: string;\n};\n\nexport type CreateInitialMapKeplerStateContext = {\n reason:\n | 'initialize'\n | 'create-map'\n | 'duplicate-map'\n | 'register-map'\n | 'sync-config';\n defaultInitialMapKeplerState: Partial<KeplerGlState>;\n mapId?: string;\n name?: string;\n};\n\nexport type CreateKeplerSliceOptions = {\n config?: Partial<KeplerSliceConfig>;\n createInitialMapKeplerState?: (\n context: CreateInitialMapKeplerStateContext,\n ) => Partial<KeplerGlState>;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n actionLogging?: boolean | ReduxLoggerOptions;\n middlewares?: Middleware[];\n applicationConfig?: KeplerApplicationConfig;\n /**\n * Called when a kepler action is dispatched\n * @param mapId - The map id\n * @param action - The action\n */\n onAction?: (mapId: string, action: KeplerAction) => void;\n};\n\nfunction createDefaultMapKeplerState(\n resolvedTheme: ResolvedTheme,\n): Partial<KeplerGlState> {\n return {\n mapStyle: {\n styleType: resolvedTheme === 'dark' ? 'dark-matter' : 'positron',\n } as MapStyle,\n uiState: {\n ...INITIAL_UI_STATE,\n currentModal: null,\n mapControls: {\n visibleLayers: INITIAL_UI_STATE.mapControls.visibleLayers,\n splitMap: {\n show: true,\n active: false,\n },\n mapLegend: {\n show: true,\n active: false,\n },\n toggle3d: {\n show: true,\n active: false,\n },\n mapDraw: {\n show: true,\n active: false,\n },\n },\n },\n };\n}\n\nexport function createDefaultKeplerConfig(\n props?: Partial<KeplerSliceConfig>,\n): KeplerSliceConfig {\n const mapId = createId();\n const config: KeplerSliceConfig = {\n maps: [\n {\n id: mapId,\n name: 'Untitled Map',\n config: undefined,\n lastOpenedAt: Date.now(),\n },\n ],\n ...props,\n };\n return KeplerSliceConfig.parse(config);\n}\n\nexport type KeplerAction = {\n type: string;\n payload?: unknown;\n};\n\nexport function hasMapId(action: KeplerAction): action is KeplerAction & {\n payload: {meta: {_id_: string}};\n} {\n return (\n typeof action.payload === 'object' &&\n action.payload !== null &&\n 'meta' in action.payload &&\n typeof action.payload.meta === 'object' &&\n action.payload.meta !== null &&\n '_id_' in action.payload.meta\n );\n}\n\n// support multiple kepler maps\nexport type KeplerGlReduxState = {[id: string]: KeplerGlState};\nexport type KeplerSliceState = {\n kepler: {\n config: KeplerSliceConfig;\n map: KeplerGlReduxState;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n forwardDispatch: {\n [mapId: string]: Dispatch;\n };\n initialize: () => Promise<void>;\n destroy: () => Promise<void>;\n setConfig: (config: KeplerSliceConfig) => void;\n /**\n * Update the datasets in all the kepler map so that they correspond to\n * the latest table schemas in the database\n */\n syncKeplerDatasets: () => Promise<void>;\n addLayer: (\n mapId: string,\n layer: ParsedLayer | MinSavedLayer | undefined,\n datasetId: string,\n ) => void;\n addFilter: (mapId: string, datasetId: string) => void;\n setFilter: (\n mapId: string,\n filterIdx: number,\n prop: string | string[],\n value: any,\n valueIndex?: number,\n ) => void;\n setFilterAnimationTime: (\n mapId: string,\n filterIdx: number,\n prop: string,\n value: any,\n ) => void;\n setFilterAnimationWindow: (\n mapId: string,\n filterId: string,\n animationWindow: string,\n ) => void;\n setFilterView: (\n mapId: string,\n filterIdx: number,\n view: 'side' | 'enlarged' | 'minified',\n ) => void;\n updateTooltipFields: (\n mapId: string,\n datasetId: string,\n fieldNames: string[],\n ) => void;\n toggleSplitMap: (mapId: string, index?: number) => void;\n toggleLayerForMap: (\n mapId: string,\n mapIndex: number,\n layerId: string,\n ) => void;\n addTableToMap: (\n mapId: string,\n tableName: string,\n options?: AddDataToMapPayload['options'],\n config?: AddDataToMapPayload['config'],\n ) => Promise<void>;\n addTileSetToMap: (\n mapId: string,\n tableName: string,\n tileset: {\n name: string;\n type: string;\n metadata: VectorTileDatasetMetadata;\n },\n tileMetadata: Record<string, any>,\n autoCreateLayers: boolean,\n ) => void;\n addConfigToMap: (mapId: string, config: KeplerMapSchema) => void;\n removeDatasetFromMaps: (datasetId: string) => void;\n dispatchAction: (mapId: string, action: KeplerAction) => void;\n ensureMap: (mapId: string, name?: string) => void;\n /**\n * Create a new map and return the map id\n * @param name - The name of the map\n * @returns The map id\n */\n createMap: (name?: string, options?: {id?: string}) => string;\n deleteMap: (mapId: string) => void;\n duplicateMap: (\n mapId: string,\n ) => Promise<{success: boolean; message?: string; code?: string}>;\n renameMap: (mapId: string, name: string) => void;\n registerKeplerMapIfNotExists: (mapId: string) => void;\n __reduxProviderStore: ReduxStore<KeplerGlReduxState, AnyAction> | undefined;\n };\n};\n\n// Auto save will be triggered in middleware on every kepler action\n// skip these actions to avoid unnecessary save\nconst SKIP_AUTO_SAVE_ACTIONS: string[] = [\n KeplerActionTypes.LAYER_HOVER,\n KeplerActionTypes.UPDATE_MAP,\n KeplerActionTypes.MOUSE_MOVE,\n];\n\nexport function createKeplerSlice({\n basicKeplerProps = {},\n config: initialConfigProps,\n createInitialMapKeplerState,\n actionLogging = false,\n middlewares: additionalMiddlewares = [],\n applicationConfig,\n onAction,\n}: CreateKeplerSliceOptions = {}): StateCreator<KeplerSliceState> {\n const initialConfig = createDefaultKeplerConfig(initialConfigProps);\n initApplicationConfig({\n table: DesktopKeplerTable,\n ...applicationConfig,\n });\n let syncKeplerPromise: Promise<void> | null = null;\n // When a caller arrives while a sync is already in-flight, the in-flight run\n // may have captured a stale snapshot of db.tables/kepler.map (missing maps or\n // tables added by createMap, duplicateMap, etc.). Setting this flag tells the\n // active run to loop once more with a fresh snapshot after it finishes, so\n // late mutations are never silently dropped.\n let pendingKeplerSync = false;\n const updateMapLastOpenedAt = (\n maps: KeplerSliceConfig['maps'],\n mapId: string,\n now: number = Date.now(),\n ) => {\n const map = maps.find((item) => item.id === mapId);\n if (map) {\n map.lastOpenedAt = now;\n }\n };\n return createSlice<\n KeplerSliceState,\n BaseRoomStoreState & KeplerSliceState & DbSliceState\n >((set, get, _store) => {\n function resolveInitialMapKeplerState(\n context: Omit<\n CreateInitialMapKeplerStateContext,\n 'defaultInitialMapKeplerState'\n >,\n ): Partial<KeplerGlState> {\n const resolvedTheme = getTheme();\n const defaultInitialMapKeplerState =\n createDefaultMapKeplerState(resolvedTheme);\n return (\n createInitialMapKeplerState?.({\n ...context,\n defaultInitialMapKeplerState,\n }) ?? defaultInitialMapKeplerState\n );\n }\n\n function createKeplerReducer(\n context: Omit<\n CreateInitialMapKeplerStateContext,\n 'defaultInitialMapKeplerState'\n >,\n ) {\n return keplerGlReducer.initialState(\n resolveInitialMapKeplerState(context),\n );\n }\n\n const keplerReducer = createKeplerReducer({reason: 'initialize'});\n const middlewares: Middleware[] = [\n taskMiddleware,\n saveKeplerConfigMiddleware,\n ...additionalMiddlewares,\n ];\n\n if (actionLogging) {\n const logger = createLogger(\n actionLogging === true ? {collapsed: true} : actionLogging,\n ) as Middleware;\n middlewares.push(logger);\n }\n\n const storeDispatch: Dispatch<KeplerAction> = (action) => {\n set((state: KeplerSliceState) => ({\n ...state,\n kepler: {\n ...state.kepler,\n map: keplerReducer(state.kepler.map, action),\n },\n }));\n\n // Call onAction if it's defined\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n onAction?.(mapId, action);\n return action;\n };\n // const forwardDispatch: {[id: string]: Dispatch} = {};\n return {\n kepler: {\n config: initialConfig,\n basicKeplerProps,\n map: {},\n dispatchAction: () => {},\n __reduxProviderStore: undefined,\n forwardDispatch: {},\n\n setConfig: (config: KeplerSliceConfig) => {\n const nextConfig = KeplerSliceConfig.parse(config);\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config = nextConfig;\n }),\n );\n updateMapReduxStates();\n updateForwardDispatch();\n get().kepler.syncKeplerDatasets();\n updateMapConfigs();\n },\n\n async initialize() {\n const config = get().kepler.config;\n const keplerInitialState = config.maps.reduce<KeplerGlReduxState>(\n (mapState, map) =>\n createKeplerReducer({\n reason: 'initialize',\n mapId: map.id,\n name: map.name,\n })(mapState, registerEntry({id: map.id})),\n {},\n );\n set({\n kepler: {\n ...get().kepler,\n map: keplerInitialState,\n dispatchAction: (mid, action) => {\n // wrapDispatch(wrapTo(mapId)(action));\n const dispatchToMap = get().kepler.forwardDispatch[mid];\n if (dispatchToMap) {\n dispatchToMap(wrapTo(mid, action));\n } else {\n console.error('dispatchAction: mapId not found', mid);\n }\n },\n __reduxProviderStore: {\n dispatch: storeDispatch,\n getState: () => get().kepler.map || {},\n subscribe: () => () => {},\n replaceReducer: () => {},\n // @ts-expect-error - Symbol.observable is not defined in the Redux type definitions\n [Symbol.observable]: () => {},\n },\n },\n });\n updateForwardDispatch();\n await get().kepler.syncKeplerDatasets();\n updateMapConfigs();\n for (const mapId of Object.keys(get().kepler.map)) {\n requestMapStyle(mapId);\n }\n },\n\n async destroy() {\n // no-op\n },\n\n addLayer: (mapId, layer, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addLayerAction(layer, datasetId));\n },\n\n addFilter: (mapId, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addFilterAction(datasetId));\n },\n\n setFilter: (mapId, filterIdx, prop, value, valueIndex) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAction(filterIdx, prop, value, valueIndex),\n );\n },\n\n setFilterAnimationTime: (mapId, filterIdx, prop, value) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAnimationTimeAction(filterIdx, prop, value),\n );\n },\n\n setFilterAnimationWindow: (mapId, filterId, animationWindow) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterAnimationWindowAction({id: filterId, animationWindow}),\n );\n },\n\n setFilterView: (mapId, filterIdx, view) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n setFilterViewAction(filterIdx, view),\n );\n },\n\n updateTooltipFields: (mapId, datasetId, fieldNames) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const mapState = get().kepler.map[mapId];\n const tooltipConfig = mapState?.visState?.interactionConfig?.tooltip;\n if (!tooltipConfig) return;\n const currentFieldsToShow = tooltipConfig.config?.fieldsToShow || {};\n const existingFields = currentFieldsToShow[datasetId] || [];\n const existingByName = new Map(\n existingFields.map(\n (field: {name: string; format: string | null}) => [\n field.name,\n field,\n ],\n ),\n );\n const nextFields = Array.from(new Set(fieldNames)).map(\n (name) => existingByName.get(name) ?? {name, format: null},\n );\n if (\n nextFields.length === existingFields.length &&\n nextFields.every(\n (field, index) =>\n field.name === existingFields[index]?.name &&\n field.format === existingFields[index]?.format,\n )\n ) {\n return;\n }\n get().kepler.dispatchAction(\n mapId,\n interactionConfigChange({\n ...tooltipConfig,\n config: {\n ...tooltipConfig.config,\n fieldsToShow: {\n ...currentFieldsToShow,\n [datasetId]: nextFields,\n },\n },\n }),\n );\n },\n\n toggleSplitMap: (mapId, index) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n toggleSplitMapAction(index as number),\n );\n },\n\n toggleLayerForMap: (mapId, mapIndex, layerId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(\n mapId,\n toggleLayerForMapAction(mapIndex, layerId),\n );\n },\n\n addTableToMap: async (mapId, tableName, options = {}, config = {}) => {\n const connector = await get().db.getConnector();\n const duckDbColumns = await getDuckDBColumnTypes(\n {\n query: (query: string) => connector.query(query).result,\n } as DatabaseConnection,\n tableName,\n );\n const tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);\n const adjustedQuery = castDuckDBTypesForKepler(\n tableName,\n duckDbColumns,\n );\n const arrowResult = await connector.query(adjustedQuery).result;\n setGeoArrowWKBExtension(arrowResult, duckDbColumns);\n // TODO remove once DuckDB doesn't drop geoarrow metadata\n restoreGeoarrowMetadata(arrowResult, {});\n const fields = arrowSchemaToFields(arrowResult, tableDuckDBTypes);\n const cols = Array.from({length: arrowResult.numCols}, (_, i) =>\n arrowResult.getChildAt(i),\n ).filter((col) => col) as arrow.Vector[];\n\n if (fields && cols) {\n const datasets: AddDataToMapPayload['datasets'] = {\n data: {fields, cols, rows: [], arrowTable: arrowResult},\n info: {label: tableName, id: tableName},\n metadata: {tableName},\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({datasets, options, config}),\n );\n }\n },\n\n ensureMap: (mapId, name) => {\n const now = Date.now();\n set((state) =>\n produce(state, (draft) => {\n const existing = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (existing) {\n if (name && existing.name !== name) {\n existing.name = name;\n }\n return;\n }\n draft.kepler.config.maps.push({\n id: mapId,\n name: name ?? 'Untitled Map',\n lastOpenedAt: now,\n });\n draft.kepler.map = createKeplerReducer({\n reason: 'create-map',\n mapId,\n name,\n })(draft.kepler.map, registerEntry({id: mapId}));\n draft.kepler.forwardDispatch[mapId] = getForwardDispatch(mapId);\n }),\n );\n if (!get().kepler.map[mapId]) {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n }\n requestMapStyle(mapId);\n get().kepler.syncKeplerDatasets();\n },\n\n createMap: (name, options) => {\n const mapId = options?.id ?? createId();\n get().kepler.ensureMap(mapId, name);\n return mapId;\n },\n\n async syncKeplerDatasets() {\n if (syncKeplerPromise) {\n pendingKeplerSync = true;\n return syncKeplerPromise;\n }\n syncKeplerPromise = (async () => {\n // Loop until no new sync was requested during the current pass.\n // Each iteration reads a fresh snapshot of db.tables and kepler.map,\n // so tables/maps added concurrently are picked up on the next pass.\n do {\n pendingKeplerSync = false;\n for (const mapId of Object.keys(get().kepler.map)) {\n const mapState = get().kepler.map[mapId];\n if (!mapState) continue;\n const keplerDatasets = mapState.visState.datasets;\n\n // Only sync tables that are referenced by existing layers or filters\n const referencedDataIds = new Set<string>();\n for (const layer of mapState.visState.layers ?? []) {\n if (layer.config.dataId) {\n referencedDataIds.add(layer.config.dataId);\n }\n }\n for (const filter of mapState.visState.filters ?? []) {\n for (const dataId of filter.dataId ?? []) {\n referencedDataIds.add(dataId);\n }\n }\n\n const availableTables = new Set(\n get()\n .db.tables.filter((t) => t.table.schema === 'main')\n .map((t) => t.table.table),\n );\n\n for (const dataId of referencedDataIds) {\n if (\n !keplerDatasets?.[dataId] &&\n availableTables.has(dataId)\n ) {\n await get().kepler.addTableToMap(mapId, dataId, {\n autoCreateLayers: false,\n centerMap: false,\n });\n }\n }\n }\n } while (pendingKeplerSync);\n })();\n try {\n await syncKeplerPromise;\n } finally {\n syncKeplerPromise = null;\n }\n },\n\n deleteMap: (mapId) => {\n set((state) =>\n produce(state, (draft) => {\n const maps = draft.kepler.config.maps;\n\n draft.kepler.config.maps = maps.filter((map) => map.id !== mapId);\n\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n\n delete draft.kepler.forwardDispatch[mapId];\n }),\n );\n },\n\n duplicateMap: async (mapId) => {\n // Ensure the map's redux state is registered, consistent with other kepler actions\n get().kepler.registerKeplerMapIfNotExists(mapId);\n\n const sourceMap = get().kepler.config.maps.find(\n (m) => m.id === mapId,\n );\n const sourceMapState = get().kepler.map[mapId];\n if (!sourceMap || !sourceMapState) {\n return {\n success: false,\n message: 'Unable to duplicate map: source map or state not found',\n code: 'source-map-not-found',\n };\n }\n\n const newMapId = createId();\n const now = Date.now();\n\n // Save the source map state using Kepler's schema manager\n const savedConfig =\n KeplerGLSchemaManager.getConfigToSave(sourceMapState);\n\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps.push({\n id: newMapId,\n name: `Copy of ${sourceMap.name}`,\n config: savedConfig as any,\n lastOpenedAt: now,\n });\n // Register the new map with empty state, then load the config\n draft.kepler.map = createKeplerReducer({\n reason: 'duplicate-map',\n mapId: newMapId,\n name: `Copy of ${sourceMap.name}`,\n })(draft.kepler.map, registerEntry({id: newMapId}));\n draft.kepler.forwardDispatch[newMapId] =\n getForwardDispatch(newMapId);\n }),\n );\n\n // Load the saved config into the new map\n get().kepler.addConfigToMap(newMapId, savedConfig as any);\n requestMapStyle(newMapId);\n get().kepler.syncKeplerDatasets();\n\n return {\n success: true,\n message: 'Map duplicated successfully',\n };\n },\n\n renameMap: (mapId, name) => {\n set((state) =>\n produce(state, (draft) => {\n const map = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (map) {\n map.name = name;\n }\n }),\n );\n },\n\n addDataToMap: (mapId: string, data: any) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addDataToMap(data));\n },\n\n addTileSetToMap: (\n mapId,\n tableName,\n tileset,\n tileMetadata,\n autoCreateLayers = true,\n ) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const dataset = {\n info: {\n label: tileset.name,\n type: tileset.type,\n format: 'rows',\n // important for kepler to reload this tileset\n id: tableName,\n },\n data: {\n fields: tileMetadata?.fields || [],\n rows: [],\n },\n metadata: {\n // duckdb table name\n tableName,\n ...tileMetadata,\n ...tileset.metadata,\n },\n // vector tile layer only supports gpu filtering for now\n supportedFilterTypes: [\n ALL_FIELD_TYPES.real,\n ALL_FIELD_TYPES.integer,\n ],\n disableDataOperation: true,\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({\n datasets: dataset,\n options: {\n autoCreateLayers,\n centerMap: true,\n },\n }),\n );\n },\n\n addConfigToMap: (mapId: string, config: any) => {\n // if map not registered, register it\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const parsedConfig = KeplerGLSchemaManager.parseSavedConfig(config);\n if (!parsedConfig) {\n throw new Error('Failed to parse config');\n }\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({config: parsedConfig, datasets: []}),\n );\n },\n\n registerKeplerMapIfNotExists(mapId: string) {\n if (!get().kepler.map[mapId]) {\n set({\n kepler: {\n ...get().kepler,\n map: createKeplerReducer({\n reason: 'register-map',\n mapId,\n })(get().kepler.map, registerEntry({id: mapId})),\n forwardDispatch: {\n ...get().kepler.forwardDispatch,\n [mapId]: getForwardDispatch(mapId),\n },\n },\n });\n requestMapStyle(mapId);\n }\n },\n\n removeDatasetFromMaps: (datasetId: string) => {\n for (const mapId of Object.keys(get().kepler.map)) {\n const map = get().kepler.map[mapId];\n if (map) {\n get().kepler.dispatchAction(mapId, removeDataset(datasetId));\n }\n }\n },\n },\n };\n\n function requestMapStyle(mapId: string) {\n const {mapStyle} = get().kepler.map[mapId] || {};\n const style = mapStyle?.mapStyles[mapStyle.styleType];\n if (style) {\n get().kepler.dispatchAction(\n mapId,\n requestMapStyles({[style.id]: style}),\n );\n }\n }\n\n function saveKeplerConfigMiddleware() {\n return (next: (action: KeplerAction) => void) =>\n (action: KeplerAction) => {\n // get id from kepler action payload meta\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n const result = next(action);\n if (!SKIP_AUTO_SAVE_ACTIONS.includes(action.type) && mapId) {\n // save kepler config to store\n set((state) =>\n produce(state, (draft) => {\n const mapToSave = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (mapToSave && state.kepler.map?.[mapId]) {\n mapToSave.config = KeplerGLSchemaManager.getConfigToSave(\n state.kepler.map[mapId],\n ) as any;\n }\n }),\n );\n }\n // save kepler config to local storage\n return result;\n };\n }\n\n function updateMapConfigs() {\n const config = get().kepler.config;\n const keplerMaps = config.maps;\n for (const {id, config} of keplerMaps) {\n if (config) {\n get().kepler.addConfigToMap(id, config as unknown as KeplerMapSchema);\n }\n }\n }\n\n function updateMapReduxStates() {\n set((state) =>\n produce(state, (draft) => {\n // Delete redux state of maps that are not in the config\n for (const mapId of Object.keys(draft.kepler.map)) {\n if (!draft.kepler.config.maps.some((map) => map.id === mapId)) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n }\n }\n // Register redux state of maps that are not in the config\n for (const map of draft.kepler.config.maps) {\n if (!draft.kepler.map[map.id]) {\n draft.kepler.map = createKeplerReducer({\n reason: 'sync-config',\n mapId: map.id,\n name: map.name,\n })(draft.kepler.map, registerEntry({id: map.id}));\n draft.kepler.forwardDispatch[map.id] = getForwardDispatch(map.id);\n }\n }\n }),\n );\n }\n\n function updateForwardDispatch() {\n const config = get().kepler.config;\n const forwardDispatch: Record<string, Dispatch<KeplerAction>> = {};\n if (config) {\n for (const {id} of config.maps) {\n forwardDispatch[id] = getForwardDispatch(id);\n }\n }\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.forwardDispatch = forwardDispatch;\n }),\n );\n }\n\n function getForwardDispatch(mapId: string): Dispatch<KeplerAction> {\n /** Adapted from applyMiddleware in redux */\n let wrapDispatch: (\n action: KeplerAction,\n ...args: any\n ) => KeplerAction = () => {\n throw new Error(\n 'Dispatching while constructing your middleware is not allowed. ' +\n 'Other middleware would not be applied to this dispatch.',\n );\n };\n const wrapToMap = wrapTo(mapId);\n const middlewareAPI: MiddlewareAPI<any, any> = {\n getState: get,\n dispatch: (action: Action, ...args: any) => {\n // need to forward here as well\n return wrapDispatch(wrapToMap(action), ...args);\n },\n };\n\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n wrapDispatch = compose<Dispatch>(...chain)(storeDispatch);\n return wrapDispatch as Dispatch<KeplerAction>;\n }\n });\n}\n\ntype RoomStateWithDiscuss = RoomShellSliceState & KeplerSliceState;\n\nexport function useStoreWithKepler<T>(\n selector: (state: RoomStateWithDiscuss) => T,\n): T {\n return useBaseRoomShellStore<RoomStateWithDiscuss, T>((state) =>\n selector(state as RoomStateWithDiscuss),\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomDndContext.d.ts","sourceRoot":"","sources":["../../src/components/CustomDndContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuB,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGrE,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAY/B,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC,CAAC;AAEH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,GAC3D,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"CustomDndContext.d.ts","sourceRoot":"","sources":["../../src/components/CustomDndContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuB,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGrE,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAY/B,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC,CAAC;AAEH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,GAC3D,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAiH3B;yBAnHe,uBAAuB"}
|
|
@@ -18,8 +18,11 @@ export function CustomDndContextFactory(LayerPanelHeader) {
|
|
|
18
18
|
return (_jsx(LayerPanelHeader, { isConfigActive: false, layerId: layer.id, isVisible: true, isValid: true, label: layer.config.label, labelRCGColorValues: color, onToggleVisibility: nop, onResetIsValid: nop, onUpdateLayerLabel: nop, onToggleEnableConfig: nop, onDuplicateLayer: nop, onRemoveLayer: nop, onZoomToLayer: nop, layerType: layer.type, allowDuplicate: false, isDragNDropEnabled: false }));
|
|
19
19
|
};
|
|
20
20
|
const DndContext = ({ children, visState }) => {
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const mapId = useStoreWithKepler((state) => {
|
|
22
|
+
if (!visState)
|
|
23
|
+
return undefined;
|
|
24
|
+
return Object.entries(state.kepler.map).find(([, mapState]) => mapState?.visState === visState)?.[0];
|
|
25
|
+
});
|
|
23
26
|
const { datasets, layerOrder, layers, splitMaps, effects, effectOrder } = visState || {};
|
|
24
27
|
// Use our custom hooks that include mapId
|
|
25
28
|
const { activeLayer, onDragStart: onLayerDragStart, onDragEnd: onLayerDragEnd, } = useDndLayers(mapId, layers || [], layerOrder || []);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomDndContext.js","sourceRoot":"","sources":["../../src/components/CustomDndContext.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,WAAW,EAAE,OAAO,EAAoB,MAAM,OAAO,CAAC;AACrE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,UAAU,IAAI,aAAa,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAEvE,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,aAAa,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAElD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;CAE1B,CAAC;AAEF,MAAM,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAMrB,MAAM,UAAU,uBAAuB,CACrC,gBAA4D;IAE5D,MAAM,iBAAiB,GAAG,CAAC,EACzB,KAAK,EACL,QAAQ,GAIT,EAAE,EAAE;QACH,MAAM,KAAK,GACT,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAClD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK;YACrC,CAAC,CAAC,IAAI,CAAC;QACX,OAAO,CACL,KAAC,gBAAgB,IACf,cAAc,EAAE,KAAK,EACrB,OAAO,EAAE,KAAK,CAAC,EAAE,EACjB,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,EACb,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EACzB,mBAAmB,EAAE,KAAK,EAC1B,kBAAkB,EAAE,GAAG,EACvB,cAAc,EAAE,GAAG,EACnB,kBAAkB,EAAE,GAAG,EACvB,oBAAoB,EAAE,GAAG,EACzB,gBAAgB,EAAE,GAAG,EACrB,aAAa,EAAE,GAAG,EAClB,aAAa,EAAE,GAAG,EAClB,SAAS,EAAE,KAAK,CAAC,IAAI,EACrB,cAAc,EAAE,KAAK,EACrB,kBAAkB,EAAE,KAAK,GACzB,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAkB,EAAE,EAAE;QAC3D,
|
|
1
|
+
{"version":3,"file":"CustomDndContext.js","sourceRoot":"","sources":["../../src/components/CustomDndContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {useCallback, useMemo, PropsWithChildren} from 'react';\nimport styled from 'styled-components';\nimport {DndContext as DndKitContext, DragOverlay} from '@dnd-kit/core';\nimport {VisState} from '@kepler.gl/schemas';\nimport {\n LayerPanelHeaderFactory,\n DND_MODIFIERS,\n DND_EMPTY_MODIFIERS,\n SORTABLE_LAYER_TYPE,\n SORTABLE_EFFECT_TYPE,\n} from '@kepler.gl/components';\n\nimport useDndLayers from '../hooks/useDndLayers';\nimport useDndEffects from '../hooks/useDndEffects';\nimport {useStoreWithKepler} from '../KeplerSlice';\n\nconst DragItem = styled.div`\n cursor: grabbing;\n`;\n\nconst nop = () => {};\n\nexport type DndContextProps = PropsWithChildren<{\n visState?: VisState;\n}>;\n\nexport function CustomDndContextFactory(\n LayerPanelHeader: ReturnType<typeof LayerPanelHeaderFactory>,\n): React.FC<DndContextProps> {\n const LayerPanelOverlay = ({\n layer,\n datasets,\n }: {\n layer: any;\n datasets: any;\n }) => {\n const color =\n layer.config.dataId && datasets[layer.config.dataId]\n ? datasets[layer.config.dataId].color\n : null;\n return (\n <LayerPanelHeader\n isConfigActive={false}\n layerId={layer.id}\n isVisible={true}\n isValid={true}\n label={layer.config.label}\n labelRCGColorValues={color}\n onToggleVisibility={nop}\n onResetIsValid={nop}\n onUpdateLayerLabel={nop}\n onToggleEnableConfig={nop}\n onDuplicateLayer={nop}\n onRemoveLayer={nop}\n onZoomToLayer={nop}\n layerType={layer.type}\n allowDuplicate={false}\n isDragNDropEnabled={false}\n />\n );\n };\n\n const DndContext = ({children, visState}: DndContextProps) => {\n const mapId = useStoreWithKepler((state) => {\n if (!visState) return undefined;\n return Object.entries(state.kepler.map).find(\n ([, mapState]) => mapState?.visState === visState,\n )?.[0];\n });\n const {datasets, layerOrder, layers, splitMaps, effects, effectOrder} =\n visState || {};\n\n // Use our custom hooks that include mapId\n const {\n activeLayer,\n onDragStart: onLayerDragStart,\n onDragEnd: onLayerDragEnd,\n } = useDndLayers(mapId, layers || [], layerOrder || []);\n\n const {onDragStart: onEffectDragStart, onDragEnd: onEffectDragEnd} =\n useDndEffects(mapId, effects || [], effectOrder || []);\n\n const isSplit = useMemo(() => (splitMaps?.length || 0) > 1, [splitMaps]);\n const dndModifiers = useMemo(\n () => (isSplit ? DND_EMPTY_MODIFIERS : DND_MODIFIERS),\n [isSplit],\n );\n\n const onDragStart = useCallback(\n (event: any) => {\n const activeType = event.active.data?.current?.type;\n switch (activeType) {\n case SORTABLE_LAYER_TYPE:\n onLayerDragStart(event);\n break;\n case SORTABLE_EFFECT_TYPE:\n onEffectDragStart(event);\n break;\n default:\n console.log(`activeType ${activeType} unknown`);\n }\n },\n [onLayerDragStart, onEffectDragStart],\n );\n\n const onDragEnd = useCallback(\n (event: any) => {\n const activeType = event.active.data?.current?.type;\n switch (activeType) {\n case SORTABLE_LAYER_TYPE:\n onLayerDragEnd(event);\n break;\n case SORTABLE_EFFECT_TYPE:\n onEffectDragEnd(event);\n break;\n default:\n console.log(`activeType ${activeType} unknown`);\n }\n },\n [onLayerDragEnd, onEffectDragEnd],\n );\n\n return (\n <DndKitContext\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n modifiers={dndModifiers}\n >\n {children}\n {activeLayer ? (\n <DragOverlay modifiers={dndModifiers} dropAnimation={null}>\n <DragItem>\n <LayerPanelOverlay layer={activeLayer} datasets={datasets} />\n </DragItem>\n </DragOverlay>\n ) : null}\n </DndKitContext>\n );\n };\n\n return DndContext;\n}\n\nCustomDndContextFactory.deps = [LayerPanelHeaderFactory];\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFilterManager.d.ts","sourceRoot":"","sources":["../../src/components/CustomFilterManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AA6ClD,KAAK,wBAAwB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomFilterManager.d.ts","sourceRoot":"","sources":["../../src/components/CustomFilterManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AA6ClD,KAAK,wBAAwB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAiHF,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA2DlE,CAAC"}
|
|
@@ -53,7 +53,10 @@ const FilterList = ({ filtersByIndex, filters, datasets, layers, isAnyFilterAnim
|
|
|
53
53
|
toggleFilterAnimation,
|
|
54
54
|
toggleFilterFeature,
|
|
55
55
|
]);
|
|
56
|
-
return (_jsx(_Fragment, { children: [...filtersByIndex].reverse().map(({ filter, idx }) =>
|
|
56
|
+
return (_jsx(_Fragment, { children: [...filtersByIndex].reverse().map(({ filter, idx }) => {
|
|
57
|
+
const callbacks = filterPanelProps[filter.id];
|
|
58
|
+
return (_jsx(FilterPanel, { idx: idx, filters: filters, filter: filter, datasets: datasets, layers: layers, isAnyFilterAnimating: isAnyFilterAnimating, ...keplerActions.visStateActions, removeFilter: () => callbacks?.removeFilter?.(), enlargeFilter: () => callbacks?.setFilterView?.(''), toggleAnimation: () => callbacks?.toggleAnimation?.(), toggleFilterFeature: () => callbacks?.toggleFilterFeature?.() }, `${filter.id}-${idx}`));
|
|
59
|
+
}) }));
|
|
57
60
|
};
|
|
58
61
|
// Custom hook for filter actions
|
|
59
62
|
function useCustomFilterActions(keplerActions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFilterManager.js","sourceRoot":"","sources":["../../src/components/CustomFilterManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {useCallback, useMemo} from 'react';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n FilterPanelFactory,\n PanelTitleFactory,\n AddFilterButtonFactory,\n SidePanelSection,\n} from '@kepler.gl/components';\nimport {FILTER_VIEW_TYPES, SIDEBAR_PANELS} from '@kepler.gl/constants';\nimport {Filter} from '@kepler.gl/types';\nimport {Layer} from '@kepler.gl/layers';\nimport {isSideFilter} from '@kepler.gl/utils';\nimport {Datasets} from '@kepler.gl/table';\n\nimport {getKeplerFactory} from './KeplerInjector';\nimport {\n KeplerActions,\n useKeplerStateActions,\n} from '../hooks/useKeplerStateActions';\n\nconst filterPanelMetadata = SIDEBAR_PANELS.find((p) => p.id === 'filter');\n\n// Custom styled components for your filter manager\nconst CustomFilterManagerContainer = styled.div`\n .filter-manager {\n /* Add your custom styles here */\n }\n\n .filter-manager-title {\n /* Custom title styling */\n }\n\n .add-filter-button {\n background-color: ${(props) =>\n props.theme.sidePanelBg || props.theme.panelBackground};\n color: #2563eb;\n border: 0px;\n height: 28px;\n font-weight: 500;\n font-size: 14px;\n }\n`;\n\ntype CustomFilterManagerProps = {\n mapId: string;\n showDeleteDataset?: boolean;\n};\n\ntype FilterListProps = {\n filters: Filter[];\n datasets: Datasets;\n layers: Layer[];\n filtersByIndex: {\n filter: Filter;\n idx: number;\n }[];\n isAnyFilterAnimating: boolean;\n keplerActions: KeplerActions;\n};\n\n// Based on Kepler.gl's filterPanelCallbacks pattern\ntype FilterPanelCallbacks = Record<\n string,\n {\n removeFilter: () => void;\n setFilterView: (_view: string) => void;\n toggleAnimation: () => void;\n toggleFilterFeature: () => void;\n }\n>;\n\n// Get the kepler.gl components through the injector\nconst FilterPanel = getKeplerFactory(FilterPanelFactory);\nconst PanelTitle = getKeplerFactory(PanelTitleFactory);\nconst AddFilterButton = getKeplerFactory(AddFilterButtonFactory);\n\n// Filter List Component\nconst FilterList: React.FC<FilterListProps> = ({\n filtersByIndex,\n filters,\n datasets,\n layers,\n isAnyFilterAnimating,\n keplerActions,\n}) => {\n const {\n removeFilter,\n setFilterView,\n toggleFilterAnimation,\n toggleFilterFeature,\n } = keplerActions.visStateActions;\n\n const filterPanelProps = useMemo(() => {\n return filtersByIndex.reduce(\n (accu, {filter, idx}) => ({\n ...accu,\n [filter.id]: {\n removeFilter: () => removeFilter(idx),\n setFilterView: (_view: string) =>\n setFilterView(\n idx,\n isSideFilter(filter)\n ? FILTER_VIEW_TYPES.enlarged\n : FILTER_VIEW_TYPES.side,\n ),\n toggleAnimation: () => toggleFilterAnimation(idx),\n toggleFilterFeature: () => toggleFilterFeature(idx),\n },\n }),\n {} as FilterPanelCallbacks,\n );\n }, [\n filtersByIndex,\n removeFilter,\n setFilterView,\n toggleFilterAnimation,\n toggleFilterFeature,\n ]);\n\n return (\n <>\n {[...filtersByIndex].reverse().map(({filter, idx}) => (\n <FilterPanel\n key={`${filter.id}-${idx}`}\n idx={idx}\n filters={filters}\n filter={filter}\n datasets={datasets}\n layers={layers}\n isAnyFilterAnimating={isAnyFilterAnimating}\n removeFilter={filterPanelProps[filter.id]?.removeFilter}\n setFilterView={filterPanelProps[filter.id]?.setFilterView}\n toggleAnimation={filterPanelProps[filter.id]?.toggleAnimation}\n toggleFilterFeature={filterPanelProps[filter.id]?.toggleFilterFeature}\n {...keplerActions.visStateActions}\n />\n ))}\n </>\n );\n};\n\n// Custom hook for filter actions\nfunction useCustomFilterActions(keplerActions: KeplerActions) {\n const {addFilter} = keplerActions.visStateActions;\n\n const onClickAddFilter = useCallback(\n (dataset: string) => addFilter(dataset),\n [addFilter],\n );\n\n return {\n onClickAddFilter,\n };\n}\n\n// Main Custom Filter Manager Component\nexport const CustomFilterManager: React.FC<CustomFilterManagerProps> = ({\n mapId,\n}) => {\n const {keplerActions, keplerState} = useKeplerStateActions({mapId});\n const intl = useIntl();\n\n const {onClickAddFilter} = useCustomFilterActions(keplerActions);\n\n const visState = keplerState?.visState;\n const filters = useMemo(() => visState?.filters ?? [], [visState?.filters]);\n const datasets = useMemo(\n () => (visState?.datasets ?? []) as Datasets,\n [visState?.datasets],\n );\n const layers = useMemo(() => visState?.layers ?? [], [visState?.layers]);\n const filtersByIndex = useMemo(\n () =>\n filters?.map((f, idx) => ({\n filter: f,\n idx,\n })) ?? [],\n [filters],\n );\n\n if (!keplerState || !keplerActions) {\n return null;\n }\n\n const isAnyFilterAnimating = Object.values(filters).some(\n (f) => f.isAnimating,\n );\n\n return (\n <CustomFilterManagerContainer>\n <div className=\"filter-manager\">\n <SidePanelSection>\n <PanelTitle\n className=\"filter-manager-title\"\n title={intl.formatMessage({\n id: filterPanelMetadata?.label || 'Filters',\n })}\n >\n <AddFilterButton datasets={datasets} onAdd={onClickAddFilter} />\n </PanelTitle>\n </SidePanelSection>\n\n <SidePanelSection>\n <FilterList\n filtersByIndex={filtersByIndex}\n filters={filters}\n datasets={datasets}\n layers={layers}\n isAnyFilterAnimating={isAnyFilterAnimating}\n keplerActions={keplerActions}\n />\n </SidePanelSection>\n </div>\n </CustomFilterManagerContainer>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"CustomFilterManager.js","sourceRoot":"","sources":["../../src/components/CustomFilterManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {useCallback, useMemo} from 'react';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n FilterPanelFactory,\n PanelTitleFactory,\n AddFilterButtonFactory,\n SidePanelSection,\n} from '@kepler.gl/components';\nimport {FILTER_VIEW_TYPES, SIDEBAR_PANELS} from '@kepler.gl/constants';\nimport {Filter} from '@kepler.gl/types';\nimport {Layer} from '@kepler.gl/layers';\nimport {isSideFilter} from '@kepler.gl/utils';\nimport {Datasets} from '@kepler.gl/table';\n\nimport {getKeplerFactory} from './KeplerInjector';\nimport {\n KeplerActions,\n useKeplerStateActions,\n} from '../hooks/useKeplerStateActions';\n\nconst filterPanelMetadata = SIDEBAR_PANELS.find((p) => p.id === 'filter');\n\n// Custom styled components for your filter manager\nconst CustomFilterManagerContainer = styled.div`\n .filter-manager {\n /* Add your custom styles here */\n }\n\n .filter-manager-title {\n /* Custom title styling */\n }\n\n .add-filter-button {\n background-color: ${(props) =>\n props.theme.sidePanelBg || props.theme.panelBackground};\n color: #2563eb;\n border: 0px;\n height: 28px;\n font-weight: 500;\n font-size: 14px;\n }\n`;\n\ntype CustomFilterManagerProps = {\n mapId: string;\n showDeleteDataset?: boolean;\n};\n\ntype FilterListProps = {\n filters: Filter[];\n datasets: Datasets;\n layers: Layer[];\n filtersByIndex: {\n filter: Filter;\n idx: number;\n }[];\n isAnyFilterAnimating: boolean;\n keplerActions: KeplerActions;\n};\n\n// Based on Kepler.gl's filterPanelCallbacks pattern\ntype FilterPanelCallbacks = Record<\n string,\n {\n removeFilter: () => void;\n setFilterView: (_view: string) => void;\n toggleAnimation: () => void;\n toggleFilterFeature: () => void;\n }\n>;\n\n// Get the kepler.gl components through the injector\nconst FilterPanel = getKeplerFactory(FilterPanelFactory);\nconst PanelTitle = getKeplerFactory(PanelTitleFactory);\nconst AddFilterButton = getKeplerFactory(AddFilterButtonFactory);\n\n// Filter List Component\nconst FilterList: React.FC<FilterListProps> = ({\n filtersByIndex,\n filters,\n datasets,\n layers,\n isAnyFilterAnimating,\n keplerActions,\n}) => {\n const {\n removeFilter,\n setFilterView,\n toggleFilterAnimation,\n toggleFilterFeature,\n } = keplerActions.visStateActions;\n\n const filterPanelProps = useMemo(() => {\n return filtersByIndex.reduce(\n (accu, {filter, idx}) => ({\n ...accu,\n [filter.id]: {\n removeFilter: () => removeFilter(idx),\n setFilterView: (_view: string) =>\n setFilterView(\n idx,\n isSideFilter(filter)\n ? FILTER_VIEW_TYPES.enlarged\n : FILTER_VIEW_TYPES.side,\n ),\n toggleAnimation: () => toggleFilterAnimation(idx),\n toggleFilterFeature: () => toggleFilterFeature(idx),\n },\n }),\n {} as FilterPanelCallbacks,\n );\n }, [\n filtersByIndex,\n removeFilter,\n setFilterView,\n toggleFilterAnimation,\n toggleFilterFeature,\n ]);\n\n return (\n <>\n {[...filtersByIndex].reverse().map(({filter, idx}) => {\n const callbacks = filterPanelProps[filter.id];\n return (\n <FilterPanel\n key={`${filter.id}-${idx}`}\n idx={idx}\n filters={filters}\n filter={filter}\n datasets={datasets}\n layers={layers}\n isAnyFilterAnimating={isAnyFilterAnimating}\n {...keplerActions.visStateActions}\n removeFilter={() => callbacks?.removeFilter?.()}\n enlargeFilter={() => callbacks?.setFilterView?.('')}\n toggleAnimation={() => callbacks?.toggleAnimation?.()}\n toggleFilterFeature={() => callbacks?.toggleFilterFeature?.()}\n />\n );\n })}\n </>\n );\n};\n\n// Custom hook for filter actions\nfunction useCustomFilterActions(keplerActions: KeplerActions) {\n const {addFilter} = keplerActions.visStateActions;\n\n const onClickAddFilter = useCallback(\n (dataset: string) => addFilter(dataset),\n [addFilter],\n );\n\n return {\n onClickAddFilter,\n };\n}\n\n// Main Custom Filter Manager Component\nexport const CustomFilterManager: React.FC<CustomFilterManagerProps> = ({\n mapId,\n}) => {\n const {keplerActions, keplerState} = useKeplerStateActions({mapId});\n const intl = useIntl();\n\n const {onClickAddFilter} = useCustomFilterActions(keplerActions);\n\n const visState = keplerState?.visState;\n const filters = useMemo(() => visState?.filters ?? [], [visState?.filters]);\n const datasets = useMemo(\n () => (visState?.datasets ?? []) as Datasets,\n [visState?.datasets],\n );\n const layers = useMemo(() => visState?.layers ?? [], [visState?.layers]);\n const filtersByIndex = useMemo(\n () =>\n filters?.map((f, idx) => ({\n filter: f,\n idx,\n })) ?? [],\n [filters],\n );\n\n if (!keplerState || !keplerActions) {\n return null;\n }\n\n const isAnyFilterAnimating = Object.values(filters).some(\n (f) => f.isAnimating,\n );\n\n return (\n <CustomFilterManagerContainer>\n <div className=\"filter-manager\">\n <SidePanelSection>\n <PanelTitle\n className=\"filter-manager-title\"\n title={intl.formatMessage({\n id: filterPanelMetadata?.label || 'Filters',\n })}\n >\n <AddFilterButton datasets={datasets} onAdd={onClickAddFilter} />\n </PanelTitle>\n </SidePanelSection>\n\n <SidePanelSection>\n <FilterList\n filtersByIndex={filtersByIndex}\n filters={filters}\n datasets={datasets}\n layers={layers}\n isAnyFilterAnimating={isAnyFilterAnimating}\n keplerActions={keplerActions}\n />\n </SidePanelSection>\n </div>\n </CustomFilterManagerContainer>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFilterPanelHeader.d.ts","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,KAAK,EAAE,MAAM,EAAW,MAAM,kBAAkB,CAAC;AAUzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,eAAO,MAAM,kBAAkB,EAAE,GAgBhC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,8BAA8B,IAAI,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"CustomFilterPanelHeader.d.ts","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,KAAK,EAAE,MAAM,EAAW,MAAM,kBAAkB,CAAC;AAUzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,eAAO,MAAM,kBAAkB,EAAE,GAgBhC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,8BAA8B,IAAI,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,CA2D5F"}
|
|
@@ -23,12 +23,12 @@ export const StyledFilterHeader = styled(StyledPanelHeader) `
|
|
|
23
23
|
export function CustomFilterPanelHeaderFactory() {
|
|
24
24
|
const FilterPanelHeader = ({ idx, children, className = '', datasets, filter, }) => {
|
|
25
25
|
const dispatchAction = useStoreWithKepler((state) => state.kepler.dispatchAction);
|
|
26
|
-
const mapId = useStoreWithKepler(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
const mapId = useStoreWithKepler((state) => Object.entries(state.kepler.map).find(([, mapState]) => Boolean(mapState?.visState?.filters?.some((f) => f.id === filter.id)))?.[0]);
|
|
27
|
+
const filterIdx = useStoreWithKepler((state) => mapId
|
|
28
|
+
? state.kepler.map[mapId]?.visState?.filters?.findIndex((f) => f.id === filter.id)
|
|
29
|
+
: undefined);
|
|
30
30
|
return (_jsxs(StyledFilterHeader, { className: cn('filter-panel__header gap-2', className), "$labelRCGColorValues": Object.values(datasets).map((d) => d.color), children: [_jsx("div", { className: "flex flex-1 overflow-hidden", children: children }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "hover:bg-foreground/10 h-8 w-8", onClick: () => {
|
|
31
|
-
if (filterIdx === undefined) {
|
|
31
|
+
if (!mapId || filterIdx === undefined) {
|
|
32
32
|
throw new Error('Filter index not found by id ${filter.id}');
|
|
33
33
|
}
|
|
34
34
|
return dispatchAction(mapId, removeFilter(filterIdx));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFilterPanelHeader.js","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAyB,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,MAAM,EACN,EAAE,EACF,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAEnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAMlD,MAAM,CAAC,MAAM,kBAAkB,GAAQ,MAAM,CAC3C,iBAAiB,CAClB,CAAyB;;;;;;;;;;IAUtB,CAAC,KAAK,EAAE,EAAE,CACV,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;IACjE,CAAC,CAAC,iBAAiB,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,oBAAoB,CAAC,KAAK;IAClF,CAAC,CAAC,4BAA4B;CACnC,CAAC;AAWF,MAAM,UAAU,8BAA8B;IAC5C,MAAM,iBAAiB,GAAqC,CAAC,EAC3D,GAAG,EACH,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,MAAM,GACiB,EAAE,EAAE;QAC3B,MAAM,cAAc,GAAG,kBAAkB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACvC,CAAC;QACF,MAAM,KAAK,GAAG,kBAAkB
|
|
1
|
+
{"version":3,"file":"CustomFilterPanelHeader.js","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import {removeFilter} from '@kepler.gl/actions';\nimport {StyledPanelHeader, StyledPanelHeaderProps} from '@kepler.gl/components';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {Field, Filter, RGBColor} from '@kepler.gl/types';\nimport {createLinearGradient} from '@kepler.gl/utils';\nimport {\n Button,\n cn,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {Trash} from 'lucide-react';\nimport React from 'react';\nimport styled from 'styled-components';\nimport {useStoreWithKepler} from '../KeplerSlice';\n\ninterface StyledFilterHeaderProps extends StyledPanelHeaderProps {\n $labelRCGColorValues: RGBColor[];\n}\n\nexport const StyledFilterHeader: any = styled(\n StyledPanelHeader,\n)<StyledFilterHeaderProps>`\n cursor: pointer;\n padding: 10px 12px;\n\n .field-selector {\n width: 100%;\n flex: 2;\n }\n\n border-left: 3px solid;\n ${(props) =>\n props.$labelRCGColorValues && props.$labelRCGColorValues.length > 0\n ? `border-image: ${createLinearGradient('bottom', props.$labelRCGColorValues)} 3;`\n : 'border-color: transparent;'};\n`;\n\nexport type FilterPanelHeaderProps = {\n className?: string;\n datasets: KeplerTable[];\n filter: Filter;\n allAvailableFields?: Field[];\n idx?: number;\n children: React.ReactNode;\n};\n\nexport function CustomFilterPanelHeaderFactory(): React.ComponentType<FilterPanelHeaderProps> {\n const FilterPanelHeader: React.FC<FilterPanelHeaderProps> = ({\n idx,\n children,\n className = '',\n datasets,\n filter,\n }: FilterPanelHeaderProps) => {\n const dispatchAction = useStoreWithKepler(\n (state) => state.kepler.dispatchAction,\n );\n const mapId = useStoreWithKepler(\n (state) =>\n Object.entries(state.kepler.map).find(([, mapState]) =>\n Boolean(\n mapState?.visState?.filters?.some(\n (f: Filter) => f.id === filter.id,\n ),\n ),\n )?.[0],\n );\n const filterIdx = useStoreWithKepler((state) =>\n mapId\n ? state.kepler.map[mapId]?.visState?.filters?.findIndex(\n (f: Filter) => f.id === filter.id,\n )\n : undefined,\n );\n return (\n <StyledFilterHeader\n className={cn('filter-panel__header gap-2', className)}\n $labelRCGColorValues={Object.values(datasets).map(\n (d: KeplerTable) => d.color,\n )}\n >\n <div className=\"flex flex-1 overflow-hidden\">{children}</div>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"hover:bg-foreground/10 h-8 w-8\"\n onClick={() => {\n if (!mapId || filterIdx === undefined) {\n throw new Error('Filter index not found by id ${filter.id}');\n }\n return dispatchAction(mapId, removeFilter(filterIdx));\n }}\n >\n <Trash className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Delete Filter</TooltipContent>\n </Tooltip>\n </StyledFilterHeader>\n );\n };\n\n return FilterPanelHeader;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomInteractionManager.d.ts","sourceRoot":"","sources":["../../src/components/CustomInteractionManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomInteractionManager.d.ts","sourceRoot":"","sources":["../../src/components/CustomInteractionManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAqGlD,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CA6E9D,CAAC"}
|
|
@@ -16,9 +16,12 @@ const TooltipPanel = ({ tooltipConfig, coordinateConfig, datasets, isDark, handl
|
|
|
16
16
|
const handleTooltipConfigChange = useCallback((newConfig) => {
|
|
17
17
|
handleConfigChange('tooltip', { config: newConfig });
|
|
18
18
|
}, [handleConfigChange]);
|
|
19
|
+
const handleDisplayFormatChange = useCallback((dataId, column, displayFormat) => {
|
|
20
|
+
setColumnDisplayFormat(dataId, { [column]: displayFormat });
|
|
21
|
+
}, [setColumnDisplayFormat]);
|
|
19
22
|
if (!tooltipConfig)
|
|
20
23
|
return null;
|
|
21
|
-
return (_jsxs("div", { children: [_jsx(SimpleInteractionPanel, { configId: "tooltip", config: tooltipConfig, label: "Tooltip", onConfigChange: handleConfigChange }), tooltipConfig.enabled && (_jsxs("div", { className: "pr-2 pl-4", children: [_jsxs("div", { className: "flex items-center space-x-2 py-2", children: [_jsx(Checkbox, { checked: coordinateConfig?.enabled || false, onCheckedChange: handleCoordinateToggle, className: "shadow-none" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: ["Show ", _jsx(FormattedMessage, { id: "interactions.coordinate" })] })] }), _jsx(CustomTooltipConfig, { datasets: datasets, config: tooltipConfig.config, onChange: handleTooltipConfigChange, onDisplayFormatChange:
|
|
24
|
+
return (_jsxs("div", { children: [_jsx(SimpleInteractionPanel, { configId: "tooltip", config: tooltipConfig, label: "Tooltip", onConfigChange: handleConfigChange }), tooltipConfig.enabled && (_jsxs("div", { className: "pr-2 pl-4", children: [_jsxs("div", { className: "flex items-center space-x-2 py-2", children: [_jsx(Checkbox, { checked: coordinateConfig?.enabled || false, onCheckedChange: handleCoordinateToggle, className: "shadow-none" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: ["Show ", _jsx(FormattedMessage, { id: "interactions.coordinate" })] })] }), _jsx(CustomTooltipConfig, { datasets: datasets, config: tooltipConfig.config, onChange: handleTooltipConfigChange, onDisplayFormatChange: handleDisplayFormatChange, isDark: isDark })] }))] }));
|
|
22
25
|
};
|
|
23
26
|
export const CustomInteractionManager = ({ mapId, }) => {
|
|
24
27
|
const { keplerActions, keplerState } = useKeplerStateActions({ mapId });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomInteractionManager.js","sourceRoot":"","sources":["../../src/components/CustomInteractionManager.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,WAAW,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAClD,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAC,MAAM,cAAc,CAAC;AAGxD,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAC,qBAAqB,EAAC,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAE1D,MAAM,sBAAsB,GAKvB,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAC,EAAE,EAAE;IACjD,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,cAAc,CAAC,QAAQ,EAAE;YACvB,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAE/C,OAAO,CACL,eAAK,SAAS,EAAC,uCAAuC,aACpD,cAAK,SAAS,EAAC,2CAA2C,YAAE,KAAK,GAAO,EACxE,KAAC,MAAM,IACL,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,eAAe,EAAE,kBAAkB,EACnC,SAAS,EAAC,qEAAqE,GAC/E,IACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"CustomInteractionManager.js","sourceRoot":"","sources":["../../src/components/CustomInteractionManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {useCallback, useMemo} from 'react';\nimport {Switch, Checkbox, useTheme} from '@sqlrooms/ui';\n\nimport {InteractionConfig} from '@kepler.gl/types';\nimport {FormattedMessage} from '@kepler.gl/localization';\n\nimport {useKeplerStateActions} from '../hooks/useKeplerStateActions';\nimport {CustomTooltipConfig} from './CustomTooltipConfig';\n\nconst SimpleInteractionPanel: React.FC<{\n configId: string;\n config: any;\n label: string;\n onConfigChange: (configId: string, newConfig: any) => void;\n}> = ({configId, config, label, onConfigChange}) => {\n const toggleEnableConfig = useCallback(() => {\n onConfigChange(configId, {\n enabled: !config.enabled,\n });\n }, [configId, config.enabled, onConfigChange]);\n\n return (\n <div className=\"flex items-center justify-between p-2\">\n <div className=\"text-muted-foreground text-sm font-medium\">{label}</div>\n <Switch\n checked={config.enabled}\n onCheckedChange={toggleEnableConfig}\n className=\"data-[state=checked]:bg-primary data-[state=unchecked]:bg-secondary\"\n />\n </div>\n );\n};\n\nconst TooltipPanel: React.FC<{\n tooltipConfig: any;\n coordinateConfig: any;\n datasets: any;\n isDark: boolean;\n handleConfigChange: (configId: string, newConfig: any) => void;\n handleCoordinateToggle: () => void;\n setColumnDisplayFormat: (\n dataId: string,\n formats: {[key: string]: string},\n ) => void;\n}> = ({\n tooltipConfig,\n coordinateConfig,\n datasets,\n isDark,\n handleConfigChange,\n handleCoordinateToggle,\n setColumnDisplayFormat,\n}) => {\n const handleTooltipConfigChange = useCallback(\n (newConfig: any) => {\n handleConfigChange('tooltip', {config: newConfig});\n },\n [handleConfigChange],\n );\n\n const handleDisplayFormatChange = useCallback(\n (dataId: string, column: string, displayFormat: string) => {\n setColumnDisplayFormat(dataId, {[column]: displayFormat});\n },\n [setColumnDisplayFormat],\n );\n\n if (!tooltipConfig) return null;\n return (\n <div>\n <SimpleInteractionPanel\n configId=\"tooltip\"\n config={tooltipConfig}\n label=\"Tooltip\"\n onConfigChange={handleConfigChange}\n />\n {tooltipConfig.enabled && (\n <div className=\"pr-2 pl-4\">\n <div className=\"flex items-center space-x-2 py-2\">\n <Checkbox\n checked={coordinateConfig?.enabled || false}\n onCheckedChange={handleCoordinateToggle}\n className=\"shadow-none\"\n />\n <span className=\"text-muted-foreground text-xs\">\n Show <FormattedMessage id=\"interactions.coordinate\" />\n </span>\n </div>\n <CustomTooltipConfig\n datasets={datasets}\n config={tooltipConfig.config}\n onChange={handleTooltipConfigChange}\n onDisplayFormatChange={handleDisplayFormatChange}\n isDark={isDark}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport const CustomInteractionManager: React.FC<{mapId: string}> = ({\n mapId,\n}) => {\n const {keplerActions, keplerState} = useKeplerStateActions({mapId});\n const {theme} = useTheme();\n\n // Determine if dark mode is active\n const isDark =\n theme === 'dark' ||\n (theme === 'system' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n\n const rawInteractionConfig = keplerState?.visState.interactionConfig;\n const interactionConfig = useMemo<Partial<InteractionConfig>>(\n () => rawInteractionConfig ?? {},\n [rawInteractionConfig],\n );\n const datasets = keplerState?.visState.datasets || {};\n const {interactionConfigChange, setColumnDisplayFormat} =\n keplerActions.visStateActions;\n\n const handleConfigChange = useCallback(\n (configId: string, newConfig: any) => {\n const currentConfig =\n interactionConfig[configId as keyof InteractionConfig];\n if (currentConfig && typeof currentConfig === 'object') {\n interactionConfigChange({\n ...currentConfig,\n ...newConfig,\n });\n }\n },\n [interactionConfig, interactionConfigChange],\n );\n\n // Handle coordinate display toggle\n const handleCoordinateToggle = useCallback(() => {\n const coordinateConfig = interactionConfig.coordinate;\n if (coordinateConfig && typeof coordinateConfig === 'object') {\n interactionConfigChange({\n ...coordinateConfig,\n enabled: !coordinateConfig.enabled,\n });\n }\n }, [interactionConfig.coordinate, interactionConfigChange]);\n\n return (\n <div className=\"interaction-manager\">\n <div className=\"space-y-2\">\n <TooltipPanel\n tooltipConfig={interactionConfig.tooltip}\n coordinateConfig={interactionConfig.coordinate}\n datasets={datasets}\n isDark={isDark}\n handleConfigChange={handleConfigChange}\n handleCoordinateToggle={handleCoordinateToggle}\n setColumnDisplayFormat={setColumnDisplayFormat}\n />\n {interactionConfig.geocoder && (\n <SimpleInteractionPanel\n configId=\"geocoder\"\n config={interactionConfig.geocoder}\n label=\"Location search\"\n onConfigChange={handleConfigChange}\n />\n )}\n {interactionConfig.brush && (\n <SimpleInteractionPanel\n configId=\"brush\"\n config={interactionConfig.brush}\n label=\"Brush filter\"\n onConfigChange={handleConfigChange}\n />\n )}\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomLayerManager.d.ts","sourceRoot":"","sources":["../../src/components/CustomLayerManager.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"CustomLayerManager.d.ts","sourceRoot":"","sources":["../../src/components/CustomLayerManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAwPpE,KAAK,uBAAuB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AA6BF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA6GhE,CAAC"}
|