import { Select, Tag } from '@arco-design/web-react'; import React from 'react'; import { createFieldFactory } from './factory'; import type { FieldDetailComponent, FieldEditComponent } from './types'; export type SelectFieldOptionValueType = string | number; export interface SelectFieldOptionItem { value: SelectFieldOptionValueType; label?: string; /** * Use in detail mode */ color?: string; /** * Use in detail mode */ icon?: string; } export interface SelectFieldOptions { items: SelectFieldOptionItem[]; allowClear?: boolean; } export const SelectFieldDetail: FieldDetailComponent< SelectFieldOptionValueType, SelectFieldOptions > = React.memo((props) => { const items = props.options.items ?? []; const selectedOption = items.find((item) => item.value === props.value); if (selectedOption) { return ( {selectedOption.label ?? selectedOption.value} ); } else { return {props.value}; } }); SelectFieldDetail.displayName = 'SelectFieldDetail'; export const SelectFieldEdit: FieldEditComponent< SelectFieldOptionValueType, SelectFieldOptions > = React.memo((props) => { const items = props.options.items ?? []; const allowClear = props.options.allowClear ?? false; return ( ); }); SelectFieldEdit.displayName = 'SelectFieldEdit'; /** * @example * createSelectField('Class', { * items: [ * { * value: 'A', * label: 'Class A', * color: 'red', * }, * { * value: 'B', * label: 'Class B', * color: 'green', * }, * ], * }), */ export const createSelectField = createFieldFactory({ detail: SelectFieldDetail, edit: SelectFieldEdit, });