@buerli.io/core 1.0.1 → 1.1.0-beta.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.
Files changed (74) hide show
  1. package/README.md +19 -19
  2. package/build/cjs/geometry/ThreeGeometryCreator.js +320 -320
  3. package/build/cjs/geometry/index.js +17 -17
  4. package/build/cjs/graphic/filters.js +25 -25
  5. package/build/cjs/index.js +26 -26
  6. package/build/cjs/re-export.js +29 -29
  7. package/build/cjs/store/index.js +41 -37
  8. package/build/cjs/store/states/buerli.js +98 -98
  9. package/build/cjs/store/states/cad.js +47 -47
  10. package/build/cjs/store/states/drawing.js +49 -49
  11. package/build/cjs/store/states/geometry.js +157 -157
  12. package/build/cjs/store/states/graphic.js +115 -115
  13. package/build/cjs/store/states/interaction.js +55 -55
  14. package/build/cjs/store/states/message.js +32 -25
  15. package/build/cjs/store/states/plugin.js +115 -115
  16. package/build/cjs/store/states/selection.js +267 -267
  17. package/build/cjs/store/states/structure.js +250 -250
  18. package/build/cjs/store/store.js +9 -9
  19. package/build/cjs/store/subscribtion/selection.js +49 -49
  20. package/build/cjs/store/subscribtion/subscribeToDrawing.js +13 -13
  21. package/build/cjs/types/InteractionInfo.js +11 -11
  22. package/build/cjs/types/index.js +34 -34
  23. package/build/cjs/utils/Math.js +91 -91
  24. package/build/cjs/utils/Measure.js +576 -576
  25. package/build/cjs/utils/Timing.js +34 -34
  26. package/build/esm/geometry/ThreeGeometryCreator.js +291 -291
  27. package/build/esm/geometry/index.js +1 -1
  28. package/build/esm/graphic/filters.js +12 -12
  29. package/build/esm/index.js +10 -10
  30. package/build/esm/re-export.js +23 -23
  31. package/build/esm/store/index.js +29 -26
  32. package/build/esm/store/states/buerli.js +92 -92
  33. package/build/esm/store/states/cad.js +42 -42
  34. package/build/esm/store/states/drawing.js +45 -45
  35. package/build/esm/store/states/geometry.js +129 -129
  36. package/build/esm/store/states/graphic.js +110 -110
  37. package/build/esm/store/states/interaction.js +50 -50
  38. package/build/esm/store/states/message.js +28 -21
  39. package/build/esm/store/states/plugin.js +109 -109
  40. package/build/esm/store/states/selection.js +261 -261
  41. package/build/esm/store/states/structure.js +219 -219
  42. package/build/esm/store/store.js +3 -3
  43. package/build/esm/store/subscribtion/selection.js +44 -44
  44. package/build/esm/store/subscribtion/subscribeToDrawing.js +9 -9
  45. package/build/esm/types/InteractionInfo.js +6 -6
  46. package/build/esm/types/index.js +16 -16
  47. package/build/esm/utils/Math.js +65 -65
  48. package/build/esm/utils/Measure.js +550 -550
  49. package/build/esm/utils/Timing.js +31 -31
  50. package/build/types/geometry/ThreeGeometryCreator.d.ts +256 -256
  51. package/build/types/geometry/index.d.ts +1 -1
  52. package/build/types/graphic/filters.d.ts +11 -11
  53. package/build/types/index.d.ts +38 -38
  54. package/build/types/re-export.d.ts +70 -70
  55. package/build/types/store/index.d.ts +17 -16
  56. package/build/types/store/states/buerli.d.ts +41 -41
  57. package/build/types/store/states/cad.d.ts +56 -56
  58. package/build/types/store/states/drawing.d.ts +45 -45
  59. package/build/types/store/states/geometry.d.ts +64 -64
  60. package/build/types/store/states/graphic.d.ts +21 -21
  61. package/build/types/store/states/interaction.d.ts +34 -34
  62. package/build/types/store/states/message.d.ts +32 -30
  63. package/build/types/store/states/plugin.d.ts +53 -53
  64. package/build/types/store/states/selection.d.ts +69 -69
  65. package/build/types/store/states/structure.d.ts +47 -47
  66. package/build/types/store/store.d.ts +2 -2
  67. package/build/types/store/subscribtion/selection.d.ts +7 -7
  68. package/build/types/store/subscribtion/subscribeToDrawing.d.ts +4 -4
  69. package/build/types/types/InteractionInfo.d.ts +42 -42
  70. package/build/types/types/index.d.ts +7 -7
  71. package/build/types/utils/Math.d.ts +21 -21
  72. package/build/types/utils/Measure.d.ts +64 -64
  73. package/build/types/utils/Timing.d.ts +8 -8
  74. package/package.json +2 -2
@@ -1,261 +1,261 @@
1
- import { subscribeItems, unsubscribeItems } from '../subscribtion/selection';
2
- ////////////////////////////////////////////////////
3
- // CONSTANTS
4
- ////////////////////////////////////////////////////
5
- export const BuerliScope = 'ClassCAD';
6
- export const selectionData = () => ({
7
- refs: {},
8
- active: null,
9
- });
10
- export const selectionApi = (set, get, buerliApi) => ({
11
- unselectAll(selectorId, options) {
12
- const { selection, id: drawingId } = get();
13
- const selId = (selectorId || selection.active);
14
- if (selId) {
15
- const selector = selection.refs[selId];
16
- const unselItems = selector.items;
17
- if (unselItems.length === 0) {
18
- return;
19
- }
20
- unsubscribeItems(buerliApi, drawingId, selId, unselItems);
21
- if (selector.customUnSelect) {
22
- selector.customUnSelect(selId, [], unselItems, options);
23
- }
24
- else {
25
- set(state => {
26
- const selector_ = state.selection.refs[selId];
27
- return {
28
- selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, selector_), { items: [] }) }) }),
29
- };
30
- });
31
- }
32
- }
33
- },
34
- unselect(items, selectorId, options) {
35
- const { selection, id: drawingId } = get();
36
- const selId = (selectorId || selection.active);
37
- if (selId) {
38
- const unselItems = Array.isArray(items) ? items : [items];
39
- // Remove unselItems from selector's items
40
- const selector = selection.refs[selId];
41
- const newItems = selector.items.filter(item => unselItems.find(uItem => uItem.id === item.id) === undefined);
42
- unsubscribeItems(buerliApi, drawingId, selId, unselItems);
43
- if (selector.customUnSelect) {
44
- // Find recently unselected items
45
- const diff = selector.items.filter(item1 => {
46
- return newItems.find(item2 => item2.id === item1.id) === undefined;
47
- });
48
- selector.customUnSelect(selId, newItems, diff, options);
49
- }
50
- else {
51
- set(state => {
52
- return {
53
- selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, state.selection.refs[selId]), { items: newItems }) }) }),
54
- };
55
- });
56
- }
57
- this.setHovered(null, selId);
58
- }
59
- },
60
- select(items, selectorId, options) {
61
- const { selection, api, id: drawingId } = get();
62
- const selId = (selectorId || selection.active);
63
- if (selId) {
64
- const { isItemSelected } = api.selection;
65
- const newItems = Array.isArray(items) ? items : [items];
66
- const selector = selection.refs[selId];
67
- const curItems = selector.items;
68
- // Remove duplicates
69
- let filteredItems = newItems.filter((item1, idx) => newItems.findIndex(item2 => item2.id === item1.id) === idx);
70
- // Remove already selected items and duplicates
71
- filteredItems = filteredItems.filter(item => !isItemSelected(item, selId));
72
- let unsubItems = [];
73
- let result = [...curItems, ...filteredItems];
74
- if (selector.maxLen > 0) {
75
- if (filteredItems.length === selector.maxLen) {
76
- result = [...filteredItems];
77
- unsubItems = [...curItems];
78
- }
79
- else if (filteredItems.length > selector.maxLen) {
80
- const extraItems = filteredItems.length - selector.maxLen;
81
- // If filteredItems has bigger length then selector.maxLen, remove last few items from filteredItems.
82
- result = filteredItems.slice(0, -extraItems);
83
- unsubItems = [...curItems];
84
- }
85
- else if (filteredItems.length + curItems.length >= selector.maxLen) {
86
- const extraItems = filteredItems.length + curItems.length - selector.maxLen;
87
- const allItems = [...curItems, ...filteredItems];
88
- // If filteredItems.len + curItems.len > selector.maxLen, remove first few items from union of curItems and filteredItems.
89
- result = allItems.slice(extraItems);
90
- unsubItems = allItems.slice(0, extraItems);
91
- }
92
- }
93
- if (selector.customSelect !== undefined) {
94
- // Find items which weren't selected before.
95
- const diff = result.filter(item1 => {
96
- return selector.items.find(item2 => item2.id === item1.id) === undefined;
97
- });
98
- selector.customSelect(selId, result, diff, options);
99
- }
100
- else {
101
- // subscribe items which will be selected
102
- subscribeItems(buerliApi, drawingId, selId, result);
103
- // unsubscribe items which will be unselected
104
- unsubscribeItems(buerliApi, drawingId, selId, unsubItems);
105
- set(state => {
106
- return {
107
- selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, selector), { items: result, hoveredItem: null }) }) }),
108
- };
109
- });
110
- }
111
- }
112
- },
113
- setHovered(item, selectorId) {
114
- const { selection } = get();
115
- if (selection.active === null && selectorId === undefined)
116
- return;
117
- const selId = (selectorId || selection.active);
118
- set(state => ({
119
- selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, state.selection.refs[selId]), { hoveredItem: item }) }) }),
120
- }));
121
- },
122
- activateSelector(selectorId) {
123
- set(state => {
124
- const refs = state.selection.refs;
125
- const curSelectorId = state.selection.active;
126
- if (curSelectorId) {
127
- // Reset hoveredItem
128
- refs[curSelectorId] = Object.assign(Object.assign({}, refs[curSelectorId]), { hoveredItem: null });
129
- }
130
- return {
131
- selection: Object.assign(Object.assign({}, state.selection), { active: state.selection.active === selectorId ? null : selectorId, refs: Object.assign({}, refs) }),
132
- };
133
- });
134
- },
135
- createSelector(selectorId, filter, activate = false, initialItems = [], maxLen = -1, customSelect, customUnSelect) {
136
- if (maxLen > 0 && initialItems.length > maxLen)
137
- console.error('Number initialItems should be less or equal to selector.maxLen');
138
- set(state => ({
139
- selection: Object.assign(Object.assign({}, state.selection), { active: activate ? selectorId : state.selection.active, refs: Object.assign(Object.assign({}, state.selection.refs), { [selectorId]: {
140
- items: maxLen > 0 && initialItems.length > maxLen ? [] : initialItems,
141
- hoveredItem: null,
142
- isSelectable: filter,
143
- maxLen,
144
- customSelect,
145
- customUnSelect,
146
- } }) }),
147
- }));
148
- return () => {
149
- if (get && get()) {
150
- const drawingId = get().id;
151
- unsubscribeItems(buerliApi, drawingId, selectorId);
152
- set(state => {
153
- const refs = state.selection.refs;
154
- delete refs[selectorId];
155
- return {
156
- selection: Object.assign(Object.assign({}, state.selection), { active: state.selection.active === selectorId ? null : state.selection.active, refs }),
157
- };
158
- });
159
- }
160
- };
161
- },
162
- areItemsSelected: (items, selectorId) => {
163
- const { selection } = get();
164
- if (selection.active === null && selectorId === undefined)
165
- return false;
166
- const selId = (selectorId || selection.active);
167
- const selector = selection.refs[selId];
168
- let res = true;
169
- items.forEach(item => {
170
- const itemSelected = Boolean(selector.items.find(i => areItemsEqual(i, item)));
171
- if (!itemSelected) {
172
- res = false;
173
- }
174
- });
175
- return res;
176
- },
177
- isItemSelected: (item, selectorId) => {
178
- const { selection } = get();
179
- if (selection.active === null && selectorId === undefined)
180
- return false;
181
- const selId = (selectorId || selection.active);
182
- const selector = selection.refs[selId];
183
- return Boolean(selector.items.find(i => areItemsEqual(i, item)));
184
- },
185
- setItems(id, items) {
186
- var _a;
187
- const { selection, id: drawingId } = get();
188
- const curItems = ((_a = selection.refs[id]) === null || _a === void 0 ? void 0 : _a.items) || [];
189
- unsubscribeItems(buerliApi, drawingId, id, curItems);
190
- subscribeItems(buerliApi, drawingId, id, items);
191
- set(state => {
192
- const selector = state.selection.refs[id];
193
- return {
194
- selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [id]: Object.assign(Object.assign({}, selector), { items }) }) }),
195
- };
196
- });
197
- },
198
- selectGraphic: (selectorId, items, options) => {
199
- const { api } = get();
200
- const selItems = items
201
- .map(i => api.selection.getGraphicItem(i.productId, i.containerId, i.graphicId))
202
- .filter(i => Boolean(i));
203
- if (options === null || options === void 0 ? void 0 : options.unselectExisting) {
204
- api.selection.setItems(selectorId, selItems);
205
- }
206
- else {
207
- api.selection.select(selItems, selectorId);
208
- }
209
- },
210
- getGraphicItem: (productId, containerId, graphicId) => {
211
- const { cache } = get().geometry;
212
- const container = cache[containerId];
213
- let useContainer = false;
214
- if (container) {
215
- if (graphicId === undefined) {
216
- const ids = Object.getOwnPropertyNames(container.map);
217
- graphicId = ids.length > 0 ? Number(ids[0]) : undefined;
218
- useContainer = true;
219
- }
220
- if (graphicId !== undefined) {
221
- let geomElem = container.map[graphicId];
222
- if (!geomElem) {
223
- geomElem = container.points.find(p => p.graphicId === graphicId);
224
- }
225
- if (geomElem) {
226
- geomElem.graphicId = useContainer ? containerId : geomElem.graphicId;
227
- geomElem.type = useContainer ? container.type : geomElem.type;
228
- return createGraphicItem(productId, geomElem);
229
- }
230
- }
231
- }
232
- return null;
233
- },
234
- });
235
- ////////////////////////////////////////////////////
236
- //#region GLOBAL FUNCTIONS
237
- const areItemsEqual = (a, b) => a.id === b.id && a.scope === b.scope;
238
- const getLabel = (type) => {
239
- const uppLetters = type.replace(/[a-z]/g, '');
240
- if (uppLetters.length >= 2) {
241
- return uppLetters[0] + uppLetters[1];
242
- }
243
- else if (uppLetters.length === 1) {
244
- return (type[0] + uppLetters[0]).toUpperCase();
245
- }
246
- else {
247
- return (type[0] + type[1]).toUpperCase();
248
- }
249
- };
250
- const createGraphicIdent = (productId, graphicId, type) => {
251
- return {
252
- id: `${productId}|${graphicId}|${type}`,
253
- scope: BuerliScope,
254
- label: getLabel(type),
255
- };
256
- };
257
- export const createGraphicItem = (productId, el) => {
258
- return Object.assign(Object.assign({}, createGraphicIdent(productId, el.graphicId, el.type)), { data: Object.assign(Object.assign({}, el), { productId }) });
259
- };
260
- //#endregion GLOBAL FUNCTIONS
261
- ////////////////////////////////////////////////////
1
+ import { subscribeItems, unsubscribeItems } from '../subscribtion/selection';
2
+ ////////////////////////////////////////////////////
3
+ // CONSTANTS
4
+ ////////////////////////////////////////////////////
5
+ export const BuerliScope = 'ClassCAD';
6
+ export const selectionData = () => ({
7
+ refs: {},
8
+ active: null,
9
+ });
10
+ export const selectionApi = (set, get, buerliApi) => ({
11
+ unselectAll(selectorId, options) {
12
+ const { selection, id: drawingId } = get();
13
+ const selId = (selectorId || selection.active);
14
+ if (selId) {
15
+ const selector = selection.refs[selId];
16
+ const unselItems = selector.items;
17
+ if (unselItems.length === 0) {
18
+ return;
19
+ }
20
+ unsubscribeItems(buerliApi, drawingId, selId, unselItems);
21
+ if (selector.customUnSelect) {
22
+ selector.customUnSelect(selId, [], unselItems, options);
23
+ }
24
+ else {
25
+ set(state => {
26
+ const selector_ = state.selection.refs[selId];
27
+ return {
28
+ selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, selector_), { items: [] }) }) }),
29
+ };
30
+ });
31
+ }
32
+ }
33
+ },
34
+ unselect(items, selectorId, options) {
35
+ const { selection, id: drawingId } = get();
36
+ const selId = (selectorId || selection.active);
37
+ if (selId) {
38
+ const unselItems = Array.isArray(items) ? items : [items];
39
+ // Remove unselItems from selector's items
40
+ const selector = selection.refs[selId];
41
+ const newItems = selector.items.filter(item => unselItems.find(uItem => uItem.id === item.id) === undefined);
42
+ unsubscribeItems(buerliApi, drawingId, selId, unselItems);
43
+ if (selector.customUnSelect) {
44
+ // Find recently unselected items
45
+ const diff = selector.items.filter(item1 => {
46
+ return newItems.find(item2 => item2.id === item1.id) === undefined;
47
+ });
48
+ selector.customUnSelect(selId, newItems, diff, options);
49
+ }
50
+ else {
51
+ set(state => {
52
+ return {
53
+ selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, state.selection.refs[selId]), { items: newItems }) }) }),
54
+ };
55
+ });
56
+ }
57
+ this.setHovered(null, selId);
58
+ }
59
+ },
60
+ select(items, selectorId, options) {
61
+ const { selection, api, id: drawingId } = get();
62
+ const selId = (selectorId || selection.active);
63
+ if (selId) {
64
+ const { isItemSelected } = api.selection;
65
+ const newItems = Array.isArray(items) ? items : [items];
66
+ const selector = selection.refs[selId];
67
+ const curItems = selector.items;
68
+ // Remove duplicates
69
+ let filteredItems = newItems.filter((item1, idx) => newItems.findIndex(item2 => item2.id === item1.id) === idx);
70
+ // Remove already selected items and duplicates
71
+ filteredItems = filteredItems.filter(item => !isItemSelected(item, selId));
72
+ let unsubItems = [];
73
+ let result = [...curItems, ...filteredItems];
74
+ if (selector.maxLen > 0) {
75
+ if (filteredItems.length === selector.maxLen) {
76
+ result = [...filteredItems];
77
+ unsubItems = [...curItems];
78
+ }
79
+ else if (filteredItems.length > selector.maxLen) {
80
+ const extraItems = filteredItems.length - selector.maxLen;
81
+ // If filteredItems has bigger length then selector.maxLen, remove last few items from filteredItems.
82
+ result = filteredItems.slice(0, -extraItems);
83
+ unsubItems = [...curItems];
84
+ }
85
+ else if (filteredItems.length + curItems.length >= selector.maxLen) {
86
+ const extraItems = filteredItems.length + curItems.length - selector.maxLen;
87
+ const allItems = [...curItems, ...filteredItems];
88
+ // If filteredItems.len + curItems.len > selector.maxLen, remove first few items from union of curItems and filteredItems.
89
+ result = allItems.slice(extraItems);
90
+ unsubItems = allItems.slice(0, extraItems);
91
+ }
92
+ }
93
+ if (selector.customSelect !== undefined) {
94
+ // Find items which weren't selected before.
95
+ const diff = result.filter(item1 => {
96
+ return selector.items.find(item2 => item2.id === item1.id) === undefined;
97
+ });
98
+ selector.customSelect(selId, result, diff, options);
99
+ }
100
+ else {
101
+ // subscribe items which will be selected
102
+ subscribeItems(buerliApi, drawingId, selId, result);
103
+ // unsubscribe items which will be unselected
104
+ unsubscribeItems(buerliApi, drawingId, selId, unsubItems);
105
+ set(state => {
106
+ return {
107
+ selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, selector), { items: result, hoveredItem: null }) }) }),
108
+ };
109
+ });
110
+ }
111
+ }
112
+ },
113
+ setHovered(item, selectorId) {
114
+ const { selection } = get();
115
+ if (selection.active === null && selectorId === undefined)
116
+ return;
117
+ const selId = (selectorId || selection.active);
118
+ set(state => ({
119
+ selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, state.selection.refs[selId]), { hoveredItem: item }) }) }),
120
+ }));
121
+ },
122
+ activateSelector(selectorId) {
123
+ set(state => {
124
+ const refs = state.selection.refs;
125
+ const curSelectorId = state.selection.active;
126
+ if (curSelectorId) {
127
+ // Reset hoveredItem
128
+ refs[curSelectorId] = Object.assign(Object.assign({}, refs[curSelectorId]), { hoveredItem: null });
129
+ }
130
+ return {
131
+ selection: Object.assign(Object.assign({}, state.selection), { active: state.selection.active === selectorId ? null : selectorId, refs: Object.assign({}, refs) }),
132
+ };
133
+ });
134
+ },
135
+ createSelector(selectorId, filter, activate = false, initialItems = [], maxLen = -1, customSelect, customUnSelect) {
136
+ if (maxLen > 0 && initialItems.length > maxLen)
137
+ console.error('Number initialItems should be less or equal to selector.maxLen');
138
+ set(state => ({
139
+ selection: Object.assign(Object.assign({}, state.selection), { active: activate ? selectorId : state.selection.active, refs: Object.assign(Object.assign({}, state.selection.refs), { [selectorId]: {
140
+ items: maxLen > 0 && initialItems.length > maxLen ? [] : initialItems,
141
+ hoveredItem: null,
142
+ isSelectable: filter,
143
+ maxLen,
144
+ customSelect,
145
+ customUnSelect,
146
+ } }) }),
147
+ }));
148
+ return () => {
149
+ if (get && get()) {
150
+ const drawingId = get().id;
151
+ unsubscribeItems(buerliApi, drawingId, selectorId);
152
+ set(state => {
153
+ const refs = state.selection.refs;
154
+ delete refs[selectorId];
155
+ return {
156
+ selection: Object.assign(Object.assign({}, state.selection), { active: state.selection.active === selectorId ? null : state.selection.active, refs }),
157
+ };
158
+ });
159
+ }
160
+ };
161
+ },
162
+ areItemsSelected: (items, selectorId) => {
163
+ const { selection } = get();
164
+ if (selection.active === null && selectorId === undefined)
165
+ return false;
166
+ const selId = (selectorId || selection.active);
167
+ const selector = selection.refs[selId];
168
+ let res = true;
169
+ items.forEach(item => {
170
+ const itemSelected = Boolean(selector.items.find(i => areItemsEqual(i, item)));
171
+ if (!itemSelected) {
172
+ res = false;
173
+ }
174
+ });
175
+ return res;
176
+ },
177
+ isItemSelected: (item, selectorId) => {
178
+ const { selection } = get();
179
+ if (selection.active === null && selectorId === undefined)
180
+ return false;
181
+ const selId = (selectorId || selection.active);
182
+ const selector = selection.refs[selId];
183
+ return Boolean(selector.items.find(i => areItemsEqual(i, item)));
184
+ },
185
+ setItems(id, items) {
186
+ var _a;
187
+ const { selection, id: drawingId } = get();
188
+ const curItems = ((_a = selection.refs[id]) === null || _a === void 0 ? void 0 : _a.items) || [];
189
+ unsubscribeItems(buerliApi, drawingId, id, curItems);
190
+ subscribeItems(buerliApi, drawingId, id, items);
191
+ set(state => {
192
+ const selector = state.selection.refs[id];
193
+ return {
194
+ selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [id]: Object.assign(Object.assign({}, selector), { items }) }) }),
195
+ };
196
+ });
197
+ },
198
+ selectGraphic: (selectorId, items, options) => {
199
+ const { api } = get();
200
+ const selItems = items
201
+ .map(i => api.selection.getGraphicItem(i.productId, i.containerId, i.graphicId))
202
+ .filter(i => Boolean(i));
203
+ if (options === null || options === void 0 ? void 0 : options.unselectExisting) {
204
+ api.selection.setItems(selectorId, selItems);
205
+ }
206
+ else {
207
+ api.selection.select(selItems, selectorId);
208
+ }
209
+ },
210
+ getGraphicItem: (productId, containerId, graphicId) => {
211
+ const { cache } = get().geometry;
212
+ const container = cache[containerId];
213
+ let useContainer = false;
214
+ if (container) {
215
+ if (graphicId === undefined) {
216
+ const ids = Object.getOwnPropertyNames(container.map);
217
+ graphicId = ids.length > 0 ? Number(ids[0]) : undefined;
218
+ useContainer = true;
219
+ }
220
+ if (graphicId !== undefined) {
221
+ let geomElem = container.map[graphicId];
222
+ if (!geomElem) {
223
+ geomElem = container.points.find(p => p.graphicId === graphicId);
224
+ }
225
+ if (geomElem) {
226
+ geomElem.graphicId = useContainer ? containerId : geomElem.graphicId;
227
+ geomElem.type = useContainer ? container.type : geomElem.type;
228
+ return createGraphicItem(productId, geomElem);
229
+ }
230
+ }
231
+ }
232
+ return null;
233
+ },
234
+ });
235
+ ////////////////////////////////////////////////////
236
+ //#region GLOBAL FUNCTIONS
237
+ const areItemsEqual = (a, b) => a.id === b.id && a.scope === b.scope;
238
+ const getLabel = (type) => {
239
+ const uppLetters = type.replace(/[a-z]/g, '');
240
+ if (uppLetters.length >= 2) {
241
+ return uppLetters[0] + uppLetters[1];
242
+ }
243
+ else if (uppLetters.length === 1) {
244
+ return (type[0] + uppLetters[0]).toUpperCase();
245
+ }
246
+ else {
247
+ return (type[0] + type[1]).toUpperCase();
248
+ }
249
+ };
250
+ const createGraphicIdent = (productId, graphicId, type) => {
251
+ return {
252
+ id: `${productId}|${graphicId}|${type}`,
253
+ scope: BuerliScope,
254
+ label: getLabel(type),
255
+ };
256
+ };
257
+ export const createGraphicItem = (productId, el) => {
258
+ return Object.assign(Object.assign({}, createGraphicIdent(productId, el.graphicId, el.type)), { data: Object.assign(Object.assign({}, el), { productId }) });
259
+ };
260
+ //#endregion GLOBAL FUNCTIONS
261
+ ////////////////////////////////////////////////////