import { isEmpty, isFunction, get, set } from "lodash-es" export const containerItems = ["tabs", "table", "card", "grid", "grid-tailwind", "children-form"] export const inputType = ["input", "input-password", "input-search"] export const pickerType = ["date", "month", "year", "week", "quarter", "range", "time"] export const interactiveControl = (form, columns, maFormObject) => { const obj = [] const names = [] const keys = Object.keys(form) if (keys && keys.length > 0) { keys.map((item) => { if (form[item] && typeof form[item] === "object") { for (let name in form[item]) { names.push(`${item}.${name}`) } } }) } for (let name in form) { columns.map((item) => { if ( (item.dataIndex === name || names.includes(item.dataIndex)) && item.onControl && isFunction(item.onControl) ) { obj.push(item.onControl(get(form, item.dataIndex), maFormObject)) } }) } obj.map((changItem) => { columns.map((item, idx) => { for (let name in changItem) { if (name === item.dataIndex) { columns[idx] = Object.assign(item, changItem[name] || {}) } } }) }) } export const upperCaseFirst = (str) => { if (isEmpty(str)) return "" return str[0].toUpperCase() + str.substr(1) } export const toHump = (str) => { let temp = str[0].toUpperCase() let step = 1 while (str.indexOf("-") > -1) { let index = str.indexOf("-") temp += str.substring(step, index) temp += str[index + 1].toUpperCase() str = str.replace("-", "") step = index + 1 } temp += str.substring(step) return temp } export const getComponentName = (formType) => { if (containerItems.includes(formType)) { return `Ma${toHump(formType)}` } if (pickerType.includes(formType)) { return "MaFormPicker" } if (inputType.includes(formType)) { return "MaFormInput" } return `MaForm${toHump(formType)}` } export const handleFlatteningColumns = (data, columns) => { for (let key in data) { const item = data[key] if (containerItems.includes(item.formType)) { switch (item.formType) { case "tabs": if (item.tabs) { item.tabs.map((tab) => { tab.formList && handleFlatteningColumns(tab.formList, columns) }) } break case "card": item.formList && handleFlatteningColumns(item.formList, columns) break case "grid-tailwind": case "grid": if (item.cols) { item.cols.map((col) => { col.formList && handleFlatteningColumns(col.formList, columns) }) } break case "table": if (item.rows) { item.rows.map((row) => { if (row.cols) { row.cols.map((col) => { col.formList && handleFlatteningColumns(col.formList, columns) }) } }) } break case "children-form": item.formList.map((list) => (list.parentDataIndex = item.dataIndex)) item.formList && handleFlatteningColumns(item.formList, columns) break } } else { columns.push(item) } } } export const insertGlobalCssToHead = (cssCode) => { const head = document.getElementsByTagName("head")[0] const oldStyle = document.getElementById("mineadmin-global-css") oldStyle && head.removeChild(oldStyle) const newStyle = document.createElement("style") newStyle.rel = "stylesheet" newStyle.id = "mineadmin-global-css" try { newStyle.appendChild(document.createTextNode(cssCode)) } catch (ex) { newStyle.styleSheet.cssText = cssCode } head.appendChild(newStyle) } export const insertGlobalFunctionsToHtml = (functionsCode) => { const bodyEle = document.getElementsByTagName("body")[0] const oldScriptEle = document.getElementById("mineadmin-global-functions") oldScriptEle && bodyEle.removeChild(oldScriptEle) const newScriptEle = document.createElement("script") newScriptEle.id = "mineadmin-global-functions" newScriptEle.type = "text/javascript" newScriptEle.innerHTML = functionsCode bodyEle.appendChild(newScriptEle) }