@mapsight/ui 7.1.0 → 7.2.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.
Files changed (484) hide show
  1. package/README.md +91 -2
  2. package/dist/components/app.d.ts +1 -1
  3. package/dist/components/app.d.ts.map +1 -1
  4. package/dist/components/feature-details-content/feature-details-content.d.ts +1 -1
  5. package/dist/components/feature-details-content/feature-details-content.d.ts.map +1 -1
  6. package/dist/components/feature-details-content/index.d.ts +1 -1
  7. package/dist/components/feature-details-content/share-feature-link-modal.d.ts +1 -1
  8. package/dist/components/feature-details-content/share-feature-link-modal.d.ts.map +1 -1
  9. package/dist/components/feature-list/context.d.ts +12 -4
  10. package/dist/components/feature-list/context.d.ts.map +1 -1
  11. package/dist/components/feature-list/context.js.map +1 -1
  12. package/dist/components/feature-list/empty-message.d.ts +1 -1
  13. package/dist/components/feature-list/empty-message.d.ts.map +1 -1
  14. package/dist/components/feature-list/filter.d.ts +1 -1
  15. package/dist/components/feature-list/filter.d.ts.map +1 -1
  16. package/dist/components/feature-list/footer.d.ts +1 -1
  17. package/dist/components/feature-list/footer.d.ts.map +1 -1
  18. package/dist/components/feature-list/hooks/useAutoloadFeatureSource.d.ts.map +1 -1
  19. package/dist/components/feature-list/hooks/useAutoloadFeatureSource.js +12 -3
  20. package/dist/components/feature-list/hooks/useAutoloadFeatureSource.js.map +1 -1
  21. package/dist/components/feature-list/index.d.ts +3 -2
  22. package/dist/components/feature-list/index.d.ts.map +1 -1
  23. package/dist/components/feature-list/index.js +30 -42
  24. package/dist/components/feature-list/index.js.map +1 -1
  25. package/dist/components/feature-list/pagination.d.ts +1 -1
  26. package/dist/components/feature-list/pagination.d.ts.map +1 -1
  27. package/dist/components/feature-list/query-input.d.ts +1 -1
  28. package/dist/components/feature-list/query-input.d.ts.map +1 -1
  29. package/dist/components/feature-list/tag-switcher-control.d.ts +4 -0
  30. package/dist/components/feature-list/tag-switcher-control.d.ts.map +1 -0
  31. package/dist/components/feature-list/tag-switcher-control.js +10 -0
  32. package/dist/components/feature-list/tag-switcher-control.js.map +1 -0
  33. package/dist/components/feature-list-cycling/button.d.ts +1 -1
  34. package/dist/components/feature-list-cycling/button.d.ts.map +1 -1
  35. package/dist/components/feature-list-cycling/dot.d.ts +1 -1
  36. package/dist/components/feature-list-cycling/dot.d.ts.map +1 -1
  37. package/dist/components/feature-list-cycling/feature-list-cycling.d.ts +1 -1
  38. package/dist/components/feature-list-cycling/feature-list-cycling.d.ts.map +1 -1
  39. package/dist/components/feature-list-cycling/index.d.ts +1 -1
  40. package/dist/components/feature-list-item/icon.d.ts +8 -6
  41. package/dist/components/feature-list-item/icon.d.ts.map +1 -1
  42. package/dist/components/feature-list-item/icon.js +5 -13
  43. package/dist/components/feature-list-item/icon.js.map +1 -1
  44. package/dist/components/feature-list-item/index.d.ts +1 -1
  45. package/dist/components/feature-list-item/index.d.ts.map +1 -1
  46. package/dist/components/feature-list-sorting/feature-list-sorting.d.ts +1 -1
  47. package/dist/components/feature-list-sorting/feature-list-sorting.d.ts.map +1 -1
  48. package/dist/components/feature-list-sorting/feature-list-sorting.js +3 -12
  49. package/dist/components/feature-list-sorting/feature-list-sorting.js.map +1 -1
  50. package/dist/components/feature-list-sorting/index.d.ts +1 -1
  51. package/dist/components/feature-list-sorting/status-indicator.d.ts +1 -1
  52. package/dist/components/feature-list-sorting/status-indicator.d.ts.map +1 -1
  53. package/dist/components/feature-select-button.d.ts +1 -1
  54. package/dist/components/feature-select-button.d.ts.map +1 -1
  55. package/dist/components/feature-selection-info/close-button.d.ts +1 -1
  56. package/dist/components/feature-selection-info/close-button.d.ts.map +1 -1
  57. package/dist/components/feature-selection-info/container.d.ts +1 -1
  58. package/dist/components/feature-selection-info/container.d.ts.map +1 -1
  59. package/dist/components/feature-selection-info/header.d.ts +1 -1
  60. package/dist/components/feature-selection-info/header.d.ts.map +1 -1
  61. package/dist/components/feature-selection-info/index.d.ts +1 -1
  62. package/dist/components/feature-selection-info/index.d.ts.map +1 -1
  63. package/dist/components/feature-selection-info/with-sticky-header.d.ts +1 -1
  64. package/dist/components/feature-selection-info/with-sticky-header.d.ts.map +1 -1
  65. package/dist/components/feature-selection-info/without-sticky-header.d.ts +1 -1
  66. package/dist/components/feature-selection-info/without-sticky-header.d.ts.map +1 -1
  67. package/dist/components/filter-toggle-control/FilterToggleControl.d.ts +12 -0
  68. package/dist/components/filter-toggle-control/FilterToggleControl.d.ts.map +1 -0
  69. package/dist/components/filter-toggle-control/FilterToggleControl.js +20 -0
  70. package/dist/components/filter-toggle-control/FilterToggleControl.js.map +1 -0
  71. package/dist/components/helping/app-channel.d.ts +1 -1
  72. package/dist/components/helping/app-channel.d.ts.map +1 -1
  73. package/dist/components/helping/app-context.d.ts +1 -1
  74. package/dist/components/helping/app-context.d.ts.map +1 -1
  75. package/dist/components/instance.d.ts +1 -1
  76. package/dist/components/instance.d.ts.map +1 -1
  77. package/dist/components/layer-switcher/GroupedLayerSwitcher.d.ts +1 -1
  78. package/dist/components/layer-switcher/LayerSwitcher.d.ts +1 -1
  79. package/dist/components/layer-switcher/LayerSwitcherContainer.d.ts +3 -2
  80. package/dist/components/layer-switcher/LayerSwitcherContainer.d.ts.map +1 -1
  81. package/dist/components/layer-switcher/LayerSwitcherContainer.js +2 -2
  82. package/dist/components/layer-switcher/LayerSwitcherContainer.js.map +1 -1
  83. package/dist/components/layer-switcher/LayerSwitcherEntry.d.ts +1 -1
  84. package/dist/components/layer-switcher/index.d.ts +1 -1
  85. package/dist/components/layer-switcher/index.js.map +1 -1
  86. package/dist/components/layout/additional-container/content.d.ts +1 -1
  87. package/dist/components/layout/additional-container/content.d.ts.map +1 -1
  88. package/dist/components/layout/additional-container/index.d.ts +1 -1
  89. package/dist/components/layout/additional-container/index.d.ts.map +1 -1
  90. package/dist/components/layout/additional-container/marginal.d.ts +1 -1
  91. package/dist/components/layout/additional-container/marginal.d.ts.map +1 -1
  92. package/dist/components/layout/main-container.d.ts +1 -1
  93. package/dist/components/layout/main-container.d.ts.map +1 -1
  94. package/dist/components/layout/map-row.d.ts +1 -1
  95. package/dist/components/layout/map-row.d.ts.map +1 -1
  96. package/dist/components/layout/title-bar.d.ts +1 -1
  97. package/dist/components/layout/title-bar.d.ts.map +1 -1
  98. package/dist/components/layout/wrapper.d.ts +1 -1
  99. package/dist/components/layout/wrapper.d.ts.map +1 -1
  100. package/dist/components/link-share.d.ts +1 -1
  101. package/dist/components/link-share.d.ts.map +1 -1
  102. package/dist/components/main-panel/container.d.ts +1 -1
  103. package/dist/components/main-panel/container.d.ts.map +1 -1
  104. package/dist/components/main-panel/context.d.ts +1 -1
  105. package/dist/components/main-panel/context.d.ts.map +1 -1
  106. package/dist/components/main-panel/index.d.ts +1 -1
  107. package/dist/components/main-panel/index.d.ts.map +1 -1
  108. package/dist/components/main-panel/list-toggle-button.d.ts +1 -1
  109. package/dist/components/main-panel/list-toggle-button.d.ts.map +1 -1
  110. package/dist/components/map-overlay/attribution-entries.d.ts +1 -1
  111. package/dist/components/map-overlay/attribution-entries.d.ts.map +1 -1
  112. package/dist/components/map-overlay/attribution.d.ts +1 -1
  113. package/dist/components/map-overlay/attribution.d.ts.map +1 -1
  114. package/dist/components/map-overlay/combined-buttons.d.ts +1 -1
  115. package/dist/components/map-overlay/combined-buttons.d.ts.map +1 -1
  116. package/dist/components/map-overlay/index.d.ts +1 -1
  117. package/dist/components/map-overlay/index.d.ts.map +1 -1
  118. package/dist/components/map-overlay/info-overlay-left.d.ts +1 -1
  119. package/dist/components/map-overlay/info-overlay-left.d.ts.map +1 -1
  120. package/dist/components/map-overlay/info-overlay-modal.d.ts +1 -1
  121. package/dist/components/map-overlay/info-overlay-modal.d.ts.map +1 -1
  122. package/dist/components/map-overlay/info-overlay-right.d.ts +1 -1
  123. package/dist/components/map-overlay/info-overlay-right.d.ts.map +1 -1
  124. package/dist/components/map-overlay/layer-switcher-overlay.d.ts +1 -1
  125. package/dist/components/map-overlay/layer-switcher-overlay.d.ts.map +1 -1
  126. package/dist/components/map-overlay/legend.d.ts +1 -1
  127. package/dist/components/map-overlay/legend.d.ts.map +1 -1
  128. package/dist/components/map-overlay/logo.d.ts +1 -1
  129. package/dist/components/map-overlay/logo.d.ts.map +1 -1
  130. package/dist/components/map-overlay/measure-distance-button.d.ts +1 -1
  131. package/dist/components/map-overlay/measure-distance-button.d.ts.map +1 -1
  132. package/dist/components/map-overlay/measure-distance-overlay.d.ts +1 -1
  133. package/dist/components/map-overlay/measure-distance-overlay.d.ts.map +1 -1
  134. package/dist/components/map-overlay/search-overlay.d.ts +1 -1
  135. package/dist/components/map-overlay/search-overlay.d.ts.map +1 -1
  136. package/dist/components/map-overlay/share-position-link-button.d.ts +1 -1
  137. package/dist/components/map-overlay/share-position-link-button.d.ts.map +1 -1
  138. package/dist/components/map-overlay/tool-overlay.d.ts +1 -1
  139. package/dist/components/map-overlay/tool-overlay.d.ts.map +1 -1
  140. package/dist/components/map-overlay/zoom-buttons.d.ts +1 -1
  141. package/dist/components/map-overlay/zoom-buttons.d.ts.map +1 -1
  142. package/dist/components/map-synced-interlay/index.d.ts +1 -1
  143. package/dist/components/map-synced-interlay/map-synced-interlay.d.ts +1 -1
  144. package/dist/components/map-synced-interlay/map-synced-interlay.d.ts.map +1 -1
  145. package/dist/components/map-synced-interlay/tooltip.d.ts +1 -1
  146. package/dist/components/map-synced-interlay/tooltip.d.ts.map +1 -1
  147. package/dist/components/map-wrapper.d.ts +3 -3
  148. package/dist/components/map-wrapper.d.ts.map +1 -1
  149. package/dist/components/map-wrapper.js +4 -7
  150. package/dist/components/map-wrapper.js.map +1 -1
  151. package/dist/components/map.d.ts +1 -1
  152. package/dist/components/map.d.ts.map +1 -1
  153. package/dist/components/mapsight-icon/mapsight-icon.d.ts +10 -0
  154. package/dist/components/mapsight-icon/mapsight-icon.d.ts.map +1 -0
  155. package/dist/components/mapsight-icon/mapsight-icon.js +33 -0
  156. package/dist/components/mapsight-icon/mapsight-icon.js.map +1 -0
  157. package/dist/components/modal.d.ts +1 -1
  158. package/dist/components/modal.d.ts.map +1 -1
  159. package/dist/components/query-input-with-label.d.ts +1 -1
  160. package/dist/components/query-input-with-label.d.ts.map +1 -1
  161. package/dist/components/search/index.d.ts +1 -1
  162. package/dist/components/search/index.d.ts.map +1 -1
  163. package/dist/components/search/result-entry.d.ts +1 -1
  164. package/dist/components/search/result-entry.d.ts.map +1 -1
  165. package/dist/components/search/result.d.ts +1 -1
  166. package/dist/components/search/result.d.ts.map +1 -1
  167. package/dist/components/switcher/GroupedSwitcher.d.ts +1 -1
  168. package/dist/components/switcher/GroupedSwitcher.d.ts.map +1 -1
  169. package/dist/components/switcher/Switcher.d.ts +1 -1
  170. package/dist/components/switcher/Switcher.d.ts.map +1 -1
  171. package/dist/components/switcher/SwitcherButton.d.ts +1 -1
  172. package/dist/components/switcher/SwitcherButton.d.ts.map +1 -1
  173. package/dist/components/switcher/SwitcherEntry.d.ts +1 -1
  174. package/dist/components/switcher/SwitcherEntry.d.ts.map +1 -1
  175. package/dist/components/switcher/SwitcherHeader.d.ts +1 -1
  176. package/dist/components/switcher/SwitcherHeader.d.ts.map +1 -1
  177. package/dist/components/switcher/SwitcherStatusIcon.d.ts +1 -1
  178. package/dist/components/switcher/SwitcherStatusIcon.d.ts.map +1 -1
  179. package/dist/components/tag-switcher/TagSwitcher.d.ts +1 -1
  180. package/dist/components/tag-switcher/TagSwitcher.d.ts.map +1 -1
  181. package/dist/components/tag-switcher/createTagSwitcherEntry.d.ts +1 -1
  182. package/dist/components/tag-switcher/createTagSwitcherHeader.d.ts +1 -1
  183. package/dist/components/tag-switcher/index.d.ts +1 -1
  184. package/dist/components/time-filter.d.ts +1 -1
  185. package/dist/components/time-filter.d.ts.map +1 -1
  186. package/dist/components/view-toggle-button/desktop-button.d.ts +1 -1
  187. package/dist/components/view-toggle-button/desktop-button.d.ts.map +1 -1
  188. package/dist/components/view-toggle-button/index.d.ts +1 -1
  189. package/dist/components/view-toggle-button/mobile-button.d.ts +1 -1
  190. package/dist/components/view-toggle-button/mobile-button.d.ts.map +1 -1
  191. package/dist/components/view-toggle-button/view-toggle-button.d.ts +1 -1
  192. package/dist/components/view-toggle-button/view-toggle-button.d.ts.map +1 -1
  193. package/dist/components/view-toggle-button/viewport-button.d.ts +1 -1
  194. package/dist/components/view-toggle-button/viewport-button.d.ts.map +1 -1
  195. package/dist/config/feature/sources.d.ts +8 -5
  196. package/dist/config/feature/sources.d.ts.map +1 -1
  197. package/dist/config/feature/sources.js +10 -0
  198. package/dist/config/feature/sources.js.map +1 -1
  199. package/dist/config/index.d.ts +1 -1
  200. package/dist/config/map/featureInteractions.js.map +1 -1
  201. package/dist/config/map/layers.d.ts +16 -13
  202. package/dist/config/map/layers.d.ts.map +1 -1
  203. package/dist/config/map/layers.js.map +1 -1
  204. package/dist/config/schema/index.d.ts +195 -0
  205. package/dist/config/schema/index.d.ts.map +1 -0
  206. package/dist/config/schema/index.js +26 -0
  207. package/dist/config/schema/index.js.map +1 -0
  208. package/dist/config/schema/validate.d.ts +8 -0
  209. package/dist/config/schema/validate.d.ts.map +1 -0
  210. package/dist/config/schema/validate.js +7 -0
  211. package/dist/config/schema/validate.js.map +1 -0
  212. package/dist/controllers/defaults.d.ts.map +1 -1
  213. package/dist/controllers/defaults.js +5 -0
  214. package/dist/controllers/defaults.js.map +1 -1
  215. package/dist/filters/tag-filter.d.ts +7 -0
  216. package/dist/filters/tag-filter.d.ts.map +1 -1
  217. package/dist/filters/tag-filter.js +10 -0
  218. package/dist/filters/tag-filter.js.map +1 -1
  219. package/dist/filters/time-filter.d.ts +9 -0
  220. package/dist/filters/time-filter.d.ts.map +1 -1
  221. package/dist/filters/time-filter.js +10 -0
  222. package/dist/filters/time-filter.js.map +1 -1
  223. package/dist/helpers/i18n/de.d.ts.map +1 -1
  224. package/dist/helpers/i18n/de.js +1 -0
  225. package/dist/helpers/i18n/de.js.map +1 -1
  226. package/dist/helpers/i18n/en.d.ts.map +1 -1
  227. package/dist/helpers/i18n/en.js +1 -0
  228. package/dist/helpers/i18n/en.js.map +1 -1
  229. package/dist/helpers/sort-features-by-distance.d.ts +2 -7
  230. package/dist/helpers/sort-features-by-distance.d.ts.map +1 -1
  231. package/dist/helpers/sort-features-by-distance.js +27 -39
  232. package/dist/helpers/sort-features-by-distance.js.map +1 -1
  233. package/dist/hooks/useMapsightIcon.d.ts +8 -0
  234. package/dist/hooks/useMapsightIcon.d.ts.map +1 -0
  235. package/dist/hooks/useMapsightIcon.js +50 -0
  236. package/dist/hooks/useMapsightIcon.js.map +1 -0
  237. package/dist/index.d.ts +2 -2
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +12 -2
  240. package/dist/index.js.map +1 -1
  241. package/dist/plugins/browser-defaults.d.ts +2 -0
  242. package/dist/plugins/browser-defaults.d.ts.map +1 -1
  243. package/dist/plugins/browser-defaults.js +5 -0
  244. package/dist/plugins/browser-defaults.js.map +1 -1
  245. package/dist/plugins/common/combined-visible-layers.d.ts +15 -0
  246. package/dist/plugins/common/combined-visible-layers.d.ts.map +1 -0
  247. package/dist/plugins/common/combined-visible-layers.js +63 -0
  248. package/dist/plugins/common/combined-visible-layers.js.map +1 -0
  249. package/dist/plugins/common/runtime-icon-style.d.ts +12 -0
  250. package/dist/plugins/common/runtime-icon-style.d.ts.map +1 -0
  251. package/dist/plugins/common/runtime-icon-style.js +58 -0
  252. package/dist/plugins/common/runtime-icon-style.js.map +1 -0
  253. package/dist/react-modal-app-element.d.ts +6 -0
  254. package/dist/react-modal-app-element.d.ts.map +1 -0
  255. package/dist/react-modal-app-element.js +9 -0
  256. package/dist/react-modal-app-element.js.map +1 -0
  257. package/dist/store/actions.d.ts.map +1 -1
  258. package/dist/store/actions.js +6 -1
  259. package/dist/store/actions.js.map +1 -1
  260. package/dist/store/reducers.d.ts +8 -6
  261. package/dist/store/reducers.d.ts.map +1 -1
  262. package/dist/store/selectors.d.ts +10 -17
  263. package/dist/store/selectors.d.ts.map +1 -1
  264. package/dist/store/selectors.js +9 -1
  265. package/dist/store/selectors.js.map +1 -1
  266. package/dist/types.d.ts +19 -5
  267. package/dist/types.d.ts.map +1 -1
  268. package/package.json +24 -8
  269. package/src/scss/blocks/_features-sorting.scss +0 -13
  270. package/src/scss/blocks/_filter-button.scss +23 -0
  271. package/src/scss/blocks/_filter-toggle-control.scss +15 -0
  272. package/src/scss/default.scss +1 -0
  273. package/src/img/mapsight-ui/check-empty.svg +0 -1
  274. package/src/img/mapsight-ui/check.svg +0 -2
  275. package/src/img/mapsight-ui/close-list.svg +0 -1
  276. package/src/img/mapsight-ui/close.svg +0 -1
  277. package/src/img/mapsight-ui/error.svg +0 -1
  278. package/src/img/mapsight-ui/fullscreen-close.svg +0 -1
  279. package/src/img/mapsight-ui/fullscreen.svg +0 -1
  280. package/src/img/mapsight-ui/geo-active.svg +0 -1
  281. package/src/img/mapsight-ui/geo-error.svg +0 -1
  282. package/src/img/mapsight-ui/geo-inactive.svg +0 -1
  283. package/src/img/mapsight-ui/info.svg +0 -1
  284. package/src/img/mapsight-ui/layers.svg +0 -1
  285. package/src/img/mapsight-ui/loading.svg +0 -1
  286. package/src/img/mapsight-ui/map.svg +0 -1
  287. package/src/img/mapsight-ui/measure-distance.svg +0 -7
  288. package/src/img/mapsight-ui/open-list.svg +0 -1
  289. package/src/img/mapsight-ui/place-marker.svg +0 -4
  290. package/src/img/mapsight-ui/print.svg +0 -4
  291. package/src/img/mapsight-ui/reset-active.svg +0 -1
  292. package/src/img/mapsight-ui/reset.svg +0 -1
  293. package/src/img/mapsight-ui/search.svg +0 -1
  294. package/src/img/mapsight-ui/sharing.svg +0 -7
  295. package/src/img/mapsight-ui/sort-active.svg +0 -1
  296. package/src/img/mapsight-ui/sort.svg +0 -1
  297. package/src/img/mapsight-ui/watermark.svg +0 -1
  298. package/src/img/mapsight-ui/zoom-in.svg +0 -3
  299. package/src/img/mapsight-ui/zoom-out.svg +0 -3
  300. package/src/js/components/app.tsx +0 -232
  301. package/src/js/components/close-overlay-button.tsx +0 -27
  302. package/src/js/components/feature-details-content/feature-details-content-inner.tsx +0 -116
  303. package/src/js/components/feature-details-content/feature-details-content.jsx +0 -185
  304. package/src/js/components/feature-details-content/index.js +0 -16
  305. package/src/js/components/feature-details-content/share-feature-link-modal.jsx +0 -56
  306. package/src/js/components/feature-list/content.jsx +0 -42
  307. package/src/js/components/feature-list/context.tsx +0 -47
  308. package/src/js/components/feature-list/empty-message.jsx +0 -15
  309. package/src/js/components/feature-list/filter.jsx +0 -35
  310. package/src/js/components/feature-list/footer.jsx +0 -5
  311. package/src/js/components/feature-list/grouped-content.jsx +0 -74
  312. package/src/js/components/feature-list/header.jsx +0 -7
  313. package/src/js/components/feature-list/hooks/useAutoloadFeatureSource.ts +0 -25
  314. package/src/js/components/feature-list/hooks/useFeatureListFeatureSource.ts +0 -22
  315. package/src/js/components/feature-list/hooks/useFeatureListItemGroups.ts +0 -127
  316. package/src/js/components/feature-list/hooks/useFeatureListState.ts +0 -98
  317. package/src/js/components/feature-list/hooks/useKeyboardNavigation.js +0 -112
  318. package/src/js/components/feature-list/hooks/useMakeHeaderSticky.js +0 -40
  319. package/src/js/components/feature-list/hooks/usePaginatedFilteredFeatures.ts +0 -129
  320. package/src/js/components/feature-list/hooks/useRestoreDocumentScroll.js +0 -12
  321. package/src/js/components/feature-list/hooks/useSelectFeature.js +0 -88
  322. package/src/js/components/feature-list/index.jsx +0 -278
  323. package/src/js/components/feature-list/pagination.tsx +0 -57
  324. package/src/js/components/feature-list/query-input.jsx +0 -14
  325. package/src/js/components/feature-list-cycling/button.jsx +0 -13
  326. package/src/js/components/feature-list-cycling/dot.jsx +0 -43
  327. package/src/js/components/feature-list-cycling/feature-list-cycling.jsx +0 -153
  328. package/src/js/components/feature-list-cycling/index.js +0 -82
  329. package/src/js/components/feature-list-item/head.jsx +0 -131
  330. package/src/js/components/feature-list-item/hooks/useFeatureListItemScrollAndFocus.js +0 -51
  331. package/src/js/components/feature-list-item/hooks/useFeatureListItemState.ts +0 -75
  332. package/src/js/components/feature-list-item/icon.jsx +0 -35
  333. package/src/js/components/feature-list-item/index.jsx +0 -168
  334. package/src/js/components/feature-list-sorting/feature-list-sorting.tsx +0 -144
  335. package/src/js/components/feature-list-sorting/index.js +0 -22
  336. package/src/js/components/feature-list-sorting/status-indicator.jsx +0 -10
  337. package/src/js/components/feature-select-button.jsx +0 -70
  338. package/src/js/components/feature-selection-info/close-button.jsx +0 -64
  339. package/src/js/components/feature-selection-info/container.jsx +0 -9
  340. package/src/js/components/feature-selection-info/header.tsx +0 -27
  341. package/src/js/components/feature-selection-info/index.tsx +0 -81
  342. package/src/js/components/feature-selection-info/with-sticky-header.tsx +0 -76
  343. package/src/js/components/feature-selection-info/without-sticky-header.jsx +0 -19
  344. package/src/js/components/feature-selection-info/wrapper.jsx +0 -43
  345. package/src/js/components/helping/app-channel.tsx +0 -99
  346. package/src/js/components/helping/app-context.tsx +0 -32
  347. package/src/js/components/helping/visibility-wrapper.jsx +0 -23
  348. package/src/js/components/instance.tsx +0 -48
  349. package/src/js/components/layer-switcher/GroupedLayerSwitcher.js +0 -47
  350. package/src/js/components/layer-switcher/LayerSwitcher.ts +0 -34
  351. package/src/js/components/layer-switcher/LayerSwitcherContainer.tsx +0 -88
  352. package/src/js/components/layer-switcher/LayerSwitcherEntry.ts +0 -152
  353. package/src/js/components/layer-switcher/index.ts +0 -42
  354. package/src/js/components/layout/additional-container/content.jsx +0 -10
  355. package/src/js/components/layout/additional-container/index.jsx +0 -5
  356. package/src/js/components/layout/additional-container/marginal.jsx +0 -10
  357. package/src/js/components/layout/main-container.jsx +0 -5
  358. package/src/js/components/layout/map-row.jsx +0 -5
  359. package/src/js/components/layout/title-bar.tsx +0 -25
  360. package/src/js/components/layout/wrapper.jsx +0 -28
  361. package/src/js/components/link-share.jsx +0 -78
  362. package/src/js/components/main-panel/container.tsx +0 -23
  363. package/src/js/components/main-panel/context.tsx +0 -71
  364. package/src/js/components/main-panel/index.tsx +0 -46
  365. package/src/js/components/main-panel/list-toggle-button.jsx +0 -43
  366. package/src/js/components/map-overlay/area.jsx +0 -17
  367. package/src/js/components/map-overlay/attribution-entries.tsx +0 -33
  368. package/src/js/components/map-overlay/attribution.tsx +0 -25
  369. package/src/js/components/map-overlay/combined-buttons.jsx +0 -5
  370. package/src/js/components/map-overlay/index.jsx +0 -5
  371. package/src/js/components/map-overlay/info-overlay-left.jsx +0 -51
  372. package/src/js/components/map-overlay/info-overlay-modal.tsx +0 -49
  373. package/src/js/components/map-overlay/info-overlay-right.jsx +0 -46
  374. package/src/js/components/map-overlay/layer-switcher-overlay.tsx +0 -100
  375. package/src/js/components/map-overlay/legend.tsx +0 -22
  376. package/src/js/components/map-overlay/logo.jsx +0 -11
  377. package/src/js/components/map-overlay/measure-distance-button.tsx +0 -116
  378. package/src/js/components/map-overlay/measure-distance-overlay.jsx +0 -56
  379. package/src/js/components/map-overlay/mini-legend.jsx +0 -103
  380. package/src/js/components/map-overlay/region-selector.jsx +0 -63
  381. package/src/js/components/map-overlay/search-overlay.jsx +0 -79
  382. package/src/js/components/map-overlay/share-position-link-button.tsx +0 -144
  383. package/src/js/components/map-overlay/tool-overlay.tsx +0 -28
  384. package/src/js/components/map-overlay/user-geo-location-button.jsx +0 -89
  385. package/src/js/components/map-overlay/zoom-button.jsx +0 -98
  386. package/src/js/components/map-overlay/zoom-buttons.jsx +0 -26
  387. package/src/js/components/map-synced-interlay/index.ts +0 -15
  388. package/src/js/components/map-synced-interlay/map-synced-interlay.jsx +0 -22
  389. package/src/js/components/map-synced-interlay/tooltip-content.tsx +0 -22
  390. package/src/js/components/map-synced-interlay/tooltip.tsx +0 -199
  391. package/src/js/components/map-wrapper.tsx +0 -65
  392. package/src/js/components/map.tsx +0 -55
  393. package/src/js/components/modal.tsx +0 -40
  394. package/src/js/components/query-input-with-label.tsx +0 -71
  395. package/src/js/components/query-input.tsx +0 -81
  396. package/src/js/components/search/index.jsx +0 -83
  397. package/src/js/components/search/query-input.jsx +0 -20
  398. package/src/js/components/search/result-entry.jsx +0 -63
  399. package/src/js/components/search/result.jsx +0 -71
  400. package/src/js/components/switcher/GroupedSwitcher.jsx +0 -42
  401. package/src/js/components/switcher/Switcher.jsx +0 -54
  402. package/src/js/components/switcher/SwitcherButton.jsx +0 -23
  403. package/src/js/components/switcher/SwitcherEntry.tsx +0 -164
  404. package/src/js/components/switcher/SwitcherHeader.jsx +0 -58
  405. package/src/js/components/switcher/SwitcherStatusIcon.jsx +0 -36
  406. package/src/js/components/tag-switcher/TagSwitcher.tsx +0 -56
  407. package/src/js/components/tag-switcher/createTagSwitcherEntry.ts +0 -39
  408. package/src/js/components/tag-switcher/createTagSwitcherHeader.ts +0 -47
  409. package/src/js/components/tag-switcher/index.ts +0 -17
  410. package/src/js/components/time-filter.jsx +0 -187
  411. package/src/js/components/view-toggle-button/desktop-button.jsx +0 -13
  412. package/src/js/components/view-toggle-button/index.ts +0 -42
  413. package/src/js/components/view-toggle-button/mobile-button.tsx +0 -13
  414. package/src/js/components/view-toggle-button/view-toggle-button.jsx +0 -74
  415. package/src/js/components/view-toggle-button/viewport-button.tsx +0 -13
  416. package/src/js/config/constants/app.ts +0 -16
  417. package/src/js/config/constants/controllers.ts +0 -11
  418. package/src/js/config/feature/selections.ts +0 -13
  419. package/src/js/config/feature/sources.ts +0 -77
  420. package/src/js/config/index.ts +0 -133
  421. package/src/js/config/map/featureInteractions.ts +0 -53
  422. package/src/js/config/map/interactions.ts +0 -15
  423. package/src/js/config/map/layers.ts +0 -190
  424. package/src/js/controllers/defaults.ts +0 -36
  425. package/src/js/embed/browser.ts +0 -89
  426. package/src/js/embed/node.ts +0 -57
  427. package/src/js/filters/tag-filter.ts +0 -135
  428. package/src/js/filters/time-filter.ts +0 -53
  429. package/src/js/helpers/components.ts +0 -66
  430. package/src/js/helpers/create-action-watcher.ts +0 -35
  431. package/src/js/helpers/events.ts +0 -11
  432. package/src/js/helpers/get-feature-property.ts +0 -14
  433. package/src/js/helpers/i18n/de.ts +0 -145
  434. package/src/js/helpers/i18n/en.ts +0 -140
  435. package/src/js/helpers/i18n/index.ts +0 -41
  436. package/src/js/helpers/makeReplaceableComponent.ts +0 -0
  437. package/src/js/helpers/mod-classes.ts +0 -47
  438. package/src/js/helpers/react.ts +0 -14
  439. package/src/js/helpers/scroll-to-element-top.ts +0 -16
  440. package/src/js/helpers/sort-features-by-distance.ts +0 -102
  441. package/src/js/helpers/sticky.js +0 -143
  442. package/src/js/hooks/useCallbackRef.ts +0 -14
  443. package/src/js/hooks/useControllableState.ts +0 -50
  444. package/src/js/hooks/useDebounce.ts +0 -32
  445. package/src/js/hooks/useHandleEscapeKeyDown.ts +0 -27
  446. package/src/js/hooks/useMapsightPanel.ts +0 -40
  447. package/src/js/hooks/useMountable.ts +0 -47
  448. package/src/js/hooks/usePrevious.ts +0 -15
  449. package/src/js/hooks/useStickyHeader.ts +0 -50
  450. package/src/js/hooks/useUpdateMapSizeCallback.ts +0 -32
  451. package/src/js/hooks/useUpdateMapSizeOnRender.ts +0 -16
  452. package/src/js/hooks/useUpdateMapSizeOnTransitionEnd.ts +0 -40
  453. package/src/js/hooks/useUpdateMapSizeOnViewChange.ts +0 -36
  454. package/src/js/index.ts +0 -320
  455. package/src/js/plugins/browser/app-title.ts +0 -36
  456. package/src/js/plugins/browser/debug.ts +0 -37
  457. package/src/js/plugins/browser/feature-deep-link.ts +0 -223
  458. package/src/js/plugins/browser/local-storage.ts +0 -79
  459. package/src/js/plugins/browser/native-fullscreen.ts +0 -81
  460. package/src/js/plugins/browser/no-scroll.ts +0 -91
  461. package/src/js/plugins/browser/partial-content-changed-event.ts +0 -23
  462. package/src/js/plugins/browser/piwik-track-feature-selection-event.ts +0 -75
  463. package/src/js/plugins/browser/piwik-track-fullscreen-toggle-event.ts +0 -46
  464. package/src/js/plugins/browser/search.ts +0 -42
  465. package/src/js/plugins/browser/share-position-link.ts +0 -463
  466. package/src/js/plugins/browser/toggle-mobile-views.ts +0 -60
  467. package/src/js/plugins/browser/user-geolocation.ts +0 -142
  468. package/src/js/plugins/browser/views.ts +0 -141
  469. package/src/js/plugins/browser-defaults.ts +0 -101
  470. package/src/js/plugins/common/feature-selection-details-url.ts +0 -135
  471. package/src/js/plugins/common/lang.ts +0 -17
  472. package/src/js/plugins/common/measure-distance.ts +0 -223
  473. package/src/js/plugins/common/ol-proxy.ts +0 -68
  474. package/src/js/plugins/common/render-await-feature-details-loaded.ts +0 -154
  475. package/src/js/plugins/common/render-await-list-feature-sources-loaded.ts +0 -109
  476. package/src/js/plugins/server/feature-deep-link.ts +0 -67
  477. package/src/js/plugins/server-defaults.ts +0 -36
  478. package/src/js/renderer/browser-dom.tsx +0 -27
  479. package/src/js/renderer/server-string.tsx +0 -17
  480. package/src/js/server-handler.js +0 -39
  481. package/src/js/store/actions.ts +0 -662
  482. package/src/js/store/reducers.ts +0 -491
  483. package/src/js/store/selectors.ts +0 -483
  484. package/src/js/types.ts +0 -405
@@ -1,47 +0,0 @@
1
- import {useEffect, useState} from "react";
2
-
3
- export type Mountable = {
4
- /** mount function, receives element as parameter */
5
- mount(element: Element): void;
6
-
7
- /** unmount function, receives element as parameter */
8
- unmount(element: Element): void;
9
- };
10
-
11
- export function isMountable(obj: object): obj is Mountable {
12
- return (
13
- "mount" in obj &&
14
- typeof obj.mount === "function" &&
15
- "unmount" in obj &&
16
- typeof obj.unmount === "function"
17
- );
18
- }
19
-
20
- /**
21
- * Mounts the mountable object to the element
22
- *
23
- * @param mountable mountable object
24
- * @returns callback to set target
25
- */
26
- export default function useMountable(mountable: undefined | Mountable) {
27
- const [target, setTarget] = useState<undefined | Element>();
28
-
29
- useEffect(() => {
30
- if (!mountable) {
31
- console.info("mount failed, no mountable");
32
- return;
33
- }
34
-
35
- if (!target) {
36
- console.info("mount failed, no target");
37
- return;
38
- }
39
-
40
- mountable.mount(target);
41
- return () => {
42
- mountable.unmount(target);
43
- };
44
- }, [target, mountable]);
45
-
46
- return setTarget;
47
- }
@@ -1,15 +0,0 @@
1
- import {useEffect, useRef} from "react";
2
-
3
- export default function usePrevious<T>(value: T): T | null {
4
- // The ref object is a generic container whose current property is mutable ...
5
- // ... and can hold any value, similar to an instance property on a class
6
- const ref = useRef<T | null>(null);
7
-
8
- // Store current value in ref
9
- useEffect(() => {
10
- ref.current = value;
11
- }, [value]); // Only re-run if value changes
12
-
13
- // Return previous value (happens before update in useEffect above)
14
- return ref.current;
15
- }
@@ -1,50 +0,0 @@
1
- import type {DependencyList} from "react";
2
- import {useCallback, useEffect, useRef, useState} from "react";
3
-
4
- type Options = {
5
- stuckHeaderHeight?: number;
6
- resetDeps?: DependencyList;
7
- };
8
-
9
- export default function useStickyHeader<
10
- TElement extends HTMLElement = HTMLElement,
11
- >({stuckHeaderHeight = 30, resetDeps = []}: Options) {
12
- const [isHeaderStuck, setIsHeaderStuck] = useState(false);
13
- const [stickThreshold, setStickThreshold] = useState(0);
14
-
15
- const stickyHeaderRef = useRef<TElement | null>(null);
16
- const stickyScrollAreaRef = useRef<{scrollTop: number} | null>(null);
17
-
18
- const onScroll = useCallback(
19
- (e: React.UIEvent<HTMLDivElement, UIEvent>) => {
20
- setIsHeaderStuck(stickThreshold < e.currentTarget.scrollTop);
21
- },
22
- [stickThreshold],
23
- );
24
-
25
- useEffect(
26
- () => {
27
- if (stickyScrollAreaRef.current) {
28
- stickyScrollAreaRef.current.scrollTop = 0;
29
- }
30
-
31
- setIsHeaderStuck(false);
32
- },
33
- // eslint-disable-next-line react-hooks/exhaustive-deps
34
- [...resetDeps],
35
- );
36
-
37
- useEffect(() => {
38
- if (stickyHeaderRef.current) {
39
- const headerSize = stickyHeaderRef.current.offsetHeight;
40
- setStickThreshold(headerSize - stuckHeaderHeight);
41
- }
42
- }, [stickyHeaderRef.current?.offsetHeight, stuckHeaderHeight]);
43
-
44
- return {
45
- isHeaderStuck,
46
- stickyHeaderRef,
47
- stickyScrollAreaRef,
48
- onScroll,
49
- };
50
- }
@@ -1,32 +0,0 @@
1
- import type {RefObject} from "react";
2
- import {useCallback} from "react";
3
-
4
- import type {Dispatch} from "@reduxjs/toolkit";
5
-
6
- import {async} from "@mapsight/core/lib/base/actions";
7
- import {updateMapSize} from "@mapsight/core/lib/map/actions";
8
-
9
- import {MAP} from "../config/constants/controllers";
10
- import type {MainPanelPosition} from "../types";
11
-
12
- export default function useUpdateMapSizeCallback(
13
- // TODO: use hook
14
- dispatch: Dispatch,
15
- // TODO: why is this a ref?
16
- positionRef?: RefObject<MainPanelPosition | null>,
17
- reCenter: boolean = true,
18
- ) {
19
- return useCallback(
20
- function updateMapSizeCallback() {
21
- dispatch(
22
- async(
23
- updateMapSize(MAP, {
24
- from: positionRef?.current,
25
- reCenter,
26
- }),
27
- ),
28
- );
29
- },
30
- [dispatch, positionRef, reCenter],
31
- );
32
- }
@@ -1,16 +0,0 @@
1
- import {useEffect} from "react";
2
-
3
- import type {Dispatch} from "@reduxjs/toolkit";
4
-
5
- import useUpdateMapSizeCallback from "./useUpdateMapSizeCallback";
6
-
7
- export default function useUpdateMapSizeOnRender(
8
- // TODO: use hook
9
- dispatch: Dispatch<any>,
10
- ) {
11
- const updateMapSize = useUpdateMapSizeCallback(dispatch, undefined, false);
12
- useEffect(() => {
13
- console.log("UPDATE MAP SIZE ON RENDER");
14
- return updateMapSize();
15
- }, [updateMapSize]);
16
- }
@@ -1,40 +0,0 @@
1
- import type {RefObject} from "react";
2
- import {useEffect} from "react";
3
-
4
- import type {Dispatch} from "@reduxjs/toolkit";
5
-
6
- import type {MainPanelPosition} from "../types";
7
- import useUpdateMapSizeCallback from "./useUpdateMapSizeCallback";
8
-
9
- export default function useUpdateMapSizeOnTransitionEnd(
10
- target: undefined | Element,
11
- // TODO: use hook
12
- dispatch: Dispatch,
13
- // TODO: why is this a ref?
14
- positionRef?: RefObject<MainPanelPosition | null>,
15
- reCenter: boolean = true,
16
- ) {
17
- const updateMapSize = useUpdateMapSizeCallback(
18
- dispatch,
19
- positionRef,
20
- reCenter,
21
- );
22
-
23
- useEffect(() => {
24
- if (target === undefined) {
25
- return;
26
- }
27
-
28
- const handleTransitionEnd = (e: Event) => {
29
- if (e.target === target) {
30
- console.log("UPDATE MAP SIZE ON TRANSITION END");
31
- updateMapSize();
32
- }
33
- };
34
-
35
- target.addEventListener("transitionend", handleTransitionEnd);
36
- return () => {
37
- target.removeEventListener("transitionend", handleTransitionEnd);
38
- };
39
- }, [target, updateMapSize]);
40
- }
@@ -1,36 +0,0 @@
1
- import {useEffect} from "react";
2
-
3
- import type {Store} from "@reduxjs/toolkit";
4
-
5
- import {updateMapSize} from "@mapsight/core/lib/map/actions";
6
-
7
- import identity from "@mapsight/lib-js/util/identity";
8
-
9
- import {VIEW_MAP_ONLY, VIEW_MOBILE} from "../config/constants/app";
10
- import {MAP} from "../config/constants/controllers";
11
- import type {MapsightUiView} from "../types";
12
- import usePrevious from "./usePrevious";
13
-
14
- export default function useUpdateMapSizeOnViewChange(
15
- // TODO: use hook
16
- view: MapsightUiView,
17
- // TODO: use hook
18
- store: Store,
19
- ) {
20
- const prevView = usePrevious(view);
21
-
22
- useEffect(() => {
23
- const didViewChangeBetweenMobileAndMapOnly =
24
- (prevView === VIEW_MOBILE && view === VIEW_MAP_ONLY) ||
25
- (view === VIEW_MOBILE && prevView === VIEW_MAP_ONLY);
26
- const options = didViewChangeBetweenMobileAndMapOnly
27
- ? identity<Parameters<typeof updateMapSize>[1]>({
28
- from: "below",
29
- to: "below",
30
- reCenter: false,
31
- })
32
- : undefined;
33
-
34
- store.dispatch(updateMapSize(MAP, options));
35
- }, [prevView, view, store]);
36
- }
package/src/js/index.ts DELETED
@@ -1,320 +0,0 @@
1
- import {applyMiddleware, compose} from "@reduxjs/toolkit";
2
- import merge from "lodash/merge";
3
- import {thunk} from "redux-thunk";
4
-
5
- import {createMapsightStore} from "@mapsight/core";
6
- import {layerIdsExternalSwitcherSelector} from "@mapsight/core/lib/map/selectors";
7
- import {type State} from "@mapsight/core/types";
8
-
9
- import * as nonNull from "@mapsight/lib-js/nonNullable";
10
- import type {MapsightStyleFunction} from "@mapsight/lib-ol/style/styleFunction";
11
-
12
- import {siteConfig} from "./config";
13
- import {VIEW_MOBILE} from "./config/constants/app";
14
- import * as c from "./config/constants/controllers";
15
- import {createDefaultControllers} from "./controllers/defaults";
16
- import uiReducers from "./store/reducers";
17
- import type {
18
- CreateOptions,
19
- MapsightUiContext,
20
- MapsightUiRenderer,
21
- MapsightUiRendererProps,
22
- MapsightUiStore,
23
- PluginDefinition,
24
- PluginPhase,
25
- } from "./types";
26
-
27
- /**
28
- * Default mapsight ui renderer (Does nothing but log a warning!).
29
- */
30
- const defaultRenderer: MapsightUiRenderer<void> = (
31
- _container,
32
- _props,
33
- _hydrate = false,
34
- ) => {
35
- console.info("create has to be passed a renderer to render the app");
36
- };
37
-
38
- // FIXME: What's the point in having this if it's all undefined?
39
- const defaultCreateOptions: CreateOptions = {
40
- baseUrl: undefined,
41
- imagesUrl: undefined,
42
- // search
43
- searchUrl: undefined,
44
- searchQueryParameter: undefined,
45
- reHydratedState: undefined,
46
- uiState: {
47
- isFullscreen: false,
48
- listQuery: "",
49
- listSorting: undefined,
50
- listPage: 0, // current page
51
- searchQuery: "",
52
- searchResult: {},
53
- searchResultSelectionFeatures: [],
54
- title: "",
55
- userPreferenceListVisible: true,
56
- mapIsOutOfViewport: false,
57
-
58
- // views
59
- view: VIEW_MOBILE, // mobile first
60
- viewBreakpoints: [],
61
-
62
- embeddedMap: false, // map is embedded which switch some behaviours which would be annoying
63
- searchInMap: true, // enable address search in map overlay
64
-
65
- pageTitle: {
66
- show: true, // show page title
67
- },
68
- tagSwitcher: {
69
- show: false, // turn on tag switcher which will filter
70
- featureSourceId: undefined,
71
- featureSourcesControllerName: c.FEATURE_SOURCES,
72
- toggleableGroups: false, // make group names (headers) buttons that toggle on/off groups
73
- sortTags: false, // sort tags with locale sort, but not the tagGroups. to sort tagGroups add all tagGroups to first feature entry (but with empty tags if the entry doesn't have tags for a tagGroup)
74
- },
75
- viewToggle: {
76
- show: true,
77
- deselectFeaturesOnToggle: true,
78
- },
79
- layerSwitcher: {
80
- show: {
81
- internal: true,
82
- external: false,
83
- },
84
- internal: {
85
- layerIdsSelector: undefined, // implied default: layer ids of layers viewed in internal Selector
86
- grouped: false,
87
- },
88
- external: {
89
- // FIXME: function in redux state?
90
- layerIdsSelector: layerIdsExternalSwitcherSelector,
91
- grouped: true,
92
- },
93
- },
94
- list: {
95
- selectionBehavior: {
96
- desktop: "scrollToMap", // always 'scrollToMap' for now
97
- mobile: "expandInList", // either 'expandInList', 'scrollToMap', 'showInMapOnlyView'
98
- },
99
- detailsInList: false, // if true details will always be shown in list even if not on mobile
100
- showSelectedOnly: false, // don't show list entries, only show the selected one (need some other kind of communication, cyclingControl or icons on the map)
101
- highlightOnMouse: true, // highlights list item on mouse enter (and un-highlights on leave)
102
- selectOnClick: true, // select on click to selected list item
103
- deselectOnClick: false, // deselect on click to selected list item
104
- cyclingControl: false, // show a control to select next or previous list entry
105
- sortControl: true, // show sort control icon
106
- filterControl: true, // show filter box
107
- paginationControl: false, // show pagination
108
- itemsPerPage: 10, // number of items per page
109
- stickyHeader: true, // make list header sticky?
110
- showVaryingListInfoOnly: true, // show info column only, if the contents vary (determined before list filter)
111
- },
112
- featureSelectionInfo: {
113
- stickyHeader: false, // make feature selection info header sticky?
114
- stuckHeaderHeight: 30, // px
115
- },
116
- regions: {},
117
- places: {},
118
- },
119
-
120
- plugins: [],
121
- renderer: defaultRenderer,
122
- components: {},
123
- renderBreakpoints: {
124
- // NOTE: Keep in sync with css!
125
- mobile: [0, 767],
126
- tablet: [768, 1014],
127
- desktop: [1015, -1],
128
- },
129
- partialChangeHandler: undefined,
130
-
131
- // add additional reducers
132
- reducers: {...uiReducers},
133
- };
134
-
135
- /**
136
- * Creates an mapsight ui instance
137
- *
138
- * @param container element the mapsight ui app should be rendered into
139
- * @param styleFunction the mapsight core vector style function (see @mapsight/core)
140
- * @param [baseMapsightConfig] base mapsight configuration TODO: document further
141
- * @param [createOptions] ui creation options TODO: document further
142
- * @returns mapsight ui instance
143
- */
144
- export function create(
145
- container: HTMLElement | null,
146
- styleFunction: MapsightStyleFunction,
147
- baseMapsightConfig: Partial<State> = {},
148
- createOptions: CreateOptions = {},
149
- ): MapsightUiContext {
150
- const context: MapsightUiContext = {
151
- hasRendered: false,
152
- container: container,
153
- styleFunction: styleFunction,
154
- baseMapsightConfig: baseMapsightConfig,
155
- createOptions: merge({}, defaultCreateOptions, createOptions),
156
- appChannelListeners: [],
157
- };
158
-
159
- // transfer some create options to global site config to make them available even outside of the redux context
160
- // TODO: Replace this mechanic with an explicit API, e.g. exposing the site config directly as `@mapsight/ui/site-config` or
161
- // make them local to the mapsight ui context to allow for several independent instances with different site configs
162
- siteConfig.baseUrl = context.createOptions.baseUrl ?? siteConfig.baseUrl;
163
- siteConfig.imagesUrl =
164
- context.createOptions.imagesUrl || siteConfig.imagesUrl;
165
- siteConfig.searchUrl =
166
- context.createOptions.searchUrl || siteConfig.searchUrl;
167
- siteConfig.searchQueryParameter =
168
- context.createOptions.searchQueryParameter ||
169
- siteConfig.searchQueryParameter;
170
-
171
- // initial state
172
- context.initialState = merge({}, context.baseMapsightConfig, {
173
- app: context.createOptions.uiState,
174
- });
175
- delete context.createOptions.uiState;
176
-
177
- // override initial state by re-hydration
178
- context.isStateReHydrated = false;
179
- if (context.createOptions.reHydratedState !== undefined) {
180
- context.isStateReHydrated = true;
181
- merge(context.initialState, context.createOptions.reHydratedState);
182
- }
183
-
184
- // setup controllers
185
- context.controllers = Object.assign(
186
- createDefaultControllers(context),
187
- context.createOptions.controllers,
188
- );
189
-
190
- // store enhancer
191
- const uiStoreEnhancer = applyMiddleware(thunk);
192
- // @ts-expect-error TODO
193
- context.storeEnhancer = context.createOptions.storeEnhancer
194
- ? compose(uiStoreEnhancer, context.createOptions.storeEnhancer)
195
- : uiStoreEnhancer;
196
-
197
- // plugin: afterInit
198
- callAndForgetPlugins(context, "afterInit");
199
-
200
- context.store = createMapsightStore<MapsightUiStore>(
201
- context.controllers,
202
- Object.fromEntries(
203
- Object.entries(context.createOptions.reducers ?? {})
204
- .map(([name, reducer]) =>
205
- nonNull.map(reducer, (reducer) => [name, reducer] as const),
206
- )
207
- .filter(nonNull.is),
208
- ),
209
- context.initialState,
210
- context.storeEnhancer,
211
- );
212
-
213
- // render
214
- function internalRender(): unknown {
215
- const hydrate = !context.hasRendered && context.isStateReHydrated;
216
- nonNull.assert(context.store);
217
- nonNull.assert(context.createOptions.renderer);
218
-
219
- const props: MapsightUiRendererProps = {
220
- store: context.store,
221
- components: context.createOptions.components || {},
222
- appChannelListeners: context.appChannelListeners,
223
- ...context.rendererProps,
224
- };
225
- context.renderRef = context.createOptions.renderer(
226
- context.container,
227
- props,
228
- hydrate,
229
- );
230
- context.hasRendered = true;
231
-
232
- callAndForgetPlugins(context, "afterRender");
233
-
234
- return context.renderRef;
235
- }
236
-
237
- // Render without waiting for plugins (for e.g. waiting on external data)
238
- context.render = function mapsightUiRender(rendererProps) {
239
- context.rendererProps = rendererProps;
240
- context.canPluginsDelayRender = false;
241
-
242
- callAndForgetPlugins(context, "beforeRender");
243
-
244
- return internalRender();
245
- };
246
-
247
- // Render allowing plugins to delay render (for e.g. waiting on external data)
248
- context.renderAsync = async function mapsightUiRenderAsync(rendererProps) {
249
- context.rendererProps = rendererProps;
250
- context.canPluginsDelayRender = true;
251
-
252
- await callAndAwaitPlugins(context, "beforeRender");
253
-
254
- return internalRender();
255
- };
256
-
257
- // plugin: afterCreate
258
- callAndForgetPlugins(context, "afterCreate");
259
-
260
- return context;
261
- }
262
-
263
- /**
264
- * Overrides plugins with the same name (last to come wins), null unsets the plugin,
265
- * Flattened order is in order of first occurrence of a name.
266
- *
267
- * @param plugins (sorted) array of plugin definitions to be flattened, null unsets
268
- * @returns flattened plugin definitions
269
- */
270
- function flattenPlugins(plugins: Array<PluginDefinition>) {
271
- const pluginPositionByName: Record<string, number> = {};
272
- const flattenedPlugins: Array<PluginDefinition> = [];
273
-
274
- plugins.forEach(function filterPlugin(plugin) {
275
- const [key] = plugin;
276
- const position = pluginPositionByName[key];
277
- if (position !== undefined) {
278
- flattenedPlugins.splice(position, 1, plugin);
279
- } else {
280
- pluginPositionByName[key] = flattenedPlugins.length;
281
- flattenedPlugins.push(plugin);
282
- }
283
- });
284
-
285
- return flattenedPlugins.filter(([_, plugin]) => !!plugin);
286
- }
287
-
288
- /**
289
- * @param context context in which the plugin will be called
290
- * @param phase phase of the plugin
291
- * @returns array of plugin call return values
292
- */
293
- function callPlugins(
294
- context: MapsightUiContext,
295
- phase: PluginPhase,
296
- ): Array<Promise<unknown>> {
297
- return flattenPlugins(context.createOptions?.plugins ?? [])
298
- .map(([_name, plugin]) => plugin?.[phase]?.(context) ?? undefined)
299
- .filter(nonNull.is);
300
- }
301
-
302
- /**
303
- @param context context in which the plugin will be called
304
- @param phase phase of the plugin
305
- */
306
- function callAndForgetPlugins(context: MapsightUiContext, phase: PluginPhase) {
307
- Promise.allSettled(callPlugins(context, phase)).catch(() => {});
308
- }
309
-
310
- /**
311
- * @param context context in which the plugin will be called
312
- * @param phase phase of the plugin
313
- * @returns promise that all plugins are resolved
314
- */
315
- async function callAndAwaitPlugins(
316
- context: MapsightUiContext,
317
- phase: PluginPhase,
318
- ): Promise<void> {
319
- await Promise.all(callPlugins(context, phase));
320
- }
@@ -1,36 +0,0 @@
1
- import {setAppTitle} from "../../store/actions";
2
- import type {PluginInstance} from "../../types";
3
-
4
- const defaultRendererPropName = "title";
5
-
6
- /**
7
- * This plugin will apply a title on render passed as a prop to the renderer.
8
- *
9
- * @param [options] options currently not used
10
- * @param [options.rendererPropName="title"] title property name passed to the renderer
11
- * @returns plugin instance
12
- */
13
- export default function createPlugin(
14
- options: {
15
- rendererPropName?: string;
16
- } = {},
17
- ): PluginInstance {
18
- const {rendererPropName = defaultRendererPropName} = options;
19
-
20
- return {
21
- beforeRender: function appTitleRenderPlugin(context) {
22
- const {store, rendererProps} = context;
23
-
24
- if (!store || !rendererProps) {
25
- return;
26
- }
27
-
28
- if (
29
- rendererPropName in rendererProps &&
30
- rendererProps[rendererPropName]
31
- ) {
32
- store.dispatch(setAppTitle(rendererProps[rendererPropName]));
33
- }
34
- },
35
- };
36
- }
@@ -1,37 +0,0 @@
1
- import type {MapController} from "@mapsight/core/lib/map/controller";
2
- import {getIdForLayer} from "@mapsight/core/lib/map/lib/tagLayer";
3
-
4
- import type {PluginInstance} from "../../types";
5
-
6
- const defaultGlobalVariableName = "MSUI";
7
-
8
- /**
9
- * This plugin will make debug info available in a global variable.
10
- */
11
- export default function createPlugin(
12
- options: {
13
- globalVariableName?: string;
14
- } = {},
15
- ): PluginInstance {
16
- const {globalVariableName = defaultGlobalVariableName} = options;
17
-
18
- return {
19
- afterCreate: (ctx) => {
20
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
21
- // @ts-ignore
22
- window[globalVariableName] = {
23
- context: ctx,
24
- getLayerObjects() {
25
- const layerMap = {};
26
- (ctx.controllers?.map as MapController)
27
- .getMap()
28
- ?.getAllLayers()
29
- .forEach((l, i) => {
30
- layerMap[getIdForLayer(l) ?? "unnamed_" + i] = l;
31
- });
32
- return layerMap;
33
- },
34
- };
35
- },
36
- };
37
- }