@arrai-innovations/reactive-helpers 13.0.2 → 13.0.4

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.
@@ -135,42 +135,90 @@ The arguments to be passed to the crud functions.
135
135
 
136
136
  The arguments to be passed to the crud functions.
137
137
 
138
- ###### crudArgs.create
138
+ ###### crudArgs.create()
139
139
 
140
- > **create**: `Function`
140
+ > **create**: (`CreateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
141
141
 
142
142
  A function to be used instead of the default crud create function.
143
143
 
144
- ###### crudArgs.delete
144
+ ###### Parameters
145
145
 
146
- > **delete**: `Function`
146
+ **CreateDetailArgs**: `any`
147
+
148
+ ###### Returns
149
+
150
+ [`ResponseData`](../config/objectCrud.md#responsedata)
151
+
152
+ ###### crudArgs.delete()
153
+
154
+ > **delete**: (`DeleteDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
147
155
 
148
156
  A function to be used instead of the default crud delete function.
149
157
 
150
- ###### crudArgs.patch
158
+ ###### Parameters
151
159
 
152
- > **patch**: `Function`
160
+ **DeleteDetailArgs**: `any`
161
+
162
+ ###### Returns
163
+
164
+ [`ResponseData`](../config/objectCrud.md#responsedata)
165
+
166
+ ###### crudArgs.patch()
167
+
168
+ > **patch**: (`PartialDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
153
169
 
154
170
  A function to be used instead of the default crud patch function.
155
171
 
156
- ###### crudArgs.retrieve
172
+ ###### Parameters
173
+
174
+ • **PartialDetailArgs**: `any`
157
175
 
158
- > **retrieve**: `Function`
176
+ ###### Returns
177
+
178
+ [`ResponseData`](../config/objectCrud.md#responsedata)
179
+
180
+ ###### crudArgs.retrieve()
181
+
182
+ > **retrieve**: (`RetrieveDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
159
183
 
160
184
  A function to be used instead of the default crud retrieve function.
161
185
 
162
- ###### crudArgs.subscribe
186
+ ###### Parameters
187
+
188
+ • **RetrieveDetailArgs**: `any`
189
+
190
+ ###### Returns
191
+
192
+ [`ResponseData`](../config/objectCrud.md#responsedata)
193
+
194
+ ###### crudArgs.subscribe()
163
195
 
164
- > **subscribe**: `Function`
196
+ > **subscribe**: (`SubscribeArgs`) => `void`
165
197
 
166
198
  A function to be used instead of the default crud subscribe function.
167
199
 
168
- ###### crudArgs.update
200
+ ###### Parameters
169
201
 
170
- > **update**: `Function`
202
+ **SubscribeArgs**: `any`
203
+
204
+ ###### Returns
205
+
206
+ `void`
207
+
208
+ ###### crudArgs.update()
209
+
210
+ > **update**: (`UpdateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
171
211
 
172
212
  A function to be used instead of the default crud update function.
173
213
 
214
+ ###### Parameters
215
+
216
+ • **UpdateDetailArgs**: `any`
217
+
218
+ ###### Returns
219
+
220
+ [`ResponseData`](../config/objectCrud.md#responsedata)
221
+
174
222
  ###### id
175
223
 
176
224
  > **id**: `string`
@@ -207,42 +255,90 @@ The crud functions.
207
255
 
208
256
  The arguments to be passed to the crud functions.
209
257
 
210
- ###### crud.create
258
+ ###### crud.create()
211
259
 
212
- > **create**: `Function`
260
+ > **create**: (`CreateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
213
261
 
214
262
  A function to be used instead of the default crud create function.
215
263
 
216
- ###### crud.delete
264
+ ###### Parameters
217
265
 
218
- > **delete**: `Function`
266
+ **CreateDetailArgs**: `any`
267
+
268
+ ###### Returns
269
+
270
+ [`ResponseData`](../config/objectCrud.md#responsedata)
271
+
272
+ ###### crud.delete()
273
+
274
+ > **delete**: (`DeleteDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
219
275
 
220
276
  A function to be used instead of the default crud delete function.
221
277
 
222
- ###### crud.patch
278
+ ###### Parameters
223
279
 
224
- > **patch**: `Function`
280
+ **DeleteDetailArgs**: `any`
281
+
282
+ ###### Returns
283
+
284
+ [`ResponseData`](../config/objectCrud.md#responsedata)
285
+
286
+ ###### crud.patch()
287
+
288
+ > **patch**: (`PartialDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
225
289
 
226
290
  A function to be used instead of the default crud patch function.
227
291
 
228
- ###### crud.retrieve
292
+ ###### Parameters
293
+
294
+ • **PartialDetailArgs**: `any`
229
295
 
230
- > **retrieve**: `Function`
296
+ ###### Returns
297
+
298
+ [`ResponseData`](../config/objectCrud.md#responsedata)
299
+
300
+ ###### crud.retrieve()
301
+
302
+ > **retrieve**: (`RetrieveDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
231
303
 
232
304
  A function to be used instead of the default crud retrieve function.
233
305
 
234
- ###### crud.subscribe
306
+ ###### Parameters
307
+
308
+ • **RetrieveDetailArgs**: `any`
309
+
310
+ ###### Returns
311
+
312
+ [`ResponseData`](../config/objectCrud.md#responsedata)
313
+
314
+ ###### crud.subscribe()
235
315
 
236
- > **subscribe**: `Function`
316
+ > **subscribe**: (`SubscribeArgs`) => `void`
237
317
 
238
318
  A function to be used instead of the default crud subscribe function.
239
319
 
240
- ###### crud.update
320
+ ###### Parameters
241
321
 
242
- > **update**: `Function`
322
+ **SubscribeArgs**: `any`
323
+
324
+ ###### Returns
325
+
326
+ `void`
327
+
328
+ ###### crud.update()
329
+
330
+ > **update**: (`UpdateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
243
331
 
244
332
  A function to be used instead of the default crud update function.
245
333
 
334
+ ###### Parameters
335
+
336
+ • **UpdateDetailArgs**: `any`
337
+
338
+ ###### Returns
339
+
340
+ [`ResponseData`](../config/objectCrud.md#responsedata)
341
+
246
342
  ###### deleted
247
343
 
248
344
  > **deleted**: `boolean`
@@ -36,42 +36,90 @@ The crud functions.
36
36
 
37
37
  The arguments to be passed to the crud functions.
38
38
 
39
- ###### crud.create
39
+ ###### crud.create()
40
40
 
41
- > **create**: `Function`
41
+ > **create**: (`CreateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
42
42
 
43
43
  A function to be used instead of the default crud create function.
44
44
 
45
- ###### crud.delete
45
+ ###### Parameters
46
46
 
47
- > **delete**: `Function`
47
+ **CreateDetailArgs**: `any`
48
+
49
+ ###### Returns
50
+
51
+ [`ResponseData`](../config/objectCrud.md#responsedata)
52
+
53
+ ###### crud.delete()
54
+
55
+ > **delete**: (`DeleteDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
48
56
 
49
57
  A function to be used instead of the default crud delete function.
50
58
 
51
- ###### crud.patch
59
+ ###### Parameters
60
+
61
+ • **DeleteDetailArgs**: `any`
62
+
63
+ ###### Returns
52
64
 
53
- > **patch**: `Function`
65
+ [`ResponseData`](../config/objectCrud.md#responsedata)
66
+
67
+ ###### crud.patch()
68
+
69
+ > **patch**: (`PartialDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
54
70
 
55
71
  A function to be used instead of the default crud patch function.
56
72
 
57
- ###### crud.retrieve
73
+ ###### Parameters
74
+
75
+ • **PartialDetailArgs**: `any`
76
+
77
+ ###### Returns
78
+
79
+ [`ResponseData`](../config/objectCrud.md#responsedata)
80
+
81
+ ###### crud.retrieve()
58
82
 
59
- > **retrieve**: `Function`
83
+ > **retrieve**: (`RetrieveDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
60
84
 
61
85
  A function to be used instead of the default crud retrieve function.
62
86
 
63
- ###### crud.subscribe
87
+ ###### Parameters
64
88
 
65
- > **subscribe**: `Function`
89
+ **RetrieveDetailArgs**: `any`
90
+
91
+ ###### Returns
92
+
93
+ [`ResponseData`](../config/objectCrud.md#responsedata)
94
+
95
+ ###### crud.subscribe()
96
+
97
+ > **subscribe**: (`SubscribeArgs`) => `void`
66
98
 
67
99
  A function to be used instead of the default crud subscribe function.
68
100
 
69
- ###### crud.update
101
+ ###### Parameters
102
+
103
+ • **SubscribeArgs**: `any`
104
+
105
+ ###### Returns
70
106
 
71
- > **update**: `Function`
107
+ `void`
108
+
109
+ ###### crud.update()
110
+
111
+ > **update**: (`UpdateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
72
112
 
73
113
  A function to be used instead of the default crud update function.
74
114
 
115
+ ###### Parameters
116
+
117
+ • **UpdateDetailArgs**: `any`
118
+
119
+ ###### Returns
120
+
121
+ [`ResponseData`](../config/objectCrud.md#responsedata)
122
+
75
123
  ###### deleted
76
124
 
77
125
  > **deleted**: `boolean`
@@ -168,42 +216,90 @@ The crud functions.
168
216
 
169
217
  The arguments to be passed to the crud functions.
170
218
 
171
- ###### crud.create
219
+ ###### crud.create()
172
220
 
173
- > **create**: `Function`
221
+ > **create**: (`CreateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
174
222
 
175
223
  A function to be used instead of the default crud create function.
176
224
 
177
- ###### crud.delete
225
+ ###### Parameters
178
226
 
179
- > **delete**: `Function`
227
+ **CreateDetailArgs**: `any`
228
+
229
+ ###### Returns
230
+
231
+ [`ResponseData`](../config/objectCrud.md#responsedata)
232
+
233
+ ###### crud.delete()
234
+
235
+ > **delete**: (`DeleteDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
180
236
 
181
237
  A function to be used instead of the default crud delete function.
182
238
 
183
- ###### crud.patch
239
+ ###### Parameters
240
+
241
+ • **DeleteDetailArgs**: `any`
242
+
243
+ ###### Returns
184
244
 
185
- > **patch**: `Function`
245
+ [`ResponseData`](../config/objectCrud.md#responsedata)
246
+
247
+ ###### crud.patch()
248
+
249
+ > **patch**: (`PartialDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
186
250
 
187
251
  A function to be used instead of the default crud patch function.
188
252
 
189
- ###### crud.retrieve
253
+ ###### Parameters
254
+
255
+ • **PartialDetailArgs**: `any`
256
+
257
+ ###### Returns
258
+
259
+ [`ResponseData`](../config/objectCrud.md#responsedata)
260
+
261
+ ###### crud.retrieve()
190
262
 
191
- > **retrieve**: `Function`
263
+ > **retrieve**: (`RetrieveDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
192
264
 
193
265
  A function to be used instead of the default crud retrieve function.
194
266
 
195
- ###### crud.subscribe
267
+ ###### Parameters
196
268
 
197
- > **subscribe**: `Function`
269
+ **RetrieveDetailArgs**: `any`
270
+
271
+ ###### Returns
272
+
273
+ [`ResponseData`](../config/objectCrud.md#responsedata)
274
+
275
+ ###### crud.subscribe()
276
+
277
+ > **subscribe**: (`SubscribeArgs`) => `void`
198
278
 
199
279
  A function to be used instead of the default crud subscribe function.
200
280
 
201
- ###### crud.update
281
+ ###### Parameters
282
+
283
+ • **SubscribeArgs**: `any`
284
+
285
+ ###### Returns
202
286
 
203
- > **update**: `Function`
287
+ `void`
288
+
289
+ ###### crud.update()
290
+
291
+ > **update**: (`UpdateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
204
292
 
205
293
  A function to be used instead of the default crud update function.
206
294
 
295
+ ###### Parameters
296
+
297
+ • **UpdateDetailArgs**: `any`
298
+
299
+ ###### Returns
300
+
301
+ [`ResponseData`](../config/objectCrud.md#responsedata)
302
+
207
303
  ###### deleted
208
304
 
209
305
  > **deleted**: `boolean`
@@ -167,42 +167,90 @@ The crud functions.
167
167
 
168
168
  The arguments to be passed to the crud functions.
169
169
 
170
- ###### crud.create
170
+ ###### crud.create()
171
171
 
172
- > **create**: `Function`
172
+ > **create**: (`CreateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
173
173
 
174
174
  A function to be used instead of the default crud create function.
175
175
 
176
- ###### crud.delete
176
+ ###### Parameters
177
+
178
+ • **CreateDetailArgs**: `any`
179
+
180
+ ###### Returns
181
+
182
+ [`ResponseData`](../config/objectCrud.md#responsedata)
177
183
 
178
- > **delete**: `Function`
184
+ ###### crud.delete()
185
+
186
+ > **delete**: (`DeleteDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
179
187
 
180
188
  A function to be used instead of the default crud delete function.
181
189
 
182
- ###### crud.patch
190
+ ###### Parameters
191
+
192
+ • **DeleteDetailArgs**: `any`
193
+
194
+ ###### Returns
183
195
 
184
- > **patch**: `Function`
196
+ [`ResponseData`](../config/objectCrud.md#responsedata)
197
+
198
+ ###### crud.patch()
199
+
200
+ > **patch**: (`PartialDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
185
201
 
186
202
  A function to be used instead of the default crud patch function.
187
203
 
188
- ###### crud.retrieve
204
+ ###### Parameters
189
205
 
190
- > **retrieve**: `Function`
206
+ **PartialDetailArgs**: `any`
207
+
208
+ ###### Returns
209
+
210
+ [`ResponseData`](../config/objectCrud.md#responsedata)
211
+
212
+ ###### crud.retrieve()
213
+
214
+ > **retrieve**: (`RetrieveDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
191
215
 
192
216
  A function to be used instead of the default crud retrieve function.
193
217
 
194
- ###### crud.subscribe
218
+ ###### Parameters
195
219
 
196
- > **subscribe**: `Function`
220
+ **RetrieveDetailArgs**: `any`
221
+
222
+ ###### Returns
223
+
224
+ [`ResponseData`](../config/objectCrud.md#responsedata)
225
+
226
+ ###### crud.subscribe()
227
+
228
+ > **subscribe**: (`SubscribeArgs`) => `void`
197
229
 
198
230
  A function to be used instead of the default crud subscribe function.
199
231
 
200
- ###### crud.update
232
+ ###### Parameters
233
+
234
+ • **SubscribeArgs**: `any`
235
+
236
+ ###### Returns
237
+
238
+ `void`
239
+
240
+ ###### crud.update()
201
241
 
202
- > **update**: `Function`
242
+ > **update**: (`UpdateDetailArgs`) => [`ResponseData`](../config/objectCrud.md#responsedata)
203
243
 
204
244
  A function to be used instead of the default crud update function.
205
245
 
246
+ ###### Parameters
247
+
248
+ • **UpdateDetailArgs**: `any`
249
+
250
+ ###### Returns
251
+
252
+ [`ResponseData`](../config/objectCrud.md#responsedata)
253
+
206
254
  ###### deleted
207
255
 
208
256
  > **deleted**: `boolean`
package/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ // don't use default exports. it is easier if each file defines the canonical name for the function it exports.
1
2
  export * from "./config/listCrud.js";
2
3
  export * from "./config/objectCrud.js";
3
4
  export * from "./use/cancellableIntent.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arrai-innovations/reactive-helpers",
3
- "version": "13.0.2",
3
+ "version": "13.0.4",
4
4
  "description": "VueJS 3 utility composition functions to help manipulate objects and lists.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -30,7 +30,7 @@ describe("config/listCrud.js", () => {
30
30
  */
31
31
  const retrievedCrud = reactive({});
32
32
  expect(() => getListCrud(retrievedCrud)).not.toThrow();
33
- expect(new Set(Object.keys(retrievedCrud))).toEqual(new Set(["list", "subscribe", "args"]));
33
+ expect(new Set(Object.keys(retrievedCrud))).toEqual(new Set(["list", "bulkDelete", "subscribe", "args"]));
34
34
  expect(retrievedCrud.args).not.toBe(crud.args);
35
35
  expect(retrievedCrud.args).toEqual(crud.args);
36
36
  expect(retrievedCrud.list).toBe(crud.list);
@@ -11,15 +11,17 @@ afterAll(() => {
11
11
 
12
12
  const fields = ["id", "__str__", "name"];
13
13
  describe("use/listInstance.spec.js", function () {
14
- let useListInstance, ListInstanceError, useListInstances, globalList;
14
+ let useListInstance, ListInstanceError, useListInstances, globalList, globalbulkDelete;
15
15
  beforeEach(async () => {
16
16
  const listCrud = await import("../../../config/listCrud.js");
17
17
  const imported = await import("../../../use/listInstance.js");
18
18
  globalList = vi.fn();
19
+ globalbulkDelete = vi.fn(() => Promise.resolve(true));
19
20
  // @ts-ignore
20
21
  globalList.cancel = vi.fn();
21
22
  listCrud.setListCrud({
22
23
  list: globalList,
24
+ bulkDelete: globalbulkDelete,
23
25
  args: { stream: "test_stream" },
24
26
  });
25
27
  useListInstance = imported.useListInstance;
@@ -513,6 +515,52 @@ describe("use/listInstance.spec.js", function () {
513
515
  expect(listInstance.state.order).toEqual(["2", "3"]);
514
516
  });
515
517
  });
518
+ describe("bulkDelete", function () {
519
+ it("succeeds", async function () {
520
+ const listArgs = reactive({
521
+ user: 1,
522
+ });
523
+ const retrieveArgs = reactive({
524
+ fields,
525
+ });
526
+ const listInstance = useListInstance({ props: { listArgs, retrieveArgs } });
527
+ let crudListResolve;
528
+ const crudListPromise = new Promise((resolve) => {
529
+ crudListResolve = resolve;
530
+ });
531
+ let passedPageCallback;
532
+ globalList.mockImplementation(({ pageCallback }) => {
533
+ passedPageCallback = pageCallback;
534
+ return crudListPromise;
535
+ });
536
+ const liListResolve = listInstance.list();
537
+ await nextTick();
538
+ // @ts-ignore - pageCallback is set in the mock, if not it will throw which is what we want
539
+ passedPageCallback(crudListResolvedPage2);
540
+ // @ts-ignore - crudListResolve is set in a promise, since we await this will be set
541
+ crudListResolve();
542
+ await flushPromises();
543
+ await expect(liListResolve).resolves.toBe(true);
544
+
545
+ expect({ ...listInstance.state.objects }).toEqual(crudListResolvedObjects2);
546
+ const bulkDeleteResolve = listInstance.bulkDelete();
547
+ expectErrorToBeNull(listInstance.state.error);
548
+ expect(listInstance.state.errored).toBe(false);
549
+ expect(listInstance.state.loading).toBe(true);
550
+ expect(globalbulkDelete).toHaveBeenCalledWith({
551
+ crudArgs: { stream: "test_stream" },
552
+ ids: Object.keys(crudListResolvedObjects2).map(Number),
553
+ });
554
+
555
+ expect(globalbulkDelete).toHaveBeenCalledTimes(1);
556
+
557
+ // @ts-ignore - bulkDeleteResolve is set in a promise, since we await this will be set
558
+ crudListResolve();
559
+ await flushPromises();
560
+ await expect(bulkDeleteResolve).resolves.toBe(true);
561
+ expect({ ...listInstance.state.objects }).toEqual({});
562
+ });
563
+ });
516
564
  describe("getFakeId", function () {
517
565
  it("returns fakeId", function () {
518
566
  const listInstance = useListInstance({ props: {} });
@@ -15,6 +15,15 @@ import { isRef, ref, watch, isReactive } from "vue";
15
15
  */
16
16
  const isRefOrReactive = (v) => isRef(v) || isReactive(v);
17
17
 
18
+ /**
19
+ * @typedef {(
20
+ * string |
21
+ * string[] |
22
+ * { [key: string]: boolean | import("vue").Ref<boolean> } |
23
+ * import("vue").Ref<string | string[]>
24
+ * )} CSSClasses
25
+ */
26
+
18
27
  /**
19
28
  * Normalize various ways of specifying CSS classes into an object for use in Vue.js with reactivity. If refs are
20
29
  * present, the resulting object will be a ref containing an array of objects to preserve order of operations in
@@ -40,12 +49,7 @@ const isRefOrReactive = (v) => isRef(v) || isReactive(v);
40
49
  * </script>
41
50
  * ```
42
51
  *
43
- * @param {...(
44
- * string |
45
- * string[] |
46
- * { [key: string]: boolean | import("vue").Ref<boolean> } |
47
- * import("vue").Ref<string | string[]>
48
- * )} classes - A mixed array containing multiple ways of specifying CSS classes.
52
+ * @param {...(CSSClasses)} classes - A mixed array containing multiple ways of specifying CSS classes.
49
53
  * @returns {import("vue").Ref<import('../utils/classes.js').CombinedClasses>} - A ref
50
54
  * containing an object or array of objects containing CSS classes. Arrays are used if refs are present, to
51
55
  * preserve order of operations in reactive contexts.