Client: Filament/Vendor selects now work

This commit is contained in:
Donkie
2023-05-14 20:06:17 +02:00
parent 8e21cd2e12
commit 43919ac90e
14 changed files with 98 additions and 55 deletions

View File

@@ -1,12 +1,16 @@
import React from "react"; import React from "react";
import { IResourceComponentsProps } from "@refinedev/core"; import { IResourceComponentsProps } from "@refinedev/core";
import { Create, useForm } from "@refinedev/antd"; import { Create, useForm, useSelect } from "@refinedev/antd";
import { Form, Input, DatePicker, Select, InputNumber } from "antd"; import { Form, Input, Select, InputNumber } from "antd";
import dayjs from "dayjs";
import TextArea from "antd/es/input/TextArea"; import TextArea from "antd/es/input/TextArea";
export const FilamentCreate: React.FC<IResourceComponentsProps> = () => { export const FilamentCreate: React.FC<IResourceComponentsProps> = () => {
const { formProps, saveButtonProps, queryResult } = useForm(); const { formProps, saveButtonProps } = useForm();
const { selectProps } = useSelect<IVendor>({
resource: "vendor",
optionLabel: "name",
});
return ( return (
<Create saveButtonProps={saveButtonProps}> <Create saveButtonProps={saveButtonProps}>
@@ -25,14 +29,14 @@ export const FilamentCreate: React.FC<IResourceComponentsProps> = () => {
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="Vendor" label="Vendor"
name={["vendor", "name"]} name={["vendor_id"]}
rules={[ rules={[
{ {
required: false, required: false,
}, },
]} ]}
> >
{/* <Select {...vendorSelectProps} /> */} <Select {...selectProps} allowClear />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="Material" label="Material"

View File

@@ -1,14 +1,22 @@
import React from "react"; import React from "react";
import { IResourceComponentsProps } from "@refinedev/core"; import { IResourceComponentsProps } from "@refinedev/core";
import { Edit, useForm } from "@refinedev/antd"; import { Edit, useForm, useSelect } from "@refinedev/antd";
import { Form, Input, DatePicker, Select, InputNumber } from "antd"; import { Form, Input, DatePicker, Select, InputNumber } from "antd";
import dayjs from "dayjs"; import dayjs from "dayjs";
import TextArea from "antd/es/input/TextArea"; import TextArea from "antd/es/input/TextArea";
export const FilamentEdit: React.FC<IResourceComponentsProps> = () => { export const FilamentEdit: React.FC<IResourceComponentsProps> = () => {
const { formProps, saveButtonProps, queryResult } = useForm(); const { formProps, saveButtonProps } = useForm();
const filamentData = queryResult?.data?.data; const { selectProps } = useSelect<IVendor>({
resource: "vendor",
optionLabel: "name",
});
if (formProps.initialValues) {
formProps.initialValues["vendor_id"] =
formProps.initialValues["vendor"]?.id;
}
return ( return (
<Edit saveButtonProps={saveButtonProps}> <Edit saveButtonProps={saveButtonProps}>
@@ -52,14 +60,21 @@ export const FilamentEdit: React.FC<IResourceComponentsProps> = () => {
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="Vendor" label="Vendor"
name={["vendor", "name"]} name={["vendor_id"]}
rules={[ rules={[
{ {
required: false, required: false,
}, },
]} ]}
// Applying this to Form.Item Select's causes a cleared select to send null
normalize={(value) => {
if (value === undefined) {
return null;
}
return value;
}}
> >
{/* <Select {...vendorSelectProps} /> */} <Select {...selectProps} allowClear />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="Material" label="Material"

View File

@@ -26,7 +26,7 @@ export const FilamentList: React.FC<IResourceComponentsProps> = () => {
<Table.Column <Table.Column
dataIndex="density" dataIndex="density"
title="Density" title="Density"
render={(value: any) => ( render={(value) => (
<NumberField <NumberField
value={value} value={value}
options={{ options={{
@@ -41,7 +41,7 @@ export const FilamentList: React.FC<IResourceComponentsProps> = () => {
<Table.Column <Table.Column
dataIndex="diameter" dataIndex="diameter"
title="Diameter" title="Diameter"
render={(value: any) => ( render={(value) => (
<NumberField <NumberField
value={value} value={value}
options={{ options={{
@@ -56,7 +56,7 @@ export const FilamentList: React.FC<IResourceComponentsProps> = () => {
<Table.Column <Table.Column
dataIndex="weight" dataIndex="weight"
title="Weight" title="Weight"
render={(value: any) => ( render={(value) => (
<NumberField <NumberField
value={value} value={value}
options={{ options={{
@@ -71,7 +71,7 @@ export const FilamentList: React.FC<IResourceComponentsProps> = () => {
<Table.Column <Table.Column
dataIndex="spool_weight" dataIndex="spool_weight"
title="Spool Weight" title="Spool Weight"
render={(value: any) => ( render={(value) => (
<NumberField <NumberField
value={value} value={value}
options={{ options={{

View File

@@ -0,0 +1,14 @@
interface IFilament {
id: string;
registered: string;
name?: string;
vendor?: IVendor;
material?: string;
price?: number;
density: number;
diameter: number;
weight?: number;
spool_weight?: number;
article_number?: string;
comment?: string;
}

View File

@@ -1,12 +1,6 @@
import React from "react"; import React from "react";
import { IResourceComponentsProps, useShow } from "@refinedev/core"; import { IResourceComponentsProps, useShow } from "@refinedev/core";
import { import { Show, NumberField, DateField, TextField } from "@refinedev/antd";
Show,
NumberField,
DateField,
TagField,
TextField,
} from "@refinedev/antd";
import { Typography } from "antd"; import { Typography } from "antd";
const { Title } = Typography; const { Title } = Typography;

View File

@@ -1,12 +1,17 @@
import React from "react"; import React from "react";
import { IResourceComponentsProps } from "@refinedev/core"; import { IResourceComponentsProps } from "@refinedev/core";
import { Create, useForm } from "@refinedev/antd"; import { Create, useForm, useSelect } from "@refinedev/antd";
import { Form, Input, DatePicker, Select, InputNumber } from "antd"; import { Form, Input, DatePicker, Select, InputNumber } from "antd";
import dayjs from "dayjs"; import dayjs from "dayjs";
import TextArea from "antd/es/input/TextArea"; import TextArea from "antd/es/input/TextArea";
export const SpoolCreate: React.FC<IResourceComponentsProps> = () => { export const SpoolCreate: React.FC<IResourceComponentsProps> = () => {
const { formProps, saveButtonProps, queryResult } = useForm(); const { formProps, saveButtonProps } = useForm();
const { selectProps } = useSelect<IFilament>({
resource: "filament",
optionLabel: "name",
});
return ( return (
<Create saveButtonProps={saveButtonProps}> <Create saveButtonProps={saveButtonProps}>
@@ -41,14 +46,14 @@ export const SpoolCreate: React.FC<IResourceComponentsProps> = () => {
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="Filament" label="Filament"
name={["filament", "name"]} name={["filament_id"]}
rules={[ rules={[
{ {
required: true, required: true,
}, },
]} ]}
> >
{/* <Select {...filamentSelectProps} /> */} <Select {...selectProps} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="Used Weight" label="Used Weight"

View File

@@ -1,14 +1,22 @@
import React from "react"; import React from "react";
import { IResourceComponentsProps } from "@refinedev/core"; import { IResourceComponentsProps } from "@refinedev/core";
import { Edit, useForm } from "@refinedev/antd"; import { Edit, useForm, useSelect } from "@refinedev/antd";
import { Form, Input, DatePicker, Select, InputNumber } from "antd"; import { Form, Input, DatePicker, Select } from "antd";
import dayjs from "dayjs"; import dayjs from "dayjs";
import TextArea from "antd/es/input/TextArea"; import TextArea from "antd/es/input/TextArea";
export const SpoolEdit: React.FC<IResourceComponentsProps> = () => { export const SpoolEdit: React.FC<IResourceComponentsProps> = () => {
const { formProps, saveButtonProps, queryResult } = useForm(); const { formProps, saveButtonProps } = useForm();
const spoolData = queryResult?.data?.data; const { selectProps } = useSelect<IFilament>({
resource: "filament",
optionLabel: "name",
});
if (formProps.initialValues) {
formProps.initialValues["filament_id"] =
formProps.initialValues["filament"].id;
}
return ( return (
<Edit saveButtonProps={saveButtonProps}> <Edit saveButtonProps={saveButtonProps}>
@@ -43,7 +51,7 @@ export const SpoolEdit: React.FC<IResourceComponentsProps> = () => {
name={["first_used"]} name={["first_used"]}
rules={[ rules={[
{ {
required: true, required: false,
}, },
]} ]}
getValueProps={(value) => ({ getValueProps={(value) => ({
@@ -57,7 +65,7 @@ export const SpoolEdit: React.FC<IResourceComponentsProps> = () => {
name={["last_used"]} name={["last_used"]}
rules={[ rules={[
{ {
required: true, required: false,
}, },
]} ]}
getValueProps={(value) => ({ getValueProps={(value) => ({
@@ -68,14 +76,14 @@ export const SpoolEdit: React.FC<IResourceComponentsProps> = () => {
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="Filament" label="Filament"
name={["filament", "name"]} name={["filament_id"]}
rules={[ rules={[
{ {
required: true, required: true,
}, },
]} ]}
> >
{/* <Select {...filamentSelectProps} /> */} <Select {...selectProps} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="Used Weight" label="Used Weight"

View File

@@ -27,7 +27,7 @@ export const SpoolList: React.FC<IResourceComponentsProps> = () => {
<Table.Column <Table.Column
dataIndex="remaining_weight" dataIndex="remaining_weight"
title="Estimated Remaining Weight" title="Estimated Remaining Weight"
render={(value: any) => ( render={(value) => (
<NumberField <NumberField
value={value} value={value}
options={{ options={{

View File

@@ -0,0 +1,12 @@
interface ISpool {
id: string;
registered: string;
first_used?: string;
last_used?: string;
filament: IFilament;
remaining_weight?: number;
used_weight: number;
location?: string;
lot_nr?: string;
comment?: string;
}

View File

@@ -1,12 +1,6 @@
import React from "react"; import React from "react";
import { IResourceComponentsProps, useShow } from "@refinedev/core"; import { IResourceComponentsProps, useShow } from "@refinedev/core";
import { import { Show, NumberField, DateField, TextField } from "@refinedev/antd";
Show,
NumberField,
DateField,
TagField,
TextField,
} from "@refinedev/antd";
import { Typography } from "antd"; import { Typography } from "antd";
const { Title } = Typography; const { Title } = Typography;

View File

@@ -1,12 +1,11 @@
import React from "react"; import React from "react";
import { IResourceComponentsProps } from "@refinedev/core"; import { IResourceComponentsProps } from "@refinedev/core";
import { Create, useForm } from "@refinedev/antd"; import { Create, useForm } from "@refinedev/antd";
import { Form, Input, DatePicker } from "antd"; import { Form, Input } from "antd";
import dayjs from "dayjs";
import TextArea from "antd/es/input/TextArea"; import TextArea from "antd/es/input/TextArea";
export const VendorCreate: React.FC<IResourceComponentsProps> = () => { export const VendorCreate: React.FC<IResourceComponentsProps> = () => {
const { formProps, saveButtonProps, queryResult } = useForm(); const { formProps, saveButtonProps } = useForm();
return ( return (
<Create saveButtonProps={saveButtonProps}> <Create saveButtonProps={saveButtonProps}>

View File

@@ -6,9 +6,7 @@ import dayjs from "dayjs";
import TextArea from "antd/es/input/TextArea"; import TextArea from "antd/es/input/TextArea";
export const VendorEdit: React.FC<IResourceComponentsProps> = () => { export const VendorEdit: React.FC<IResourceComponentsProps> = () => {
const { formProps, saveButtonProps, queryResult } = useForm(); const { formProps, saveButtonProps } = useForm();
const vendorData = queryResult?.data?.data;
return ( return (
<Edit saveButtonProps={saveButtonProps}> <Edit saveButtonProps={saveButtonProps}>

6
client/src/pages/vendors/model.tsx vendored Normal file
View File

@@ -0,0 +1,6 @@
interface IVendor {
id: string;
registered: string;
name: string;
comment?: string;
}

View File

@@ -1,12 +1,6 @@
import React from "react"; import React from "react";
import { IResourceComponentsProps, useShow } from "@refinedev/core"; import { IResourceComponentsProps, useShow } from "@refinedev/core";
import { import { Show, NumberField, DateField, TextField } from "@refinedev/antd";
Show,
NumberField,
DateField,
TagField,
TextField,
} from "@refinedev/antd";
import { Typography } from "antd"; import { Typography } from "antd";
const { Title } = Typography; const { Title } = Typography;