@civet/core 1.1.0 → 1.2.1
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.
- package/lib/DataProvider.js +8 -0
- package/lib/Meta.js +2 -1
- package/lib/useResource.js +66 -40
- package/package.json +1 -1
- package/src/DataProvider.js +6 -0
- package/src/Meta.js +2 -1
- package/src/useResource.js +61 -37
package/lib/DataProvider.js
CHANGED
|
@@ -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, [{
|
package/lib/useResource.js
CHANGED
|
@@ -9,7 +9,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _AbortSignal = _interopRequireDefault(require("./AbortSignal"));
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _context3 = require("./context");
|
|
13
13
|
|
|
14
14
|
var _Meta = _interopRequireDefault(require("./Meta"));
|
|
15
15
|
|
|
@@ -59,12 +59,12 @@ function useResource(_ref) {
|
|
|
59
59
|
nextPersistent = _ref.persistent,
|
|
60
60
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
61
61
|
|
|
62
|
-
var configContext = (0,
|
|
62
|
+
var configContext = (0, _context3.useConfigContext)();
|
|
63
63
|
var currentDataProvider = dataProviderProp || configContext.dataProvider;
|
|
64
64
|
|
|
65
|
-
var
|
|
66
|
-
|
|
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$
|
|
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$
|
|
111
|
-
state = _React$
|
|
112
|
-
setState = _React$
|
|
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,41 +210,55 @@ 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);
|
|
214
|
+
var promise = Promise.resolve(state);
|
|
202
215
|
|
|
203
216
|
var callback = function callback(error, done, data) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
217
|
+
promise = promise.then(function (prevState) {
|
|
218
|
+
try {
|
|
219
|
+
var nextState;
|
|
220
|
+
|
|
221
|
+
if (error != null) {
|
|
222
|
+
nextState = _objectSpread(_objectSpread({}, prevState), {}, {
|
|
223
|
+
isLoading: false,
|
|
224
|
+
value: _objectSpread(_objectSpread({}, prevState.value), {}, {
|
|
225
|
+
error: error,
|
|
226
|
+
isIncomplete: false
|
|
227
|
+
})
|
|
228
|
+
});
|
|
229
|
+
} else {
|
|
230
|
+
var _context2 = {
|
|
231
|
+
name: requestDetails.name,
|
|
232
|
+
query: requestDetails.query,
|
|
233
|
+
options: requestDetails.options,
|
|
234
|
+
request: request,
|
|
235
|
+
revision: revision,
|
|
236
|
+
data: data,
|
|
237
|
+
meta: meta.commit(prevState.value.meta),
|
|
238
|
+
error: undefined,
|
|
239
|
+
isEmpty: false,
|
|
240
|
+
isIncomplete: !done,
|
|
241
|
+
isInitial: !!prevState.isInitial && !done
|
|
242
|
+
};
|
|
243
|
+
_context2.data = dataProvider.transition(_context2, prevState.value);
|
|
244
|
+
_context2.data = dataProvider.recycleItems(_context2, prevState.value);
|
|
245
|
+
nextState = _objectSpread(_objectSpread({}, prevState), {}, {
|
|
246
|
+
isLoading: !done,
|
|
247
|
+
value: _context2
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
setState(function (otherState) {
|
|
252
|
+
if (request !== otherState.request || revision !== otherState.revision) {
|
|
253
|
+
return otherState;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return nextState;
|
|
214
257
|
});
|
|
258
|
+
return nextState;
|
|
259
|
+
} catch (_unused) {
|
|
260
|
+
return prevState;
|
|
215
261
|
}
|
|
216
|
-
|
|
217
|
-
var context = {
|
|
218
|
-
name: requestDetails.name,
|
|
219
|
-
query: requestDetails.query,
|
|
220
|
-
options: requestDetails.options,
|
|
221
|
-
request: request,
|
|
222
|
-
revision: revision,
|
|
223
|
-
data: data,
|
|
224
|
-
meta: meta.commit(prevState.value.meta),
|
|
225
|
-
error: undefined,
|
|
226
|
-
isEmpty: false,
|
|
227
|
-
isIncomplete: !done,
|
|
228
|
-
isInitial: !!prevState.isInitial && !done
|
|
229
|
-
};
|
|
230
|
-
context.data = dataProvider.transition(context, prevState.value);
|
|
231
|
-
context.data = dataProvider.recycleItems(context, prevState.value);
|
|
232
|
-
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
233
|
-
isLoading: !done,
|
|
234
|
-
value: context
|
|
235
|
-
});
|
|
236
262
|
});
|
|
237
263
|
};
|
|
238
264
|
|
package/package.json
CHANGED
package/src/DataProvider.js
CHANGED
|
@@ -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
package/src/useResource.js
CHANGED
|
@@ -21,7 +21,7 @@ function useResource({
|
|
|
21
21
|
}) {
|
|
22
22
|
const configContext = useConfigContext();
|
|
23
23
|
const currentDataProvider = dataProviderProp || configContext.dataProvider;
|
|
24
|
-
const dataProvider = React.
|
|
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,45 +145,61 @@ 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);
|
|
149
|
+
|
|
150
|
+
let promise = Promise.resolve(state);
|
|
141
151
|
|
|
142
152
|
const callback = (error, done, data) => {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
promise = promise.then((prevState) => {
|
|
154
|
+
try {
|
|
155
|
+
let nextState;
|
|
156
|
+
|
|
157
|
+
if (error != null) {
|
|
158
|
+
nextState = {
|
|
159
|
+
...prevState,
|
|
160
|
+
isLoading: false,
|
|
161
|
+
value: {
|
|
162
|
+
...prevState.value,
|
|
163
|
+
error,
|
|
164
|
+
isIncomplete: false,
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
} else {
|
|
168
|
+
const context = {
|
|
169
|
+
name: requestDetails.name,
|
|
170
|
+
query: requestDetails.query,
|
|
171
|
+
options: requestDetails.options,
|
|
172
|
+
request,
|
|
173
|
+
revision,
|
|
174
|
+
data,
|
|
175
|
+
meta: meta.commit(prevState.value.meta),
|
|
176
|
+
error: undefined,
|
|
177
|
+
isEmpty: false,
|
|
178
|
+
isIncomplete: !done,
|
|
179
|
+
isInitial: !!prevState.isInitial && !done,
|
|
180
|
+
};
|
|
181
|
+
context.data = dataProvider.transition(context, prevState.value);
|
|
182
|
+
context.data = dataProvider.recycleItems(context, prevState.value);
|
|
183
|
+
|
|
184
|
+
nextState = {
|
|
185
|
+
...prevState,
|
|
186
|
+
isLoading: !done,
|
|
187
|
+
value: context,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
setState((otherState) => {
|
|
192
|
+
if (request !== otherState.request || revision !== otherState.revision) {
|
|
193
|
+
return otherState;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return nextState;
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
return nextState;
|
|
200
|
+
} catch {
|
|
201
|
+
return prevState;
|
|
156
202
|
}
|
|
157
|
-
|
|
158
|
-
const context = {
|
|
159
|
-
name: requestDetails.name,
|
|
160
|
-
query: requestDetails.query,
|
|
161
|
-
options: requestDetails.options,
|
|
162
|
-
request,
|
|
163
|
-
revision,
|
|
164
|
-
data,
|
|
165
|
-
meta: meta.commit(prevState.value.meta),
|
|
166
|
-
error: undefined,
|
|
167
|
-
isEmpty: false,
|
|
168
|
-
isIncomplete: !done,
|
|
169
|
-
isInitial: !!prevState.isInitial && !done,
|
|
170
|
-
};
|
|
171
|
-
context.data = dataProvider.transition(context, prevState.value);
|
|
172
|
-
context.data = dataProvider.recycleItems(context, prevState.value);
|
|
173
|
-
|
|
174
|
-
return {
|
|
175
|
-
...prevState,
|
|
176
|
-
isLoading: !done,
|
|
177
|
-
value: context,
|
|
178
|
-
};
|
|
179
203
|
});
|
|
180
204
|
};
|
|
181
205
|
|