import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import { useCallback, useEffect, useState } from "react"; import { useI18n } from "../../hooks/I18n"; import Typography from "@mui/material/Typography"; import Accordion from "@mui/material/Accordion"; import AccordionSummary from "@mui/material/AccordionSummary"; import AccordionDetails from "@mui/material/AccordionDetails"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import Alert from "@mui/material/Alert"; import Box from "@mui/material/Box"; import FormControlLabel from "@mui/material/FormControlLabel"; import Switch from "@mui/material/Switch"; import { useSetting } from "../../hooks/Setting"; import CircularProgress from "@mui/material/CircularProgress"; import { syncWebfix, loadOrFetchWebfix } from "../../libs/webfix"; import Button from "@mui/material/Button"; import SyncIcon from "@mui/icons-material/Sync"; import { useAlert } from "../../hooks/Alert"; import HelpButton from "./HelpButton"; import { URL_KISS_RULES_NEW_ISSUE } from "../../config"; function ApiFields({ site }) { const { selector, rootSelector, fixer } = site; return ( ); } function ApiAccordion({ site }) { const [expanded, setExpanded] = useState(false); const handleChange = (e) => { setExpanded((pre) => !pre); }; return ( }> {site.pattern} {expanded && } ); } export default function Webfix() { const [loading, setLoading] = useState(false); const [sites, setSites] = useState([]); const i18n = useI18n(); const alert = useAlert(); const { setting, updateSetting } = useSetting(); const loadSites = useCallback(async () => { const sites = await loadOrFetchWebfix(process.env.REACT_APP_WEBFIXURL); setSites(sites); }, []); const handleSyncTest = async (e) => { e.preventDefault(); try { setLoading(true); await syncWebfix(process.env.REACT_APP_WEBFIXURL); await loadSites(); alert.success(i18n("sync_success")); } catch (err) { console.log("[sync webfix]", err); alert.error(i18n("sync_failed")); } finally { setLoading(false); } }; useEffect(() => { (async () => { try { setLoading(true); await loadSites(); } catch (err) { console.log("[load webfix]", err.message); } finally { setLoading(false); } })(); }, [loadSites]); return ( {i18n("patch_setting_help")} { updateSetting({ injectWebfix: !setting.injectWebfix, }); }} /> } label={i18n("inject_webfix")} /> {setting.injectWebfix && ( {loading ? (
) : ( sites.map((site) => ( )) )}
)}
); }