fix: applied timezone to default values, removed value nesting
This commit is contained in:
@ -26,11 +26,10 @@ const AttributeValueInput: FC<Props> = ({
|
||||
};
|
||||
|
||||
const renderCheckbox = () => {
|
||||
const localValue = value === undefined ? false : value;
|
||||
return (
|
||||
<Checkbox
|
||||
{...commonProps}
|
||||
checked={localValue}
|
||||
checked={Boolean(value)}
|
||||
onChange={e => onChange(e.currentTarget.checked)}
|
||||
/>
|
||||
);
|
||||
@ -80,7 +79,7 @@ const AttributeValueInput: FC<Props> = ({
|
||||
<NumberInput
|
||||
{...commonProps}
|
||||
allowDecimal={attrInfo.type.type === "float"}
|
||||
value={Number(value)}
|
||||
value={value ? Number(value) : undefined}
|
||||
onChange={value => onChange(Number(value))}
|
||||
/>
|
||||
);
|
||||
|
||||
@ -23,8 +23,9 @@ type Props = {
|
||||
deal: DealSchema;
|
||||
};
|
||||
|
||||
type Value = {
|
||||
type AttrInfo = {
|
||||
value?: any;
|
||||
isApplicableToGroup: boolean;
|
||||
};
|
||||
|
||||
const CustomTab: FC<Props> = ({ module, deal }) => {
|
||||
@ -35,16 +36,19 @@ const CustomTab: FC<Props> = ({ module, deal }) => {
|
||||
});
|
||||
|
||||
const [attributeValuesMap, setAttributeValuesMap] = useState<
|
||||
Map<number, Value | null>
|
||||
Map<number, AttrInfo | null>
|
||||
>(new Map());
|
||||
const [attributeErrorsMap, setAttributeErrorsMap] = useState<
|
||||
Map<number, string>
|
||||
>(new Map());
|
||||
|
||||
useEffect(() => {
|
||||
const values = new Map<number, Value | null>();
|
||||
const values = new Map<number, AttrInfo | null>();
|
||||
for (const dealAttr of dealAttributes) {
|
||||
values.set(dealAttr.attributeId, dealAttr?.value);
|
||||
values.set(dealAttr.attributeId, {
|
||||
...dealAttr,
|
||||
value: dealAttr.value,
|
||||
});
|
||||
}
|
||||
setAttributeValuesMap(values);
|
||||
}, [dealAttributes]);
|
||||
@ -65,10 +69,10 @@ const CustomTab: FC<Props> = ({ module, deal }) => {
|
||||
attributeValuesMap
|
||||
.entries()
|
||||
.map(
|
||||
([attributeId, value]) =>
|
||||
([attributeId, info]) =>
|
||||
({
|
||||
attributeId,
|
||||
value,
|
||||
...info,
|
||||
}) as UpdateDealModuleAttributeSchema
|
||||
)
|
||||
.toArray();
|
||||
@ -83,7 +87,10 @@ const CustomTab: FC<Props> = ({ module, deal }) => {
|
||||
attrInfo={attribute}
|
||||
value={attributeValuesMap.get(attribute.attributeId)?.value}
|
||||
onChange={value => {
|
||||
attributeValuesMap.set(attribute.attributeId, { value });
|
||||
attributeValuesMap.set(attribute.attributeId, {
|
||||
...attribute,
|
||||
value,
|
||||
});
|
||||
setAttributeValuesMap(new Map(attributeValuesMap));
|
||||
attributeErrorsMap.delete(attribute.attributeId);
|
||||
setAttributeErrorsMap(new Map(attributeErrorsMap));
|
||||
|
||||
@ -2,6 +2,7 @@ import { Checkbox, NumberInput, TextInput } from "@mantine/core";
|
||||
import { DatePickerInput, DateTimePicker } from "@mantine/dates";
|
||||
import { UseFormReturnType } from "@mantine/form";
|
||||
import { UpdateAttributeSchema } from "@/lib/client";
|
||||
import { naiveDateTimeStringToUtc } from "@/utils/datetime";
|
||||
|
||||
type Props = {
|
||||
form: UseFormReturnType<Partial<UpdateAttributeSchema>>;
|
||||
@ -12,7 +13,7 @@ const DefaultAttributeValueInput = ({ form }: Props) => {
|
||||
const label = "Значение по умолчанию";
|
||||
const inputName = "defaultValue";
|
||||
|
||||
const value = form.getValues().defaultValue?.value;
|
||||
const value = form.getValues().defaultValue;
|
||||
|
||||
if (type === "bool") {
|
||||
return (
|
||||
@ -21,9 +22,7 @@ const DefaultAttributeValueInput = ({ form }: Props) => {
|
||||
{...form.getInputProps(inputName, { type: "checkbox" })}
|
||||
checked={value as boolean}
|
||||
onChange={e =>
|
||||
form.setFieldValue("defaultValue", {
|
||||
value: e.currentTarget.checked,
|
||||
})
|
||||
form.setFieldValue("defaultValue", e.currentTarget.checked)
|
||||
}
|
||||
/>
|
||||
);
|
||||
@ -33,13 +32,11 @@ const DefaultAttributeValueInput = ({ form }: Props) => {
|
||||
label={label}
|
||||
{...form.getInputProps(inputName)}
|
||||
value={
|
||||
form.values.defaultValue?.value
|
||||
? new Date(String(form.values.defaultValue.value))
|
||||
form.values.defaultValue
|
||||
? new Date(String(form.values.defaultValue))
|
||||
: null
|
||||
}
|
||||
onChange={value =>
|
||||
form.setFieldValue("defaultValue", { value })
|
||||
}
|
||||
onChange={value => form.setFieldValue("defaultValue", value)}
|
||||
clearable
|
||||
locale={"ru"}
|
||||
valueFormat={"DD.MM.YYYY"}
|
||||
@ -51,13 +48,21 @@ const DefaultAttributeValueInput = ({ form }: Props) => {
|
||||
label={label}
|
||||
{...form.getInputProps(inputName)}
|
||||
value={
|
||||
form.values.defaultValue?.value
|
||||
? new Date(String(form.values.defaultValue.value))
|
||||
form.values.defaultValue
|
||||
? naiveDateTimeStringToUtc(
|
||||
form.values.defaultValue as string
|
||||
)
|
||||
: null
|
||||
}
|
||||
onChange={value =>
|
||||
form.setFieldValue("defaultValue", { value })
|
||||
}
|
||||
onChange={val => {
|
||||
if (!val) return;
|
||||
const localDate = new Date(val.replace(" ", "T"));
|
||||
const utcString = localDate
|
||||
.toISOString()
|
||||
.substring(0, 19)
|
||||
.replace("T", " ");
|
||||
form.setFieldValue("defaultValue", utcString);
|
||||
}}
|
||||
clearable
|
||||
locale={"ru"}
|
||||
valueFormat={"DD.MM.YYYY HH:mm"}
|
||||
@ -76,9 +81,9 @@ const DefaultAttributeValueInput = ({ form }: Props) => {
|
||||
allowDecimal={type === "float"}
|
||||
label={label}
|
||||
{...form.getInputProps(inputName)}
|
||||
value={Number(form.values.defaultValue?.value)}
|
||||
value={Number(form.values.defaultValue)}
|
||||
onChange={value =>
|
||||
form.setFieldValue("defaultValue", { value: Number(value) })
|
||||
form.setFieldValue("defaultValue", Number(value))
|
||||
}
|
||||
/>
|
||||
);
|
||||
|
||||
@ -7,6 +7,7 @@ import { Box } from "@mantine/core";
|
||||
import useIsMobile from "@/hooks/utils/useIsMobile";
|
||||
import { ModuleAttributeSchema } from "@/lib/client";
|
||||
import {
|
||||
naiveDateTimeStringToUtc,
|
||||
utcDateTimeToLocalString,
|
||||
utcDateToLocalString,
|
||||
} from "@/utils/datetime";
|
||||
@ -32,12 +33,14 @@ const useAttributesInnerTableColumns = () => {
|
||||
accessor: "defaultValue",
|
||||
render: attr => {
|
||||
if (!attr.defaultValue) return <>-</>;
|
||||
const value = attr.defaultValue.value;
|
||||
const value = attr.defaultValue;
|
||||
if (value === null) return <>-</>;
|
||||
|
||||
const type = attr.type.type;
|
||||
if (type === "datetime") {
|
||||
return utcDateTimeToLocalString(value as string);
|
||||
return utcDateTimeToLocalString(
|
||||
naiveDateTimeStringToUtc(value as string)
|
||||
);
|
||||
}
|
||||
if (type === "date") {
|
||||
return utcDateToLocalString(value as string);
|
||||
|
||||
Reference in New Issue
Block a user