@sanity/google-maps-input 2.25.4 → 2.26.1-purple-unicorn.560

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/diff/resolver.js +7 -0
  2. package/input/GeopointInput.js +7 -0
  3. package/lib/_Marker-20984c4d.cjs +331 -0
  4. package/lib/_Marker-20984c4d.cjs.map +1 -0
  5. package/lib/_Marker-96f5387c.js +302 -0
  6. package/lib/_Marker-96f5387c.js.map +1 -0
  7. package/lib/_reExport.js +19 -0
  8. package/lib/diff/resolver.cjs +204 -0
  9. package/lib/diff/resolver.cjs.map +1 -0
  10. package/lib/diff/resolver.js +169 -17
  11. package/lib/diff/resolver.js.map +1 -0
  12. package/{dist/dts → lib/dts/src}/diff/GeopointArrayDiff.d.ts +4 -4
  13. package/lib/dts/src/diff/GeopointArrayDiff.d.ts.map +1 -0
  14. package/{dist/dts → lib/dts/src}/diff/GeopointFieldDiff.d.ts +4 -4
  15. package/lib/dts/src/diff/GeopointFieldDiff.d.ts.map +1 -0
  16. package/{dist/dts → lib/dts/src}/diff/GeopointFieldDiff.styles.d.ts +1 -1
  17. package/lib/dts/src/diff/GeopointFieldDiff.styles.d.ts.map +1 -0
  18. package/{dist/dts → lib/dts/src}/diff/GeopointMove.d.ts +12 -12
  19. package/lib/dts/src/diff/GeopointMove.d.ts.map +1 -0
  20. package/lib/dts/src/diff/resolver.d.ts +4 -0
  21. package/lib/dts/src/diff/resolver.d.ts.map +1 -0
  22. package/{dist/dts → lib/dts/src}/input/GeopointInput.d.ts +27 -39
  23. package/lib/dts/src/input/GeopointInput.d.ts.map +1 -0
  24. package/{dist/dts → lib/dts/src}/input/GeopointInput.styles.d.ts +2 -2
  25. package/lib/dts/src/input/GeopointInput.styles.d.ts.map +1 -0
  26. package/{dist/dts → lib/dts/src}/input/GeopointSelect.d.ts +27 -27
  27. package/lib/dts/src/input/GeopointSelect.d.ts.map +1 -0
  28. package/{dist/dts → lib/dts/src}/loader/GoogleMapsLoadProxy.d.ts +13 -13
  29. package/lib/dts/src/loader/GoogleMapsLoadProxy.d.ts.map +1 -0
  30. package/{dist/dts → lib/dts/src}/loader/LoadError.d.ts +9 -9
  31. package/lib/dts/src/loader/LoadError.d.ts.map +1 -0
  32. package/{dist/dts → lib/dts/src}/loader/loadGoogleMapsApi.d.ts +17 -17
  33. package/lib/dts/src/loader/loadGoogleMapsApi.d.ts.map +1 -0
  34. package/{dist/dts → lib/dts/src}/map/Arrow.d.ts +28 -28
  35. package/lib/dts/src/map/Arrow.d.ts.map +1 -0
  36. package/{dist/dts → lib/dts/src}/map/Map.d.ts +36 -36
  37. package/lib/dts/src/map/Map.d.ts.map +1 -0
  38. package/{dist/dts → lib/dts/src}/map/Map.styles.d.ts +1 -1
  39. package/lib/dts/src/map/Map.styles.d.ts.map +1 -0
  40. package/{dist/dts → lib/dts/src}/map/Marker.d.ts +33 -35
  41. package/lib/dts/src/map/Marker.d.ts.map +1 -0
  42. package/{dist/dts → lib/dts/src}/map/SearchInput.d.ts +15 -15
  43. package/lib/dts/src/map/SearchInput.d.ts.map +1 -0
  44. package/{dist/dts → lib/dts/src}/map/SearchInput.styles.d.ts +1 -1
  45. package/lib/dts/src/map/SearchInput.styles.d.ts.map +1 -0
  46. package/{dist/dts → lib/dts/src}/map/util.d.ts +3 -3
  47. package/lib/dts/src/map/util.d.ts.map +1 -0
  48. package/lib/dts/src/types.d.ts +17 -0
  49. package/lib/dts/src/types.d.ts.map +1 -0
  50. package/lib/input/GeopointInput.cjs +228 -0
  51. package/lib/input/GeopointInput.cjs.map +1 -0
  52. package/lib/input/GeopointInput.js +198 -190
  53. package/lib/input/GeopointInput.js.map +1 -0
  54. package/package.json +34 -11
  55. package/src/@types/css.d.ts +4 -0
  56. package/src/diff/GeopointArrayDiff.tsx +83 -0
  57. package/src/diff/GeopointFieldDiff.styles.tsx +20 -0
  58. package/src/diff/GeopointFieldDiff.tsx +94 -0
  59. package/src/diff/GeopointMove.tsx +49 -0
  60. package/src/diff/resolver.ts +21 -0
  61. package/src/input/GeopointInput.styles.tsx +12 -0
  62. package/src/input/GeopointInput.tsx +221 -0
  63. package/src/input/GeopointSelect.tsx +78 -0
  64. package/src/loader/GoogleMapsLoadProxy.tsx +49 -0
  65. package/src/loader/LoadError.tsx +44 -0
  66. package/src/loader/loadGoogleMapsApi.ts +93 -0
  67. package/src/map/Arrow.tsx +76 -0
  68. package/src/map/Map.styles.tsx +10 -0
  69. package/src/map/Map.tsx +125 -0
  70. package/src/map/Marker.tsx +130 -0
  71. package/src/map/SearchInput.styles.tsx +8 -0
  72. package/src/map/SearchInput.tsx +56 -0
  73. package/src/map/util.ts +14 -0
  74. package/src/types.ts +19 -0
  75. package/.depcheckignore.json +0 -3
  76. package/dist/dts/diff/GeopointArrayDiff.d.ts.map +0 -1
  77. package/dist/dts/diff/GeopointFieldDiff.d.ts.map +0 -1
  78. package/dist/dts/diff/GeopointFieldDiff.styles.d.ts.map +0 -1
  79. package/dist/dts/diff/GeopointMove.d.ts.map +0 -1
  80. package/dist/dts/diff/resolver.d.ts +0 -4
  81. package/dist/dts/diff/resolver.d.ts.map +0 -1
  82. package/dist/dts/input/GeopointInput.d.ts.map +0 -1
  83. package/dist/dts/input/GeopointInput.styles.d.ts.map +0 -1
  84. package/dist/dts/input/GeopointSelect.d.ts.map +0 -1
  85. package/dist/dts/loader/GoogleMapsLoadProxy.d.ts.map +0 -1
  86. package/dist/dts/loader/LoadError.d.ts.map +0 -1
  87. package/dist/dts/loader/loadGoogleMapsApi.d.ts.map +0 -1
  88. package/dist/dts/map/Arrow.d.ts.map +0 -1
  89. package/dist/dts/map/Map.d.ts.map +0 -1
  90. package/dist/dts/map/Map.styles.d.ts.map +0 -1
  91. package/dist/dts/map/Marker.d.ts.map +0 -1
  92. package/dist/dts/map/SearchInput.d.ts.map +0 -1
  93. package/dist/dts/map/SearchInput.styles.d.ts.map +0 -1
  94. package/dist/dts/map/util.d.ts.map +0 -1
  95. package/dist/dts/types.d.ts +0 -14
  96. package/dist/dts/types.d.ts.map +0 -1
  97. package/lib/@types/css.d.js +0 -1
  98. package/lib/diff/GeopointArrayDiff.js +0 -82
  99. package/lib/diff/GeopointFieldDiff.js +0 -97
  100. package/lib/diff/GeopointFieldDiff.styles.js +0 -18
  101. package/lib/diff/GeopointMove.js +0 -55
  102. package/lib/input/GeopointInput.styles.js +0 -22
  103. package/lib/input/GeopointSelect.js +0 -103
  104. package/lib/loader/GoogleMapsLoadProxy.js +0 -70
  105. package/lib/loader/LoadError.js +0 -43
  106. package/lib/loader/loadGoogleMapsApi.js +0 -81
  107. package/lib/map/Arrow.js +0 -97
  108. package/lib/map/Map.js +0 -147
  109. package/lib/map/Map.styles.js +0 -18
  110. package/lib/map/Marker.js +0 -156
  111. package/lib/map/SearchInput.js +0 -77
  112. package/lib/map/SearchInput.styles.js +0 -18
  113. package/lib/map/util.js +0 -14
  114. package/lib/types.js +0 -5
  115. package/tsconfig.json +0 -20
@@ -0,0 +1,302 @@
1
+ import * as React from 'react';
2
+ import React__default from 'react';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import config from 'config:@sanity/google-maps-input';
5
+ import { Card, Box, Text, Code } from '@sanity/ui';
6
+ import styled from 'styled-components';
7
+
8
+ // @todo: remove the following line when part imports has been removed from this file
9
+ const callbackName = '___sanity_googleMapsApiCallback';
10
+ const authFailureCallbackName = 'gm_authFailure';
11
+ const locale = (typeof window !== 'undefined' && window.navigator.language) || 'en';
12
+ let subject;
13
+ function loadGoogleMapsApi() {
14
+ const selectedLocale = config.defaultLocale || locale || 'en-US';
15
+ if (subject) {
16
+ return subject;
17
+ }
18
+ subject = new BehaviorSubject({ loadState: 'loading' });
19
+ window[authFailureCallbackName] = () => {
20
+ delete window[authFailureCallbackName];
21
+ subject.next({ loadState: 'authError' });
22
+ };
23
+ window[callbackName] = () => {
24
+ delete window[callbackName];
25
+ subject.next({ loadState: 'loaded', api: window.google.maps });
26
+ };
27
+ const script = document.createElement('script');
28
+ script.onerror = (event, source, lineno, colno, error) => subject.next({
29
+ loadState: 'loadError',
30
+ error: coeerceError(event, error),
31
+ });
32
+ script.src = `https://maps.googleapis.com/maps/api/js?key=${config.apiKey}&libraries=places&callback=${callbackName}&language=${selectedLocale}`;
33
+ document.getElementsByTagName('head')[0].appendChild(script);
34
+ return subject;
35
+ }
36
+ function coeerceError(event, error) {
37
+ if (error) {
38
+ return error;
39
+ }
40
+ if (typeof event === 'string') {
41
+ return new Error(event);
42
+ }
43
+ return new Error(isErrorEvent(event) ? event.message : 'Failed to load Google Maps API');
44
+ }
45
+ function isErrorEvent(event) {
46
+ if (typeof event !== 'object' || event === null) {
47
+ return false;
48
+ }
49
+ if (!('message' in event)) {
50
+ return false;
51
+ }
52
+ return typeof event.message === 'string';
53
+ }
54
+
55
+ function LoadError(props) {
56
+ return (React.createElement(Card, { tone: "critical", radius: 1 },
57
+ React.createElement(Box, { as: "header", paddingX: 4, paddingTop: 4, paddingBottom: 1 },
58
+ React.createElement(Text, { as: "h2", weight: "bold" }, "Google Maps failed to load")),
59
+ React.createElement(Box, { paddingX: 4, paddingTop: 4, paddingBottom: 1 }, props.isAuthError ? (React.createElement(AuthError, null)) : (React.createElement(React.Fragment, null,
60
+ React.createElement(Text, { as: "h3" }, "Error details:"),
61
+ React.createElement("pre", null,
62
+ React.createElement(Code, { size: 1 }, props.error?.message)))))));
63
+ }
64
+ function AuthError() {
65
+ return (React.createElement(Text, null,
66
+ React.createElement("p", null, "The error appears to be related to authentication"),
67
+ React.createElement("p", null, "Common causes include:"),
68
+ React.createElement("ul", null,
69
+ React.createElement("li", null, "Incorrect API key"),
70
+ React.createElement("li", null, "Referer not allowed"),
71
+ React.createElement("li", null, "Missing authentication scope")),
72
+ React.createElement("p", null, "Check the browser developer tools for more information.")));
73
+ }
74
+
75
+ class GoogleMapsLoadProxy extends React__default.Component {
76
+ loadSubscription;
77
+ constructor(props) {
78
+ super(props);
79
+ this.state = { loadState: 'loading' };
80
+ let sync = true;
81
+ this.loadSubscription = loadGoogleMapsApi().subscribe((loadState) => {
82
+ if (sync) {
83
+ this.state = loadState;
84
+ }
85
+ else {
86
+ this.setState(loadState);
87
+ }
88
+ });
89
+ sync = false;
90
+ }
91
+ componentWillUnmount() {
92
+ if (this.loadSubscription) {
93
+ this.loadSubscription.unsubscribe();
94
+ }
95
+ }
96
+ render() {
97
+ switch (this.state.loadState) {
98
+ case 'loadError':
99
+ return React__default.createElement(LoadError, { error: this.state.error, isAuthError: false });
100
+ case 'authError':
101
+ return React__default.createElement(LoadError, { isAuthError: true });
102
+ case 'loading':
103
+ return React__default.createElement("div", null, "Loading Google Maps API");
104
+ case 'loaded':
105
+ return this.props.children(this.state.api) || null;
106
+ default:
107
+ return null;
108
+ }
109
+ }
110
+ }
111
+
112
+ function latLngAreEqual(latLng1, latLng2) {
113
+ const lat1 = typeof latLng1.lat === 'function' ? latLng1.lat() : latLng1.lat;
114
+ const lng1 = typeof latLng1.lng === 'function' ? latLng1.lng() : latLng1.lng;
115
+ const lat2 = typeof latLng2.lat === 'function' ? latLng2.lat() : latLng2.lat;
116
+ const lng2 = typeof latLng2.lng === 'function' ? latLng2.lng() : latLng2.lng;
117
+ return lat1 === lat2 && lng1 === lng2;
118
+ }
119
+
120
+ const MapContainer = styled.div `
121
+ position: absolute;
122
+ top: 0;
123
+ left: 0;
124
+ height: 100%;
125
+ width: 100%;
126
+ box-sizing: border-box;
127
+ `;
128
+
129
+ class GoogleMap extends React__default.PureComponent {
130
+ static defaultProps = {
131
+ defaultZoom: 8,
132
+ scrollWheel: true,
133
+ };
134
+ state = { map: undefined };
135
+ clickHandler;
136
+ mapRef = React__default.createRef();
137
+ mapEl = null;
138
+ componentDidMount() {
139
+ this.attachClickHandler();
140
+ }
141
+ attachClickHandler = () => {
142
+ const map = this.state.map;
143
+ if (!map) {
144
+ return;
145
+ }
146
+ const { api, onClick } = this.props;
147
+ const { event } = api;
148
+ if (this.clickHandler) {
149
+ this.clickHandler.remove();
150
+ }
151
+ if (onClick) {
152
+ this.clickHandler = event.addListener(map, 'click', onClick);
153
+ }
154
+ };
155
+ componentDidUpdate(prevProps) {
156
+ const map = this.state.map;
157
+ if (!map) {
158
+ return;
159
+ }
160
+ const { onClick, location, bounds } = this.props;
161
+ if (prevProps.onClick !== onClick) {
162
+ this.attachClickHandler();
163
+ }
164
+ if (!latLngAreEqual(prevProps.location, location)) {
165
+ map.panTo(this.getCenter());
166
+ }
167
+ if (bounds && (!prevProps.bounds || !bounds.equals(prevProps.bounds))) {
168
+ map.fitBounds(bounds);
169
+ }
170
+ }
171
+ componentWillUnmount() {
172
+ if (this.clickHandler) {
173
+ this.clickHandler.remove();
174
+ }
175
+ }
176
+ getCenter() {
177
+ const { location, api } = this.props;
178
+ return new api.LatLng(location.lat, location.lng);
179
+ }
180
+ constructMap(el) {
181
+ const { defaultZoom, api, mapTypeControl, controlSize, bounds, scrollWheel } = this.props;
182
+ const map = new api.Map(el, {
183
+ zoom: defaultZoom,
184
+ center: this.getCenter(),
185
+ scrollwheel: scrollWheel,
186
+ streetViewControl: false,
187
+ mapTypeControl,
188
+ controlSize,
189
+ });
190
+ if (bounds) {
191
+ map.fitBounds(bounds);
192
+ }
193
+ return map;
194
+ }
195
+ setMapElement = (element) => {
196
+ if (element && element !== this.mapEl) {
197
+ const map = this.constructMap(element);
198
+ this.setState({ map }, this.attachClickHandler);
199
+ }
200
+ this.mapEl = element;
201
+ };
202
+ render() {
203
+ const { children } = this.props;
204
+ const { map } = this.state;
205
+ return (React__default.createElement(React__default.Fragment, null,
206
+ React__default.createElement(MapContainer, { ref: this.setMapElement }),
207
+ children && map ? children(map) : null));
208
+ }
209
+ }
210
+
211
+ const markerPath = 'M 3.052 3.7 C 1.56 5.293 0.626 7.612 0.663 9.793 C 0.738 14.352 2.793 16.077 6.078 22.351 C 7.263 25.111 8.497 28.032 9.672 32.871 C 9.835 33.584 9.994 34.246 10.069 34.305 C 10.143 34.362 10.301 33.697 10.465 32.983 C 11.639 28.145 12.875 25.226 14.059 22.466 C 17.344 16.192 19.398 14.466 19.474 9.908 C 19.511 7.727 18.574 5.405 17.083 3.814 C 15.379 1.994 12.809 0.649 10.069 0.593 C 7.328 0.536 4.756 1.882 3.052 3.7 Z';
212
+ class Marker extends React.PureComponent {
213
+ marker;
214
+ eventHandlers = {};
215
+ componentDidMount() {
216
+ const { position, api, map, onMove, zIndex, opacity, label, markerRef, color } = this.props;
217
+ const { Marker: GMarker } = api;
218
+ let icon;
219
+ if (color) {
220
+ icon = {
221
+ path: markerPath,
222
+ fillOpacity: 1,
223
+ fillColor: color.background,
224
+ strokeColor: color.border,
225
+ strokeWeight: 2,
226
+ anchor: new api.Point(10, 35),
227
+ labelOrigin: new api.Point(10, 11),
228
+ };
229
+ }
230
+ this.marker = new GMarker({
231
+ draggable: Boolean(onMove),
232
+ position,
233
+ map,
234
+ zIndex,
235
+ opacity,
236
+ label,
237
+ icon,
238
+ });
239
+ if (markerRef) {
240
+ markerRef.current = this.marker;
241
+ }
242
+ this.attachMoveHandler();
243
+ this.attachClickHandler();
244
+ }
245
+ componentDidUpdate(prevProps) {
246
+ if (!this.marker) {
247
+ return;
248
+ }
249
+ const { position, onMove, label, zIndex, opacity, map } = this.props;
250
+ if (prevProps.onMove !== onMove) {
251
+ this.attachMoveHandler();
252
+ }
253
+ if (!latLngAreEqual(prevProps.position, position)) {
254
+ this.marker.setPosition(position);
255
+ }
256
+ if (prevProps.label !== label) {
257
+ this.marker.setLabel(label || null);
258
+ }
259
+ if (prevProps.zIndex !== zIndex) {
260
+ this.marker.setZIndex(zIndex || null);
261
+ }
262
+ if (prevProps.opacity !== opacity) {
263
+ this.marker.setOpacity(opacity || null);
264
+ }
265
+ if (prevProps.map !== map) {
266
+ this.marker.setMap(map);
267
+ }
268
+ }
269
+ componentWillUnmount() {
270
+ if (this.eventHandlers.move) {
271
+ this.eventHandlers.move.remove();
272
+ }
273
+ if (this.marker) {
274
+ this.marker.setMap(null);
275
+ }
276
+ }
277
+ attachMoveHandler() {
278
+ const { api, onMove } = this.props;
279
+ if (this.eventHandlers.move) {
280
+ this.eventHandlers.move.remove();
281
+ }
282
+ if (this.marker && onMove) {
283
+ this.eventHandlers.move = api.event.addListener(this.marker, 'dragend', onMove);
284
+ }
285
+ }
286
+ attachClickHandler() {
287
+ const { api, onClick } = this.props;
288
+ if (this.eventHandlers.click) {
289
+ this.eventHandlers.click.remove();
290
+ }
291
+ if (this.marker && onClick) {
292
+ this.eventHandlers.click = api.event.addListener(this.marker, 'click', onClick);
293
+ }
294
+ }
295
+ // eslint-disable-next-line class-methods-use-this
296
+ render() {
297
+ return null;
298
+ }
299
+ }
300
+
301
+ export { GoogleMap as G, Marker as M, GoogleMapsLoadProxy as a, latLngAreEqual as l };
302
+ //# sourceMappingURL=_Marker-96f5387c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_Marker-96f5387c.js","sources":["../src/loader/loadGoogleMapsApi.ts","../src/loader/LoadError.tsx","../src/loader/GoogleMapsLoadProxy.tsx","../src/map/util.ts","../src/map/Map.styles.tsx","../src/map/Map.tsx","../src/map/Marker.tsx"],"sourcesContent":["// @todo: remove the following line when part imports has been removed from this file\n///<reference types=\"@sanity/types/parts\" />\n\nimport {Observable, BehaviorSubject} from 'rxjs'\nimport config from 'config:@sanity/google-maps-input'\n\nconst callbackName = '___sanity_googleMapsApiCallback'\nconst authFailureCallbackName = 'gm_authFailure'\nconst locale = (typeof window !== 'undefined' && window.navigator.language) || 'en'\n\nexport interface LoadingState {\n loadState: 'loading'\n}\n\nexport interface LoadedState {\n loadState: 'loaded'\n api: typeof window.google.maps\n}\n\nexport interface LoadErrorState {\n loadState: 'loadError'\n error: Error\n}\n\nexport interface AuthErrorState {\n loadState: 'authError'\n}\n\nexport type GoogleLoadState = LoadingState | LoadedState | LoadErrorState | AuthErrorState\n\nlet subject: BehaviorSubject<GoogleLoadState>\n\nexport function loadGoogleMapsApi(): Observable<GoogleLoadState> {\n const selectedLocale = config.defaultLocale || locale || 'en-US'\n\n if (subject) {\n return subject\n }\n\n subject = new BehaviorSubject<GoogleLoadState>({loadState: 'loading'})\n\n window[authFailureCallbackName] = () => {\n delete window[authFailureCallbackName]\n subject.next({loadState: 'authError'})\n }\n\n window[callbackName] = () => {\n delete window[callbackName]\n subject.next({loadState: 'loaded', api: window.google.maps})\n }\n\n const script = document.createElement('script')\n script.onerror = (\n event: Event | string,\n source?: string,\n lineno?: number,\n colno?: number,\n error?: Error\n ) =>\n subject.next({\n loadState: 'loadError',\n error: coeerceError(event, error),\n } as LoadErrorState)\n\n script.src = `https://maps.googleapis.com/maps/api/js?key=${config.apiKey}&libraries=places&callback=${callbackName}&language=${selectedLocale}`\n document.getElementsByTagName('head')[0].appendChild(script)\n\n return subject\n}\n\nfunction coeerceError(event: Event | string, error?: Error): Error {\n if (error) {\n return error\n }\n\n if (typeof event === 'string') {\n return new Error(event)\n }\n\n return new Error(isErrorEvent(event) ? event.message : 'Failed to load Google Maps API')\n}\n\nfunction isErrorEvent(event: unknown): event is ErrorEvent {\n if (typeof event !== 'object' || event === null) {\n return false\n }\n\n if (!('message' in event)) {\n return false\n }\n\n return typeof (event as ErrorEvent).message === 'string'\n}\n","import * as React from 'react'\nimport {Card, Box, Text, Code} from '@sanity/ui'\n\ntype Props = {error: Error; isAuthError: false} | {isAuthError: true}\n\nexport function LoadError(props: Props) {\n return (\n <Card tone=\"critical\" radius={1}>\n <Box as=\"header\" paddingX={4} paddingTop={4} paddingBottom={1}>\n <Text as=\"h2\" weight=\"bold\">\n Google Maps failed to load\n </Text>\n </Box>\n\n <Box paddingX={4} paddingTop={4} paddingBottom={1}>\n {props.isAuthError ? (\n <AuthError />\n ) : (\n <>\n <Text as=\"h3\">Error details:</Text>\n <pre>\n <Code size={1}>{props.error?.message}</Code>\n </pre>\n </>\n )}\n </Box>\n </Card>\n )\n}\n\nfunction AuthError() {\n return (\n <Text>\n <p>The error appears to be related to authentication</p>\n <p>Common causes include:</p>\n <ul>\n <li>Incorrect API key</li>\n <li>Referer not allowed</li>\n <li>Missing authentication scope</li>\n </ul>\n <p>Check the browser developer tools for more information.</p>\n </Text>\n )\n}\n","import React from 'react'\nimport {Subscription} from 'rxjs'\nimport {loadGoogleMapsApi, GoogleLoadState} from './loadGoogleMapsApi'\nimport {LoadError} from './LoadError'\n\ninterface LoadProps {\n children: (api: typeof window.google.maps) => React.ReactElement\n}\n\nexport class GoogleMapsLoadProxy extends React.Component<LoadProps, GoogleLoadState> {\n loadSubscription: Subscription | undefined\n\n constructor(props: LoadProps) {\n super(props)\n\n this.state = {loadState: 'loading'}\n\n let sync = true\n this.loadSubscription = loadGoogleMapsApi().subscribe((loadState) => {\n if (sync) {\n this.state = loadState\n } else {\n this.setState(loadState)\n }\n })\n sync = false\n }\n\n componentWillUnmount() {\n if (this.loadSubscription) {\n this.loadSubscription.unsubscribe()\n }\n }\n\n render() {\n switch (this.state.loadState) {\n case 'loadError':\n return <LoadError error={this.state.error} isAuthError={false} />\n case 'authError':\n return <LoadError isAuthError />\n case 'loading':\n return <div>Loading Google Maps API</div>\n case 'loaded':\n return this.props.children(this.state.api) || null\n default:\n return null\n }\n }\n}\n","import {LatLng} from '../types'\n\nexport function latLngAreEqual(\n latLng1: LatLng | google.maps.LatLng,\n latLng2: LatLng | google.maps.LatLng\n) {\n const lat1 = typeof latLng1.lat === 'function' ? latLng1.lat() : latLng1.lat\n const lng1 = typeof latLng1.lng === 'function' ? latLng1.lng() : latLng1.lng\n\n const lat2 = typeof latLng2.lat === 'function' ? latLng2.lat() : latLng2.lat\n const lng2 = typeof latLng2.lng === 'function' ? latLng2.lng() : latLng2.lng\n\n return lat1 === lat2 && lng1 === lng2\n}\n","import styled from 'styled-components'\n\nexport const MapContainer = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n`\n","import React from 'react'\nimport {LatLng} from '../types'\nimport {latLngAreEqual} from './util'\nimport {MapContainer} from './Map.styles'\n\ninterface MapProps {\n api: typeof window.google.maps\n location: LatLng\n bounds?: google.maps.LatLngBounds\n defaultZoom?: number\n mapTypeControl?: boolean\n scrollWheel?: boolean\n controlSize?: number\n onClick?: (event: google.maps.MapMouseEvent) => void\n children?: (map: google.maps.Map) => React.ReactElement\n}\n\ninterface MapState {\n map: google.maps.Map | undefined\n}\n\nexport class GoogleMap extends React.PureComponent<MapProps, MapState> {\n static defaultProps = {\n defaultZoom: 8,\n scrollWheel: true,\n }\n\n state: MapState = {map: undefined}\n clickHandler: google.maps.MapsEventListener | undefined\n mapRef = React.createRef<HTMLDivElement>()\n mapEl: HTMLDivElement | null = null\n\n componentDidMount() {\n this.attachClickHandler()\n }\n\n attachClickHandler = () => {\n const map = this.state.map\n if (!map) {\n return\n }\n\n const {api, onClick} = this.props\n const {event} = api\n\n if (this.clickHandler) {\n this.clickHandler.remove()\n }\n\n if (onClick) {\n this.clickHandler = event.addListener(map, 'click', onClick)\n }\n }\n\n componentDidUpdate(prevProps: MapProps) {\n const map = this.state.map\n if (!map) {\n return\n }\n\n const {onClick, location, bounds} = this.props\n\n if (prevProps.onClick !== onClick) {\n this.attachClickHandler()\n }\n\n if (!latLngAreEqual(prevProps.location, location)) {\n map.panTo(this.getCenter())\n }\n\n if (bounds && (!prevProps.bounds || !bounds.equals(prevProps.bounds))) {\n map.fitBounds(bounds)\n }\n }\n\n componentWillUnmount() {\n if (this.clickHandler) {\n this.clickHandler.remove()\n }\n }\n\n getCenter(): google.maps.LatLng {\n const {location, api} = this.props\n return new api.LatLng(location.lat, location.lng)\n }\n\n constructMap(el: HTMLDivElement) {\n const {defaultZoom, api, mapTypeControl, controlSize, bounds, scrollWheel} = this.props\n\n const map = new api.Map(el, {\n zoom: defaultZoom,\n center: this.getCenter(),\n scrollwheel: scrollWheel,\n streetViewControl: false,\n mapTypeControl,\n controlSize,\n })\n\n if (bounds) {\n map.fitBounds(bounds)\n }\n\n return map\n }\n\n setMapElement = (element: HTMLDivElement | null) => {\n if (element && element !== this.mapEl) {\n const map = this.constructMap(element)\n this.setState({map}, this.attachClickHandler)\n }\n\n this.mapEl = element\n }\n\n render() {\n const {children} = this.props\n const {map} = this.state\n return (\n <>\n <MapContainer ref={this.setMapElement} />\n {children && map ? children(map) : null}\n </>\n )\n }\n}\n","import * as React from 'react'\nimport {LatLng} from '../types'\nimport {latLngAreEqual} from './util'\n\nconst markerPath =\n 'M 3.052 3.7 C 1.56 5.293 0.626 7.612 0.663 9.793 C 0.738 14.352 2.793 16.077 6.078 22.351 C 7.263 25.111 8.497 28.032 9.672 32.871 C 9.835 33.584 9.994 34.246 10.069 34.305 C 10.143 34.362 10.301 33.697 10.465 32.983 C 11.639 28.145 12.875 25.226 14.059 22.466 C 17.344 16.192 19.398 14.466 19.474 9.908 C 19.511 7.727 18.574 5.405 17.083 3.814 C 15.379 1.994 12.809 0.649 10.069 0.593 C 7.328 0.536 4.756 1.882 3.052 3.7 Z'\n\ninterface Props {\n api: typeof window.google.maps\n map: google.maps.Map\n onMove?: (event: google.maps.MapMouseEvent) => void\n onClick?: (event: google.maps.MapMouseEvent) => void\n position: LatLng | google.maps.LatLng\n zIndex?: number\n opacity?: number\n label?: string\n markerRef?: React.MutableRefObject<google.maps.Marker | undefined>\n color?: {background: string; border: string; text: string}\n}\n\nexport class Marker extends React.PureComponent<Props> {\n marker: google.maps.Marker | undefined\n\n eventHandlers: {\n move?: google.maps.MapsEventListener\n click?: google.maps.MapsEventListener\n } = {}\n\n componentDidMount() {\n const {position, api, map, onMove, zIndex, opacity, label, markerRef, color} = this.props\n const {Marker: GMarker} = api\n\n let icon: google.maps.ReadonlySymbol | undefined\n if (color) {\n icon = {\n path: markerPath,\n fillOpacity: 1,\n fillColor: color.background,\n strokeColor: color.border,\n strokeWeight: 2,\n anchor: new api.Point(10, 35),\n labelOrigin: new api.Point(10, 11),\n }\n }\n\n this.marker = new GMarker({\n draggable: Boolean(onMove),\n position,\n map,\n zIndex,\n opacity,\n label,\n icon,\n })\n\n if (markerRef) {\n markerRef.current = this.marker\n }\n\n this.attachMoveHandler()\n this.attachClickHandler()\n }\n\n componentDidUpdate(prevProps: Props) {\n if (!this.marker) {\n return\n }\n\n const {position, onMove, label, zIndex, opacity, map} = this.props\n\n if (prevProps.onMove !== onMove) {\n this.attachMoveHandler()\n }\n\n if (!latLngAreEqual(prevProps.position, position)) {\n this.marker.setPosition(position)\n }\n\n if (prevProps.label !== label) {\n this.marker.setLabel(label || null)\n }\n\n if (prevProps.zIndex !== zIndex) {\n this.marker.setZIndex(zIndex || null)\n }\n\n if (prevProps.opacity !== opacity) {\n this.marker.setOpacity(opacity || null)\n }\n\n if (prevProps.map !== map) {\n this.marker.setMap(map)\n }\n }\n\n componentWillUnmount() {\n if (this.eventHandlers.move) {\n this.eventHandlers.move.remove()\n }\n\n if (this.marker) {\n this.marker.setMap(null)\n }\n }\n\n attachMoveHandler() {\n const {api, onMove} = this.props\n if (this.eventHandlers.move) {\n this.eventHandlers.move.remove()\n }\n if (this.marker && onMove) {\n this.eventHandlers.move = api.event.addListener(this.marker, 'dragend', onMove)\n }\n }\n\n attachClickHandler() {\n const {api, onClick} = this.props\n if (this.eventHandlers.click) {\n this.eventHandlers.click.remove()\n }\n if (this.marker && onClick) {\n this.eventHandlers.click = api.event.addListener(this.marker, 'click', onClick)\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n render() {\n return null\n }\n}\n"],"names":["React"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ 'use strict'
2
+
3
+ module.exports = function _reExport(_exports, _sourceModule) {
4
+ Object.defineProperty(_exports, '__esModule', {
5
+ value: true,
6
+ })
7
+
8
+ Object.keys(_sourceModule).forEach(function (key) {
9
+ if (key === '__esModule') return
10
+ if (key in _exports && _exports[key] === _sourceModule[key]) return
11
+
12
+ Object.defineProperty(_exports, key, {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _sourceModule[key]
16
+ },
17
+ })
18
+ })
19
+ }
@@ -0,0 +1,204 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var field = require('@sanity/base/field');
5
+ var Marker = require('../_Marker-20984c4d.cjs');
6
+ var userColor = require('@sanity/base/user-color');
7
+ var styled = require('styled-components');
8
+ require('rxjs');
9
+ require('config:@sanity/google-maps-input');
10
+ require('@sanity/ui');
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ function _interopNamespace(e) {
15
+ if (e && e.__esModule) return e;
16
+ var n = Object.create(null);
17
+ if (e) {
18
+ Object.keys(e).forEach(function (k) {
19
+ if (k !== 'default') {
20
+ var d = Object.getOwnPropertyDescriptor(e, k);
21
+ Object.defineProperty(n, k, d.get ? d : {
22
+ enumerable: true,
23
+ get: function () { return e[k]; }
24
+ });
25
+ }
26
+ });
27
+ }
28
+ n["default"] = e;
29
+ return n;
30
+ }
31
+
32
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
33
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
34
+
35
+ class Arrow extends React__namespace.PureComponent {
36
+ line;
37
+ eventHandlers = {};
38
+ componentDidMount() {
39
+ const { from, to, api, map, zIndex, onClick, color, arrowRef } = this.props;
40
+ const lineSymbol = {
41
+ path: api.SymbolPath.FORWARD_OPEN_ARROW,
42
+ };
43
+ this.line = new api.Polyline({
44
+ map,
45
+ zIndex,
46
+ path: [from, to],
47
+ icons: [{ icon: lineSymbol, offset: '50%' }],
48
+ strokeOpacity: 0.55,
49
+ strokeColor: color ? color.text : 'black',
50
+ });
51
+ if (onClick) {
52
+ this.eventHandlers.click = api.event.addListener(this.line, 'click', onClick);
53
+ }
54
+ if (arrowRef) {
55
+ arrowRef.current = this.line;
56
+ }
57
+ }
58
+ componentDidUpdate(prevProps) {
59
+ if (!this.line) {
60
+ return;
61
+ }
62
+ const { from, to, map } = this.props;
63
+ if (!Marker.latLngAreEqual(prevProps.from, from) || !Marker.latLngAreEqual(prevProps.to, to)) {
64
+ this.line.setPath([from, to]);
65
+ }
66
+ if (prevProps.map !== map) {
67
+ this.line.setMap(map);
68
+ }
69
+ }
70
+ componentWillUnmount() {
71
+ if (this.line) {
72
+ this.line.setMap(null);
73
+ }
74
+ if (this.eventHandlers.click) {
75
+ this.eventHandlers.click.remove();
76
+ }
77
+ }
78
+ // eslint-disable-next-line class-methods-use-this
79
+ render() {
80
+ return null;
81
+ }
82
+ }
83
+
84
+ function GeopointMove({ diff, api, map, label }) {
85
+ const { fromValue: from, toValue: to } = diff;
86
+ const annotation = diff.isChanged ? diff.annotation : undefined;
87
+ const userColor$1 = userColor.useUserColor(annotation ? annotation.author : null) || undefined;
88
+ const fromRef = React__namespace.useRef();
89
+ const toRef = React__namespace.useRef();
90
+ return (React__namespace.createElement(React__namespace.Fragment, null,
91
+ from && (React__namespace.createElement(Marker.Marker, { api: api, map: map, position: from, zIndex: 0, opacity: 0.55, markerRef: fromRef, color: userColor$1 })),
92
+ from && to && React__namespace.createElement(Arrow, { api: api, map: map, from: from, to: to, zIndex: 1, color: userColor$1 }),
93
+ to && (React__namespace.createElement(Marker.Marker, { api: api, map: map, position: to, zIndex: 2, markerRef: toRef, label: label, color: userColor$1 }))));
94
+ }
95
+
96
+ const RootContainer = styled__default["default"].div `
97
+ position: relative;
98
+ min-height: 200px;
99
+
100
+ &:empty {
101
+ background-color: var(--card-skeleton-color-from);
102
+ display: table;
103
+ width: 100%;
104
+ }
105
+
106
+ &:empty:after {
107
+ content: 'Missing/invalid data';
108
+ display: table-cell;
109
+ vertical-align: middle;
110
+ text-align: center;
111
+ position: relative;
112
+ }
113
+ `;
114
+
115
+ const GeopointFieldDiff = ({ diff, schemaType }) => {
116
+ return (React__namespace.createElement(RootContainer, null,
117
+ React__namespace.createElement(Marker.GoogleMapsLoadProxy, null, (api) => React__namespace.createElement(GeopointDiff$1, { api: api, diff: diff, schemaType: schemaType }))));
118
+ };
119
+ function GeopointDiff$1({ api, diff }) {
120
+ const { fromValue, toValue } = diff;
121
+ const annotation = field.getAnnotationAtPath(diff, ['lat']) ||
122
+ field.getAnnotationAtPath(diff, ['lng']) ||
123
+ field.getAnnotationAtPath(diff, []);
124
+ const center = getCenter(diff, api);
125
+ const bounds = fromValue && toValue ? getBounds$1(fromValue, toValue, api) : undefined;
126
+ return (React__namespace.createElement(field.DiffTooltip, { annotations: annotation ? [annotation] : [], description: getAction(diff) },
127
+ React__namespace.createElement("div", null,
128
+ React__namespace.createElement(Marker.GoogleMap, { api: api, location: center, mapTypeControl: false, controlSize: 20, bounds: bounds, scrollWheel: false }, (map) => React__namespace.createElement(GeopointMove, { api: api, map: map, diff: diff })))));
129
+ }
130
+ function getBounds$1(fromValue, toValue, api) {
131
+ return new api.LatLngBounds().extend(fromValue).extend(toValue);
132
+ }
133
+ function getCenter(diff, api) {
134
+ const { fromValue, toValue } = diff;
135
+ if (fromValue && toValue) {
136
+ return getBounds$1(fromValue, toValue, api).getCenter().toJSON();
137
+ }
138
+ if (fromValue) {
139
+ return fromValue;
140
+ }
141
+ if (toValue) {
142
+ return toValue;
143
+ }
144
+ throw new Error('Neither a from or a to value present');
145
+ }
146
+ function getAction(diff) {
147
+ const { fromValue, toValue } = diff;
148
+ if (fromValue && toValue) {
149
+ return 'Moved';
150
+ }
151
+ else if (fromValue) {
152
+ return 'Removed';
153
+ }
154
+ else if (toValue) {
155
+ return 'Added';
156
+ }
157
+ return 'Unchanged';
158
+ }
159
+
160
+ const GeopointArrayDiff = ({ diff, schemaType }) => {
161
+ return (React__namespace.createElement(RootContainer, null,
162
+ React__namespace.createElement(Marker.GoogleMapsLoadProxy, null, (api) => React__namespace.createElement(GeopointDiff, { api: api, diff: diff, schemaType: schemaType }))));
163
+ };
164
+ function GeopointDiff({ api, diff }) {
165
+ const fromValue = (diff.fromValue || []).filter(hasCoordinates);
166
+ const toValue = (diff.toValue || []).filter(hasCoordinates);
167
+ if (fromValue.length === 0 && toValue.length === 0) {
168
+ return null;
169
+ }
170
+ const bounds = getBounds(fromValue, toValue, api);
171
+ return (React__namespace.createElement(Marker.GoogleMap, { api: api, location: bounds.getCenter().toJSON(), mapTypeControl: false, controlSize: 20, bounds: bounds }, (map) => (React__namespace.createElement(React__namespace.Fragment, null, diff.items.map(({ toIndex, diff: pointDiff }) => {
172
+ if (!isChangeDiff(pointDiff)) {
173
+ return null;
174
+ }
175
+ return (React__namespace.createElement(GeopointMove, { key: toIndex, api: api, map: map, diff: pointDiff, label: `${toIndex}` }));
176
+ })))));
177
+ }
178
+ function isChangeDiff(diff) {
179
+ return diff.action !== 'unchanged' && diff.type === 'object';
180
+ }
181
+ function hasCoordinates(point) {
182
+ return typeof point.lat === 'number' && typeof point.lng === 'number';
183
+ }
184
+ function getBounds(fromValue, toValue, api) {
185
+ const bounds = new api.LatLngBounds();
186
+ const points = [...(fromValue || []), ...(toValue || [])];
187
+ points.forEach((point) => bounds.extend(point));
188
+ return bounds;
189
+ }
190
+
191
+ const diffResolver = function diffResolver({ schemaType }) {
192
+ if (schemaType.name === 'geopoint') {
193
+ return GeopointFieldDiff;
194
+ }
195
+ if (schemaType.jsonType === 'array' &&
196
+ schemaType.of.length === 1 &&
197
+ schemaType.of[0].name === 'geopoint') {
198
+ return GeopointArrayDiff;
199
+ }
200
+ return undefined;
201
+ };
202
+
203
+ module.exports = diffResolver;
204
+ //# sourceMappingURL=resolver.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.cjs","sources":["../../src/map/Arrow.tsx","../../src/diff/GeopointMove.tsx","../../src/diff/GeopointFieldDiff.styles.tsx","../../src/diff/GeopointFieldDiff.tsx","../../src/diff/GeopointArrayDiff.tsx","../../src/diff/resolver.ts"],"sourcesContent":["import * as React from 'react'\nimport {LatLng} from '../types'\nimport {latLngAreEqual} from './util'\n\ninterface Props {\n api: typeof window.google.maps\n map: google.maps.Map\n from: LatLng\n to: LatLng\n color?: {background: string; border: string; text: string}\n zIndex?: number\n arrowRef?: React.MutableRefObject<google.maps.Polyline | undefined>\n onClick?: (event: google.maps.MapMouseEvent) => void\n}\n\nexport class Arrow extends React.PureComponent<Props> {\n line: google.maps.Polyline | undefined\n\n eventHandlers: {\n click?: google.maps.MapsEventListener\n } = {}\n\n componentDidMount() {\n const {from, to, api, map, zIndex, onClick, color, arrowRef} = this.props\n const lineSymbol = {\n path: api.SymbolPath.FORWARD_OPEN_ARROW,\n }\n\n this.line = new api.Polyline({\n map,\n zIndex,\n path: [from, to],\n icons: [{icon: lineSymbol, offset: '50%'}],\n strokeOpacity: 0.55,\n strokeColor: color ? color.text : 'black',\n })\n\n if (onClick) {\n this.eventHandlers.click = api.event.addListener(this.line, 'click', onClick)\n }\n\n if (arrowRef) {\n arrowRef.current = this.line\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (!this.line) {\n return\n }\n\n const {from, to, map} = this.props\n if (!latLngAreEqual(prevProps.from, from) || !latLngAreEqual(prevProps.to, to)) {\n this.line.setPath([from, to])\n }\n\n if (prevProps.map !== map) {\n this.line.setMap(map)\n }\n }\n\n componentWillUnmount() {\n if (this.line) {\n this.line.setMap(null)\n }\n\n if (this.eventHandlers.click) {\n this.eventHandlers.click.remove()\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n render() {\n return null\n }\n}\n","import * as React from 'react'\nimport {useUserColor} from '@sanity/base/user-color'\nimport {ObjectDiff} from '@sanity/base/field'\nimport {Marker} from '../map/Marker'\nimport {Arrow} from '../map/Arrow'\nimport {Geopoint} from '../types'\n\ninterface Props {\n api: typeof window.google.maps\n map: google.maps.Map\n diff: ObjectDiff<Geopoint>\n label?: string\n}\n\nexport function GeopointMove({diff, api, map, label}: Props) {\n const {fromValue: from, toValue: to} = diff\n const annotation = diff.isChanged ? diff.annotation : undefined\n const userColor = useUserColor(annotation ? annotation.author : null) || undefined\n const fromRef = React.useRef<google.maps.Marker>()\n const toRef = React.useRef<google.maps.Marker>()\n\n return (\n <>\n {from && (\n <Marker\n api={api}\n map={map}\n position={from}\n zIndex={0}\n opacity={0.55}\n markerRef={fromRef}\n color={userColor}\n />\n )}\n {from && to && <Arrow api={api} map={map} from={from} to={to} zIndex={1} color={userColor} />}\n {to && (\n <Marker\n api={api}\n map={map}\n position={to}\n zIndex={2}\n markerRef={toRef}\n label={label}\n color={userColor}\n />\n )}\n </>\n )\n}\n","import styled from 'styled-components'\n\nexport const RootContainer = styled.div`\n position: relative;\n min-height: 200px;\n\n &:empty {\n background-color: var(--card-skeleton-color-from);\n display: table;\n width: 100%;\n }\n\n &:empty:after {\n content: 'Missing/invalid data';\n display: table-cell;\n vertical-align: middle;\n text-align: center;\n position: relative;\n }\n`\n","import * as React from 'react'\nimport {\n DiffComponent,\n ObjectDiff,\n DiffProps as GenericDiffProps,\n DiffTooltip,\n getAnnotationAtPath,\n} from '@sanity/base/field'\nimport {GoogleMapsLoadProxy} from '../loader/GoogleMapsLoadProxy'\nimport {GoogleMap} from '../map/Map'\nimport {Geopoint} from '../types'\nimport {GeopointMove} from './GeopointMove'\nimport {RootContainer} from './GeopointFieldDiff.styles'\n\nexport type DiffProps = GenericDiffProps<ObjectDiff<Geopoint>>\n\nexport const GeopointFieldDiff: DiffComponent<ObjectDiff<Geopoint>> = ({diff, schemaType}) => {\n return (\n <RootContainer>\n <GoogleMapsLoadProxy>\n {(api) => <GeopointDiff api={api} diff={diff} schemaType={schemaType} />}\n </GoogleMapsLoadProxy>\n </RootContainer>\n )\n}\n\nfunction GeopointDiff({api, diff}: DiffProps & {api: typeof window.google.maps}) {\n const {fromValue, toValue} = diff\n const annotation =\n getAnnotationAtPath(diff, ['lat']) ||\n getAnnotationAtPath(diff, ['lng']) ||\n getAnnotationAtPath(diff, [])\n\n const center = getCenter(diff, api)\n const bounds = fromValue && toValue ? getBounds(fromValue, toValue, api) : undefined\n\n return (\n <DiffTooltip annotations={annotation ? [annotation] : []} description={getAction(diff)}>\n <div>\n <GoogleMap\n api={api}\n location={center}\n mapTypeControl={false}\n controlSize={20}\n bounds={bounds}\n scrollWheel={false}\n >\n {(map) => <GeopointMove api={api} map={map} diff={diff} />}\n </GoogleMap>\n </div>\n </DiffTooltip>\n )\n}\n\nfunction getBounds(\n fromValue: google.maps.LatLngLiteral,\n toValue: google.maps.LatLngLiteral,\n api: typeof window.google.maps\n): google.maps.LatLngBounds {\n return new api.LatLngBounds().extend(fromValue).extend(toValue)\n}\n\nfunction getCenter(\n diff: DiffProps['diff'],\n api: typeof window.google.maps\n): google.maps.LatLngLiteral {\n const {fromValue, toValue} = diff\n if (fromValue && toValue) {\n return getBounds(fromValue, toValue, api).getCenter().toJSON()\n }\n\n if (fromValue) {\n return fromValue\n }\n\n if (toValue) {\n return toValue\n }\n\n throw new Error('Neither a from or a to value present')\n}\n\nfunction getAction(diff: ObjectDiff<Geopoint>) {\n const {fromValue, toValue} = diff\n if (fromValue && toValue) {\n return 'Moved'\n } else if (fromValue) {\n return 'Removed'\n } else if (toValue) {\n return 'Added'\n }\n\n return 'Unchanged'\n}\n","import * as React from 'react'\nimport {\n ArrayDiff,\n ObjectDiff,\n Diff,\n DiffProps as GenericDiffProps,\n DiffComponent,\n} from '@sanity/base/field'\nimport {GoogleMapsLoadProxy} from '../loader/GoogleMapsLoadProxy'\nimport {GoogleMap} from '../map/Map'\nimport {Geopoint} from '../types'\nimport {GeopointMove} from './GeopointMove'\nimport {RootContainer} from './GeopointFieldDiff.styles'\n\nexport type DiffProps = GenericDiffProps<ArrayDiff<Geopoint>>\n\nexport const GeopointArrayDiff: DiffComponent<ArrayDiff<Geopoint>> = ({diff, schemaType}) => {\n return (\n <RootContainer>\n <GoogleMapsLoadProxy>\n {(api) => <GeopointDiff api={api} diff={diff} schemaType={schemaType} />}\n </GoogleMapsLoadProxy>\n </RootContainer>\n )\n}\n\nfunction GeopointDiff({api, diff}: DiffProps & {api: typeof window.google.maps}) {\n const fromValue = (diff.fromValue || []).filter(hasCoordinates)\n const toValue = (diff.toValue || []).filter(hasCoordinates)\n if (fromValue.length === 0 && toValue.length === 0) {\n return null\n }\n\n const bounds = getBounds(fromValue, toValue, api)\n return (\n <GoogleMap\n api={api}\n location={bounds.getCenter().toJSON()}\n mapTypeControl={false}\n controlSize={20}\n bounds={bounds}\n >\n {(map) => (\n <>\n {diff.items.map(({toIndex, diff: pointDiff}) => {\n if (!isChangeDiff(pointDiff)) {\n return null\n }\n\n return (\n <GeopointMove\n key={toIndex}\n api={api}\n map={map}\n diff={pointDiff}\n label={`${toIndex}`}\n />\n )\n })}\n </>\n )}\n </GoogleMap>\n )\n}\n\nfunction isChangeDiff(diff: Diff): diff is ObjectDiff<Geopoint> {\n return diff.action !== 'unchanged' && diff.type === 'object'\n}\n\nfunction hasCoordinates(point: Partial<Geopoint>): point is Geopoint {\n return typeof point.lat === 'number' && typeof point.lng === 'number'\n}\n\nfunction getBounds(\n fromValue: google.maps.LatLngLiteral[] | null | undefined,\n toValue: google.maps.LatLngLiteral[] | null | undefined,\n api: typeof window.google.maps\n): google.maps.LatLngBounds {\n const bounds = new api.LatLngBounds()\n const points = [...(fromValue || []), ...(toValue || [])]\n points.forEach((point) => bounds.extend(point))\n return bounds\n}\n","import {DiffComponentResolver} from '@sanity/base/field'\nimport {GeopointFieldDiff} from './GeopointFieldDiff'\nimport {GeopointArrayDiff} from './GeopointArrayDiff'\n\nconst diffResolver: DiffComponentResolver = function diffResolver({schemaType}) {\n if (schemaType.name === 'geopoint') {\n return GeopointFieldDiff\n }\n\n if (\n schemaType.jsonType === 'array' &&\n schemaType.of.length === 1 &&\n schemaType.of[0].name === 'geopoint'\n ) {\n return GeopointArrayDiff\n }\n\n return undefined\n}\n\nexport default diffResolver\n"],"names":["React","latLngAreEqual","userColor","useUserColor","Marker","styled","GoogleMapsLoadProxy","GeopointDiff","getAnnotationAtPath","getBounds","DiffTooltip","GoogleMap"],"mappings":"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"}