@neovici/cosmoz-omnitable 11.0.1 → 11.1.0
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.
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createContext, useContext, useMemo } from 'haunted';
|
|
2
|
+
import local from './local';
|
|
3
|
+
|
|
4
|
+
export const DriverContext = createContext(local),
|
|
5
|
+
useDriver = () => {
|
|
6
|
+
const driver = useContext(DriverContext);
|
|
7
|
+
return useMemo(() => driver(), [driver]);
|
|
8
|
+
},
|
|
9
|
+
registerProvider = () =>
|
|
10
|
+
customElements.define(
|
|
11
|
+
'omnitable-settings-driver-provider',
|
|
12
|
+
DriverContext.Provider
|
|
13
|
+
);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export default ({ prefix = 'omnitable-' } = {}) => {
|
|
2
|
+
const read = async (settingsId) => {
|
|
3
|
+
if (!settingsId) {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
try {
|
|
7
|
+
return JSON.parse(localStorage.getItem(prefix + settingsId));
|
|
8
|
+
} catch (e) {
|
|
9
|
+
// eslint-disable-next-line no-console
|
|
10
|
+
console.error(e);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
write: async (settingsId, settings) => {
|
|
15
|
+
const key = prefix + settingsId;
|
|
16
|
+
try {
|
|
17
|
+
if (settings) {
|
|
18
|
+
localStorage.setItem(key, JSON.stringify(settings));
|
|
19
|
+
} else {
|
|
20
|
+
localStorage.removeItem(key);
|
|
21
|
+
}
|
|
22
|
+
} catch (e) {
|
|
23
|
+
// eslint-disable-next-line no-console
|
|
24
|
+
console.error(e);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
read,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export default ({ prefix = '', get$, post$ } = {}) => {
|
|
2
|
+
const read = async (settingsId) => {
|
|
3
|
+
try {
|
|
4
|
+
return await get$(prefix + settingsId);
|
|
5
|
+
} catch (e) {
|
|
6
|
+
// eslint-disable-next-line no-console
|
|
7
|
+
console.error(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
write: async (settingsId, settings) => {
|
|
12
|
+
const key = prefix + settingsId;
|
|
13
|
+
try {
|
|
14
|
+
await post$(key, settings);
|
|
15
|
+
} catch (e) {
|
|
16
|
+
// eslint-disable-next-line no-console
|
|
17
|
+
console.error(e);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
read,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -1,62 +1,44 @@
|
|
|
1
|
-
import { useCallback,
|
|
1
|
+
import { useCallback, useEffect, useState } from 'haunted';
|
|
2
2
|
import { normalizeStore } from './normalize';
|
|
3
|
+
import { useDriver } from './drivers';
|
|
3
4
|
|
|
4
|
-
const storagePrefix = 'omnitable-',
|
|
5
|
-
read = (settingsId) => {
|
|
6
|
-
if (!settingsId) {
|
|
7
|
-
return [];
|
|
8
|
-
}
|
|
9
|
-
try {
|
|
10
|
-
return JSON.parse(localStorage.getItem(storagePrefix + settingsId)) ?? [];
|
|
11
|
-
} catch (e) {
|
|
12
|
-
return [];
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
5
|
// eslint-disable-next-line max-lines-per-function
|
|
16
6
|
export default (settingsId, settings, setSettings, onReset) => {
|
|
17
|
-
const [
|
|
18
|
-
|
|
7
|
+
const [savedSettings, setSavedSettings] = useState(),
|
|
8
|
+
{ read, write } = useDriver();
|
|
9
|
+
|
|
10
|
+
useEffect(async () => {
|
|
11
|
+
if (!settingsId) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
setSavedSettings(await read(settingsId));
|
|
15
|
+
}, [settingsId, read]);
|
|
19
16
|
|
|
20
17
|
return {
|
|
21
18
|
settingsId,
|
|
22
19
|
savedSettings,
|
|
23
20
|
|
|
24
|
-
onSave: useCallback(() => {
|
|
21
|
+
onSave: useCallback(async () => {
|
|
25
22
|
if (!settingsId) {
|
|
26
23
|
return;
|
|
27
24
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
JSON.stringify(normalizeStore(settings, current))
|
|
34
|
-
);
|
|
35
|
-
setSettings();
|
|
36
|
-
setCounter((counter) => counter + 1);
|
|
37
|
-
} catch (e) {
|
|
38
|
-
// eslint-disable-next-line no-console
|
|
39
|
-
console.error(e);
|
|
40
|
-
}
|
|
41
|
-
}, [settings]),
|
|
25
|
+
const newSettings = normalizeStore(settings, savedSettings);
|
|
26
|
+
await write(settingsId, newSettings);
|
|
27
|
+
setSettings();
|
|
28
|
+
setSavedSettings(newSettings);
|
|
29
|
+
}, [settings, savedSettings]),
|
|
42
30
|
|
|
43
31
|
onReset: useCallback(
|
|
44
|
-
(e) => {
|
|
32
|
+
async (e) => {
|
|
45
33
|
setSettings();
|
|
46
|
-
|
|
47
34
|
if (e.shiftKey) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
setCounter((counter) => counter + 1);
|
|
51
|
-
} catch (err) {
|
|
52
|
-
// ignore error
|
|
53
|
-
}
|
|
35
|
+
await write(settingsId);
|
|
36
|
+
setSavedSettings();
|
|
54
37
|
}
|
|
55
38
|
onReset?.();
|
|
56
39
|
},
|
|
57
40
|
[onReset]
|
|
58
41
|
),
|
|
59
|
-
|
|
60
42
|
hasChanges: settings != null,
|
|
61
43
|
};
|
|
62
44
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neovici/cosmoz-omnitable",
|
|
3
|
-
"version": "11.0
|
|
3
|
+
"version": "11.1.0",
|
|
4
4
|
"description": "[](https://travis-ci.org/Neovici/cosmoz-omnitable)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components"
|