Download packages/form-render/src/models/formCoreUtils.ts from AbdulElahGwaith/x-render: direct link, hf CLI and curl.
- Browser
- Download file 5.32 kB
-
https://huggingface.co/AbdulElahGwaith/x-render/resolve/main/packages/form-render/src/models/formCoreUtils.ts
- Command line
-
hf download hf://AbdulElahGwaith/x-render/packages/form-render/src/models/formCoreUtils.ts
-
curl -L -o formCoreUtils.ts https://huggingface.co/AbdulElahGwaith/x-render/resolve/main/packages/form-render/src/models/formCoreUtils.ts
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 +''); | |
| } | |