import { Field } from 'utils/table-utils/kepler-table'; import { VisStateMergers } from './vis-state-merger'; import { Layer, LayerClassesType } from 'layers'; import KeplerGLSchema from 'schemas'; import { Millisecond } from './types'; import { ReceiveMapConfigPayload } from '../actions/actions'; import * as VisStateActions from 'actions/vis-state-actions'; import * as MapStateActions from 'actions/map-state-actions'; import ActionTypes from 'constants/action-types'; import { LoaderObject } from '@loaders.gl/loader-utils'; import { KeplerTable } from '../utils'; export type HistogramBin = { x0: number | undefined; x1: number | undefined; count: number; }; export type RangeFieldDomain = { domain: [number, number]; step: number; histogram: HistogramBin[]; enlargedHistogram: HistogramBin[]; }; export type SelectFieldDomain = { domain: [true, false]; }; export type MultiSelectFieldDomain = { domain: string[]; }; export type TimeRangeFieldDomain = { domain: [number, number]; step: number; histogram: HistogramBin[]; enlargedHistogram: HistogramBin[]; mappedValue: (Millisecond | null)[]; defaultTimeFormat?: string | null; timeFormat?: string | null; timezone?: string | null; }; export type FieldDomain = RangeFieldDomain | TimeRangeFieldDomain | SelectFieldDomain | MultiSelectFieldDomain; export type LineChart = { series: { x: number; y: number; }[]; yDomain: [number, number]; xDomain: [number, number]; }; export type FilterBase = { dataId: string[]; id: string; freeze: boolean; fixedDomain: boolean; enlarged: boolean; isAnimating: boolean; speed: number; showTimeDisplay?: boolean; name: string[]; type: string | null; fieldIdx: number[]; domain: any[] | null; value: any; mappedValue?: number[]; yAxis: Field | null; plotType: string; lineChart?: LineChart; gpu: boolean; gpuChannel?: number[]; fieldType?: string; layerId?: string[]; }; export type RangeFilter = FilterBase & RangeFieldDomain & { type: 'range'; fieldType: 'real' | 'integer'; value: [number, number]; fixedDomain: true; typeOptions: ['range']; }; export type SelectFilter = FilterBase & SelectFieldDomain & { type: 'select'; fieldType: 'boolean'; value: boolean; }; export type MultiSelectFilter = FilterBase & MultiSelectFieldDomain & { type: 'range'; fieldType: 'string' | 'date'; value: string[]; }; export type TimeRangeFilter = FilterBase & TimeRangeFieldDomain & { type: 'timeRange'; fieldType: 'timestamp'; fixedDomain: true; value: [number, number]; bins?: Object; plotType: { [key: string]: any; }; animationWindow: string; }; export type PolygonFilter = FilterBase & { layerId: string[]; type: 'polygon'; fixedDomain: true; value: Feature; }; export type Filter = FilterBase | RangeFilter | TimeRangeFilter | SelectFilter | MultiSelectFilter | PolygonFilter; export type Datasets = { [key: string]: KeplerTable; }; export type Feature = { id: string; properties: any; geometry: { type: string; coordinates: any; }; }; export type FeatureValue = { id: string; properties: { filterId: string; }; geometry: { type: string; coordinates: any; }; }; export type Editor = { mode: string; features: Feature[]; selectedFeature: any; visible: boolean; }; export type SplitMapLayers = { [key: string]: boolean; }; export type SplitMap = { layers: SplitMapLayers; }; export type AnimationConfig = { domain: number[] | null; currentTime: number | null; speed: number; isAnimating?: boolean; defaultTimeFormat?: string | null; timeFormat?: string | null; timezone?: string | null; hideControl?: boolean; }; export type BaseInteraction = { id: string; label: string; enabled: boolean; iconComponent: any; }; export type TooltipField = { name: string; format: string | null; }; export type CompareType = string | null; export type TooltipInfo = BaseInteraction & { config: { fieldsToShow: { [key: string]: TooltipField[]; }; compareMode: boolean; compareType: CompareType; }; }; export type Geocoder = BaseInteraction & { position: number[] | null; }; export type Brush = BaseInteraction & { config: { size: number; }; }; export type Coordinate = BaseInteraction & { position: number[] | null; }; export type InteractionConfig = { tooltip: TooltipInfo; geocoder: Geocoder; brush: Brush; coordinate: Coordinate; }; export type MapInfo = { title: string; description: string; }; export type FileLoading = { filesToLoad: FileList; onFinish: (payload: any) => any; fileCache: any[]; }; export type FileLoadingProgress = { [key: string]: { percent: number; message: string; fileName: string; error: any; }; }; export type VisState = { mapInfo: MapInfo; layers: Layer[]; layerData: any[]; layerToBeMerged: any[]; layerOrder: number[]; filters: Filter[]; filterToBeMerged: any[]; datasets: Datasets; editingDataset: string | undefined; interactionConfig: InteractionConfig; interactionToBeMerged: any; layerBlending: string; hoverInfo: any; clicked: any; mousePos: any; maxDefaultTooltips: number; layerClasses: LayerClassesType; animationConfig: AnimationConfig; editor: Editor; splitMaps: SplitMap[]; splitMapsToBeMerged: SplitMap[]; fileLoading: FileLoading | false; fileLoadingProgress: FileLoadingProgress; loaders: LoaderObject[]; loadOptions: object; initialState?: Partial; mergers: VisStateMergers; schema: typeof KeplerGLSchema; preserveLayerOrder?: number[]; }; export declare const DEFAULT_ANIMATION_CONFIG: AnimationConfig; export declare const DEFAULT_EDITOR: Editor; /** * Default initial `visState` * @memberof visStateUpdaters * @constant * @public */ export declare const INITIAL_VIS_STATE: VisState; /** * Update state with updated layer and layerData * */ export declare function updateStateWithLayerAndData(state: VisState, { layerData, layer, idx }: { layerData?: any; layer: Layer; idx: number; }): VisState; export declare function updateStateOnLayerVisibilityChange(state: VisState, layer: Layer): VisState; /** * Update layer base config: dataId, label, column, isVisible * @memberof visStateUpdaters * @returns nextState */ export declare function layerConfigChangeUpdater(state: VisState, action: VisStateActions.LayerConfigChangeUpdaterAction): VisState; /** * Update layer base config: dataId, label, column, isVisible * @memberof visStateUpdaters * @returns nextState */ export declare function layerTextLabelChangeUpdater(state: VisState, action: VisStateActions.LayerTextLabelChangeUpdaterAction): VisState; /** * Update layer config dataId * @memberof visStateUpdaters * @returns nextState */ export declare function layerDataIdChangeUpdater(state: VisState, action: { oldLayer: Layer; newConfig: { dataId: string; }; }): VisState; /** * Update layer type. Previews layer config will be copied if applicable. * @memberof visStateUpdaters * @public */ export declare function layerTypeChangeUpdater(state: VisState, action: VisStateActions.LayerTypeChangeUpdaterAction): VisState; /** * Update layer visual channel * @memberof visStateUpdaters * @returns {Object} nextState * @public */ export declare function layerVisualChannelChangeUpdater(state: VisState, action: VisStateActions.LayerVisualChannelConfigChangeUpdaterAction): VisState; /** * Update layer `visConfig` * @memberof visStateUpdaters * @public */ export declare function layerVisConfigChangeUpdater(state: VisState, action: VisStateActions.LayerVisConfigChangeUpdaterAction): VisState; /** * Update filter property * @memberof visStateUpdaters * @public */ export declare function setFilterAnimationTimeUpdater(state: VisState, action: VisStateActions.SetFilterAnimationTimeUpdaterAction): VisState; /** * Update filter animation window * @memberof visStateUpdaters * @public */ export declare function setFilterAnimationWindowUpdater(state: VisState, { id, animationWindow }: VisStateActions.SetFilterAnimationWindowUpdaterAction): VisState; /** * Update filter property * @memberof visStateUpdaters * @public */ export declare function setFilterUpdater(state: VisState, action: VisStateActions.SetFilterUpdaterAction): VisState; /** * Set the property of a filter plot * @memberof visStateUpdaters * @public */ export declare const setFilterPlotUpdater: (state: VisState, { idx, newProp, valueIndex }: VisStateActions.SetFilterPlotUpdaterAction) => VisState; /** * Add a new filter * @memberof visStateUpdaters * @public */ export declare const addFilterUpdater: (state: VisState, action: VisStateActions.AddFilterUpdaterAction) => VisState; /** * Set layer color palette ui state * @memberof visStateUpdaters */ export declare const layerColorUIChangeUpdater: (state: VisState, { oldLayer, prop, newConfig }: VisStateActions.LayerColorUIChangeUpdaterAction) => VisState; /** * Start and end filter animation * @memberof visStateUpdaters * @public */ export declare const toggleFilterAnimationUpdater: (state: VisState, action: VisStateActions.ToggleFilterAnimationUpdaterAction) => VisState; /** * @memberof visStateUpdaters * @public */ export declare const toggleLayerAnimationUpdater: (state: VisState, action: VisStateActions.ToggleLayerAnimationUpdaterAction) => VisState; /** * Hide and show layer animation control * @memberof visStateUpdaters * @public */ export declare const toggleLayerAnimationControlUpdater: (state: VisState, action: VisStateActions.ToggleLayerAnimationControlUpdaterAction) => VisState; /** * Change filter animation speed * @memberof visStateUpdaters * @public */ export declare const updateFilterAnimationSpeedUpdater: (state: VisState, action: VisStateActions.UpdateFilterAnimationSpeedUpdaterAction) => VisState; /** * Reset animation config current time to a specified value * @memberof visStateUpdaters * @public * */ export declare const setLayerAnimationTimeUpdater: (state: VisState, { value }: VisStateActions.SetLayerAnimationTimeUpdaterAction) => VisState; /** * Update animation speed with the vertical speed slider * @memberof visStateUpdaters * @public * */ export declare const updateLayerAnimationSpeedUpdater: (state: VisState, { speed }: VisStateActions.UpdateLayerAnimationSpeedUpdaterAction) => VisState; /** * Show larger time filter at bottom for time playback (apply to time filter only) * @memberof visStateUpdaters * @public */ export declare const enlargeFilterUpdater: (state: VisState, action: VisStateActions.EnlargeFilterUpdaterAction) => VisState; /** * Toggles filter feature visibility * @memberof visStateUpdaters */ export declare const toggleFilterFeatureUpdater: (state: VisState, action: VisStateActions.ToggleFilterFeatureUpdaterAction) => VisState; /** * Remove a filter * @memberof visStateUpdaters * @public */ export declare const removeFilterUpdater: (state: VisState, action: VisStateActions.RemoveFilterUpdaterAction) => VisState; /** * Add a new layer * @memberof visStateUpdaters * @public */ export declare const addLayerUpdater: (state: VisState, action: VisStateActions.AddLayerUpdaterAction) => VisState; /** * remove layer * @memberof visStateUpdaters * @public */ export declare const removeLayerUpdater: (state: VisState, { idx }: VisStateActions.RemoveLayerUpdaterAction) => VisState; /** * duplicate layer * @memberof visStateUpdaters * @public */ export declare const duplicateLayerUpdater: (state: VisState, { idx }: VisStateActions.DuplicateLayerUpdaterAction) => VisState; /** * Reorder layer * @memberof visStateUpdaters * @public */ export declare const reorderLayerUpdater: (state: VisState, { order }: VisStateActions.ReorderLayerUpdaterAction) => VisState; /** * Remove a dataset and all layers, filters, tooltip configs that based on it * @memberof visStateUpdaters * @public */ export declare const removeDatasetUpdater: (state: VisState, action: VisStateActions.RemoveDatasetUpdaterAction) => VisState; /** * update layer blending mode * @memberof visStateUpdaters * @public */ export declare const updateLayerBlendingUpdater: (state: VisState, action: VisStateActions.UpdateLayerBlendingUpdaterAction) => VisState; /** * Display dataset table in a modal * @memberof visStateUpdaters * @public */ export declare const showDatasetTableUpdater: (state: VisState, action: VisStateActions.ShowDatasetTableUpdaterAction) => VisState; /** * Add custom color for datasets and layers * @memberof visStateUpdaters * @public */ export declare const updateTableColorUpdater: (state: VisState, action: VisStateActions.UpdateDatasetColorUpdater) => VisState; /** * reset visState to initial State * @memberof visStateUpdaters * @public */ export declare const resetMapConfigUpdater: (state: VisState) => VisState; /** * Propagate `visState` reducer with a new configuration. Current config will be override. * @memberof visStateUpdaters * @public */ export declare const receiveMapConfigUpdater: (state: VisState, { payload: { config, options } }: { type?: typeof ActionTypes.RECEIVE_MAP_CONFIG; payload: ReceiveMapConfigPayload; }) => VisState; /** * Trigger layer hover event with hovered object * @memberof visStateUpdaters * @public */ export declare const layerHoverUpdater: (state: VisState, action: VisStateActions.OnLayerHoverUpdaterAction) => VisState; /** * Update `interactionConfig` * @memberof visStateUpdaters * @public */ export declare function interactionConfigChangeUpdater(state: VisState, action: VisStateActions.InteractionConfigChangeUpdaterAction): VisState; /** * Trigger layer click event with clicked object * @memberof visStateUpdaters * @public */ export declare const layerClickUpdater: (state: VisState, action: VisStateActions.OnLayerClickUpdaterAction) => VisState; /** * Trigger map click event, unselect clicked object * @memberof visStateUpdaters * @public */ export declare const mapClickUpdater: (state: VisState, action: VisStateActions.OnMapClickUpdaterAction) => VisState; /** * Trigger map move event * @memberof visStateUpdaters * @public */ export declare const mouseMoveUpdater: (state: VisState, { evt }: VisStateActions.OnMouseMoveUpdaterAction) => VisState; /** * Toggle visibility of a layer for a split map * @memberof visStateUpdaters * @public */ export declare const toggleSplitMapUpdater: (state: VisState, action: MapStateActions.ToggleSplitMapUpdaterAction) => VisState; /** * Toggle visibility of a layer in a split map * @memberof visStateUpdaters * @public */ export declare const toggleLayerForMapUpdater: (state: VisState, { mapIndex, layerId }: VisStateActions.ToggleLayerForMapUpdaterAction) => VisState; /** * Add new dataset to `visState`, with option to load a map config along with the datasets * @memberof visStateUpdaters * @public */ export declare const updateVisDataUpdater: (state: VisState, action: VisStateActions.UpdateVisDataUpdaterAction) => VisState; /** * Rename an existing dataset in `visState` * @memberof visStateUpdaters * @public */ export declare function renameDatasetUpdater(state: VisState, action: VisStateActions.RenameDatasetUpdaterAction): VisState; /** * When a user clicks on the specific map closing icon * the application will close the selected map * and will merge the remaining one with the global state * TODO: i think in the future this action should be called merge map layers with global settings * @param {Object} state `visState` * @param {Object} action action * @returns {Object} nextState */ export declare function closeSpecificMapAtIndex(state: VisState, action: MapStateActions.ToggleSplitMapUpdaterAction): VisState; /** * Trigger file loading dispatch `addDataToMap` if succeed, or `loadFilesErr` if failed * @memberof visStateUpdaters * @public */ export declare const loadFilesUpdater: (state: VisState, action: VisStateActions.LoadFilesUpdaterAction) => VisState; /** * Sucessfully loaded one file, move on to the next one * @memberof visStateUpdaters * @public */ export declare function loadFileStepSuccessUpdater(state: VisState, action: VisStateActions.LoadFileStepSuccessAction): VisState; /** * * @memberof visStateUpdaters * @public */ export declare function loadNextFileUpdater(state: VisState): VisState; export declare function makeLoadFileTask(file: any, fileCache: any, loaders?: LoaderObject[], loadOptions?: {}): any; /** * * @memberof visStateUpdaters * @public */ export declare function processFileContentUpdater(state: VisState, action: VisStateActions.ProcessFileContentUpdaterAction): VisState; export declare function parseProgress(prevProgress: {}, progress: any): { percent?: undefined; } | { percent: any; }; /** * gets called with payload = AsyncGenerator * @memberof visStateUpdaters * @public */ export declare const nextFileBatchUpdater: (state: VisState, { payload: { gen, fileName, progress, accumulated, onFinish } }: VisStateActions.NextFileBatchUpdaterAction) => VisState; /** * Trigger loading file error * @memberof visStateUpdaters * @public */ export declare const loadFilesErrUpdater: (state: VisState, { error, fileName }: VisStateActions.LoadFilesErrUpdaterAction) => VisState; /** * When select dataset for export, apply cpu filter to selected dataset * @memberof visStateUpdaters * @public */ export declare const applyCPUFilterUpdater: (state: VisState, { dataId }: VisStateActions.ApplyCPUFilterUpdaterAction) => VisState; /** * User input to update the info of the map * @memberof visStateUpdaters * @public */ export declare const setMapInfoUpdater: (state: VisState, action: VisStateActions.SetMapInfoUpdaterAction) => VisState; /** * Helper function to update All layer domain and layer data of state */ export declare function addDefaultLayers(state: VisState, datasets: Datasets): { state: VisState; newLayers: Layer[]; }; /** * helper function to find default tooltips * @param {Object} state * @param {Object} dataset * @returns {Object} nextState */ export declare function addDefaultTooltips(state: any, dataset: any): any; export declare function initialFileLoadingProgress(file: any, index: any): { [x: number]: { percent: number; message: string; fileName: any; error: any; }; }; export declare function updateFileLoadingProgressUpdater(state: any, { fileName, progress }: { fileName: any; progress: any; }): any; /** * Helper function to update layer domains for an array of datasets */ export declare function updateAllLayerDomainData(state: VisState, dataId: string | string[], updatedFilter?: Filter): VisState; export declare function updateAnimationDomain(state: VisState): VisState; /** * Update the status of the editor * @memberof visStateUpdaters */ export declare const setEditorModeUpdater: (state: VisState, { mode }: VisStateActions.SetEditorModeUpdaterAction) => VisState; /** * Update editor features * @memberof visStateUpdaters */ export declare function setFeaturesUpdater(state: VisState, { features }: VisStateActions.SetFeaturesUpdaterAction): VisState; /** * Set the current selected feature * @memberof uiStateUpdaters */ export declare const setSelectedFeatureUpdater: (state: VisState, { feature }: VisStateActions.SetSelectedFeatureUpdaterAction) => VisState; /** * Delete existing feature from filters * @memberof visStateUpdaters */ export declare function deleteFeatureUpdater(state: VisState, { feature }: VisStateActions.DeleteFeatureUpdaterAction): VisState; /** * Toggle feature as layer filter * @memberof visStateUpdaters */ export declare function setPolygonFilterLayerUpdater(state: VisState, payload: VisStateActions.SetPolygonFilterLayerUpdaterAction): VisState; /** * @memberof visStateUpdaters * @public */ export declare function sortTableColumnUpdater(state: VisState, { dataId, column, mode }: VisStateActions.SortTableColumnUpdaterAction): VisState; /** * @memberof visStateUpdaters * @public */ export declare function pinTableColumnUpdater(state: VisState, { dataId, column }: VisStateActions.PinTableColumnUpdaterAction): VisState; /** * Copy column content as strings * @memberof visStateUpdaters * @public */ export declare function copyTableColumnUpdater(state: VisState, { dataId, column }: VisStateActions.CopyTableColumnUpdaterAction): VisState; /** * Update editor */ export declare function toggleEditorVisibilityUpdater(state: VisState, action: VisStateActions.ToggleEditorVisibilityUpdaterAction): VisState; export declare function setFilterAnimationTimeConfigUpdater(state: VisState, { idx, config }: VisStateActions.SetFilterAnimationTimeConfigAction): VisState; /** * Update editor */ export declare function setLayerAnimationTimeConfigUpdater(state: VisState, { config }: VisStateActions.SetLayerAnimationTimeConfigAction): VisState;