@buerli.io/core 0.10.0 → 0.12.0

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