@geops/rvf-mobility-web-component 0.1.56 → 0.1.58
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/CHANGELOG.md +31 -0
- package/docutils.js +1 -1
- package/global.d.ts +1 -0
- package/iframe.html +15 -0
- package/index.html +2 -1
- package/index.js +278 -330
- package/package.json +16 -17
- package/src/{RvfExportMenu/RvfExportMenu.tsx → ExportMenu/ExportMenu.tsx} +11 -11
- package/src/ExportMenu/index.tsx +1 -0
- package/src/{RvfExportMenuButton/RvfExportMenuButton.tsx → ExportMenuButton/ExportMenuButton.tsx} +5 -5
- package/src/ExportMenuButton/index.tsx +1 -0
- package/src/FeatureDetails/FeatureDetails.tsx +57 -0
- package/src/FeatureDetails/index.ts +1 -0
- package/src/FeaturesInfosListener/FeaturesInfosListener.tsx +73 -0
- package/src/FeaturesInfosListener/index.tsx +1 -0
- package/src/GeolocationButton/GeolocationButton.tsx +0 -1
- package/src/LayerTree/LayerTree.tsx +58 -0
- package/src/LayerTree/TreeItem/TreeItem.tsx +151 -0
- package/src/LayerTree/TreeItem/index.tsx +1 -0
- package/src/LayerTree/index.tsx +1 -0
- package/src/LayerTree/layersTreeContext.ts +4 -0
- package/src/LayerTree/layersTreeReducer.ts +158 -0
- package/src/{RvfLayerTreeButton/RvfLayerTreeButton.tsx → LayerTreeButton/LayerTreeButton.tsx} +5 -5
- package/src/LayerTreeButton/index.tsx +1 -0
- package/src/{RvfTopics/RvfTopics.tsx → LayerTreeMenu/LayerTreeMenu.tsx} +17 -13
- package/src/LayerTreeMenu/index.tsx +1 -0
- package/src/LayoutState/LayoutState.tsx +277 -0
- package/src/LayoutState/index.tsx +1 -0
- package/src/LinesNetworkPlanDetails/LinesNetworkPlanDetails.tsx +292 -0
- package/src/LinesNetworkPlanDetails/index.tsx +1 -0
- package/src/{RvfLineNetworkPlanLayer/RvfLineNetworkPlanLayer.tsx → LinesNetworkPlanLayer/LinesNetworkPlanLayer.tsx} +7 -9
- package/src/LinesNetworkPlanLayer/index.tsx +1 -0
- package/src/MobilityMap/MobilityMap.tsx +274 -60
- package/src/MobilityMap/MobilityMapAttributes.ts +27 -43
- package/src/NotificationDetails/NotificationDetails.tsx +468 -0
- package/src/NotificationDetails/index.ts +1 -0
- package/src/{NotificationLayer/NotificationLayer.tsx → NotificationsLayer/NotificationsLayer.tsx} +9 -4
- package/src/NotificationsLayer/index.tsx +1 -0
- package/src/Overlay/Overlay.tsx +1 -6
- package/src/OverlayContent/OverlayContent.tsx +87 -0
- package/src/OverlayContent/index.ts +1 -0
- package/src/OverlayDetails/OverlayDetails.tsx +47 -0
- package/src/OverlayDetails/index.ts +1 -0
- package/src/OverlayDetailsFooter/OverlayDetailsFooter.tsx +51 -0
- package/src/OverlayDetailsFooter/index.tsx +1 -0
- package/src/OverlayDetailsHeader/OverlayDetailsHeader.tsx +35 -0
- package/src/OverlayDetailsHeader/index.ts +1 -0
- package/src/OverlayFooter/OverlayFooter.tsx +41 -0
- package/src/OverlayFooter/index.tsx +1 -0
- package/src/OverlayHeader/OverlayHeader.tsx +44 -0
- package/src/OverlayHeader/index.tsx +1 -0
- package/src/PermalinkInput/PermalinkInput.tsx +28 -0
- package/src/PermalinkInput/index.tsx +1 -0
- package/src/RouteSchedule/RouteSchedule.tsx +22 -18
- package/src/RvfFeatureDetails/RvfFeatureDetails.tsx +22 -50
- package/src/RvfFeatureDetails/RvfLineNetworkDetails/RvfLineNetworkDetails.tsx +108 -104
- package/src/RvfFeatureDetails/RvfNotificationDetails/RvfNotificationDetails.tsx +189 -154
- package/src/RvfFeatureDetails/RvfSharedMobilityDetail/RvfSharedMobilityDetails.tsx +12 -14
- package/src/RvfFeatureDetailsTitle/RvfFeatureDetailsTitle.tsx +5 -5
- package/src/RvfMainLinkButton/RvfMainLinkButton.tsx +62 -0
- package/src/RvfMainLinkButton/index.tsx +1 -0
- package/src/RvfMobilityMap/RvfMobilityMap.tsx +182 -394
- package/src/RvfOverlayContent/RvfOverlayContent.tsx +2 -2
- package/src/RvfPoisLayer/RvfPoisLayer.tsx +2 -2
- package/src/RvfSearch/RvfSearch.tsx +1 -1
- package/src/RvfSellingPointsLayer/RvfSellingPointsLayer.tsx +2 -2
- package/src/RvfSharedMobilityLayerGroup/RvfSharedMobilityLayerGroup.tsx +23 -23
- package/src/RvfTarifZonenLayer/RvfTarifZonenLayer.tsx +2 -2
- package/src/Search/Search.tsx +11 -2
- package/src/{RvfSearchButton/RvfSearchButton.tsx → SearchButton/SearchButton.tsx} +5 -5
- package/src/SearchButton/index.tsx +1 -0
- package/src/ShadowOverflow/ShadowOverflow.tsx +20 -0
- package/src/ShadowOverflow/index.tsx +1 -0
- package/src/{RvfShare/RvfPermalinkButton/RvfPermalinkButton.tsx → ShareMenu/PermalinkButton/PermalinkButton.tsx} +4 -4
- package/src/ShareMenu/PermalinkButton/index.tsx +1 -0
- package/src/{RvfShare/RvfShare.tsx → ShareMenu/ShareMenu.tsx} +9 -11
- package/src/ShareMenu/index.tsx +1 -0
- package/src/{RvfShareMenuButton/RvfShareMenuButton.tsx → ShareMenuButton/ShareMenuButton.tsx} +6 -6
- package/src/ShareMenuButton/index.tsx +1 -0
- package/src/SingleClickListener/SingleClickListener.tsx +55 -113
- package/src/SingleClickListener/index.tsx +1 -1
- package/src/Station/Station.tsx +10 -3
- package/src/StationsLayer/StationsLayer.tsx +0 -1
- package/src/StopsSearch/StopsSearch.tsx +3 -4
- package/src/StopsSearch/index.tsx +2 -1
- package/src/WindowMessageListener/WindowMessageListener.tsx +7 -1
- package/src/{RvfZoomButtons/RvfZoomButtons.tsx → ZoomButtons/ZoomButtons.tsx} +9 -12
- package/src/ZoomButtons/index.tsx +1 -0
- package/src/icons/Geolocation/airport-14-svgrepo-com.svg +41 -0
- package/src/ui/Button/Button.tsx +9 -2
- package/src/ui/Checkbox/Checkbox.tsx +32 -0
- package/src/ui/Checkbox/index.tsx +1 -0
- package/src/ui/IconButton/IconButton.tsx +24 -4
- package/src/ui/Input/Input.tsx +17 -0
- package/src/ui/Input/index.tsx +1 -0
- package/src/ui/InputCopy/InputCopy.tsx +86 -0
- package/src/ui/InputCopy/index.tsx +1 -0
- package/src/ui/Select/Select.tsx +24 -0
- package/src/ui/Select/index.tsx +1 -0
- package/src/utils/constants.ts +43 -42
- package/src/utils/hooks/useInitialLayersVisiblity.tsx +1 -1
- package/src/utils/hooks/useLayerConfig.tsx +2 -2
- package/src/utils/hooks/useLayersConfig.tsx +3 -3
- package/src/utils/hooks/useMapContext.tsx +67 -8
- package/src/utils/hooks/useRvfContext.tsx +0 -44
- package/src/NotificationLayer/index.tsx +0 -1
- package/src/RvfEmbedNavigation/DragPanWarning.ts +0 -124
- package/src/RvfEmbedNavigation/RvfEmbedNavigation.tsx +0 -51
- package/src/RvfEmbedNavigation/index.js +0 -1
- package/src/RvfExportMenu/index.tsx +0 -1
- package/src/RvfExportMenuButton/index.tsx +0 -1
- package/src/RvfFloatingMenu/RvfFloatingMenu.tsx +0 -44
- package/src/RvfFloatingMenu/index.tsx +0 -1
- package/src/RvfLayerTreeButton/index.tsx +0 -1
- package/src/RvfLineNetworkPlanLayer/index.tsx +0 -1
- package/src/RvfPermalink/RvfPermalink.tsx +0 -18
- package/src/RvfPermalink/index.tsx +0 -1
- package/src/RvfSearchButton/index.tsx +0 -1
- package/src/RvfShare/RvfPermalinkButton/index.tsx +0 -1
- package/src/RvfShare/index.tsx +0 -1
- package/src/RvfShareMenuButton/index.tsx +0 -1
- package/src/RvfTopics/index.tsx +0 -1
- package/src/RvfZoomButtons/index.tsx +0 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { SelectionType } from "./TreeItem/TreeItem";
|
|
2
|
+
|
|
3
|
+
const ROOT = {
|
|
4
|
+
childItems: [],
|
|
5
|
+
parent: null,
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const mapNode = (childItems, parent) => {
|
|
9
|
+
for (const child of childItems) {
|
|
10
|
+
child.parent = parent;
|
|
11
|
+
|
|
12
|
+
if (child.childItems.length) {
|
|
13
|
+
mapNode(child.childItems, child);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const initTree = (tree) => {
|
|
19
|
+
const initializedTree = { ...ROOT };
|
|
20
|
+
initializedTree.childItems = tree;
|
|
21
|
+
mapNode(initializedTree.childItems, initializedTree);
|
|
22
|
+
|
|
23
|
+
return initializedTree;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const findNodeInTree = (node, nodeToFind) => {
|
|
27
|
+
if (node.id === nodeToFind.id) {
|
|
28
|
+
return node;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (node.childItems.length) {
|
|
32
|
+
for (const child of node.childItems) {
|
|
33
|
+
const res = findNodeInTree(child, nodeToFind);
|
|
34
|
+
if (res) {
|
|
35
|
+
return res;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const updateCheckedControlStatus = (currentItem, newItem, isParentUpdate) => {
|
|
42
|
+
if (newItem.isControlChecked) {
|
|
43
|
+
if (newItem.selectionType === SelectionType.CHECKBOX) {
|
|
44
|
+
currentItem.isControlChecked = newItem.isControlChecked;
|
|
45
|
+
currentItem.layer.setVisible(currentItem.isControlChecked);
|
|
46
|
+
} else {
|
|
47
|
+
for (const child of currentItem.parent.childItems) {
|
|
48
|
+
child.isControlChecked = child.id === currentItem.id;
|
|
49
|
+
|
|
50
|
+
if (!child.isControlChecked) {
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
52
|
+
updateRadioChildNodes(child);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
if (newItem.selectionType === SelectionType.CHECKBOX) {
|
|
58
|
+
currentItem.isControlChecked = newItem.isControlChecked;
|
|
59
|
+
currentItem.layer.setVisible(currentItem.isControlChecked);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// check all children
|
|
64
|
+
if (currentItem.childItems.length && !isParentUpdate) {
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
66
|
+
updateChildNodes(currentItem);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// check all parents
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
71
|
+
updateParentNodes(currentItem);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const setNewControlCheckedStatus = (tree, newItem) => {
|
|
75
|
+
const currentItem = findNodeInTree(tree, newItem);
|
|
76
|
+
|
|
77
|
+
if (currentItem) {
|
|
78
|
+
updateCheckedControlStatus(currentItem, newItem, false);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return { ...tree };
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const updateChildNodes = (node) => {
|
|
85
|
+
if (node.childItems[0].selectionType === SelectionType.RADIO) {
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
87
|
+
updateRadioChildNodes(node);
|
|
88
|
+
} else {
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
90
|
+
updateCheckboxChildNodes(node);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const updateRadioChildNodes = (parent) => {
|
|
95
|
+
if (parent.isControlChecked) {
|
|
96
|
+
for (let i = 0; i < parent.childItems.length; i++) {
|
|
97
|
+
parent.childItems[i].isControlChecked = i === 0;
|
|
98
|
+
}
|
|
99
|
+
} else {
|
|
100
|
+
for (const child of parent.childItems) {
|
|
101
|
+
child.isControlChecked = false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (parent.childItems.length) {
|
|
106
|
+
if (parent.childItems[0].childItems.length) {
|
|
107
|
+
updateChildNodes(parent.childItems[0]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const updateCheckboxChildNodes = (parent) => {
|
|
113
|
+
for (const child of parent.childItems) {
|
|
114
|
+
child.isControlChecked = parent.isControlChecked;
|
|
115
|
+
child.layer.setVisible(child.isControlChecked);
|
|
116
|
+
|
|
117
|
+
if (child.childItems.length) {
|
|
118
|
+
updateChildNodes(child);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const updateParentNodes = (node) => {
|
|
124
|
+
if (node.parent) {
|
|
125
|
+
if (node.parent.selectionType === SelectionType.CHECKBOX) {
|
|
126
|
+
const newItem = {
|
|
127
|
+
...node.parent,
|
|
128
|
+
isControlChecked: node.parent.childItems.some((child) => {
|
|
129
|
+
return child.isControlChecked;
|
|
130
|
+
}),
|
|
131
|
+
};
|
|
132
|
+
updateCheckedControlStatus(node.parent, newItem, true);
|
|
133
|
+
} else {
|
|
134
|
+
if (node?.parent?.parent) {
|
|
135
|
+
const newItem = {
|
|
136
|
+
...node.parent,
|
|
137
|
+
isControlChecked: node.parent.childItems.some((child) => {
|
|
138
|
+
return child.isControlChecked;
|
|
139
|
+
}),
|
|
140
|
+
};
|
|
141
|
+
updateCheckedControlStatus(node.parent, newItem, true);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
function layersTreeReducer(state = ROOT, action) {
|
|
148
|
+
switch (action.type) {
|
|
149
|
+
case "INIT":
|
|
150
|
+
return initTree(action.payload);
|
|
151
|
+
case "SELECT_ITEM":
|
|
152
|
+
return setNewControlCheckedStatus(state, action.payload);
|
|
153
|
+
default:
|
|
154
|
+
return state;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export default layersTreeReducer;
|
package/src/{RvfLayerTreeButton/RvfLayerTreeButton.tsx → LayerTreeButton/LayerTreeButton.tsx}
RENAMED
|
@@ -3,15 +3,15 @@ import { useCallback } from "preact/hooks";
|
|
|
3
3
|
|
|
4
4
|
import Stack from "../icons/Stack";
|
|
5
5
|
import IconButton from "../ui/IconButton";
|
|
6
|
-
import
|
|
6
|
+
import useMapContext from "../utils/hooks/useMapContext";
|
|
7
7
|
|
|
8
8
|
import type { HTMLAttributes, PreactDOMAttributes } from "preact";
|
|
9
9
|
|
|
10
|
-
export type
|
|
10
|
+
export type LayerTreeButtonProps = HTMLAttributes<HTMLButtonElement> &
|
|
11
11
|
PreactDOMAttributes;
|
|
12
12
|
|
|
13
|
-
function
|
|
14
|
-
const { isLayerTreeOpen, setIsLayerTreeOpen } =
|
|
13
|
+
function LayerTreeButton({ ...props }: LayerTreeButtonProps) {
|
|
14
|
+
const { isLayerTreeOpen, setIsLayerTreeOpen } = useMapContext();
|
|
15
15
|
|
|
16
16
|
const onClick = useCallback(() => {
|
|
17
17
|
setIsLayerTreeOpen(!isLayerTreeOpen);
|
|
@@ -24,4 +24,4 @@ function RvfLayerTreeButton({ ...props }: RvfLayerTreeButtonProps) {
|
|
|
24
24
|
);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export default memo(
|
|
27
|
+
export default memo(LayerTreeButton);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./LayerTreeButton";
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
+
import { getLayersAsFlatArray } from "mobility-toolbox-js/ol";
|
|
1
2
|
import { getUid } from "ol";
|
|
2
3
|
import { unByKey } from "ol/Observable";
|
|
3
4
|
import { memo, useEffect, useMemo, useState } from "preact/compat";
|
|
4
5
|
|
|
5
|
-
import
|
|
6
|
-
import { SelectionType } from "../
|
|
7
|
-
import
|
|
6
|
+
import LayerTree from "../LayerTree";
|
|
7
|
+
import { SelectionType } from "../LayerTree/TreeItem";
|
|
8
|
+
import { LAYERS_TITLES } from "../utils/constants";
|
|
8
9
|
import useMapContext from "../utils/hooks/useMapContext";
|
|
9
10
|
|
|
10
11
|
import type { Group } from "ol/layer";
|
|
11
12
|
import type BaseLayer from "ol/layer/Base";
|
|
12
|
-
import type {
|
|
13
|
+
import type { HTMLAttributes, PreactDOMAttributes } from "preact";
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
import type { LayerTreeProps } from "../LayerTree/LayerTree";
|
|
16
|
+
|
|
17
|
+
export interface LayerTreeConfig {
|
|
18
|
+
childItems: LayerTreeConfig[];
|
|
16
19
|
id: string;
|
|
17
20
|
isControlChecked: boolean;
|
|
18
21
|
layer: BaseLayer;
|
|
@@ -21,13 +24,14 @@ export interface RvfLayerTreeConfig {
|
|
|
21
24
|
title: string;
|
|
22
25
|
}
|
|
23
26
|
|
|
24
|
-
export type
|
|
27
|
+
export type LayerTreeMenuProps = HTMLAttributes<HTMLDivElement> &
|
|
28
|
+
Partial<LayerTreeProps> &
|
|
25
29
|
PreactDOMAttributes;
|
|
26
30
|
|
|
27
31
|
const getConfigForLayer = (
|
|
28
32
|
layer: BaseLayer,
|
|
29
33
|
revision: number,
|
|
30
|
-
):
|
|
34
|
+
): LayerTreeConfig => {
|
|
31
35
|
return {
|
|
32
36
|
childItems:
|
|
33
37
|
(layer as Group)
|
|
@@ -41,15 +45,15 @@ const getConfigForLayer = (
|
|
|
41
45
|
layer,
|
|
42
46
|
revision,
|
|
43
47
|
selectionType: SelectionType.CHECKBOX,
|
|
44
|
-
title: layer.get("title"),
|
|
48
|
+
title: layer.get("title") || LAYERS_TITLES[layer.get("name")],
|
|
45
49
|
};
|
|
46
50
|
};
|
|
47
51
|
|
|
48
|
-
function
|
|
52
|
+
function LayerTreeMenu(props: LayerTreeMenuProps) {
|
|
49
53
|
const { map } = useMapContext();
|
|
50
54
|
const [revision, setRevision] = useState(0);
|
|
51
55
|
|
|
52
|
-
const layers:
|
|
56
|
+
const layers: LayerTreeConfig[] = useMemo(() => {
|
|
53
57
|
const config =
|
|
54
58
|
map
|
|
55
59
|
?.getLayers()
|
|
@@ -95,7 +99,7 @@ function RvfTopics(props: RvfTopicsProps) {
|
|
|
95
99
|
};
|
|
96
100
|
}, [map]);
|
|
97
101
|
|
|
98
|
-
return <
|
|
102
|
+
return <LayerTree layers={layers} {...props} />;
|
|
99
103
|
}
|
|
100
104
|
|
|
101
|
-
export default memo(
|
|
105
|
+
export default memo(LayerTreeMenu);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./LayerTreeMenu";
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { useEffect } from "preact/hooks";
|
|
2
|
+
|
|
3
|
+
import useMapContext from "../utils/hooks/useMapContext";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This component is responsible for updating the layout state in the context.
|
|
7
|
+
*/
|
|
8
|
+
function LayoutState() {
|
|
9
|
+
const {
|
|
10
|
+
details,
|
|
11
|
+
embed,
|
|
12
|
+
geolocation,
|
|
13
|
+
hasDetails,
|
|
14
|
+
hasLayerTree,
|
|
15
|
+
hasPrint,
|
|
16
|
+
hasRealtime,
|
|
17
|
+
hasShare,
|
|
18
|
+
isExportMenuOpen,
|
|
19
|
+
isLayerTreeOpen,
|
|
20
|
+
isSearchOpen,
|
|
21
|
+
isShareMenuOpen,
|
|
22
|
+
layertree,
|
|
23
|
+
lnp,
|
|
24
|
+
notification,
|
|
25
|
+
permalink,
|
|
26
|
+
previewNotifications,
|
|
27
|
+
print,
|
|
28
|
+
realtime,
|
|
29
|
+
search,
|
|
30
|
+
selectedFeature,
|
|
31
|
+
setFeaturesInfos,
|
|
32
|
+
setHasDetails,
|
|
33
|
+
setHasGeolocation,
|
|
34
|
+
setHasLayerTree,
|
|
35
|
+
setHasLnp,
|
|
36
|
+
setHasNotification,
|
|
37
|
+
setHasPermalink,
|
|
38
|
+
setHasPrint,
|
|
39
|
+
setHasRealtime,
|
|
40
|
+
setHasSearch,
|
|
41
|
+
setHasShare,
|
|
42
|
+
setHasStations,
|
|
43
|
+
setHasToolbar,
|
|
44
|
+
setIsEmbed,
|
|
45
|
+
setIsExportMenuOpen,
|
|
46
|
+
setIsLayerTreeOpen,
|
|
47
|
+
setIsOverlayOpen,
|
|
48
|
+
setIsSearchOpen,
|
|
49
|
+
setIsShareMenuOpen,
|
|
50
|
+
setStationId,
|
|
51
|
+
setTrainId,
|
|
52
|
+
share,
|
|
53
|
+
stationId,
|
|
54
|
+
tenant,
|
|
55
|
+
toolbar,
|
|
56
|
+
trainId,
|
|
57
|
+
} = useMapContext();
|
|
58
|
+
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
setHasStations(!!tenant);
|
|
61
|
+
}, [setHasStations, tenant]);
|
|
62
|
+
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
setHasRealtime(realtime === "true");
|
|
65
|
+
}, [realtime, setHasRealtime]);
|
|
66
|
+
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
setHasNotification(notification === "true" || !!previewNotifications);
|
|
69
|
+
}, [notification, previewNotifications, setHasNotification]);
|
|
70
|
+
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
setHasGeolocation(geolocation === "true");
|
|
73
|
+
}, [geolocation, setHasGeolocation]);
|
|
74
|
+
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
setHasPermalink(permalink === "true");
|
|
77
|
+
}, [permalink, setHasPermalink]);
|
|
78
|
+
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
setHasSearch(search === "true");
|
|
81
|
+
}, [search, setHasSearch]);
|
|
82
|
+
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
setIsEmbed(embed === "true");
|
|
85
|
+
}, [embed, setIsEmbed]);
|
|
86
|
+
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
setHasLnp(lnp === "true");
|
|
89
|
+
}, [lnp, setHasLnp]);
|
|
90
|
+
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
setHasShare(share === "true");
|
|
93
|
+
}, [share, setHasShare]);
|
|
94
|
+
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
setHasPrint(print === "true");
|
|
97
|
+
}, [print, setHasPrint]);
|
|
98
|
+
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
setHasDetails(details === "true");
|
|
101
|
+
}, [details, setHasDetails]);
|
|
102
|
+
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
setHasToolbar(toolbar === "true");
|
|
105
|
+
}, [toolbar, setHasToolbar]);
|
|
106
|
+
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
setHasLayerTree(layertree === "true");
|
|
109
|
+
}, [layertree, setHasLayerTree]);
|
|
110
|
+
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
if (isSearchOpen) {
|
|
113
|
+
setIsLayerTreeOpen(false);
|
|
114
|
+
setIsExportMenuOpen(false);
|
|
115
|
+
setIsShareMenuOpen(false);
|
|
116
|
+
setStationId(null);
|
|
117
|
+
setTrainId(null);
|
|
118
|
+
setFeaturesInfos(null);
|
|
119
|
+
}
|
|
120
|
+
}, [
|
|
121
|
+
isSearchOpen,
|
|
122
|
+
setFeaturesInfos,
|
|
123
|
+
setIsExportMenuOpen,
|
|
124
|
+
setIsLayerTreeOpen,
|
|
125
|
+
setIsShareMenuOpen,
|
|
126
|
+
setStationId,
|
|
127
|
+
setTrainId,
|
|
128
|
+
]);
|
|
129
|
+
|
|
130
|
+
useEffect(() => {
|
|
131
|
+
if (isShareMenuOpen) {
|
|
132
|
+
setIsLayerTreeOpen(false);
|
|
133
|
+
setIsExportMenuOpen(false);
|
|
134
|
+
setIsSearchOpen(false);
|
|
135
|
+
setStationId(null);
|
|
136
|
+
setTrainId(null);
|
|
137
|
+
setFeaturesInfos(null);
|
|
138
|
+
}
|
|
139
|
+
}, [
|
|
140
|
+
isShareMenuOpen,
|
|
141
|
+
setFeaturesInfos,
|
|
142
|
+
setIsExportMenuOpen,
|
|
143
|
+
setIsLayerTreeOpen,
|
|
144
|
+
setIsSearchOpen,
|
|
145
|
+
setStationId,
|
|
146
|
+
setTrainId,
|
|
147
|
+
]);
|
|
148
|
+
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
if (isLayerTreeOpen) {
|
|
151
|
+
setIsExportMenuOpen(false);
|
|
152
|
+
setIsLayerTreeOpen(isLayerTreeOpen);
|
|
153
|
+
setIsSearchOpen(false);
|
|
154
|
+
setFeaturesInfos(null);
|
|
155
|
+
setTrainId(null);
|
|
156
|
+
setStationId(null);
|
|
157
|
+
setIsShareMenuOpen(false);
|
|
158
|
+
}
|
|
159
|
+
}, [
|
|
160
|
+
isLayerTreeOpen,
|
|
161
|
+
setFeaturesInfos,
|
|
162
|
+
setIsExportMenuOpen,
|
|
163
|
+
setIsLayerTreeOpen,
|
|
164
|
+
setIsSearchOpen,
|
|
165
|
+
setIsShareMenuOpen,
|
|
166
|
+
setStationId,
|
|
167
|
+
setTrainId,
|
|
168
|
+
]);
|
|
169
|
+
|
|
170
|
+
useEffect(() => {
|
|
171
|
+
if (isExportMenuOpen) {
|
|
172
|
+
setIsLayerTreeOpen(false);
|
|
173
|
+
setIsExportMenuOpen(isExportMenuOpen);
|
|
174
|
+
setIsSearchOpen(false);
|
|
175
|
+
setFeaturesInfos(null);
|
|
176
|
+
setTrainId(null);
|
|
177
|
+
setIsShareMenuOpen(false);
|
|
178
|
+
setStationId(null);
|
|
179
|
+
}
|
|
180
|
+
}, [
|
|
181
|
+
isExportMenuOpen,
|
|
182
|
+
setFeaturesInfos,
|
|
183
|
+
setIsExportMenuOpen,
|
|
184
|
+
setIsLayerTreeOpen,
|
|
185
|
+
setIsSearchOpen,
|
|
186
|
+
setIsShareMenuOpen,
|
|
187
|
+
setStationId,
|
|
188
|
+
setTrainId,
|
|
189
|
+
]);
|
|
190
|
+
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
if (selectedFeature) {
|
|
193
|
+
setIsLayerTreeOpen(false);
|
|
194
|
+
setIsSearchOpen(false);
|
|
195
|
+
setIsExportMenuOpen(false);
|
|
196
|
+
setIsShareMenuOpen(false);
|
|
197
|
+
setTrainId(selectedFeature?.get("train_id") || null);
|
|
198
|
+
setStationId(selectedFeature?.get("uid") || null);
|
|
199
|
+
} else if (!selectedFeature) {
|
|
200
|
+
setTrainId(null);
|
|
201
|
+
setStationId(null);
|
|
202
|
+
}
|
|
203
|
+
}, [
|
|
204
|
+
selectedFeature,
|
|
205
|
+
setIsExportMenuOpen,
|
|
206
|
+
setIsLayerTreeOpen,
|
|
207
|
+
setIsSearchOpen,
|
|
208
|
+
setIsShareMenuOpen,
|
|
209
|
+
setStationId,
|
|
210
|
+
setTrainId,
|
|
211
|
+
]);
|
|
212
|
+
|
|
213
|
+
useEffect(() => {
|
|
214
|
+
if (stationId) {
|
|
215
|
+
setIsLayerTreeOpen(false);
|
|
216
|
+
setIsExportMenuOpen(false);
|
|
217
|
+
setIsSearchOpen(false);
|
|
218
|
+
setTrainId(null);
|
|
219
|
+
setIsShareMenuOpen(false);
|
|
220
|
+
}
|
|
221
|
+
}, [
|
|
222
|
+
setFeaturesInfos,
|
|
223
|
+
setIsExportMenuOpen,
|
|
224
|
+
setIsLayerTreeOpen,
|
|
225
|
+
setIsSearchOpen,
|
|
226
|
+
setIsShareMenuOpen,
|
|
227
|
+
setTrainId,
|
|
228
|
+
stationId,
|
|
229
|
+
]);
|
|
230
|
+
|
|
231
|
+
useEffect(() => {
|
|
232
|
+
if (trainId) {
|
|
233
|
+
setIsLayerTreeOpen(false);
|
|
234
|
+
setIsExportMenuOpen(false);
|
|
235
|
+
setIsSearchOpen(false);
|
|
236
|
+
setStationId(null);
|
|
237
|
+
setIsShareMenuOpen(false);
|
|
238
|
+
}
|
|
239
|
+
}, [
|
|
240
|
+
setFeaturesInfos,
|
|
241
|
+
setIsExportMenuOpen,
|
|
242
|
+
setIsLayerTreeOpen,
|
|
243
|
+
setIsSearchOpen,
|
|
244
|
+
setIsShareMenuOpen,
|
|
245
|
+
setStationId,
|
|
246
|
+
trainId,
|
|
247
|
+
]);
|
|
248
|
+
|
|
249
|
+
useEffect(() => {
|
|
250
|
+
setIsOverlayOpen(
|
|
251
|
+
(hasDetails && !!selectedFeature) ||
|
|
252
|
+
(hasPrint && isExportMenuOpen) ||
|
|
253
|
+
(hasLayerTree && isLayerTreeOpen) ||
|
|
254
|
+
(hasShare && isShareMenuOpen) ||
|
|
255
|
+
(hasRealtime && !!trainId) ||
|
|
256
|
+
(tenant && !!stationId),
|
|
257
|
+
);
|
|
258
|
+
}, [
|
|
259
|
+
hasDetails,
|
|
260
|
+
selectedFeature,
|
|
261
|
+
hasPrint,
|
|
262
|
+
isExportMenuOpen,
|
|
263
|
+
hasLayerTree,
|
|
264
|
+
isLayerTreeOpen,
|
|
265
|
+
hasShare,
|
|
266
|
+
isShareMenuOpen,
|
|
267
|
+
hasRealtime,
|
|
268
|
+
trainId,
|
|
269
|
+
tenant,
|
|
270
|
+
stationId,
|
|
271
|
+
setIsOverlayOpen,
|
|
272
|
+
]);
|
|
273
|
+
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export default LayoutState;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./LayoutState";
|