mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-11-04 08:10:28 +09:00
파일 시스템 관련 상태와 변경 로직을 도메인 모듈로 통합하여 캐시가 자동으로 갱신되도록 개선하고 오류를 토스트로 표시하도록 변경
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2ce73aa331
commit
4e82c5e556
67 files changed
+1091
-1082
No files matched your search
@@ -0,0 +1,33 @@
|
||||
import { untrack } from "svelte";
|
||||
|
||||
// Exposes the value of a cache entry identified by a reactive key. Cached values are available
|
||||
// synchronously, so that views don't flicker while revalidating.
|
||||
export const useResource = <K, V>(getKey: () => K, load: (key: K) => V | Promise<V>) => {
|
||||
let current: V | undefined = $state();
|
||||
|
||||
$effect.pre(() => {
|
||||
const key = getKey();
|
||||
let isStale = false;
|
||||
|
||||
const result = untrack(() => load(key));
|
||||
if (result instanceof Promise) {
|
||||
result
|
||||
.then((value) => {
|
||||
if (!isStale) current = value;
|
||||
})
|
||||
.catch(() => {}); // Logged by the cache
|
||||
} else {
|
||||
current = result;
|
||||
}
|
||||
|
||||
return () => {
|
||||
isStale = true;
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
get current() {
|
||||
return current;
|
||||
},
|
||||
};
|
||||
};
|
||||
Reference in new issue
Block a user