diff --git a/client/src/components/spoolSelectModal.tsx b/client/src/components/spoolSelectModal.tsx index 882b40a..3a95512 100644 --- a/client/src/components/spoolSelectModal.tsx +++ b/client/src/components/spoolSelectModal.tsx @@ -7,6 +7,7 @@ import { useTable } from "@refinedev/antd"; import { t } from "i18next"; import { useSpoolmanFilamentFilter, useSpoolmanMaterials } from "./otherModels"; import { removeUndefined } from "../utils/filtering"; +import { useNavigate } from "react-router-dom"; interface Props { visible: boolean; @@ -40,6 +41,7 @@ const SpoolSelectModal: React.FC = ({ visible, description, onCancel, onC const [selectedItems, setSelectedItems] = useState([]); const [showArchived, setShowArchived] = useState(false); const [messageApi, contextHolder] = message.useMessage(); + const navigate = useNavigate(); const { tableProps, sorters, filters, current, pageSize } = useTable({ meta: { @@ -102,6 +104,17 @@ const SpoolSelectModal: React.FC = ({ visible, description, onCancel, onC const isSomeButNotAllFilteredSelected = dataSource.some((spool) => selectedItems.includes(spool.id)) && !isAllFilteredSelected; + const commonProps = { + t, + navigate, + actions: () => { + return []; + }, + dataSource, + tableState, + sorter: true, + }; + return ( = ({ visible, description, onCancel, onC ), }, SortedColumn({ + ...commonProps, id: "id", i18ncat: "spool", - dataSource, - tableState, width: 80, }), SpoolIconColumn({ + ...commonProps, id: "combined_name", dataId: "filament.id", i18nkey: "spool.fields.filament_name", color: (record: ISpoolCollapsed) => record.filament.color_hex, - dataSource, - tableState, filterValueQuery: useSpoolmanFilamentFilter(), }), FilteredQueryColumn({ + ...commonProps, id: "filament.material", i18nkey: "spool.fields.material", - dataSource, - tableState, filterValueQuery: useSpoolmanMaterials(), }), ])} diff --git a/client/src/pages/filaments/create.tsx b/client/src/pages/filaments/create.tsx index 58e8a46..664391d 100644 --- a/client/src/pages/filaments/create.tsx +++ b/client/src/pages/filaments/create.tsx @@ -1,21 +1,18 @@ import React from "react"; import { HttpError, IResourceComponentsProps, useTranslate } from "@refinedev/core"; import { Create, useForm, useSelect } from "@refinedev/antd"; -import { Form, Input, Select, InputNumber, ColorPicker, Button } from "antd"; +import { Form, Input, Select, InputNumber, ColorPicker, Button, Typography } from "antd"; import TextArea from "antd/es/input/TextArea"; import { numberFormatter, numberParser } from "../../utils/parsing"; import { IVendor } from "../vendors/model"; -import { IFilament } from "./model"; -import { EntityType, FieldType, useGetFields } from "../../utils/queryFields"; +import { IFilament, IFilamentParsedExtras } from "./model"; +import { EntityType, useGetFields } from "../../utils/queryFields"; import { ExtraFieldFormItem, StringifiedExtras } from "../../components/extraFields"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; dayjs.extend(utc); -// IFilamentParsedExtras is the same as IFilament, but with the extra field parsed into its real types -type IFilamentParsedExtras = Omit & { extra?: { [key: string]: unknown } }; - interface CreateOrCloneProps { mode: "create" | "clone"; } @@ -58,11 +55,7 @@ export const FilamentCreate: React.FC { extraFields.data?.forEach((field) => { if (formProps.initialValues && field.default_value) { - let parsedValue = JSON.parse(field.default_value as string); - if (field.field_type === FieldType.datetime) { - parsedValue = dayjs(parsedValue); - } - + const parsedValue = JSON.parse(field.default_value as string); form.setFieldsValue({ extra: { [field.key]: parsedValue } }); } }); @@ -263,6 +256,7 @@ export const FilamentCreate: React.FC