pocketbase-react 0.1.1 → 0.1.3
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 +3 -1
- package/README.md +15 -0
- package/dist/pocketbase-react.js +464 -0
- package/dist/pocketbase-react.min.js +1 -0
- package/{dist/esm → es}/context/Pocketbase.d.ts +1 -3
- package/es/context/Pocketbase.js +27 -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 +63 -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 +25 -0
- package/es/hooks/useClientContext.d.ts +2 -0
- package/es/hooks/useClientContext.js +7 -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 +32 -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 +56 -0
- package/{dist/cjs → es}/store/store.d.ts +0 -0
- package/es/store/store.js +44 -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 +35 -0
- package/lib/context/client.js +15 -0
- package/lib/context/content.js +70 -0
- package/lib/context/index.js +36 -0
- package/lib/hooks/index.js +25 -0
- package/lib/hooks/useAppContent.js +31 -0
- package/lib/hooks/useClientContext.js +11 -0
- package/lib/index.js +47 -0
- package/lib/interfaces/Record.js +1 -0
- package/lib/interfaces/index.js +14 -0
- package/lib/store/actions/index.js +8 -0
- package/lib/store/actions/records.js +43 -0
- package/lib/store/index.js +47 -0
- package/lib/store/reducers/index.js +10 -0
- package/lib/store/reducers/records.js +64 -0
- package/lib/store/store.js +53 -0
- package/lib/store/types/index.js +16 -0
- package/package.json +94 -35
- package/src/context/Pocketbase.tsx +42 -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 +65 -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 -3478
- 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 -3433
- 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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Record } from '../../interfaces/Record';
|
|
2
|
+
import * as ReduxType from '../types';
|
|
3
|
+
|
|
4
|
+
export interface ReduxRecord {
|
|
5
|
+
[key: string]: Record[];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type RecordAction = {
|
|
9
|
+
type: ReduxType.Types;
|
|
10
|
+
key: string;
|
|
11
|
+
payload: null | Record | Record[];
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
function appendRecord(record: Record, records: Record[]): Record[] {
|
|
15
|
+
return [...records, record];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function appendRecords(recordsToAppend: Record[], records: Record[]): Record[] {
|
|
19
|
+
return [...records, ...recordsToAppend];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function updateRecord(record: Record, records: Record[]): Record[] {
|
|
23
|
+
return records.map((r) => {
|
|
24
|
+
if (r.id === record.id) {
|
|
25
|
+
return record;
|
|
26
|
+
}
|
|
27
|
+
return r;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function deleteRecord(record: Record, records: Record[]): Record[] {
|
|
32
|
+
return records.filter((r) => r.id !== record.id);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function deleteRecords(recordsToDelete: Record[], records: Record[]): Record[] {
|
|
36
|
+
return records.filter((r) => !recordsToDelete.includes(r));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const records = (state: ReduxRecord = {}, action: RecordAction) => {
|
|
40
|
+
const list = state[action.key] ?? [];
|
|
41
|
+
|
|
42
|
+
switch (action.type) {
|
|
43
|
+
case ReduxType.SET_RECORDS:
|
|
44
|
+
if (Array.isArray(action.payload)) {
|
|
45
|
+
return {
|
|
46
|
+
...state,
|
|
47
|
+
[action.key]: action.payload,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
case ReduxType.ADD_RECORD:
|
|
51
|
+
return {
|
|
52
|
+
...state,
|
|
53
|
+
[action.key]: appendRecord(action.payload as Record, list),
|
|
54
|
+
};
|
|
55
|
+
case ReduxType.ADD_RECORDS:
|
|
56
|
+
return {
|
|
57
|
+
...state,
|
|
58
|
+
[action.key]: appendRecords(action.payload as Record[], list),
|
|
59
|
+
};
|
|
60
|
+
case ReduxType.DELETE_RECORD:
|
|
61
|
+
return {
|
|
62
|
+
...state,
|
|
63
|
+
[action.key]: deleteRecord(action.payload as Record, list),
|
|
64
|
+
};
|
|
65
|
+
case ReduxType.DELETE_RECORDS:
|
|
66
|
+
return {
|
|
67
|
+
...state,
|
|
68
|
+
[action.key]: deleteRecords(action.payload as Record[], list),
|
|
69
|
+
};
|
|
70
|
+
case ReduxType.UPDATE_RECORD:
|
|
71
|
+
return {
|
|
72
|
+
...state,
|
|
73
|
+
[action.key]: updateRecord(action.payload as Record, list),
|
|
74
|
+
};
|
|
75
|
+
default:
|
|
76
|
+
return state;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { combineReducers, configureStore } from '@reduxjs/toolkit';
|
|
2
|
+
import { persistStore, persistReducer } from 'redux-persist';
|
|
3
|
+
import { TypedUseSelectorHook, useSelector } from 'react-redux';
|
|
4
|
+
import { appReducer } from './reducers';
|
|
5
|
+
import thunk from 'redux-thunk';
|
|
6
|
+
import { RecordAction } from './reducers/records';
|
|
7
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
8
|
+
|
|
9
|
+
interface Storage {
|
|
10
|
+
getItem(key: string, ...args: Array<any>): any;
|
|
11
|
+
setItem(key: string, value: any, ...args: Array<any>): any;
|
|
12
|
+
removeItem(key: string, ...args: Array<any>): any;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
const CustomStorage: Storage = {
|
|
17
|
+
getItem: async (_key: string, ..._args: Array<any>) => {
|
|
18
|
+
if (typeof document !== 'undefined') {
|
|
19
|
+
return localStorage.getItem(_key);
|
|
20
|
+
}
|
|
21
|
+
else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
|
22
|
+
return await AsyncStorage.getItem(_key);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
setItem: async (_key: string, _value: any, ..._args: Array<any>) => {
|
|
26
|
+
if (typeof document !== 'undefined') {
|
|
27
|
+
return localStorage.setItem(_key, _value);
|
|
28
|
+
}
|
|
29
|
+
else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
|
30
|
+
return await AsyncStorage.setItem(_key, _value);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
removeItem: async (_key: string, ..._args: Array<any>) => {
|
|
34
|
+
if (typeof document !== 'undefined') {
|
|
35
|
+
return localStorage.removeItem(_key);
|
|
36
|
+
}
|
|
37
|
+
else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
|
38
|
+
return await AsyncStorage.removeItem(_key);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const persistConfig = {
|
|
44
|
+
key: 'root',
|
|
45
|
+
storage: CustomStorage
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const reducer = combineReducers({
|
|
49
|
+
reducer: persistReducer(persistConfig, appReducer),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
const store = configureStore({
|
|
53
|
+
reducer,
|
|
54
|
+
middleware: [thunk],
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
type AppDispatch = typeof store.dispatch<RecordAction>;
|
|
58
|
+
const useAppDispatch = store.dispatch;
|
|
59
|
+
type RootState = ReturnType<typeof store.getState>;
|
|
60
|
+
const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
const persistor = persistStore(store);
|
|
64
|
+
|
|
65
|
+
export { AppDispatch, RootState, useAppDispatch, useAppSelector, store, persistor };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const SET_RECORDS = 'SET_RECORDS';
|
|
2
|
+
export const ADD_RECORD = 'ADD_RECORD';
|
|
3
|
+
export const ADD_RECORDS = 'ADD_RECORDS';
|
|
4
|
+
export const UPDATE_RECORD = 'UPDATE_RECORD';
|
|
5
|
+
export const DELETE_RECORD = 'DELETE_RECORD';
|
|
6
|
+
export const DELETE_RECORDS = 'DELETE_RECORDS';
|
|
7
|
+
|
|
8
|
+
export type Types =
|
|
9
|
+
| typeof SET_RECORDS
|
|
10
|
+
| typeof ADD_RECORD
|
|
11
|
+
| typeof ADD_RECORDS
|
|
12
|
+
| typeof UPDATE_RECORD
|
|
13
|
+
| typeof DELETE_RECORD
|
|
14
|
+
| typeof DELETE_RECORDS;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
declare var Source: any;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import PocketBase from 'pocketbase/dist/pocketbase.cjs';
|
|
3
|
-
import { AsyncStorageStatic } from '@react-native-async-storage/async-storage';
|
|
4
|
-
export declare const PocketbaseContext: React.Context<PocketBase | null>;
|
|
5
|
-
export declare type PocketbaseProviderProps = {
|
|
6
|
-
children: React.ReactNode;
|
|
7
|
-
serverURL: string;
|
|
8
|
-
credentials: {
|
|
9
|
-
username: string;
|
|
10
|
-
password: string;
|
|
11
|
-
};
|
|
12
|
-
initialCollections?: string[];
|
|
13
|
-
storage: AsyncStorageStatic;
|
|
14
|
-
};
|
|
15
|
-
export declare const Pocketbase: (props: PocketbaseProviderProps) => JSX.Element | null;
|