@openmrs/esm-offline 3.2.1-pre.933 → 3.2.1-pre.947

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmrs/esm-offline",
3
- "version": "3.2.1-pre.933",
3
+ "version": "3.2.1-pre.947",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Helper utilities for OpenMRS",
6
6
  "browser": "dist/openmrs-esm-offline.js",
@@ -36,10 +36,10 @@
36
36
  "access": "public"
37
37
  },
38
38
  "devDependencies": {
39
- "@openmrs/esm-api": "^3.2.1-pre.933",
40
- "@openmrs/esm-globals": "^3.2.1-pre.933",
41
- "@openmrs/esm-state": "^3.2.1-pre.933",
42
- "@openmrs/esm-styleguide": "^3.2.1-pre.933",
39
+ "@openmrs/esm-api": "^3.2.1-pre.947",
40
+ "@openmrs/esm-globals": "^3.2.1-pre.947",
41
+ "@openmrs/esm-state": "^3.2.1-pre.947",
42
+ "@openmrs/esm-styleguide": "^3.2.1-pre.947",
43
43
  "@types/uuid": "^8.3.0",
44
44
  "rxjs": "^6.5.3"
45
45
  },
@@ -56,5 +56,5 @@
56
56
  "uuid": "^8.3.2",
57
57
  "workbox-window": "^6.1.5"
58
58
  },
59
- "gitHead": "1b80ed23aaf71ecd7744adaee5e0a885ed643683"
59
+ "gitHead": "e5c5960b2ee64d1e3820c3bd9421809253b8f7a5"
60
60
  }
package/src/index.ts CHANGED
@@ -3,6 +3,7 @@ export * from "./service-worker-http-headers";
3
3
  export * from "./service-worker-messaging";
4
4
  export * from "./service-worker-events";
5
5
  export * from "./events";
6
+ export * from "./mode";
6
7
  export * from "./patches";
7
8
  export * from "./sync";
8
9
  export * from "./uuid";
package/src/mode.ts ADDED
@@ -0,0 +1,79 @@
1
+ async function isSafariPrivateBrowsing() {
2
+ const storage = window.sessionStorage;
3
+
4
+ try {
5
+ storage.setItem("someKeyHere", "test");
6
+ storage.removeItem("someKeyHere");
7
+ } catch (e) {
8
+ if (e.code === DOMException.QUOTA_EXCEEDED_ERR && storage.length === 0) {
9
+ return true;
10
+ }
11
+ }
12
+
13
+ return false;
14
+ }
15
+
16
+ async function isEdgePrivateBrowsing() {
17
+ return !window.indexedDB;
18
+ }
19
+
20
+ async function isFirefoxPrivateBrowsing() {
21
+ return new Promise<boolean>((resolve) => {
22
+ const db = indexedDB.open("test");
23
+ db.onerror = () => resolve(true);
24
+ db.onsuccess = () => resolve(false);
25
+ });
26
+ }
27
+
28
+ async function isPrivateBrowsing() {
29
+ return (
30
+ (await isFirefoxPrivateBrowsing()) ||
31
+ (await isEdgePrivateBrowsing()) ||
32
+ (await isSafariPrivateBrowsing())
33
+ );
34
+ }
35
+
36
+ export type OfflineMode = "on" | "off" | "unavailable";
37
+
38
+ export interface OfflineModeResult {
39
+ current: OfflineMode;
40
+ notAvailable: boolean;
41
+ active: boolean;
42
+ }
43
+
44
+ const offlineModeStorageKey = "openmrs3:offline-mode";
45
+ let offlineMode: OfflineMode = "unavailable";
46
+
47
+ export function getCurrentOfflineMode(): OfflineModeResult {
48
+ return {
49
+ current: offlineMode,
50
+ notAvailable: offlineMode === "unavailable",
51
+ active: offlineMode === "on",
52
+ };
53
+ }
54
+
55
+ export function setCurrentOfflineMode(mode: OfflineMode) {
56
+ if (offlineMode !== "unavailable" && mode !== "unavailable") {
57
+ localStorage.setItem(
58
+ offlineModeStorageKey,
59
+ mode === "on" ? "active" : "disabled"
60
+ );
61
+ offlineMode = mode;
62
+ }
63
+ }
64
+
65
+ export async function activateOfflineCapability() {
66
+ const isPrivate = await isPrivateBrowsing();
67
+
68
+ if (!isPrivate) {
69
+ if (localStorage.getItem(offlineModeStorageKey) === "active") {
70
+ offlineMode = "on";
71
+ } else {
72
+ offlineMode = "off";
73
+ }
74
+ }
75
+
76
+ if (navigator.onLine && offlineMode === "on") {
77
+ //TODO trigger here --> update cycle
78
+ }
79
+ }