Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 66x 66x 78x 76x 76x 76x 76x 24x 24x 12x 12x 12x 76x 36x 8x 76x 76x 76x | import React, { CSSProperties, ReactElement, useEffect, useState } from "react"; import { Select, Spin } from "antd"; import { fetchSelectOptions } from "@utils/FetchUtils"; import { FormInstance } from "antd/es/form"; import { getReadOnlyClass } from "@utils/ComponentUtils"; import { SuffixIcon } from '../../components'; const { Option } = Select; interface DynamicSelectProps { style?: CSSProperties; mode?: "multiple" | "tags"; dfKey: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any onChange: any; currentValue: string | Array<string> | number | Array<number>; form: FormInstance; updatable?: boolean; } const DynamicSelect = (props: DynamicSelectProps): ReactElement => { const { mode, style, updatable, dfKey, onChange, form, currentValue } = props; const [options, setOptions] = useState<Array<string | number>>([] as Array<string | number>); const [loading, setLoading] = useState<boolean>(false); const disabled = (updatable == null) ? false : !updatable; useEffect(() => { setLoading(true); fetchSelectOptions(dfKey) .then((options: Array<string | number>) => { return options; }) .then((options: Array<string | number>) => { setOptions(options); }) .then(() => setLoading(false)); }, [dfKey]); useEffect(() => { if (options?.length > 0) { form.setFieldsValue({ [dfKey]: currentValue }); } }, [dfKey, currentValue, options, form]); const optElem = options?.map(opt => <Option key={opt} value={opt}>{opt}</Option>); const className = `df_${mode == null ? "single" : mode}`; // **** Attention **** // zIndex of the select dropdown should higher than the zIndex of modal(by // default 1051) because the dropdown might be displayed on a modal // https://stackoverflow.com/questions/53926911/antd-select-not-working-inside-a-full-screen-dialog // Set in app.less by .ant-select-dropdown return loading ? <Spin size="small" /> : ( <Select className={`${className} ${getReadOnlyClass(updatable)}`} mode={mode} style={style} onChange={onChange} defaultValue={currentValue} disabled={disabled} showSearch={true} suffixIcon={<SuffixIcon updatable={updatable} />} allowClear={true} showArrow={true} dropdownStyle={{ zIndex: 2000 }} > {optElem} </Select> ); }; export default DynamicSelect; |