import { MoveStyleUtils, Rock } from "@ruiapp/move-style"; import { Radio, Space } from "antd"; import { RapidRadioListFormInputRockConfig } from "./rapid-radio-list-form-input-types"; import RapidCheckboxListFormInputMeta from "./RapidRadioListFormInputMeta"; import { get, isObject, map } from "lodash"; import type { RadioGroupProps } from "antd/lib/radio"; import { useMemo } from "react"; export default { $type: "rapidRadioListFormInput", Renderer(context, props: RapidRadioListFormInputRockConfig) { const { scope } = context; const { listTextFormat } = props; let listItems = []; if (props.listDataSourceCode) { listItems = scope.stores[props.listDataSourceCode]?.data?.list; } else { listItems = props.listItems || props.listDataSource?.data?.list; } const listTextFieldName = props.listTextFieldName || "name"; const listValueFieldName = props.listValueFieldName || "id"; function getCheckboxOption(item: any): { label: string; value: string } { let label: string; if (listTextFormat) { label = MoveStyleUtils.fulfillVariablesInString(listTextFormat, item); } else { label = get(item, listTextFieldName); } const value = get(item, listValueFieldName); return { label, value, }; } let selectedValue: string[]; if (props.valueFieldName) { selectedValue = map(props.value, (item) => { if (isObject(item)) { return get(item, props.valueFieldName); } return item; }); } else { selectedValue = props.value; } const antdProps: RadioGroupProps = { disabled: props.disabled, value: selectedValue, onChange: props.onChange, style: { width: "100%" }, }; const radioList = useMemo(() => { return ( {listItems.map((item, index) => { const option = getCheckboxOption(item); return ( {option.label} ); })} ); }, [listItems]); return {radioList}; }, ...RapidCheckboxListFormInputMeta, } as Rock;