@pega/cosmos-react-core 8.21.5 → 8.21.7
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/lib/components/Location/LocationInput.d.ts.map +1 -1
- package/lib/components/Location/LocationInput.js +76 -49
- package/lib/components/Location/LocationInput.js.map +1 -1
- package/lib/components/Location/LocationView.d.ts +2 -0
- package/lib/components/Location/LocationView.d.ts.map +1 -1
- package/lib/components/Location/LocationView.js +3 -3
- package/lib/components/Location/LocationView.js.map +1 -1
- package/lib/components/Location/utils.d.ts +2 -3
- package/lib/components/Location/utils.d.ts.map +1 -1
- package/lib/components/Location/utils.js +49 -49
- package/lib/components/Location/utils.js.map +1 -1
- package/lib/components/TextArea/TextArea.d.ts.map +1 -1
- package/lib/components/TextArea/TextArea.js +16 -4
- package/lib/components/TextArea/TextArea.js.map +1 -1
- package/lib/hooks/useI18n.d.ts +1 -0
- package/lib/hooks/useI18n.d.ts.map +1 -1
- package/lib/i18n/default.d.ts +1 -0
- package/lib/i18n/default.d.ts.map +1 -1
- package/lib/i18n/default.js +1 -0
- package/lib/i18n/default.js.map +1 -1
- package/lib/i18n/i18n.d.ts +1 -0
- package/lib/i18n/i18n.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocationInput.d.ts","sourceRoot":"","sources":["../../../src/components/Location/LocationInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,EAAE,EAAwB,MAAM,OAAO,CAAC;AAQnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgBvE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"LocationInput.d.ts","sourceRoot":"","sources":["../../../src/components/Location/LocationInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,EAAE,EAAwB,MAAM,OAAO,CAAC;AAQnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgBvE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMxD,MAAM,WAAW,kBAAmB,SAAQ,SAAS,EAAE,gBAAgB,EAAE,UAAU;IACjF;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,yGAAyG;IACzG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,KAAK,IAAI,CAAC;IACX;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;OAGG;IACH,GAAG,CAAC,EAAE;QACJ,kDAAkD;QAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACpC,SAAS,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;KACxC,CAAC;IACF,sGAAsG;IACtG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;;;;AA4UD,wBAAmE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, useCallback, useContext, useEffect, useState } from 'react';
|
|
2
|
+
import { forwardRef, useCallback, useContext, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import styled from 'styled-components';
|
|
4
4
|
import ComboBox from '../ComboBox';
|
|
5
5
|
import { useI18n, useTestIds, useUID } from '../../hooks';
|
|
@@ -14,6 +14,8 @@ import { getAddress, getCoords, getNavigatorPosition, getPlaceById, getPlacePred
|
|
|
14
14
|
import LocationView from './LocationView';
|
|
15
15
|
import { StyledLocationView } from './LocationView.styles';
|
|
16
16
|
import { getLocationInputTestIds } from './Location.test-ids';
|
|
17
|
+
// Session token timeout in milliseconds for single user interaction.
|
|
18
|
+
const sessionTokenTimeout = 120_000;
|
|
17
19
|
const StyledLocationInput = styled(ComboBox) `
|
|
18
20
|
z-index: 1;
|
|
19
21
|
`;
|
|
@@ -33,7 +35,26 @@ const LocationInput = forwardRef(function LocationInput(props, ref) {
|
|
|
33
35
|
const t = useI18n();
|
|
34
36
|
const [placePredictionMenuItems, setPlacePredictionMenuItems] = useState([]);
|
|
35
37
|
const [filterValue, setFilterValue] = useState('');
|
|
38
|
+
const [debouncedFilterValue, setDebouncedFilterValue] = useState('');
|
|
36
39
|
const [mapLoading, setMapLoading] = useState(false);
|
|
40
|
+
const sessionTokenRef = useRef();
|
|
41
|
+
const interactionTimerRef = useRef();
|
|
42
|
+
const clearInteractionTimer = useCallback(() => {
|
|
43
|
+
if (interactionTimerRef.current !== undefined) {
|
|
44
|
+
window.clearTimeout(interactionTimerRef.current);
|
|
45
|
+
interactionTimerRef.current = undefined;
|
|
46
|
+
}
|
|
47
|
+
}, []);
|
|
48
|
+
const startInteractionTimer = useCallback(() => {
|
|
49
|
+
if (interactionTimerRef.current !== undefined)
|
|
50
|
+
return;
|
|
51
|
+
interactionTimerRef.current = window.setTimeout(() => {
|
|
52
|
+
sessionTokenRef.current = undefined;
|
|
53
|
+
interactionTimerRef.current = undefined;
|
|
54
|
+
}, sessionTokenTimeout);
|
|
55
|
+
}, []);
|
|
56
|
+
useEffect(() => clearInteractionTimer, [clearInteractionTimer]);
|
|
57
|
+
const getSessionToken = useCallback(() => sessionTokenRef.current, []);
|
|
37
58
|
useEffect(() => {
|
|
38
59
|
(async () => {
|
|
39
60
|
if (defaultToCurrentLocation) {
|
|
@@ -47,12 +68,23 @@ const LocationInput = forwardRef(function LocationInput(props, ref) {
|
|
|
47
68
|
})();
|
|
48
69
|
}, []);
|
|
49
70
|
useEffect(() => {
|
|
71
|
+
if (!filterValue) {
|
|
72
|
+
setDebouncedFilterValue('');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const timer = window.setTimeout(() => setDebouncedFilterValue(filterValue), 500);
|
|
76
|
+
return () => window.clearTimeout(timer);
|
|
77
|
+
}, [filterValue]);
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
let isCurrent = true;
|
|
50
80
|
(async () => {
|
|
51
81
|
try {
|
|
52
82
|
await loadMapsAPI(name, providerOpts);
|
|
53
|
-
if (
|
|
83
|
+
if (debouncedFilterValue) {
|
|
54
84
|
if (onlyCoordinates) {
|
|
55
|
-
const { latitude, longitude } = await getCoords(
|
|
85
|
+
const { latitude, longitude } = await getCoords(debouncedFilterValue);
|
|
86
|
+
if (!isCurrent)
|
|
87
|
+
return;
|
|
56
88
|
setPlacePredictionMenuItems([
|
|
57
89
|
{
|
|
58
90
|
primary: t('exact_location'),
|
|
@@ -66,9 +98,14 @@ const LocationInput = forwardRef(function LocationInput(props, ref) {
|
|
|
66
98
|
]);
|
|
67
99
|
}
|
|
68
100
|
else {
|
|
69
|
-
if (isValueACoordinate(
|
|
70
|
-
const { latitude, longitude } = await getCoords(
|
|
71
|
-
const { name: addressName, address } = await getAddress({
|
|
101
|
+
if (isValueACoordinate(debouncedFilterValue)) {
|
|
102
|
+
const { latitude, longitude } = await getCoords(debouncedFilterValue);
|
|
103
|
+
const { name: addressName, address } = await getAddress({
|
|
104
|
+
latitude,
|
|
105
|
+
longitude
|
|
106
|
+
});
|
|
107
|
+
if (!isCurrent)
|
|
108
|
+
return;
|
|
72
109
|
const menuItems = [
|
|
73
110
|
{
|
|
74
111
|
primary: t('exact_location'),
|
|
@@ -95,49 +132,32 @@ const LocationInput = forwardRef(function LocationInput(props, ref) {
|
|
|
95
132
|
setPlacePredictionMenuItems(menuItems);
|
|
96
133
|
return;
|
|
97
134
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
longitude: exactLocation.longitude
|
|
122
|
-
});
|
|
123
|
-
}
|
|
135
|
+
if (!sessionTokenRef.current) {
|
|
136
|
+
sessionTokenRef.current = new google.maps.places.AutocompleteSessionToken();
|
|
137
|
+
}
|
|
138
|
+
const activeToken = sessionTokenRef.current;
|
|
139
|
+
const { placePredictions } = await getPlacePredictions(debouncedFilterValue, bias, activeToken);
|
|
140
|
+
if (!isCurrent)
|
|
141
|
+
return;
|
|
142
|
+
startInteractionTimer();
|
|
143
|
+
setPlacePredictionMenuItems(placePredictions.map(item => ({
|
|
144
|
+
id: item.place_id,
|
|
145
|
+
primary: item.structured_formatting.main_text,
|
|
146
|
+
secondary: [item.structured_formatting.secondary_text],
|
|
147
|
+
onClick: (menuItemId) => {
|
|
148
|
+
getPlaceById(menuItemId, activeToken).then(menuItemLocation => {
|
|
149
|
+
sessionTokenRef.current = undefined;
|
|
150
|
+
clearInteractionTimer();
|
|
151
|
+
setFilterValue('');
|
|
152
|
+
onSelect?.(menuItemLocation);
|
|
153
|
+
}, e => {
|
|
154
|
+
sessionTokenRef.current = undefined;
|
|
155
|
+
clearInteractionTimer();
|
|
156
|
+
setFilterValue('');
|
|
157
|
+
onError?.(e instanceof Error ? e : new Error(String(e)));
|
|
124
158
|
});
|
|
125
159
|
}
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
setPlacePredictionMenuItems(placePredictions.map(item => ({
|
|
130
|
-
id: item.place_id,
|
|
131
|
-
primary: item.structured_formatting.main_text,
|
|
132
|
-
secondary: [item.structured_formatting.secondary_text],
|
|
133
|
-
onClick: (menuItemId) => {
|
|
134
|
-
getPlaceById(menuItemId, token).then(menuItemLocation => {
|
|
135
|
-
setFilterValue('');
|
|
136
|
-
onSelect?.(menuItemLocation);
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
})));
|
|
140
|
-
}
|
|
160
|
+
})));
|
|
141
161
|
}
|
|
142
162
|
}
|
|
143
163
|
else {
|
|
@@ -145,11 +165,16 @@ const LocationInput = forwardRef(function LocationInput(props, ref) {
|
|
|
145
165
|
}
|
|
146
166
|
}
|
|
147
167
|
catch (e) {
|
|
168
|
+
if (!isCurrent)
|
|
169
|
+
return;
|
|
148
170
|
setPlacePredictionMenuItems([]);
|
|
149
171
|
onError?.(e);
|
|
150
172
|
}
|
|
151
173
|
})();
|
|
152
|
-
|
|
174
|
+
return () => {
|
|
175
|
+
isCurrent = false;
|
|
176
|
+
};
|
|
177
|
+
}, [debouncedFilterValue, bias, onError, onSelect, onlyCoordinates]);
|
|
153
178
|
const onInputChange = useCallback((e) => {
|
|
154
179
|
setFilterValue(e.target.value.trim());
|
|
155
180
|
onChange?.(e.target.value);
|
|
@@ -157,6 +182,8 @@ const LocationInput = forwardRef(function LocationInput(props, ref) {
|
|
|
157
182
|
const onMapClick = useCallback((placeInfo) => {
|
|
158
183
|
if (readOnly)
|
|
159
184
|
return;
|
|
185
|
+
sessionTokenRef.current = undefined;
|
|
186
|
+
clearInteractionTimer();
|
|
160
187
|
if (onlyCoordinates) {
|
|
161
188
|
const coords = {
|
|
162
189
|
latitude: placeInfo.latitude,
|
|
@@ -197,7 +224,7 @@ const LocationInput = forwardRef(function LocationInput(props, ref) {
|
|
|
197
224
|
} })), onChange: onInputChange, onBlur: () => {
|
|
198
225
|
setFilterValue('');
|
|
199
226
|
onBlur?.(value);
|
|
200
|
-
}, value: value, required: required, disabled: disabled, readOnly: readOnly, status: status, ...restProps, className: createClassName('location-input', className) }), map && (_jsx(StyledLocationMap, { children: _jsx(LocationView, { ...map, pins: map.location ? [{ ...map.location }] : [], onClick: onMapClick, onError: onError, disabled: disabled, loading: mapLoading, centerMapOnChange: true }) }))] }));
|
|
227
|
+
}, value: value, required: required, disabled: disabled, readOnly: readOnly, status: status, ...restProps, className: createClassName('location-input', className) }), map && (_jsx(StyledLocationMap, { children: _jsx(LocationView, { ...map, pins: map.location ? [{ ...map.location }] : [], onClick: onMapClick, onError: onError, disabled: disabled, loading: mapLoading, centerMapOnChange: true, getSessionToken: getSessionToken }) }))] }));
|
|
201
228
|
return label ? (_jsx(FormField, { testId: testIds, label: label, labelHidden: labelHidden, id: id, info: info, readOnly: readOnly, status: status, ref: ref, required: required, disabled: disabled, additionalInfo: additionalInfo, children: Comp })) : (Comp);
|
|
202
229
|
});
|
|
203
230
|
export default withTestIds(LocationInput, getLocationInputTestIds);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocationInput.js","sourceRoot":"","sources":["../../../src/components/Location/LocationInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useCallback, useContext, useEffect, useState } from 'react';\nimport type { ChangeEvent, FC, PropsWithoutRef, Ref } from 'react';\nimport styled from 'styled-components';\n\nimport ComboBox from '../ComboBox';\nimport type { MenuItemProps, MenuProps } from '../Menu';\nimport { useI18n, useTestIds, useUID } from '../../hooks';\nimport { createUID, withTestIds, createClassName } from '../../utils';\nimport FormField from '../FormField';\nimport type { FormControlProps } from '../FormControl';\nimport type { BaseProps, ForwardProps, TestIdProp } from '../../types';\nimport Flex from '../Flex';\nimport { defaultThemeProp } from '../../theme';\n\nimport PoweredByGoogleImage from './PoweredByGoogleImage';\nimport CurrentLocationButton from './CurrentLocationButton';\nimport MapsContext from './MapsContext';\nimport {\n getAddress,\n getCoords,\n getNavigatorPosition,\n getPlaceById,\n getPlacePredictions,\n isValueACoordinate,\n loadMapsAPI\n} from './utils';\nimport type { Bias, LatLng } from './Location.types';\nimport LocationView from './LocationView';\nimport { StyledLocationView } from './LocationView.styles';\nimport type { LocationViewProps } from './LocationView';\nimport { getLocationInputTestIds } from './Location.test-ids';\n\nexport interface LocationInputProps extends BaseProps, FormControlProps, TestIdProp {\n /**\n * Get user current location on component first render.\n * @default false\n */\n defaultToCurrentLocation?: boolean;\n /** The value of the location field. */\n value?: string;\n /**\n * Callback fired on every change of the location input.\n * The argument passed back is the component's value prop.\n */\n onChange?: (value: string) => void;\n /**\n * Callback fired when the control's input loses focus.\n * The argument passed back is the component's value prop.\n */\n onBlur?: (value: string) => void;\n /** Callback fired when user chooses location from the dropdown of suggestions or submits input value. */\n onSelect?: (value: {\n name?: string;\n address?: string;\n latitude?: number;\n longitude?: number;\n }) => void;\n /**\n * Only select coordinates on map clicks.\n * @default false\n */\n onlyCoordinates?: boolean;\n /** Biasing query results towards user location/preference. */\n bias?: Bias;\n /**\n * Set to true renders the map view below input.\n * @default false\n */\n map?: {\n /** Location coordinates used for the map view. */\n location?: LatLng;\n height: LocationViewProps['height'];\n zoomLevel?: LocationViewProps['zoomLevel'];\n onClick?: LocationViewProps['onClick'];\n };\n /** Callback fired when an error occurs. This function gets called with one argument of type Error. */\n onError?: (error: Error) => void;\n}\n\nconst StyledLocationInput = styled(ComboBox)`\n z-index: 1;\n`;\n\nStyledLocationInput.defaultProps = defaultThemeProp;\n\nconst StyledLocationMap = styled.div`\n ${StyledLocationView} {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n`;\n\nStyledLocationMap.defaultProps = defaultThemeProp;\n\nconst LocationInput: FC<LocationInputProps & ForwardProps> = forwardRef(function LocationInput(\n props: PropsWithoutRef<LocationInputProps>,\n ref: Ref<HTMLInputElement>\n) {\n const uid = useUID();\n const {\n testId,\n label,\n labelHidden,\n id = uid,\n value = '',\n info,\n status,\n required,\n readOnly,\n disabled,\n additionalInfo,\n onSelect,\n onError,\n onChange,\n onBlur,\n bias,\n defaultToCurrentLocation,\n onlyCoordinates = false,\n map,\n className,\n ...restProps\n } = props;\n\n const testIds = useTestIds(testId, getLocationInputTestIds);\n\n const { name, ...providerOpts } = useContext(MapsContext);\n const t = useI18n();\n const [placePredictionMenuItems, setPlacePredictionMenuItems] = useState<MenuProps['items']>([]);\n const [filterValue, setFilterValue] = useState('');\n const [mapLoading, setMapLoading] = useState(false);\n\n useEffect(() => {\n (async () => {\n if (defaultToCurrentLocation) {\n setMapLoading(true);\n await loadMapsAPI(name, providerOpts);\n const navigatorPosition = await getNavigatorPosition();\n const currentLocationAddress = await getAddress(navigatorPosition);\n setMapLoading(false);\n onSelect?.(currentLocationAddress);\n }\n })();\n }, []);\n\n useEffect(() => {\n (async () => {\n try {\n await loadMapsAPI(name, providerOpts);\n if (filterValue) {\n if (onlyCoordinates) {\n const { latitude, longitude } = await getCoords(filterValue);\n setPlacePredictionMenuItems([\n {\n primary: t('exact_location'),\n secondary: [`${latitude}, ${longitude}`],\n id: createUID(),\n onClick: () => {\n setFilterValue('');\n onSelect?.({ latitude, longitude });\n }\n }\n ]);\n } else {\n if (isValueACoordinate(filterValue)) {\n const { latitude, longitude } = await getCoords(filterValue);\n const { name: addressName, address } = await getAddress({ latitude, longitude });\n const menuItems = [\n {\n primary: t('exact_location'),\n secondary: [`${latitude}, ${longitude}`],\n id: createUID(),\n onClick: () => {\n setFilterValue('');\n onSelect?.({\n latitude,\n longitude\n });\n }\n },\n {\n primary: addressName,\n secondary: [address],\n id: createUID(),\n onClick: () => {\n setFilterValue('');\n onSelect?.({ name: addressName, address, latitude, longitude });\n }\n }\n ];\n\n setPlacePredictionMenuItems(menuItems);\n return;\n }\n const { placePredictions, token } = await getPlacePredictions(filterValue, bias);\n if (placePredictions.length === 1) {\n const exactLocation = await getPlaceById(placePredictions[0].place_id, token);\n const menuItems = placePredictions.map(item => ({\n id: item.place_id,\n primary: item.structured_formatting.main_text,\n secondary: [item.structured_formatting.secondary_text],\n onClick: (menuItemId: MenuItemProps['id']) => {\n getPlaceById(menuItemId, token).then(menuItemLocation => {\n setFilterValue('');\n onSelect?.(menuItemLocation);\n });\n }\n }));\n if (exactLocation) {\n menuItems.push({\n primary: t('exact_location'),\n secondary: [`${exactLocation.latitude}, ${exactLocation.longitude}`],\n id: createUID(),\n onClick: () => {\n setFilterValue('');\n onSelect?.({\n latitude: exactLocation.latitude,\n longitude: exactLocation.longitude\n });\n }\n });\n }\n setPlacePredictionMenuItems(menuItems);\n } else {\n setPlacePredictionMenuItems(\n placePredictions.map(item => ({\n id: item.place_id,\n primary: item.structured_formatting.main_text,\n secondary: [item.structured_formatting.secondary_text],\n onClick: (menuItemId: MenuItemProps['id']) => {\n getPlaceById(menuItemId, token).then(menuItemLocation => {\n setFilterValue('');\n onSelect?.(menuItemLocation);\n });\n }\n }))\n );\n }\n }\n } else {\n setPlacePredictionMenuItems([]);\n }\n } catch (e: any) {\n setPlacePredictionMenuItems([]);\n onError?.(e);\n }\n })();\n }, [filterValue, bias, onError, onSelect, onlyCoordinates]);\n\n const onInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n setFilterValue(e.target.value.trim());\n onChange?.(e.target.value);\n },\n [onChange]\n );\n\n const onMapClick = useCallback(\n (placeInfo: { latitude: number; longitude: number; name?: string; address?: string }) => {\n if (readOnly) return;\n\n if (onlyCoordinates) {\n const coords = {\n latitude: placeInfo.latitude,\n longitude: placeInfo.longitude\n };\n onSelect?.(coords);\n map?.onClick?.(coords);\n } else {\n onSelect?.(placeInfo);\n map?.onClick?.(placeInfo);\n }\n },\n [readOnly, onSelect, map?.onClick, onlyCoordinates]\n );\n\n const Comp = (\n <>\n <StyledLocationInput\n id={id}\n info={info}\n data-testid={testIds.control}\n placeholder={t('location_input_placeholder')}\n menu={\n filterValue\n ? {\n items: placePredictionMenuItems.concat([\n {\n id: createUID(),\n primary: t('use_input_value', [filterValue]),\n onClick: () => {\n setFilterValue('');\n onSelect?.({ name: filterValue });\n }\n }\n ]),\n emptyText: t('location_not_found_text'),\n mode: 'action',\n footer: !map && (\n <Flex container={{ justify: 'end' }}>\n <PoweredByGoogleImage />\n </Flex>\n )\n }\n : undefined\n }\n actions={\n !disabled &&\n !readOnly && (\n <CurrentLocationButton\n onError={onError}\n onResolve={resolved => {\n if (onlyCoordinates) {\n onSelect?.({ latitude: resolved.latitude, longitude: resolved.longitude });\n } else {\n onSelect?.(resolved);\n }\n }}\n />\n )\n }\n onChange={onInputChange}\n onBlur={() => {\n setFilterValue('');\n onBlur?.(value);\n }}\n value={value}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n status={status}\n {...restProps}\n className={createClassName('location-input', className)}\n />\n {map && (\n <StyledLocationMap>\n <LocationView\n {...map}\n pins={map.location ? [{ ...map.location }] : []}\n onClick={onMapClick}\n onError={onError}\n disabled={disabled}\n loading={mapLoading}\n centerMapOnChange\n />\n </StyledLocationMap>\n )}\n </>\n );\n\n return label ? (\n <FormField\n testId={testIds}\n label={label}\n labelHidden={labelHidden}\n id={id}\n info={info}\n readOnly={readOnly}\n status={status}\n ref={ref}\n required={required}\n disabled={disabled}\n additionalInfo={additionalInfo}\n >\n {Comp}\n </FormField>\n ) : (\n Comp\n );\n});\n\nexport default withTestIds(LocationInput, getLocationInputTestIds);\n"]}
|
|
1
|
+
{"version":3,"file":"LocationInput.js","sourceRoot":"","sources":["../../../src/components/Location/LocationInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport type { ChangeEvent, FC, PropsWithoutRef, Ref } from 'react';\nimport styled from 'styled-components';\n\nimport ComboBox from '../ComboBox';\nimport type { MenuItemProps, MenuProps } from '../Menu';\nimport { useI18n, useTestIds, useUID } from '../../hooks';\nimport { createUID, withTestIds, createClassName } from '../../utils';\nimport FormField from '../FormField';\nimport type { FormControlProps } from '../FormControl';\nimport type { BaseProps, ForwardProps, TestIdProp } from '../../types';\nimport Flex from '../Flex';\nimport { defaultThemeProp } from '../../theme';\n\nimport PoweredByGoogleImage from './PoweredByGoogleImage';\nimport CurrentLocationButton from './CurrentLocationButton';\nimport MapsContext from './MapsContext';\nimport {\n getAddress,\n getCoords,\n getNavigatorPosition,\n getPlaceById,\n getPlacePredictions,\n isValueACoordinate,\n loadMapsAPI\n} from './utils';\nimport type { Bias, LatLng } from './Location.types';\nimport LocationView from './LocationView';\nimport { StyledLocationView } from './LocationView.styles';\nimport type { LocationViewProps } from './LocationView';\nimport { getLocationInputTestIds } from './Location.test-ids';\n\n// Session token timeout in milliseconds for single user interaction.\nconst sessionTokenTimeout = 120_000;\n\nexport interface LocationInputProps extends BaseProps, FormControlProps, TestIdProp {\n /**\n * Get user current location on component first render.\n * @default false\n */\n defaultToCurrentLocation?: boolean;\n /** The value of the location field. */\n value?: string;\n /**\n * Callback fired on every change of the location input.\n * The argument passed back is the component's value prop.\n */\n onChange?: (value: string) => void;\n /**\n * Callback fired when the control's input loses focus.\n * The argument passed back is the component's value prop.\n */\n onBlur?: (value: string) => void;\n /** Callback fired when user chooses location from the dropdown of suggestions or submits input value. */\n onSelect?: (value: {\n name?: string;\n address?: string;\n latitude?: number;\n longitude?: number;\n }) => void;\n /**\n * Only select coordinates on map clicks.\n * @default false\n */\n onlyCoordinates?: boolean;\n /** Biasing query results towards user location/preference. */\n bias?: Bias;\n /**\n * Set to true renders the map view below input.\n * @default false\n */\n map?: {\n /** Location coordinates used for the map view. */\n location?: LatLng;\n height: LocationViewProps['height'];\n zoomLevel?: LocationViewProps['zoomLevel'];\n onClick?: LocationViewProps['onClick'];\n };\n /** Callback fired when an error occurs. This function gets called with one argument of type Error. */\n onError?: (error: Error) => void;\n}\n\nconst StyledLocationInput = styled(ComboBox)`\n z-index: 1;\n`;\n\nStyledLocationInput.defaultProps = defaultThemeProp;\n\nconst StyledLocationMap = styled.div`\n ${StyledLocationView} {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n`;\n\nStyledLocationMap.defaultProps = defaultThemeProp;\n\nconst LocationInput: FC<LocationInputProps & ForwardProps> = forwardRef(function LocationInput(\n props: PropsWithoutRef<LocationInputProps>,\n ref: Ref<HTMLInputElement>\n) {\n const uid = useUID();\n const {\n testId,\n label,\n labelHidden,\n id = uid,\n value = '',\n info,\n status,\n required,\n readOnly,\n disabled,\n additionalInfo,\n onSelect,\n onError,\n onChange,\n onBlur,\n bias,\n defaultToCurrentLocation,\n onlyCoordinates = false,\n map,\n className,\n ...restProps\n } = props;\n\n const testIds = useTestIds(testId, getLocationInputTestIds);\n\n const { name, ...providerOpts } = useContext(MapsContext);\n const t = useI18n();\n const [placePredictionMenuItems, setPlacePredictionMenuItems] = useState<MenuProps['items']>([]);\n const [filterValue, setFilterValue] = useState('');\n const [debouncedFilterValue, setDebouncedFilterValue] = useState('');\n const [mapLoading, setMapLoading] = useState(false);\n const sessionTokenRef = useRef<google.maps.places.AutocompleteSessionToken | undefined>();\n const interactionTimerRef = useRef<number | undefined>();\n\n const clearInteractionTimer = useCallback(() => {\n if (interactionTimerRef.current !== undefined) {\n window.clearTimeout(interactionTimerRef.current);\n interactionTimerRef.current = undefined;\n }\n }, []);\n\n const startInteractionTimer = useCallback(() => {\n if (interactionTimerRef.current !== undefined) return;\n interactionTimerRef.current = window.setTimeout(() => {\n sessionTokenRef.current = undefined;\n interactionTimerRef.current = undefined;\n }, sessionTokenTimeout);\n }, []);\n\n useEffect(() => clearInteractionTimer, [clearInteractionTimer]);\n\n const getSessionToken = useCallback(() => sessionTokenRef.current, []);\n\n useEffect(() => {\n (async () => {\n if (defaultToCurrentLocation) {\n setMapLoading(true);\n await loadMapsAPI(name, providerOpts);\n const navigatorPosition = await getNavigatorPosition();\n const currentLocationAddress = await getAddress(navigatorPosition);\n setMapLoading(false);\n onSelect?.(currentLocationAddress);\n }\n })();\n }, []);\n\n useEffect(() => {\n if (!filterValue) {\n setDebouncedFilterValue('');\n return;\n }\n const timer = window.setTimeout(() => setDebouncedFilterValue(filterValue), 500);\n return () => window.clearTimeout(timer);\n }, [filterValue]);\n\n useEffect(() => {\n let isCurrent = true;\n\n (async () => {\n try {\n await loadMapsAPI(name, providerOpts);\n\n if (debouncedFilterValue) {\n if (onlyCoordinates) {\n const { latitude, longitude } = await getCoords(debouncedFilterValue);\n if (!isCurrent) return;\n setPlacePredictionMenuItems([\n {\n primary: t('exact_location'),\n secondary: [`${latitude}, ${longitude}`],\n id: createUID(),\n onClick: () => {\n setFilterValue('');\n onSelect?.({ latitude, longitude });\n }\n }\n ]);\n } else {\n if (isValueACoordinate(debouncedFilterValue)) {\n const { latitude, longitude } = await getCoords(debouncedFilterValue);\n const { name: addressName, address } = await getAddress({\n latitude,\n longitude\n });\n if (!isCurrent) return;\n const menuItems = [\n {\n primary: t('exact_location'),\n secondary: [`${latitude}, ${longitude}`],\n id: createUID(),\n onClick: () => {\n setFilterValue('');\n onSelect?.({\n latitude,\n longitude\n });\n }\n },\n {\n primary: addressName,\n secondary: [address],\n id: createUID(),\n onClick: () => {\n setFilterValue('');\n onSelect?.({ name: addressName, address, latitude, longitude });\n }\n }\n ];\n\n setPlacePredictionMenuItems(menuItems);\n return;\n }\n if (!sessionTokenRef.current) {\n sessionTokenRef.current = new google.maps.places.AutocompleteSessionToken();\n }\n const activeToken = sessionTokenRef.current;\n const { placePredictions } = await getPlacePredictions(\n debouncedFilterValue,\n bias,\n activeToken\n );\n if (!isCurrent) return;\n startInteractionTimer();\n\n setPlacePredictionMenuItems(\n placePredictions.map(item => ({\n id: item.place_id,\n primary: item.structured_formatting.main_text,\n secondary: [item.structured_formatting.secondary_text],\n onClick: (menuItemId: MenuItemProps['id']) => {\n getPlaceById(menuItemId, activeToken).then(\n menuItemLocation => {\n sessionTokenRef.current = undefined;\n clearInteractionTimer();\n setFilterValue('');\n onSelect?.(menuItemLocation);\n },\n e => {\n sessionTokenRef.current = undefined;\n clearInteractionTimer();\n setFilterValue('');\n onError?.(e instanceof Error ? e : new Error(String(e)));\n }\n );\n }\n }))\n );\n }\n } else {\n setPlacePredictionMenuItems([]);\n }\n } catch (e: any) {\n if (!isCurrent) return;\n setPlacePredictionMenuItems([]);\n onError?.(e);\n }\n })();\n\n return () => {\n isCurrent = false;\n };\n }, [debouncedFilterValue, bias, onError, onSelect, onlyCoordinates]);\n\n const onInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n setFilterValue(e.target.value.trim());\n onChange?.(e.target.value);\n },\n [onChange]\n );\n\n const onMapClick = useCallback(\n (placeInfo: { latitude: number; longitude: number; name?: string; address?: string }) => {\n if (readOnly) return;\n\n sessionTokenRef.current = undefined;\n clearInteractionTimer();\n\n if (onlyCoordinates) {\n const coords = {\n latitude: placeInfo.latitude,\n longitude: placeInfo.longitude\n };\n onSelect?.(coords);\n map?.onClick?.(coords);\n } else {\n onSelect?.(placeInfo);\n map?.onClick?.(placeInfo);\n }\n },\n [readOnly, onSelect, map?.onClick, onlyCoordinates]\n );\n\n const Comp = (\n <>\n <StyledLocationInput\n id={id}\n info={info}\n data-testid={testIds.control}\n placeholder={t('location_input_placeholder')}\n menu={\n filterValue\n ? {\n items: placePredictionMenuItems.concat([\n {\n id: createUID(),\n primary: t('use_input_value', [filterValue]),\n onClick: () => {\n setFilterValue('');\n onSelect?.({ name: filterValue });\n }\n }\n ]),\n emptyText: t('location_not_found_text'),\n mode: 'action',\n footer: !map && (\n <Flex container={{ justify: 'end' }}>\n <PoweredByGoogleImage />\n </Flex>\n )\n }\n : undefined\n }\n actions={\n !disabled &&\n !readOnly && (\n <CurrentLocationButton\n onError={onError}\n onResolve={resolved => {\n if (onlyCoordinates) {\n onSelect?.({ latitude: resolved.latitude, longitude: resolved.longitude });\n } else {\n onSelect?.(resolved);\n }\n }}\n />\n )\n }\n onChange={onInputChange}\n onBlur={() => {\n setFilterValue('');\n onBlur?.(value);\n }}\n value={value}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n status={status}\n {...restProps}\n className={createClassName('location-input', className)}\n />\n {map && (\n <StyledLocationMap>\n <LocationView\n {...map}\n pins={map.location ? [{ ...map.location }] : []}\n onClick={onMapClick}\n onError={onError}\n disabled={disabled}\n loading={mapLoading}\n centerMapOnChange\n getSessionToken={getSessionToken}\n />\n </StyledLocationMap>\n )}\n </>\n );\n\n return label ? (\n <FormField\n testId={testIds}\n label={label}\n labelHidden={labelHidden}\n id={id}\n info={info}\n readOnly={readOnly}\n status={status}\n ref={ref}\n required={required}\n disabled={disabled}\n additionalInfo={additionalInfo}\n >\n {Comp}\n </FormField>\n ) : (\n Comp\n );\n});\n\nexport default withTestIds(LocationInput, getLocationInputTestIds);\n"]}
|
|
@@ -42,6 +42,8 @@ export type LocationViewProps = WithAttributes<'div', {
|
|
|
42
42
|
drawRoute?: boolean;
|
|
43
43
|
/** Callback fired when an error occurs. This function gets called with one argument of type Error. */
|
|
44
44
|
onError?: (error: Error) => void;
|
|
45
|
+
/** Function that returns the current autocomplete session token. */
|
|
46
|
+
getSessionToken?: () => google.maps.places.AutocompleteSessionToken | undefined;
|
|
45
47
|
}>;
|
|
46
48
|
declare const LocationView: import("react").ForwardRefExoticComponent<Omit<LocationViewProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
47
49
|
export default LocationView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocationView.d.ts","sourceRoot":"","sources":["../../../src/components/Location/LocationView.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,aAAa,CAAC;AAK9D,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAC5C,KAAK,EACL;IACE;;;OAGG;IACH,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+IAA+I;IAC/I,OAAO,CAAC,EAAE,CACR,YAAY,EAAE,MAAM,GAAG;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,KACE,IAAI,CAAC;IACV;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,sGAAsG;IACtG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"LocationView.d.ts","sourceRoot":"","sources":["../../../src/components/Location/LocationView.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,aAAa,CAAC;AAK9D,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAC5C,KAAK,EACL;IACE;;;OAGG;IACH,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+IAA+I;IAC/I,OAAO,CAAC,EAAE,CACR,YAAY,EAAE,MAAM,GAAG;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,KACE,IAAI,CAAC;IACV;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,sGAAsG;IACtG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,GAAG,SAAS,CAAC;CACjF,CACF,CAAC;AAqBF,QAAA,MAAM,YAAY,2HAwOjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -23,7 +23,7 @@ const hasPlaceId = (obj) => {
|
|
|
23
23
|
/* cSpell:ignore 'ABCDEFGHIJKLMNOPQRSTUVWYZ' */
|
|
24
24
|
const markerLabels = 'ABCDEFGHIJKLMNOPQRSTUVWYZ';
|
|
25
25
|
const LocationView = forwardRef(function LocationView(props, ref) {
|
|
26
|
-
const { pins = [], zoomLevel = 13, height = '25rem', centerMapOnChange = false, onClick, onError, disabled = false, loading = false, drawRoute = false, ...restProps } = props;
|
|
26
|
+
const { pins = [], zoomLevel = 13, height = '25rem', centerMapOnChange = false, onClick, onError, disabled = false, loading = false, drawRoute = false, getSessionToken, ...restProps } = props;
|
|
27
27
|
const t = useI18n();
|
|
28
28
|
const { name, ...providerOpts } = useContext(MapsContext);
|
|
29
29
|
const [status, setStatus] = useState(LoadStatus.Init);
|
|
@@ -40,7 +40,7 @@ const LocationView = forwardRef(function LocationView(props, ref) {
|
|
|
40
40
|
if (!isLatLngObject(e.latLng))
|
|
41
41
|
return;
|
|
42
42
|
if (hasPlaceId(e)) {
|
|
43
|
-
getPlaceById(e.placeId).then(placeInfo => {
|
|
43
|
+
getPlaceById(e.placeId, getSessionToken?.()).then(placeInfo => {
|
|
44
44
|
onClick?.({
|
|
45
45
|
...placeInfo,
|
|
46
46
|
latitude: e.latLng.lat(),
|
|
@@ -93,7 +93,7 @@ const LocationView = forwardRef(function LocationView(props, ref) {
|
|
|
93
93
|
return;
|
|
94
94
|
const l = map.current.addListener('click', onMapClick);
|
|
95
95
|
return () => google.maps.event.removeListener(l);
|
|
96
|
-
}, [onClick, map.current]);
|
|
96
|
+
}, [onClick, map.current, getSessionToken]);
|
|
97
97
|
useEffect(() => {
|
|
98
98
|
let mounted = true;
|
|
99
99
|
loadMapsAPI(name, providerOpts)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocationView.js","sourceRoot":"","sources":["../../../src/components/Location/LocationView.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { PropsWithoutRef, Ref } from 'react';\nimport { forwardRef, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { useI18n, useTheme } from '../../hooks';\nimport type { RefElement, WithAttributes } from '../../types';\nimport { createUID } from '../../utils';\nimport Progress from '../Progress';\n\nimport { StyledLocationError, StyledLocationView, StyledMap } from './LocationView.styles';\nimport type { LatLng, Pin } from './Location.types';\nimport MapsContext from './MapsContext';\nimport { getAddress, getPlaceById, isLatLngObject, loadMapsAPI, toGoogleLatLng } from './utils';\n\nexport type LocationViewProps = WithAttributes<\n 'div',\n {\n /**\n * Array of location objects.\n * @default []\n */\n pins?: Pin[];\n /**\n * Set to true to always center the map when the selected location changes. Toggling this from false to true will re-center map on the last pinned location.\n * @default false\n */\n centerMapOnChange?: boolean;\n /**\n * Height of the map container.\n * @default '25rem'\n */\n height?: string;\n /**\n * How much the map should zoom.\n * @default 13\n */\n zoomLevel?: number;\n /** Callback fired when user clicks on a location on the map. This function will be passed the coordinates of the location that was clicked. */\n onClick?: (\n locationData: LatLng & {\n name?: string;\n address?: string;\n }\n ) => void;\n /**\n * Renders loading indicator when true. Informs the user location resolution is in progress.\n */\n loading?: boolean;\n /**\n * Disables dragging and clicking when true.\n * @default false\n */\n disabled?: boolean;\n /**\n * Indicates if route between pins should be rendered.\n * @default false\n */\n drawRoute?: boolean;\n\n /** Callback fired when an error occurs. This function gets called with one argument of type Error. */\n onError?: (error: Error) => void;\n }\n>;\n\nenum LoadStatus {\n Init = 'init',\n Ready = 'ready',\n Error = 'error'\n}\n\nconst hasPlaceId = (obj: unknown): obj is google.maps.IconMouseEvent & { placeId: string } => {\n return (\n typeof obj === 'object' &&\n !!obj &&\n 'placeId' in obj &&\n !!obj.placeId &&\n typeof obj.placeId === 'string'\n );\n};\n\n/* cSpell:ignore 'ABCDEFGHIJKLMNOPQRSTUVWYZ' */\nconst markerLabels = 'ABCDEFGHIJKLMNOPQRSTUVWYZ';\n\nconst LocationView = forwardRef<RefElement<LocationViewProps>, PropsWithoutRef<LocationViewProps>>(\n function LocationView(props, ref) {\n const {\n pins = [],\n zoomLevel = 13,\n height = '25rem',\n centerMapOnChange = false,\n onClick,\n onError,\n disabled = false,\n loading = false,\n drawRoute = false,\n ...restProps\n } = props;\n const t = useI18n();\n const { name, ...providerOpts } = useContext(MapsContext);\n const [status, setStatus] = useState<LoadStatus>(LoadStatus.Init);\n const [eMessage, setEMessage] = useState('');\n const [selectedPinIndex, setSelectedPinIndex] = useState<number | undefined>(undefined);\n const mapElemRef = useRef<HTMLDivElement>();\n const map = useRef<google.maps.Map>();\n const markers = useRef<google.maps.marker.AdvancedMarkerElement[]>([]);\n const ds = useRef<google.maps.DirectionsService>();\n const dr = useRef<google.maps.DirectionsRenderer>();\n const infoWindowContent = useRef<HTMLDivElement>(document.createElement('div'));\n const theme = useTheme();\n\n const onMapClick = (e: google.maps.MapMouseEvent) => {\n if (!isLatLngObject(e.latLng)) return;\n\n if (hasPlaceId(e)) {\n getPlaceById(e.placeId).then(placeInfo => {\n onClick?.({\n ...placeInfo,\n latitude: e.latLng!.lat(),\n longitude: e.latLng!.lng()\n });\n });\n } else {\n getAddress({\n latitude: e.latLng.lat(),\n longitude: e.latLng.lng()\n })\n .then(onClick)\n .catch(err => onError?.(err));\n }\n };\n\n const centerMap = useCallback((coords: LatLng[]) => {\n if (!map.current || coords.length === 0) return;\n\n if (coords.length === 1) {\n map.current.setCenter(toGoogleLatLng(coords[0]));\n map.current.setZoom(zoomLevel);\n } else {\n const bounds = new google.maps.LatLngBounds();\n coords.forEach(({ latitude, longitude }) => {\n bounds.extend(toGoogleLatLng({ latitude, longitude }));\n });\n map.current.fitBounds(bounds);\n }\n }, []);\n\n const initialize = () => {\n if (mapElemRef.current) {\n const position = toGoogleLatLng({ latitude: 0, longitude: 0 });\n map.current = new google.maps.Map(mapElemRef.current, {\n mapId: createUID(),\n center: position,\n zoom: 2,\n draggable: !disabled,\n draggableCursor: 'auto',\n draggingCursor: 'move'\n });\n ds.current = new google.maps.DirectionsService();\n dr.current = new google.maps.DirectionsRenderer({ suppressMarkers: true });\n centerMap(pins);\n }\n };\n\n useEffect(() => {\n if (!onClick || !map.current) return;\n\n const l = map.current.addListener('click', onMapClick);\n return () => google.maps.event.removeListener(l);\n }, [onClick, map.current]);\n\n useEffect(() => {\n let mounted = true;\n loadMapsAPI(name, providerOpts)\n .then(() => {\n if (mounted) {\n initialize();\n setStatus(LoadStatus.Ready);\n }\n })\n .catch((error: Error) => {\n setStatus(LoadStatus.Error);\n setEMessage(error.message);\n onError?.(error);\n });\n\n return () => {\n mounted = false;\n if (map.current) google.maps.event.clearInstanceListeners(map.current);\n };\n }, []);\n\n useEffect(() => {\n if (\n status !== LoadStatus.Ready ||\n !map.current ||\n !dr.current ||\n !ds.current ||\n // FIXME: Workaround for marker library not being imported\n !google.maps.marker\n )\n return;\n\n if (drawRoute && pins.length > 1) {\n dr.current.setMap(map.current);\n const request: google.maps.DirectionsRequest = {\n origin: toGoogleLatLng({ latitude: pins[0].latitude, longitude: pins[0].longitude }),\n destination: toGoogleLatLng({\n latitude: pins[pins.length - 1].latitude,\n longitude: pins[pins.length - 1].longitude\n }),\n waypoints: pins.slice(1, pins.length - 1).map(l => {\n return {\n stopover: true,\n location: toGoogleLatLng({\n latitude: l.latitude,\n longitude: l.longitude\n })\n };\n }),\n travelMode: google.maps.TravelMode.DRIVING\n };\n\n ds.current.route(request)?.then(dr.current.setDirections.bind(dr.current), onError);\n }\n\n const infoWindow = new google.maps.InfoWindow();\n\n try {\n markers.current = pins.map(({ latitude, longitude, title, content, selected }, index) => {\n const gCoords = toGoogleLatLng({ latitude, longitude });\n\n const contentConfig: google.maps.marker.PinElementOptions = {\n glyphColor: theme.base.colors.white\n };\n const label = markerLabels[index % markerLabels.length];\n if (pins.length > 1) {\n const glyphWrapper = document.createElement('span');\n glyphWrapper.style.fontSize = '0.9rem';\n glyphWrapper.style.paddingTop = '0.1rem';\n glyphWrapper.innerHTML = label;\n contentConfig.glyph = glyphWrapper;\n }\n if (selected) {\n contentConfig.background = theme.base.colors.red.dark;\n contentConfig.borderColor = theme.base.colors.red.dark;\n contentConfig.scale = 1.15;\n }\n const pin = new google.maps.marker.PinElement(contentConfig);\n const marker = new google.maps.marker.AdvancedMarkerElement({\n map: map.current,\n position: gCoords,\n title,\n content: pin.element\n });\n if (content) {\n marker.addListener('click', () => {\n setSelectedPinIndex(index);\n infoWindow.setOptions({\n ariaLabel: `${t('location_info')} - ${title ?? label}`,\n headerContent: title ?? label\n });\n infoWindow.setContent(infoWindowContent.current);\n infoWindow.open({\n anchor: marker,\n map: map.current\n });\n });\n }\n return marker;\n });\n } catch {\n markers.current = [];\n }\n\n if (centerMapOnChange) {\n centerMap(pins);\n }\n\n return () => {\n markers.current.forEach(m => {\n m.map = null;\n });\n dr.current?.setMap(null);\n };\n }, [\n JSON.stringify(pins, ['title', 'selected', 'latitude', 'longitude']),\n status,\n zoomLevel,\n disabled,\n drawRoute,\n centerMapOnChange,\n onError\n ]);\n\n return (\n <StyledLocationView $height={height} ref={ref}>\n <StyledMap\n ref={mapElemRef as Ref<HTMLDivElement>}\n disabled={disabled}\n status={status}\n {...restProps}\n />\n {(status === LoadStatus.Init || loading) && <Progress placement='local' />}\n {status === LoadStatus.Error && eMessage && (\n <StyledLocationError aria-label={eMessage} variant='info'>\n {eMessage}\n </StyledLocationError>\n )}\n {selectedPinIndex !== undefined && !!pins[selectedPinIndex].content && (\n <>{createPortal(pins[selectedPinIndex].content, infoWindowContent.current)}</>\n )}\n </StyledLocationView>\n );\n }\n);\n\nexport default LocationView;\n"]}
|
|
1
|
+
{"version":3,"file":"LocationView.js","sourceRoot":"","sources":["../../../src/components/Location/LocationView.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { PropsWithoutRef, Ref } from 'react';\nimport { forwardRef, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { useI18n, useTheme } from '../../hooks';\nimport type { RefElement, WithAttributes } from '../../types';\nimport { createUID } from '../../utils';\nimport Progress from '../Progress';\n\nimport { StyledLocationError, StyledLocationView, StyledMap } from './LocationView.styles';\nimport type { LatLng, Pin } from './Location.types';\nimport MapsContext from './MapsContext';\nimport { getAddress, getPlaceById, isLatLngObject, loadMapsAPI, toGoogleLatLng } from './utils';\n\nexport type LocationViewProps = WithAttributes<\n 'div',\n {\n /**\n * Array of location objects.\n * @default []\n */\n pins?: Pin[];\n /**\n * Set to true to always center the map when the selected location changes. Toggling this from false to true will re-center map on the last pinned location.\n * @default false\n */\n centerMapOnChange?: boolean;\n /**\n * Height of the map container.\n * @default '25rem'\n */\n height?: string;\n /**\n * How much the map should zoom.\n * @default 13\n */\n zoomLevel?: number;\n /** Callback fired when user clicks on a location on the map. This function will be passed the coordinates of the location that was clicked. */\n onClick?: (\n locationData: LatLng & {\n name?: string;\n address?: string;\n }\n ) => void;\n /**\n * Renders loading indicator when true. Informs the user location resolution is in progress.\n */\n loading?: boolean;\n /**\n * Disables dragging and clicking when true.\n * @default false\n */\n disabled?: boolean;\n /**\n * Indicates if route between pins should be rendered.\n * @default false\n */\n drawRoute?: boolean;\n\n /** Callback fired when an error occurs. This function gets called with one argument of type Error. */\n onError?: (error: Error) => void;\n /** Function that returns the current autocomplete session token. */\n getSessionToken?: () => google.maps.places.AutocompleteSessionToken | undefined;\n }\n>;\n\nenum LoadStatus {\n Init = 'init',\n Ready = 'ready',\n Error = 'error'\n}\n\nconst hasPlaceId = (obj: unknown): obj is google.maps.IconMouseEvent & { placeId: string } => {\n return (\n typeof obj === 'object' &&\n !!obj &&\n 'placeId' in obj &&\n !!obj.placeId &&\n typeof obj.placeId === 'string'\n );\n};\n\n/* cSpell:ignore 'ABCDEFGHIJKLMNOPQRSTUVWYZ' */\nconst markerLabels = 'ABCDEFGHIJKLMNOPQRSTUVWYZ';\n\nconst LocationView = forwardRef<RefElement<LocationViewProps>, PropsWithoutRef<LocationViewProps>>(\n function LocationView(props, ref) {\n const {\n pins = [],\n zoomLevel = 13,\n height = '25rem',\n centerMapOnChange = false,\n onClick,\n onError,\n disabled = false,\n loading = false,\n drawRoute = false,\n getSessionToken,\n ...restProps\n } = props;\n const t = useI18n();\n const { name, ...providerOpts } = useContext(MapsContext);\n const [status, setStatus] = useState<LoadStatus>(LoadStatus.Init);\n const [eMessage, setEMessage] = useState('');\n const [selectedPinIndex, setSelectedPinIndex] = useState<number | undefined>(undefined);\n const mapElemRef = useRef<HTMLDivElement>();\n const map = useRef<google.maps.Map>();\n const markers = useRef<google.maps.marker.AdvancedMarkerElement[]>([]);\n const ds = useRef<google.maps.DirectionsService>();\n const dr = useRef<google.maps.DirectionsRenderer>();\n const infoWindowContent = useRef<HTMLDivElement>(document.createElement('div'));\n const theme = useTheme();\n\n const onMapClick = (e: google.maps.MapMouseEvent) => {\n if (!isLatLngObject(e.latLng)) return;\n\n if (hasPlaceId(e)) {\n getPlaceById(e.placeId, getSessionToken?.()).then(placeInfo => {\n onClick?.({\n ...placeInfo,\n latitude: e.latLng!.lat(),\n longitude: e.latLng!.lng()\n });\n });\n } else {\n getAddress({\n latitude: e.latLng.lat(),\n longitude: e.latLng.lng()\n })\n .then(onClick)\n .catch(err => onError?.(err));\n }\n };\n\n const centerMap = useCallback((coords: LatLng[]) => {\n if (!map.current || coords.length === 0) return;\n\n if (coords.length === 1) {\n map.current.setCenter(toGoogleLatLng(coords[0]));\n map.current.setZoom(zoomLevel);\n } else {\n const bounds = new google.maps.LatLngBounds();\n coords.forEach(({ latitude, longitude }) => {\n bounds.extend(toGoogleLatLng({ latitude, longitude }));\n });\n map.current.fitBounds(bounds);\n }\n }, []);\n\n const initialize = () => {\n if (mapElemRef.current) {\n const position = toGoogleLatLng({ latitude: 0, longitude: 0 });\n map.current = new google.maps.Map(mapElemRef.current, {\n mapId: createUID(),\n center: position,\n zoom: 2,\n draggable: !disabled,\n draggableCursor: 'auto',\n draggingCursor: 'move'\n });\n ds.current = new google.maps.DirectionsService();\n dr.current = new google.maps.DirectionsRenderer({ suppressMarkers: true });\n centerMap(pins);\n }\n };\n\n useEffect(() => {\n if (!onClick || !map.current) return;\n\n const l = map.current.addListener('click', onMapClick);\n return () => google.maps.event.removeListener(l);\n }, [onClick, map.current, getSessionToken]);\n\n useEffect(() => {\n let mounted = true;\n loadMapsAPI(name, providerOpts)\n .then(() => {\n if (mounted) {\n initialize();\n setStatus(LoadStatus.Ready);\n }\n })\n .catch((error: Error) => {\n setStatus(LoadStatus.Error);\n setEMessage(error.message);\n onError?.(error);\n });\n\n return () => {\n mounted = false;\n if (map.current) google.maps.event.clearInstanceListeners(map.current);\n };\n }, []);\n\n useEffect(() => {\n if (\n status !== LoadStatus.Ready ||\n !map.current ||\n !dr.current ||\n !ds.current ||\n // FIXME: Workaround for marker library not being imported\n !google.maps.marker\n )\n return;\n\n if (drawRoute && pins.length > 1) {\n dr.current.setMap(map.current);\n const request: google.maps.DirectionsRequest = {\n origin: toGoogleLatLng({ latitude: pins[0].latitude, longitude: pins[0].longitude }),\n destination: toGoogleLatLng({\n latitude: pins[pins.length - 1].latitude,\n longitude: pins[pins.length - 1].longitude\n }),\n waypoints: pins.slice(1, pins.length - 1).map(l => {\n return {\n stopover: true,\n location: toGoogleLatLng({\n latitude: l.latitude,\n longitude: l.longitude\n })\n };\n }),\n travelMode: google.maps.TravelMode.DRIVING\n };\n\n ds.current.route(request)?.then(dr.current.setDirections.bind(dr.current), onError);\n }\n\n const infoWindow = new google.maps.InfoWindow();\n\n try {\n markers.current = pins.map(({ latitude, longitude, title, content, selected }, index) => {\n const gCoords = toGoogleLatLng({ latitude, longitude });\n\n const contentConfig: google.maps.marker.PinElementOptions = {\n glyphColor: theme.base.colors.white\n };\n const label = markerLabels[index % markerLabels.length];\n if (pins.length > 1) {\n const glyphWrapper = document.createElement('span');\n glyphWrapper.style.fontSize = '0.9rem';\n glyphWrapper.style.paddingTop = '0.1rem';\n glyphWrapper.innerHTML = label;\n contentConfig.glyph = glyphWrapper;\n }\n if (selected) {\n contentConfig.background = theme.base.colors.red.dark;\n contentConfig.borderColor = theme.base.colors.red.dark;\n contentConfig.scale = 1.15;\n }\n const pin = new google.maps.marker.PinElement(contentConfig);\n const marker = new google.maps.marker.AdvancedMarkerElement({\n map: map.current,\n position: gCoords,\n title,\n content: pin.element\n });\n if (content) {\n marker.addListener('click', () => {\n setSelectedPinIndex(index);\n infoWindow.setOptions({\n ariaLabel: `${t('location_info')} - ${title ?? label}`,\n headerContent: title ?? label\n });\n infoWindow.setContent(infoWindowContent.current);\n infoWindow.open({\n anchor: marker,\n map: map.current\n });\n });\n }\n return marker;\n });\n } catch {\n markers.current = [];\n }\n\n if (centerMapOnChange) {\n centerMap(pins);\n }\n\n return () => {\n markers.current.forEach(m => {\n m.map = null;\n });\n dr.current?.setMap(null);\n };\n }, [\n JSON.stringify(pins, ['title', 'selected', 'latitude', 'longitude']),\n status,\n zoomLevel,\n disabled,\n drawRoute,\n centerMapOnChange,\n onError\n ]);\n\n return (\n <StyledLocationView $height={height} ref={ref}>\n <StyledMap\n ref={mapElemRef as Ref<HTMLDivElement>}\n disabled={disabled}\n status={status}\n {...restProps}\n />\n {(status === LoadStatus.Init || loading) && <Progress placement='local' />}\n {status === LoadStatus.Error && eMessage && (\n <StyledLocationError aria-label={eMessage} variant='info'>\n {eMessage}\n </StyledLocationError>\n )}\n {selectedPinIndex !== undefined && !!pins[selectedPinIndex].content && (\n <>{createPortal(pins[selectedPinIndex].content, infoWindowContent.current)}</>\n )}\n </StyledLocationView>\n );\n }\n);\n\nexport default LocationView;\n"]}
|
|
@@ -30,14 +30,13 @@ export declare function toGoogleLatLng(coords: LatLng): google.maps.LatLng;
|
|
|
30
30
|
/** Returns an array of place prediction objects ('place' can be an establishment, geographic location, or prominent point of interest)
|
|
31
31
|
* and session token (valid for multiple queries, followed by one place selection).
|
|
32
32
|
*/
|
|
33
|
-
export declare function getPlacePredictions(location: string, bias?: Bias): Promise<{
|
|
33
|
+
export declare function getPlacePredictions(location: string, bias?: Bias, sessionToken?: google.maps.places.AutocompleteSessionToken): Promise<{
|
|
34
34
|
placePredictions: google.maps.places.AutocompletePrediction[];
|
|
35
35
|
token: google.maps.places.AutocompleteSessionToken;
|
|
36
36
|
}>;
|
|
37
|
-
export declare function getPlace(location: string, mapElement?: HTMLDivElement): Promise<LatLng>;
|
|
38
37
|
export declare function getPlaceById(placeId: string, sessionToken?: google.maps.places.AutocompleteSessionToken, mapElement?: HTMLDivElement): Promise<Location>;
|
|
39
38
|
/** Returns coordinations for given input: either coords, address or current position. */
|
|
40
|
-
export declare function getCoords(
|
|
39
|
+
export declare function getCoords(location: string | 'current' | LatLng): Promise<LatLng>;
|
|
41
40
|
export declare function getAddress(coords: LatLng): Promise<{
|
|
42
41
|
name: string;
|
|
43
42
|
address?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/Location/utils.ts"],"names":[],"mappings":";AAeA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAgB,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0H3F,wBAAsB,WAAW,CAAC,IAAI,GAAE,MAAW,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBvF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOzD;AA6BD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAmChD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAc5D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,IAAS,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/Location/utils.ts"],"names":[],"mappings":";AAeA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAgB,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0H3F,wBAAsB,WAAW,CAAC,IAAI,GAAE,MAAW,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBvF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOzD;AA6BD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAmChD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAc5D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,IAAS,EACf,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,GACzD,OAAO,CAAC;IACT,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;CACpD,CAAC,CA2CD;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,wBAA4E,EAC7G,UAAU,GAAE,cAA8C,GACzD,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AAED,yFAAyF;AACzF,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDtF;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CA+BD;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAShE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,EACnB,WAAW,MAAM,EAAE,EACnB,aAAY,MAAkB,WAS/B,CAAC"}
|