import { useState } from 'react' import api from '../api' export class Domain { id?: number domain_name?: string main_dns?: string admin_email?: string serial_number?: number refresh_interval?: number retry_interval?: number expiry_period?: number negative_ttl?: number } // example data for development const domainDevData: Domain[] = [ { id: 1, domain_name: "example.com", main_dns: "ns1.example.com", admin_email: "admin@example.com", serial_number: 114514, refresh_interval: 86400, retry_interval: 7200, expiry_period: 3600000, negative_ttl: 86400 }, { id: 2, domain_name: "example.org", main_dns: "ns1.example.org", admin_email: "admin@example.org", serial_number: 1919810, refresh_interval: 86400, retry_interval: 7200, expiry_period: 3600000, negative_ttl: 86400 }, ] export const useDomainStore = () => { const [domains, setDomains] = useState<Domain[]>([]) async function loadDomains() { setDomains(import.meta.env.DEV ? domainDevData : (await api.get<Domain[]>('/domains')).data.data) } async function addDomain(domain: Domain) { if (!import.meta.env.DEV) { domain = (await api.post("/domains", domain)).data.data } else if (!domain.id) { domain.id = Math.floor(1000 + Math.random() * 9000) } setDomains(domains.concat(domain)) } async function updateDomain(domain: Domain) { console.log(domain) if (!import.meta.env.DEV) { await api.put("/domains", domain) } setDomains(domains.map((e: Domain) => (e.id === domain.id || e.domain_name === domain.domain_name) ? domain : e)) } async function removeDomain(domain: Domain) { if (!import.meta.env.DEV) { await api.delete(`/domains/${domain.id}`) } setDomains(domains.filter(e => e.id !== domain.id)) } return { domains, loadDomains, addDomain, updateDomain, removeDomain } }