pocketbase-react 0.1.0 → 0.1.2
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/CHANGELOG.md +4 -1
- package/README.md +15 -0
- package/dist/pocketbase-react.js +492 -0
- package/dist/pocketbase-react.min.js +1 -0
- package/{dist/esm → es}/context/Pocketbase.d.ts +1 -3
- package/es/context/Pocketbase.js +28 -0
- package/{dist/cjs → es}/context/client.d.ts +1 -1
- package/es/context/client.js +8 -0
- package/{dist/cjs → es}/context/content.d.ts +0 -0
- package/es/context/content.js +67 -0
- package/{dist/cjs → es}/context/index.d.ts +0 -0
- package/es/context/index.js +3 -0
- package/{dist/cjs → es}/hooks/index.d.ts +0 -0
- package/es/hooks/index.js +2 -0
- package/{dist/cjs → es}/hooks/useAppContent.d.ts +1 -1
- package/es/hooks/useAppContent.js +26 -0
- package/es/hooks/useClientContext.d.ts +2 -0
- package/es/hooks/useClientContext.js +9 -0
- package/{dist/cjs → es}/index.d.ts +0 -0
- package/{dist/esm/index.d.ts → es/index.js} +1 -1
- package/{dist/cjs → es}/interfaces/Record.d.ts +1 -1
- package/es/interfaces/Record.js +1 -0
- package/{dist/cjs → es}/interfaces/index.d.ts +0 -0
- package/es/interfaces/index.js +1 -0
- package/es/store/actions/index.d.ts +2 -0
- package/es/store/actions/index.js +2 -0
- package/es/store/actions/records.d.ts +9 -0
- package/es/store/actions/records.js +39 -0
- package/{dist/cjs → es}/store/index.d.ts +0 -0
- package/{dist/esm/store/index.d.ts → es/store/index.js} +1 -1
- package/{dist/cjs → es}/store/reducers/index.d.ts +2 -2
- package/es/store/reducers/index.js +5 -0
- package/{dist/cjs → es}/store/reducers/records.d.ts +2 -3
- package/es/store/reducers/records.js +71 -0
- package/{dist/cjs → es}/store/store.d.ts +1 -1
- package/es/store/store.js +46 -0
- package/{dist/cjs → es}/store/types/index.d.ts +0 -0
- package/es/store/types/index.js +6 -0
- package/lib/context/Pocketbase.js +49 -0
- package/lib/context/client.js +21 -0
- package/lib/context/content.js +83 -0
- package/lib/context/index.js +42 -0
- package/lib/hooks/index.js +29 -0
- package/lib/hooks/useAppContent.js +38 -0
- package/lib/hooks/useClientContext.js +15 -0
- package/lib/index.js +55 -0
- package/lib/interfaces/Record.js +1 -0
- package/lib/interfaces/index.js +16 -0
- package/lib/store/actions/index.js +12 -0
- package/lib/store/actions/records.js +58 -0
- package/lib/store/index.js +55 -0
- package/lib/store/reducers/index.js +13 -0
- package/lib/store/reducers/records.js +85 -0
- package/lib/store/store.js +63 -0
- package/lib/store/types/index.js +16 -0
- package/package.json +94 -35
- package/src/context/Pocketbase.tsx +43 -0
- package/src/context/client.tsx +14 -0
- package/src/context/content.tsx +88 -0
- package/{dist/esm/context/index.d.ts → src/context/index.ts} +0 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useAppContent.ts +28 -0
- package/src/hooks/useClientContext.ts +11 -0
- package/src/index.ts +4 -0
- package/src/interfaces/Record.ts +10 -0
- package/src/interfaces/index.ts +1 -0
- package/src/store/actions/index.tsx +3 -0
- package/src/store/actions/records.tsx +54 -0
- package/src/store/index.ts +4 -0
- package/src/store/reducers/index.tsx +12 -0
- package/src/store/reducers/records.tsx +78 -0
- package/src/store/store.tsx +67 -0
- package/src/store/types/index.ts +14 -0
- package/dist/cjs/EventSource.d.ts +0 -1
- package/dist/cjs/context/Pocketbase.d.ts +0 -15
- package/dist/cjs/hooks/useClientContext.d.ts +0 -2
- package/dist/cjs/index.js +0 -3477
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/store/actions/index.d.ts +0 -2
- package/dist/cjs/store/actions/records.d.ts +0 -11
- package/dist/esm/EventSource.d.ts +0 -1
- package/dist/esm/context/client.d.ts +0 -8
- package/dist/esm/context/content.d.ts +0 -16
- package/dist/esm/hooks/index.d.ts +0 -2
- package/dist/esm/hooks/useAppContent.d.ts +0 -12
- package/dist/esm/hooks/useClientContext.d.ts +0 -2
- package/dist/esm/index.js +0 -3432
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/interfaces/Record.d.ts +0 -10
- package/dist/esm/interfaces/index.d.ts +0 -1
- package/dist/esm/store/actions/index.d.ts +0 -2
- package/dist/esm/store/actions/records.d.ts +0 -11
- package/dist/esm/store/reducers/index.d.ts +0 -8
- package/dist/esm/store/reducers/records.d.ts +0 -12
- package/dist/esm/store/store.d.ts +0 -27
- package/dist/esm/store/types/index.d.ts +0 -7
- package/dist/index.d.ts +0 -128
package/CHANGELOG.md
CHANGED
|
@@ -11,4 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
11
11
|
- Initial commit
|
|
12
12
|
|
|
13
13
|
### Changed
|
|
14
|
-
- Readme Instructions and so on
|
|
14
|
+
- Readme Instructions and so on
|
|
15
|
+
- initialCollections now also "subscribe" instead of just "fetch" content once
|
|
16
|
+
- Adjusted Rollup / Babel Config for use in React
|
|
17
|
+
- Redux now toggles between localStorage / AsyncStorage
|
package/README.md
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
PocketBase React SDK
|
|
2
2
|
======================================================================
|
|
3
|
+
[](https://npmjs.com/package/pocketbase-react)
|
|
4
|
+
|
|
3
5
|
Unofficial React SDK (React, React Native, Expo) for interacting with the [PocketBase JS SDK](https://github.com/pocketbase/js-sdk).
|
|
4
6
|
|
|
5
7
|
|
|
6
8
|
- [Installation](#installation)
|
|
7
9
|
- [Usage](#usage)
|
|
8
10
|
- [Caveats](#caveats)
|
|
11
|
+
- [Development](#development)
|
|
9
12
|
|
|
10
13
|
|
|
11
14
|
## Installation
|
|
@@ -125,3 +128,15 @@ DELETE
|
|
|
125
128
|
const id = "SOME_ID";
|
|
126
129
|
actions.delete(id);
|
|
127
130
|
```
|
|
131
|
+
|
|
132
|
+
## Development
|
|
133
|
+
|
|
134
|
+
By using
|
|
135
|
+
```sh
|
|
136
|
+
npm run build
|
|
137
|
+
# or
|
|
138
|
+
yarn build
|
|
139
|
+
```
|
|
140
|
+
You will get a folder called dist, which you can use to replace node_modules/pocketbase-react/dist in your React project.
|
|
141
|
+
|
|
142
|
+
***Maybe someone finds a better way to integrate the package in development with a project***
|
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('redux'), require('@reduxjs/toolkit'), require('redux-persist'), require('react-redux'), require('@react-native-async-storage/async-storage'), require('pocketbase')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'react', 'redux', '@reduxjs/toolkit', 'redux-persist', 'react-redux', '@react-native-async-storage/async-storage', 'pocketbase'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.PocketbaseReact = {}, global.React, global.redux, global.toolkit, global.reduxPersist, global.reactRedux, global.AsyncStorage, global.Pocketbase));
|
|
5
|
+
})(this, (function (exports, React, redux, toolkit, reduxPersist, reactRedux, AsyncStorage, PocketBase) { 'use strict';
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n["default"] = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
var AsyncStorage__default = /*#__PURE__*/_interopDefaultLegacy(AsyncStorage);
|
|
29
|
+
var PocketBase__default = /*#__PURE__*/_interopDefaultLegacy(PocketBase);
|
|
30
|
+
|
|
31
|
+
const SET_RECORDS = 'SET_RECORDS';
|
|
32
|
+
const ADD_RECORD = 'ADD_RECORD';
|
|
33
|
+
const ADD_RECORDS = 'ADD_RECORDS';
|
|
34
|
+
const UPDATE_RECORD = 'UPDATE_RECORD';
|
|
35
|
+
const DELETE_RECORD = 'DELETE_RECORD';
|
|
36
|
+
const DELETE_RECORDS = 'DELETE_RECORDS';
|
|
37
|
+
|
|
38
|
+
const setRecords = (key, payload) => ({
|
|
39
|
+
type: SET_RECORDS,
|
|
40
|
+
key,
|
|
41
|
+
payload
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const addRecord = (key, payload) => ({
|
|
45
|
+
type: ADD_RECORD,
|
|
46
|
+
key,
|
|
47
|
+
payload
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const addRecords = (key, payload) => ({
|
|
51
|
+
type: ADD_RECORDS,
|
|
52
|
+
key,
|
|
53
|
+
payload
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const deleteRecord$1 = (key, payload) => ({
|
|
57
|
+
type: DELETE_RECORD,
|
|
58
|
+
key,
|
|
59
|
+
payload
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const deleteRecords$1 = (key, payload) => ({
|
|
63
|
+
type: DELETE_RECORDS,
|
|
64
|
+
key,
|
|
65
|
+
payload
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const updateRecord$1 = (key, payload) => ({
|
|
69
|
+
type: UPDATE_RECORD,
|
|
70
|
+
key,
|
|
71
|
+
payload
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
var records$1 = /*#__PURE__*/Object.freeze({
|
|
75
|
+
__proto__: null,
|
|
76
|
+
setRecords: setRecords,
|
|
77
|
+
addRecord: addRecord,
|
|
78
|
+
addRecords: addRecords,
|
|
79
|
+
deleteRecord: deleteRecord$1,
|
|
80
|
+
deleteRecords: deleteRecords$1,
|
|
81
|
+
updateRecord: updateRecord$1
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
function _extends() {
|
|
85
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
86
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
87
|
+
var source = arguments[i];
|
|
88
|
+
|
|
89
|
+
for (var key in source) {
|
|
90
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
91
|
+
target[key] = source[key];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return target;
|
|
97
|
+
};
|
|
98
|
+
return _extends.apply(this, arguments);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function appendRecord(record, records) {
|
|
102
|
+
return [...records, record];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function appendRecords(recordsToAppend, records) {
|
|
106
|
+
return [...records, ...recordsToAppend];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function updateRecord(record, records) {
|
|
110
|
+
return records.map(r => {
|
|
111
|
+
if (r.id === record.id) {
|
|
112
|
+
return record;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return r;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function deleteRecord(record, records) {
|
|
120
|
+
return records.filter(r => r.id !== record.id);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function deleteRecords(recordsToDelete, records) {
|
|
124
|
+
return records.filter(r => !recordsToDelete.includes(r));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const records = (state = {}, action) => {
|
|
128
|
+
var _state$action$key;
|
|
129
|
+
|
|
130
|
+
const list = (_state$action$key = state[action.key]) != null ? _state$action$key : [];
|
|
131
|
+
|
|
132
|
+
switch (action.type) {
|
|
133
|
+
case SET_RECORDS:
|
|
134
|
+
if (Array.isArray(action.payload)) {
|
|
135
|
+
return _extends({}, state, {
|
|
136
|
+
[action.key]: action.payload
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
case ADD_RECORD:
|
|
141
|
+
return _extends({}, state, {
|
|
142
|
+
[action.key]: appendRecord(action.payload, list)
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
case ADD_RECORDS:
|
|
146
|
+
return _extends({}, state, {
|
|
147
|
+
[action.key]: appendRecords(action.payload, list)
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
case DELETE_RECORD:
|
|
151
|
+
return _extends({}, state, {
|
|
152
|
+
[action.key]: deleteRecord(action.payload, list)
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
case DELETE_RECORDS:
|
|
156
|
+
return _extends({}, state, {
|
|
157
|
+
[action.key]: deleteRecords(action.payload, list)
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
case UPDATE_RECORD:
|
|
161
|
+
return _extends({}, state, {
|
|
162
|
+
[action.key]: updateRecord(action.payload, list)
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
default:
|
|
166
|
+
return state;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const appReducer = redux.combineReducers({
|
|
171
|
+
records: records
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
/** A function that accepts a potential "extra argument" value to be injected later,
|
|
175
|
+
* and returns an instance of the thunk middleware that uses that value
|
|
176
|
+
*/
|
|
177
|
+
function createThunkMiddleware(extraArgument) {
|
|
178
|
+
// Standard Redux middleware definition pattern:
|
|
179
|
+
// See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware
|
|
180
|
+
var middleware = function middleware(_ref) {
|
|
181
|
+
var dispatch = _ref.dispatch,
|
|
182
|
+
getState = _ref.getState;
|
|
183
|
+
return function (next) {
|
|
184
|
+
return function (action) {
|
|
185
|
+
// The thunk middleware looks for any functions that were passed to `store.dispatch`.
|
|
186
|
+
// If this "action" is really a function, call it and return the result.
|
|
187
|
+
if (typeof action === 'function') {
|
|
188
|
+
// Inject the store's `dispatch` and `getState` methods, as well as any "extra arg"
|
|
189
|
+
return action(dispatch, getState, extraArgument);
|
|
190
|
+
} // Otherwise, pass the action down the middleware chain as usual
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
return next(action);
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
return middleware;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
var thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version
|
|
202
|
+
// with whatever "extra arg" they want to inject into their thunks
|
|
203
|
+
|
|
204
|
+
thunk.withExtraArgument = createThunkMiddleware;
|
|
205
|
+
var thunk$1 = thunk;
|
|
206
|
+
|
|
207
|
+
const CustomStorage = {
|
|
208
|
+
getItem: async (_key, ..._args) => {
|
|
209
|
+
if (typeof document !== 'undefined') {
|
|
210
|
+
console.log("I'm on the web!");
|
|
211
|
+
return localStorage.getItem(_key);
|
|
212
|
+
} else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
|
213
|
+
console.log("I'm in react-native");
|
|
214
|
+
return await AsyncStorage__default["default"].getItem(_key);
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
setItem: async (_key, _value, ..._args) => {
|
|
218
|
+
if (typeof document !== 'undefined') {
|
|
219
|
+
return localStorage.setItem(_key, _value);
|
|
220
|
+
} else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
|
221
|
+
return await AsyncStorage__default["default"].setItem(_key, _value);
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
removeItem: async (_key, ..._args) => {
|
|
225
|
+
if (typeof document !== 'undefined') {
|
|
226
|
+
return localStorage.removeItem(_key);
|
|
227
|
+
} else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
|
228
|
+
return await AsyncStorage__default["default"].removeItem(_key);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
const persistConfig = {
|
|
233
|
+
key: 'root',
|
|
234
|
+
storage: CustomStorage
|
|
235
|
+
};
|
|
236
|
+
const reducer = toolkit.combineReducers({
|
|
237
|
+
reducer: reduxPersist.persistReducer(persistConfig, appReducer)
|
|
238
|
+
});
|
|
239
|
+
const store = toolkit.configureStore({
|
|
240
|
+
reducer,
|
|
241
|
+
middleware: [thunk$1]
|
|
242
|
+
});
|
|
243
|
+
const useAppDispatch = store.dispatch;
|
|
244
|
+
const useAppSelector = reactRedux.useSelector;
|
|
245
|
+
const persistor = reduxPersist.persistStore(store);
|
|
246
|
+
|
|
247
|
+
const useClientContext = () => {
|
|
248
|
+
const context = React.useContext(ClientContext);
|
|
249
|
+
return context;
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
const ContentContext = React.createContext(null);
|
|
253
|
+
const ContentProvider = props => {
|
|
254
|
+
const client = useClientContext();
|
|
255
|
+
const dispatch = useAppDispatch;
|
|
256
|
+
const [collections, _] = React__namespace.useState(props.collections || []);
|
|
257
|
+
const actions = {
|
|
258
|
+
subscribe: async collectionName => {
|
|
259
|
+
// save local that collectionName should be subscribed
|
|
260
|
+
await (client == null ? void 0 : client.realtime.subscribe(collectionName, event => {
|
|
261
|
+
switch (event.action) {
|
|
262
|
+
case 'create':
|
|
263
|
+
dispatch(addRecord(collectionName, event.record));
|
|
264
|
+
break;
|
|
265
|
+
|
|
266
|
+
case 'update':
|
|
267
|
+
dispatch(updateRecord$1(collectionName, event.record));
|
|
268
|
+
break;
|
|
269
|
+
|
|
270
|
+
case 'delete':
|
|
271
|
+
dispatch(deleteRecord$1(collectionName, event.record));
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}));
|
|
275
|
+
},
|
|
276
|
+
unsubscribe: collectionName => {
|
|
277
|
+
if (collectionName) {
|
|
278
|
+
client == null ? void 0 : client.realtime.unsubscribe(collectionName);
|
|
279
|
+
} else {
|
|
280
|
+
client == null ? void 0 : client.realtime.unsubscribe();
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
fetch: async collectionName => {
|
|
284
|
+
const records = await (client == null ? void 0 : client.records.getFullList(collectionName, 200));
|
|
285
|
+
dispatch(setRecords(collectionName, records));
|
|
286
|
+
},
|
|
287
|
+
create: async (collectionName, record) => {
|
|
288
|
+
await (client == null ? void 0 : client.records.create(collectionName, record));
|
|
289
|
+
},
|
|
290
|
+
update: async (collectionName, recordId, record) => {
|
|
291
|
+
await (client == null ? void 0 : client.records.update(collectionName, recordId, record));
|
|
292
|
+
},
|
|
293
|
+
delete: async (collectionName, recordId) => {
|
|
294
|
+
await (client == null ? void 0 : client.records.delete(collectionName, recordId));
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
React.useEffect(() => {
|
|
298
|
+
if (collections) {
|
|
299
|
+
collections.forEach(collectionName => {
|
|
300
|
+
actions.fetch(collectionName);
|
|
301
|
+
actions.subscribe(collectionName);
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
return () => actions.unsubscribe();
|
|
306
|
+
}, [collections]);
|
|
307
|
+
return /*#__PURE__*/React__namespace.createElement(ContentContext.Provider, {
|
|
308
|
+
value: actions
|
|
309
|
+
}, props.children);
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
const ClientContext = React.createContext(null);
|
|
313
|
+
const ClientProvider = props => {
|
|
314
|
+
return /*#__PURE__*/React__namespace.createElement(ClientContext.Provider, {
|
|
315
|
+
value: props.client
|
|
316
|
+
}, props.children);
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
320
|
+
|
|
321
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
322
|
+
|
|
323
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
324
|
+
|
|
325
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
326
|
+
|
|
327
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
328
|
+
|
|
329
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
330
|
+
|
|
331
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
332
|
+
|
|
333
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
334
|
+
|
|
335
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
336
|
+
|
|
337
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
338
|
+
|
|
339
|
+
var PersistGate =
|
|
340
|
+
/*#__PURE__*/
|
|
341
|
+
function (_PureComponent) {
|
|
342
|
+
_inherits(PersistGate, _PureComponent);
|
|
343
|
+
|
|
344
|
+
function PersistGate() {
|
|
345
|
+
var _getPrototypeOf2;
|
|
346
|
+
|
|
347
|
+
var _this;
|
|
348
|
+
|
|
349
|
+
_classCallCheck(this, PersistGate);
|
|
350
|
+
|
|
351
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
352
|
+
args[_key] = arguments[_key];
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
_this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(PersistGate)).call.apply(_getPrototypeOf2, [this].concat(args)));
|
|
356
|
+
|
|
357
|
+
_defineProperty(_assertThisInitialized(_this), "state", {
|
|
358
|
+
bootstrapped: false
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
_defineProperty(_assertThisInitialized(_this), "_unsubscribe", void 0);
|
|
362
|
+
|
|
363
|
+
_defineProperty(_assertThisInitialized(_this), "handlePersistorState", function () {
|
|
364
|
+
var persistor = _this.props.persistor;
|
|
365
|
+
|
|
366
|
+
var _persistor$getState = persistor.getState(),
|
|
367
|
+
bootstrapped = _persistor$getState.bootstrapped;
|
|
368
|
+
|
|
369
|
+
if (bootstrapped) {
|
|
370
|
+
if (_this.props.onBeforeLift) {
|
|
371
|
+
Promise.resolve(_this.props.onBeforeLift()).finally(function () {
|
|
372
|
+
return _this.setState({
|
|
373
|
+
bootstrapped: true
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
} else {
|
|
377
|
+
_this.setState({
|
|
378
|
+
bootstrapped: true
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
_this._unsubscribe && _this._unsubscribe();
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
return _this;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
_createClass(PersistGate, [{
|
|
390
|
+
key: "componentDidMount",
|
|
391
|
+
value: function componentDidMount() {
|
|
392
|
+
this._unsubscribe = this.props.persistor.subscribe(this.handlePersistorState);
|
|
393
|
+
this.handlePersistorState();
|
|
394
|
+
}
|
|
395
|
+
}, {
|
|
396
|
+
key: "componentWillUnmount",
|
|
397
|
+
value: function componentWillUnmount() {
|
|
398
|
+
this._unsubscribe && this._unsubscribe();
|
|
399
|
+
}
|
|
400
|
+
}, {
|
|
401
|
+
key: "render",
|
|
402
|
+
value: function render() {
|
|
403
|
+
{
|
|
404
|
+
if (typeof this.props.children === 'function' && this.props.loading) console.error('redux-persist: PersistGate expects either a function child or loading prop, but not both. The loading prop will be ignored.');
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (typeof this.props.children === 'function') {
|
|
408
|
+
return this.props.children(this.state.bootstrapped);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
return this.state.bootstrapped ? this.props.children : this.props.loading;
|
|
412
|
+
}
|
|
413
|
+
}]);
|
|
414
|
+
|
|
415
|
+
return PersistGate;
|
|
416
|
+
}(React.PureComponent);
|
|
417
|
+
|
|
418
|
+
_defineProperty(PersistGate, "defaultProps", {
|
|
419
|
+
children: null,
|
|
420
|
+
loading: null
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
const PocketbaseContext = React.createContext(null);
|
|
424
|
+
const Pocketbase = props => {
|
|
425
|
+
const [client, setClient] = React__namespace.useState(null);
|
|
426
|
+
React.useEffect(() => {
|
|
427
|
+
const client = new PocketBase__default["default"](props.serverURL);
|
|
428
|
+
client.admins.authViaEmail(props.credentials.username, props.credentials.password).then(() => {
|
|
429
|
+
setClient(client);
|
|
430
|
+
console.log('Pocketbase client initialized');
|
|
431
|
+
});
|
|
432
|
+
}, [props.serverURL]);
|
|
433
|
+
return client ? /*#__PURE__*/React__namespace.createElement(ClientProvider, {
|
|
434
|
+
client: client
|
|
435
|
+
}, /*#__PURE__*/React__namespace.createElement(reactRedux.Provider, {
|
|
436
|
+
store: store
|
|
437
|
+
}, /*#__PURE__*/React__namespace.createElement(PersistGate, {
|
|
438
|
+
persistor: persistor
|
|
439
|
+
}, /*#__PURE__*/React__namespace.createElement(ContentProvider, {
|
|
440
|
+
collections: props.initialCollections
|
|
441
|
+
}, props.children)))) : null;
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
function useAppContent(collectionName, initialFetch = false) {
|
|
445
|
+
var _store$useAppSelector;
|
|
446
|
+
|
|
447
|
+
const records = (_store$useAppSelector = useAppSelector(state => state.reducer.records[collectionName])) != null ? _store$useAppSelector : [];
|
|
448
|
+
const context = React.useContext(ContentContext);
|
|
449
|
+
React.useEffect(() => {
|
|
450
|
+
if (initialFetch) {
|
|
451
|
+
context == null ? void 0 : context.fetch(collectionName);
|
|
452
|
+
}
|
|
453
|
+
}, [collectionName, initialFetch]);
|
|
454
|
+
const actions = {
|
|
455
|
+
subscribe: async () => await (context == null ? void 0 : context.subscribe(collectionName)),
|
|
456
|
+
unsubscribe: () => context == null ? void 0 : context.unsubscribe(collectionName),
|
|
457
|
+
refetch: async () => await (context == null ? void 0 : context.fetch(collectionName)),
|
|
458
|
+
create: async record => await (context == null ? void 0 : context.create(collectionName, record)),
|
|
459
|
+
update: async (id, record) => await (context == null ? void 0 : context.update(collectionName, id, record)),
|
|
460
|
+
delete: async id => await (context == null ? void 0 : context.delete(collectionName, id))
|
|
461
|
+
};
|
|
462
|
+
return {
|
|
463
|
+
records,
|
|
464
|
+
actions
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
exports.ADD_RECORD = ADD_RECORD;
|
|
469
|
+
exports.ADD_RECORDS = ADD_RECORDS;
|
|
470
|
+
exports.ClientContext = ClientContext;
|
|
471
|
+
exports.ClientProvider = ClientProvider;
|
|
472
|
+
exports.ContentContext = ContentContext;
|
|
473
|
+
exports.ContentProvider = ContentProvider;
|
|
474
|
+
exports.DELETE_RECORD = DELETE_RECORD;
|
|
475
|
+
exports.DELETE_RECORDS = DELETE_RECORDS;
|
|
476
|
+
exports.Pocketbase = Pocketbase;
|
|
477
|
+
exports.PocketbaseContext = PocketbaseContext;
|
|
478
|
+
exports.SET_RECORDS = SET_RECORDS;
|
|
479
|
+
exports.UPDATE_RECORD = UPDATE_RECORD;
|
|
480
|
+
exports.appReducer = appReducer;
|
|
481
|
+
exports.persistConfig = persistConfig;
|
|
482
|
+
exports.persistor = persistor;
|
|
483
|
+
exports.recordsAction = records$1;
|
|
484
|
+
exports.store = store;
|
|
485
|
+
exports.useAppContent = useAppContent;
|
|
486
|
+
exports.useAppDispatch = useAppDispatch;
|
|
487
|
+
exports.useAppSelector = useAppSelector;
|
|
488
|
+
exports.useClientContext = useClientContext;
|
|
489
|
+
|
|
490
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
491
|
+
|
|
492
|
+
}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("redux"),require("@reduxjs/toolkit"),require("redux-persist"),require("react-redux"),require("@react-native-async-storage/async-storage"),require("pocketbase")):"function"==typeof define&&define.amd?define(["exports","react","redux","@reduxjs/toolkit","redux-persist","react-redux","@react-native-async-storage/async-storage","pocketbase"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PocketbaseReact={},e.React,e.redux,e.toolkit,e.reduxPersist,e.reactRedux,e.AsyncStorage,e.Pocketbase)}(this,(function(e,t,r,n,o,a,i,c){"use strict";function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var l=s(t),d=u(i),p=u(c);const f="SET_RECORDS",y="ADD_RECORD",b="ADD_RECORDS",v="UPDATE_RECORD",h="DELETE_RECORD",m="DELETE_RECORDS",g=(e,t)=>({type:f,key:e,payload:t}),E=(e,t)=>({type:y,key:e,payload:t}),R=(e,t)=>({type:h,key:e,payload:t}),O=(e,t)=>({type:v,key:e,payload:t});var _=Object.freeze({__proto__:null,setRecords:g,addRecord:E,addRecords:(e,t)=>({type:b,key:e,payload:t}),deleteRecord:R,deleteRecords:(e,t)=>({type:m,key:e,payload:t}),updateRecord:O});function k(){return k=Object.assign?Object.assign.bind():function(e){for(var t=1;arguments.length>t;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},k.apply(this,arguments)}function w(e,t){return[...t,e]}function C(e,t){return[...t,...e]}function S(e,t){return t.map((t=>t.id===e.id?e:t))}function D(e,t){return t.filter((t=>t.id!==e.id))}function P(e,t){return t.filter((t=>!e.includes(t)))}const x=r.combineReducers({records:(e={},t)=>{var r;const n=null!=(r=e[t.key])?r:[];switch(t.type){case f:if(Array.isArray(t.payload))return k({},e,{[t.key]:t.payload});case y:return k({},e,{[t.key]:w(t.payload,n)});case b:return k({},e,{[t.key]:C(t.payload,n)});case h:return k({},e,{[t.key]:D(t.payload,n)});case m:return k({},e,{[t.key]:P(t.payload,n)});case v:return k({},e,{[t.key]:S(t.payload,n)});default:return e}}});function j(e){return function(t){var r=t.dispatch,n=t.getState;return function(t){return function(o){return"function"==typeof o?o(r,n,e):t(o)}}}}var A=j();A.withExtraArgument=j;var T=A;const I={key:"root",storage:{getItem:async(e,...t)=>"undefined"!=typeof document?(console.log("I'm on the web!"),localStorage.getItem(e)):"undefined"!=typeof navigator&&"ReactNative"===navigator.product?(console.log("I'm in react-native"),await d.default.getItem(e)):void 0,setItem:async(e,t,...r)=>"undefined"!=typeof document?localStorage.setItem(e,t):"undefined"!=typeof navigator&&"ReactNative"===navigator.product?await d.default.setItem(e,t):void 0,removeItem:async(e,...t)=>"undefined"!=typeof document?localStorage.removeItem(e):"undefined"!=typeof navigator&&"ReactNative"===navigator.product?await d.default.removeItem(e):void 0}},L=n.combineReducers({reducer:o.persistReducer(I,x)}),q=n.configureStore({reducer:L,middleware:[T]}),U=q.dispatch,z=a.useSelector,M=o.persistStore(q),N=()=>t.useContext(V),B=t.createContext(null),F=e=>{const r=N(),n=U,[o,a]=l.useState(e.collections||[]),i={subscribe:async e=>{await(null==r?void 0:r.realtime.subscribe(e,(t=>{switch(t.action){case"create":n(E(e,t.record));break;case"update":n(O(e,t.record));break;case"delete":n(R(e,t.record))}})))},unsubscribe:e=>{e?null==r||r.realtime.unsubscribe(e):null==r||r.realtime.unsubscribe()},fetch:async e=>{const t=await(null==r?void 0:r.records.getFullList(e,200));n(g(e,t))},create:async(e,t)=>{await(null==r?void 0:r.records.create(e,t))},update:async(e,t,n)=>{await(null==r?void 0:r.records.update(e,t,n))},delete:async(e,t)=>{await(null==r?void 0:r.records.delete(e,t))}};return t.useEffect((()=>(o&&o.forEach((e=>{i.fetch(e),i.subscribe(e)})),()=>i.unsubscribe())),[o]),l.createElement(B.Provider,{value:i},e.children)},V=t.createContext(null),W=e=>l.createElement(V.Provider,{value:e.client},e.children);function G(e){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},G(e)}function H(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function J(e,t){for(var r=0;t.length>r;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function K(e,t){return!t||"object"!==G(t)&&"function"!=typeof t?X(e):t}function Q(e){return Q=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},Q(e)}function X(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Y(e,t){return Y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Y(e,t)}function Z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var $=function(e){function t(){var e,r;H(this,t);for(var n=arguments.length,o=Array(n),a=0;n>a;a++)o[a]=arguments[a];return Z(X(r=K(this,(e=Q(t)).call.apply(e,[this].concat(o)))),"state",{bootstrapped:!1}),Z(X(r),"_unsubscribe",void 0),Z(X(r),"handlePersistorState",(function(){r.props.persistor.getState().bootstrapped&&(r.props.onBeforeLift?Promise.resolve(r.props.onBeforeLift()).finally((function(){return r.setState({bootstrapped:!0})})):r.setState({bootstrapped:!0}),r._unsubscribe&&r._unsubscribe())})),r}var r,n,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Y(e,t)}(t,e),r=t,(n=[{key:"componentDidMount",value:function(){this._unsubscribe=this.props.persistor.subscribe(this.handlePersistorState),this.handlePersistorState()}},{key:"componentWillUnmount",value:function(){this._unsubscribe&&this._unsubscribe()}},{key:"render",value:function(){return"function"==typeof this.props.children?this.props.children(this.state.bootstrapped):this.state.bootstrapped?this.props.children:this.props.loading}}])&&J(r.prototype,n),o&&J(r,o),t}(t.PureComponent);Z($,"defaultProps",{children:null,loading:null});const ee=t.createContext(null);e.ADD_RECORD=y,e.ADD_RECORDS=b,e.ClientContext=V,e.ClientProvider=W,e.ContentContext=B,e.ContentProvider=F,e.DELETE_RECORD=h,e.DELETE_RECORDS=m,e.Pocketbase=e=>{const[r,n]=l.useState(null);return t.useEffect((()=>{const t=new p.default(e.serverURL);t.admins.authViaEmail(e.credentials.username,e.credentials.password).then((()=>{n(t),console.log("Pocketbase client initialized")}))}),[e.serverURL]),r?l.createElement(W,{client:r},l.createElement(a.Provider,{store:q},l.createElement($,{persistor:M},l.createElement(F,{collections:e.initialCollections},e.children)))):null},e.PocketbaseContext=ee,e.SET_RECORDS=f,e.UPDATE_RECORD=v,e.appReducer=x,e.persistConfig=I,e.persistor=M,e.recordsAction=_,e.store=q,e.useAppContent=function(e,r=!1){var n;const o=null!=(n=z((t=>t.reducer.records[e])))?n:[],a=t.useContext(B);return t.useEffect((()=>{r&&(null==a||a.fetch(e))}),[e,r]),{records:o,actions:{subscribe:async()=>await(null==a?void 0:a.subscribe(e)),unsubscribe:()=>null==a?void 0:a.unsubscribe(e),refetch:async()=>await(null==a?void 0:a.fetch(e)),create:async t=>await(null==a?void 0:a.create(e,t)),update:async(t,r)=>await(null==a?void 0:a.update(e,t,r)),delete:async t=>await(null==a?void 0:a.delete(e,t))}}},e.useAppDispatch=U,e.useAppSelector=z,e.useClientContext=N,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import PocketBase from 'pocketbase
|
|
3
|
-
import { AsyncStorageStatic } from '@react-native-async-storage/async-storage';
|
|
2
|
+
import PocketBase from 'pocketbase';
|
|
4
3
|
export declare const PocketbaseContext: React.Context<PocketBase | null>;
|
|
5
4
|
export declare type PocketbaseProviderProps = {
|
|
6
5
|
children: React.ReactNode;
|
|
@@ -10,6 +9,5 @@ export declare type PocketbaseProviderProps = {
|
|
|
10
9
|
password: string;
|
|
11
10
|
};
|
|
12
11
|
initialCollections?: string[];
|
|
13
|
-
storage: AsyncStorageStatic;
|
|
14
12
|
};
|
|
15
13
|
export declare const Pocketbase: (props: PocketbaseProviderProps) => JSX.Element | null;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { createContext, useEffect } from 'react';
|
|
3
|
+
import PocketBase from 'pocketbase';
|
|
4
|
+
import { Provider } from 'react-redux';
|
|
5
|
+
import { PersistGate } from 'redux-persist/integration/react';
|
|
6
|
+
import * as store from '../store/store';
|
|
7
|
+
import { ClientProvider } from './client';
|
|
8
|
+
import { ContentProvider } from './content';
|
|
9
|
+
export const PocketbaseContext = createContext(null);
|
|
10
|
+
export const Pocketbase = props => {
|
|
11
|
+
const [client, setClient] = React.useState(null);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const client = new PocketBase(props.serverURL);
|
|
14
|
+
client.admins.authViaEmail(props.credentials.username, props.credentials.password).then(() => {
|
|
15
|
+
setClient(client);
|
|
16
|
+
console.log('Pocketbase client initialized');
|
|
17
|
+
});
|
|
18
|
+
}, [props.serverURL]);
|
|
19
|
+
return client ? /*#__PURE__*/React.createElement(ClientProvider, {
|
|
20
|
+
client: client
|
|
21
|
+
}, /*#__PURE__*/React.createElement(Provider, {
|
|
22
|
+
store: store.store
|
|
23
|
+
}, /*#__PURE__*/React.createElement(PersistGate, {
|
|
24
|
+
persistor: store.persistor
|
|
25
|
+
}, /*#__PURE__*/React.createElement(ContentProvider, {
|
|
26
|
+
collections: props.initialCollections
|
|
27
|
+
}, props.children)))) : null;
|
|
28
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import PocketBase from 'pocketbase
|
|
2
|
+
import PocketBase from 'pocketbase';
|
|
3
3
|
export declare const ClientContext: React.Context<PocketBase | null>;
|
|
4
4
|
export declare type ClientProviderProps = {
|
|
5
5
|
children: React.ReactNode;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { createContext } from 'react';
|
|
3
|
+
export const ClientContext = createContext(null);
|
|
4
|
+
export const ClientProvider = props => {
|
|
5
|
+
return /*#__PURE__*/React.createElement(ClientContext.Provider, {
|
|
6
|
+
value: props.client
|
|
7
|
+
}, props.children);
|
|
8
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as store from '../store/store';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { createContext, useEffect } from 'react';
|
|
4
|
+
import { useClientContext } from '../hooks/useClientContext';
|
|
5
|
+
import { recordsAction } from '../store/actions';
|
|
6
|
+
export const ContentContext = createContext(null);
|
|
7
|
+
export const ContentProvider = props => {
|
|
8
|
+
const client = useClientContext();
|
|
9
|
+
const dispatch = store.useAppDispatch;
|
|
10
|
+
const [collections, _] = React.useState(props.collections || []);
|
|
11
|
+
const actions = {
|
|
12
|
+
subscribe: async collectionName => {
|
|
13
|
+
// save local that collectionName should be subscribed
|
|
14
|
+
await (client == null ? void 0 : client.realtime.subscribe(collectionName, event => {
|
|
15
|
+
switch (event.action) {
|
|
16
|
+
case 'create':
|
|
17
|
+
dispatch(recordsAction.addRecord(collectionName, event.record));
|
|
18
|
+
break;
|
|
19
|
+
|
|
20
|
+
case 'update':
|
|
21
|
+
dispatch(recordsAction.updateRecord(collectionName, event.record));
|
|
22
|
+
break;
|
|
23
|
+
|
|
24
|
+
case 'delete':
|
|
25
|
+
dispatch(recordsAction.deleteRecord(collectionName, event.record));
|
|
26
|
+
break;
|
|
27
|
+
|
|
28
|
+
default:
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}));
|
|
32
|
+
},
|
|
33
|
+
unsubscribe: collectionName => {
|
|
34
|
+
if (collectionName) {
|
|
35
|
+
client == null ? void 0 : client.realtime.unsubscribe(collectionName);
|
|
36
|
+
} else {
|
|
37
|
+
client == null ? void 0 : client.realtime.unsubscribe();
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
fetch: async collectionName => {
|
|
41
|
+
const records = await (client == null ? void 0 : client.records.getFullList(collectionName, 200));
|
|
42
|
+
dispatch(recordsAction.setRecords(collectionName, records));
|
|
43
|
+
},
|
|
44
|
+
create: async (collectionName, record) => {
|
|
45
|
+
await (client == null ? void 0 : client.records.create(collectionName, record));
|
|
46
|
+
},
|
|
47
|
+
update: async (collectionName, recordId, record) => {
|
|
48
|
+
await (client == null ? void 0 : client.records.update(collectionName, recordId, record));
|
|
49
|
+
},
|
|
50
|
+
delete: async (collectionName, recordId) => {
|
|
51
|
+
await (client == null ? void 0 : client.records.delete(collectionName, recordId));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (collections) {
|
|
56
|
+
collections.forEach(collectionName => {
|
|
57
|
+
actions.fetch(collectionName);
|
|
58
|
+
actions.subscribe(collectionName);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return () => actions.unsubscribe();
|
|
63
|
+
}, [collections]);
|
|
64
|
+
return /*#__PURE__*/React.createElement(ContentContext.Provider, {
|
|
65
|
+
value: actions
|
|
66
|
+
}, props.children);
|
|
67
|
+
};
|
|
File without changes
|