import { useIntl } from "react-intl"; import { useEffect, useState } from "react"; import { Switch, Typography, Radio, type RadioChangeEvent, Select, Transfer, } from "antd"; import { onChange as onSettingChanged, settingInfo, type ISettingItem, } from "../../../reducers/setting"; import { useAppSelector } from "../../../hooks"; import store from "../../../store"; import type { ISetting } from "./default" import type { TransferDirection } from "antd/lib/transfer" const { Text } = Typography; interface IWidgetSettingItem { data?: ISetting; autoSave?: boolean; bordered?: boolean; onChange?: Function; } const SettingItemWidget = ({ data, bordered = true, onChange, autoSave = true, }: IWidgetSettingItem) => { const intl = useIntl(); const settings: ISettingItem[] | undefined = useAppSelector(settingInfo); const [value, setValue] = useState(data?.defaultValue); const [targetKeys, setTargetKeys] = useState([]); useEffect(() => { if (typeof data?.defaultValue === "object") { setTargetKeys(data.defaultValue); } }, [data?.defaultValue]); useEffect(() => { setValue(data?.defaultValue); }, [data?.defaultValue]); useEffect(() => { const currSetting = settings?.find((element) => element.key === data?.key); if (typeof currSetting !== "undefined") { setValue(currSetting.value); } }, [data?.key, settings]); let content: JSX.Element = <>; if (typeof data === "undefined") { return content; } else { const description: string | undefined = data.description ? intl.formatMessage({ id: data.description }) : undefined; switch (typeof data.defaultValue) { case "number": break; case "object": switch (data.widget) { case "transfer": if (typeof data.options !== "undefined") { content = ( { return { key: item.value, title: intl.formatMessage({ id: item.label }), }; })} titles={[ "备选", intl.formatMessage({ id: "labels.selected" }), ]} targetKeys={targetKeys} onChange={( newTargetKeys: string[], _direction: TransferDirection, _moveKeys: string[] ) => { setTargetKeys(newTargetKeys); store.dispatch( onSettingChanged({ key: data.key, value: newTargetKeys, }) ); if (typeof onChange !== "undefined") { onChange(data.key, newTargetKeys); } }} render={(item) => item.title} oneWay /> ); } break; } break; case "string": switch (data.widget) { case "radio-button": if (typeof data.options !== "undefined") { content = ( <> { setValue(e.target.value); if (autoSave) { store.dispatch( onSettingChanged({ key: data.key, value: e.target.value, }) ); } if (typeof onChange !== "undefined") { onChange(data.key, e.target.value); } }} > {data.options.map((item, id) => { return ( {intl.formatMessage({ id: item.label })} ); })} ); } break; default: if (typeof data.options !== "undefined") { content = (