import dayjs from "dayjs"; import useSWR, { mutate } from "swr"; import { useState } from "react"; import { Button, IconButton, List, ListItem, ListItemText, Typography, styled, Box, alpha, Divider, } from "@mui/material"; import { RefreshRounded } from "@mui/icons-material"; import { useTranslation } from "react-i18next"; import { useLockFn } from "ahooks"; import { getRuleProviders, ruleProviderUpdate } from "@/services/api"; import { BaseDialog } from "../base"; export const ProviderButton = () => { const { t } = useTranslation(); const { data } = useSWR("getRuleProviders", getRuleProviders); const [open, setOpen] = useState(false); const hasProvider = Object.keys(data || {}).length > 0; const handleUpdate = useLockFn(async (key: string) => { await ruleProviderUpdate(key); await mutate("getRules"); await mutate("getRuleProviders"); }); if (!hasProvider) return null; return ( <> {t("Rule Provider")} } contentSx={{ width: 400 }} disableOk cancelBtn={t("Cancel")} onClose={() => setOpen(false)} onCancel={() => setOpen(false)} > {Object.entries(data || {}).map(([key, item]) => { const time = dayjs(item.updatedAt); return ( <> ({ p: 0, borderRadius: "10px", boxShadow: theme.shadows[2], mb: 1, })} key={key} > {key} {item.ruleCount} } secondary={ <> {item.vehicleType} {item.behavior} {t("Update At")} {time.fromNow()} } /> handleUpdate(key)} > ); })} ); }; const TypeBox = styled(Box)(({ theme }) => ({ display: "inline-block", border: "1px solid #ccc", borderColor: alpha(theme.palette.secondary.main, 0.5), color: alpha(theme.palette.secondary.main, 0.8), borderRadius: 4, fontSize: 10, marginRight: "4px", padding: "0 2px", lineHeight: 1.25, })); const StyledTypeBox = styled(Box)(({ theme }) => ({ display: "inline-block", border: "1px solid #ccc", borderColor: alpha(theme.palette.primary.main, 0.5), color: alpha(theme.palette.primary.main, 0.8), borderRadius: 4, fontSize: 10, marginRight: "4px", padding: "0 2px", lineHeight: 1.25, }));