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,
});