import { DateField, TextField } from "@refinedev/antd"; import { Field, FieldType } from "../utils/queryFields"; import { NumberFieldUnit, NumberFieldUnitRange } from "./numberField"; import { enrichText } from "../utils/parsing"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; import { Checkbox, Form, Input, InputNumber, Select, Typography } from "antd"; import { FormItemProps, Rule } from "antd/es/form"; import { DateTimePicker } from "./dateTimePicker"; import { InputNumberRange } from "./inputNumberRange"; dayjs.extend(utc); const { Title } = Typography; /** * Title and value to display an extra field. Used for the show pages. * @param props * @returns */ export function ExtraFieldDisplay(props: { field: Field; value: string | undefined }) { const { field, value } = props; let item; if (value !== undefined) { const parsedValue = JSON.parse(value); if (field.field_type === FieldType.integer) { item = ( ); } else if (field.field_type === FieldType.float) { item = ( ); } else if (field.field_type === FieldType.integer_range || field.field_type === FieldType.float_range) { if (!Array.isArray(parsedValue) || parsedValue.length !== 2) { return ; } item = ( ); } else if (field.field_type === FieldType.text) { item = ; } else if (field.field_type === FieldType.datetime) { item = ( ); } else if (field.field_type === FieldType.boolean) { item = ; } else if (field.field_type === FieldType.choice && !field.multi_choice) { item = ; } else if (field.field_type === FieldType.choice && field.multi_choice) { item = ; } else { throw new Error(`Unknown field type: ${field.field_type}`); } } else { item = <>; } return ( <> {field.name} {item} ); } /** * Form item for an extra field. Used for the edit pages. * @param props * @returns */ export function ExtraFieldFormItem(props: { field: Field; setDefaultValue?: boolean }) { const { field } = props; let inputNode; const rules: Rule[] = [ { required: false, }, ]; const formItemProps: FormItemProps = {}; if (field.field_type === FieldType.integer) { inputNode = ; rules.push({ type: "integer", }); } else if (field.field_type === FieldType.float) { inputNode = ; rules.push({ type: "number", }); } else if (field.field_type === FieldType.integer_range) { inputNode = ; } else if (field.field_type === FieldType.float_range) { inputNode = ; } else if (field.field_type === FieldType.text) { inputNode = ; rules.push({ type: "string", }); } else if (field.field_type === FieldType.datetime) { inputNode = ; } else if (field.field_type === FieldType.boolean) { inputNode = ; formItemProps.valuePropName = "checked"; rules.push({ type: "boolean", }); } else if (field.field_type === FieldType.choice) { inputNode = (