import { createCache } from "@tensamin/cache"; import { storageDefaults } from "@tensamin/shared/data"; import { useStorage } from "@tensamin/storage/context"; import { secureValueCodec } from "@tensamin/storage/secure"; import { Button, Input, Label } from "@tensamin/ui"; import { useEffect, useState } from "react"; const validLimit = (value: number) => Number.isSafeInteger(value) && value >= 0; export default function Page() { const { load, save } = useStorage(); const [contacts, setContacts] = useState(storageDefaults.cache_contacts); const [messagesPerChat, setMessagesPerChat] = useState( storageDefaults.cache_messages_per_chat, ); const [savedContacts, setSavedContacts] = useState(contacts); const [savedMessagesPerChat, setSavedMessagesPerChat] = useState(messagesPerChat); const [saving, setSaving] = useState(false); useEffect(() => { void Promise.all([ load("cache_contacts"), load("cache_messages_per_chat"), ]).then(([nextContacts, nextMessages]) => { setContacts(nextContacts); setSavedContacts(nextContacts); setMessagesPerChat(nextMessages); setSavedMessagesPerChat(nextMessages); }); }, [load]); const valid = validLimit(contacts) && validLimit(messagesPerChat); const changed = contacts !== savedContacts || messagesPerChat !== savedMessagesPerChat; async function persist() { if (!valid || saving) return; setSaving(true); try { await Promise.all([ save("cache_contacts", contacts), save("cache_messages_per_chat", messagesPerChat), ]); const accountId = await load("user_id"); if (accountId) await createCache(String(accountId), { codec: secureValueCodec, }).conversations.prune(); setSavedContacts(contacts); setSavedMessagesPerChat(messagesPerChat); } finally { setSaving(false); } } return (
setContacts(event.currentTarget.valueAsNumber)} />
setMessagesPerChat(event.currentTarget.valueAsNumber) } />
{!valid && (

Cache limits must be whole numbers greater than or equal to 0.

)}
); }