import { useFetch, useT, useManageTitle } from "~/hooks" import { Group, SettingItem, PResp, PEmptyResp, EmptyResp } from "~/types" import { r, notify, getTarget, handleResp } from "~/utils" import { createStore } from "solid-js/store" import { Button, HStack, Heading, VStack } from "@hope-ui/solid" import { createSignal, Index, Show } from "solid-js" import { Item } from "./SettingItem" import { ResponsiveGrid } from "../common/ResponsiveGrid" import S3Buckets from "./S3Buckets" import crypto from "crypto-js" const bucket_parse = (settings: SettingItem[]) => { const string = { ...settings.find((i) => i.key === "s3_buckets")! } if (!string.value) return [] return JSON.parse(string.value) } const S3Settings = () => { const t = useT() useManageTitle(`manage.sidemenu.s3`) const [settingsLoading, getSettings] = useFetch( (): PResp => r.get(`/admin/setting/list?group=${Group.S3}`), ) const [settings, setSettings] = createStore([]) const refresh = async () => { const resp = await getSettings() handleResp(resp, setSettings) } refresh() const [saveLoading, saveSettings] = useFetch( (): PEmptyResp => r.post("/admin/setting/save", getTarget(settings)), ) const [loading, setLoading] = createSignal(false) return ( {(item, _) => ( { setSettings((i) => item().key === i.key, "value", val) }} onDelete={async () => { setLoading(true) const resp: EmptyResp = await r.post( `/admin/setting/delete?key=${item().key}`, ) setLoading(false) handleResp(resp, () => { notify.success(t("global.delete_success")) refresh() }) }} /> )} {t("settings.s3_restart_to_apply")} ) } export default S3Settings