@mustafaaksoy41/react-native-offline-queue 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/LICENSE +21 -0
- package/README.md +673 -0
- package/lib/commonjs/adapters/index.js +128 -0
- package/lib/commonjs/adapters/index.js.map +1 -0
- package/lib/commonjs/components/OfflineProvider.js +51 -0
- package/lib/commonjs/components/OfflineProvider.js.map +1 -0
- package/lib/commonjs/components/OfflineSyncPrompt.js +37 -0
- package/lib/commonjs/components/OfflineSyncPrompt.js.map +1 -0
- package/lib/commonjs/core/OfflineManager.js +308 -0
- package/lib/commonjs/core/OfflineManager.js.map +1 -0
- package/lib/commonjs/core/StorageAdapter.js +31 -0
- package/lib/commonjs/core/StorageAdapter.js.map +1 -0
- package/lib/commonjs/core/types.js +15 -0
- package/lib/commonjs/core/types.js.map +1 -0
- package/lib/commonjs/global.d.js +2 -0
- package/lib/commonjs/global.d.js.map +1 -0
- package/lib/commonjs/hooks/useOfflineMutation.js +61 -0
- package/lib/commonjs/hooks/useOfflineMutation.js.map +1 -0
- package/lib/commonjs/hooks/useOfflineQueue.js +21 -0
- package/lib/commonjs/hooks/useOfflineQueue.js.map +1 -0
- package/lib/commonjs/hooks/useOfflineSyncInterceptor.js +42 -0
- package/lib/commonjs/hooks/useOfflineSyncInterceptor.js.map +1 -0
- package/lib/commonjs/hooks/useSyncProgress.js +33 -0
- package/lib/commonjs/hooks/useSyncProgress.js.map +1 -0
- package/lib/commonjs/index.js +134 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/module/adapters/index.js +121 -0
- package/lib/module/adapters/index.js.map +1 -0
- package/lib/module/components/OfflineProvider.js +43 -0
- package/lib/module/components/OfflineProvider.js.map +1 -0
- package/lib/module/components/OfflineSyncPrompt.js +31 -0
- package/lib/module/components/OfflineSyncPrompt.js.map +1 -0
- package/lib/module/core/OfflineManager.js +304 -0
- package/lib/module/core/OfflineManager.js.map +1 -0
- package/lib/module/core/StorageAdapter.js +25 -0
- package/lib/module/core/StorageAdapter.js.map +1 -0
- package/lib/module/core/types.js +11 -0
- package/lib/module/core/types.js.map +1 -0
- package/lib/module/global.d.js +2 -0
- package/lib/module/global.d.js.map +1 -0
- package/lib/module/hooks/useOfflineMutation.js +57 -0
- package/lib/module/hooks/useOfflineMutation.js.map +1 -0
- package/lib/module/hooks/useOfflineQueue.js +17 -0
- package/lib/module/hooks/useOfflineQueue.js.map +1 -0
- package/lib/module/hooks/useOfflineSyncInterceptor.js +38 -0
- package/lib/module/hooks/useOfflineSyncInterceptor.js.map +1 -0
- package/lib/module/hooks/useSyncProgress.js +29 -0
- package/lib/module/hooks/useSyncProgress.js.map +1 -0
- package/lib/module/index.js +20 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/adapters/index.d.ts +12 -0
- package/lib/typescript/adapters/index.d.ts.map +1 -0
- package/lib/typescript/components/OfflineProvider.d.ts +13 -0
- package/lib/typescript/components/OfflineProvider.d.ts.map +1 -0
- package/lib/typescript/components/OfflineSyncPrompt.d.ts +11 -0
- package/lib/typescript/components/OfflineSyncPrompt.d.ts.map +1 -0
- package/lib/typescript/core/OfflineManager.d.ts +53 -0
- package/lib/typescript/core/OfflineManager.d.ts.map +1 -0
- package/lib/typescript/core/StorageAdapter.d.ts +21 -0
- package/lib/typescript/core/StorageAdapter.d.ts.map +1 -0
- package/lib/typescript/core/types.d.ts +23 -0
- package/lib/typescript/core/types.d.ts.map +1 -0
- package/lib/typescript/hooks/useOfflineMutation.d.ts +8 -0
- package/lib/typescript/hooks/useOfflineMutation.d.ts.map +1 -0
- package/lib/typescript/hooks/useOfflineQueue.d.ts +8 -0
- package/lib/typescript/hooks/useOfflineQueue.d.ts.map +1 -0
- package/lib/typescript/hooks/useOfflineSyncInterceptor.d.ts +9 -0
- package/lib/typescript/hooks/useOfflineSyncInterceptor.d.ts.map +1 -0
- package/lib/typescript/hooks/useSyncProgress.d.ts +23 -0
- package/lib/typescript/hooks/useSyncProgress.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +11 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/package.json +73 -0
- package/src/adapters/index.ts +141 -0
- package/src/components/OfflineProvider.tsx +52 -0
- package/src/components/OfflineSyncPrompt.tsx +32 -0
- package/src/core/OfflineManager.ts +338 -0
- package/src/core/StorageAdapter.ts +42 -0
- package/src/core/types.ts +33 -0
- package/src/global.d.ts +1 -0
- package/src/hooks/useOfflineMutation.ts +63 -0
- package/src/hooks/useOfflineQueue.ts +17 -0
- package/src/hooks/useOfflineSyncInterceptor.ts +39 -0
- package/src/hooks/useSyncProgress.ts +32 -0
- package/src/index.ts +17 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useOfflineMutation = useOfflineMutation;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _OfflineManager = require("../core/OfflineManager");
|
|
9
|
+
var _OfflineProvider = require("../components/OfflineProvider");
|
|
10
|
+
function useOfflineMutation(actionName, options) {
|
|
11
|
+
const {
|
|
12
|
+
isOnline
|
|
13
|
+
} = (0, _OfflineProvider.useNetworkStatus)();
|
|
14
|
+
const handlerRef = (0, _react.useRef)(options?.handler);
|
|
15
|
+
handlerRef.current = options?.handler;
|
|
16
|
+
|
|
17
|
+
// Register per-action handler (persists even after unmount)
|
|
18
|
+
(0, _react.useEffect)(() => {
|
|
19
|
+
if (handlerRef.current) {
|
|
20
|
+
_OfflineManager.OfflineManager.registerHandler(actionName, payload => handlerRef.current(payload));
|
|
21
|
+
}
|
|
22
|
+
}, [actionName]);
|
|
23
|
+
const mutateOffline = async payload => {
|
|
24
|
+
// Resolve which handler to use: per-action handler > global onSyncAction
|
|
25
|
+
const handler = handlerRef.current || _OfflineManager.OfflineManager.getHandler(actionName);
|
|
26
|
+
const globalHandler = _OfflineManager.OfflineManager.onSyncAction;
|
|
27
|
+
const hasHandler = handler || globalHandler;
|
|
28
|
+
if (isOnline && hasHandler) {
|
|
29
|
+
// ── ONLINE: Execute directly, skip the queue ──
|
|
30
|
+
if (__DEV__) console.log(`[OfflineQueue] mutate: ${actionName} (direct)`);
|
|
31
|
+
try {
|
|
32
|
+
if (handler) {
|
|
33
|
+
await handler(payload);
|
|
34
|
+
} else if (globalHandler) {
|
|
35
|
+
await globalHandler({
|
|
36
|
+
id: '',
|
|
37
|
+
actionName,
|
|
38
|
+
payload,
|
|
39
|
+
createdAt: Date.now(),
|
|
40
|
+
retryCount: 0
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
options?.onOptimisticSuccess?.(payload);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
console.warn(`[OfflineQueue] mutate: ${actionName} failed, falling back to queue`, error);
|
|
46
|
+
await _OfflineManager.OfflineManager.push(actionName, payload);
|
|
47
|
+
options?.onOptimisticSuccess?.(payload);
|
|
48
|
+
options?.onError?.(error, payload);
|
|
49
|
+
}
|
|
50
|
+
} else {
|
|
51
|
+
// ── OFFLINE: Add to queue + optimistic update ──
|
|
52
|
+
if (__DEV__) console.log(`[OfflineQueue] mutate: ${actionName} (queued)`);
|
|
53
|
+
await _OfflineManager.OfflineManager.push(actionName, payload);
|
|
54
|
+
options?.onOptimisticSuccess?.(payload);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
mutateOffline
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=useOfflineMutation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_OfflineManager","_OfflineProvider","useOfflineMutation","actionName","options","isOnline","useNetworkStatus","handlerRef","useRef","handler","current","useEffect","OfflineManager","registerHandler","payload","mutateOffline","getHandler","globalHandler","onSyncAction","hasHandler","__DEV__","console","log","id","createdAt","Date","now","retryCount","onOptimisticSuccess","error","warn","push","onError"],"sourceRoot":"../../../src","sources":["hooks/useOfflineMutation.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAEO,SAASG,kBAAkBA,CAChCC,UAAkB,EAClBC,OAIC,EACD;EACA,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAC,iCAAgB,EAAC,CAAC;EACvC,MAAMC,UAAU,GAAG,IAAAC,aAAM,EAACJ,OAAO,EAAEK,OAAO,CAAC;EAC3CF,UAAU,CAACG,OAAO,GAAGN,OAAO,EAAEK,OAAO;;EAErC;EACA,IAAAE,gBAAS,EAAC,MAAM;IACd,IAAIJ,UAAU,CAACG,OAAO,EAAE;MACtBE,8BAAc,CAACC,eAAe,CAACV,UAAU,EAAGW,OAAY,IACtDP,UAAU,CAACG,OAAO,CAAEI,OAAO,CAC7B,CAAC;IACH;EACF,CAAC,EAAE,CAACX,UAAU,CAAC,CAAC;EAEhB,MAAMY,aAAa,GAAG,MAAOD,OAAiB,IAAK;IACjD;IACA,MAAML,OAAO,GAAGF,UAAU,CAACG,OAAO,IAAIE,8BAAc,CAACI,UAAU,CAACb,UAAU,CAAC;IAC3E,MAAMc,aAAa,GAAGL,8BAAc,CAACM,YAAY;IACjD,MAAMC,UAAU,GAAGV,OAAO,IAAIQ,aAAa;IAE3C,IAAIZ,QAAQ,IAAIc,UAAU,EAAE;MAC1B;MACA,IAAIC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAAC,0BAA0BnB,UAAU,WAAW,CAAC;MACzE,IAAI;QACF,IAAIM,OAAO,EAAE;UACX,MAAMA,OAAO,CAACK,OAAO,CAAC;QACxB,CAAC,MAAM,IAAIG,aAAa,EAAE;UACxB,MAAMA,aAAa,CAAC;YAClBM,EAAE,EAAE,EAAE;YACNpB,UAAU;YACVW,OAAO;YACPU,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;YACrBC,UAAU,EAAE;UACd,CAAC,CAAC;QACJ;QACAvB,OAAO,EAAEwB,mBAAmB,GAAGd,OAAO,CAAC;MACzC,CAAC,CAAC,OAAOe,KAAU,EAAE;QACnBR,OAAO,CAACS,IAAI,CAAC,0BAA0B3B,UAAU,gCAAgC,EAAE0B,KAAK,CAAC;QACzF,MAAMjB,8BAAc,CAACmB,IAAI,CAAC5B,UAAU,EAAEW,OAAO,CAAC;QAC9CV,OAAO,EAAEwB,mBAAmB,GAAGd,OAAO,CAAC;QACvCV,OAAO,EAAE4B,OAAO,GAAGH,KAAK,EAAEf,OAAO,CAAC;MACpC;IACF,CAAC,MAAM;MACL;MACA,IAAIM,OAAO,EAAEC,OAAO,CAACC,GAAG,CAAC,0BAA0BnB,UAAU,WAAW,CAAC;MACzE,MAAMS,8BAAc,CAACmB,IAAI,CAAC5B,UAAU,EAAEW,OAAO,CAAC;MAC9CV,OAAO,EAAEwB,mBAAmB,GAAGd,OAAO,CAAC;IACzC;EACF,CAAC;EAED,OAAO;IAAEC;EAAc,CAAC;AAC1B","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useOfflineQueue = useOfflineQueue;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _OfflineManager = require("../core/OfflineManager");
|
|
9
|
+
const subscribe = listener => _OfflineManager.OfflineManager.subscribe(listener);
|
|
10
|
+
const getSnapshot = () => _OfflineManager.OfflineManager.getQueue();
|
|
11
|
+
function useOfflineQueue() {
|
|
12
|
+
const queue = (0, _react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
13
|
+
return {
|
|
14
|
+
queue,
|
|
15
|
+
pendingCount: queue.length,
|
|
16
|
+
isSyncing: _OfflineManager.OfflineManager.isSyncing,
|
|
17
|
+
syncNow: () => _OfflineManager.OfflineManager.flushQueue(),
|
|
18
|
+
clearQueue: () => _OfflineManager.OfflineManager.clear()
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=useOfflineQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_OfflineManager","subscribe","listener","OfflineManager","getSnapshot","getQueue","useOfflineQueue","queue","useSyncExternalStore","pendingCount","length","isSyncing","syncNow","flushQueue","clearQueue","clear"],"sourceRoot":"../../../src","sources":["hooks/useOfflineQueue.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAEA,MAAME,SAAS,GAAIC,QAAoB,IAAKC,8BAAc,CAACF,SAAS,CAACC,QAAQ,CAAC;AAC9E,MAAME,WAAW,GAAGA,CAAA,KAAMD,8BAAc,CAACE,QAAQ,CAAC,CAAC;AAE5C,SAASC,eAAeA,CAAA,EAAG;EAChC,MAAMC,KAAK,GAAG,IAAAC,2BAAoB,EAACP,SAAS,EAAEG,WAAW,EAAEA,WAAW,CAAC;EAEvE,OAAO;IACLG,KAAK;IACLE,YAAY,EAAEF,KAAK,CAACG,MAAM;IAC1BC,SAAS,EAAER,8BAAc,CAACQ,SAAS;IACnCC,OAAO,EAAEA,CAAA,KAAMT,8BAAc,CAACU,UAAU,CAAC,CAAC;IAC1CC,UAAU,EAAEA,CAAA,KAAMX,8BAAc,CAACY,KAAK,CAAC;EACzC,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useOfflineSyncInterceptor = useOfflineSyncInterceptor;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _OfflineProvider = require("../components/OfflineProvider");
|
|
9
|
+
var _useOfflineQueue = require("./useOfflineQueue");
|
|
10
|
+
function useOfflineSyncInterceptor({
|
|
11
|
+
onPromptNeeded
|
|
12
|
+
}) {
|
|
13
|
+
const {
|
|
14
|
+
isOnline
|
|
15
|
+
} = (0, _OfflineProvider.useNetworkStatus)();
|
|
16
|
+
const {
|
|
17
|
+
pendingCount,
|
|
18
|
+
syncNow,
|
|
19
|
+
clearQueue
|
|
20
|
+
} = (0, _useOfflineQueue.useOfflineQueue)();
|
|
21
|
+
const onPromptNeededRef = (0, _react.useRef)(onPromptNeeded);
|
|
22
|
+
(0, _react.useEffect)(() => {
|
|
23
|
+
onPromptNeededRef.current = onPromptNeeded;
|
|
24
|
+
});
|
|
25
|
+
const [hasPrompted, setHasPrompted] = (0, _react.useState)(false);
|
|
26
|
+
(0, _react.useEffect)(() => {
|
|
27
|
+
if (isOnline && pendingCount > 0 && !hasPrompted) {
|
|
28
|
+
setHasPrompted(true);
|
|
29
|
+
onPromptNeededRef.current({
|
|
30
|
+
pendingCount,
|
|
31
|
+
syncNow: async () => {
|
|
32
|
+
await syncNow();
|
|
33
|
+
},
|
|
34
|
+
discardQueue: clearQueue
|
|
35
|
+
});
|
|
36
|
+
} else if (!isOnline || pendingCount === 0) {
|
|
37
|
+
// Reset prompt state when offline or when queue is cleared
|
|
38
|
+
setHasPrompted(false);
|
|
39
|
+
}
|
|
40
|
+
}, [isOnline, pendingCount, hasPrompted, syncNow, clearQueue]);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=useOfflineSyncInterceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_OfflineProvider","_useOfflineQueue","useOfflineSyncInterceptor","onPromptNeeded","isOnline","useNetworkStatus","pendingCount","syncNow","clearQueue","useOfflineQueue","onPromptNeededRef","useRef","useEffect","current","hasPrompted","setHasPrompted","useState","discardQueue"],"sourceRoot":"../../../src","sources":["hooks/useOfflineSyncInterceptor.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAUO,SAASG,yBAAyBA,CAAC;EAAEC;AAAmC,CAAC,EAAE;EAChF,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAC,iCAAgB,EAAC,CAAC;EACvC,MAAM;IAAEC,YAAY;IAAEC,OAAO;IAAEC;EAAW,CAAC,GAAG,IAAAC,gCAAe,EAAC,CAAC;EAE/D,MAAMC,iBAAiB,GAAG,IAAAC,aAAM,EAACR,cAAc,CAAC;EAChD,IAAAS,gBAAS,EAAC,MAAM;IACdF,iBAAiB,CAACG,OAAO,GAAGV,cAAc;EAC5C,CAAC,CAAC;EAEF,MAAM,CAACW,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EAErD,IAAAJ,gBAAS,EAAC,MAAM;IACd,IAAIR,QAAQ,IAAIE,YAAY,GAAG,CAAC,IAAI,CAACQ,WAAW,EAAE;MAChDC,cAAc,CAAC,IAAI,CAAC;MACpBL,iBAAiB,CAACG,OAAO,CAAC;QACxBP,YAAY;QACZC,OAAO,EAAE,MAAAA,CAAA,KAAY;UACnB,MAAMA,OAAO,CAAC,CAAC;QACjB,CAAC;QACDU,YAAY,EAAET;MAChB,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,CAACJ,QAAQ,IAAIE,YAAY,KAAK,CAAC,EAAE;MAC1C;MACAS,cAAc,CAAC,KAAK,CAAC;IACvB;EACF,CAAC,EAAE,CAACX,QAAQ,EAAEE,YAAY,EAAEQ,WAAW,EAAEP,OAAO,EAAEC,UAAU,CAAC,CAAC;AAChE","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSyncProgress = useSyncProgress;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _OfflineManager = require("../core/OfflineManager");
|
|
9
|
+
const subscribeProgress = listener => _OfflineManager.OfflineManager.subscribeProgress(listener);
|
|
10
|
+
const getProgressSnapshot = () => _OfflineManager.OfflineManager.syncProgress;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Live sync progress tracker.
|
|
14
|
+
* Use this inside a BottomSheet, Modal, or any UI to show per-item sync status.
|
|
15
|
+
*
|
|
16
|
+
* Returns:
|
|
17
|
+
* - isActive: whether a sync session is currently running
|
|
18
|
+
* - totalCount: total items in this sync batch
|
|
19
|
+
* - completedCount: successfully synced so far
|
|
20
|
+
* - failedCount: items that failed
|
|
21
|
+
* - currentAction: the action currently being synced
|
|
22
|
+
* - items: full list with per-item status (pending | syncing | success | failed)
|
|
23
|
+
* - percentage: 0-100 completion percentage
|
|
24
|
+
*/
|
|
25
|
+
function useSyncProgress() {
|
|
26
|
+
const progress = (0, _react.useSyncExternalStore)(subscribeProgress, getProgressSnapshot, getProgressSnapshot);
|
|
27
|
+
const percentage = progress.totalCount > 0 ? Math.round((progress.completedCount + progress.failedCount) / progress.totalCount * 100) : 0;
|
|
28
|
+
return {
|
|
29
|
+
...progress,
|
|
30
|
+
percentage
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=useSyncProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_OfflineManager","subscribeProgress","listener","OfflineManager","getProgressSnapshot","syncProgress","useSyncProgress","progress","useSyncExternalStore","percentage","totalCount","Math","round","completedCount","failedCount"],"sourceRoot":"../../../src","sources":["hooks/useSyncProgress.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAEA,MAAME,iBAAiB,GAAIC,QAAoB,IAAKC,8BAAc,CAACF,iBAAiB,CAACC,QAAQ,CAAC;AAC9F,MAAME,mBAAmB,GAAGA,CAAA,KAAMD,8BAAc,CAACE,YAAY;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAAA,EAAG;EAChC,MAAMC,QAAQ,GAAG,IAAAC,2BAAoB,EAACP,iBAAiB,EAAEG,mBAAmB,EAAEA,mBAAmB,CAAC;EAElG,MAAMK,UAAU,GACdF,QAAQ,CAACG,UAAU,GAAG,CAAC,GACnBC,IAAI,CAACC,KAAK,CAAE,CAACL,QAAQ,CAACM,cAAc,GAAGN,QAAQ,CAACO,WAAW,IAAIP,QAAQ,CAACG,UAAU,GAAI,GAAG,CAAC,GAC1F,CAAC;EAEP,OAAO;IACL,GAAGH,QAAQ;IACXE;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
OfflineManager: true,
|
|
8
|
+
getMMKVAdapter: true,
|
|
9
|
+
getAsyncStorageAdapter: true,
|
|
10
|
+
getRealmAdapter: true
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "OfflineManager", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _OfflineManager.OfflineManager;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "getAsyncStorageAdapter", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _adapters.getAsyncStorageAdapter;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "getMMKVAdapter", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _adapters.getMMKVAdapter;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "getRealmAdapter", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _adapters.getRealmAdapter;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
var _types = require("./core/types");
|
|
37
|
+
Object.keys(_types).forEach(function (key) {
|
|
38
|
+
if (key === "default" || key === "__esModule") return;
|
|
39
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
40
|
+
if (key in exports && exports[key] === _types[key]) return;
|
|
41
|
+
Object.defineProperty(exports, key, {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
get: function () {
|
|
44
|
+
return _types[key];
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
var _StorageAdapter = require("./core/StorageAdapter");
|
|
49
|
+
Object.keys(_StorageAdapter).forEach(function (key) {
|
|
50
|
+
if (key === "default" || key === "__esModule") return;
|
|
51
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
52
|
+
if (key in exports && exports[key] === _StorageAdapter[key]) return;
|
|
53
|
+
Object.defineProperty(exports, key, {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
get: function () {
|
|
56
|
+
return _StorageAdapter[key];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
var _OfflineManager = require("./core/OfflineManager");
|
|
61
|
+
var _adapters = require("./adapters");
|
|
62
|
+
var _OfflineProvider = require("./components/OfflineProvider");
|
|
63
|
+
Object.keys(_OfflineProvider).forEach(function (key) {
|
|
64
|
+
if (key === "default" || key === "__esModule") return;
|
|
65
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
66
|
+
if (key in exports && exports[key] === _OfflineProvider[key]) return;
|
|
67
|
+
Object.defineProperty(exports, key, {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
get: function () {
|
|
70
|
+
return _OfflineProvider[key];
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
var _OfflineSyncPrompt = require("./components/OfflineSyncPrompt");
|
|
75
|
+
Object.keys(_OfflineSyncPrompt).forEach(function (key) {
|
|
76
|
+
if (key === "default" || key === "__esModule") return;
|
|
77
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
78
|
+
if (key in exports && exports[key] === _OfflineSyncPrompt[key]) return;
|
|
79
|
+
Object.defineProperty(exports, key, {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
get: function () {
|
|
82
|
+
return _OfflineSyncPrompt[key];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
var _useOfflineQueue = require("./hooks/useOfflineQueue");
|
|
87
|
+
Object.keys(_useOfflineQueue).forEach(function (key) {
|
|
88
|
+
if (key === "default" || key === "__esModule") return;
|
|
89
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
90
|
+
if (key in exports && exports[key] === _useOfflineQueue[key]) return;
|
|
91
|
+
Object.defineProperty(exports, key, {
|
|
92
|
+
enumerable: true,
|
|
93
|
+
get: function () {
|
|
94
|
+
return _useOfflineQueue[key];
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
var _useOfflineMutation = require("./hooks/useOfflineMutation");
|
|
99
|
+
Object.keys(_useOfflineMutation).forEach(function (key) {
|
|
100
|
+
if (key === "default" || key === "__esModule") return;
|
|
101
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
102
|
+
if (key in exports && exports[key] === _useOfflineMutation[key]) return;
|
|
103
|
+
Object.defineProperty(exports, key, {
|
|
104
|
+
enumerable: true,
|
|
105
|
+
get: function () {
|
|
106
|
+
return _useOfflineMutation[key];
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
var _useOfflineSyncInterceptor = require("./hooks/useOfflineSyncInterceptor");
|
|
111
|
+
Object.keys(_useOfflineSyncInterceptor).forEach(function (key) {
|
|
112
|
+
if (key === "default" || key === "__esModule") return;
|
|
113
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
114
|
+
if (key in exports && exports[key] === _useOfflineSyncInterceptor[key]) return;
|
|
115
|
+
Object.defineProperty(exports, key, {
|
|
116
|
+
enumerable: true,
|
|
117
|
+
get: function () {
|
|
118
|
+
return _useOfflineSyncInterceptor[key];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
var _useSyncProgress = require("./hooks/useSyncProgress");
|
|
123
|
+
Object.keys(_useSyncProgress).forEach(function (key) {
|
|
124
|
+
if (key === "default" || key === "__esModule") return;
|
|
125
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
126
|
+
if (key in exports && exports[key] === _useSyncProgress[key]) return;
|
|
127
|
+
Object.defineProperty(exports, key, {
|
|
128
|
+
enumerable: true,
|
|
129
|
+
get: function () {
|
|
130
|
+
return _useSyncProgress[key];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_types","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_StorageAdapter","_OfflineManager","_adapters","_OfflineProvider","_OfflineSyncPrompt","_useOfflineQueue","_useOfflineMutation","_useOfflineSyncInterceptor","_useSyncProgress"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,eAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,eAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,eAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,eAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,eAAA,GAAAd,OAAA;AAGA,IAAAe,SAAA,GAAAf,OAAA;AAGA,IAAAgB,gBAAA,GAAAhB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAc,gBAAA,EAAAb,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAY,gBAAA,CAAAZ,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,gBAAA,CAAAZ,GAAA;IAAA;EAAA;AAAA;AACA,IAAAa,kBAAA,GAAAjB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAe,kBAAA,EAAAd,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAa,kBAAA,CAAAb,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,kBAAA,CAAAb,GAAA;IAAA;EAAA;AAAA;AAGA,IAAAc,gBAAA,GAAAlB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAgB,gBAAA,EAAAf,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAc,gBAAA,CAAAd,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAM,gBAAA,CAAAd,GAAA;IAAA;EAAA;AAAA;AACA,IAAAe,mBAAA,GAAAnB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAiB,mBAAA,EAAAhB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAe,mBAAA,CAAAf,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAO,mBAAA,CAAAf,GAAA;IAAA;EAAA;AAAA;AACA,IAAAgB,0BAAA,GAAApB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAkB,0BAAA,EAAAjB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAgB,0BAAA,CAAAhB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAQ,0BAAA,CAAAhB,GAAA;IAAA;EAAA;AAAA;AACA,IAAAiB,gBAAA,GAAArB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAmB,gBAAA,EAAAlB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAiB,gBAAA,CAAAjB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAS,gBAAA,CAAAjB,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// Dynamic require approach so Metro doesn't crash if the user hasn't installed the optional library
|
|
4
|
+
|
|
5
|
+
export const getMMKVAdapter = () => {
|
|
6
|
+
try {
|
|
7
|
+
const {
|
|
8
|
+
MMKV
|
|
9
|
+
} = require('react-native-mmkv');
|
|
10
|
+
const storage = new MMKV();
|
|
11
|
+
return {
|
|
12
|
+
getItem: key => storage.getString(key) || null,
|
|
13
|
+
setItem: (key, value) => storage.set(key, value),
|
|
14
|
+
removeItem: key => storage.delete(key)
|
|
15
|
+
};
|
|
16
|
+
} catch (error) {
|
|
17
|
+
throw new Error("[OfflineQueue] You selected 'mmkv' storage but react-native-mmkv is not installed. Run 'npm install react-native-mmkv' and 'pod install'.");
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
export const getAsyncStorageAdapter = () => {
|
|
21
|
+
try {
|
|
22
|
+
const AsyncStorage = require('@react-native-async-storage/async-storage').default;
|
|
23
|
+
return {
|
|
24
|
+
getItem: async key => await AsyncStorage.getItem(key),
|
|
25
|
+
setItem: async (key, value) => await AsyncStorage.setItem(key, value),
|
|
26
|
+
removeItem: async key => await AsyncStorage.removeItem(key)
|
|
27
|
+
};
|
|
28
|
+
} catch (error) {
|
|
29
|
+
throw new Error("[OfflineQueue] You selected 'async-storage' but @react-native-async-storage/async-storage is not installed. Run 'npm install @react-native-async-storage/async-storage' and 'pod install'.");
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// Default Realm schema for the offline queue
|
|
34
|
+
const OFFLINE_QUEUE_SCHEMA_NAME = 'OfflineQueueItem';
|
|
35
|
+
const OfflineQueueItemSchema = {
|
|
36
|
+
name: OFFLINE_QUEUE_SCHEMA_NAME,
|
|
37
|
+
primaryKey: 'id',
|
|
38
|
+
properties: {
|
|
39
|
+
id: 'string',
|
|
40
|
+
actionName: 'string',
|
|
41
|
+
payload: 'string',
|
|
42
|
+
// JSON-stringified payload
|
|
43
|
+
createdAt: 'int',
|
|
44
|
+
retryCount: {
|
|
45
|
+
type: 'int',
|
|
46
|
+
default: 0
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
export const getRealmAdapter = options => {
|
|
51
|
+
try {
|
|
52
|
+
const Realm = require('realm');
|
|
53
|
+
const schemaName = options?.schemaName || OFFLINE_QUEUE_SCHEMA_NAME;
|
|
54
|
+
let realm;
|
|
55
|
+
if (options?.realmInstance) {
|
|
56
|
+
realm = options.realmInstance;
|
|
57
|
+
} else {
|
|
58
|
+
// Open a dedicated Realm with our default schema
|
|
59
|
+
realm = new Realm({
|
|
60
|
+
schema: [schemaName === OFFLINE_QUEUE_SCHEMA_NAME ? OfflineQueueItemSchema : {
|
|
61
|
+
...OfflineQueueItemSchema,
|
|
62
|
+
name: schemaName
|
|
63
|
+
}],
|
|
64
|
+
path: 'offline-queue.realm',
|
|
65
|
+
schemaVersion: 1
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
insert: action => {
|
|
70
|
+
realm.write(() => {
|
|
71
|
+
realm.create(schemaName, {
|
|
72
|
+
id: action.id,
|
|
73
|
+
actionName: action.actionName,
|
|
74
|
+
payload: JSON.stringify(action.payload),
|
|
75
|
+
createdAt: action.createdAt,
|
|
76
|
+
retryCount: action.retryCount
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
return Promise.resolve();
|
|
80
|
+
},
|
|
81
|
+
remove: id => {
|
|
82
|
+
realm.write(() => {
|
|
83
|
+
const record = realm.objectForPrimaryKey(schemaName, id);
|
|
84
|
+
if (record) realm.delete(record);
|
|
85
|
+
});
|
|
86
|
+
return Promise.resolve();
|
|
87
|
+
},
|
|
88
|
+
getAll: () => {
|
|
89
|
+
const records = realm.objects(schemaName).sorted('createdAt');
|
|
90
|
+
return Array.from(records).map(r => ({
|
|
91
|
+
id: r.id,
|
|
92
|
+
actionName: r.actionName,
|
|
93
|
+
payload: JSON.parse(r.payload),
|
|
94
|
+
createdAt: r.createdAt,
|
|
95
|
+
retryCount: r.retryCount
|
|
96
|
+
}));
|
|
97
|
+
},
|
|
98
|
+
clear: () => {
|
|
99
|
+
realm.write(() => {
|
|
100
|
+
const all = realm.objects(schemaName);
|
|
101
|
+
realm.delete(all);
|
|
102
|
+
});
|
|
103
|
+
return Promise.resolve();
|
|
104
|
+
},
|
|
105
|
+
update: (id, partial) => {
|
|
106
|
+
realm.write(() => {
|
|
107
|
+
const record = realm.objectForPrimaryKey(schemaName, id);
|
|
108
|
+
if (record) {
|
|
109
|
+
if (partial.retryCount !== undefined) record.retryCount = partial.retryCount;
|
|
110
|
+
if (partial.payload !== undefined) record.payload = JSON.stringify(partial.payload);
|
|
111
|
+
if (partial.actionName !== undefined) record.actionName = partial.actionName;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return Promise.resolve();
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
} catch (error) {
|
|
118
|
+
throw new Error("[OfflineQueue] You selected 'realm' storage but realm is not installed. Run 'npm install realm' and 'pod install'.");
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getMMKVAdapter","MMKV","require","storage","getItem","key","getString","setItem","value","set","removeItem","delete","error","Error","getAsyncStorageAdapter","AsyncStorage","default","OFFLINE_QUEUE_SCHEMA_NAME","OfflineQueueItemSchema","name","primaryKey","properties","id","actionName","payload","createdAt","retryCount","type","getRealmAdapter","options","Realm","schemaName","realm","realmInstance","schema","path","schemaVersion","insert","action","write","create","JSON","stringify","Promise","resolve","remove","record","objectForPrimaryKey","getAll","records","objects","sorted","Array","from","map","r","parse","clear","all","update","partial","undefined"],"sourceRoot":"../../../src","sources":["adapters/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { createContext, useContext, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import NetInfo from '@react-native-community/netinfo';
|
|
5
|
+
import { OfflineManager } from '../core/OfflineManager';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
const OfflineContext = /*#__PURE__*/createContext({
|
|
8
|
+
isOnline: true
|
|
9
|
+
});
|
|
10
|
+
export const useNetworkStatus = () => useContext(OfflineContext);
|
|
11
|
+
export const OfflineProvider = ({
|
|
12
|
+
children,
|
|
13
|
+
config
|
|
14
|
+
}) => {
|
|
15
|
+
const [isOnline, setIsOnline] = useState(null);
|
|
16
|
+
const wasOfflineRef = useRef(false);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
OfflineManager.configure(config);
|
|
19
|
+
}, [config]);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
const unsubscribe = NetInfo.addEventListener(state => {
|
|
22
|
+
const connected = !!state.isConnected;
|
|
23
|
+
if (__DEV__) console.log('[OfflineQueue] Network:', connected ? 'online' : 'offline', '| type:', state.type);
|
|
24
|
+
setIsOnline(connected);
|
|
25
|
+
if (!connected) {
|
|
26
|
+
wasOfflineRef.current = true;
|
|
27
|
+
}
|
|
28
|
+
if (connected && wasOfflineRef.current) {
|
|
29
|
+
wasOfflineRef.current = false;
|
|
30
|
+
if (__DEV__) console.log('[OfflineQueue] Network restored, triggering sync handler');
|
|
31
|
+
OfflineManager.handleOnlineRestore();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return () => unsubscribe();
|
|
35
|
+
}, []);
|
|
36
|
+
return /*#__PURE__*/_jsx(OfflineContext.Provider, {
|
|
37
|
+
value: {
|
|
38
|
+
isOnline
|
|
39
|
+
},
|
|
40
|
+
children: children
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=OfflineProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createContext","useContext","useEffect","useRef","useState","NetInfo","OfflineManager","jsx","_jsx","OfflineContext","isOnline","useNetworkStatus","OfflineProvider","children","config","setIsOnline","wasOfflineRef","configure","unsubscribe","addEventListener","state","connected","isConnected","__DEV__","console","log","type","current","handleOnlineRestore","Provider","value"],"sourceRoot":"../../../src","sources":["components/OfflineProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,UAAU,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACrF,OAAOC,OAAO,MAAM,iCAAiC;AACrD,SAASC,cAAc,QAAmC,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMnF,MAAMC,cAAc,gBAAGT,aAAa,CAAsB;EAAEU,QAAQ,EAAE;AAAK,CAAC,CAAC;AAE7E,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAMV,UAAU,CAACQ,cAAc,CAAC;AAOhE,OAAO,MAAMG,eAA+C,GAAGA,CAAC;EAAEC,QAAQ;EAAEC;AAAO,CAAC,KAAK;EACrF,MAAM,CAACJ,QAAQ,EAAEK,WAAW,CAAC,GAAGX,QAAQ,CAAiB,IAAI,CAAC;EAC9D,MAAMY,aAAa,GAAGb,MAAM,CAAC,KAAK,CAAC;EAEnCD,SAAS,CAAC,MAAM;IACZI,cAAc,CAACW,SAAS,CAACH,MAAM,CAAC;EACpC,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAEZZ,SAAS,CAAC,MAAM;IACZ,MAAMgB,WAAW,GAAGb,OAAO,CAACc,gBAAgB,CAAEC,KAAK,IAAK;MACpD,MAAMC,SAAS,GAAG,CAAC,CAACD,KAAK,CAACE,WAAW;MACrC,IAAIC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAAC,yBAAyB,EAAEJ,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE,SAAS,EAAED,KAAK,CAACM,IAAI,CAAC;MAE5GX,WAAW,CAACM,SAAS,CAAC;MAEtB,IAAI,CAACA,SAAS,EAAE;QACZL,aAAa,CAACW,OAAO,GAAG,IAAI;MAChC;MAEA,IAAIN,SAAS,IAAIL,aAAa,CAACW,OAAO,EAAE;QACpCX,aAAa,CAACW,OAAO,GAAG,KAAK;QAC7B,IAAIJ,OAAO,EAAEC,OAAO,CAACC,GAAG,CAAC,0DAA0D,CAAC;QACpFnB,cAAc,CAACsB,mBAAmB,CAAC,CAAC;MACxC;IACJ,CAAC,CAAC;IAEF,OAAO,MAAMV,WAAW,CAAC,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN,oBACIV,IAAA,CAACC,cAAc,CAACoB,QAAQ;IAACC,KAAK,EAAE;MAAEpB;IAAS,CAAE;IAAAG,QAAA,EACxCA;EAAQ,CACY,CAAC;AAElC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { useNetworkStatus } from './OfflineProvider';
|
|
5
|
+
import { useOfflineQueue } from '../hooks/useOfflineQueue';
|
|
6
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export const OfflineSyncPrompt = ({
|
|
8
|
+
children
|
|
9
|
+
}) => {
|
|
10
|
+
const {
|
|
11
|
+
isOnline
|
|
12
|
+
} = useNetworkStatus();
|
|
13
|
+
const {
|
|
14
|
+
pendingCount,
|
|
15
|
+
isSyncing,
|
|
16
|
+
syncNow,
|
|
17
|
+
clearQueue
|
|
18
|
+
} = useOfflineQueue();
|
|
19
|
+
if (isOnline && pendingCount > 0) {
|
|
20
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
21
|
+
children: children({
|
|
22
|
+
pendingCount,
|
|
23
|
+
isSyncing,
|
|
24
|
+
syncNow,
|
|
25
|
+
cancel: clearQueue
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=OfflineSyncPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useNetworkStatus","useOfflineQueue","Fragment","_Fragment","jsx","_jsx","OfflineSyncPrompt","children","isOnline","pendingCount","isSyncing","syncNow","clearQueue","cancel"],"sourceRoot":"../../../src","sources":["components/OfflineSyncPrompt.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,eAAe,QAAQ,0BAA0B;AAAC,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAW3D,OAAO,MAAMC,iBAAmD,GAAGA,CAAC;EAAEC;AAAS,CAAC,KAAK;EACjF,MAAM;IAAEC;EAAS,CAAC,GAAGR,gBAAgB,CAAC,CAAC;EACvC,MAAM;IAAES,YAAY;IAAEC,SAAS;IAAEC,OAAO;IAAEC;EAAW,CAAC,GAAGX,eAAe,CAAC,CAAC;EAE1E,IAAIO,QAAQ,IAAIC,YAAY,GAAG,CAAC,EAAE;IAC9B,oBACIJ,IAAA,CAAAF,SAAA;MAAAI,QAAA,EACKA,QAAQ,CAAC;QACNE,YAAY;QACZC,SAAS;QACTC,OAAO;QACPE,MAAM,EAAED;MACZ,CAAC;IAAC,CACJ,CAAC;EAEX;EAEA,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
|