x-render / packages /form-render /src /models /formCoreUtils.ts
AbdulElahGwaith's picture
Upload folder using huggingface_hub
c9d0005 verified
Raw History Blame Contribute Delete
5.32 kB
import { isObject, isArray, _get, _has, isFunction, isObjType } from '../utils';
const executeCallBack = (watchItem: any, value: any, path: string, index?: any) => {
if (isFunction(watchItem)) {
try {
watchItem(value, index);
} catch (error) {
console.log(`${path}对应的watch函数执行报错:`, error);
}
}
if (isFunction(watchItem?.handler)) {
try {
watchItem.handler(value, index);
} catch (error) {
console.log(`${path}对应的watch函数执行报错:`, error);
}
}
};
const traverseValues = ({ changedValues, allValues, flatValues }) => {
const traverseArray = (list: any[], fullList: any, path: string, index: number[]) => {
if (!list.length) {
return
}
const _path = path += '[]';
const filterLength = list.filter(item => (item || item === undefined)).length;
let flag = filterLength !== fullList.length || list.length === 1;
let isRemove = false;
if (filterLength > 1 && filterLength < fullList.length) {
flag = false;
isRemove = true;
}
list.forEach((item: any, idx: number) => {
if (!isRemove) {
flatValues[_path] = { value: fullList[idx], index };
}
if (isObject(item)) {
traverseObj(item, fullList[idx], _path, [...index, idx], !flag);
}
if (isArray(item)) {
traverseArray(item, fullList[idx], _path, [...index, idx]);
}
});
};
const traverseObj = (obj: any, fullObj: any, path: string, index: number[], flag?: boolean) => {
Object.keys(obj).forEach((key: string) => {
const item = obj[key];
const fullItem = fullObj?.[key];
let value = item;
const _path = path ? (path + '.' + key) : key;
let last = true;
if (isArray(item)) {
value = fullItem ? [...fullItem] : fullItem;
last = false;
traverseArray(item, fullItem, _path, index);
}
if (isObject(item)) {
last = false;
traverseObj(item, fullItem, _path, index, flag);
}
if (!last || !flag) {
flatValues[_path] = { value, index };
}
});
};
traverseObj(changedValues, allValues, null, []);
};
export const valuesWatch = (changedValues: any, allValues: any, watch: any) => {
if (Object.keys(watch || {})?.length === 0) {
return;
}
const flatValues = {
'#': { value: allValues, index: changedValues }
};
traverseValues({ changedValues, allValues, flatValues });
Object.keys(watch).forEach(path => {
if (!_has(flatValues, path)) {
return;
}
const { value, index } = _get(flatValues, path) as { value: any; index: any; };
const item = watch[path];
executeCallBack(item, value, path, index)
});
};
export const transformFieldsData = (_fieldsError: any, getFieldName: any) => {
let fieldsError = _fieldsError;
if (isObject(fieldsError)) {
fieldsError = [fieldsError];
}
if (!(isArray(fieldsError) && fieldsError.length > 0)) {
return;
}
return fieldsError.map((field: any) => ({ errors: field.error, ...field, name: getFieldName(field.name) }));
};
export const immediateWatch = (watch: any, values: any) => {
if (Object.keys(watch || {})?.length === 0) {
return;
}
const watchObj = {};
Object.keys(watch).forEach(key => {
const watchItem = watch[key];
if (watchItem?.immediate && isFunction(watchItem?.handler)) {
watchObj[key] = watchItem;
}
});
valuesWatch(values, values, watchObj);
};
export const getSchemaFullPath = (path: string, schema: any) => {
if (!path || !path.includes('.')) {
return 'properties.' + path;
}
// 补全 list 类型 path 路径
while(path.includes('[]')) {
const index = path.indexOf('[]');
path = path.substring(0, index) + '.items' + path.substring(index + 2);
}
// 补全 object 类型 path 路径
let result = 'properties';
const pathList = path.split('.');
pathList.forEach((item, index) => {
const key = result + '.' + item;
const itemSchema = _get(schema, key, {});
if (isObjType(itemSchema) && index !== pathList.length-1) {
result = key + '.properties';
return ;
}
result = key;
});
return result;
};
export function yymmdd(timeStamp) {
const date_ob = new Date(Number(timeStamp));
const adjustZero = num => ('0' + num).slice(-2);
let day = adjustZero(date_ob.getDate());
let month = adjustZero(date_ob.getMonth());
let year = date_ob.getFullYear();
let hours = adjustZero(date_ob.getHours());
let minutes = adjustZero(date_ob.getMinutes());
let seconds = adjustZero(date_ob.getSeconds());
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
export function msToTime(duration) {
let seconds: any = Math.floor((duration / 1000) % 60);
let minutes: any = Math.floor((duration / (1000 * 60)) % 60);
let hours: any = Math.floor((duration / (1000 * 60 * 60)) % 24);
hours = hours < 10 ? '0' + hours : hours;
minutes = minutes < 10 ? '0' + minutes : minutes;
seconds = seconds < 10 ? '0' + seconds : seconds;
return hours + ':' + minutes + ':' + seconds;
}
export const getSessionItem = (key: string) => {
return Number(sessionStorage.getItem(key) || 0);
}
export const setSessionItem = (key: string, data: any) => {
sessionStorage.setItem(key, data +'');
}