@nocobase/plugin-map 0.11.1-alpha.4 → 0.12.0-alpha.1

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 (197) hide show
  1. package/client.d.ts +2 -3
  2. package/client.js +1 -1
  3. package/dist/client/index.js +3092 -0
  4. package/{lib → dist}/index.d.ts +1 -0
  5. package/dist/index.js +18 -0
  6. package/dist/locale/en-US.js +6 -0
  7. package/dist/locale/fr-FR.js +6 -0
  8. package/dist/locale/pt-BR.js +51 -0
  9. package/dist/locale/zh-CN.js +54 -0
  10. package/dist/server/actions/index.js +43 -0
  11. package/dist/server/collections/mapConfiguration.js +32 -0
  12. package/dist/server/constants.js +5 -0
  13. package/dist/server/fields/circle.js +47 -0
  14. package/dist/server/fields/index.js +33 -0
  15. package/dist/server/fields/lineString.js +54 -0
  16. package/dist/server/fields/point.js +57 -0
  17. package/dist/server/fields/polygon.js +53 -0
  18. package/dist/server/helpers/index.js +31 -0
  19. package/dist/server/index.js +11 -0
  20. package/dist/server/plugin.js +59 -0
  21. package/dist/server/value-parsers/index.js +53 -0
  22. package/docs/en-US/changelog.md +1 -0
  23. package/docs/en-US/index.md +1 -0
  24. package/docs/en-US/installation.md +1 -0
  25. package/docs/en-US/tabs.json +18 -0
  26. package/docs/en-US/usage.md +1 -0
  27. package/docs/zh-CN/changelog.md +1 -0
  28. package/docs/zh-CN/index.md +1 -0
  29. package/docs/zh-CN/installation.md +1 -0
  30. package/docs/zh-CN/tabs.json +18 -0
  31. package/docs/zh-CN/usage.md +1 -0
  32. package/package.json +19 -30
  33. package/server.d.ts +2 -3
  34. package/server.js +1 -1
  35. package/lib/client/block/MapActionInitializers.js +0 -93
  36. package/lib/client/block/MapBlock.js +0 -38
  37. package/lib/client/block/MapBlockDesigner.js +0 -196
  38. package/lib/client/block/MapBlockInitializer.js +0 -124
  39. package/lib/client/block/MapBlockProvider.js +0 -91
  40. package/lib/client/block/index.js +0 -58
  41. package/lib/client/block/utils.js +0 -102
  42. package/lib/client/components/AMap/Block.js +0 -350
  43. package/lib/client/components/AMap/Map.js +0 -458
  44. package/lib/client/components/AMap/Search.js +0 -121
  45. package/lib/client/components/AMap/index.js +0 -27
  46. package/lib/client/components/Configuration.js +0 -160
  47. package/lib/client/components/Designer.js +0 -167
  48. package/lib/client/components/GoogleMaps/Block.js +0 -370
  49. package/lib/client/components/GoogleMaps/Map.js +0 -466
  50. package/lib/client/components/GoogleMaps/Search.js +0 -128
  51. package/lib/client/components/GoogleMaps/index.js +0 -27
  52. package/lib/client/components/GoogleMaps/utils.js +0 -44
  53. package/lib/client/components/Map.js +0 -50
  54. package/lib/client/components/MapBlock.js +0 -40
  55. package/lib/client/components/MapComponent.js +0 -42
  56. package/lib/client/components/ReadPretty.js +0 -56
  57. package/lib/client/components/index.js +0 -71
  58. package/lib/client/constants.js +0 -19
  59. package/lib/client/fields/circle.js +0 -32
  60. package/lib/client/fields/index.js +0 -17
  61. package/lib/client/fields/lineString.js +0 -32
  62. package/lib/client/fields/point.js +0 -32
  63. package/lib/client/fields/polygon.js +0 -32
  64. package/lib/client/fields/schema.js +0 -64
  65. package/lib/client/hooks/index.js +0 -16
  66. package/lib/client/hooks/useMapConfiguration.js +0 -54
  67. package/lib/client/index.js +0 -73
  68. package/lib/client/initialize.js +0 -50
  69. package/lib/client/locale/index.js +0 -38
  70. package/lib/client/types.js +0 -5
  71. package/lib/client/utils.js +0 -1
  72. package/lib/index.js +0 -13
  73. package/lib/locale/en-US.js +0 -9
  74. package/lib/locale/fr-FR.js +0 -9
  75. package/lib/locale/pt-BR.js +0 -54
  76. package/lib/locale/zh-CN.js +0 -57
  77. package/lib/server/actions/index.js +0 -55
  78. package/lib/server/collections/mapConfiguration.js +0 -30
  79. package/lib/server/constants.js +0 -8
  80. package/lib/server/fields/circle.js +0 -58
  81. package/lib/server/fields/index.js +0 -49
  82. package/lib/server/fields/lineString.js +0 -65
  83. package/lib/server/fields/point.js +0 -68
  84. package/lib/server/fields/polygon.js +0 -64
  85. package/lib/server/helpers/index.js +0 -32
  86. package/lib/server/index.js +0 -13
  87. package/lib/server/plugin.js +0 -79
  88. package/lib/server/value-parsers/index.js +0 -75
  89. package/src/client/block/MapActionInitializers.tsx +0 -97
  90. package/src/client/block/MapBlock.tsx +0 -11
  91. package/src/client/block/MapBlockDesigner.tsx +0 -161
  92. package/src/client/block/MapBlockInitializer.tsx +0 -91
  93. package/src/client/block/MapBlockProvider.tsx +0 -55
  94. package/src/client/block/index.tsx +0 -35
  95. package/src/client/block/utils.ts +0 -81
  96. package/src/client/components/AMap/Block.tsx +0 -314
  97. package/src/client/components/AMap/Map.tsx +0 -461
  98. package/src/client/components/AMap/Search.tsx +0 -92
  99. package/src/client/components/AMap/index.ts +0 -2
  100. package/src/client/components/Configuration.tsx +0 -117
  101. package/src/client/components/Designer.tsx +0 -147
  102. package/src/client/components/GoogleMaps/Block.tsx +0 -341
  103. package/src/client/components/GoogleMaps/Map.tsx +0 -470
  104. package/src/client/components/GoogleMaps/Search.tsx +0 -107
  105. package/src/client/components/GoogleMaps/index.ts +0 -2
  106. package/src/client/components/GoogleMaps/utils.ts +0 -33
  107. package/src/client/components/Map.tsx +0 -33
  108. package/src/client/components/MapBlock.tsx +0 -24
  109. package/src/client/components/MapComponent.tsx +0 -23
  110. package/src/client/components/ReadPretty.tsx +0 -28
  111. package/src/client/components/index.ts +0 -6
  112. package/src/client/constants.ts +0 -11
  113. package/src/client/fields/circle.ts +0 -23
  114. package/src/client/fields/index.ts +0 -11
  115. package/src/client/fields/lineString.ts +0 -23
  116. package/src/client/fields/point.ts +0 -23
  117. package/src/client/fields/polygon.ts +0 -23
  118. package/src/client/fields/schema.ts +0 -54
  119. package/src/client/hooks/index.ts +0 -1
  120. package/src/client/hooks/useMapConfiguration.ts +0 -42
  121. package/src/client/index.tsx +0 -55
  122. package/src/client/initialize.tsx +0 -32
  123. package/src/client/locale/index.ts +0 -19
  124. package/src/client/types.ts +0 -1
  125. package/src/client/utils.ts +0 -0
  126. package/src/index.ts +0 -1
  127. package/src/locale/en-US.ts +0 -3
  128. package/src/locale/fr-FR.ts +0 -3
  129. package/src/locale/pt-BR.ts +0 -51
  130. package/src/locale/zh-CN.ts +0 -52
  131. package/src/server/__tests__/fields.test.ts +0 -157
  132. package/src/server/actions/index.ts +0 -44
  133. package/src/server/collections/mapConfiguration.ts +0 -29
  134. package/src/server/constants.ts +0 -1
  135. package/src/server/fields/.gitkeep +0 -0
  136. package/src/server/fields/circle.ts +0 -48
  137. package/src/server/fields/index.ts +0 -4
  138. package/src/server/fields/lineString.ts +0 -55
  139. package/src/server/fields/point.ts +0 -58
  140. package/src/server/fields/polygon.ts +0 -54
  141. package/src/server/helpers/index.ts +0 -25
  142. package/src/server/index.ts +0 -1
  143. package/src/server/plugin.ts +0 -57
  144. package/src/server/value-parsers/index.ts +0 -55
  145. /package/{lib → dist}/client/block/MapActionInitializers.d.ts +0 -0
  146. /package/{lib → dist}/client/block/MapBlock.d.ts +0 -0
  147. /package/{lib → dist}/client/block/MapBlockDesigner.d.ts +0 -0
  148. /package/{lib → dist}/client/block/MapBlockInitializer.d.ts +0 -0
  149. /package/{lib → dist}/client/block/MapBlockProvider.d.ts +0 -0
  150. /package/{lib → dist}/client/block/index.d.ts +0 -0
  151. /package/{lib → dist}/client/block/utils.d.ts +0 -0
  152. /package/{lib → dist}/client/components/AMap/Block.d.ts +0 -0
  153. /package/{lib → dist}/client/components/AMap/Map.d.ts +0 -0
  154. /package/{lib → dist}/client/components/AMap/Search.d.ts +0 -0
  155. /package/{lib → dist}/client/components/AMap/index.d.ts +0 -0
  156. /package/{lib → dist}/client/components/Configuration.d.ts +0 -0
  157. /package/{lib → dist}/client/components/Designer.d.ts +0 -0
  158. /package/{lib → dist}/client/components/GoogleMaps/Block.d.ts +0 -0
  159. /package/{lib → dist}/client/components/GoogleMaps/Map.d.ts +0 -0
  160. /package/{lib → dist}/client/components/GoogleMaps/Search.d.ts +0 -0
  161. /package/{lib → dist}/client/components/GoogleMaps/index.d.ts +0 -0
  162. /package/{lib → dist}/client/components/GoogleMaps/utils.d.ts +0 -0
  163. /package/{lib → dist}/client/components/Map.d.ts +0 -0
  164. /package/{lib → dist}/client/components/MapBlock.d.ts +0 -0
  165. /package/{lib → dist}/client/components/MapComponent.d.ts +0 -0
  166. /package/{lib → dist}/client/components/ReadPretty.d.ts +0 -0
  167. /package/{lib → dist}/client/components/index.d.ts +0 -0
  168. /package/{lib → dist}/client/constants.d.ts +0 -0
  169. /package/{lib → dist}/client/fields/circle.d.ts +0 -0
  170. /package/{lib → dist}/client/fields/index.d.ts +0 -0
  171. /package/{lib → dist}/client/fields/lineString.d.ts +0 -0
  172. /package/{lib → dist}/client/fields/point.d.ts +0 -0
  173. /package/{lib → dist}/client/fields/polygon.d.ts +0 -0
  174. /package/{lib → dist}/client/fields/schema.d.ts +0 -0
  175. /package/{lib → dist}/client/hooks/index.d.ts +0 -0
  176. /package/{lib → dist}/client/hooks/useMapConfiguration.d.ts +0 -0
  177. /package/{lib → dist}/client/index.d.ts +0 -0
  178. /package/{lib → dist}/client/initialize.d.ts +0 -0
  179. /package/{lib → dist}/client/locale/index.d.ts +0 -0
  180. /package/{lib → dist}/client/types.d.ts +0 -0
  181. /package/{lib → dist}/client/utils.d.ts +0 -0
  182. /package/{lib → dist}/locale/en-US.d.ts +0 -0
  183. /package/{lib → dist}/locale/fr-FR.d.ts +0 -0
  184. /package/{lib → dist}/locale/pt-BR.d.ts +0 -0
  185. /package/{lib → dist}/locale/zh-CN.d.ts +0 -0
  186. /package/{lib → dist}/server/actions/index.d.ts +0 -0
  187. /package/{lib → dist}/server/collections/mapConfiguration.d.ts +0 -0
  188. /package/{lib → dist}/server/constants.d.ts +0 -0
  189. /package/{lib → dist}/server/fields/circle.d.ts +0 -0
  190. /package/{lib → dist}/server/fields/index.d.ts +0 -0
  191. /package/{lib → dist}/server/fields/lineString.d.ts +0 -0
  192. /package/{lib → dist}/server/fields/point.d.ts +0 -0
  193. /package/{lib → dist}/server/fields/polygon.d.ts +0 -0
  194. /package/{lib → dist}/server/helpers/index.d.ts +0 -0
  195. /package/{lib → dist}/server/index.d.ts +0 -0
  196. /package/{lib → dist}/server/plugin.d.ts +0 -0
  197. /package/{lib → dist}/server/value-parsers/index.d.ts +0 -0
@@ -1,147 +0,0 @@
1
- import { Field } from '@formily/core';
2
- import { ISchema, useField, useFieldSchema } from '@formily/react';
3
- import {
4
- GeneralSchemaDesigner,
5
- GeneralSchemaItems,
6
- SchemaSettings,
7
- isPatternDisabled,
8
- useCollection,
9
- useCollectionManager,
10
- useDesignable,
11
- useFormBlockContext,
12
- } from '@nocobase/client';
13
- import { lodash } from '@nocobase/utils/client';
14
- import React from 'react';
15
- import { useMapTranslation } from '../locale';
16
-
17
- const Designer = () => {
18
- const { getCollectionJoinField } = useCollectionManager();
19
- const { getField } = useCollection();
20
- const { form } = useFormBlockContext();
21
- const field = useField<Field>();
22
- const fieldSchema = useFieldSchema();
23
- const { t } = useMapTranslation();
24
- const { dn, refresh } = useDesignable();
25
- const collectionField = getField(fieldSchema['name']) || getCollectionJoinField(fieldSchema['x-collection-field']);
26
- const originalTitle = collectionField?.uiSchema?.title;
27
- const initialValue = {
28
- title: field.title === originalTitle ? undefined : field.title,
29
- };
30
- if (!field.readPretty) {
31
- initialValue['required'] = field.required;
32
- }
33
-
34
- let readOnlyMode = 'editable';
35
- if (fieldSchema['x-disabled'] === true) {
36
- readOnlyMode = 'readonly';
37
- }
38
- if (fieldSchema['x-read-pretty'] === true) {
39
- readOnlyMode = 'read-pretty';
40
- }
41
-
42
- return (
43
- <GeneralSchemaDesigner>
44
- <GeneralSchemaItems />
45
- {form && !form?.readPretty && !isPatternDisabled(fieldSchema) && (
46
- <SchemaSettings.SelectItem
47
- key="pattern"
48
- title={t('Pattern')}
49
- options={[
50
- { label: t('Editable'), value: 'editable' },
51
- { label: t('Readonly'), value: 'readonly' },
52
- { label: t('Easy-reading'), value: 'read-pretty' },
53
- ]}
54
- value={readOnlyMode}
55
- onChange={(v) => {
56
- const schema: ISchema = {
57
- ['x-uid']: fieldSchema['x-uid'],
58
- };
59
-
60
- switch (v) {
61
- case 'readonly': {
62
- fieldSchema['x-read-pretty'] = false;
63
- fieldSchema['x-disabled'] = true;
64
- schema['x-read-pretty'] = false;
65
- schema['x-disabled'] = true;
66
- field.readPretty = false;
67
- field.disabled = true;
68
- break;
69
- }
70
- case 'read-pretty': {
71
- fieldSchema['x-read-pretty'] = true;
72
- fieldSchema['x-disabled'] = false;
73
- schema['x-read-pretty'] = true;
74
- schema['x-disabled'] = false;
75
- field.readPretty = true;
76
- break;
77
- }
78
- default: {
79
- fieldSchema['x-read-pretty'] = false;
80
- fieldSchema['x-disabled'] = false;
81
- schema['x-read-pretty'] = false;
82
- schema['x-disabled'] = false;
83
- field.readPretty = false;
84
- field.disabled = false;
85
- break;
86
- }
87
- }
88
-
89
- dn.emit('patch', {
90
- schema,
91
- });
92
-
93
- dn.refresh();
94
- }}
95
- />
96
- )}
97
- <SchemaSettings.ModalItem
98
- key="map-zoom"
99
- title={t('Set default zoom level')}
100
- schema={
101
- {
102
- type: 'object',
103
- title: t('Set default zoom level'),
104
- properties: {
105
- zoom: {
106
- title: t('Zoom'),
107
- default: field.componentProps.zoom || 13,
108
- description: t('The default zoom level of the map'),
109
- 'x-decorator': 'FormItem',
110
- 'x-component': 'InputNumber',
111
- 'x-component-props': {
112
- precision: 0,
113
- },
114
- },
115
- },
116
- } as ISchema
117
- }
118
- onSubmit={({ zoom }) => {
119
- if (zoom) {
120
- lodash.set(fieldSchema, 'x-component-props.zoom', zoom);
121
- Object.assign(field.componentProps, fieldSchema['x-component-props']);
122
-
123
- dn.emit('patch', {
124
- schema: {
125
- 'x-uid': fieldSchema['x-uid'],
126
- 'x-component-props': field.componentProps,
127
- },
128
- });
129
- }
130
- dn.refresh();
131
- }}
132
- />
133
- <SchemaSettings.Remove
134
- key="remove"
135
- removeParentsIfNoChildren
136
- confirm={{
137
- title: t('Delete field'),
138
- }}
139
- breakRemoveOn={{
140
- 'x-component': 'Grid',
141
- }}
142
- />
143
- </GeneralSchemaDesigner>
144
- );
145
- };
146
-
147
- export default Designer;
@@ -1,341 +0,0 @@
1
- import { CheckOutlined, EnvironmentOutlined, ExpandOutlined } from '@ant-design/icons';
2
- import { RecursionField, Schema, useFieldSchema } from '@formily/react';
3
- import {
4
- ActionContextProvider,
5
- css,
6
- RecordProvider,
7
- useCollection,
8
- useCompile,
9
- useFilterAPI,
10
- useProps,
11
- } from '@nocobase/client';
12
- import { useMemoizedFn } from 'ahooks';
13
- import { Button, Space } from 'antd';
14
- import React, { useEffect, useMemo, useRef, useState } from 'react';
15
- import { defaultImage, selectedImage } from '../../constants';
16
- import { useMapTranslation } from '../../locale';
17
- import { GoogleMapForwardedRefProps, GoogleMapsComponent, OverlayOptions } from './Map';
18
- import { getIcon } from './utils';
19
-
20
- const OVERLAY_KEY = 'google-maps-overlay-id';
21
- const OVERLAY_SELECtED = 'google-maps-overlay-selected';
22
-
23
- const labelClass = css`
24
- margin-top: 6px;
25
- padding: 2px 4px;
26
- background: #fff;
27
- border: 1px solid #0000f5;
28
- `;
29
-
30
- export const GoogleMapsBlock = (props) => {
31
- const { fieldNames, dataSource = [], fixedBlock, zoom, setSelectedRecordKeys } = useProps(props);
32
- const { getField, getPrimaryKey } = useCollection();
33
- const { marker: markerName, field: fieldName } = fieldNames || {
34
- marker: 'id',
35
- field: 'id',
36
- };
37
- const field = getField(fieldName);
38
- const [isMapInitialization, setIsMapInitialization] = useState(false);
39
- const mapRef = useRef<GoogleMapForwardedRefProps>();
40
- const [record, setRecord] = useState();
41
- const [selectingMode, setSelecting] = useState('');
42
- const { t } = useMapTranslation();
43
- const compile = useCompile();
44
- const { isConnected, doFilter } = useFilterAPI();
45
- const [, setPrevSelected] = useState(null);
46
- const selectingModeRef = useRef(selectingMode);
47
- const selectionOverlayRef = useRef<google.maps.Polygon>();
48
- const overlaysRef = useRef<google.maps.MVCObject[]>([]);
49
- selectingModeRef.current = selectingMode;
50
-
51
- const setOverlayOptions = (overlay: google.maps.MVCObject, state?: boolean) => {
52
- const selected = typeof state !== 'undefined' ? !state : overlay.get(OVERLAY_SELECtED);
53
- overlay.set(OVERLAY_SELECtED, !selected);
54
- (overlay as google.maps.Marker).setOptions({
55
- ...(selected
56
- ? {
57
- icon: getIcon(defaultImage),
58
- strokeColor: '#4e9bff',
59
- fillColor: '#4e9bff',
60
- }
61
- : {
62
- icon: getIcon(selectedImage),
63
- strokeColor: '#F18b62',
64
- fillColor: '#F18b62',
65
- }),
66
- } as OverlayOptions);
67
- };
68
-
69
- // selection
70
- useEffect(() => {
71
- if (selectingMode !== 'selection') {
72
- return;
73
- }
74
- if (!mapRef.current.drawingManager) {
75
- mapRef.current.drawingManager = mapRef.current.createDraw(true, {
76
- editable: true,
77
- draggable: true,
78
- });
79
- }
80
- const listenerSet = new Set<() => void>();
81
- mapRef.current.drawingManager.setDrawingMode(google.maps.drawing.OverlayType.POLYGON);
82
- mapRef.current.drawingManager.addListener('overlaycomplete', (event) => {
83
- const polygon = event.overlay as google.maps.Polygon;
84
- mapRef.current.drawingManager.setDrawingMode(null);
85
- selectionOverlayRef.current = polygon;
86
- const path = polygon.getPath();
87
- ['insert_at', 'remove_at', 'set_at'].forEach((key) => {
88
- listenerSet.add(path.addListener(key, () => {}).remove);
89
- });
90
- });
91
- return () => {
92
- listenerSet.forEach((i) => {
93
- i();
94
- });
95
- if (!mapRef.current) return;
96
- selectionOverlayRef.current?.unbindAll();
97
- selectionOverlayRef.current?.setMap(null);
98
- selectionOverlayRef.current = null;
99
- mapRef.current.drawingManager.setDrawingMode(null);
100
- mapRef.current.drawingManager.unbindAll();
101
- };
102
- }, [selectingMode]);
103
-
104
- useEffect(() => {
105
- if (selectingMode) {
106
- return () => {
107
- if (!selectingModeRef.current) {
108
- overlaysRef.current.forEach((o) => {
109
- setOverlayOptions(o, false);
110
- });
111
- }
112
- };
113
- }
114
- }, [selectingMode]);
115
-
116
- const onSelectingComplete = useMemoizedFn(() => {
117
- const overlay = selectionOverlayRef.current;
118
- const overlays = overlaysRef.current;
119
- const poly = google.maps.geometry.poly;
120
- const selectedOverlays = overlays.filter((o) => {
121
- if (o === overlay || o.get(OVERLAY_KEY) === undefined) return;
122
- if (o instanceof google.maps.Marker) {
123
- return poly.containsLocation(o.getPosition(), overlay);
124
- } else if (o instanceof google.maps.Circle) {
125
- return poly.containsLocation(o.getCenter(), overlay);
126
- } else {
127
- return (o as google.maps.Polygon)
128
- .getPath()
129
- .getArray()
130
- .some((position) => {
131
- return poly.containsLocation(position, overlay);
132
- });
133
- }
134
- });
135
- const ids = selectedOverlays.map((o) => {
136
- setOverlayOptions(o, true);
137
- return o.get(OVERLAY_KEY);
138
- });
139
- setSelectedRecordKeys((lastIds) => ids.concat(lastIds));
140
- overlay.unbindAll();
141
- overlay.setMap(null);
142
- mapRef.current.drawingManager.setDrawingMode(google.maps.drawing.OverlayType.POLYGON);
143
- });
144
-
145
- useEffect(() => {
146
- if (!field || !mapRef.current?.map) return;
147
- const overlays: google.maps.Polygon[] = dataSource
148
- .map((item) => {
149
- const data = item[fieldNames?.field];
150
- if (!data) return;
151
- const overlay = mapRef.current.setOverlay(field.type, data, {
152
- strokeColor: '#4e9bff',
153
- fillColor: '#4e9bff',
154
- cursor: 'pointer',
155
- label: {
156
- className: labelClass,
157
- fontFamily: 'inherit',
158
- fontSize: '13px',
159
- color: '#333',
160
- text: fieldNames?.marker ? compile(item[markerName]) : undefined,
161
- } as google.maps.MarkerLabel,
162
- });
163
- overlay.set(OVERLAY_KEY, item[getPrimaryKey()]);
164
- return overlay;
165
- })
166
- .filter(Boolean);
167
-
168
- overlaysRef.current = overlays;
169
- mapRef.current.setFitView(overlays);
170
-
171
- const events = overlays.map((o: google.maps.MVCObject) => {
172
- const onClick = (event) => {
173
- const overlay = o as google.maps.Polygon;
174
- const id = overlay.get(OVERLAY_KEY);
175
- if (!id) return;
176
-
177
- const data = dataSource?.find((item) => {
178
- return id === item[getPrimaryKey()];
179
- });
180
-
181
- // 筛选区块模式
182
- if (isConnected) {
183
- setPrevSelected((prev) => {
184
- prev && clearSelected(overlay);
185
- if (prev === o) {
186
- clearSelected(overlay);
187
-
188
- // 删除过滤参数
189
- doFilter(null);
190
- return null;
191
- } else {
192
- selectMarker(overlay);
193
- doFilter(data[getPrimaryKey()], (target) => target.field || getPrimaryKey(), '$eq');
194
- }
195
- return overlay;
196
- });
197
-
198
- return;
199
- }
200
-
201
- if (data) {
202
- setRecord(data);
203
- }
204
- };
205
- o.addListener('click', onClick);
206
- return () => o.unbindAll();
207
- });
208
-
209
- return () => {
210
- overlays.forEach((ov) => {
211
- ov.setMap(null);
212
- ov.unbindAll();
213
- });
214
- events.forEach((e) => e());
215
- };
216
- }, [dataSource, isMapInitialization, markerName, field.type, isConnected]);
217
-
218
- useEffect(() => {
219
- setTimeout(() => {
220
- setSelectedRecordKeys([]);
221
- });
222
- }, [dataSource]);
223
-
224
- const mapRefCallback = (instance: GoogleMapForwardedRefProps) => {
225
- mapRef.current = instance;
226
- setIsMapInitialization(!!instance?.map && !instance.errMessage);
227
- };
228
-
229
- return (
230
- <div
231
- className={css`
232
- position: relative;
233
- height: 100%;
234
- `}
235
- >
236
- {isMapInitialization && (
237
- <>
238
- <div
239
- className={css`
240
- position: absolute;
241
- left: 10px;
242
- top: 10px;
243
- z-index: 999;
244
- `}
245
- >
246
- <Space direction="vertical">
247
- <Button
248
- style={{
249
- color: !selectingMode ? '#F18b62' : undefined,
250
- borderColor: 'currentcolor',
251
- }}
252
- onClick={(e) => {
253
- e.stopPropagation();
254
- setSelecting('');
255
- }}
256
- icon={<EnvironmentOutlined />}
257
- ></Button>
258
- <Button
259
- style={{
260
- color: selectingMode === 'selection' ? '#F18b62' : undefined,
261
- borderColor: 'currentcolor',
262
- }}
263
- onClick={(e) => {
264
- e.stopPropagation();
265
- setSelecting('selection');
266
- }}
267
- icon={<ExpandOutlined />}
268
- ></Button>
269
- {selectingMode === 'selection' ? (
270
- <Button
271
- type="primary"
272
- icon={<CheckOutlined />}
273
- title={t('Confirm selection')}
274
- onClick={onSelectingComplete}
275
- ></Button>
276
- ) : null}
277
- </Space>
278
- </div>
279
- <MapBlockDrawer record={record} setVisible={setRecord} />
280
- </>
281
- )}
282
- <GoogleMapsComponent
283
- {...props}
284
- ref={mapRefCallback}
285
- style={{ height: fixedBlock ? '100%' : null }}
286
- zoom={zoom}
287
- disabled
288
- block
289
- overlayCommonOptions={{
290
- strokeColor: '#F18b62',
291
- fillColor: '#F18b62',
292
- }}
293
- ></GoogleMapsComponent>
294
- </div>
295
- );
296
- };
297
-
298
- const MapBlockDrawer = (props) => {
299
- const { setVisible, record } = props;
300
- const fieldSchema = useFieldSchema();
301
- const schema: Schema = useMemo(
302
- () =>
303
- fieldSchema.reduceProperties((buf, current) => {
304
- if (current.name === 'drawer') {
305
- return current;
306
- }
307
- return buf;
308
- }, null),
309
- [fieldSchema],
310
- );
311
-
312
- return (
313
- schema && (
314
- <ActionContextProvider value={{ visible: !!record, setVisible }}>
315
- <RecordProvider record={record}>
316
- <RecursionField schema={schema} name={schema.name} />
317
- </RecordProvider>
318
- </ActionContextProvider>
319
- )
320
- );
321
- };
322
-
323
- function clearSelected(target: google.maps.Polygon) {
324
- if (target instanceof google.maps.Marker) {
325
- return target.setIcon(getIcon(defaultImage));
326
- }
327
- target.setOptions({
328
- strokeColor: '#4e9bff',
329
- fillColor: '#4e9bff',
330
- });
331
- }
332
-
333
- function selectMarker(target: google.maps.Polygon) {
334
- if (target instanceof google.maps.Marker) {
335
- return target.setIcon(getIcon(selectedImage));
336
- }
337
- target.setOptions({
338
- strokeColor: '#F18b62',
339
- fillColor: '#F18b62',
340
- });
341
- }