poe-svelte-ui-lib 1.22.0 → 1.22.1
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.
|
@@ -12,12 +12,14 @@
|
|
|
12
12
|
import RestartIcon from "./RestartIcon.svelte"
|
|
13
13
|
import WidgetHeader from "../WidgetHeader.svelte"
|
|
14
14
|
import { widgetAccentStyle } from "../widgetAccent"
|
|
15
|
+
import { readPersistedCollapsed, writePersistedCollapsed } from "../widgetCollapse"
|
|
15
16
|
|
|
16
17
|
let {
|
|
17
18
|
wrapperClass = "",
|
|
18
19
|
componentClass = "",
|
|
19
20
|
label = { name: "Информация об устройстве" },
|
|
20
21
|
value = $bindable(),
|
|
22
|
+
persistKey,
|
|
21
23
|
onSave = () => {},
|
|
22
24
|
onRestart = () => {},
|
|
23
25
|
}: IWidgetDeviceInfoProps = $props()
|
|
@@ -37,8 +39,10 @@
|
|
|
37
39
|
},
|
|
38
40
|
)
|
|
39
41
|
|
|
40
|
-
/* Сворачивание тела виджета по клику на значок/заголовок (как аккордеон)
|
|
41
|
-
|
|
42
|
+
/* Сворачивание тела виджета по клику на значок/заголовок (как аккордеон), но в отличие от
|
|
43
|
+
Accordion переживает перезагрузку страницы через localStorage, если передан persistKey */
|
|
44
|
+
let collapsed = $state(readPersistedCollapsed(persistKey))
|
|
45
|
+
$effect(() => writePersistedCollapsed(persistKey, collapsed))
|
|
42
46
|
|
|
43
47
|
/* Поля редактируются локально (как Argument: NoSend в реальной GUI) — отправка одним пакетом по кнопке */
|
|
44
48
|
let savedSnapshot = $state(JSON.stringify(info))
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import WarningIcon from "./WarningIcon.svelte"
|
|
16
16
|
import WidgetHeader from "../WidgetHeader.svelte"
|
|
17
17
|
import { widgetAccentStyle } from "../widgetAccent"
|
|
18
|
+
import { readPersistedCollapsed, writePersistedCollapsed } from "../widgetCollapse"
|
|
18
19
|
|
|
19
20
|
let {
|
|
20
21
|
wrapperClass = "",
|
|
@@ -23,6 +24,7 @@
|
|
|
23
24
|
value = $bindable(),
|
|
24
25
|
allowedModes = [1, 2, 3],
|
|
25
26
|
confirmOnAP = true,
|
|
27
|
+
persistKey,
|
|
26
28
|
onScan,
|
|
27
29
|
onSave = () => {},
|
|
28
30
|
}: IWidgetWiFiProps = $props()
|
|
@@ -85,8 +87,11 @@
|
|
|
85
87
|
}
|
|
86
88
|
|
|
87
89
|
/* Сворачивание тела виджета по клику на значок/заголовок (как аккордеон) — переключатель режима
|
|
88
|
-
в шапке кликом не триггерит, только сама кнопка значок+заголовок (см. WidgetHeader.svelte)
|
|
89
|
-
|
|
90
|
+
в шапке кликом не триггерит, только сама кнопка значок+заголовок (см. WidgetHeader.svelte).
|
|
91
|
+
В отличие от Accordion (только начальное значение из GUI) — переживает перезагрузку страницы
|
|
92
|
+
через localStorage, если передан persistKey. */
|
|
93
|
+
let collapsed = $state(readPersistedCollapsed(persistKey))
|
|
94
|
+
$effect(() => writePersistedCollapsed(persistKey, collapsed))
|
|
90
95
|
|
|
91
96
|
/* Поля редактируются локально (как Argument: NoSend в реальной GUI) — отправка одним пакетом по кнопке */
|
|
92
97
|
let savedSnapshot = $state(JSON.stringify(cfg))
|
package/dist/types.d.ts
CHANGED
|
@@ -516,6 +516,7 @@ export interface IWidgetWiFiProps {
|
|
|
516
516
|
value?: IWidgetWiFiConfig;
|
|
517
517
|
allowedModes?: number[];
|
|
518
518
|
confirmOnAP?: boolean;
|
|
519
|
+
persistKey?: string;
|
|
519
520
|
onScan?: () => Promise<{
|
|
520
521
|
id: string;
|
|
521
522
|
name: string;
|
|
@@ -541,6 +542,7 @@ export interface IWidgetDeviceInfoProps {
|
|
|
541
542
|
name?: string;
|
|
542
543
|
};
|
|
543
544
|
value?: IWidgetDeviceInfoConfig;
|
|
545
|
+
persistKey?: string;
|
|
544
546
|
onSave?: (info: IWidgetDeviceInfoConfig) => void;
|
|
545
547
|
onRestart?: () => void;
|
|
546
548
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* $lib/widgetCollapse.ts — запоминание свёрнутости смарт-виджетов в localStorage браузера
|
|
2
|
+
(Accordion этого не делает — isOpen у него только начальное значение из сохранённого GUI,
|
|
3
|
+
без переживания перезагрузки; виджеты сделаны надёжнее). typeof window-проверка вместо
|
|
4
|
+
$app/environment — библиотека не должна знать про SvelteKit. */
|
|
5
|
+
const STORAGE_PREFIX = "widget-collapsed:";
|
|
6
|
+
export const readPersistedCollapsed = (persistKey) => {
|
|
7
|
+
if (!persistKey || typeof window === "undefined")
|
|
8
|
+
return false;
|
|
9
|
+
try {
|
|
10
|
+
return window.localStorage.getItem(STORAGE_PREFIX + persistKey) === "1";
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export const writePersistedCollapsed = (persistKey, collapsed) => {
|
|
17
|
+
if (!persistKey || typeof window === "undefined")
|
|
18
|
+
return;
|
|
19
|
+
try {
|
|
20
|
+
window.localStorage.setItem(STORAGE_PREFIX + persistKey, collapsed ? "1" : "0");
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
/* приватный режим/заблокировано — молча игнорируем, просто не запомнится */
|
|
24
|
+
}
|
|
25
|
+
};
|