@stamhoofd/structures 2.85.3 → 2.86.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 (77) hide show
  1. package/dist/src/Organization.d.ts.map +1 -1
  2. package/dist/src/Organization.js +1 -0
  3. package/dist/src/Organization.js.map +1 -1
  4. package/dist/src/StripeAccount.d.ts +1 -1
  5. package/dist/src/StripeAccount.d.ts.map +1 -1
  6. package/dist/src/StripeAccount.js +2 -2
  7. package/dist/src/StripeAccount.js.map +1 -1
  8. package/dist/src/filters/PropertyFilter.d.ts.map +1 -1
  9. package/dist/src/filters/PropertyFilter.js +3 -2
  10. package/dist/src/filters/PropertyFilter.js.map +1 -1
  11. package/dist/src/filters/convertOldPropertyFilter.d.ts +110 -0
  12. package/dist/src/filters/convertOldPropertyFilter.d.ts.map +1 -0
  13. package/dist/src/filters/convertOldPropertyFilter.js +681 -0
  14. package/dist/src/filters/convertOldPropertyFilter.js.map +1 -0
  15. package/dist/src/filters/inMemoryFilterDefinitions.d.ts.map +1 -1
  16. package/dist/src/filters/inMemoryFilterDefinitions.js +2 -0
  17. package/dist/src/filters/inMemoryFilterDefinitions.js.map +1 -1
  18. package/dist/src/members/MemberDetails.d.ts +2 -1
  19. package/dist/src/members/MemberDetails.d.ts.map +1 -1
  20. package/dist/src/members/MemberDetails.js +25 -0
  21. package/dist/src/members/MemberDetails.js.map +1 -1
  22. package/dist/src/members/PlatformMember.d.ts +2 -2
  23. package/dist/src/members/records/RecordAnswer.d.ts +4 -3
  24. package/dist/src/members/records/RecordAnswer.d.ts.map +1 -1
  25. package/dist/src/members/records/RecordAnswer.js +9 -3
  26. package/dist/src/members/records/RecordAnswer.js.map +1 -1
  27. package/dist/src/members/records/RecordCategory.d.ts +3 -1
  28. package/dist/src/members/records/RecordCategory.d.ts.map +1 -1
  29. package/dist/src/members/records/RecordCategory.js +19 -2
  30. package/dist/src/members/records/RecordCategory.js.map +1 -1
  31. package/dist/src/webshops/Order.d.ts +1 -1
  32. package/dist/src/webshops/Order.d.ts.map +1 -1
  33. package/dist/src/webshops/Order.js +4 -3
  34. package/dist/src/webshops/Order.js.map +1 -1
  35. package/dist/src/webshops/Webshop.d.ts +1 -0
  36. package/dist/src/webshops/Webshop.d.ts.map +1 -1
  37. package/dist/src/webshops/Webshop.js +12 -0
  38. package/dist/src/webshops/Webshop.js.map +1 -1
  39. package/esm/dist/src/Organization.d.ts.map +1 -1
  40. package/esm/dist/src/Organization.js +1 -0
  41. package/esm/dist/src/Organization.js.map +1 -1
  42. package/esm/dist/src/StripeAccount.d.ts +1 -1
  43. package/esm/dist/src/StripeAccount.d.ts.map +1 -1
  44. package/esm/dist/src/StripeAccount.js +2 -2
  45. package/esm/dist/src/StripeAccount.js.map +1 -1
  46. package/esm/dist/src/filters/PropertyFilter.d.ts.map +1 -1
  47. package/esm/dist/src/filters/PropertyFilter.js +3 -2
  48. package/esm/dist/src/filters/PropertyFilter.js.map +1 -1
  49. package/esm/dist/src/filters/convertOldPropertyFilter.d.ts +110 -0
  50. package/esm/dist/src/filters/convertOldPropertyFilter.d.ts.map +1 -0
  51. package/esm/dist/src/filters/convertOldPropertyFilter.js +678 -0
  52. package/esm/dist/src/filters/convertOldPropertyFilter.js.map +1 -0
  53. package/esm/dist/src/filters/inMemoryFilterDefinitions.d.ts.map +1 -1
  54. package/esm/dist/src/filters/inMemoryFilterDefinitions.js +2 -0
  55. package/esm/dist/src/filters/inMemoryFilterDefinitions.js.map +1 -1
  56. package/esm/dist/src/members/MemberDetails.d.ts +2 -1
  57. package/esm/dist/src/members/MemberDetails.d.ts.map +1 -1
  58. package/esm/dist/src/members/MemberDetails.js +25 -0
  59. package/esm/dist/src/members/MemberDetails.js.map +1 -1
  60. package/esm/dist/src/members/PlatformMember.d.ts +2 -2
  61. package/esm/dist/src/members/records/RecordAnswer.d.ts +4 -3
  62. package/esm/dist/src/members/records/RecordAnswer.d.ts.map +1 -1
  63. package/esm/dist/src/members/records/RecordAnswer.js +9 -3
  64. package/esm/dist/src/members/records/RecordAnswer.js.map +1 -1
  65. package/esm/dist/src/members/records/RecordCategory.d.ts +3 -1
  66. package/esm/dist/src/members/records/RecordCategory.d.ts.map +1 -1
  67. package/esm/dist/src/members/records/RecordCategory.js +19 -2
  68. package/esm/dist/src/members/records/RecordCategory.js.map +1 -1
  69. package/esm/dist/src/webshops/Order.d.ts +1 -1
  70. package/esm/dist/src/webshops/Order.d.ts.map +1 -1
  71. package/esm/dist/src/webshops/Order.js +4 -3
  72. package/esm/dist/src/webshops/Order.js.map +1 -1
  73. package/esm/dist/src/webshops/Webshop.d.ts +1 -0
  74. package/esm/dist/src/webshops/Webshop.d.ts.map +1 -1
  75. package/esm/dist/src/webshops/Webshop.js +12 -0
  76. package/esm/dist/src/webshops/Webshop.js.map +1 -1
  77. package/package.json +2 -2
@@ -0,0 +1,678 @@
1
+ import { PropertyFilter } from './PropertyFilter.js';
2
+ // todo: remove after migration
3
+ // #region types
4
+ var NumberFilterMode;
5
+ (function (NumberFilterMode) {
6
+ NumberFilterMode["GreaterThan"] = "GreaterThan";
7
+ NumberFilterMode["LessThan"] = "LessThan";
8
+ NumberFilterMode["Between"] = "Between";
9
+ NumberFilterMode["NotBetween"] = "NotBetween";
10
+ NumberFilterMode["Equal"] = "Equal";
11
+ NumberFilterMode["NotEqual"] = "NotEqual";
12
+ })(NumberFilterMode || (NumberFilterMode = {}));
13
+ var StringFilterMode;
14
+ (function (StringFilterMode) {
15
+ StringFilterMode["Contains"] = "Contains";
16
+ StringFilterMode["Equals"] = "Equals";
17
+ StringFilterMode["NotContains"] = "NotContains";
18
+ StringFilterMode["NotEquals"] = "NotEquals";
19
+ StringFilterMode["NotEmpty"] = "NotEmpty";
20
+ StringFilterMode["Empty"] = "Empty";
21
+ })(StringFilterMode || (StringFilterMode = {}));
22
+ var ChoicesFilterMode;
23
+ (function (ChoicesFilterMode) {
24
+ ChoicesFilterMode["Or"] = "Or";
25
+ ChoicesFilterMode["And"] = "And";
26
+ /**
27
+ * Means !(A || B) == !A && !B
28
+ */
29
+ ChoicesFilterMode["Nor"] = "Nor";
30
+ /**
31
+ * Means !(A && B) == !A || !B
32
+ */
33
+ ChoicesFilterMode["Nand"] = "Nand";
34
+ })(ChoicesFilterMode || (ChoicesFilterMode = {}));
35
+ var DateFilterMode;
36
+ (function (DateFilterMode) {
37
+ DateFilterMode["GreaterThan"] = "GreaterThan";
38
+ DateFilterMode["LessThan"] = "LessThan";
39
+ DateFilterMode["Between"] = "Between";
40
+ DateFilterMode["NotBetween"] = "NotBetween";
41
+ DateFilterMode["Equal"] = "Equal";
42
+ DateFilterMode["NotEqual"] = "NotEqual";
43
+ })(DateFilterMode || (DateFilterMode = {}));
44
+ var GroupFilterMode;
45
+ (function (GroupFilterMode) {
46
+ GroupFilterMode["Or"] = "Or";
47
+ GroupFilterMode["And"] = "And";
48
+ /**
49
+ * Means !(A || B) == !A && !B
50
+ */
51
+ GroupFilterMode["Nor"] = "Nor";
52
+ /**
53
+ * Means !(A && B) == !A || !B
54
+ */
55
+ GroupFilterMode["Nand"] = "Nand";
56
+ })(GroupFilterMode || (GroupFilterMode = {}));
57
+ var RegistrationsFilterMode;
58
+ (function (RegistrationsFilterMode) {
59
+ RegistrationsFilterMode["Or"] = "Or";
60
+ RegistrationsFilterMode["And"] = "And";
61
+ /**
62
+ * Means !(A || B) == !A && !B
63
+ */
64
+ RegistrationsFilterMode["Nor"] = "Nor";
65
+ /**
66
+ * Means !(A && B) == !A || !B
67
+ */
68
+ RegistrationsFilterMode["Nand"] = "Nand";
69
+ })(RegistrationsFilterMode || (RegistrationsFilterMode = {}));
70
+ var FilterType;
71
+ (function (FilterType) {
72
+ FilterType["NumberFilter"] = "NumberFilter";
73
+ FilterType["StringFilter"] = "StringFilter";
74
+ FilterType["ChoicesFilter"] = "ChoicesFilter";
75
+ FilterType["DateFilter"] = "DateFilter";
76
+ FilterType["FilterGroup"] = "FilterGroup";
77
+ FilterType["PropertyFilter"] = "PropertyFilter";
78
+ FilterType["RegistrationsFilter"] = "RegistrationsFilter";
79
+ })(FilterType || (FilterType = {}));
80
+ // #endregion
81
+ function filterToStamhoofdFilter(filter) {
82
+ const type = getFilterType(filter);
83
+ switch (type) {
84
+ case FilterType.NumberFilter:
85
+ return numberFilterToStamhoofdFilter(filter);
86
+ case FilterType.StringFilter:
87
+ return stringFilterToStamhoofdFilter(filter);
88
+ case FilterType.ChoicesFilter:
89
+ return choicesFilterToStamhoofdFilter(filter);
90
+ case FilterType.DateFilter:
91
+ return dateFilterToStamhoofdFilter(filter);
92
+ case FilterType.FilterGroup:
93
+ return filterGroupToStamhoofdFilter(filter);
94
+ case FilterType.PropertyFilter:
95
+ throw new Error(`PropertyFilter not implemented: ${JSON.stringify(filter)}`);
96
+ case FilterType.RegistrationsFilter:
97
+ return registrationsFilterToStamhoofdFilter(filter);
98
+ }
99
+ }
100
+ const filterDefinitionIDSQLFilterIdMap = new Map([
101
+ ['member_age', 'age'],
102
+ ['member_gender', 'gender'],
103
+ ['member_birthDay', 'birthDay'],
104
+ ['gender', 'gender'],
105
+ ]);
106
+ function getSQLFilterId(filter) {
107
+ const definitionId = filter.definitionId;
108
+ if (!definitionId) {
109
+ throw new Error('filter has no definitionId');
110
+ }
111
+ const result = filterDefinitionIDSQLFilterIdMap.get(definitionId);
112
+ if (!result) {
113
+ throw new Error('No sql filter id found for definitionId: ' + definitionId);
114
+ }
115
+ return result;
116
+ }
117
+ function numberFilterToStamhoofdFilter(filter) {
118
+ if (filter.definitionId.startsWith('record_')) {
119
+ throw new Error(`Number filter not supported: ${filter.definitionId}`);
120
+ }
121
+ const supported = new Set(['member_age']);
122
+ if (!supported.has(filter.definitionId)) {
123
+ throw new Error(`Number filter not supported: ${filter.definitionId}`);
124
+ }
125
+ const sqlFilterId = getSQLFilterId(filter);
126
+ switch (filter.mode) {
127
+ case NumberFilterMode.LessThan: {
128
+ if (filter.end === undefined) {
129
+ throw new Error('LessThan filter has no end');
130
+ }
131
+ return {
132
+ [sqlFilterId]: {
133
+ $lte: filter.end,
134
+ },
135
+ };
136
+ }
137
+ case NumberFilterMode.GreaterThan: {
138
+ if (filter.start === undefined) {
139
+ throw new Error('GreaterThan filter has no start');
140
+ }
141
+ return {
142
+ [sqlFilterId]: {
143
+ $gte: filter.start,
144
+ },
145
+ };
146
+ }
147
+ case NumberFilterMode.Between: {
148
+ if (filter.start === undefined || filter.end === undefined) {
149
+ throw new Error('Between filter has no start or end');
150
+ }
151
+ return {
152
+ $and: [
153
+ { [sqlFilterId]: {
154
+ $gte: filter.start,
155
+ } },
156
+ { [sqlFilterId]: {
157
+ $lte: filter.end,
158
+ } },
159
+ ],
160
+ };
161
+ }
162
+ case NumberFilterMode.NotBetween: {
163
+ if (filter.start === undefined || filter.end === undefined) {
164
+ throw new Error('NotBetween filter has no start or end');
165
+ }
166
+ return {
167
+ $or: [
168
+ { [sqlFilterId]: {
169
+ $lt: filter.start,
170
+ } },
171
+ { [sqlFilterId]: {
172
+ $gt: filter.end,
173
+ } },
174
+ ],
175
+ };
176
+ }
177
+ case NumberFilterMode.Equal: {
178
+ if (filter.start === undefined) {
179
+ throw new Error('Equal filter has no value: ' + JSON.stringify(filter));
180
+ }
181
+ return {
182
+ [sqlFilterId]: {
183
+ $eq: filter.start,
184
+ },
185
+ };
186
+ }
187
+ case NumberFilterMode.NotEqual: {
188
+ if (filter.start === undefined) {
189
+ throw new Error('Not equal filter has no value');
190
+ }
191
+ return {
192
+ [sqlFilterId]: {
193
+ $neq: filter.start,
194
+ },
195
+ };
196
+ }
197
+ }
198
+ }
199
+ function stringFilterToStamhoofdFilter(filter) {
200
+ if (filter.definitionId.startsWith('record_')) {
201
+ const recordId = filter.definitionId.replace('record_', '');
202
+ return {
203
+ recordAnswers: {
204
+ [recordId]: {
205
+ value: { $eq: filter.value },
206
+ },
207
+ },
208
+ };
209
+ }
210
+ const supported = new Set(['member_name']);
211
+ if (!supported.has(filter.definitionId)) {
212
+ throw new Error(`String filter not supported: ${filter.definitionId}`);
213
+ }
214
+ const sqlFilterId = getSQLFilterId(filter);
215
+ switch (filter.mode) {
216
+ case StringFilterMode.Contains: {
217
+ return {
218
+ [sqlFilterId]: {
219
+ $contains: filter.value,
220
+ },
221
+ };
222
+ }
223
+ case StringFilterMode.NotContains: {
224
+ return {
225
+ $not: {
226
+ [sqlFilterId]: {
227
+ $contains: filter.value,
228
+ },
229
+ },
230
+ };
231
+ }
232
+ case StringFilterMode.Empty: {
233
+ return {
234
+ $or: [
235
+ {
236
+ [sqlFilterId]: {
237
+ $eq: '',
238
+ },
239
+ },
240
+ {
241
+ [sqlFilterId]: {
242
+ $eq: null,
243
+ },
244
+ },
245
+ ],
246
+ };
247
+ }
248
+ case StringFilterMode.NotEmpty: {
249
+ return {
250
+ $not: {
251
+ $or: [
252
+ {
253
+ [sqlFilterId]: {
254
+ $eq: '',
255
+ },
256
+ },
257
+ {
258
+ [sqlFilterId]: {
259
+ $eq: null,
260
+ },
261
+ },
262
+ ],
263
+ },
264
+ };
265
+ }
266
+ case StringFilterMode.Equals: {
267
+ return {
268
+ [sqlFilterId]: {
269
+ $eq: filter.value,
270
+ },
271
+ };
272
+ }
273
+ case StringFilterMode.NotEquals: {
274
+ return {
275
+ $not: {
276
+ [sqlFilterId]: {
277
+ $eq: filter.value,
278
+ },
279
+ },
280
+ };
281
+ }
282
+ }
283
+ }
284
+ function choicesFilterToStamhoofdFilter(filter) {
285
+ if (filter.definitionId.startsWith('record_')) {
286
+ const choiceIds = filter.choiceIds;
287
+ const isCheckbox = choiceIds.includes('checked') || choiceIds.includes('not_checked');
288
+ const recordId = filter.definitionId.replace('record_', '');
289
+ if (isCheckbox) {
290
+ if (filter.mode !== ChoicesFilterMode.Or) {
291
+ throw new Error(`Unsupported checkbox filter mode: ${filter.mode}`);
292
+ }
293
+ return {
294
+ recordAnswers: {
295
+ [recordId]: {
296
+ selected: { $in: filter.choiceIds.map(choiceId => choiceId === 'checked') },
297
+ },
298
+ },
299
+ };
300
+ }
301
+ switch (filter.mode) {
302
+ case ChoicesFilterMode.Or: {
303
+ return {
304
+ recordAnswers: {
305
+ [recordId]: {
306
+ selectedChoices: {
307
+ $elemMatch: {
308
+ id: {
309
+ $in: choiceIds,
310
+ },
311
+ },
312
+ },
313
+ },
314
+ },
315
+ };
316
+ }
317
+ case ChoicesFilterMode.And: {
318
+ // todo: test
319
+ return {
320
+ recordAnswers: {
321
+ [recordId]: {
322
+ $and: choiceIds.map((choiceId) => {
323
+ return {
324
+ selectedChoices: {
325
+ $elemMatch: {
326
+ id: {
327
+ $eq: choiceId,
328
+ },
329
+ },
330
+ },
331
+ };
332
+ }),
333
+ },
334
+ },
335
+ };
336
+ }
337
+ default: {
338
+ throw new Error(`Unsupported filter mode for record answers: ${filter.mode}`);
339
+ }
340
+ }
341
+ }
342
+ const supported = new Set(['member_gender', 'gender', 'member_missing_data']);
343
+ if (!supported.has(filter.definitionId)) {
344
+ throw new Error(`Choices filter not supported: ${filter.definitionId}`);
345
+ }
346
+ if (filter.definitionId === 'member_missing_data') {
347
+ const mappedChoiceIds = filter.choiceIds.map((choiceId) => {
348
+ if (choiceId === 'emergencyContact') {
349
+ return 'emergencyContacts';
350
+ }
351
+ return choiceId;
352
+ });
353
+ if (filter.mode === ChoicesFilterMode.Or) {
354
+ return {
355
+ missingData: {
356
+ $elemMatch: {
357
+ $in: mappedChoiceIds,
358
+ },
359
+ },
360
+ };
361
+ }
362
+ if (filter.mode === ChoicesFilterMode.Nor) {
363
+ return {
364
+ $not: {
365
+ missingData: {
366
+ $elemMatch: {
367
+ $in: mappedChoiceIds,
368
+ },
369
+ },
370
+ },
371
+ };
372
+ }
373
+ const filters = mappedChoiceIds.map((choiceId) => {
374
+ return {
375
+ missingData: {
376
+ $elemMatch: {
377
+ $in: [choiceId],
378
+ },
379
+ },
380
+ };
381
+ });
382
+ switch (filter.mode) {
383
+ case ChoicesFilterMode.And: {
384
+ return {
385
+ $and: filters,
386
+ };
387
+ }
388
+ case ChoicesFilterMode.Nand: {
389
+ return {
390
+ $not: {
391
+ $and: filters,
392
+ },
393
+ };
394
+ }
395
+ }
396
+ }
397
+ const sqlFilterId = getSQLFilterId(filter);
398
+ switch (filter.mode) {
399
+ case ChoicesFilterMode.Or: {
400
+ return {
401
+ [sqlFilterId]: {
402
+ $in: filter.choiceIds,
403
+ },
404
+ };
405
+ }
406
+ case ChoicesFilterMode.And: {
407
+ throw new Error('And mode not supported for choices filter');
408
+ }
409
+ case ChoicesFilterMode.Nor: {
410
+ return {
411
+ $not: {
412
+ [sqlFilterId]: {
413
+ $in: filter.choiceIds,
414
+ },
415
+ },
416
+ };
417
+ }
418
+ case ChoicesFilterMode.Nand:
419
+ throw new Error('Nand mode not supported for choices filter');
420
+ }
421
+ }
422
+ function dateFilterToStamhoofdFilter(filter) {
423
+ if (filter.definitionId.startsWith('record_')) {
424
+ throw new Error(`Date filter not supported: ${filter.definitionId}`);
425
+ }
426
+ const supported = new Set(['member_birthDay']);
427
+ if (!supported.has(filter.definitionId)) {
428
+ throw new Error(`Date filter not supported: ${filter.definitionId}`);
429
+ }
430
+ const sqlFilterId = getSQLFilterId(filter);
431
+ function msToFilterValue(ms) {
432
+ return { $: '$date', value: ms };
433
+ }
434
+ if (filter.minimumDate) {
435
+ return {
436
+ [sqlFilterId]: {
437
+ $gte: filter.minimumDate,
438
+ },
439
+ };
440
+ }
441
+ switch (filter.mode) {
442
+ case DateFilterMode.GreaterThan: {
443
+ if (filter.minimumDate === undefined) {
444
+ throw new Error('GreaterThan filter has no minimumDate');
445
+ }
446
+ return {
447
+ [sqlFilterId]: {
448
+ $gte: msToFilterValue(filter.minimumDate),
449
+ },
450
+ };
451
+ }
452
+ case DateFilterMode.LessThan: {
453
+ if (filter.maximumDate === undefined) {
454
+ throw new Error('LessThan filter has no maximumDate');
455
+ }
456
+ return {
457
+ [sqlFilterId]: {
458
+ $lte: msToFilterValue(filter.maximumDate),
459
+ },
460
+ };
461
+ }
462
+ case DateFilterMode.Between: {
463
+ if (!filter.minimumDate || !filter.maximumDate) {
464
+ throw new Error('Between filter has no minimumDate or maximumDate');
465
+ }
466
+ return {
467
+ $and: [
468
+ {
469
+ [sqlFilterId]: {
470
+ $gte: msToFilterValue(filter.minimumDate),
471
+ },
472
+ },
473
+ {
474
+ [sqlFilterId]: {
475
+ $lte: msToFilterValue(filter.maximumDate),
476
+ },
477
+ },
478
+ ],
479
+ };
480
+ }
481
+ case DateFilterMode.NotBetween: {
482
+ if (!filter.minimumDate || !filter.maximumDate) {
483
+ throw new Error('NotBetween filter has no minimumDate or maximumDate');
484
+ }
485
+ return {
486
+ $or: [
487
+ {
488
+ [sqlFilterId]: {
489
+ $lt: msToFilterValue(filter.minimumDate),
490
+ },
491
+ },
492
+ {
493
+ [sqlFilterId]: {
494
+ $gt: msToFilterValue(filter.maximumDate),
495
+ },
496
+ },
497
+ ],
498
+ };
499
+ }
500
+ case DateFilterMode.Equal: {
501
+ if (filter.minimumDate === undefined) {
502
+ throw new Error('Equal filter has no minimumDate');
503
+ }
504
+ return {
505
+ [sqlFilterId]: {
506
+ $eq: msToFilterValue(filter.minimumDate),
507
+ },
508
+ };
509
+ }
510
+ case DateFilterMode.NotEqual: {
511
+ if (filter.minimumDate === undefined) {
512
+ throw new Error('NotEqual filter has no minimumDate');
513
+ }
514
+ return {
515
+ $not: {
516
+ [sqlFilterId]: {
517
+ $eq: msToFilterValue(filter.minimumDate),
518
+ },
519
+ },
520
+ };
521
+ }
522
+ }
523
+ }
524
+ function getFilterType(filter) {
525
+ if ('enabledWhen' in filter) {
526
+ return FilterType.PropertyFilter;
527
+ }
528
+ if ('minimumDate' in filter || 'maximumDate' in filter) {
529
+ return FilterType.DateFilter;
530
+ }
531
+ if ('choiceIds' in filter) {
532
+ return FilterType.ChoicesFilter;
533
+ }
534
+ if ('filters' in filter) {
535
+ return FilterType.FilterGroup;
536
+ }
537
+ if ('choices' in filter) {
538
+ return FilterType.RegistrationsFilter;
539
+ }
540
+ if ('value' in filter) {
541
+ return FilterType.StringFilter;
542
+ }
543
+ return FilterType.NumberFilter;
544
+ }
545
+ function filterGroupToStamhoofdFilter(filter) {
546
+ const filters = filter.filters.map(f => filterToStamhoofdFilter(f));
547
+ if (filters.length === 0) {
548
+ console.error('filterGroupToStamhoofdFilter: no filters');
549
+ return null;
550
+ }
551
+ if (filters.length === 1) {
552
+ const singleFilter = filters[0];
553
+ switch (filter.mode) {
554
+ case GroupFilterMode.And:
555
+ return singleFilter;
556
+ case GroupFilterMode.Or:
557
+ return singleFilter;
558
+ case GroupFilterMode.Nand:
559
+ return {
560
+ $not: singleFilter,
561
+ };
562
+ case GroupFilterMode.Nor:
563
+ return {
564
+ $not: singleFilter,
565
+ };
566
+ }
567
+ }
568
+ switch (filter.mode) {
569
+ case GroupFilterMode.And:
570
+ return {
571
+ $and: filters,
572
+ };
573
+ case GroupFilterMode.Or:
574
+ return {
575
+ $or: filters,
576
+ };
577
+ case GroupFilterMode.Nand:
578
+ return {
579
+ $not: {
580
+ $and: filters,
581
+ },
582
+ };
583
+ case GroupFilterMode.Nor:
584
+ return {
585
+ $not: {
586
+ $or: filters,
587
+ },
588
+ };
589
+ }
590
+ }
591
+ export function convertOldPropertyFilter(filter) {
592
+ let newEnabledWhen = null;
593
+ let newRequiredWhen = {};
594
+ if (filter.enabledWhen && filter.enabledWhen.data && filter.enabledWhen.data.filters.length !== 0) {
595
+ newEnabledWhen = filterToStamhoofdFilter(filter.enabledWhen.data);
596
+ }
597
+ if (filter.requiredWhen === null) {
598
+ newRequiredWhen = null;
599
+ }
600
+ else if (filter.requiredWhen.data && filter.requiredWhen.data.filters.length !== 0) {
601
+ newRequiredWhen = filterToStamhoofdFilter(filter.requiredWhen.data);
602
+ }
603
+ return new PropertyFilter(newEnabledWhen, newRequiredWhen);
604
+ }
605
+ function registrationsFilterToStamhoofdFilter(filter) {
606
+ if (filter.definitionId !== 'registrations') {
607
+ throw new Error(`Unknown filter definitionId for registrationsFilter: ${filter.definitionId}`);
608
+ }
609
+ // todo: ids should be converted in migration for groups?
610
+ const mode = filter.mode;
611
+ switch (mode) {
612
+ case RegistrationsFilterMode.Or: {
613
+ return {
614
+ registrations: {
615
+ $elemMatch: {
616
+ $or: filter.choices.map((c) => {
617
+ return {
618
+ $groupId: {
619
+ $eq: c.id,
620
+ },
621
+ };
622
+ }),
623
+ },
624
+ },
625
+ };
626
+ }
627
+ case RegistrationsFilterMode.And: {
628
+ return {
629
+ registrations: {
630
+ $elemMatch: {
631
+ $and: filter.choices.map((c) => {
632
+ return {
633
+ $groupId: {
634
+ $eq: c.id,
635
+ },
636
+ };
637
+ }),
638
+ },
639
+ },
640
+ };
641
+ }
642
+ case RegistrationsFilterMode.Nor: {
643
+ return {
644
+ registrations: {
645
+ $not: {
646
+ $elemMatch: {
647
+ $or: filter.choices.map((c) => {
648
+ return {
649
+ $groupId: {
650
+ $eq: c.id,
651
+ },
652
+ };
653
+ }),
654
+ },
655
+ },
656
+ },
657
+ };
658
+ }
659
+ case RegistrationsFilterMode.Nand: {
660
+ return {
661
+ registrations: {
662
+ $not: {
663
+ $elemMatch: {
664
+ $and: filter.choices.map((c) => {
665
+ return {
666
+ $groupId: {
667
+ $eq: c.id,
668
+ },
669
+ };
670
+ }),
671
+ },
672
+ },
673
+ },
674
+ };
675
+ }
676
+ }
677
+ }
678
+ //# sourceMappingURL=convertOldPropertyFilter.js.map