fix: formula field adaptation time field (#5168)

This commit is contained in:
Katherine 2024-09-03 10:16:16 +08:00 committed by GitHub
parent bf82c79c22
commit 4f56b0e559
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 5 deletions

View File

@ -18,8 +18,8 @@ import {
useCollection_deprecated,
useCollectionManager_deprecated,
useFormBlockContext,
ActionContext,
} from '@nocobase/client';
import _ from 'lodash';
import { Evaluator, evaluators } from '@nocobase/evaluators/client';
import { Registry, toFixedByStep } from '@nocobase/utils/client';
import React, { useEffect, useState, useContext } from 'react';
@ -61,6 +61,22 @@ function getValuesByPath(values, key, index?) {
}
}
function areValuesEqual(value1, value2) {
if (_.isString(value1) && !isNaN(Date.parse(value1))) {
value1 = new Date(value1);
}
if (_.isString(value2) && !isNaN(Date.parse(value2))) {
value2 = new Date(value2);
}
if (_.isDate(value1) && _.isDate(value2)) {
return value1.getTime() === value2.getTime();
}
return _.isEqual(value1, value2);
}
export function Result(props) {
const { value, ...others } = props;
const fieldSchema = useFieldSchema();
@ -99,11 +115,16 @@ export function Result(props) {
setEditingValue(v);
}
setEditingValue(v);
if (v !== field.value) {
field.value = v;
}
});
});
useEffect(() => {
if (!areValuesEqual(field.value, editingValue)) {
setTimeout(() => {
field.value = editingValue;
});
}
}, [editingValue]);
const Component = TypedComponents[dataType] ?? InputString;
return (
<Component {...others} value={dataType === 'double' ? toFixedByStep(editingValue, props.step) : editingValue} />

View File

@ -151,7 +151,7 @@ export const DataTypeTransformers = {
};
export function toDbType(value: any, type: string) {
if (value == null) {
if (value == null || (!value && type === 'date')) {
return null;
}