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 = (