@civet/core 1.1.0 → 1.2.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.
@@ -68,6 +68,14 @@ var DataProvider = /*#__PURE__*/function () {
68
68
  _createClass(DataProvider, [{
69
69
  key: "extend",
70
70
  value: function extend() {}
71
+ }, {
72
+ key: "createInstance",
73
+ value: function createInstance() {
74
+ return null;
75
+ }
76
+ }, {
77
+ key: "releaseInstance",
78
+ value: function releaseInstance() {}
71
79
  }, {
72
80
  key: "subscribe",
73
81
  value: function subscribe(resource, handler) {
package/lib/Meta.js CHANGED
@@ -18,10 +18,11 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
18
18
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
19
19
 
20
20
  var Meta = /*#__PURE__*/function () {
21
- function Meta(base) {
21
+ function Meta(base, instance) {
22
22
  _classCallCheck(this, Meta);
23
23
 
24
24
  this.data = base == null ? {} : base;
25
+ this.instance = instance;
25
26
  }
26
27
 
27
28
  _createClass(Meta, [{
@@ -62,9 +62,9 @@ function useResource(_ref) {
62
62
  var configContext = (0, _context2.useConfigContext)();
63
63
  var currentDataProvider = dataProviderProp || configContext.dataProvider;
64
64
 
65
- var dataProvider = _react["default"].useMemo(function () {
66
- return currentDataProvider;
67
- }, []);
65
+ var _React$useState = _react["default"].useState(currentDataProvider),
66
+ _React$useState2 = _slicedToArray(_React$useState, 1),
67
+ dataProvider = _React$useState2[0];
68
68
 
69
69
  if (dataProvider == null) {
70
70
  throw new Error('Unmet requirement: The DataProvider for the useResource hook is missing - Check your ConfigContext provider and the dataProvider property');
@@ -74,6 +74,18 @@ function useResource(_ref) {
74
74
  throw new Error('Constant violation: The DataProvider provided to the useResource hook must not be replaced - Check your ConfigContext provider and the dataProvider property');
75
75
  }
76
76
 
77
+ var _React$useState3 = _react["default"].useState(function () {
78
+ return dataProvider.createInstance();
79
+ }),
80
+ _React$useState4 = _slicedToArray(_React$useState3, 1),
81
+ instance = _React$useState4[0];
82
+
83
+ _react["default"].useEffect(function () {
84
+ return function () {
85
+ dataProvider.releaseInstance(instance);
86
+ };
87
+ }, []);
88
+
77
89
  var nextRequestDetails = _react["default"].useMemo(function () {
78
90
  return {
79
91
  name: nextName,
@@ -83,7 +95,7 @@ function useResource(_ref) {
83
95
  };
84
96
  }, [nextName, nextQuery, nextEmpty, nextOptions]);
85
97
 
86
- var _React$useState = _react["default"].useState(function () {
98
+ var _React$useState5 = _react["default"].useState(function () {
87
99
  var request = (0, _uniqueIdentifier["default"])();
88
100
  var revision = (0, _uniqueIdentifier["default"])();
89
101
  return {
@@ -107,9 +119,9 @@ function useResource(_ref) {
107
119
  persistent: nextPersistent
108
120
  };
109
121
  }),
110
- _React$useState2 = _slicedToArray(_React$useState, 2),
111
- state = _React$useState2[0],
112
- setState = _React$useState2[1];
122
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
123
+ state = _React$useState6[0],
124
+ setState = _React$useState6[1];
113
125
 
114
126
  var requestDetails = state.requestDetails,
115
127
  request = state.request,
@@ -198,7 +210,7 @@ function useResource(_ref) {
198
210
  _react["default"].useEffect(function () {
199
211
  if (requestDetails.empty) return undefined;
200
212
  var abortSignal = new _AbortSignal["default"]();
201
- var meta = new _Meta["default"](_objectSpread({}, value.meta));
213
+ var meta = new _Meta["default"](_objectSpread({}, value.meta), instance);
202
214
 
203
215
  var callback = function callback(error, done, data) {
204
216
  setState(function (prevState) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civet/core",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Civet",
5
5
  "main": "./lib/index.js",
6
6
  "scripts": {
@@ -42,6 +42,12 @@ class DataProvider {
42
42
 
43
43
  extend() {}
44
44
 
45
+ createInstance() {
46
+ return null;
47
+ }
48
+
49
+ releaseInstance() {}
50
+
45
51
  subscribe(resource, handler) {
46
52
  if (resource == null) throw new Error('No resource name specified');
47
53
  return this.notifier.subscribe(resource, handler);
package/src/Meta.js CHANGED
@@ -1,6 +1,7 @@
1
1
  class Meta {
2
- constructor(base) {
2
+ constructor(base, instance) {
3
3
  this.data = base == null ? {} : base;
4
+ this.instance = instance;
4
5
  }
5
6
 
6
7
  clear() {
@@ -21,7 +21,7 @@ function useResource({
21
21
  }) {
22
22
  const configContext = useConfigContext();
23
23
  const currentDataProvider = dataProviderProp || configContext.dataProvider;
24
- const dataProvider = React.useMemo(() => currentDataProvider, []);
24
+ const [dataProvider] = React.useState(currentDataProvider);
25
25
  if (dataProvider == null) {
26
26
  throw new Error(
27
27
  'Unmet requirement: The DataProvider for the useResource hook is missing - Check your ConfigContext provider and the dataProvider property',
@@ -33,6 +33,14 @@ function useResource({
33
33
  );
34
34
  }
35
35
 
36
+ const [instance] = React.useState(() => dataProvider.createInstance());
37
+ React.useEffect(
38
+ () => () => {
39
+ dataProvider.releaseInstance(instance);
40
+ },
41
+ [],
42
+ );
43
+
36
44
  const nextRequestDetails = React.useMemo(
37
45
  () => ({ name: nextName, query: nextQuery, empty: nextEmpty, options: nextOptions }),
38
46
  [nextName, nextQuery, nextEmpty, nextOptions],
@@ -137,7 +145,7 @@ function useResource({
137
145
 
138
146
  const abortSignal = new AbortSignal();
139
147
 
140
- const meta = new Meta({ ...value.meta });
148
+ const meta = new Meta({ ...value.meta }, instance);
141
149
 
142
150
  const callback = (error, done, data) => {
143
151
  setState((prevState) => {