rest-client-vue 1.0.0-a4 → 1.1.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.
@@ -10,7 +10,7 @@ var Q = (f, s, R) => (Te(f, s, "read from private field"), R ? R.call(f) : s.get
10
10
  s instanceof WeakSet ? s.add(f) : s.set(f, R);
11
11
  };
12
12
  import a from "lodash";
13
- import { v4 as H } from "uuid";
13
+ import { v4 as X } from "uuid";
14
14
  import { ref as I, toRef as te, computed as S, watch as C, nextTick as Le } from "vue";
15
15
  import P from "axios";
16
16
  import me from "jsog";
@@ -28,26 +28,26 @@ class ke extends Error {
28
28
  this.context = $, this.innerError = e;
29
29
  }
30
30
  }
31
- var _;
31
+ var O;
32
32
  class Ie {
33
33
  constructor() {
34
- Se(this, _, {});
34
+ Se(this, O, {});
35
35
  }
36
36
  clearAllStores() {
37
- for (const s in Q(this, _))
38
- Q(this, _)[s].clear();
37
+ for (const s in Q(this, O))
38
+ Q(this, O)[s].clear();
39
39
  }
40
40
  destroyStore(s) {
41
- Q(this, _)[s] && (Q(this, _)[s].$dispose(), delete Q(this, _)[s]);
41
+ Q(this, O)[s] && (Q(this, O)[s].$dispose(), delete Q(this, O)[s]);
42
42
  }
43
43
  getStore(s) {
44
- return Q(this, _)[s];
44
+ return Q(this, O)[s];
45
45
  }
46
46
  registerStore(s, R) {
47
- Q(this, _)[s] = R;
47
+ Q(this, O)[s] = R;
48
48
  }
49
49
  }
50
- _ = new WeakMap();
50
+ O = new WeakMap();
51
51
  function v(f, s) {
52
52
  return a.get(f, (s == null ? void 0 : s.idProperty) || "_id");
53
53
  }
@@ -270,7 +270,7 @@ const De = {
270
270
  */
271
271
  async loadResources(e = {}) {
272
272
  this.resetRetainingTransientData();
273
- const r = H();
273
+ const r = X();
274
274
  this._loadId = r, await this._loadResources(0, r, e);
275
275
  },
276
276
  /**
@@ -295,20 +295,20 @@ const De = {
295
295
  }
296
296
  const u = this.fixedQueryParams, c = a.cloneDeep(u), d = l ? (q = this.filter) != null && q.resourceIds && !this.order ? null : t.firstPageSize || ((A = s.loading) == null ? void 0 : A.firstPageSize) || t.pageSize || ((z = s.loading) == null ? void 0 : z.pageSize) || null : t.pageSize || ((B = s.loading) == null ? void 0 : B.pageSize) || null, y = d != null || s.limit != null ? a.min(a.filter([d, s.limit], (g) => g != null)) : void 0;
297
297
  y != null ? (c.offset = e, c.limit = y) : e != 0 && (c.offset = e);
298
- const E = a.map(
298
+ const U = a.map(
299
299
  c,
300
300
  (g, m) => g != null ? `${encodeURIComponent(m)}=${encodeURIComponent(g)}` : null
301
- ).filter((g) => g != null).join("&"), T = a.isEmpty(E) ? s.restCollectionUrl : `${s.restCollectionUrl}?${E}`;
301
+ ).filter((g) => g != null).join("&"), T = a.isEmpty(U) ? s.restCollectionUrl : `${s.restCollectionUrl}?${U}`;
302
302
  try {
303
303
  const g = await P.get(T), m = this.fixedQueryParams;
304
304
  if (r != this._loadId || e != this._loadOffset || !a.isEqual(u, m))
305
305
  console.log(`Discarding resources fetched by obsolete query from ${s.restCollectionUrl}.`);
306
306
  else {
307
- const U = me.decode(a.get(g, "data.data", [])), L = (l ? 0 : this.resources.length) + U.length, D = y == null || U.length < y || s.limit && L >= s.limit;
307
+ const E = me.decode(a.get(g, "data.data", [])), L = (l ? 0 : this.resources.length) + E.length, D = y == null || E.length < y || s.limit && L >= s.limit;
308
308
  console.log(
309
- `Loaded ${U.length}${l ? "" : " more"} resources from ${s.restCollectionUrl}`
309
+ `Loaded ${E.length}${l ? "" : " more"} resources from ${s.restCollectionUrl}`
310
310
  ), l && (this.resources = []);
311
- const W = [...this.resources, ...U.map((X) => Object.freeze(X))];
311
+ const W = [...this.resources, ...E.map((H) => Object.freeze(H))];
312
312
  this.resources = $e(W, this), this.status = D ? "Loaded" : "LoadingMore", D || this._loadResources(this.resources.length, r, t);
313
313
  }
314
314
  } catch (g) {
@@ -491,8 +491,8 @@ const De = {
491
491
  if (r.status == 200) {
492
492
  const t = r.data || [], l = [];
493
493
  for (const [u, c] of t.entries()) {
494
- const d = v(e[u], this) == null, y = v(c, this), E = y ? await this.refreshResource(y) : null;
495
- d && this.recordInsertion(E || c), l.push(E || Object.freeze(c));
494
+ const d = v(e[u], this) == null, y = v(c, this), U = y ? await this.refreshResource(y) : null;
495
+ d && this.recordInsertion(U || c), l.push(U || Object.freeze(c));
496
496
  }
497
497
  return l;
498
498
  }
@@ -681,50 +681,49 @@ const De = {
681
681
  return e.$id = R.$id, e;
682
682
  })();
683
683
  }, ie = new Ie(), Be = (f = {}) => {
684
- var ne, ce, ue, de;
685
- console.log("hereaaaaaaa"), console.log(f);
684
+ var oe, ce, ue, de;
686
685
  const {
687
686
  collectionId: s,
688
687
  draftBatchId: R,
689
688
  enabled: $,
690
689
  resourceType: e,
691
690
  options: r
692
- } = f, t = I(void 0), l = I(s), u = I(R), c = I($ ?? !0), d = I([te(e)]), y = I(r), E = S(() => u.value), T = I(c.value), b = I(H()), q = I((ce = (ne = y.value) == null ? void 0 : ne.filter) == null ? void 0 : ce.resourceIds), A = I((de = (ue = y.value) == null ? void 0 : ue.filter) == null ? void 0 : de.query), z = S(
691
+ } = f, t = I(void 0), l = I(s), u = I(R), c = I($ ?? !0), d = I([te(e)]), y = I(r), U = S(() => u.value), T = I(c.value), b = I(X()), q = I((ce = (oe = y.value) == null ? void 0 : oe.filter) == null ? void 0 : ce.resourceIds), A = I((de = (ue = y.value) == null ? void 0 : ue.filter) == null ? void 0 : de.query), z = S(
693
692
  () => u.value == null && l.value != null && ie.getStore(l.value) != null
694
693
  ), B = I(z.value), g = S(() => L("status", "Uninitialized"));
695
694
  function m(i) {
696
695
  if (t.value)
697
696
  return i(t.value);
698
697
  }
699
- async function U(i) {
698
+ async function E(i) {
700
699
  if (t.value)
701
700
  return await i(t.value);
702
701
  }
703
- function L(i, n) {
702
+ function L(i, o) {
704
703
  if (t.value)
705
704
  return t.value[i];
706
- if (n !== void 0)
707
- return n;
705
+ if (o !== void 0)
706
+ return o;
708
707
  throw "Attempted to use a REST collection store that has not been created, with no default value.";
709
708
  }
710
709
  const D = (i = {}) => {
711
710
  var fe, ve, ge, Re;
712
711
  const {
713
- collectionId: n,
712
+ collectionId: o,
714
713
  draftBatchId: w,
715
- enabled: O,
714
+ enabled: _,
716
715
  resourceType: se,
717
716
  options: he
718
717
  } = i;
719
- l.value = n, u.value = w, c.value = O ?? !0, d.value = [te(se)], he != null && (y.value = he, q.value = (ve = (fe = y.value) == null ? void 0 : fe.filter) == null ? void 0 : ve.resourceIds, A.value = (Re = (ge = y.value) == null ? void 0 : ge.filter) == null ? void 0 : Re.query), b.value = H(), W(c.value);
718
+ l.value = o, u.value = w, c.value = _ ?? !0, d.value = [te(se)], he != null && (y.value = he, q.value = (ve = (fe = y.value) == null ? void 0 : fe.filter) == null ? void 0 : ve.resourceIds, A.value = (Re = (ge = y.value) == null ? void 0 : ge.filter) == null ? void 0 : Re.query), b.value = X(), W(c.value);
720
719
  }, W = async (i) => {
721
720
  i != T.value && (T.value = i, i && (K(), N()));
722
- }, X = async (i) => {
723
- q.value = i, await U(async (n) => await n.setFilterResourceIds(q.value || null));
721
+ }, H = async (i) => {
722
+ q.value = i, await E(async (o) => await o.setFilterResourceIds(q.value || null));
724
723
  }, J = async (i) => {
725
724
  if (A.value = i, g.value != "Uninitialized") {
726
- const n = i, w = S(() => a.isFunction(n) ? p.value ? n(p.value) : null : n);
727
- await U((O) => O.setQuery(w.value || null));
725
+ const o = i, w = S(() => a.isFunction(o) ? p.value ? o(p.value) : null : o);
726
+ await E((_) => _.setQuery(w.value || null));
728
727
  }
729
728
  }, K = () => {
730
729
  y.value = a.merge({}, y.value || {}, {
@@ -733,12 +732,12 @@ const De = {
733
732
  }, p = S(
734
733
  () => d.value[0].value || void 0
735
734
  ), k = function(i) {
736
- const n = a.get(i, "filter.query"), w = a.get(i, "referencePathsToExpand"), O = a.isFunction(n) ? n(p.value) : n, se = p.value ? a.isFunction(w) ? w(p.value) : w || [] : [];
735
+ const o = a.get(i, "filter.query"), w = a.get(i, "referencePathsToExpand"), _ = a.isFunction(o) ? o(p.value) : o, se = p.value ? a.isFunction(w) ? w(p.value) : w || [] : [];
737
736
  return {
738
737
  ...a.cloneDeep(i || {}),
739
738
  filter: {
740
739
  ...a.cloneDeep((i == null ? void 0 : i.filter) || {}),
741
- query: O
740
+ query: _
742
741
  },
743
742
  referencePathsToExpand: se
744
743
  };
@@ -748,8 +747,8 @@ const De = {
748
747
  if (x.value.restCollectionUrl !== void 0)
749
748
  return x.value.restCollectionUrl;
750
749
  if (!B.value)
751
- return !p.value || !p.value.collectionName ? null : E.value ? `${ee.config.apiBaseUrl}/draft-batches/${E.value}/${p.value.collectionName}` : `${ee.config.apiBaseUrl}/${p.value.collectionName}`;
752
- }), o = S(() => {
750
+ return !p.value || !p.value.collectionName ? null : U.value ? `${ee.config.apiBaseUrl}/draft-batches/${U.value}/${p.value.collectionName}` : `${ee.config.apiBaseUrl}/${p.value.collectionName}`;
751
+ }), n = S(() => {
753
752
  var i;
754
753
  if (p.value)
755
754
  return a.mergeWith(
@@ -759,52 +758,52 @@ const De = {
759
758
  idProperty: (i = p.value) == null ? void 0 : i.idProperty,
760
759
  restCollectionUrl: M.value || ""
761
760
  },
762
- (n, w) => {
763
- if (a.isArray(w) && w.length == 0 && (n == null || a.isArray(n)))
761
+ (o, w) => {
762
+ if (a.isArray(w) && w.length == 0 && (o == null || a.isArray(o)))
764
763
  return w;
765
764
  }
766
765
  );
767
766
  }), h = I(0), F = S(
768
767
  () => {
769
768
  var i;
770
- return h.value, l.value || p.value && ((i = p.value) == null ? void 0 : i.collectionName) && (E.value ? `draftBatches/${E.value}/${p.value.collectionName}/${b.value}` : `${p.value.collectionName}/${b.value}`) || null;
769
+ return h.value, l.value || p.value && ((i = p.value) == null ? void 0 : i.collectionName) && (U.value ? `draftBatches/${U.value}/${p.value.collectionName}/${b.value}` : `${p.value.collectionName}/${b.value}`) || null;
771
770
  }
772
771
  ), N = () => {
773
772
  if (T.value) {
774
773
  let i = !1;
775
- return p.value && F.value && (t.value = ie.getStore(F.value), t.value ? i = !1 : o.value && (B.value = !1, t.value = Pe(F.value, o.value)(), i = !0)), i;
774
+ return p.value && F.value && (t.value = ie.getStore(F.value), t.value ? i = !1 : n.value && (B.value = !1, t.value = Pe(F.value, n.value)(), i = !0)), i;
776
775
  } else
777
776
  return !1;
778
777
  }, G = () => {
779
778
  F.value && l.value == F.value ? (t.value = void 0, N()) : (t.value = void 0, h.value = h.value + 1, N());
780
779
  };
781
- C(E, (i, n) => {
782
- a.isEqual(i, n) || G();
783
- }), C(T, (i, n) => {
784
- i != n && (i ? N() : t.value = void 0);
785
- }), C(p, (i, n) => {
786
- i && !n ? N() : !i && n || a.isEqual(i, n) || G();
787
- }), C(o, (i, n) => {
788
- a.isEqual(i, n) || G();
780
+ C(U, (i, o) => {
781
+ a.isEqual(i, o) || G();
782
+ }), C(T, (i, o) => {
783
+ i != o && (i ? N() : t.value = void 0);
784
+ }), C(p, (i, o) => {
785
+ i && !o ? N() : !i && o || a.isEqual(i, o) || G();
786
+ }), C(n, (i, o) => {
787
+ a.isEqual(i, o) || G();
789
788
  }), C(z, () => {
790
789
  z.value || (B.value = !1);
791
- }), C(F, () => N()), C(M, (i, n) => {
792
- a.isEqual(i, n) || G();
790
+ }), C(F, () => N()), C(M, (i, o) => {
791
+ a.isEqual(i, o) || G();
793
792
  });
794
- const j = [], Ue = function(i) {
793
+ const j = [], Ee = function(i) {
795
794
  g.value != "Uninitialized" ? Le(i) : j.push(i);
796
795
  };
797
- return C(g, (i, n) => {
798
- if (i != "Uninitialized" && n == "Uninitialized") {
796
+ return C(g, (i, o) => {
797
+ if (i != "Uninitialized" && o == "Uninitialized") {
799
798
  const w = a.clone(j);
800
799
  j.splice(0, j.length);
801
- for (const O of w)
802
- O();
800
+ for (const _ of w)
801
+ _();
803
802
  }
804
803
  }), N(), {
805
804
  // Configuration
806
805
  collectionId: F,
807
- draftBatchId: E,
806
+ draftBatchId: U,
808
807
  resourceType: p,
809
808
  // Status
810
809
  enabled: T,
@@ -813,7 +812,7 @@ const De = {
813
812
  listNavigators: S(() => L("listNavigators", !1)),
814
813
  // Resources loaded from the REST API
815
814
  invalidResources: S(() => L("invalidResources", [])),
816
- resources: S(() => g.value != "Uninitialized" ? (U((i) => i.ensureCollectionLoaded()), L("resources", [])) : []),
815
+ resources: S(() => g.value != "Uninitialized" ? (E((i) => i.ensureCollectionLoaded()), L("resources", [])) : []),
817
816
  // Transient data
818
817
  transientData: S(() => L("transientData", [])),
819
818
  // Selection and detail selection
@@ -823,56 +822,56 @@ const De = {
823
822
  // Methods: Configuration
824
823
  reconfigureCollection: D,
825
824
  setEditingDetailSelection: (i) => m(
826
- (n) => n.setEditingDetailSelection(i)
825
+ (o) => o.setEditingDetailSelection(i)
827
826
  ),
828
827
  setEnabled: W,
829
- setFilterResourceIds: X,
828
+ setFilterResourceIds: H,
830
829
  setQuery: J,
831
830
  // Methods: Status
832
831
  ensureStore: N,
833
832
  // TODO Rename
834
- setBatchSaveAttempted: (i) => m((n) => n.setBatchSaveAttempted(i)),
833
+ setBatchSaveAttempted: (i) => m((o) => o.setBatchSaveAttempted(i)),
835
834
  // Local collection management
836
835
  clear: () => m((i) => i.clear()),
837
- ensureCollectionLoaded: async () => await U(async (i) => i.ensureCollectionLoaded()),
838
- loadResources: async () => await U(async (i) => await i.loadResources()),
836
+ ensureCollectionLoaded: async () => await E(async (i) => i.ensureCollectionLoaded()),
837
+ loadResources: async () => await E(async (i) => await i.loadResources()),
839
838
  // Methods: Recording changes to the collection
840
- addResource: (i) => m((n) => n.addResource(i)),
841
- checkForDeletedResource: async (i) => await U(async (n) => await n.checkForDeletedResource(i)) == !0,
842
- recordDeletion: (i) => m((n) => n.recordDeletion(i)),
843
- recordInsertion: (i, { insertAtBeginning: n = !1, transientData: w = void 0 } = {}) => m((O) => O.recordInsertion(i, { insertAtBeginning: n, transientData: w })),
844
- recordUpdate: (i) => m((n) => n.recordUpdate(i)),
845
- refreshResource: async (i) => await U(
846
- async (n) => await n.refreshResource(i)
839
+ addResource: (i) => m((o) => o.addResource(i)),
840
+ checkForDeletedResource: async (i) => await E(async (o) => await o.checkForDeletedResource(i)) == !0,
841
+ recordDeletion: (i) => m((o) => o.recordDeletion(i)),
842
+ recordInsertion: (i, { insertAtBeginning: o = !1, transientData: w = void 0 } = {}) => m((_) => _.recordInsertion(i, { insertAtBeginning: o, transientData: w })),
843
+ recordUpdate: (i) => m((o) => o.recordUpdate(i)),
844
+ refreshResource: async (i) => await E(
845
+ async (o) => await o.refreshResource(i)
847
846
  ),
848
847
  // Methods: Modifying the collection
849
- deleteResource: async (i) => await U(
850
- async (n) => await n.deleteResource(i)
848
+ deleteResource: async (i) => await E(
849
+ async (o) => await o.deleteResource(i)
851
850
  ),
852
- saveResource: async (i) => await U(async (n) => await n.saveResource(i)),
853
- saveResources: async (i) => await U(async (n) => await n.saveResources(i)),
851
+ saveResource: async (i) => await E(async (o) => await o.saveResource(i)),
852
+ saveResources: async (i) => await E(async (o) => await o.saveResources(i)),
854
853
  // Methods: Transient data
855
854
  clearTransientData: () => m((i) => i.clearTransientData()),
856
- setInvalidResourceIds: (i) => m((n) => n.setInvalidResourceIds(i)),
855
+ setInvalidResourceIds: (i) => m((o) => o.setInvalidResourceIds(i)),
857
856
  setTransientDataForResources: (i) => m(
858
- (n) => n.setTransientDataForResources(i)
857
+ (o) => o.setTransientDataForResources(i)
859
858
  ),
860
859
  // Methods: Selection and detail selection
861
860
  clearSelection: () => m((i) => i.clearSelection()),
862
- deselectResources: (i) => m((n) => n.deselectResources(i)),
863
- selectResources: (i, n) => m(
864
- (w) => w.selectResources(i, n)
861
+ deselectResources: (i) => m((o) => o.deselectResources(i)),
862
+ selectResources: (i, o) => m(
863
+ (w) => w.selectResources(i, o)
865
864
  ),
866
865
  // Methods: Managing the detail view
867
866
  hideDetail: () => m((i) => i.hideDetail()),
868
867
  // Methods: Editors
869
- deregisterEditor: (i) => m((n) => n.deregisterEditor(i)),
870
- registerEditor: (i) => m((n) => n.registerEditor(i)),
868
+ deregisterEditor: (i) => m((o) => o.deregisterEditor(i)),
869
+ registerEditor: (i) => m((o) => o.registerEditor(i)),
871
870
  // Methods: List navigators
872
- deregisterListNavigator: (i) => m((n) => n.deregisterListNavigator(i)),
873
- registerListNavigator: (i) => m((n) => n.registerListNavigator(i)),
871
+ deregisterListNavigator: (i) => m((o) => o.deregisterListNavigator(i)),
872
+ registerListNavigator: (i) => m((o) => o.registerListNavigator(i)),
874
873
  // Callbacks
875
- onItemsStoreReady: Ue
874
+ onItemsStoreReady: Ee
876
875
  };
877
876
  }, Qe = () => {
878
877
  ie.clearAllStores();
@@ -880,13 +879,13 @@ const De = {
880
879
  function ae(f, s) {
881
880
  return a.get(f, (s == null ? void 0 : s.idProperty) || "_id");
882
881
  }
883
- const Ee = {
882
+ const Ue = {
884
883
  idProperty: "_id"
885
884
  }, Z = {
886
885
  resource: null,
887
886
  status: "NotLoaded"
888
887
  }, xe = (f, s) => {
889
- s = a.merge({}, Ee, s), console.log(f), console.log(s);
888
+ s = a.merge({}, Ue, s);
890
889
  const R = ye(f, {
891
890
  state: () => ({
892
891
  idProperty: s.idProperty,
@@ -896,7 +895,7 @@ const Ee = {
896
895
  ...Z
897
896
  }),
898
897
  getters: {
899
- currentResourceUrl: (e) => (console.log(e), console.log(s), e.resourceUrl || (s.restCollectionUrl && e.resourceId ? `${s.restCollectionUrl}/${e.resourceId}` : null) || s.restCollectionUrl || null),
898
+ currentResourceUrl: (e) => e.resourceUrl || (s.restCollectionUrl && e.resourceId ? `${s.restCollectionUrl}/${e.resourceId}` : null) || s.restCollectionUrl || null,
900
899
  /** Get the REST query parameters that can be determined from the options. */
901
900
  fixedQueryParams: (e) => {
902
901
  const r = {};
@@ -918,7 +917,7 @@ const Ee = {
918
917
  },
919
918
  async setResourceId(e) {
920
919
  const r = this.currentResourceUrl;
921
- this.resourceId = e, console.log(e), !a.isEqual(this.currentResourceUrl, r) && this.status != "NotLoaded" && (console.log("here"), await this.loadResource());
920
+ this.resourceId = e, !a.isEqual(this.currentResourceUrl, r) && this.status != "NotLoaded" && await this.loadResource();
922
921
  },
923
922
  async setResourceUrl(e) {
924
923
  const r = this.currentResourceUrl;
@@ -951,7 +950,7 @@ const Ee = {
951
950
  */
952
951
  async loadResource() {
953
952
  this.reset();
954
- const e = H();
953
+ const e = X();
955
954
  if (this._loadId = e, this.currentResourceUrl) {
956
955
  this.status = "Loading";
957
956
  const r = this.fixedQueryParams, t = a.cloneDeep(r), l = a.map(
@@ -1110,137 +1109,134 @@ const Ee = {
1110
1109
  return (() => {
1111
1110
  const e = (r, t) => {
1112
1111
  const l = R(r, t);
1113
- return oe.registerStore(l.$id, l), l;
1112
+ return ne.registerStore(l.$id, l), l;
1114
1113
  };
1115
1114
  return e.$id = R.$id, e;
1116
1115
  })();
1117
- }, oe = new Ie(), Me = (f = {}) => {
1118
- console.log("HERE!!!!"), console.log(f);
1116
+ }, ne = new Ie(), Me = (f = {}) => {
1119
1117
  const {
1120
1118
  resourceClientId: s,
1121
1119
  draftBatchId: R,
1122
1120
  enabled: $,
1123
1121
  resourceType: e,
1124
1122
  options: r
1125
- } = f, t = I(void 0), l = I(s), u = I(R), c = I($ ?? !0), d = I([te(e)]), y = I(r), E = S(() => u.value), T = I(c.value), b = I(H()), q = S(
1126
- () => u.value == null && l.value != null && oe.getStore(l.value) != null
1123
+ } = f, t = I(void 0), l = I(s), u = I(R), c = I($ ?? !0), d = I([te(e)]), y = I(r), U = S(() => u.value), T = I(c.value), b = I(X()), q = S(
1124
+ () => u.value == null && l.value != null && ne.getStore(l.value) != null
1127
1125
  ), A = I(q.value), z = S(() => m("status", "Uninitialized"));
1128
- function B(o) {
1126
+ function B(n) {
1129
1127
  if (t.value)
1130
- return o(t.value);
1128
+ return n(t.value);
1131
1129
  }
1132
- async function g(o) {
1133
- if (console.log("dispatchAsync"), console.log("STORE:"), console.log(t.value), t.value)
1134
- return await o(t.value);
1130
+ async function g(n) {
1131
+ if (t.value)
1132
+ return await n(t.value);
1135
1133
  }
1136
- function m(o, h) {
1134
+ function m(n, h) {
1137
1135
  if (t.value)
1138
- return t.value[o];
1136
+ return t.value[n];
1139
1137
  if (h !== void 0)
1140
1138
  return h;
1141
1139
  throw "Attempted to use a REST resource store that has not been created, with no default value.";
1142
1140
  }
1143
- const U = (o = {}) => {
1141
+ const E = (n = {}) => {
1144
1142
  const {
1145
1143
  resourceClientId: h,
1146
1144
  draftBatchId: F,
1147
1145
  enabled: N,
1148
1146
  resourceType: G,
1149
1147
  options: j
1150
- } = o;
1151
- l.value = h, u.value = F, c.value = N ?? !0, d.value = [te(G)], j != null && (y.value = j), b.value = H(), L(c.value);
1152
- }, L = async (o) => {
1153
- o != T.value && (T.value = o, o && x());
1148
+ } = n;
1149
+ l.value = h, u.value = F, c.value = N ?? !0, d.value = [te(G)], j != null && (y.value = j), b.value = X(), L(c.value);
1150
+ }, L = async (n) => {
1151
+ n != T.value && (T.value = n, n && x());
1154
1152
  }, D = S(
1155
1153
  () => d.value[0].value || void 0
1156
- ), W = function(o) {
1157
- const h = a.get(o, "referencePathsToExpand"), F = D.value ? a.isFunction(h) ? h(D.value) : h || [] : [];
1154
+ ), W = function(n) {
1155
+ const h = a.get(n, "referencePathsToExpand"), F = D.value ? a.isFunction(h) ? h(D.value) : h || [] : [];
1158
1156
  return {
1159
- ...a.cloneDeep(o || {}),
1157
+ ...a.cloneDeep(n || {}),
1160
1158
  referencePathsToExpand: F
1161
1159
  };
1162
- }, X = S(() => W(y.value)), J = S(() => {
1160
+ }, H = S(() => W(y.value)), J = S(() => {
1163
1161
  if (!D.value)
1164
1162
  return null;
1165
1163
  if (!A.value)
1166
- return !D.value || !D.value.collectionName ? null : E.value ? `${ee.config.apiBaseUrl}/draft-batches/${E.value}/${D.value.collectionName}` : `${ee.config.apiBaseUrl}/${D.value.collectionName}`;
1164
+ return !D.value || !D.value.collectionName ? null : U.value ? `${ee.config.apiBaseUrl}/draft-batches/${U.value}/${D.value.collectionName}` : `${ee.config.apiBaseUrl}/${D.value.collectionName}`;
1167
1165
  }), K = S(() => {
1168
1166
  if (D.value && J.value)
1169
1167
  return a.mergeWith(
1170
- a.cloneDeep(Ee),
1171
- X.value,
1168
+ a.cloneDeep(Ue),
1169
+ H.value,
1172
1170
  {
1173
1171
  idProperty: D.value.idProperty,
1174
1172
  restCollectionUrl: J.value
1175
1173
  },
1176
- (o, h) => {
1177
- if (a.isArray(h) && h.length == 0 && (o == null || a.isArray(o)))
1174
+ (n, h) => {
1175
+ if (a.isArray(h) && h.length == 0 && (n == null || a.isArray(n)))
1178
1176
  return h;
1179
1177
  }
1180
1178
  );
1181
1179
  }), p = I(0), k = S(
1182
1180
  () => {
1183
- var o;
1184
- return p.value, l.value || D.value && ((o = D.value) == null ? void 0 : o.collectionName) && (E.value ? `draftBatches/${E.value}/${D.value.collectionName}/${b.value}` : `${D.value.collectionName}/${b.value}`) || null;
1181
+ var n;
1182
+ return p.value, l.value || D.value && ((n = D.value) == null ? void 0 : n.collectionName) && (U.value ? `draftBatches/${U.value}/${D.value.collectionName}/${b.value}` : `${D.value.collectionName}/${b.value}`) || null;
1185
1183
  }
1186
1184
  ), x = () => {
1187
1185
  if (T.value) {
1188
- let o = !1;
1189
- return D.value && k.value && (t.value = oe.getStore(k.value), t.value ? o = !1 : K.value && (A.value = !1, t.value = xe(k.value, K.value)(), o = !0)), o;
1186
+ let n = !1;
1187
+ return D.value && k.value && (t.value = ne.getStore(k.value), t.value ? n = !1 : K.value && (A.value = !1, t.value = xe(k.value, K.value)(), n = !0)), n;
1190
1188
  } else
1191
1189
  return !1;
1192
1190
  }, M = () => {
1193
1191
  k.value && l.value == k.value ? (t.value = void 0, x()) : (t.value = void 0, p.value = p.value + 1, x());
1194
1192
  };
1195
- return C(E, (o, h) => {
1196
- a.isEqual(o, h) || M();
1197
- }), C(T, (o, h) => {
1198
- o != h && (o ? x() : t.value = void 0);
1199
- }), C(D, (o, h) => {
1200
- o && !h ? x() : !o && h || a.isEqual(o, h) || M();
1201
- }), C(K, (o, h) => {
1202
- a.isEqual(o, h) || M();
1193
+ return C(U, (n, h) => {
1194
+ a.isEqual(n, h) || M();
1195
+ }), C(T, (n, h) => {
1196
+ n != h && (n ? x() : t.value = void 0);
1197
+ }), C(D, (n, h) => {
1198
+ n && !h ? x() : !n && h || a.isEqual(n, h) || M();
1199
+ }), C(K, (n, h) => {
1200
+ a.isEqual(n, h) || M();
1203
1201
  }), C(q, () => {
1204
1202
  q.value || (A.value = !1);
1205
- }), C(k, () => x()), C(J, (o, h) => {
1206
- a.isEqual(o, h) || M();
1203
+ }), C(k, () => x()), C(J, (n, h) => {
1204
+ a.isEqual(n, h) || M();
1207
1205
  }), x(), {
1208
1206
  // Configuration
1209
1207
  resourceClientId: k,
1210
- draftBatchId: E,
1208
+ draftBatchId: U,
1211
1209
  enabled: T,
1212
1210
  resourceType: D,
1213
1211
  // Status
1214
1212
  status: z,
1215
1213
  // Resources loaded from the REST API
1216
- resource: S(() => z.value != "Uninitialized" ? (g((o) => o.ensureResourceLoaded()), m("resource", [])) : []),
1214
+ resource: S(() => z.value != "Uninitialized" ? (g((n) => n.ensureResourceLoaded()), m("resource", [])) : []),
1217
1215
  resourceId: S(() => m("resourceId", null)),
1218
1216
  resourceUrl: S(() => m("resourceUrl", null)),
1219
1217
  // Methods: Configuration
1220
- reconfigureClient: U,
1218
+ reconfigureClient: E,
1221
1219
  setEnabled: L,
1222
- setResourceId: async (o) => await g(async (h) => {
1223
- console.log(h), console.log(h.setResourceId), console.log(o), await h.setResourceId(o);
1224
- }),
1225
- setResourceUrl: async (o) => await g(async (h) => await h.setResourceUrl(o)),
1220
+ setResourceId: async (n) => await g(async (h) => await h.setResourceId(n)),
1221
+ setResourceUrl: async (n) => await g(async (h) => await h.setResourceUrl(n)),
1226
1222
  // Methods: Status
1227
1223
  ensureStore: x,
1228
1224
  // Methods: Resource management
1229
- clear: () => B((o) => o.clear()),
1230
- ensureResourceLoaded: async () => await g(async (o) => o.ensureResourceLoaded()),
1231
- loadResource: async () => await g(async (o) => await o.loadResource()),
1225
+ clear: () => B((n) => n.clear()),
1226
+ ensureResourceLoaded: async () => await g(async (n) => n.ensureResourceLoaded()),
1227
+ loadResource: async () => await g(async (n) => await n.loadResource()),
1232
1228
  // Methods: Recording changes to the resource
1233
- checkForDeletedResource: async () => await g(async (o) => await o.checkForDeletedResource()) == !0,
1234
- recordDeletion: () => g((o) => o.recordDeletion()),
1235
- recordInsertion: (o) => g((h) => h.recordInsertion(o)),
1236
- recordUpdate: (o) => g((h) => h.recordUpdate(o)),
1237
- refreshResource: async () => await g(async (o) => await o.refreshResource()),
1229
+ checkForDeletedResource: async () => await g(async (n) => await n.checkForDeletedResource()) == !0,
1230
+ recordDeletion: () => g((n) => n.recordDeletion()),
1231
+ recordInsertion: (n) => g((h) => h.recordInsertion(n)),
1232
+ recordUpdate: (n) => g((h) => h.recordUpdate(n)),
1233
+ refreshResource: async () => await g(async (n) => await n.refreshResource()),
1238
1234
  // Methods: Modifying the resource
1239
- deleteResource: async () => await g(async (o) => await o.deleteResource()),
1240
- saveResource: async (o) => await g(async (h) => await h.saveResource(o)),
1235
+ deleteResource: async () => await g(async (n) => await n.deleteResource()),
1236
+ saveResource: async (n) => await g(async (h) => await h.saveResource(n)),
1241
1237
  // Methods: Custom API endpoints
1242
- makeCustomApiRequest: async (o) => await g(
1243
- async (h) => await h.makeCustomApiRequest(o)
1238
+ makeCustomApiRequest: async (n) => await g(
1239
+ async (h) => await h.makeCustomApiRequest(n)
1244
1240
  )
1245
1241
  };
1246
1242
  }, ee = {
@@ -1 +1 @@
1
- (function(v,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("lodash"),require("uuid"),require("vue"),require("axios"),require("jsog"),require("json-stringify-deterministic"),require("pinia")):typeof define=="function"&&define.amd?define(["exports","lodash","uuid","vue","axios","jsog","json-stringify-deterministic","pinia"],r):(v=typeof globalThis<"u"?globalThis:v||self,r(v["rest-client-vue"]={},v._,v.uuid,v.Vue,v.axios,v.jsog,v.stringify,v.pinia))})(this,function(v,r,w,o,$,ne,J,oe){"use strict";var Pe=Object.defineProperty;var Fe=(v,r,w)=>r in v?Pe(v,r,{enumerable:!0,configurable:!0,writable:!0,value:w}):v[r]=w;var le=(v,r,w)=>(Fe(v,typeof r!="symbol"?r+"":r,w),w),Ne=(v,r,w)=>{if(!r.has(v))throw TypeError("Cannot "+w)};var j=(v,r,w)=>(Ne(v,r,"read from private field"),w?w.call(v):r.get(v)),Ie=(v,r,w)=>{if(r.has(v))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(v):r.set(v,w)};var A;const ae={apiBaseUrl:"",useVueLogger:!1};class we extends Error{constructor(C,q=void 0,e=void 0){super(C);le(this,"context");le(this,"innerError");this.context=q,this.innerError=e}}class ce{constructor(){Ie(this,A,{})}clearAllStores(){for(const n in j(this,A))j(this,A)[n].clear()}destroyStore(n){j(this,A)[n]&&(j(this,A)[n].$dispose(),delete j(this,A)[n])}getStore(n){return j(this,A)[n]}registerStore(n,C){j(this,A)[n]=C}}A=new WeakMap;function g(y,n){return r.get(y,(n==null?void 0:n.idProperty)||"_id")}function De(y,n){var C;return y&&((C=n.filter)!=null&&C.resourceIds)&&!n.order?n.filter.resourceIds.map(q=>y.find(e=>g(e,n)==q)).filter(q=>q!=null):y}const ue={detail:{allowMultiple:!0,autoEdit:!1,autoFromMultipleSelection:!0,autoFromSingleInsertion:!0,autoFromSingleSelection:!0,constrainToSelection:!0},filter:{namedFilter:null,query:null,resourceIds:null},idProperty:"_id",limit:5e3,limitTransientDataToLocalCollection:!0,loading:{firstPageSize:500,pageSize:5e3},order:[[{path:"history.creation.timestamp"},"desc"],[{path:"history.creation.orderInBatch"},"desc"]]},K={resources:[],status:"NotLoaded",selection:[],detailSelection:[],invalidResources:[],transientData:{}},te={editingDetailSelection:!1,batchSaveAttempted:!1,editors:[],listNavigators:{}},Ee=(y,n)=>{n=r.merge({},ue,n);const C=oe.defineStore(y,{state:()=>({idProperty:n.idProperty,filter:n.filter,order:n.order||null,referencePathsToExpand:n.referencePathsToExpand||null,...K,...te}),getters:{fixedQueryParams:e=>{var l,d,u,h;const s={};(l=e.filter)!=null&&l.namedFilter&&(s.namedFilter=e.filter.namedFilter);const t=[];if((d=e.filter)!=null&&d.resourceIds&&t.push({l:{path:e.idProperty},r:{constant:e.filter.resourceIds},operator:"in"}),(u=e.filter)!=null&&u.query&&t.push((h=e.filter)==null?void 0:h.query),t.length>0){const p=t.length==1?t[0]:{and:t};s.q=J(p)}return e.order&&(s.o=J(e.order)),e.referencePathsToExpand&&(s.r=J(e.referencePathsToExpand)),s}},actions:{reset(){for(const e in K)this[e]=K[e];for(const e in te)this[e]=te[e]},resetRetainingTransientData(){if(n.limitTransientDataToLocalCollection)this.reset();else{const e=this.transientData;this.reset(),this.transientData=e}},setEditingDetailSelection(e){this.editingDetailSelection=e},setFilter(e){r.isEqual(e,this.filter)||(this.filter=e,this.status="NotLoaded",this.resources=[],this.selection=[],this.detailSelection=[],this.invalidResources=[],this.editingDetailSelection=!1)},async setQuery(e){var s,t;if(!r.isEqual(e,(s=this.filter)==null?void 0:s.query)&&(e!=null||((t=this.filter)==null?void 0:t.query)!=null)){const l=r.cloneDeep(this.filter)||{};e!==null?l.query=e:r.unset(l,"query");const d=this.status;this.setFilter(l),d!="NotLoaded"&&await this.loadResources()}},async setFilterResourceIds(e){if(!r.isEqual(e,r.get(this.filter,"resourceIds"))){const s=r.cloneDeep(this.filter)||{};e!=null?s.resourceIds=e:r.unset(s,"resourceIds");const t=this.status;this.setFilter(s),t!="NotLoaded"&&await this.loadResources()}},setBatchSaveAttempted(e){e!=this.batchSaveAttempted&&(this.batchSaveAttempted=e)},clear(){for(const e in K)this[e]=K[e]},clearRetainingTransientData(){if(n.limitTransientDataToLocalCollection)this.reset();else{const e=this.transientData;this.reset(),this.transientData=e}},async ensureCollectionLoaded(){["Loaded","Loading","LoadingMore","Failed"].includes(this.status)||await this.loadResources()},async loadResources(e={}){this.resetRetainingTransientData();const s=w.v4();this._loadId=s,await this._loadResources(0,s,e)},async _loadResources(e,s,t){var b,F,O,k,Q;const l=e==0;if(this.status=l?"Loading":"LoadingMore",this._loadOffset=e,((b=this.filter)==null?void 0:b.query)===!1){this.resources=[];return}const d=this.fixedQueryParams,u=r.cloneDeep(d),h=l?(F=this.filter)!=null&&F.resourceIds&&!this.order?null:t.firstPageSize||((O=n.loading)==null?void 0:O.firstPageSize)||t.pageSize||((k=n.loading)==null?void 0:k.pageSize)||null:t.pageSize||((Q=n.loading)==null?void 0:Q.pageSize)||null,p=h!=null||n.limit!=null?r.min(r.filter([h,n.limit],R=>R!=null)):void 0;p!=null?(u.offset=e,u.limit=p):e!=0&&(u.offset=e);const D=r.map(u,(R,m)=>R!=null?`${encodeURIComponent(m)}=${encodeURIComponent(R)}`:null).filter(R=>R!=null).join("&"),T=r.isEmpty(D)?n.restCollectionUrl:`${n.restCollectionUrl}?${D}`;try{const R=await $.get(T),m=this.fixedQueryParams;if(s!=this._loadId||e!=this._loadOffset||!r.isEqual(d,m))console.log(`Discarding resources fetched by obsolete query from ${n.restCollectionUrl}.`);else{const E=ne.decode(r.get(R,"data.data",[])),L=(l?0:this.resources.length)+E.length,I=p==null||E.length<p||n.limit&&L>=n.limit;console.log(`Loaded ${E.length}${l?"":" more"} resources from ${n.restCollectionUrl}`),l&&(this.resources=[]);const H=[...this.resources,...E.map(Z=>Object.freeze(Z))];this.resources=De(H,this),this.status=I?"Loaded":"LoadingMore",I||this._loadResources(this.resources.length,s,t)}}catch(R){console.log(`Error while loading resources (URL="${T}"):`,R),this.clearRetainingTransientData(),this.status="Failed"}},async checkForDeletedResource(e){let s;try{s=await $.get(`${n.restCollectionUrl}/${e}`)}catch(t){$.isAxiosError(t)&&(s=t.response)}return s&&s.status==404?(this.recordDeletion(e),!0):!1},recordDeletion(e){var s;if(["Loaded","LoadingMore"].includes(this.status)){let t=this.resources.findIndex(l=>g(l,this)==e);t>=0&&this.resources.splice(t,1),t=this.selection.findIndex(l=>g(l,this)==e),t>=0&&this.selection.splice(t,1),t=this.detailSelection.findIndex(l=>g(l,this)==e),t>=0&&(this.detailSelection.splice(t,1),this.detailSelection.length==0&&(this.editingDetailSelection=((s=n.detail)==null?void 0:s.autoEdit)||!1)),n.limitTransientDataToLocalCollection&&delete this.transientData[e]}},recordInsertion(e,{insertAtBeginning:s,transientData:t}={}){var l;if(["Loaded","LoadingMore"].includes(this.status)){const d=Object.freeze(e);s?this.resources.unshift(d):this.resources.push(d),(l=n.detail)!=null&&l.autoFromSingleInsertion&&(this.detailSelection.length==0||this.detailSelection.length==1&&g(this.detailSelection[0],this)==null)&&(this.detailSelection=[d],this.editingDetailSelection=n.detail.autoEdit);const u=g(e,this);u&&(t===void 0?delete this.transientData[u]:this.transientData[u]=t)}},recordUpdate(e){const s=g(e,this);if(s&&["Loaded","LoadingMore"].includes(this.status)){const t=Object.freeze(e);let l=this.resources.findIndex(d=>g(d,this)==s);l>=0&&(this.resources[l]=t),l=this.selection.findIndex(d=>g(d,this)==s),l>=0&&(this.selection[l]=t),l=this.detailSelection.findIndex(d=>g(d,this)==s),l>=0&&(this.detailSelection[l]=t)}},async refreshResource(e){if(e){const s={};this.referencePathsToExpand&&(s.r=J(this.referencePathsToExpand));const t=r.map(s,(u,h)=>u!=null?`${encodeURIComponent(h)}=${encodeURIComponent(u)}`:null).filter(u=>u!=null).join("&"),l=r.isEmpty(t)?`${n.restCollectionUrl}/${e}`:`${n.restCollectionUrl}/${e}?${t}`,d=await $.get(l);if(d.status==200){const u=d.data;return this.recordUpdate(u),u}}return null},addResource(e={}){this.detailSelection=[r.omit(r.merge({},e),this.idProperty)],this.editingDetailSelection=!0},async deleteResource(e){if((await $.delete(`${n.restCollectionUrl}/${e}`)).status==200&&["Loaded","LoadingMore"].includes(this.status)){let t=this.resources.findIndex(l=>g(l,this)==e);t>=0&&this.resources.splice(t,1),t=this.selection.findIndex(l=>g(l,this)==e),t>=0&&this.selection.splice(t,1),t=this.detailSelection.findIndex(l=>g(l,this)==e),t>=0&&(this.detailSelection.splice(t,1),this.detailSelection.length==0&&(this.editingDetailSelection=n.detail.autoEdit)),n.limitTransientDataToLocalCollection&&delete this.transientData[e]}},async saveResource(e){const s=g(e,this),t=s==null,l=await $({method:t?"post":"put",url:t?n.restCollectionUrl:`${n.restCollectionUrl}/${s}`,data:e});if(l.status==200){const d=l.data,u=g(d,this),h=u?await this.refreshResource(u):null;return t&&this.recordInsertion(h||Object.freeze(d)),h||d}return null},async saveResources(e){const s=await $({method:"put",url:n.restCollectionUrl,data:e});if(s.status==200){const t=s.data||[],l=[];for(const[d,u]of t.entries()){const h=g(e[d],this)==null,p=g(u,this),D=p?await this.refreshResource(p):null;h&&this.recordInsertion(D||u),l.push(D||Object.freeze(u))}return l}return[]},clearTransientData(){this.transientData={}},setInvalidResourceIds(e){r.isEqual(e,this.invalidResources.map(s=>g(s,this)))||(this.invalidResources=e.map(s=>this.resources.find(t=>g(t,this)==s)).filter(s=>s!=null))},setTransientDataForResources(e){const{transientData:s,merge:t=!0}=e;t?r.merge(this.transientData,s):r.assign(this.transientData,s)},clearSelection(){this.setSelection([])},deselectResources(e){const s=this.selection.map(t=>g(t,this)).filter(t=>t!=null&&!e.includes(t));this.setSelection(s)},selectResources(e,s){const{addToSelection:t,edit:l}=s||{},d=this.selection.map(h=>g(h,this));let u=e;if(t){const h=r.difference(e,d);h.length>0&&(u=d.concat(h).filter(p=>p!=null))}r.isEqual(d,u)||this.setSelection(u,l)},setSelection(e,s){if(!r.isEqual(e,this.selection.map(t=>g(t,this)))){let t=!0;if(this.editors.length>0){if(n.detail.autoFromSingleSelection&&this.selection.length==1)t=!1;else if(n.detail.autoFromMultipleSelection&&n.detail.allowMultiple&&this.selection.length>1)t=!1;else if(n.detail.constrainToSelection){const l=this.selection.map(h=>g(h,this)),u=this.detailSelection.map(h=>g(h,this)).filter(h=>l.includes(h));this.detailSelection.filter(h=>!u.includes(g(h,this))).length>0&&(t=!1)}}if(!t)return;if(this.selection=e.map(l=>this.resources.find(d=>g(d,this)==l)).filter(l=>l!=null),n.detail.autoFromSingleSelection&&this.selection.length==1){const l=this.selection[0];(this.detailSelection.length!=1||g(this.detailSelection[0],this)!=g(l,this))&&(this.detailSelection=[l])}else if(n.detail.autoFromMultipleSelection&&n.detail.allowMultiple&&this.selection.length>1)r.isEqual(this.selection.map(l=>g(l,this)),this.detailSelection.map(l=>g(l,this)))||(this.detailSelection=r.clone(this.selection));else if(n.detail.constrainToSelection){const l=this.selection.map(h=>g(h,this)),d=this.detailSelection.map(h=>g(h,this)),u=d.filter(h=>l.includes(h));r.isEqual(u,d)||(this.detailSelection=this.detailSelection.filter(h=>u.includes(g(h,this))))}this.detailSelection.length==0?this.editingDetailSelection=!1:this.editingDetailSelection=s!==void 0?s:this.editingDetailSelection||n.detail.autoEdit}},hideDetail(){this.detailSelection.length>0&&(this.detailSelection=[],this.editingDetailSelection=!1)},showSelectionAsDetail(e){if(this.selection.length<=1||n.detail.allowMultiple){const s=this.selection.map(l=>g(l,this)),t=this.detailSelection.map(l=>g(l,this));r.isEqual(s,t)||(this.detailSelection=r.clone(this.selection)),this.detailSelection.length==0?this.editingDetailSelection=!1:this.editingDetailSelection=e!==void 0?e:this.editingDetailSelection||n.detail.autoEdit}},deregisterEditor(e){r.remove(this.editors,s=>s==e)},registerEditor(e){this.editors.includes(e)||this.editors.push(e)},deregisterListNavigator({name:e,listNavigator:s}){(s==null||this.listNavigators[e]==s)&&delete this.listNavigators[e]},registerListNavigator({name:e,listNavigator:s}){this.listNavigators[e]!=s&&(this.listNavigators[e]=s)}}});return(()=>{const e=(s,t)=>{const l=C(s,t);return ee.registerStore(l.$id,l),l};return e.$id=C.$id,e})()},ee=new ce,Ue=(y={})=>{var he,fe,ge,ve;console.log("hereaaaaaaa"),console.log(y);const{collectionId:n,draftBatchId:C,enabled:q,resourceType:e,options:s}=y,t=o.ref(void 0),l=o.ref(n),d=o.ref(C),u=o.ref(q??!0),h=o.ref([o.toRef(e)]),p=o.ref(s),D=o.computed(()=>d.value),T=o.ref(u.value),b=o.ref(w.v4()),F=o.ref((fe=(he=p.value)==null?void 0:he.filter)==null?void 0:fe.resourceIds),O=o.ref((ve=(ge=p.value)==null?void 0:ge.filter)==null?void 0:ve.query),k=o.computed(()=>d.value==null&&l.value!=null&&ee.getStore(l.value)!=null),Q=o.ref(k.value),R=o.computed(()=>L("status","Uninitialized"));function m(i){if(t.value)return i(t.value)}async function E(i){if(t.value)return await i(t.value)}function L(i,c){if(t.value)return t.value[i];if(c!==void 0)return c;throw"Attempted to use a REST collection store that has not been created, with no default value."}const I=(i={})=>{var me,pe,Se,ye;const{collectionId:c,draftBatchId:U,enabled:z,resourceType:re,options:Re}=i;l.value=c,d.value=U,u.value=z??!0,h.value=[o.toRef(re)],Re!=null&&(p.value=Re,F.value=(pe=(me=p.value)==null?void 0:me.filter)==null?void 0:pe.resourceIds,O.value=(ye=(Se=p.value)==null?void 0:Se.filter)==null?void 0:ye.query),b.value=w.v4(),H(u.value)},H=async i=>{i!=T.value&&(T.value=i,i&&(_(),x()))},Z=async i=>{F.value=i,await E(async c=>await c.setFilterResourceIds(F.value||null))},V=async i=>{if(O.value=i,R.value!="Uninitialized"){const c=i,U=o.computed(()=>r.isFunction(c)?S.value?c(S.value):null:c);await E(z=>z.setQuery(U.value||null))}},_=()=>{p.value=r.merge({},p.value||{},{filter:{resourceIds:F.value,query:O.value}})},S=o.computed(()=>h.value[0].value||void 0),B=function(i){const c=r.get(i,"filter.query"),U=r.get(i,"referencePathsToExpand"),z=r.isFunction(c)?c(S.value):c,re=S.value?r.isFunction(U)?U(S.value):U||[]:[];return{...r.cloneDeep(i||{}),filter:{...r.cloneDeep((i==null?void 0:i.filter)||{}),query:z},referencePathsToExpand:re}},P=o.computed(()=>B(p.value)),M=o.computed(()=>{if(!S.value)return null;if(P.value.restCollectionUrl!==void 0)return P.value.restCollectionUrl;if(!Q.value)return!S.value||!S.value.collectionName?null:D.value?`${G.config.apiBaseUrl}/draft-batches/${D.value}/${S.value.collectionName}`:`${G.config.apiBaseUrl}/${S.value.collectionName}`}),a=o.computed(()=>{var i;if(S.value)return r.mergeWith(r.cloneDeep(ue),P.value,{idProperty:(i=S.value)==null?void 0:i.idProperty,restCollectionUrl:M.value||""},(c,U)=>{if(r.isArray(U)&&U.length==0&&(c==null||r.isArray(c)))return U})}),f=o.ref(0),N=o.computed(()=>{var i;return f.value,l.value||S.value&&((i=S.value)==null?void 0:i.collectionName)&&(D.value?`draftBatches/${D.value}/${S.value.collectionName}/${b.value}`:`${S.value.collectionName}/${b.value}`)||null}),x=()=>{if(T.value){let i=!1;return S.value&&N.value&&(t.value=ee.getStore(N.value),t.value?i=!1:a.value&&(Q.value=!1,t.value=Ee(N.value,a.value)(),i=!0)),i}else return!1},X=()=>{N.value&&l.value==N.value?(t.value=void 0,x()):(t.value=void 0,f.value=f.value+1,x())};o.watch(D,(i,c)=>{r.isEqual(i,c)||X()}),o.watch(T,(i,c)=>{i!=c&&(i?x():t.value=void 0)}),o.watch(S,(i,c)=>{i&&!c?x():!i&&c||r.isEqual(i,c)||X()}),o.watch(a,(i,c)=>{r.isEqual(i,c)||X()}),o.watch(k,()=>{k.value||(Q.value=!1)}),o.watch(N,()=>x()),o.watch(M,(i,c)=>{r.isEqual(i,c)||X()});const W=[],qe=function(i){R.value!="Uninitialized"?o.nextTick(i):W.push(i)};return o.watch(R,(i,c)=>{if(i!="Uninitialized"&&c=="Uninitialized"){const U=r.clone(W);W.splice(0,W.length);for(const z of U)z()}}),x(),{collectionId:N,draftBatchId:D,resourceType:S,enabled:T,status:R,batchSaveAttempted:o.computed(()=>L("batchSaveAttempted",!1)),listNavigators:o.computed(()=>L("listNavigators",!1)),invalidResources:o.computed(()=>L("invalidResources",[])),resources:o.computed(()=>R.value!="Uninitialized"?(E(i=>i.ensureCollectionLoaded()),L("resources",[])):[]),transientData:o.computed(()=>L("transientData",[])),detailSelection:o.computed(()=>L("detailSelection",[])),editingDetailSelection:o.computed(()=>L("editingDetailSelection",!1)),selection:o.computed(()=>L("selection",[])),reconfigureCollection:I,setEditingDetailSelection:i=>m(c=>c.setEditingDetailSelection(i)),setEnabled:H,setFilterResourceIds:Z,setQuery:V,ensureStore:x,setBatchSaveAttempted:i=>m(c=>c.setBatchSaveAttempted(i)),clear:()=>m(i=>i.clear()),ensureCollectionLoaded:async()=>await E(async i=>i.ensureCollectionLoaded()),loadResources:async()=>await E(async i=>await i.loadResources()),addResource:i=>m(c=>c.addResource(i)),checkForDeletedResource:async i=>await E(async c=>await c.checkForDeletedResource(i))==!0,recordDeletion:i=>m(c=>c.recordDeletion(i)),recordInsertion:(i,{insertAtBeginning:c=!1,transientData:U=void 0}={})=>m(z=>z.recordInsertion(i,{insertAtBeginning:c,transientData:U})),recordUpdate:i=>m(c=>c.recordUpdate(i)),refreshResource:async i=>await E(async c=>await c.refreshResource(i)),deleteResource:async i=>await E(async c=>await c.deleteResource(i)),saveResource:async i=>await E(async c=>await c.saveResource(i)),saveResources:async i=>await E(async c=>await c.saveResources(i)),clearTransientData:()=>m(i=>i.clearTransientData()),setInvalidResourceIds:i=>m(c=>c.setInvalidResourceIds(i)),setTransientDataForResources:i=>m(c=>c.setTransientDataForResources(i)),clearSelection:()=>m(i=>i.clearSelection()),deselectResources:i=>m(c=>c.deselectResources(i)),selectResources:(i,c)=>m(U=>U.selectResources(i,c)),hideDetail:()=>m(i=>i.hideDetail()),deregisterEditor:i=>m(c=>c.deregisterEditor(i)),registerEditor:i=>m(c=>c.registerEditor(i)),deregisterListNavigator:i=>m(c=>c.deregisterListNavigator(i)),registerListNavigator:i=>m(c=>c.registerListNavigator(i)),onItemsStoreReady:qe}},Ce=()=>{ee.clearAllStores()};function ie(y,n){return r.get(y,(n==null?void 0:n.idProperty)||"_id")}const de={idProperty:"_id"},Y={resource:null,status:"NotLoaded"},Te=(y,n)=>{n=r.merge({},de,n),console.log(y),console.log(n);const C=oe.defineStore(y,{state:()=>({idProperty:n.idProperty,resourceId:n.resourceId||null,resourceUrl:n.resourceUrl||null,referencePathsToExpand:n.referencePathsToExpand||null,...Y}),getters:{currentResourceUrl:e=>(console.log(e),console.log(n),e.resourceUrl||(n.restCollectionUrl&&e.resourceId?`${n.restCollectionUrl}/${e.resourceId}`:null)||n.restCollectionUrl||null),fixedQueryParams:e=>{const s={};return e.referencePathsToExpand&&(s.r=J(e.referencePathsToExpand)),s}},actions:{reset(){for(const e in Y)this[e]=Y[e]},async setResourceId(e){const s=this.currentResourceUrl;this.resourceId=e,console.log(e),!r.isEqual(this.currentResourceUrl,s)&&this.status!="NotLoaded"&&(console.log("here"),await this.loadResource())},async setResourceUrl(e){const s=this.currentResourceUrl;this.resourceUrl=e,!r.isEqual(this.currentResourceUrl,s)&&this.status!="NotLoaded"&&await this.loadResource()},clear(){for(const e in Y)this[e]=Y[e]},async ensureResourceLoaded(){["Loaded","Loading","Failed"].includes(this.status)||await this.loadResource()},async loadResource(){this.reset();const e=w.v4();if(this._loadId=e,this.currentResourceUrl){this.status="Loading";const s=this.fixedQueryParams,t=r.cloneDeep(s),l=r.map(t,(u,h)=>u!=null?`${encodeURIComponent(h)}=${encodeURIComponent(u)}`:null).filter(u=>u!=null).join("&"),d=r.isEmpty(l)?this.currentResourceUrl:`${this.currentResourceUrl}?${l}`;try{const u=await $.get(d),h=this.fixedQueryParams;e!=this._loadId||!r.isEqual(s,h)?console.log(`Discarding resource fetched by obsolete query from ${d}.`):(this.resource=ne.decode(r.get(u,"data",{})),this.status="Loaded")}catch(u){console.log(`Error while loading resource (URL="${d}")`,u),this.reset(),this.status="Failed"}}else throw"Cannot load a resource because its URL, or its ID and collection URL, are unknown."},async checkForDeletedResource(){if(this.currentResourceUrl){let e;try{e=await $.get(this.currentResourceUrl)}catch(s){$.isAxiosError(s)&&(e=s.response)}return e&&e.status==404?(this.recordDeletion(),!0):!1}else throw"Cannot check for a deleted resource because its URL, or its ID and collection URL, are unknown."},recordDeletion(){this.resource=null,this.status="Loaded"},recordInsertion(e){this.resourceId=ie(e,this)||null,this.status=="Loaded"&&(this.resource=Object.freeze(e))},recordUpdate(e){this.resourceId=ie(e,this)||null,this.status=="Loaded"&&(this.resource=Object.freeze(e))},async refreshResource(){return await this.loadResource(),this.resource},async deleteResource(){if(this.currentResourceUrl)(await $.delete(this.currentResourceUrl)).status==200&&this.recordDeletion();else throw"Cannot delete a resource because its URL, or its ID and collection URL, are unknown."},async saveResource(e){const s=ie(e,this),t=s==null;if(!s)throw"The REST resource store cannot create new resources on the server.";if(!this.currentResourceUrl)throw"Cannot save a resource because its URL, or its ID and collection URL, are unknown.";const l=await $({method:t?"post":"put",url:this.currentResourceUrl,data:e});if(l.status==200){const d=l.data,u=await this.refreshResource();return t&&this.recordInsertion(u||d),u||Object.freeze(d)}return null},async makeCustomApiRequest(e){const{method:s,subpath:t,url:l,data:d}=e;let u=l;if(!u)if(this.currentResourceUrl)u=`${this.currentResourceUrl}/${t}`;else throw"Cannot make a custom API request for a resource because its URL, or its ID and collection URL, are unknown.";const h=await $({method:s||"get",url:u,data:d});return h.status>=200&&h.status<300?h.data:null}}});return(()=>{const e=(s,t)=>{const l=C(s,t);return se.registerStore(l.$id,l),l};return e.$id=C.$id,e})()},se=new ce,Le=(y={})=>{console.log("HERE!!!!"),console.log(y);const{resourceClientId:n,draftBatchId:C,enabled:q,resourceType:e,options:s}=y,t=o.ref(void 0),l=o.ref(n),d=o.ref(C),u=o.ref(q??!0),h=o.ref([o.toRef(e)]),p=o.ref(s),D=o.computed(()=>d.value),T=o.ref(u.value),b=o.ref(w.v4()),F=o.computed(()=>d.value==null&&l.value!=null&&se.getStore(l.value)!=null),O=o.ref(F.value),k=o.computed(()=>m("status","Uninitialized"));function Q(a){if(t.value)return a(t.value)}async function R(a){if(console.log("dispatchAsync"),console.log("STORE:"),console.log(t.value),t.value)return await a(t.value)}function m(a,f){if(t.value)return t.value[a];if(f!==void 0)return f;throw"Attempted to use a REST resource store that has not been created, with no default value."}const E=(a={})=>{const{resourceClientId:f,draftBatchId:N,enabled:x,resourceType:X,options:W}=a;l.value=f,d.value=N,u.value=x??!0,h.value=[o.toRef(X)],W!=null&&(p.value=W),b.value=w.v4(),L(u.value)},L=async a=>{a!=T.value&&(T.value=a,a&&P())},I=o.computed(()=>h.value[0].value||void 0),H=function(a){const f=r.get(a,"referencePathsToExpand"),N=I.value?r.isFunction(f)?f(I.value):f||[]:[];return{...r.cloneDeep(a||{}),referencePathsToExpand:N}},Z=o.computed(()=>H(p.value)),V=o.computed(()=>{if(!I.value)return null;if(!O.value)return!I.value||!I.value.collectionName?null:D.value?`${G.config.apiBaseUrl}/draft-batches/${D.value}/${I.value.collectionName}`:`${G.config.apiBaseUrl}/${I.value.collectionName}`}),_=o.computed(()=>{if(I.value&&V.value)return r.mergeWith(r.cloneDeep(de),Z.value,{idProperty:I.value.idProperty,restCollectionUrl:V.value},(a,f)=>{if(r.isArray(f)&&f.length==0&&(a==null||r.isArray(a)))return f})}),S=o.ref(0),B=o.computed(()=>{var a;return S.value,l.value||I.value&&((a=I.value)==null?void 0:a.collectionName)&&(D.value?`draftBatches/${D.value}/${I.value.collectionName}/${b.value}`:`${I.value.collectionName}/${b.value}`)||null}),P=()=>{if(T.value){let a=!1;return I.value&&B.value&&(t.value=se.getStore(B.value),t.value?a=!1:_.value&&(O.value=!1,t.value=Te(B.value,_.value)(),a=!0)),a}else return!1},M=()=>{B.value&&l.value==B.value?(t.value=void 0,P()):(t.value=void 0,S.value=S.value+1,P())};return o.watch(D,(a,f)=>{r.isEqual(a,f)||M()}),o.watch(T,(a,f)=>{a!=f&&(a?P():t.value=void 0)}),o.watch(I,(a,f)=>{a&&!f?P():!a&&f||r.isEqual(a,f)||M()}),o.watch(_,(a,f)=>{r.isEqual(a,f)||M()}),o.watch(F,()=>{F.value||(O.value=!1)}),o.watch(B,()=>P()),o.watch(V,(a,f)=>{r.isEqual(a,f)||M()}),P(),{resourceClientId:B,draftBatchId:D,enabled:T,resourceType:I,status:k,resource:o.computed(()=>k.value!="Uninitialized"?(R(a=>a.ensureResourceLoaded()),m("resource",[])):[]),resourceId:o.computed(()=>m("resourceId",null)),resourceUrl:o.computed(()=>m("resourceUrl",null)),reconfigureClient:E,setEnabled:L,setResourceId:async a=>await R(async f=>{console.log(f),console.log(f.setResourceId),console.log(a),await f.setResourceId(a)}),setResourceUrl:async a=>await R(async f=>await f.setResourceUrl(a)),ensureStore:P,clear:()=>Q(a=>a.clear()),ensureResourceLoaded:async()=>await R(async a=>a.ensureResourceLoaded()),loadResource:async()=>await R(async a=>await a.loadResource()),checkForDeletedResource:async()=>await R(async a=>await a.checkForDeletedResource())==!0,recordDeletion:()=>R(a=>a.recordDeletion()),recordInsertion:a=>R(f=>f.recordInsertion(a)),recordUpdate:a=>R(f=>f.recordUpdate(a)),refreshResource:async()=>await R(async a=>await a.refreshResource()),deleteResource:async()=>await R(async a=>await a.deleteResource()),saveResource:async a=>await R(async f=>await f.saveResource(a)),makeCustomApiRequest:async a=>await R(async f=>await f.makeCustomApiRequest(a))}},G={config:{...ae}};function $e(y){G.config=r.merge({},ae,y)}v.ApiClientError=we,v.clearAllRestCollections=Ce,v.initRestClient=$e,v.restClient=G,v.useRestCollection=Ue,v.useRestResource=Le,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
1
+ (function(v,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("lodash"),require("uuid"),require("vue"),require("axios"),require("jsog"),require("json-stringify-deterministic"),require("pinia")):typeof define=="function"&&define.amd?define(["exports","lodash","uuid","vue","axios","jsog","json-stringify-deterministic","pinia"],r):(v=typeof globalThis<"u"?globalThis:v||self,r(v["rest-client-vue"]={},v._,v.uuid,v.Vue,v.axios,v.jsog,v.stringify,v.pinia))})(this,function(v,r,I,a,$,ne,J,ae){"use strict";var Pe=Object.defineProperty;var Fe=(v,r,I)=>r in v?Pe(v,r,{enumerable:!0,configurable:!0,writable:!0,value:I}):v[r]=I;var le=(v,r,I)=>(Fe(v,typeof r!="symbol"?r+"":r,I),I),Ne=(v,r,I)=>{if(!r.has(v))throw TypeError("Cannot "+I)};var j=(v,r,I)=>(Ne(v,r,"read from private field"),I?I.call(v):r.get(v)),Ie=(v,r,I)=>{if(r.has(v))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(v):r.set(v,I)};var A;const oe={apiBaseUrl:"",useVueLogger:!1};class we extends Error{constructor(C,q=void 0,e=void 0){super(C);le(this,"context");le(this,"innerError");this.context=q,this.innerError=e}}class ce{constructor(){Ie(this,A,{})}clearAllStores(){for(const n in j(this,A))j(this,A)[n].clear()}destroyStore(n){j(this,A)[n]&&(j(this,A)[n].$dispose(),delete j(this,A)[n])}getStore(n){return j(this,A)[n]}registerStore(n,C){j(this,A)[n]=C}}A=new WeakMap;function g(w,n){return r.get(w,(n==null?void 0:n.idProperty)||"_id")}function De(w,n){var C;return w&&((C=n.filter)!=null&&C.resourceIds)&&!n.order?n.filter.resourceIds.map(q=>w.find(e=>g(e,n)==q)).filter(q=>q!=null):w}const ue={detail:{allowMultiple:!0,autoEdit:!1,autoFromMultipleSelection:!0,autoFromSingleInsertion:!0,autoFromSingleSelection:!0,constrainToSelection:!0},filter:{namedFilter:null,query:null,resourceIds:null},idProperty:"_id",limit:5e3,limitTransientDataToLocalCollection:!0,loading:{firstPageSize:500,pageSize:5e3},order:[[{path:"history.creation.timestamp"},"desc"],[{path:"history.creation.orderInBatch"},"desc"]]},K={resources:[],status:"NotLoaded",selection:[],detailSelection:[],invalidResources:[],transientData:{}},te={editingDetailSelection:!1,batchSaveAttempted:!1,editors:[],listNavigators:{}},Ee=(w,n)=>{n=r.merge({},ue,n);const C=ae.defineStore(w,{state:()=>({idProperty:n.idProperty,filter:n.filter,order:n.order||null,referencePathsToExpand:n.referencePathsToExpand||null,...K,...te}),getters:{fixedQueryParams:e=>{var l,d,u,h;const s={};(l=e.filter)!=null&&l.namedFilter&&(s.namedFilter=e.filter.namedFilter);const t=[];if((d=e.filter)!=null&&d.resourceIds&&t.push({l:{path:e.idProperty},r:{constant:e.filter.resourceIds},operator:"in"}),(u=e.filter)!=null&&u.query&&t.push((h=e.filter)==null?void 0:h.query),t.length>0){const p=t.length==1?t[0]:{and:t};s.q=J(p)}return e.order&&(s.o=J(e.order)),e.referencePathsToExpand&&(s.r=J(e.referencePathsToExpand)),s}},actions:{reset(){for(const e in K)this[e]=K[e];for(const e in te)this[e]=te[e]},resetRetainingTransientData(){if(n.limitTransientDataToLocalCollection)this.reset();else{const e=this.transientData;this.reset(),this.transientData=e}},setEditingDetailSelection(e){this.editingDetailSelection=e},setFilter(e){r.isEqual(e,this.filter)||(this.filter=e,this.status="NotLoaded",this.resources=[],this.selection=[],this.detailSelection=[],this.invalidResources=[],this.editingDetailSelection=!1)},async setQuery(e){var s,t;if(!r.isEqual(e,(s=this.filter)==null?void 0:s.query)&&(e!=null||((t=this.filter)==null?void 0:t.query)!=null)){const l=r.cloneDeep(this.filter)||{};e!==null?l.query=e:r.unset(l,"query");const d=this.status;this.setFilter(l),d!="NotLoaded"&&await this.loadResources()}},async setFilterResourceIds(e){if(!r.isEqual(e,r.get(this.filter,"resourceIds"))){const s=r.cloneDeep(this.filter)||{};e!=null?s.resourceIds=e:r.unset(s,"resourceIds");const t=this.status;this.setFilter(s),t!="NotLoaded"&&await this.loadResources()}},setBatchSaveAttempted(e){e!=this.batchSaveAttempted&&(this.batchSaveAttempted=e)},clear(){for(const e in K)this[e]=K[e]},clearRetainingTransientData(){if(n.limitTransientDataToLocalCollection)this.reset();else{const e=this.transientData;this.reset(),this.transientData=e}},async ensureCollectionLoaded(){["Loaded","Loading","LoadingMore","Failed"].includes(this.status)||await this.loadResources()},async loadResources(e={}){this.resetRetainingTransientData();const s=I.v4();this._loadId=s,await this._loadResources(0,s,e)},async _loadResources(e,s,t){var b,F,O,k,Q;const l=e==0;if(this.status=l?"Loading":"LoadingMore",this._loadOffset=e,((b=this.filter)==null?void 0:b.query)===!1){this.resources=[];return}const d=this.fixedQueryParams,u=r.cloneDeep(d),h=l?(F=this.filter)!=null&&F.resourceIds&&!this.order?null:t.firstPageSize||((O=n.loading)==null?void 0:O.firstPageSize)||t.pageSize||((k=n.loading)==null?void 0:k.pageSize)||null:t.pageSize||((Q=n.loading)==null?void 0:Q.pageSize)||null,p=h!=null||n.limit!=null?r.min(r.filter([h,n.limit],R=>R!=null)):void 0;p!=null?(u.offset=e,u.limit=p):e!=0&&(u.offset=e);const D=r.map(u,(R,m)=>R!=null?`${encodeURIComponent(m)}=${encodeURIComponent(R)}`:null).filter(R=>R!=null).join("&"),T=r.isEmpty(D)?n.restCollectionUrl:`${n.restCollectionUrl}?${D}`;try{const R=await $.get(T),m=this.fixedQueryParams;if(s!=this._loadId||e!=this._loadOffset||!r.isEqual(d,m))console.log(`Discarding resources fetched by obsolete query from ${n.restCollectionUrl}.`);else{const E=ne.decode(r.get(R,"data.data",[])),L=(l?0:this.resources.length)+E.length,y=p==null||E.length<p||n.limit&&L>=n.limit;console.log(`Loaded ${E.length}${l?"":" more"} resources from ${n.restCollectionUrl}`),l&&(this.resources=[]);const X=[...this.resources,...E.map(Z=>Object.freeze(Z))];this.resources=De(X,this),this.status=y?"Loaded":"LoadingMore",y||this._loadResources(this.resources.length,s,t)}}catch(R){console.log(`Error while loading resources (URL="${T}"):`,R),this.clearRetainingTransientData(),this.status="Failed"}},async checkForDeletedResource(e){let s;try{s=await $.get(`${n.restCollectionUrl}/${e}`)}catch(t){$.isAxiosError(t)&&(s=t.response)}return s&&s.status==404?(this.recordDeletion(e),!0):!1},recordDeletion(e){var s;if(["Loaded","LoadingMore"].includes(this.status)){let t=this.resources.findIndex(l=>g(l,this)==e);t>=0&&this.resources.splice(t,1),t=this.selection.findIndex(l=>g(l,this)==e),t>=0&&this.selection.splice(t,1),t=this.detailSelection.findIndex(l=>g(l,this)==e),t>=0&&(this.detailSelection.splice(t,1),this.detailSelection.length==0&&(this.editingDetailSelection=((s=n.detail)==null?void 0:s.autoEdit)||!1)),n.limitTransientDataToLocalCollection&&delete this.transientData[e]}},recordInsertion(e,{insertAtBeginning:s,transientData:t}={}){var l;if(["Loaded","LoadingMore"].includes(this.status)){const d=Object.freeze(e);s?this.resources.unshift(d):this.resources.push(d),(l=n.detail)!=null&&l.autoFromSingleInsertion&&(this.detailSelection.length==0||this.detailSelection.length==1&&g(this.detailSelection[0],this)==null)&&(this.detailSelection=[d],this.editingDetailSelection=n.detail.autoEdit);const u=g(e,this);u&&(t===void 0?delete this.transientData[u]:this.transientData[u]=t)}},recordUpdate(e){const s=g(e,this);if(s&&["Loaded","LoadingMore"].includes(this.status)){const t=Object.freeze(e);let l=this.resources.findIndex(d=>g(d,this)==s);l>=0&&(this.resources[l]=t),l=this.selection.findIndex(d=>g(d,this)==s),l>=0&&(this.selection[l]=t),l=this.detailSelection.findIndex(d=>g(d,this)==s),l>=0&&(this.detailSelection[l]=t)}},async refreshResource(e){if(e){const s={};this.referencePathsToExpand&&(s.r=J(this.referencePathsToExpand));const t=r.map(s,(u,h)=>u!=null?`${encodeURIComponent(h)}=${encodeURIComponent(u)}`:null).filter(u=>u!=null).join("&"),l=r.isEmpty(t)?`${n.restCollectionUrl}/${e}`:`${n.restCollectionUrl}/${e}?${t}`,d=await $.get(l);if(d.status==200){const u=d.data;return this.recordUpdate(u),u}}return null},addResource(e={}){this.detailSelection=[r.omit(r.merge({},e),this.idProperty)],this.editingDetailSelection=!0},async deleteResource(e){if((await $.delete(`${n.restCollectionUrl}/${e}`)).status==200&&["Loaded","LoadingMore"].includes(this.status)){let t=this.resources.findIndex(l=>g(l,this)==e);t>=0&&this.resources.splice(t,1),t=this.selection.findIndex(l=>g(l,this)==e),t>=0&&this.selection.splice(t,1),t=this.detailSelection.findIndex(l=>g(l,this)==e),t>=0&&(this.detailSelection.splice(t,1),this.detailSelection.length==0&&(this.editingDetailSelection=n.detail.autoEdit)),n.limitTransientDataToLocalCollection&&delete this.transientData[e]}},async saveResource(e){const s=g(e,this),t=s==null,l=await $({method:t?"post":"put",url:t?n.restCollectionUrl:`${n.restCollectionUrl}/${s}`,data:e});if(l.status==200){const d=l.data,u=g(d,this),h=u?await this.refreshResource(u):null;return t&&this.recordInsertion(h||Object.freeze(d)),h||d}return null},async saveResources(e){const s=await $({method:"put",url:n.restCollectionUrl,data:e});if(s.status==200){const t=s.data||[],l=[];for(const[d,u]of t.entries()){const h=g(e[d],this)==null,p=g(u,this),D=p?await this.refreshResource(p):null;h&&this.recordInsertion(D||u),l.push(D||Object.freeze(u))}return l}return[]},clearTransientData(){this.transientData={}},setInvalidResourceIds(e){r.isEqual(e,this.invalidResources.map(s=>g(s,this)))||(this.invalidResources=e.map(s=>this.resources.find(t=>g(t,this)==s)).filter(s=>s!=null))},setTransientDataForResources(e){const{transientData:s,merge:t=!0}=e;t?r.merge(this.transientData,s):r.assign(this.transientData,s)},clearSelection(){this.setSelection([])},deselectResources(e){const s=this.selection.map(t=>g(t,this)).filter(t=>t!=null&&!e.includes(t));this.setSelection(s)},selectResources(e,s){const{addToSelection:t,edit:l}=s||{},d=this.selection.map(h=>g(h,this));let u=e;if(t){const h=r.difference(e,d);h.length>0&&(u=d.concat(h).filter(p=>p!=null))}r.isEqual(d,u)||this.setSelection(u,l)},setSelection(e,s){if(!r.isEqual(e,this.selection.map(t=>g(t,this)))){let t=!0;if(this.editors.length>0){if(n.detail.autoFromSingleSelection&&this.selection.length==1)t=!1;else if(n.detail.autoFromMultipleSelection&&n.detail.allowMultiple&&this.selection.length>1)t=!1;else if(n.detail.constrainToSelection){const l=this.selection.map(h=>g(h,this)),u=this.detailSelection.map(h=>g(h,this)).filter(h=>l.includes(h));this.detailSelection.filter(h=>!u.includes(g(h,this))).length>0&&(t=!1)}}if(!t)return;if(this.selection=e.map(l=>this.resources.find(d=>g(d,this)==l)).filter(l=>l!=null),n.detail.autoFromSingleSelection&&this.selection.length==1){const l=this.selection[0];(this.detailSelection.length!=1||g(this.detailSelection[0],this)!=g(l,this))&&(this.detailSelection=[l])}else if(n.detail.autoFromMultipleSelection&&n.detail.allowMultiple&&this.selection.length>1)r.isEqual(this.selection.map(l=>g(l,this)),this.detailSelection.map(l=>g(l,this)))||(this.detailSelection=r.clone(this.selection));else if(n.detail.constrainToSelection){const l=this.selection.map(h=>g(h,this)),d=this.detailSelection.map(h=>g(h,this)),u=d.filter(h=>l.includes(h));r.isEqual(u,d)||(this.detailSelection=this.detailSelection.filter(h=>u.includes(g(h,this))))}this.detailSelection.length==0?this.editingDetailSelection=!1:this.editingDetailSelection=s!==void 0?s:this.editingDetailSelection||n.detail.autoEdit}},hideDetail(){this.detailSelection.length>0&&(this.detailSelection=[],this.editingDetailSelection=!1)},showSelectionAsDetail(e){if(this.selection.length<=1||n.detail.allowMultiple){const s=this.selection.map(l=>g(l,this)),t=this.detailSelection.map(l=>g(l,this));r.isEqual(s,t)||(this.detailSelection=r.clone(this.selection)),this.detailSelection.length==0?this.editingDetailSelection=!1:this.editingDetailSelection=e!==void 0?e:this.editingDetailSelection||n.detail.autoEdit}},deregisterEditor(e){r.remove(this.editors,s=>s==e)},registerEditor(e){this.editors.includes(e)||this.editors.push(e)},deregisterListNavigator({name:e,listNavigator:s}){(s==null||this.listNavigators[e]==s)&&delete this.listNavigators[e]},registerListNavigator({name:e,listNavigator:s}){this.listNavigators[e]!=s&&(this.listNavigators[e]=s)}}});return(()=>{const e=(s,t)=>{const l=C(s,t);return ee.registerStore(l.$id,l),l};return e.$id=C.$id,e})()},ee=new ce,Ue=(w={})=>{var he,fe,ge,ve;const{collectionId:n,draftBatchId:C,enabled:q,resourceType:e,options:s}=w,t=a.ref(void 0),l=a.ref(n),d=a.ref(C),u=a.ref(q??!0),h=a.ref([a.toRef(e)]),p=a.ref(s),D=a.computed(()=>d.value),T=a.ref(u.value),b=a.ref(I.v4()),F=a.ref((fe=(he=p.value)==null?void 0:he.filter)==null?void 0:fe.resourceIds),O=a.ref((ve=(ge=p.value)==null?void 0:ge.filter)==null?void 0:ve.query),k=a.computed(()=>d.value==null&&l.value!=null&&ee.getStore(l.value)!=null),Q=a.ref(k.value),R=a.computed(()=>L("status","Uninitialized"));function m(i){if(t.value)return i(t.value)}async function E(i){if(t.value)return await i(t.value)}function L(i,c){if(t.value)return t.value[i];if(c!==void 0)return c;throw"Attempted to use a REST collection store that has not been created, with no default value."}const y=(i={})=>{var me,pe,Se,ye;const{collectionId:c,draftBatchId:U,enabled:z,resourceType:re,options:Re}=i;l.value=c,d.value=U,u.value=z??!0,h.value=[a.toRef(re)],Re!=null&&(p.value=Re,F.value=(pe=(me=p.value)==null?void 0:me.filter)==null?void 0:pe.resourceIds,O.value=(ye=(Se=p.value)==null?void 0:Se.filter)==null?void 0:ye.query),b.value=I.v4(),X(u.value)},X=async i=>{i!=T.value&&(T.value=i,i&&(_(),x()))},Z=async i=>{F.value=i,await E(async c=>await c.setFilterResourceIds(F.value||null))},V=async i=>{if(O.value=i,R.value!="Uninitialized"){const c=i,U=a.computed(()=>r.isFunction(c)?S.value?c(S.value):null:c);await E(z=>z.setQuery(U.value||null))}},_=()=>{p.value=r.merge({},p.value||{},{filter:{resourceIds:F.value,query:O.value}})},S=a.computed(()=>h.value[0].value||void 0),B=function(i){const c=r.get(i,"filter.query"),U=r.get(i,"referencePathsToExpand"),z=r.isFunction(c)?c(S.value):c,re=S.value?r.isFunction(U)?U(S.value):U||[]:[];return{...r.cloneDeep(i||{}),filter:{...r.cloneDeep((i==null?void 0:i.filter)||{}),query:z},referencePathsToExpand:re}},P=a.computed(()=>B(p.value)),M=a.computed(()=>{if(!S.value)return null;if(P.value.restCollectionUrl!==void 0)return P.value.restCollectionUrl;if(!Q.value)return!S.value||!S.value.collectionName?null:D.value?`${G.config.apiBaseUrl}/draft-batches/${D.value}/${S.value.collectionName}`:`${G.config.apiBaseUrl}/${S.value.collectionName}`}),o=a.computed(()=>{var i;if(S.value)return r.mergeWith(r.cloneDeep(ue),P.value,{idProperty:(i=S.value)==null?void 0:i.idProperty,restCollectionUrl:M.value||""},(c,U)=>{if(r.isArray(U)&&U.length==0&&(c==null||r.isArray(c)))return U})}),f=a.ref(0),N=a.computed(()=>{var i;return f.value,l.value||S.value&&((i=S.value)==null?void 0:i.collectionName)&&(D.value?`draftBatches/${D.value}/${S.value.collectionName}/${b.value}`:`${S.value.collectionName}/${b.value}`)||null}),x=()=>{if(T.value){let i=!1;return S.value&&N.value&&(t.value=ee.getStore(N.value),t.value?i=!1:o.value&&(Q.value=!1,t.value=Ee(N.value,o.value)(),i=!0)),i}else return!1},H=()=>{N.value&&l.value==N.value?(t.value=void 0,x()):(t.value=void 0,f.value=f.value+1,x())};a.watch(D,(i,c)=>{r.isEqual(i,c)||H()}),a.watch(T,(i,c)=>{i!=c&&(i?x():t.value=void 0)}),a.watch(S,(i,c)=>{i&&!c?x():!i&&c||r.isEqual(i,c)||H()}),a.watch(o,(i,c)=>{r.isEqual(i,c)||H()}),a.watch(k,()=>{k.value||(Q.value=!1)}),a.watch(N,()=>x()),a.watch(M,(i,c)=>{r.isEqual(i,c)||H()});const W=[],qe=function(i){R.value!="Uninitialized"?a.nextTick(i):W.push(i)};return a.watch(R,(i,c)=>{if(i!="Uninitialized"&&c=="Uninitialized"){const U=r.clone(W);W.splice(0,W.length);for(const z of U)z()}}),x(),{collectionId:N,draftBatchId:D,resourceType:S,enabled:T,status:R,batchSaveAttempted:a.computed(()=>L("batchSaveAttempted",!1)),listNavigators:a.computed(()=>L("listNavigators",!1)),invalidResources:a.computed(()=>L("invalidResources",[])),resources:a.computed(()=>R.value!="Uninitialized"?(E(i=>i.ensureCollectionLoaded()),L("resources",[])):[]),transientData:a.computed(()=>L("transientData",[])),detailSelection:a.computed(()=>L("detailSelection",[])),editingDetailSelection:a.computed(()=>L("editingDetailSelection",!1)),selection:a.computed(()=>L("selection",[])),reconfigureCollection:y,setEditingDetailSelection:i=>m(c=>c.setEditingDetailSelection(i)),setEnabled:X,setFilterResourceIds:Z,setQuery:V,ensureStore:x,setBatchSaveAttempted:i=>m(c=>c.setBatchSaveAttempted(i)),clear:()=>m(i=>i.clear()),ensureCollectionLoaded:async()=>await E(async i=>i.ensureCollectionLoaded()),loadResources:async()=>await E(async i=>await i.loadResources()),addResource:i=>m(c=>c.addResource(i)),checkForDeletedResource:async i=>await E(async c=>await c.checkForDeletedResource(i))==!0,recordDeletion:i=>m(c=>c.recordDeletion(i)),recordInsertion:(i,{insertAtBeginning:c=!1,transientData:U=void 0}={})=>m(z=>z.recordInsertion(i,{insertAtBeginning:c,transientData:U})),recordUpdate:i=>m(c=>c.recordUpdate(i)),refreshResource:async i=>await E(async c=>await c.refreshResource(i)),deleteResource:async i=>await E(async c=>await c.deleteResource(i)),saveResource:async i=>await E(async c=>await c.saveResource(i)),saveResources:async i=>await E(async c=>await c.saveResources(i)),clearTransientData:()=>m(i=>i.clearTransientData()),setInvalidResourceIds:i=>m(c=>c.setInvalidResourceIds(i)),setTransientDataForResources:i=>m(c=>c.setTransientDataForResources(i)),clearSelection:()=>m(i=>i.clearSelection()),deselectResources:i=>m(c=>c.deselectResources(i)),selectResources:(i,c)=>m(U=>U.selectResources(i,c)),hideDetail:()=>m(i=>i.hideDetail()),deregisterEditor:i=>m(c=>c.deregisterEditor(i)),registerEditor:i=>m(c=>c.registerEditor(i)),deregisterListNavigator:i=>m(c=>c.deregisterListNavigator(i)),registerListNavigator:i=>m(c=>c.registerListNavigator(i)),onItemsStoreReady:qe}},Ce=()=>{ee.clearAllStores()};function ie(w,n){return r.get(w,(n==null?void 0:n.idProperty)||"_id")}const de={idProperty:"_id"},Y={resource:null,status:"NotLoaded"},Te=(w,n)=>{n=r.merge({},de,n);const C=ae.defineStore(w,{state:()=>({idProperty:n.idProperty,resourceId:n.resourceId||null,resourceUrl:n.resourceUrl||null,referencePathsToExpand:n.referencePathsToExpand||null,...Y}),getters:{currentResourceUrl:e=>e.resourceUrl||(n.restCollectionUrl&&e.resourceId?`${n.restCollectionUrl}/${e.resourceId}`:null)||n.restCollectionUrl||null,fixedQueryParams:e=>{const s={};return e.referencePathsToExpand&&(s.r=J(e.referencePathsToExpand)),s}},actions:{reset(){for(const e in Y)this[e]=Y[e]},async setResourceId(e){const s=this.currentResourceUrl;this.resourceId=e,!r.isEqual(this.currentResourceUrl,s)&&this.status!="NotLoaded"&&await this.loadResource()},async setResourceUrl(e){const s=this.currentResourceUrl;this.resourceUrl=e,!r.isEqual(this.currentResourceUrl,s)&&this.status!="NotLoaded"&&await this.loadResource()},clear(){for(const e in Y)this[e]=Y[e]},async ensureResourceLoaded(){["Loaded","Loading","Failed"].includes(this.status)||await this.loadResource()},async loadResource(){this.reset();const e=I.v4();if(this._loadId=e,this.currentResourceUrl){this.status="Loading";const s=this.fixedQueryParams,t=r.cloneDeep(s),l=r.map(t,(u,h)=>u!=null?`${encodeURIComponent(h)}=${encodeURIComponent(u)}`:null).filter(u=>u!=null).join("&"),d=r.isEmpty(l)?this.currentResourceUrl:`${this.currentResourceUrl}?${l}`;try{const u=await $.get(d),h=this.fixedQueryParams;e!=this._loadId||!r.isEqual(s,h)?console.log(`Discarding resource fetched by obsolete query from ${d}.`):(this.resource=ne.decode(r.get(u,"data",{})),this.status="Loaded")}catch(u){console.log(`Error while loading resource (URL="${d}")`,u),this.reset(),this.status="Failed"}}else throw"Cannot load a resource because its URL, or its ID and collection URL, are unknown."},async checkForDeletedResource(){if(this.currentResourceUrl){let e;try{e=await $.get(this.currentResourceUrl)}catch(s){$.isAxiosError(s)&&(e=s.response)}return e&&e.status==404?(this.recordDeletion(),!0):!1}else throw"Cannot check for a deleted resource because its URL, or its ID and collection URL, are unknown."},recordDeletion(){this.resource=null,this.status="Loaded"},recordInsertion(e){this.resourceId=ie(e,this)||null,this.status=="Loaded"&&(this.resource=Object.freeze(e))},recordUpdate(e){this.resourceId=ie(e,this)||null,this.status=="Loaded"&&(this.resource=Object.freeze(e))},async refreshResource(){return await this.loadResource(),this.resource},async deleteResource(){if(this.currentResourceUrl)(await $.delete(this.currentResourceUrl)).status==200&&this.recordDeletion();else throw"Cannot delete a resource because its URL, or its ID and collection URL, are unknown."},async saveResource(e){const s=ie(e,this),t=s==null;if(!s)throw"The REST resource store cannot create new resources on the server.";if(!this.currentResourceUrl)throw"Cannot save a resource because its URL, or its ID and collection URL, are unknown.";const l=await $({method:t?"post":"put",url:this.currentResourceUrl,data:e});if(l.status==200){const d=l.data,u=await this.refreshResource();return t&&this.recordInsertion(u||d),u||Object.freeze(d)}return null},async makeCustomApiRequest(e){const{method:s,subpath:t,url:l,data:d}=e;let u=l;if(!u)if(this.currentResourceUrl)u=`${this.currentResourceUrl}/${t}`;else throw"Cannot make a custom API request for a resource because its URL, or its ID and collection URL, are unknown.";const h=await $({method:s||"get",url:u,data:d});return h.status>=200&&h.status<300?h.data:null}}});return(()=>{const e=(s,t)=>{const l=C(s,t);return se.registerStore(l.$id,l),l};return e.$id=C.$id,e})()},se=new ce,Le=(w={})=>{const{resourceClientId:n,draftBatchId:C,enabled:q,resourceType:e,options:s}=w,t=a.ref(void 0),l=a.ref(n),d=a.ref(C),u=a.ref(q??!0),h=a.ref([a.toRef(e)]),p=a.ref(s),D=a.computed(()=>d.value),T=a.ref(u.value),b=a.ref(I.v4()),F=a.computed(()=>d.value==null&&l.value!=null&&se.getStore(l.value)!=null),O=a.ref(F.value),k=a.computed(()=>m("status","Uninitialized"));function Q(o){if(t.value)return o(t.value)}async function R(o){if(t.value)return await o(t.value)}function m(o,f){if(t.value)return t.value[o];if(f!==void 0)return f;throw"Attempted to use a REST resource store that has not been created, with no default value."}const E=(o={})=>{const{resourceClientId:f,draftBatchId:N,enabled:x,resourceType:H,options:W}=o;l.value=f,d.value=N,u.value=x??!0,h.value=[a.toRef(H)],W!=null&&(p.value=W),b.value=I.v4(),L(u.value)},L=async o=>{o!=T.value&&(T.value=o,o&&P())},y=a.computed(()=>h.value[0].value||void 0),X=function(o){const f=r.get(o,"referencePathsToExpand"),N=y.value?r.isFunction(f)?f(y.value):f||[]:[];return{...r.cloneDeep(o||{}),referencePathsToExpand:N}},Z=a.computed(()=>X(p.value)),V=a.computed(()=>{if(!y.value)return null;if(!O.value)return!y.value||!y.value.collectionName?null:D.value?`${G.config.apiBaseUrl}/draft-batches/${D.value}/${y.value.collectionName}`:`${G.config.apiBaseUrl}/${y.value.collectionName}`}),_=a.computed(()=>{if(y.value&&V.value)return r.mergeWith(r.cloneDeep(de),Z.value,{idProperty:y.value.idProperty,restCollectionUrl:V.value},(o,f)=>{if(r.isArray(f)&&f.length==0&&(o==null||r.isArray(o)))return f})}),S=a.ref(0),B=a.computed(()=>{var o;return S.value,l.value||y.value&&((o=y.value)==null?void 0:o.collectionName)&&(D.value?`draftBatches/${D.value}/${y.value.collectionName}/${b.value}`:`${y.value.collectionName}/${b.value}`)||null}),P=()=>{if(T.value){let o=!1;return y.value&&B.value&&(t.value=se.getStore(B.value),t.value?o=!1:_.value&&(O.value=!1,t.value=Te(B.value,_.value)(),o=!0)),o}else return!1},M=()=>{B.value&&l.value==B.value?(t.value=void 0,P()):(t.value=void 0,S.value=S.value+1,P())};return a.watch(D,(o,f)=>{r.isEqual(o,f)||M()}),a.watch(T,(o,f)=>{o!=f&&(o?P():t.value=void 0)}),a.watch(y,(o,f)=>{o&&!f?P():!o&&f||r.isEqual(o,f)||M()}),a.watch(_,(o,f)=>{r.isEqual(o,f)||M()}),a.watch(F,()=>{F.value||(O.value=!1)}),a.watch(B,()=>P()),a.watch(V,(o,f)=>{r.isEqual(o,f)||M()}),P(),{resourceClientId:B,draftBatchId:D,enabled:T,resourceType:y,status:k,resource:a.computed(()=>k.value!="Uninitialized"?(R(o=>o.ensureResourceLoaded()),m("resource",[])):[]),resourceId:a.computed(()=>m("resourceId",null)),resourceUrl:a.computed(()=>m("resourceUrl",null)),reconfigureClient:E,setEnabled:L,setResourceId:async o=>await R(async f=>await f.setResourceId(o)),setResourceUrl:async o=>await R(async f=>await f.setResourceUrl(o)),ensureStore:P,clear:()=>Q(o=>o.clear()),ensureResourceLoaded:async()=>await R(async o=>o.ensureResourceLoaded()),loadResource:async()=>await R(async o=>await o.loadResource()),checkForDeletedResource:async()=>await R(async o=>await o.checkForDeletedResource())==!0,recordDeletion:()=>R(o=>o.recordDeletion()),recordInsertion:o=>R(f=>f.recordInsertion(o)),recordUpdate:o=>R(f=>f.recordUpdate(o)),refreshResource:async()=>await R(async o=>await o.refreshResource()),deleteResource:async()=>await R(async o=>await o.deleteResource()),saveResource:async o=>await R(async f=>await f.saveResource(o)),makeCustomApiRequest:async o=>await R(async f=>await f.makeCustomApiRequest(o))}},G={config:{...oe}};function $e(w){G.config=r.merge({},oe,w)}v.ApiClientError=we,v.clearAllRestCollections=Ce,v.initRestClient=$e,v.restClient=G,v.useRestCollection=Ue,v.useRestResource=Le,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
@@ -111,7 +111,7 @@ export type RestCollectionStoreReadyCallback = (() => void) | (() => Promise<voi
111
111
  * resources from one collection endpoint of the REST API; but filters can be added when using a REST API that supports
112
112
  * them.
113
113
  */
114
- export interface RestCollection {
114
+ export interface RestCollection<T extends Resource = Resource> {
115
115
  /**
116
116
  * The REST collection's unique ID, which is used as the ID of its Pinia store.
117
117
  *
@@ -139,17 +139,17 @@ export interface RestCollection {
139
139
  * An array of resources that have failed validation. The client must manage this list by calling
140
140
  * {@link setInvalidResourceIds}
141
141
  **/
142
- invalidResources: Ref<Resource[]>;
142
+ invalidResources: Ref<T[]>;
143
143
  /** The array of resources that have been loaded from the REST API into the local collection. */
144
- resources: Ref<Resource[]>;
144
+ resources: Ref<T[]>;
145
145
  /** Transient data that a client has associated with the resources via {@link setTransientDataForResources}. */
146
146
  transientData: Ref<any[]>;
147
147
  /** Resources in the current detail view, a sublist of {@link resources}. */
148
- detailSelection: Ref<Resource[]>;
148
+ detailSelection: Ref<T[]>;
149
149
  /** A flag indicating whether the detail selection is currently being edited or only displayed. */
150
150
  editingDetailSelection: Ref<boolean>;
151
151
  /** The current selection, a sublist of {@link resources}. */
152
- selection: Ref<Resource[]>;
152
+ selection: Ref<T[]>;
153
153
  /**
154
154
  * Apply new configuration options.
155
155
  *
@@ -226,14 +226,14 @@ export interface RestCollection {
226
226
  *
227
227
  * @param resourceDefaults An object containing initial property values for the new resource.
228
228
  */
229
- addResource: (resourceDefaults?: Resource) => void;
229
+ addResource: (resourceDefaults?: T) => void;
230
230
  checkForDeletedResource: (resourceId: ResourceId) => Promise<boolean>;
231
231
  recordDeletion: (resourceId: ResourceId) => void;
232
- recordInsertion: (resource: Resource, { insertAtBeginning, transientData }?: {
232
+ recordInsertion: (resource: T, { insertAtBeginning, transientData }?: {
233
233
  insertAtBeginning?: boolean;
234
234
  transientData?: any;
235
235
  }) => void;
236
- recordUpdate: (resource: Resource) => void;
236
+ recordUpdate: (resource: T) => void;
237
237
  /**
238
238
  * Refresh one resource by fetching it again from the REST API.
239
239
  *
@@ -241,7 +241,7 @@ export interface RestCollection {
241
241
  *
242
242
  * @param resourceId The ID of the resource to refresh.
243
243
  */
244
- refreshResource: (resourceId: ResourceId) => Promise<Resource | null | undefined>;
244
+ refreshResource: (resourceId: ResourceId) => Promise<T | null | undefined>;
245
245
  /**
246
246
  * Delete one resource.
247
247
  *
@@ -260,7 +260,7 @@ export interface RestCollection {
260
260
  *
261
261
  * @param resource The resource to create or update.
262
262
  */
263
- saveResource: (resource: Resource) => Promise<Resource | null | undefined>;
263
+ saveResource: (resource: T) => Promise<T | null | undefined>;
264
264
  /**
265
265
  * Save multiple resources (new or updated).
266
266
  *
@@ -271,7 +271,7 @@ export interface RestCollection {
271
271
  *
272
272
  * @param params TODO
273
273
  */
274
- saveResources: (resources: Resource[]) => Promise<Resource[] | undefined>;
274
+ saveResources: (resources: T[]) => Promise<T[] | undefined>;
275
275
  /**
276
276
  * Record which resources have failed validation.
277
277
  *
@@ -306,6 +306,6 @@ export interface RestCollection {
306
306
  }) => void;
307
307
  onItemsStoreReady: (callback: RestCollectionStoreReadyCallback) => void;
308
308
  }
309
- declare const _default: (params?: RestCollectionOptions) => RestCollection;
309
+ declare const _default: <T extends object = object>(params?: RestCollectionOptions) => RestCollection<T>;
310
310
  export default _default;
311
311
  export declare const clearAllRestCollections: () => void;
@@ -56,7 +56,7 @@ export interface MakeCustomApiRequestParams {
56
56
  * {@link RestResourceClient} is sometimes useful for consuming individual responses from APIs that are not really
57
57
  * RESTful.
58
58
  */
59
- export interface RestResourceClient {
59
+ export interface RestResourceClient<T extends Resource = Resource> {
60
60
  /**
61
61
  * The REST resource client's unique identifier, which is the ID of its Pinia store.
62
62
  *
@@ -77,7 +77,7 @@ export interface RestResourceClient {
77
77
  /** A status indicating whether resources have been loaded yet from the REST API. */
78
78
  status: Ref<RestResourceStatus>;
79
79
  /** The local version of the resource loaded from the REST API. */
80
- resource: Ref<Resource>;
80
+ resource: Ref<T>;
81
81
  /** The ID of the REST resource. */
82
82
  resourceId: Ref<ResourceId | null>;
83
83
  /** The URL of the REST resource. */
@@ -129,12 +129,12 @@ export interface RestResourceClient {
129
129
  */
130
130
  checkForDeletedResource: () => Promise<boolean>;
131
131
  recordDeletion: () => void;
132
- recordInsertion: (resource: Resource) => void;
133
- recordUpdate: (resource: Resource) => void;
134
- refreshResource: () => Promise<Resource | null | undefined>;
132
+ recordInsertion: (resource: T) => void;
133
+ recordUpdate: (resource: T) => void;
134
+ refreshResource: () => Promise<T | null | undefined>;
135
135
  deleteResource: () => Promise<void>;
136
- saveResource: (resource: Resource) => Promise<Resource | null | undefined>;
136
+ saveResource: (resource: T) => Promise<T | null | undefined>;
137
137
  makeCustomApiRequest: (params: MakeCustomApiRequestParams) => Promise<any>;
138
138
  }
139
- declare const _default: (params?: RestResourceOptions) => RestResourceClient;
139
+ declare const _default: <T extends object = object>(params?: RestResourceOptions) => RestResourceClient<T>;
140
140
  export default _default;
@@ -321,7 +321,7 @@ declare const makeStore: (storeId: string, options: RestCollectionStoreOptions)
321
321
  * has an ID, an update will be attempted, while otherwise it will be added.
322
322
  * @returns An array of refreshed local resources, one for each remote resource whose save operation succeeded.
323
323
  */
324
- saveResources(resources: Resource[]): Promise<any[]>;
324
+ saveResources(resources: Resource[]): Promise<Resource[]>;
325
325
  /** Clear all transient data. */
326
326
  clearTransientData(): void;
327
327
  /**
@@ -670,7 +670,7 @@ export declare const storeRegistry: StoreRegistry<import("pinia").Store<string,
670
670
  * has an ID, an update will be attempted, while otherwise it will be added.
671
671
  * @returns An array of refreshed local resources, one for each remote resource whose save operation succeeded.
672
672
  */
673
- saveResources(resources: Resource[]): Promise<any[]>;
673
+ saveResources(resources: Resource[]): Promise<Resource[]>;
674
674
  /** Clear all transient data. */
675
675
  clearTransientData(): void;
676
676
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rest-client-vue",
3
- "version": "1.0.0-a4",
3
+ "version": "1.1.0",
4
4
  "author": {
5
5
  "name": "Jeremy Stone",
6
6
  "email": "stoneje@msn.com"