feat(web/input): required fields

This commit is contained in:
Luke
2023-01-08 11:35:30 +01:00
parent 6c4485b570
commit d5a9a3fb90
7 changed files with 32 additions and 4 deletions

View File

@@ -61,6 +61,7 @@ const InputDialog: React.FC = () => {
setVisible(false);
const values: any[] = [];
Object.values(data.test).forEach((obj: { value: any }) => values.push(obj.value));
console.log(values);
fetchNui('inputData', values);
await new Promise((resolve) => setTimeout(resolve, 200));
form.reset();
@@ -89,10 +90,18 @@ const InputDialog: React.FC = () => {
return (
<React.Fragment key={item.id}>
{row.type === 'input' && (
<InputField register={form.register(`test.${index}.value`)} row={row} index={index} />
<InputField
register={form.register(`test.${index}.value`, { required: row.required })}
row={row}
index={index}
/>
)}
{row.type === 'checkbox' && (
<CheckboxField register={form.register(`test.${index}.value`)} row={row} index={index} />
<CheckboxField
register={form.register(`test.${index}.value`, { required: row.required })}
row={row}
index={index}
/>
)}
{row.type === 'select' && <SelectField row={row} index={index} control={form.control} />}
{row.type === 'number' && <NumberField control={form.control} row={row} index={index} />}
@@ -105,7 +114,7 @@ const InputDialog: React.FC = () => {
<Button uppercase variant="default" onClick={handleClose} mr={3}>
{locale.ui.cancel}
</Button>
<Button uppercase variant="light" onClick={handleClose} type="submit">
<Button uppercase variant="light" type="submit">
{locale.ui.confirm}
</Button>
</Group>

View File

@@ -11,7 +11,13 @@ interface Props {
const CheckboxField: React.FC<Props> = (props) => {
return (
<Checkbox {...props.register} sx={{ display: 'flex' }} label={props.row.label} defaultChecked={props.row.checked} />
<Checkbox
{...props.register}
sx={{ display: 'flex' }}
required={props.row.required}
label={props.row.label}
defaultChecked={props.row.checked}
/>
);
};

View File

@@ -14,6 +14,7 @@ const ColorField: React.FC<Props> = (props) => {
name: `test.${props.index}.value`,
control: props.control,
defaultValue: props.row.default,
rules: { required: props.row.required },
});
return (
@@ -29,6 +30,7 @@ const ColorField: React.FC<Props> = (props) => {
disabled={props.row.disabled}
defaultValue={props.row.default}
format={props.row.format}
withAsterisk={props.row.required}
/>
);
};

View File

@@ -30,6 +30,7 @@ const InputField: React.FC<Props> = (props) => {
icon={props.row.icon && <FontAwesomeIcon icon={props.row.icon} fixedWidth />}
placeholder={props.row.placeholder}
disabled={props.row.disabled}
withAsterisk={props.row.required}
/>
) : (
<PasswordInput
@@ -40,6 +41,7 @@ const InputField: React.FC<Props> = (props) => {
icon={props.row.icon && <FontAwesomeIcon icon={props.row.icon} fixedWidth />}
placeholder={props.row.placeholder}
disabled={props.row.disabled}
withAsterisk={props.row.required}
visibilityToggleIcon={({ reveal, size }) => (
<FontAwesomeIcon
icon={reveal ? 'eye-slash' : 'eye'}

View File

@@ -16,6 +16,7 @@ const NumberField: React.FC<Props> = (props) => {
name: `test.${props.index}.value`,
control: props.control,
defaultValue: props.row.default,
rules: { required: props.row.required },
});
return (
@@ -32,6 +33,7 @@ const NumberField: React.FC<Props> = (props) => {
max={props.row.max}
disabled={props.row.disabled}
icon={props.row.icon && <FontAwesomeIcon icon={props.row.icon} fixedWidth />}
withAsterisk={props.row.required}
/>
);
};

View File

@@ -15,6 +15,7 @@ const SelectField: React.FC<Props> = (props) => {
name: `test.${props.index}.value`,
control: props.control,
defaultValue: props.row.default,
rules: { required: props.row.required },
});
return (
@@ -28,6 +29,7 @@ const SelectField: React.FC<Props> = (props) => {
disabled={props.row.disabled}
label={props.row.label}
description={props.row.description}
withAsterisk={props.row.required}
/>
);
};