use-project-theme
現在のprojectはhtml[data-project-theme]から取得する
一度fetchしたら以降はcacheを使う
2021-06-12
00:19:45 直した
themeのfetchとcacheからthemeを取得するのとで分けた
00:07:37 なんかややこしくなってきた
なぜか処理落ちする
dependencies
一度に1回しかuseEffectを回せないようにする
code:script.js
import {useState, useEffect, useCallback} from '../preact@10.5.13/hooks.js';
const defaultTheme = 'default-light';
export function useProjectTheme() {
// projectのtheme情報を取得する
const loadTheme = useCallback(project => {
if (mapproject) return; // cacheの取得は1回だけ if (project === scrapbox.Project.name) return;
(async () => {
setMap(oldMap => {
return {...oldMap};
});
try {
const res = await fetch(/api/projects/${project});
const {theme} = await res.json();
setMap(oldMap => {
oldMapproject = theme ?? defaultTheme; return {...oldMap};
});
} catch(e) {
}
})();
const getTheme = useCallback((project) => {
if (project === scrapbox.Project.name) return document.documentElement.dataset.projectTheme;
return {getTheme, loadTheme};
}