@opengeoweb/store 11.0.0 → 12.0.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/store",
3
- "version": "11.0.0",
3
+ "version": "12.0.0",
4
4
  "description": "GeoWeb Store library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -8,20 +8,39 @@
8
8
  "url": "git@gitlab.com:opengeoweb/opengeoweb.git"
9
9
  },
10
10
  "dependencies": {
11
- "@opengeoweb/shared": "*",
12
- "react-redux": "^8.1.3",
11
+ "@emotion/react": "11.14.0",
12
+ "@emotion/styled": "11.14.0",
13
+ "@mui/material": "6.4.1",
14
+ "@mui/system": "6.4.6",
15
+ "@mui/x-date-pickers": "7.27.1",
13
16
  "@reduxjs/toolkit": "^1.9.7",
14
- "@opengeoweb/webmap-react": "*",
15
- "@opengeoweb/webmap": "*",
17
+ "@sentry/react": "8.54.0",
18
+ "@storybook/core-events": "8.4.2",
19
+ "@storybook/preview-api": "8.4.2",
20
+ "@storybook/react": "8.4.2",
21
+ "@tanstack/query-core": "5.67.1",
22
+ "@tanstack/react-query": "5.67.1",
23
+ "@testing-library/react": "16.0.1",
24
+ "@testing-library/user-event": "14.5.2",
25
+ "@turf/turf": "^7.2.0",
26
+ "axios": "1.8.1",
27
+ "date-fns": "4.1.0",
28
+ "dompurify": "3.2.4",
29
+ "i18next": "23.11.5",
16
30
  "immer": "^10.0.3",
31
+ "jest-canvas-mock": "2.5.2",
32
+ "jest-date-mock": "1.0.10",
17
33
  "lodash": "^4.17.21",
18
- "@opengeoweb/metronome": "*",
19
- "@opengeoweb/timeslider": "*",
20
- "react-router-dom": "^6.23.1",
21
- "@turf/turf": "^7.2.0"
22
- },
23
- "peerDependencies": {
24
- "react": "18"
34
+ "msw": "2.7.3",
35
+ "ol": "^10.4.0",
36
+ "proj4": "2.15.0",
37
+ "re-resizable": "6.11.2",
38
+ "react": "18.3.1",
39
+ "react-draggable": "4.4.6",
40
+ "react-i18next": "15.1.1",
41
+ "react-redux": "^8.1.3",
42
+ "react-resize-detector": "9.1.1",
43
+ "react-router-dom": "^6.23.1"
25
44
  },
26
45
  "module": "./index.esm.js",
27
46
  "type": "module",
@@ -3,11 +3,13 @@ export * from './ui';
3
3
  export * from './generic';
4
4
  export { genericListener } from './generic/listener';
5
5
  export { mapListener } from './map/map/listener';
6
+ export { openlayersListener } from './mapStore/openlayers/listener';
6
7
  export { serviceListener } from './map/service/listener';
7
8
  export { routerListener } from './router/listener';
8
9
  export { drawingToolListener } from './drawingTool/listener';
9
10
  export { layersListener } from './map/layer/listeners';
10
11
  export { metronomeListener } from './map/map/metronomeListener';
12
+ export { unifyReducerMaps, type ReducerMap } from './unifyReducerMaps';
11
13
  export * from './router';
12
14
  export * from './drawingTool';
13
15
  export * from './types';
@@ -1,5 +1,5 @@
1
1
  export * from './service';
2
2
  export * from './map';
3
3
  export * from './layer';
4
- export type { WebMapStateModuleState, MapPreset, MapPresetInitialProps, } from './types';
4
+ export type { WebMapStateModuleState, MapPreset, MapPresetInitialProps, TimeSliderStartCenterEndTime, } from './types';
5
5
  export * as storeTestSettings from './storeTestSettings';
@@ -0,0 +1,46 @@
1
+ import { Dispatch, ListenerEffectAPI } from '@reduxjs/toolkit';
2
+ import { ReduxLayer } from '../types';
3
+ import { CoreAppStore } from '../../types';
4
+ /**
5
+ * Returns the next step for given timerId.
6
+ * @param timerId The timer id
7
+ * @param numberOfStepsInAnimation Animation length in steps
8
+ * @param numStepsToGoForward Amount of steps to go forwards, defaults to 1. Can be positive and negative
9
+ * @returns
10
+ */
11
+ export declare const getNextStep: (timerId: string, numberOfStepsInAnimation: number, numStepsToGoForward?: number) => number;
12
+ /**
13
+ * Handles dwell at the end of the animation loop sequence. The number of steps to wait till proceed can be set by the dwell parameter.
14
+ * @param timerId The timer id
15
+ * @param numberOfStepsInAnimation Number of steps in the animation
16
+ * @param dwell The number of steps to wait at the end of the animation sequence before to continue
17
+ * @returns
18
+ */
19
+ export declare const handleTimerDwell: (timerId: string, numberOfStepsInAnimation: number, dwell?: number) => boolean;
20
+ /**
21
+ * Set step for the timerId
22
+ * @param timerId
23
+ * @param timerStep
24
+ */
25
+ export declare const setStep: (timerId: string, timerStep: number) => void;
26
+ /**
27
+ * Gets the current step for the timer
28
+ * @param timerId
29
+ * @returns
30
+ */
31
+ export declare const getCurrentStep: (timerId: string) => number;
32
+ /**
33
+ * Checks if the next step is available for all provided layers
34
+ * @param reduxLayers
35
+ * @param nextTimeString
36
+ * @returns
37
+ */
38
+ export declare const isNextStepAvailable: (reduxLayers: ReduxLayer[], nextTimeString: string) => boolean;
39
+ /**
40
+ * This handler is triggered by the metronome. An array of timerIds is given as argument.
41
+ * It will update the animation loop of multiple maps and sliders
42
+ * It will prefetch images for maps
43
+ * @param timerIds string[] array of timerIds
44
+ * @param listenerApi ListenerEffectAPI<CoreAppStore, Dispatch, unknown> listenerApi as received from listener
45
+ */
46
+ export declare const olMetronomeHandler: (timerIds: string[], listenerApi: ListenerEffectAPI<CoreAppStore, Dispatch, unknown>) => void;
@@ -1,6 +1,6 @@
1
1
  import type { Bbox, MapPreset, WebMap, WebMapState } from './types';
2
2
  import type { CoreAppStore } from '../../types';
3
- import type { Dimension, Layer, ReduxLayer, WebMapAnimationList } from '../types';
3
+ import type { Dimension, Layer, ReduxLayer, TimeSliderStartCenterEndTime, WebMapAnimationList } from '../types';
4
4
  import type { uiTypes } from '../../ui';
5
5
  /**
6
6
  * Gets the map state by mapId
@@ -429,6 +429,11 @@ export declare const getMapTimeSliderCenterTime: ((state: CoreAppStore, mapId: s
429
429
  }> & {
430
430
  clearCache: () => void;
431
431
  };
432
+ export declare const getMapTimeSliderStartCenterEndAndStep: ((state: CoreAppStore, mapId: string) => TimeSliderStartCenterEndTime) & import("reselect").OutputSelectorFields<(args_0: WebMap | undefined) => TimeSliderStartCenterEndTime, {
433
+ clearCache: () => void;
434
+ }> & {
435
+ clearCache: () => void;
436
+ };
432
437
  /**
433
438
  * Returns the number of seconds per pixel on the time slider
434
439
  *
@@ -241,3 +241,9 @@ export interface ISO8601Interval {
241
241
  export interface SetDefaultMapSettingsPayload {
242
242
  preset: MapPreset;
243
243
  }
244
+ export interface TimeSliderStartCenterEndTime {
245
+ start: number;
246
+ center: number;
247
+ end: number;
248
+ step: number;
249
+ }
@@ -0,0 +1,2 @@
1
+ import { WebMapStateModuleState } from '../../map/types';
2
+ export declare const openlayersListener: import("@reduxjs/toolkit").ListenerMiddlewareInstance<WebMapStateModuleState, import("@reduxjs/toolkit").ThunkDispatch<WebMapStateModuleState, unknown, import("redux").AnyAction>, unknown>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,26 @@
1
+ import { Observable, View } from 'ol';
2
+ export declare const copyView: (view: View) => View;
3
+ /**
4
+ * The StoredView objects keep references to OpenLayers View objects that may be shared
5
+ * between multiple maps (when maps are pan/zoom synced).
6
+ * This file then offers and API for each map to retrieve the StoredView object
7
+ * that is relevant for the current workspace configuration.
8
+ *
9
+ * React is functional, but OpenLayers is object oriented.
10
+ * This component sits in between the two and thus you can make an argument for either style.
11
+ * Object oriented was chosen since:
12
+ * - This allows us to use OpenLayers's Observable as a base class to provide event handling,
13
+ * which is useful for the implementation.
14
+ * - For this mechanism to work smoothly with OpenLayers,
15
+ * we need to pass the exact same View object reference for all maps that are synchronized. Redux stores cannot be used in this context and prop drilling and/or context providers would likely lead to more invasive implementations.
16
+ */
17
+ export declare class StoredView extends Observable {
18
+ name: string;
19
+ view: View;
20
+ constructor(name: string, view: View);
21
+ setView(view: View): void;
22
+ }
23
+ export declare const clearSyncGroupViewStore: () => void;
24
+ export declare const getViewObjectForMapId: (id: string) => StoredView;
25
+ export declare const createViewObjectForNewMap: (createFromId: string, newId: string) => void;
26
+ export declare const getViewObjectForSyncGroup: (id: string) => StoredView;
@@ -1,9 +1,12 @@
1
+ import { DevToolsEnhancerOptions, EnhancerArray, ListenerMiddleware, StoreEnhancer } from '@reduxjs/toolkit';
1
2
  import { ToolkitStore } from '@reduxjs/toolkit/dist/configureStore';
3
+ import { ExtractDispatchExtensions } from '@reduxjs/toolkit/dist/tsHelpers';
2
4
  import { WebMapStateModuleState } from './map';
3
5
  import { SynchronizationGroupModuleState } from './generic/syncGroups/types';
4
6
  import { LoadingIndicatorModuleState } from './generic/loadingIndicator/types';
5
7
  import { UIModuleState } from './ui/types';
6
8
  import { DrawtoolModuleStore } from './drawingTool/reducer';
9
+ import { ReducerMap } from './unifyReducerMaps';
7
10
  export declare const storeReducerMap: {
8
11
  webmap: import("redux").Reducer<import("./map/types").WebMapState>;
9
12
  services: import("redux").Reducer<import("./map/types").ServiceState>;
@@ -14,5 +17,21 @@ export declare const storeReducerMap: {
14
17
  drawingtools: import("redux").Reducer<import("./drawingTool/reducer").DrawingToolState>;
15
18
  router: import("redux").Reducer<{}>;
16
19
  };
17
- export declare const storeMiddlewares: (import("@reduxjs/toolkit").ListenerMiddleware<import("./types").CoreAppStore, import("@reduxjs/toolkit").ThunkDispatch<import("./types").CoreAppStore, unknown, import("redux").AnyAction>, unknown> | import("@reduxjs/toolkit").ListenerMiddleware<import("./router/types").RouterModuleStore, import("@reduxjs/toolkit").ThunkDispatch<import("./router/types").RouterModuleStore, unknown, import("redux").AnyAction>, unknown>)[];
20
+ export declare const storeMiddlewares: (ListenerMiddleware<import("./types").CoreAppStore, import("@reduxjs/toolkit").ThunkDispatch<import("./types").CoreAppStore, unknown, import("redux").AnyAction>, unknown> | ListenerMiddleware<import("./router/types").RouterModuleStore, import("@reduxjs/toolkit").ThunkDispatch<import("./router/types").RouterModuleStore, unknown, import("redux").AnyAction>, unknown>)[];
18
21
  export declare const createMockStore: (mockState?: WebMapStateModuleState | SynchronizationGroupModuleState | LoadingIndicatorModuleState | UIModuleState | DrawtoolModuleStore) => ToolkitStore;
22
+ export { getViewObjectForSyncGroup, getViewObjectForMapId, createViewObjectForNewMap, } from './mapStore/openlayers/syncGroupViewStore';
23
+ /**
24
+ * This creates an OpenGeoWeb redux store for redux connected components
25
+ *
26
+ * @param preloadedState Initial state for your application
27
+ * @param extraReducers Additional reducers, you can pass your own reducers. See apps/geoweb/src/app/store.ts for how it is used in GeoWeb.
28
+ * @param extraMiddleWares Additional middlewares
29
+ * @param extraEnhancer Custom enhancers
30
+ * @param enableDevTools Set to true to enable redux devtools.
31
+ * @returns A redux store you can use with the core components
32
+ */
33
+ export declare const configureOpenGeoWebStore: (preloadedState?: object, extraReducers?: ReducerMap, extraMiddleWares?: ListenerMiddleware[], extraEnhancers?: EnhancerArray<[
34
+ StoreEnhancer<{
35
+ dispatch: ExtractDispatchExtensions<unknown>;
36
+ }>
37
+ ]>, enableDevTools?: boolean | DevToolsEnhancerOptions) => ToolkitStore;
@@ -0,0 +1,3 @@
1
+ import { Action, Reducer } from '@reduxjs/toolkit';
2
+ export type ReducerMap = Record<string, Reducer<any, Action<unknown>>>;
3
+ export declare const unifyReducerMaps: (reducerMaps: ReducerMap[]) => ReducerMap;
@@ -0,0 +1 @@
1
+ export {};