@rio-cloud/rio-uikit 2.3.0-beta.2 → 2.3.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/Marker.js +9 -5
- package/Table.js +10 -9
- package/TableNext.js +10 -9
- package/TableRowActionsDropdown.d.ts +2 -0
- package/TableRowActionsDropdown.js +5 -0
- package/TableRowActionsDropdown.js.map +1 -0
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.d.ts +38 -3
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js +104 -109
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js.map +1 -1
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.d.ts +24 -5
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js +60 -56
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js.map +1 -1
- package/components/datepicker/DayPicker.js +72 -70
- package/components/datepicker/DayPicker.js.map +1 -1
- package/components/datepicker/DayPickerDropdown.d.ts +1 -0
- package/components/datepicker/DayPickerDropdown.js +61 -48
- package/components/datepicker/DayPickerDropdown.js.map +1 -1
- package/components/datepicker/useStackedDayPickerCalendars.js +26 -26
- package/components/datepicker/useStackedDayPickerCalendars.js.map +1 -1
- package/components/dropdown/ButtonDropdown.d.ts +4 -0
- package/components/dropdown/ButtonDropdown.js +82 -80
- package/components/dropdown/ButtonDropdown.js.map +1 -1
- package/components/listMenu/ListMenu.d.ts +8 -0
- package/components/listMenu/ListMenu.js +74 -66
- package/components/listMenu/ListMenu.js.map +1 -1
- package/components/map/components/Map.js +207 -156
- package/components/map/components/Map.js.map +1 -1
- package/components/map/components/MapContext.d.ts +3 -0
- package/components/map/components/MapContext.js +9 -6
- package/components/map/components/MapContext.js.map +1 -1
- package/components/map/components/features/MapZoom.js +19 -19
- package/components/map/components/features/MapZoom.js.map +1 -1
- package/components/map/components/features/Route.d.ts +65 -1
- package/components/map/components/features/Route.js +184 -98
- package/components/map/components/features/Route.js.map +1 -1
- package/components/map/components/features/basics/Marker.d.ts +21 -1
- package/components/map/components/features/basics/Marker.js +99 -40
- package/components/map/components/features/basics/Marker.js.map +1 -1
- package/components/map/components/features/basics/Polygon.d.ts +24 -1
- package/components/map/components/features/basics/Polygon.js +72 -19
- package/components/map/components/features/basics/Polygon.js.map +1 -1
- package/components/map/components/features/basics/Polyline.d.ts +29 -0
- package/components/map/components/features/basics/Polyline.js +69 -39
- package/components/map/components/features/basics/Polyline.js.map +1 -1
- package/components/map/components/features/layers/MarkerLayer.js +8 -8
- package/components/map/components/features/layers/MarkerLayer.js.map +1 -1
- package/components/map/components/features/layers/clustering/SimpleClusterLayer.js +13 -6
- package/components/map/components/features/layers/clustering/SimpleClusterLayer.js.map +1 -1
- package/components/map/utils/clustering.d.ts +1 -1
- package/components/map/utils/clustering.js +30 -30
- package/components/map/utils/clustering.js.map +1 -1
- package/components/map/utils/mapTypes.d.ts +141 -0
- package/components/map/utils/mapTypes.js.map +1 -1
- package/components/map/utils/mapUtils.d.ts +2 -0
- package/components/map/utils/mapUtils.js +4 -0
- package/components/map/utils/mapUtils.js.map +1 -1
- package/components/mapMarker/ClusterMapMarker.d.ts +2 -0
- package/components/mapMarker/ClusterMapMarker.js.map +1 -1
- package/components/mapMarker/SingleMapMarker.d.ts +2 -0
- package/components/mapMarker/SingleMapMarker.js.map +1 -1
- package/components/selects/ClearButton.js +9 -7
- package/components/selects/ClearButton.js.map +1 -1
- package/components/table/Table.d.ts +3 -1
- package/components/table/Table.js +239 -216
- package/components/table/Table.js.map +1 -1
- package/components/table/Table.types.d.ts +62 -4
- package/components/table/TableColumn.d.ts +8 -1
- package/components/table/TableColumn.js +66 -64
- package/components/table/TableColumn.js.map +1 -1
- package/components/table/TableExpandedRow.d.ts +4 -0
- package/components/table/TableExpandedRow.js +70 -67
- package/components/table/TableExpandedRow.js.map +1 -1
- package/components/table/TableGroupRow.d.ts +3 -1
- package/components/table/TableGroupRow.js +15 -14
- package/components/table/TableGroupRow.js.map +1 -1
- package/components/table/TableHeader.d.ts +9 -0
- package/components/table/TableHeader.js +110 -81
- package/components/table/TableHeader.js.map +1 -1
- package/components/table/TableHeaderColumn.d.ts +11 -1
- package/components/table/TableHeaderColumn.js +63 -58
- package/components/table/TableHeaderColumn.js.map +1 -1
- package/components/table/TableRow.d.ts +12 -0
- package/components/table/TableRow.js +78 -74
- package/components/table/TableRow.js.map +1 -1
- package/components/table/TableRowActionsDropdown.d.ts +11 -0
- package/components/table/TableRowActionsDropdown.js +22 -0
- package/components/table/TableRowActionsDropdown.js.map +1 -0
- package/components/table/TableStickyRowButton.d.ts +25 -0
- package/components/table/TableStickyRowButton.js +32 -0
- package/components/table/TableStickyRowButton.js.map +1 -0
- package/components/table/TableToolbar.d.ts +24 -3
- package/components/table/TableToolbar.js +78 -37
- package/components/table/TableToolbar.js.map +1 -1
- package/components/table/TableViewToggles.js +5 -5
- package/components/table/TableViewToggles.js.map +1 -1
- package/components/table/context/TableInteractionContext.d.ts +3 -0
- package/components/table/context/TableInteractionContext.js.map +1 -1
- package/components/table/context/TableLayoutContext.d.ts +1 -0
- package/components/table/context/TableLayoutContext.js.map +1 -1
- package/components/table/context/TableRenderContext.d.ts +1 -0
- package/components/table/context/TableRenderContext.js.map +1 -1
- package/components/table/layout/useHorizontalSectionSync.d.ts +2 -1
- package/components/table/layout/useHorizontalSectionSync.js +32 -31
- package/components/table/layout/useHorizontalSectionSync.js.map +1 -1
- package/components/table/layout/useMeasuredColumnMaxWidths.js +52 -54
- package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
- package/components/table/layout/useTableLayout.d.ts +6 -2
- package/components/table/layout/useTableLayout.js +61 -48
- package/components/table/layout/useTableLayout.js.map +1 -1
- package/components/table/layout/useTableVirtualization.js +51 -56
- package/components/table/layout/useTableVirtualization.js.map +1 -1
- package/components/table/model/resolveResponsiveViewType.d.ts +2 -0
- package/components/table/model/resolveResponsiveViewType.js +27 -0
- package/components/table/model/resolveResponsiveViewType.js.map +1 -0
- package/components/table/render/header/TableDraggableHeaderCell.js +38 -36
- package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -1
- package/components/table/render/header/TableHeader.types.d.ts +2 -0
- package/components/table/render/header/TableHeaderCellContent.js +16 -16
- package/components/table/render/header/TableHeaderCellContent.js.map +1 -1
- package/components/table/render/header/TableHeaderSelectionCell.d.ts +1 -0
- package/components/table/render/header/TableHeaderSelectionCell.js +13 -12
- package/components/table/render/header/TableHeaderSelectionCell.js.map +1 -1
- package/components/table/render/header/TableStaticHeaderCell.js +31 -29
- package/components/table/render/header/TableStaticHeaderCell.js.map +1 -1
- package/components/table/render/header/resolveHeaderCellClassName.d.ts +1 -0
- package/components/table/render/header/resolveHeaderCellClassName.js +10 -9
- package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -1
- package/components/table/runtime/useResolvedRenderColumns.d.ts +4 -4
- package/components/table/runtime/useResolvedRenderColumns.js +13 -13
- package/components/table/runtime/useResolvedRenderColumns.js.map +1 -1
- package/components/table/runtime/useResolvedRenderHeader.d.ts +1 -1
- package/components/table/runtime/useResolvedRenderHeader.js.map +1 -1
- package/components/table/runtime/useResponsiveResolvedViewType.d.ts +23 -0
- package/components/table/runtime/useResponsiveResolvedViewType.js +22 -0
- package/components/table/runtime/useResponsiveResolvedViewType.js.map +1 -0
- package/components/table/selection/useInternalTableSelectionState.d.ts +2 -0
- package/components/table/selection/useInternalTableSelectionState.js +27 -17
- package/components/table/selection/useInternalTableSelectionState.js.map +1 -1
- package/components/table/selection/useTableSelection.d.ts +5 -1
- package/components/table/selection/useTableSelection.js +37 -26
- package/components/table/selection/useTableSelection.js.map +1 -1
- package/components/table/shared/parsePixelSize.d.ts +2 -0
- package/components/table/shared/parsePixelSize.js +13 -0
- package/components/table/shared/parsePixelSize.js.map +1 -0
- package/hooks/useDraggableElement.d.ts +27 -5
- package/hooks/useDraggableElement.js +100 -23
- package/hooks/useDraggableElement.js.map +1 -1
- package/hooks/usePopperDropdown.d.ts +1 -0
- package/hooks/usePopperDropdown.js +15 -12
- package/hooks/usePopperDropdown.js.map +1 -1
- package/hooks/useResizeObserver.d.ts +25 -6
- package/hooks/useResizeObserver.js +20 -18
- package/hooks/useResizeObserver.js.map +1 -1
- package/package.json +10 -10
- package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -1
- package/utils/init/initConfig.js +5 -5
- package/utils/init/initConfig.js.map +1 -1
- package/version.d.ts +1 -1
- package/version.js +2 -2
- package/version.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListMenu.js","sources":["../../../src/components/listMenu/ListMenu.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState, type MouseEvent, type ReactNode } from 'react';\nimport { isEmpty } from 'es-toolkit/compat';\n\nimport classNames from '../../utils/classNames';\nimport useEffectOnce from '../../hooks/useEffectOnce';\nimport ClearableInput from '../clearableInput/ClearableInput';\nimport ExpanderPanel from '../expander/ExpanderPanel';\nimport ListMenuGroup, { type ListMenuNavItem, type ListMenuItem } from './ListMenuGroup';\nimport useEsc from '../../hooks/useEsc';\nimport useWindowResize from '../../hooks/useWindowResize';\nimport useKey from '../../hooks/useKey';\nimport { debounce } from 'es-toolkit/function';\n\nexport type { ListMenuNavItem, ListMenuItem } from './ListMenuGroup';\n\nconst RESIZE_THROTTLING = 10;\nconst MOBILE_MAX_WIDTH = 580;\n\nconst filterMenuItems = <T extends ListMenuNavItem>(\n items: ListMenuItem<T>[],\n value: string,\n filterKey: keyof T\n): ListMenuItem<T>[] =>\n items.map(item => ({\n ...item,\n navItems: item.navItems.filter(navItem =>\n (navItem[filterKey] as string).toLowerCase().includes(value.toLowerCase())\n ),\n }));\n\nconst hasMenuItems = <T extends ListMenuNavItem>(items: ListMenuItem<T>[]) =>\n items.find(({ navItems }) => !isEmpty(navItems));\n\nexport type ListMenuProps<T extends ListMenuNavItem> = {\n /**\n * List of menu item groups to be shown.\n */\n menuItems: ListMenuItem<T>[];\n\n /**\n * Enables the filter.\n *\n * @default false\n */\n enableFilter?: boolean;\n\n /**\n * Focus the filter input.\n *\n * @default false\n */\n focusFilter?: boolean;\n\n /**\n * Define the attribute key for filtering.\n *\n * @default 'key'\n */\n filterKey?: keyof T;\n\n /**\n * The placeholder text for the filter input.\n */\n filterPlaceholder?: string;\n\n /**\n * Gets called when the filter input changes.\n *\n * @param value\n * @returns\n */\n onFilterChange?: (value: string) => void;\n\n /**\n * A localized message to be shown when the filter result is empty.\n */\n notFoundMessage?: string | ReactNode;\n\n /**\n * The menu uses collapses on smaller screens using an expander panel.\n *\n * @default true\n */\n responsive?: boolean;\n\n /**\n * Enables automatic closing of the expander panel.\n *\n * Only relevant when using the `responsive` flag. Note: Make sure to not stop the events from bubbling up when\n * clicking on a list item!\n *\n * Using `event.stopPropagation()` will prevent the panel from closing.\n *\n * @default true\n */\n autoClose?: boolean;\n\n /**\n * Additional classes to be set on the menu group element.\n */\n groupClassName?: string;\n\n /**\n * Additional addon for the input group.\n */\n trailingInputAddon?: React.ReactNode;\n\n /**\n * Additional classes to be set on the wrapper element.\n */\n className?: string;\n};\n\nconst ListMenu = <T extends ListMenuNavItem>(props: ListMenuProps<T>) => {\n const {\n menuItems,\n focusFilter = false,\n enableFilter = false,\n filterPlaceholder,\n onFilterChange = () => {},\n notFoundMessage,\n className = '',\n groupClassName = '',\n responsive = true,\n autoClose = true,\n filterKey = 'key',\n trailingInputAddon,\n ...remainingProps\n } = props;\n\n const [filterValue, setFilterValue] = useState('');\n const [isMobileMode, setIsMobileMode] = useState(false);\n const [isExpanderOpen, setIsExpanderOpen] = useState(false);\n const [mobileHeader, setMobileHeader] = useState<ReactNode>('');\n\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const buildMobileHeader = () => {\n if (responsive && listRef.current) {\n const [activeElement] = listRef.current.getElementsByClassName('active') as HTMLCollectionOf<HTMLElement>;\n setMobileHeader(\n <div className='display-flex align-items-center'>\n <span className='rioglyph rioglyph-menu-hamburger margin-right-10' />\n <span>{activeElement?.innerText}</span>\n </div>\n );\n }\n };\n\n // clear filter input on esc\n useEsc(() => {\n if (enableFilter && inputRef.current === document.activeElement) {\n setFilterValue('');\n }\n });\n\n // Convert the menu to an expandable panel for smaller screens\n const handleMobileSize = debounce(() => {\n buildMobileHeader();\n setIsMobileMode(window.innerWidth < MOBILE_MAX_WIDTH);\n }, RESIZE_THROTTLING);\n\n // Render a dropdown menu on mobile on mount\n useEffect(handleMobileSize, []);\n\n useWindowResize(handleMobileSize);\n\n const focusInput = () => {\n inputRef.current?.focus();\n };\n\n useKey((event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key === 'k') {\n event.preventDefault();\n focusInput();\n }\n });\n\n // Focus filter input if requested\n useEffectOnce(() => {\n focusFilter && focusInput();\n });\n\n useEffect(() => buildMobileHeader, [menuItems]);\n\n const handleClear = () => focusFilter && focusInput();\n\n const handleFilterChange = (value: string) => {\n setFilterValue(value);\n onFilterChange(value);\n };\n\n const filteredMenuItems = filterMenuItems(menuItems, filterValue, filterKey);\n\n const handleExpanderBodyClick = (event: MouseEvent) => {\n const isListItem = (event.target as HTMLDivElement).parentElement?.tagName.toLowerCase() === 'li';\n if (autoClose && isListItem) {\n setIsExpanderOpen(false);\n }\n };\n\n const formClassNames = classNames(\n 'form-group',\n 'margin-bottom-5',\n 'padding-left-15',\n 'padding-right-15',\n 'padding-bottom-15',\n 'position-sticky',\n 'top-0',\n 'z-index-1'\n );\n\n const listMenu = (\n <div {...remainingProps} className={`ListMenu ${className} ${filterValue ? 'filtered' : ''}`} ref={listRef}>\n {enableFilter && (\n <div className={formClassNames}>\n <div className='input-group width-100pct'>\n <span className='input-group-addon'>\n <span className='rioglyph rioglyph-search' aria-hidden='true' />\n </span>\n <ClearableInput\n value={filterValue}\n inputRef={inputRef}\n placeholder={filterPlaceholder}\n onChange={handleFilterChange}\n onClear={handleClear}\n />\n {trailingInputAddon && trailingInputAddon}\n </div>\n </div>\n )}\n\n {!hasMenuItems(filteredMenuItems) && (\n <div className='padding-top-25 text-center text-color-gray'>{notFoundMessage}</div>\n )}\n\n {filteredMenuItems.map((menuGroup, index) => (\n <ListMenuGroup key={index} className={groupClassName} menuGroup={menuGroup} />\n ))}\n </div>\n );\n\n if (responsive && isMobileMode) {\n return (\n <ExpanderPanel\n title={mobileHeader}\n bsStyle='default'\n open={isExpanderOpen}\n onToggle={() => setIsExpanderOpen(!isExpanderOpen)}\n unmountOnExit={false}\n className='shadow-default'\n >\n <div onClick={handleExpanderBodyClick}>{listMenu}</div>\n </ExpanderPanel>\n );\n }\n\n return listMenu;\n};\n\nexport default ListMenu;\n"],"names":["RESIZE_THROTTLING","MOBILE_MAX_WIDTH","filterMenuItems","items","value","filterKey","item","navItem","hasMenuItems","navItems","isEmpty","ListMenu","props","menuItems","focusFilter","enableFilter","filterPlaceholder","onFilterChange","notFoundMessage","className","groupClassName","responsive","autoClose","trailingInputAddon","remainingProps","filterValue","setFilterValue","useState","isMobileMode","setIsMobileMode","isExpanderOpen","setIsExpanderOpen","mobileHeader","setMobileHeader","inputRef","useRef","listRef","buildMobileHeader","activeElement","jsxs","jsx","useEsc","handleMobileSize","debounce","useEffect","useWindowResize","focusInput","useKey","event","useEffectOnce","handleClear","handleFilterChange","filteredMenuItems","handleExpanderBodyClick","isListItem","formClassNames","classNames","listMenu","ClearableInput","menuGroup","index","ListMenuGroup","ExpanderPanel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListMenu.js","sources":["../../../src/components/listMenu/ListMenu.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState, type MouseEvent, type ReactNode } from 'react';\nimport { isEmpty } from 'es-toolkit/compat';\n\nimport classNames from '../../utils/classNames';\nimport useEffectOnce from '../../hooks/useEffectOnce';\nimport useSearchHighlight from '../../hooks/useSearchHighlight';\nimport ClearableInput from '../clearableInput/ClearableInput';\nimport ExpanderPanel from '../expander/ExpanderPanel';\nimport ListMenuGroup, { type ListMenuNavItem, type ListMenuItem } from './ListMenuGroup';\nimport useEsc from '../../hooks/useEsc';\nimport useWindowResize from '../../hooks/useWindowResize';\nimport useKey from '../../hooks/useKey';\nimport { debounce } from 'es-toolkit/function';\n\nexport type { ListMenuNavItem, ListMenuItem } from './ListMenuGroup';\n\nconst RESIZE_THROTTLING = 10;\nconst MOBILE_MAX_WIDTH = 580;\n\nconst filterMenuItems = <T extends ListMenuNavItem>(\n items: ListMenuItem<T>[],\n value: string,\n filterKey: keyof T\n): ListMenuItem<T>[] =>\n items.map(item => ({\n ...item,\n navItems: item.navItems.filter(navItem =>\n (navItem[filterKey] as string).toLowerCase().includes(value.toLowerCase())\n ),\n }));\n\nconst hasMenuItems = <T extends ListMenuNavItem>(items: ListMenuItem<T>[]) =>\n items.find(({ navItems }) => !isEmpty(navItems));\n\ntype ListMenuFilterFn<T extends ListMenuNavItem> = (\n items: ListMenuItem<T>[],\n value: string,\n filterKey: keyof T\n) => ListMenuItem<T>[];\n\nexport type ListMenuProps<T extends ListMenuNavItem> = {\n /**\n * List of menu item groups to be shown.\n */\n menuItems: ListMenuItem<T>[];\n\n /**\n * Enables the filter.\n *\n * @default false\n */\n enableFilter?: boolean;\n\n /**\n * Focus the filter input.\n *\n * @default false\n */\n focusFilter?: boolean;\n\n /**\n * Define the attribute key for filtering.\n *\n * @default 'key'\n */\n filterKey?: keyof T;\n\n /**\n * The placeholder text for the filter input.\n */\n filterPlaceholder?: string;\n\n /**\n * Gets called when the filter input changes.\n *\n * @param value\n * @returns\n */\n onFilterChange?: (value: string) => void;\n\n /**\n * A localized message to be shown when the filter result is empty.\n */\n notFoundMessage?: string | ReactNode;\n\n /**\n * The menu uses collapses on smaller screens using an expander panel.\n *\n * @default true\n */\n responsive?: boolean;\n\n /**\n * Enables automatic closing of the expander panel.\n *\n * Only relevant when using the `responsive` flag. Note: Make sure to not stop the events from bubbling up when\n * clicking on a list item!\n *\n * Using `event.stopPropagation()` will prevent the panel from closing.\n *\n * @default true\n */\n autoClose?: boolean;\n\n /**\n * Additional classes to be set on the menu group element.\n */\n groupClassName?: string;\n\n /**\n * Additional addon for the input group.\n */\n trailingInputAddon?: React.ReactNode;\n\n /**\n * Additional classes to be set on the wrapper element.\n */\n className?: string;\n\n /**\n * Optional custom filter function.\n *\n * Use this when filtering should do more than a simple substring match,\n * for example fuzzy ranking or multi-field weighting.\n */\n filterFn?: ListMenuFilterFn<T>;\n};\n\nconst ListMenu = <T extends ListMenuNavItem>(props: ListMenuProps<T>) => {\n const {\n menuItems,\n focusFilter = false,\n enableFilter = false,\n filterPlaceholder,\n onFilterChange = () => {},\n notFoundMessage,\n className = '',\n groupClassName = '',\n responsive = true,\n autoClose = true,\n filterKey = 'key',\n trailingInputAddon,\n filterFn,\n ...remainingProps\n } = props;\n\n const [filterValue, setFilterValue] = useState('');\n const [isMobileMode, setIsMobileMode] = useState(false);\n const [isExpanderOpen, setIsExpanderOpen] = useState(false);\n const [mobileHeader, setMobileHeader] = useState<ReactNode>('');\n\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const buildMobileHeader = () => {\n if (responsive && listRef.current) {\n const [activeElement] = listRef.current.getElementsByClassName('active') as HTMLCollectionOf<HTMLElement>;\n setMobileHeader(\n <div className='display-flex align-items-center'>\n <span className='rioglyph rioglyph-menu-hamburger margin-right-10' />\n <span>{activeElement?.innerText}</span>\n </div>\n );\n }\n };\n\n // clear filter input on esc\n useEsc(() => {\n if (enableFilter && inputRef.current === document.activeElement) {\n setFilterValue('');\n onFilterChange('');\n }\n });\n\n // Convert the menu to an expandable panel for smaller screens\n const handleMobileSize = debounce(() => {\n buildMobileHeader();\n setIsMobileMode(window.innerWidth < MOBILE_MAX_WIDTH);\n }, RESIZE_THROTTLING);\n\n // Render a dropdown menu on mobile on mount\n useEffect(handleMobileSize, []);\n\n useWindowResize(handleMobileSize);\n\n const focusInput = () => {\n inputRef.current?.focus();\n };\n\n useKey((event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key === 'k') {\n event.preventDefault();\n focusInput();\n }\n });\n\n // Focus filter input if requested\n useEffectOnce(() => {\n focusFilter && focusInput();\n });\n\n useEffect(buildMobileHeader, [menuItems]);\n\n const handleClear = () => focusFilter && focusInput();\n\n const handleFilterChange = (value: string) => {\n setFilterValue(value);\n onFilterChange(value);\n };\n\n const filteredMenuItems = enableFilter\n ? (filterFn ?? filterMenuItems)(menuItems, filterValue, filterKey)\n : menuItems;\n\n useSearchHighlight({\n ref: listRef,\n query: enableFilter ? filterValue : '',\n deps: [filteredMenuItems],\n });\n\n const handleExpanderBodyClick = (event: MouseEvent) => {\n const isListItem = (event.target as HTMLDivElement).parentElement?.tagName.toLowerCase() === 'li';\n if (autoClose && isListItem) {\n setIsExpanderOpen(false);\n }\n };\n\n const formClassNames = classNames(\n 'form-group',\n 'margin-bottom-5',\n 'padding-left-15',\n 'padding-right-15',\n 'padding-bottom-15',\n 'position-sticky',\n 'top-0',\n 'z-index-1'\n );\n\n const listMenu = (\n <div {...remainingProps} className={`ListMenu ${className} ${filterValue ? 'filtered' : ''}`} ref={listRef}>\n {enableFilter && (\n <div className={formClassNames}>\n <div className='input-group width-100pct'>\n <span className='input-group-addon'>\n <span className='rioglyph rioglyph-search' aria-hidden='true' />\n </span>\n <ClearableInput\n value={filterValue}\n inputRef={inputRef}\n placeholder={filterPlaceholder}\n onChange={handleFilterChange}\n onClear={handleClear}\n />\n {trailingInputAddon && trailingInputAddon}\n </div>\n </div>\n )}\n\n {!hasMenuItems(filteredMenuItems) && (\n <div className='padding-top-25 text-center text-color-gray'>{notFoundMessage}</div>\n )}\n\n {filteredMenuItems.map((menuGroup, index) => (\n <ListMenuGroup key={index} className={groupClassName} menuGroup={menuGroup} />\n ))}\n </div>\n );\n\n if (responsive && isMobileMode) {\n return (\n <ExpanderPanel\n title={mobileHeader}\n bsStyle='default'\n open={isExpanderOpen}\n onToggle={() => setIsExpanderOpen(!isExpanderOpen)}\n unmountOnExit={false}\n className='shadow-default'\n >\n <div onClick={handleExpanderBodyClick}>{listMenu}</div>\n </ExpanderPanel>\n );\n }\n\n return listMenu;\n};\n\nexport default ListMenu;\n"],"names":["RESIZE_THROTTLING","MOBILE_MAX_WIDTH","filterMenuItems","items","value","filterKey","item","navItem","hasMenuItems","navItems","isEmpty","ListMenu","props","menuItems","focusFilter","enableFilter","filterPlaceholder","onFilterChange","notFoundMessage","className","groupClassName","responsive","autoClose","trailingInputAddon","filterFn","remainingProps","filterValue","setFilterValue","useState","isMobileMode","setIsMobileMode","isExpanderOpen","setIsExpanderOpen","mobileHeader","setMobileHeader","inputRef","useRef","listRef","buildMobileHeader","activeElement","jsxs","jsx","useEsc","handleMobileSize","debounce","useEffect","useWindowResize","focusInput","useKey","event","useEffectOnce","handleClear","handleFilterChange","filteredMenuItems","useSearchHighlight","handleExpanderBodyClick","isListItem","formClassNames","classNames","listMenu","ClearableInput","menuGroup","index","ListMenuGroup","ExpanderPanel"],"mappings":"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"}
|
|
@@ -1,193 +1,244 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useRef as
|
|
3
|
-
import { isEmpty as
|
|
4
|
-
import { isEqual as
|
|
5
|
-
import { DEFAULT_MAX_ZOOM as
|
|
6
|
-
import { removeEventListenerMap as
|
|
7
|
-
import { MapContext as
|
|
8
|
-
import { getMapBounds as
|
|
9
|
-
import { getHereUi as
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import { getPlatform as
|
|
17
|
-
const
|
|
1
|
+
import { jsx as c, jsxs as Fe } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as I, useState as i, useEffect as l } from "react";
|
|
3
|
+
import { isEmpty as Be } from "es-toolkit/compat";
|
|
4
|
+
import { isEqual as ke } from "es-toolkit/predicate";
|
|
5
|
+
import { DEFAULT_MAX_ZOOM as ce, MAP_TYPE_DEFAULT as y, DEFAULT_PIXEL_RATIO as He, DEFAULT_MIN_ZOOM as Ue, MAP_LAYER_ROAD_RESTRICTIONS as pe, MAP_TYPE_NIGHT as k, MAP_TYPE_FLEET_STYLE as ze, MAP_TYPE_SATELLITE as je, MAP_TYPE_TERRAIN as Ve, MAP_LAYER_INCIDENTS as We, MAP_LAYER_TRAFFIC as qe } from "./constants.js";
|
|
6
|
+
import { removeEventListenerMap as Ge, addEventListenerMap as Ke } from "../utils/eventHandling.js";
|
|
7
|
+
import { MapContext as Xe } from "./MapContext.js";
|
|
8
|
+
import { getMapBounds as $e, createUtils as Je } from "../utils/mapUtils.js";
|
|
9
|
+
import { getHereUi as Qe } from "../utils/mapUi.js";
|
|
10
|
+
import et from "../../../hooks/useDarkMode.js";
|
|
11
|
+
import tt from "./features/MapZoom.js";
|
|
12
|
+
import nt from "./features/layers/MapOverlayLayers.js";
|
|
13
|
+
import at from "./MapSize.js";
|
|
14
|
+
import ot from "./MapPosition.js";
|
|
15
|
+
import rt from "./MapElements.js";
|
|
16
|
+
import { getPlatform as st, getBaseLayer as it, getEngineType as lt } from "../utils/rendering.js";
|
|
17
|
+
const mt = "map-disable-marker-pointer-events", ct = 140, s = (ue) => {
|
|
18
18
|
const {
|
|
19
|
-
children:
|
|
20
|
-
credentials:
|
|
21
|
-
width:
|
|
22
|
-
height:
|
|
23
|
-
language:
|
|
24
|
-
center:
|
|
25
|
-
zoom:
|
|
26
|
-
zoomAnimation:
|
|
27
|
-
boundingBox:
|
|
28
|
-
hideClusterSettings:
|
|
29
|
-
hideMapLayerSettings:
|
|
30
|
-
disableMapEvents:
|
|
31
|
-
disableBehavior:
|
|
32
|
-
disableZoomMomentum:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
19
|
+
children: Ee,
|
|
20
|
+
credentials: U,
|
|
21
|
+
width: z,
|
|
22
|
+
height: j,
|
|
23
|
+
language: de = "en",
|
|
24
|
+
center: V,
|
|
25
|
+
zoom: W,
|
|
26
|
+
zoomAnimation: q = !1,
|
|
27
|
+
boundingBox: S,
|
|
28
|
+
hideClusterSettings: ve = !1,
|
|
29
|
+
hideMapLayerSettings: fe = !1,
|
|
30
|
+
disableMapEvents: G,
|
|
31
|
+
disableBehavior: K = !1,
|
|
32
|
+
disableZoomMomentum: X = !0,
|
|
33
|
+
enableFractionalZoom: b = !1,
|
|
34
|
+
eventListenerMap: he,
|
|
35
|
+
mapType: L = y,
|
|
36
|
+
mapLayer: p = [],
|
|
37
|
+
showCluster: w = !0,
|
|
38
|
+
showScaleBar: Me = !1,
|
|
39
|
+
onMapLayerChange: Le = () => {
|
|
39
40
|
},
|
|
40
|
-
onMapTypeChange:
|
|
41
|
+
onMapTypeChange: Te = () => {
|
|
41
42
|
},
|
|
42
|
-
onShowClusterChange:
|
|
43
|
+
onShowClusterChange: ge = () => {
|
|
43
44
|
},
|
|
44
|
-
onZoomIn:
|
|
45
|
+
onZoomIn: _e = () => {
|
|
45
46
|
},
|
|
46
|
-
onZoomOut:
|
|
47
|
+
onZoomOut: Ae = () => {
|
|
47
48
|
},
|
|
48
|
-
onIncidentsChange:
|
|
49
|
+
onIncidentsChange: Re = () => {
|
|
49
50
|
},
|
|
50
|
-
mapSettingsTooltip:
|
|
51
|
-
mapSettings:
|
|
52
|
-
enableWebGL:
|
|
53
|
-
enableDevicePixelRatio:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
T((
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
51
|
+
mapSettingsTooltip: Pe,
|
|
52
|
+
mapSettings: $,
|
|
53
|
+
enableWebGL: u = !0,
|
|
54
|
+
enableDevicePixelRatio: J = !0,
|
|
55
|
+
enableMarkerIconCache: Ce = !0,
|
|
56
|
+
disableMarkerPointerEventsWhileZooming: E = !1,
|
|
57
|
+
pixelRatio: Q = He,
|
|
58
|
+
minZoom: T = Ue,
|
|
59
|
+
maxZoom: O = ce
|
|
60
|
+
} = ue;
|
|
61
|
+
let D = O;
|
|
62
|
+
T > O && (D = ce, console.error("Invalid condition for zoom limits: min <= max)"));
|
|
63
|
+
const g = I(null), d = I(), ee = I(!1), N = I(E), [Ie, ye] = i(!1), [Se, _] = i(!1), [t, be] = i(), [o, we] = i(L), [r, te] = i(p), [ne, ae] = i(w), oe = J && window.devicePixelRatio || Q, m = /* @__PURE__ */ ((e) => e === "nb" ? "no" : e)(de.split("-")[0].toLowerCase()), v = (e) => {
|
|
64
|
+
if (e && !N.current)
|
|
65
|
+
return;
|
|
66
|
+
const a = g.current;
|
|
67
|
+
a && (a.classList.toggle(mt, e), ee.current = e);
|
|
68
|
+
}, f = () => {
|
|
69
|
+
d.current !== void 0 && (window.clearTimeout(d.current), d.current = void 0);
|
|
70
|
+
}, re = () => {
|
|
71
|
+
f(), d.current = window.setTimeout(() => {
|
|
72
|
+
v(!1), _(!1), d.current = void 0;
|
|
73
|
+
}, ct);
|
|
74
|
+
}, se = () => {
|
|
75
|
+
_(!0), f(), N.current && !ee.current && v(!0);
|
|
76
|
+
};
|
|
77
|
+
l(() => {
|
|
78
|
+
N.current = E;
|
|
79
|
+
}, [E]), l(() => {
|
|
80
|
+
const e = g.current;
|
|
81
|
+
if (!e)
|
|
82
|
+
return;
|
|
83
|
+
const a = () => {
|
|
84
|
+
se(), re();
|
|
85
|
+
};
|
|
86
|
+
return e.addEventListener("wheel", a, { passive: !0, capture: !0 }), () => {
|
|
87
|
+
e.removeEventListener("wheel", a, { capture: !0 });
|
|
88
|
+
};
|
|
89
|
+
}, []), l(() => {
|
|
90
|
+
let e = [], a = () => {
|
|
91
|
+
};
|
|
92
|
+
t?.map ? (e = t.map.getObjects(), console.debug("re-initialize here map")) : console.debug("initialize here map"), t?.map && (console.debug("disposing previous map"), Ge(t.map), t.mapEvents && t.mapEvents.dispose(), t.map.dispose());
|
|
93
|
+
const P = S && $e(S), h = st(U), M = lt(o, u), x = h.createDefaultLayers({ engineType: M, lg: m, pois: !0 });
|
|
94
|
+
return it({
|
|
66
95
|
baseLayerName: o,
|
|
67
|
-
defaultLayers:
|
|
68
|
-
enableWebGL:
|
|
69
|
-
platform:
|
|
70
|
-
engineType:
|
|
71
|
-
vehicleRestrictions:
|
|
72
|
-
language:
|
|
73
|
-
minZoom:
|
|
74
|
-
maxZoom:
|
|
75
|
-
}).then((
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
96
|
+
defaultLayers: x,
|
|
97
|
+
enableWebGL: u,
|
|
98
|
+
platform: h,
|
|
99
|
+
engineType: M,
|
|
100
|
+
vehicleRestrictions: r.includes(pe),
|
|
101
|
+
language: m,
|
|
102
|
+
minZoom: T,
|
|
103
|
+
maxZoom: D
|
|
104
|
+
}).then((F) => {
|
|
105
|
+
const le = () => {
|
|
106
|
+
se();
|
|
107
|
+
}, me = () => {
|
|
108
|
+
re();
|
|
109
|
+
}, n = new H.Map(g.current, F.baseLayer, {
|
|
110
|
+
zoom: W,
|
|
111
|
+
center: V,
|
|
112
|
+
bounds: P,
|
|
113
|
+
engineType: M,
|
|
114
|
+
pixelRatio: oe,
|
|
82
115
|
fixedCenter: !0
|
|
83
116
|
});
|
|
84
|
-
|
|
85
|
-
let
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
credentials:
|
|
90
|
-
defaultLayers:
|
|
91
|
-
map:
|
|
92
|
-
mapEvents:
|
|
93
|
-
behavior:
|
|
94
|
-
platform:
|
|
95
|
-
ui:
|
|
96
|
-
utils:
|
|
117
|
+
F.overlayLayer && n.addLayer(F.overlayLayer), ye(!0);
|
|
118
|
+
let B = !1, C;
|
|
119
|
+
G || (B = new H.mapevents.MapEvents(n)), G || K || (C = new H.mapevents.Behavior(B), b || C.disable(H.mapevents.Behavior.Feature.FRACTIONAL_ZOOM), X && C.disable(H.mapevents.Behavior.Feature.ZOOM_MOMENTUM)), Ke(n, he, n), n.addEventListener("mapviewchangestart", le), n.addEventListener("mapviewchangeend", me);
|
|
120
|
+
const xe = Qe(n, x, Me, m);
|
|
121
|
+
be({
|
|
122
|
+
credentials: U,
|
|
123
|
+
defaultLayers: x,
|
|
124
|
+
map: n,
|
|
125
|
+
mapEvents: B,
|
|
126
|
+
behavior: C,
|
|
127
|
+
platform: h,
|
|
128
|
+
ui: xe,
|
|
129
|
+
utils: Je(n),
|
|
97
130
|
// Put settings back into the map API object so the invoking service
|
|
98
131
|
// can check on these settings for instance inside a test
|
|
99
132
|
settings: {
|
|
100
|
-
enableWebGL:
|
|
133
|
+
enableWebGL: u,
|
|
101
134
|
baseLayer: o,
|
|
102
|
-
activeLayers:
|
|
103
|
-
showCluster:
|
|
104
|
-
minZoom:
|
|
105
|
-
maxZoom:
|
|
135
|
+
activeLayers: r,
|
|
136
|
+
showCluster: ne,
|
|
137
|
+
minZoom: T,
|
|
138
|
+
maxZoom: D
|
|
106
139
|
}
|
|
107
|
-
}), e &&
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}, [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
140
|
+
}), e && n.addObjects(e), a = () => {
|
|
141
|
+
n.removeEventListener("mapviewchangestart", le), n.removeEventListener("mapviewchangeend", me);
|
|
142
|
+
};
|
|
143
|
+
}), () => {
|
|
144
|
+
a(), f(), v(!1), _(!1);
|
|
145
|
+
};
|
|
146
|
+
}, [
|
|
147
|
+
u,
|
|
148
|
+
J,
|
|
149
|
+
m,
|
|
150
|
+
o,
|
|
151
|
+
T,
|
|
152
|
+
O,
|
|
153
|
+
X,
|
|
154
|
+
b
|
|
155
|
+
]), l(() => (E || (f(), v(!1)), () => {
|
|
156
|
+
f(), v(!1), _(!1);
|
|
157
|
+
}), [E]);
|
|
158
|
+
const Y = et();
|
|
159
|
+
l(() => {
|
|
160
|
+
Y && o === y ? A(k) : !Y && o === k && A(y);
|
|
161
|
+
}, [Y, m]), l(() => A(L), [L]);
|
|
162
|
+
const [Oe, De] = i(p);
|
|
163
|
+
ke(p, Oe) || (te(p), De(p)), l(() => ae(w), [w]);
|
|
164
|
+
const A = (e) => {
|
|
165
|
+
we(e), Te(e, L);
|
|
166
|
+
}, Ne = (e) => {
|
|
167
|
+
const a = (h) => r.filter((M) => M !== h), P = r.includes(e) ? a(e) : [...r, e];
|
|
168
|
+
te(P), Le(P, r);
|
|
169
|
+
}, Ye = (e) => {
|
|
170
|
+
ae(e), ge(e);
|
|
171
|
+
}, ie = () => {
|
|
124
172
|
document.querySelector(".AssetTree")?.classList.add("pointer-events-none");
|
|
125
|
-
},
|
|
173
|
+
}, Z = () => {
|
|
126
174
|
document.querySelector(".AssetTree")?.classList.remove("pointer-events-none");
|
|
127
|
-
},
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
return /* @__PURE__ */
|
|
175
|
+
}, R = {};
|
|
176
|
+
j && (R.height = j), z && (R.width = z);
|
|
177
|
+
const Ze = Be(R) ? "height-100pct" : "";
|
|
178
|
+
return /* @__PURE__ */ c(
|
|
131
179
|
"div",
|
|
132
180
|
{
|
|
133
|
-
className: `Map position-relative map-type-${o.toLowerCase()} ${
|
|
134
|
-
style:
|
|
135
|
-
ref:
|
|
136
|
-
onTouchStart:
|
|
137
|
-
onTouchEnd:
|
|
138
|
-
onMouseEnter:
|
|
139
|
-
onMouseOut:
|
|
140
|
-
onBlur:
|
|
141
|
-
children:
|
|
142
|
-
|
|
181
|
+
className: `Map position-relative map-type-${o.toLowerCase()} ${Ze}`,
|
|
182
|
+
style: R,
|
|
183
|
+
ref: g,
|
|
184
|
+
onTouchStart: ie,
|
|
185
|
+
onTouchEnd: Z,
|
|
186
|
+
onMouseEnter: ie,
|
|
187
|
+
onMouseOut: Z,
|
|
188
|
+
onBlur: Z,
|
|
189
|
+
children: Ie && t && /* @__PURE__ */ Fe(
|
|
190
|
+
Xe.Provider,
|
|
143
191
|
{
|
|
144
192
|
value: {
|
|
145
193
|
api: t,
|
|
146
|
-
language:
|
|
147
|
-
enableWebGL:
|
|
148
|
-
|
|
149
|
-
|
|
194
|
+
language: m,
|
|
195
|
+
enableWebGL: u,
|
|
196
|
+
enableMarkerIconCache: Ce,
|
|
197
|
+
enableFractionalZoom: b,
|
|
198
|
+
isZoomInteractionActive: Se,
|
|
199
|
+
showCluster: ne,
|
|
200
|
+
activeLayers: r,
|
|
150
201
|
baseLayer: o,
|
|
151
|
-
hideMapLayerSettings:
|
|
152
|
-
hideClusterSettings:
|
|
153
|
-
onMapTypeChange:
|
|
154
|
-
onMapLayerChange:
|
|
155
|
-
onShowClusterChange:
|
|
156
|
-
mapSettingsTooltip:
|
|
157
|
-
onIncidentsChange:
|
|
158
|
-
devicePixelRatio:
|
|
202
|
+
hideMapLayerSettings: fe,
|
|
203
|
+
hideClusterSettings: ve,
|
|
204
|
+
onMapTypeChange: A,
|
|
205
|
+
onMapLayerChange: Ne,
|
|
206
|
+
onShowClusterChange: Ye,
|
|
207
|
+
mapSettingsTooltip: Pe,
|
|
208
|
+
onIncidentsChange: Re,
|
|
209
|
+
devicePixelRatio: oe
|
|
159
210
|
},
|
|
160
211
|
children: [
|
|
161
|
-
/* @__PURE__ */
|
|
162
|
-
/* @__PURE__ */
|
|
163
|
-
/* @__PURE__ */
|
|
164
|
-
|
|
212
|
+
/* @__PURE__ */ c(ot, { api: t, boundingBox: S, center: V, zoomAnimation: q }),
|
|
213
|
+
/* @__PURE__ */ c(at, { api: t }),
|
|
214
|
+
/* @__PURE__ */ c(
|
|
215
|
+
tt,
|
|
165
216
|
{
|
|
166
|
-
zoom:
|
|
167
|
-
hideZoomButtons:
|
|
168
|
-
onZoomIn:
|
|
169
|
-
onZoomOut:
|
|
170
|
-
zoomAnimation:
|
|
217
|
+
zoom: W,
|
|
218
|
+
hideZoomButtons: K,
|
|
219
|
+
onZoomIn: _e,
|
|
220
|
+
onZoomOut: Ae,
|
|
221
|
+
zoomAnimation: q
|
|
171
222
|
}
|
|
172
223
|
),
|
|
173
|
-
|
|
174
|
-
/* @__PURE__ */
|
|
175
|
-
/* @__PURE__ */
|
|
224
|
+
$ && $,
|
|
225
|
+
/* @__PURE__ */ c(nt, { layers: r }),
|
|
226
|
+
/* @__PURE__ */ c(rt, { api: t, children: Ee })
|
|
176
227
|
]
|
|
177
228
|
}
|
|
178
229
|
)
|
|
179
230
|
}
|
|
180
231
|
);
|
|
181
232
|
};
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
233
|
+
s.TYPE_DEFAULT = y;
|
|
234
|
+
s.TYPE_FLEET_STYLE = ze;
|
|
235
|
+
s.TYPE_SATELLITE = je;
|
|
236
|
+
s.TYPE_TERRAIN = Ve;
|
|
237
|
+
s.TYPE_NIGHT = k;
|
|
238
|
+
s.LAYER_INCIDENTS = We;
|
|
239
|
+
s.LAYER_TRAFFIC = qe;
|
|
240
|
+
s.LAYER_ROAD_RESTRICTIONS = pe;
|
|
190
241
|
export {
|
|
191
|
-
|
|
242
|
+
s as default
|
|
192
243
|
};
|
|
193
244
|
//# sourceMappingURL=Map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.js","sources":["../../../../src/components/map/components/Map.tsx"],"sourcesContent":["import { useRef, useState, useEffect, type CSSProperties } from 'react';\nimport { isEmpty } from 'es-toolkit/compat';\nimport { isEqual } from 'es-toolkit/predicate';\n\nimport {\n MAP_TYPE_DEFAULT,\n MAP_TYPE_FLEET_STYLE,\n MAP_TYPE_SATELLITE,\n MAP_TYPE_TERRAIN,\n MAP_TYPE_NIGHT,\n MAP_LAYER_INCIDENTS,\n MAP_LAYER_TRAFFIC,\n MAP_LAYER_ROAD_RESTRICTIONS,\n DEFAULT_MIN_ZOOM,\n DEFAULT_MAX_ZOOM,\n DEFAULT_PIXEL_RATIO,\n} from './constants';\n\nimport { addEventListenerMap, removeEventListenerMap } from '../utils/eventHandling';\nimport { MapContext } from './MapContext';\nimport { createUtils, getMapBounds } from '../utils/mapUtils';\nimport { getHereUi } from '../utils/mapUi';\nimport useDarkMode from '../../../hooks/useDarkMode';\nimport MapZoom from './features/MapZoom';\nimport MapOverlayLayers from './features/layers/MapOverlayLayers';\nimport MapSize from './MapSize';\nimport MapPosition from './MapPosition';\nimport MapElements from './MapElements';\nimport type { MapApi, MapLayer, MapProps, MapType } from '../utils/mapTypes';\nimport { getPlatform, getEngineType, getBaseLayer } from '../utils/rendering';\n\nconst Map = (props: MapProps) => {\n const {\n children,\n credentials,\n width,\n height,\n language: lang = 'en',\n center,\n zoom,\n zoomAnimation = false,\n boundingBox,\n hideClusterSettings = false,\n hideMapLayerSettings = false,\n disableMapEvents,\n disableBehavior = false,\n disableZoomMomentum = true,\n eventListenerMap,\n mapType = MAP_TYPE_DEFAULT,\n mapLayer = [],\n showCluster: externalShowCluster = true,\n showScaleBar = false,\n onMapLayerChange = () => {},\n onMapTypeChange = () => {},\n onShowClusterChange = () => {},\n onZoomIn = () => {},\n onZoomOut = () => {},\n onIncidentsChange = () => {},\n mapSettingsTooltip,\n mapSettings,\n enableWebGL = true,\n enableDevicePixelRatio = true,\n pixelRatio = DEFAULT_PIXEL_RATIO,\n minZoom = DEFAULT_MIN_ZOOM,\n maxZoom = DEFAULT_MAX_ZOOM,\n } = props;\n\n let safeMaxZoom = maxZoom;\n\n if (minZoom > maxZoom) {\n // Avoid crashing the map for invalid zoom limits\n safeMaxZoom = DEFAULT_MAX_ZOOM;\n console.error('Invalid condition for zoom limits: min <= max)');\n }\n\n const mapRef = useRef<HTMLDivElement>(null);\n\n const [isMapInitialized, setMapInitialized] = useState(false);\n\n const [api, setApi] = useState<MapApi>();\n\n const [baseLayer, setBaseLayer] = useState<MapType>(mapType);\n const [activeLayers, setActiveLayers] = useState<MapLayer[]>(mapLayer);\n const [showCluster, setShowCluster] = useState(externalShowCluster);\n\n const devicePixelRatio = enableDevicePixelRatio ? window.devicePixelRatio || pixelRatio : pixelRatio;\n\n // Only short locale is supported by HERE Map\n const language = (locale => (locale === 'nb' ? 'no' : locale))(lang.split('-')[0].toLowerCase());\n\n useEffect(() => {\n let allMapObjects: H.map.Object[] = [];\n\n if (api?.map) {\n allMapObjects = api.map.getObjects();\n console.debug('re-initialize here map');\n } else {\n console.debug('initialize here map');\n }\n\n if (api?.map) {\n // Cleanup any previously initialized map before doing anything else\n console.debug('disposing previous map');\n removeEventListenerMap(api.map);\n\n if (api.mapEvents) {\n api.mapEvents.dispose();\n }\n\n api.map.dispose();\n }\n\n const bounds = boundingBox && getMapBounds(boundingBox);\n\n // Initialize communication with the platform\n const platform = getPlatform(credentials);\n\n // Specify engine type. In this example, we use HARP rendering engine, which is capable\n // of rendering vector data using the style configuration exported from the HERE Style Editor.\n // HARP engine is not the default engine, and it's not included in the mapsjs-core.js module.\n // To use this engine, you need to include mapsjs-harp.js file to your HTML page\n const engineType = getEngineType(baseLayer, enableWebGL);\n\n // Obtain the default map types from the platform object\n // @ts-expect-error-next-line: according to the Here docs, the engine type exists\n // see https://www.here.com/docs/bundle/maps-api-for-javascript-developer-guide/page/topics/harp-migrate.html\n const defaultLayers = platform.createDefaultLayers({ engineType, lg: language, pois: true });\n\n getBaseLayer({\n baseLayerName: baseLayer,\n defaultLayers,\n enableWebGL,\n platform,\n engineType,\n vehicleRestrictions: activeLayers.includes(MAP_LAYER_ROAD_RESTRICTIONS),\n language,\n minZoom,\n maxZoom: safeMaxZoom,\n }).then(defaultLayerMap => {\n // Initialize the map\n const hereMap = new H.Map(mapRef.current as Element, defaultLayerMap.baseLayer, {\n zoom,\n center,\n bounds,\n engineType,\n pixelRatio: devicePixelRatio,\n fixedCenter: true,\n });\n\n if (defaultLayerMap.overlayLayer) {\n // Special case for satellite map where we render street labels and road signs as well as additional pois as vector data\n // hereMap.setBaseLayer(defaultLayerMap.baseLayer);\n hereMap.addLayer(defaultLayerMap.overlayLayer);\n }\n\n setMapInitialized(true);\n\n let hereMapEvents: H.mapevents.MapEvents | false = false;\n let hereBehavior: H.mapevents.Behavior | undefined;\n\n if (!disableMapEvents) {\n // Enable the map event system\n hereMapEvents = new H.mapevents.MapEvents(hereMap);\n }\n\n if (!(disableMapEvents || disableBehavior)) {\n hereBehavior = new H.mapevents.Behavior(hereMapEvents as H.mapevents.MapEvents);\n // @ts-expect-error-next-line\n hereBehavior.disable(H.mapevents.Behavior.Feature.FRACTIONAL_ZOOM);\n\n if (disableZoomMomentum) {\n // Disable the inertia that occurs on WebGL maps when scrolling/zooming.\n // This resulted in a very high scroll sensitivity.\n // @ts-expect-error-next-line\n hereBehavior.disable(H.mapevents.Behavior.Feature.ZOOM_MOMENTUM);\n }\n }\n\n addEventListenerMap(hereMap, eventListenerMap, hereMap);\n\n const hereUi = getHereUi(hereMap, defaultLayers, showScaleBar, language);\n\n // The api will be passed to services when using a render function.\n // This allows the service to access the map internals\n setApi({\n credentials,\n defaultLayers,\n map: hereMap,\n mapEvents: hereMapEvents,\n behavior: hereBehavior,\n platform,\n ui: hereUi,\n utils: createUtils(hereMap),\n // Put settings back into the map API object so the invoking service\n // can check on these settings for instance inside a test\n settings: {\n enableWebGL,\n baseLayer,\n activeLayers,\n showCluster,\n minZoom,\n maxZoom: safeMaxZoom,\n },\n });\n\n if (allMapObjects) {\n // If the base layer changed, re-add all previous objects again,\n // otherwise the map would be empty\n hereMap.addObjects(allMapObjects);\n }\n });\n }, [enableWebGL, enableDevicePixelRatio, language, baseLayer, minZoom, maxZoom]);\n\n const isDarkMode = useDarkMode();\n useEffect(() => {\n // Toggle night map only if current map type is default\n if (isDarkMode && baseLayer === MAP_TYPE_DEFAULT) {\n handleMapTypeChange(MAP_TYPE_NIGHT);\n }\n // Toggle back to default map only if current map type is night\n else if (!isDarkMode && baseLayer === MAP_TYPE_NIGHT) {\n handleMapTypeChange(MAP_TYPE_DEFAULT);\n }\n }, [isDarkMode, language]);\n\n // Update MapType from outside\n useEffect(() => handleMapTypeChange(mapType), [mapType]);\n\n // Update MapLayer from outside\n const [previousMapLayer, setPreviousMapLayer] = useState(mapLayer);\n if (!isEqual(mapLayer, previousMapLayer)) {\n setActiveLayers(mapLayer);\n setPreviousMapLayer(mapLayer);\n }\n\n // Update Cluster setting from outside\n useEffect(() => setShowCluster(externalShowCluster), [externalShowCluster]);\n\n const handleMapTypeChange = (newMapType: MapType) => {\n setBaseLayer(newMapType);\n onMapTypeChange(newMapType, mapType);\n };\n\n const handleMapLayerChange = (layer: MapLayer) => {\n const removeLayer = (layerToRemove: string) => activeLayers.filter(item => item !== layerToRemove);\n const newActiveLayers = activeLayers.includes(layer) ? removeLayer(layer) : [...activeLayers, layer];\n setActiveLayers(newActiveLayers);\n onMapLayerChange(newActiveLayers, activeLayers);\n };\n\n const handleShowClusterChange = (newShowCluster: boolean) => {\n setShowCluster(newShowCluster);\n onShowClusterChange(newShowCluster);\n };\n\n // Note: For performance reasons, we deactivate pointer events and hence CSS style recalculation for the\n // the body. Having for instance many assets in the tree causes a performance loss when clicking on the map\n // to move it and zoom in/out since the map triggers a style invalidation and recalculation and\n // due to the nature of the AssetTree with it's hundreds DOM nodes, applying the CSS selectors\n // takes time.\n const handleMapInteractionStart = () => {\n document.querySelector('.AssetTree')?.classList.add('pointer-events-none');\n };\n const handleMapInteractionEnd = () => {\n document.querySelector('.AssetTree')?.classList.remove('pointer-events-none');\n };\n\n const style: CSSProperties = {};\n if (height) {\n style.height = height;\n }\n if (width) {\n style.width = width;\n }\n const autoHeightClass = isEmpty(style) ? 'height-100pct' : '';\n\n return (\n <div\n className={`Map position-relative map-type-${baseLayer.toLowerCase()} ${autoHeightClass}`}\n style={style}\n ref={mapRef}\n onTouchStart={handleMapInteractionStart}\n onTouchEnd={handleMapInteractionEnd}\n onMouseEnter={handleMapInteractionStart}\n onMouseOut={handleMapInteractionEnd}\n onBlur={handleMapInteractionEnd}\n >\n {isMapInitialized && api && (\n <MapContext.Provider\n value={{\n api,\n language,\n enableWebGL,\n showCluster,\n activeLayers,\n baseLayer,\n hideMapLayerSettings,\n hideClusterSettings,\n onMapTypeChange: handleMapTypeChange,\n onMapLayerChange: handleMapLayerChange,\n onShowClusterChange: handleShowClusterChange,\n mapSettingsTooltip,\n onIncidentsChange,\n devicePixelRatio,\n }}\n >\n <MapPosition api={api} boundingBox={boundingBox} center={center} zoomAnimation={zoomAnimation} />\n <MapSize api={api} />\n <MapZoom\n zoom={zoom}\n hideZoomButtons={disableBehavior}\n onZoomIn={onZoomIn}\n onZoomOut={onZoomOut}\n zoomAnimation={zoomAnimation}\n />\n {mapSettings && mapSettings}\n <MapOverlayLayers layers={activeLayers} />\n <MapElements api={api}>{children}</MapElements>\n </MapContext.Provider>\n )}\n </div>\n );\n};\n\nMap.TYPE_DEFAULT = MAP_TYPE_DEFAULT;\nMap.TYPE_FLEET_STYLE = MAP_TYPE_FLEET_STYLE;\nMap.TYPE_SATELLITE = MAP_TYPE_SATELLITE;\nMap.TYPE_TERRAIN = MAP_TYPE_TERRAIN;\nMap.TYPE_NIGHT = MAP_TYPE_NIGHT;\n\nMap.LAYER_INCIDENTS = MAP_LAYER_INCIDENTS;\nMap.LAYER_TRAFFIC = MAP_LAYER_TRAFFIC;\nMap.LAYER_ROAD_RESTRICTIONS = MAP_LAYER_ROAD_RESTRICTIONS;\n\nexport default Map;\n"],"names":["Map","props","children","credentials","width","height","lang","center","zoom","zoomAnimation","boundingBox","hideClusterSettings","hideMapLayerSettings","disableMapEvents","disableBehavior","disableZoomMomentum","eventListenerMap","mapType","MAP_TYPE_DEFAULT","mapLayer","externalShowCluster","showScaleBar","onMapLayerChange","onMapTypeChange","onShowClusterChange","onZoomIn","onZoomOut","onIncidentsChange","mapSettingsTooltip","mapSettings","enableWebGL","enableDevicePixelRatio","pixelRatio","DEFAULT_PIXEL_RATIO","minZoom","DEFAULT_MIN_ZOOM","maxZoom","DEFAULT_MAX_ZOOM","safeMaxZoom","mapRef","useRef","isMapInitialized","setMapInitialized","useState","api","setApi","baseLayer","setBaseLayer","activeLayers","setActiveLayers","showCluster","setShowCluster","devicePixelRatio","language","locale","useEffect","allMapObjects","removeEventListenerMap","bounds","getMapBounds","platform","getPlatform","engineType","getEngineType","defaultLayers","getBaseLayer","MAP_LAYER_ROAD_RESTRICTIONS","defaultLayerMap","hereMap","hereMapEvents","hereBehavior","addEventListenerMap","hereUi","getHereUi","createUtils","isDarkMode","useDarkMode","handleMapTypeChange","MAP_TYPE_NIGHT","previousMapLayer","setPreviousMapLayer","isEqual","newMapType","handleMapLayerChange","layer","removeLayer","layerToRemove","item","newActiveLayers","handleShowClusterChange","newShowCluster","handleMapInteractionStart","handleMapInteractionEnd","style","autoHeightClass","isEmpty","jsx","jsxs","MapContext","MapPosition","MapSize","MapZoom","MapOverlayLayers","MapElements","MAP_TYPE_FLEET_STYLE","MAP_TYPE_SATELLITE","MAP_TYPE_TERRAIN","MAP_LAYER_INCIDENTS","MAP_LAYER_TRAFFIC"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Map.js","sources":["../../../../src/components/map/components/Map.tsx"],"sourcesContent":["import { useRef, useState, useEffect, type CSSProperties } from 'react';\nimport { isEmpty } from 'es-toolkit/compat';\nimport { isEqual } from 'es-toolkit/predicate';\n\nimport {\n MAP_TYPE_DEFAULT,\n MAP_TYPE_FLEET_STYLE,\n MAP_TYPE_SATELLITE,\n MAP_TYPE_TERRAIN,\n MAP_TYPE_NIGHT,\n MAP_LAYER_INCIDENTS,\n MAP_LAYER_TRAFFIC,\n MAP_LAYER_ROAD_RESTRICTIONS,\n DEFAULT_MIN_ZOOM,\n DEFAULT_MAX_ZOOM,\n DEFAULT_PIXEL_RATIO,\n} from './constants';\n\nimport { addEventListenerMap, removeEventListenerMap } from '../utils/eventHandling';\nimport { MapContext } from './MapContext';\nimport { createUtils, getMapBounds } from '../utils/mapUtils';\nimport { getHereUi } from '../utils/mapUi';\nimport useDarkMode from '../../../hooks/useDarkMode';\nimport MapZoom from './features/MapZoom';\nimport MapOverlayLayers from './features/layers/MapOverlayLayers';\nimport MapSize from './MapSize';\nimport MapPosition from './MapPosition';\nimport MapElements from './MapElements';\nimport type { MapApi, MapLayer, MapProps, MapType } from '../utils/mapTypes';\nimport { getPlatform, getEngineType, getBaseLayer } from '../utils/rendering';\n\nconst MARKER_POINTER_EVENTS_DISABLED_CLASS = 'map-disable-marker-pointer-events';\nconst MARKER_POINTER_EVENTS_RESET_DELAY_MS = 140;\n\nconst Map = (props: MapProps) => {\n const {\n children,\n credentials,\n width,\n height,\n language: lang = 'en',\n center,\n zoom,\n zoomAnimation = false,\n boundingBox,\n hideClusterSettings = false,\n hideMapLayerSettings = false,\n disableMapEvents,\n disableBehavior = false,\n disableZoomMomentum = true,\n enableFractionalZoom = false,\n eventListenerMap,\n mapType = MAP_TYPE_DEFAULT,\n mapLayer = [],\n showCluster: externalShowCluster = true,\n showScaleBar = false,\n onMapLayerChange = () => {},\n onMapTypeChange = () => {},\n onShowClusterChange = () => {},\n onZoomIn = () => {},\n onZoomOut = () => {},\n onIncidentsChange = () => {},\n mapSettingsTooltip,\n mapSettings,\n enableWebGL = true,\n enableDevicePixelRatio = true,\n enableMarkerIconCache = true,\n disableMarkerPointerEventsWhileZooming = false,\n pixelRatio = DEFAULT_PIXEL_RATIO,\n minZoom = DEFAULT_MIN_ZOOM,\n maxZoom = DEFAULT_MAX_ZOOM,\n } = props;\n\n let safeMaxZoom = maxZoom;\n\n if (minZoom > maxZoom) {\n // Avoid crashing the map for invalid zoom limits\n safeMaxZoom = DEFAULT_MAX_ZOOM;\n console.error('Invalid condition for zoom limits: min <= max)');\n }\n\n const mapRef = useRef<HTMLDivElement>(null);\n const markerPointerEventsResetTimeoutRef = useRef<number | undefined>();\n const markerPointerEventsDisabledRef = useRef(false);\n const disableMarkerPointerEventsWhileZoomingRef = useRef(disableMarkerPointerEventsWhileZooming);\n\n const [isMapInitialized, setMapInitialized] = useState(false);\n const [isZoomInteractionActive, setIsZoomInteractionActive] = useState(false);\n\n const [api, setApi] = useState<MapApi>();\n\n const [baseLayer, setBaseLayer] = useState<MapType>(mapType);\n const [activeLayers, setActiveLayers] = useState<MapLayer[]>(mapLayer);\n const [showCluster, setShowCluster] = useState(externalShowCluster);\n\n const devicePixelRatio = enableDevicePixelRatio ? window.devicePixelRatio || pixelRatio : pixelRatio;\n\n // Only short locale is supported by HERE Map\n const language = (locale => (locale === 'nb' ? 'no' : locale))(lang.split('-')[0].toLowerCase());\n\n const setMarkerPointerEventsDisabled = (disabled: boolean) => {\n if (disabled && !disableMarkerPointerEventsWhileZoomingRef.current) {\n return;\n }\n\n const mapElement = mapRef.current;\n\n if (!mapElement) {\n return;\n }\n\n mapElement.classList.toggle(MARKER_POINTER_EVENTS_DISABLED_CLASS, disabled);\n markerPointerEventsDisabledRef.current = disabled;\n };\n\n const clearMarkerPointerEventsResetTimeout = () => {\n if (markerPointerEventsResetTimeoutRef.current !== undefined) {\n window.clearTimeout(markerPointerEventsResetTimeoutRef.current);\n markerPointerEventsResetTimeoutRef.current = undefined;\n }\n };\n\n const scheduleMarkerPointerEventsEnable = () => {\n clearMarkerPointerEventsResetTimeout();\n markerPointerEventsResetTimeoutRef.current = window.setTimeout(() => {\n setMarkerPointerEventsDisabled(false);\n setIsZoomInteractionActive(false);\n markerPointerEventsResetTimeoutRef.current = undefined;\n }, MARKER_POINTER_EVENTS_RESET_DELAY_MS);\n };\n\n const temporarilyDisableMarkerPointerEvents = () => {\n setIsZoomInteractionActive(true);\n\n clearMarkerPointerEventsResetTimeout();\n\n if (disableMarkerPointerEventsWhileZoomingRef.current && !markerPointerEventsDisabledRef.current) {\n setMarkerPointerEventsDisabled(true);\n }\n };\n\n useEffect(() => {\n disableMarkerPointerEventsWhileZoomingRef.current = disableMarkerPointerEventsWhileZooming;\n }, [disableMarkerPointerEventsWhileZooming]);\n\n useEffect(() => {\n const mapElement = mapRef.current;\n\n if (!mapElement) {\n return;\n }\n\n const handleWheel = () => {\n temporarilyDisableMarkerPointerEvents();\n scheduleMarkerPointerEventsEnable();\n };\n\n mapElement.addEventListener('wheel', handleWheel, { passive: true, capture: true });\n\n return () => {\n mapElement.removeEventListener('wheel', handleWheel, { capture: true });\n };\n }, []);\n\n useEffect(() => {\n let allMapObjects: H.map.Object[] = [];\n let removeMapViewChangeListeners = () => {};\n\n if (api?.map) {\n allMapObjects = api.map.getObjects();\n console.debug('re-initialize here map');\n } else {\n console.debug('initialize here map');\n }\n\n if (api?.map) {\n // Cleanup any previously initialized map before doing anything else\n console.debug('disposing previous map');\n removeEventListenerMap(api.map);\n\n if (api.mapEvents) {\n api.mapEvents.dispose();\n }\n\n api.map.dispose();\n }\n\n const bounds = boundingBox && getMapBounds(boundingBox);\n\n // Initialize communication with the platform\n const platform = getPlatform(credentials);\n\n // Specify engine type. In this example, we use HARP rendering engine, which is capable\n // of rendering vector data using the style configuration exported from the HERE Style Editor.\n // HARP engine is not the default engine, and it's not included in the mapsjs-core.js module.\n // To use this engine, you need to include mapsjs-harp.js file to your HTML page\n const engineType = getEngineType(baseLayer, enableWebGL);\n\n // Obtain the default map types from the platform object\n // @ts-expect-error-next-line: according to the Here docs, the engine type exists\n // see https://www.here.com/docs/bundle/maps-api-for-javascript-developer-guide/page/topics/harp-migrate.html\n const defaultLayers = platform.createDefaultLayers({ engineType, lg: language, pois: true });\n\n getBaseLayer({\n baseLayerName: baseLayer,\n defaultLayers,\n enableWebGL,\n platform,\n engineType,\n vehicleRestrictions: activeLayers.includes(MAP_LAYER_ROAD_RESTRICTIONS),\n language,\n minZoom,\n maxZoom: safeMaxZoom,\n }).then(defaultLayerMap => {\n const handleMapViewChangeStart = () => {\n temporarilyDisableMarkerPointerEvents();\n };\n\n const handleMapViewChangeEnd = () => {\n scheduleMarkerPointerEventsEnable();\n };\n\n // Initialize the map\n const hereMap = new H.Map(mapRef.current as Element, defaultLayerMap.baseLayer, {\n zoom,\n center,\n bounds,\n engineType,\n pixelRatio: devicePixelRatio,\n fixedCenter: true,\n });\n\n if (defaultLayerMap.overlayLayer) {\n // Special case for satellite map where we render street labels and road signs as well as additional pois as vector data\n // hereMap.setBaseLayer(defaultLayerMap.baseLayer);\n hereMap.addLayer(defaultLayerMap.overlayLayer);\n }\n\n setMapInitialized(true);\n\n let hereMapEvents: H.mapevents.MapEvents | false = false;\n let hereBehavior: H.mapevents.Behavior | undefined;\n\n if (!disableMapEvents) {\n // Enable the map event system\n hereMapEvents = new H.mapevents.MapEvents(hereMap);\n }\n\n if (!(disableMapEvents || disableBehavior)) {\n hereBehavior = new H.mapevents.Behavior(hereMapEvents as H.mapevents.MapEvents);\n if (!enableFractionalZoom) {\n // Fractional zoom feels less predictable with mouse wheels in some setups,\n // but keeping it enabled can noticeably improve trackpad zoom smoothness.\n // @ts-expect-error-next-line\n hereBehavior.disable(H.mapevents.Behavior.Feature.FRACTIONAL_ZOOM);\n }\n\n if (disableZoomMomentum) {\n // Disable the inertia that occurs on WebGL maps when scrolling/zooming.\n // This resulted in a very high scroll sensitivity.\n // @ts-expect-error-next-line\n hereBehavior.disable(H.mapevents.Behavior.Feature.ZOOM_MOMENTUM);\n }\n }\n\n addEventListenerMap(hereMap, eventListenerMap, hereMap);\n hereMap.addEventListener('mapviewchangestart', handleMapViewChangeStart as EventListener);\n hereMap.addEventListener('mapviewchangeend', handleMapViewChangeEnd as EventListener);\n\n const hereUi = getHereUi(hereMap, defaultLayers, showScaleBar, language);\n\n // The api will be passed to services when using a render function.\n // This allows the service to access the map internals\n setApi({\n credentials,\n defaultLayers,\n map: hereMap,\n mapEvents: hereMapEvents,\n behavior: hereBehavior,\n platform,\n ui: hereUi,\n utils: createUtils(hereMap),\n // Put settings back into the map API object so the invoking service\n // can check on these settings for instance inside a test\n settings: {\n enableWebGL,\n baseLayer,\n activeLayers,\n showCluster,\n minZoom,\n maxZoom: safeMaxZoom,\n },\n });\n\n if (allMapObjects) {\n // If the base layer changed, re-add all previous objects again,\n // otherwise the map would be empty\n hereMap.addObjects(allMapObjects);\n }\n\n removeMapViewChangeListeners = () => {\n hereMap.removeEventListener('mapviewchangestart', handleMapViewChangeStart as EventListener);\n hereMap.removeEventListener('mapviewchangeend', handleMapViewChangeEnd as EventListener);\n };\n });\n\n return () => {\n removeMapViewChangeListeners();\n clearMarkerPointerEventsResetTimeout();\n setMarkerPointerEventsDisabled(false);\n setIsZoomInteractionActive(false);\n };\n }, [\n enableWebGL,\n enableDevicePixelRatio,\n language,\n baseLayer,\n minZoom,\n maxZoom,\n disableZoomMomentum,\n enableFractionalZoom,\n ]);\n\n useEffect(() => {\n if (!disableMarkerPointerEventsWhileZooming) {\n clearMarkerPointerEventsResetTimeout();\n setMarkerPointerEventsDisabled(false);\n }\n\n return () => {\n clearMarkerPointerEventsResetTimeout();\n setMarkerPointerEventsDisabled(false);\n setIsZoomInteractionActive(false);\n };\n }, [disableMarkerPointerEventsWhileZooming]);\n\n const isDarkMode = useDarkMode();\n useEffect(() => {\n // Toggle night map only if current map type is default\n if (isDarkMode && baseLayer === MAP_TYPE_DEFAULT) {\n handleMapTypeChange(MAP_TYPE_NIGHT);\n }\n // Toggle back to default map only if current map type is night\n else if (!isDarkMode && baseLayer === MAP_TYPE_NIGHT) {\n handleMapTypeChange(MAP_TYPE_DEFAULT);\n }\n }, [isDarkMode, language]);\n\n // Update MapType from outside\n useEffect(() => handleMapTypeChange(mapType), [mapType]);\n\n // Update MapLayer from outside\n const [previousMapLayer, setPreviousMapLayer] = useState(mapLayer);\n if (!isEqual(mapLayer, previousMapLayer)) {\n setActiveLayers(mapLayer);\n setPreviousMapLayer(mapLayer);\n }\n\n // Update Cluster setting from outside\n useEffect(() => setShowCluster(externalShowCluster), [externalShowCluster]);\n\n const handleMapTypeChange = (newMapType: MapType) => {\n setBaseLayer(newMapType);\n onMapTypeChange(newMapType, mapType);\n };\n\n const handleMapLayerChange = (layer: MapLayer) => {\n const removeLayer = (layerToRemove: string) => activeLayers.filter(item => item !== layerToRemove);\n const newActiveLayers = activeLayers.includes(layer) ? removeLayer(layer) : [...activeLayers, layer];\n setActiveLayers(newActiveLayers);\n onMapLayerChange(newActiveLayers, activeLayers);\n };\n\n const handleShowClusterChange = (newShowCluster: boolean) => {\n setShowCluster(newShowCluster);\n onShowClusterChange(newShowCluster);\n };\n\n // Note: For performance reasons, we deactivate pointer events and hence CSS style recalculation for the\n // the body. Having for instance many assets in the tree causes a performance loss when clicking on the map\n // to move it and zoom in/out since the map triggers a style invalidation and recalculation and\n // due to the nature of the AssetTree with it's hundreds DOM nodes, applying the CSS selectors\n // takes time.\n const handleMapInteractionStart = () => {\n document.querySelector('.AssetTree')?.classList.add('pointer-events-none');\n };\n const handleMapInteractionEnd = () => {\n document.querySelector('.AssetTree')?.classList.remove('pointer-events-none');\n };\n\n const style: CSSProperties = {};\n if (height) {\n style.height = height;\n }\n if (width) {\n style.width = width;\n }\n const autoHeightClass = isEmpty(style) ? 'height-100pct' : '';\n\n return (\n <div\n className={`Map position-relative map-type-${baseLayer.toLowerCase()} ${autoHeightClass}`}\n style={style}\n ref={mapRef}\n onTouchStart={handleMapInteractionStart}\n onTouchEnd={handleMapInteractionEnd}\n onMouseEnter={handleMapInteractionStart}\n onMouseOut={handleMapInteractionEnd}\n onBlur={handleMapInteractionEnd}\n >\n {isMapInitialized && api && (\n <MapContext.Provider\n value={{\n api,\n language,\n enableWebGL,\n enableMarkerIconCache,\n enableFractionalZoom,\n isZoomInteractionActive,\n showCluster,\n activeLayers,\n baseLayer,\n hideMapLayerSettings,\n hideClusterSettings,\n onMapTypeChange: handleMapTypeChange,\n onMapLayerChange: handleMapLayerChange,\n onShowClusterChange: handleShowClusterChange,\n mapSettingsTooltip,\n onIncidentsChange,\n devicePixelRatio,\n }}\n >\n <MapPosition api={api} boundingBox={boundingBox} center={center} zoomAnimation={zoomAnimation} />\n <MapSize api={api} />\n <MapZoom\n zoom={zoom}\n hideZoomButtons={disableBehavior}\n onZoomIn={onZoomIn}\n onZoomOut={onZoomOut}\n zoomAnimation={zoomAnimation}\n />\n {mapSettings && mapSettings}\n <MapOverlayLayers layers={activeLayers} />\n <MapElements api={api}>{children}</MapElements>\n </MapContext.Provider>\n )}\n </div>\n );\n};\n\nMap.TYPE_DEFAULT = MAP_TYPE_DEFAULT;\nMap.TYPE_FLEET_STYLE = MAP_TYPE_FLEET_STYLE;\nMap.TYPE_SATELLITE = MAP_TYPE_SATELLITE;\nMap.TYPE_TERRAIN = MAP_TYPE_TERRAIN;\nMap.TYPE_NIGHT = MAP_TYPE_NIGHT;\n\nMap.LAYER_INCIDENTS = MAP_LAYER_INCIDENTS;\nMap.LAYER_TRAFFIC = MAP_LAYER_TRAFFIC;\nMap.LAYER_ROAD_RESTRICTIONS = MAP_LAYER_ROAD_RESTRICTIONS;\n\nexport default Map;\n"],"names":["MARKER_POINTER_EVENTS_DISABLED_CLASS","MARKER_POINTER_EVENTS_RESET_DELAY_MS","Map","props","children","credentials","width","height","lang","center","zoom","zoomAnimation","boundingBox","hideClusterSettings","hideMapLayerSettings","disableMapEvents","disableBehavior","disableZoomMomentum","enableFractionalZoom","eventListenerMap","mapType","MAP_TYPE_DEFAULT","mapLayer","externalShowCluster","showScaleBar","onMapLayerChange","onMapTypeChange","onShowClusterChange","onZoomIn","onZoomOut","onIncidentsChange","mapSettingsTooltip","mapSettings","enableWebGL","enableDevicePixelRatio","enableMarkerIconCache","disableMarkerPointerEventsWhileZooming","pixelRatio","DEFAULT_PIXEL_RATIO","minZoom","DEFAULT_MIN_ZOOM","maxZoom","DEFAULT_MAX_ZOOM","safeMaxZoom","mapRef","useRef","markerPointerEventsResetTimeoutRef","markerPointerEventsDisabledRef","disableMarkerPointerEventsWhileZoomingRef","isMapInitialized","setMapInitialized","useState","isZoomInteractionActive","setIsZoomInteractionActive","api","setApi","baseLayer","setBaseLayer","activeLayers","setActiveLayers","showCluster","setShowCluster","devicePixelRatio","language","locale","setMarkerPointerEventsDisabled","disabled","mapElement","clearMarkerPointerEventsResetTimeout","scheduleMarkerPointerEventsEnable","temporarilyDisableMarkerPointerEvents","useEffect","handleWheel","allMapObjects","removeMapViewChangeListeners","removeEventListenerMap","bounds","getMapBounds","platform","getPlatform","engineType","getEngineType","defaultLayers","getBaseLayer","MAP_LAYER_ROAD_RESTRICTIONS","defaultLayerMap","handleMapViewChangeStart","handleMapViewChangeEnd","hereMap","hereMapEvents","hereBehavior","addEventListenerMap","hereUi","getHereUi","createUtils","isDarkMode","useDarkMode","handleMapTypeChange","MAP_TYPE_NIGHT","previousMapLayer","setPreviousMapLayer","isEqual","newMapType","handleMapLayerChange","layer","removeLayer","layerToRemove","item","newActiveLayers","handleShowClusterChange","newShowCluster","handleMapInteractionStart","handleMapInteractionEnd","style","autoHeightClass","isEmpty","jsx","jsxs","MapContext","MapPosition","MapSize","MapZoom","MapOverlayLayers","MapElements","MAP_TYPE_FLEET_STYLE","MAP_TYPE_SATELLITE","MAP_TYPE_TERRAIN","MAP_LAYER_INCIDENTS","MAP_LAYER_TRAFFIC"],"mappings":"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"}
|
|
@@ -3,6 +3,9 @@ export type MapContextType = {
|
|
|
3
3
|
api: MapApi;
|
|
4
4
|
language: string;
|
|
5
5
|
enableWebGL: boolean;
|
|
6
|
+
enableMarkerIconCache: boolean;
|
|
7
|
+
enableFractionalZoom: boolean;
|
|
8
|
+
isZoomInteractionActive: boolean;
|
|
6
9
|
baseLayer: MapType;
|
|
7
10
|
activeLayers: MapLayer[];
|
|
8
11
|
showCluster: boolean;
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { createContext as e, useContext as t } from "react";
|
|
2
|
-
import { MAP_TYPE_DEFAULT as
|
|
3
|
-
const
|
|
2
|
+
import { MAP_TYPE_DEFAULT as a } from "./constants.js";
|
|
3
|
+
const o = {
|
|
4
4
|
api: {},
|
|
5
5
|
language: "en",
|
|
6
6
|
enableWebGL: !0,
|
|
7
|
-
|
|
7
|
+
enableMarkerIconCache: !0,
|
|
8
|
+
enableFractionalZoom: !1,
|
|
9
|
+
isZoomInteractionActive: !1,
|
|
10
|
+
baseLayer: a,
|
|
8
11
|
activeLayers: [],
|
|
9
12
|
showCluster: !0,
|
|
10
13
|
devicePixelRatio: 1,
|
|
11
14
|
onIncidentsChange: () => {
|
|
12
15
|
}
|
|
13
|
-
}, n = e(
|
|
16
|
+
}, n = e(o), c = () => t(n);
|
|
14
17
|
export {
|
|
15
18
|
n as MapContext,
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
o as defaultMapContext,
|
|
20
|
+
c as useMapContext
|
|
18
21
|
};
|
|
19
22
|
//# sourceMappingURL=MapContext.js.map
|