Add signal persist
This commit is contained in:
26
sw.js
26
sw.js
@@ -50,18 +50,30 @@ const track = (subs) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --- Signals Core ---
|
// --- Signals Core ---
|
||||||
export const signal = (value) => {
|
export const signal = (value, key = null) => {
|
||||||
const subs = new Set();
|
const subs = new Set();
|
||||||
return {
|
const storage = typeof localStorage !== 'undefined';
|
||||||
|
|
||||||
|
if (key && storage) {
|
||||||
|
const saved = localStorage.getItem(key);
|
||||||
|
if (saved !== null) try { value = JSON.parse(saved); } catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
const sig = {
|
||||||
|
_isSig: true,
|
||||||
get value() { track(subs); return value; },
|
get value() { track(subs); return value; },
|
||||||
set value(newValue) {
|
set value(v) {
|
||||||
if (newValue === value) return;
|
if (v === value) return;
|
||||||
value = newValue;
|
value = v;
|
||||||
subs.forEach(fn => queue.add(fn));
|
subs.forEach(fn => queue.add(fn));
|
||||||
if (!isScheduled) { isScheduled = true; queueMicrotask(tick); }
|
if (!isScheduled) { isScheduled = true; queueMicrotask(tick); }
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
|
||||||
|
if (key && storage) effect(() => localStorage.setItem(key, JSON.stringify(sig.value)));
|
||||||
|
|
||||||
|
return sig;
|
||||||
|
};
|
||||||
|
|
||||||
export const untrack = (fn) => {
|
export const untrack = (fn) => {
|
||||||
const prev = activeEffect;
|
const prev = activeEffect;
|
||||||
|
|||||||
Reference in New Issue
Block a user