34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
import { ResourceField, SelectOption } from "../types/config";
|
|
|
|
export function resolveTemplate(template: string, item: any): string {
|
|
if (/\{(\w+)\}/.test(template)) {
|
|
return template.replace(/\{(\w+)\}/g, (_, field: string) => String(item[field] ?? ''));
|
|
}
|
|
return String(item[template] ?? '');
|
|
}
|
|
|
|
export function getFieldOptions(field: ResourceField, relationData?: any[]): SelectOption[] {
|
|
if (field.type === 'enum' && field.options) {
|
|
return field.options.map(opt => ({
|
|
key: opt,
|
|
value: field.enumLabels?.[opt] ?? opt,
|
|
}));
|
|
}
|
|
|
|
if (field.relation) {
|
|
const data = relationData ?? [];
|
|
const enumOption = field.enumOption ?? { key: 'id', value: 'name' };
|
|
|
|
return data.map(item => ({
|
|
key: String(item[enumOption.key] ?? ''),
|
|
value: resolveTemplate(enumOption.value, item),
|
|
}));
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
export function toGridValueOptions(options: SelectOption[]): { value: string; label: string }[] {
|
|
return options.map(opt => ({ value: opt.key, label: opt.value }));
|
|
}
|