@visactor/vue-vtable
Version:
The vue version of VTable
60 lines (57 loc) • 1.91 kB
JavaScript
import { register } from '@visactor/vtable';
import { isValid } from '@visactor/vutils';
import { DynamicRenderEditor } from './editor.js';
import { DYNAMIC_RENDER_EDITOR } from '../constants.js';
/**
* @description: 校验动态渲染式编辑器
* @param {any} column
* @param {any} getEditCustomNode
* @return {*}
*/
function checkRenderEditor(column, getEditCustomNode) {
const { editor } = column || {};
const key = getRenderEditorColumnKeyField(column);
if (!isValid(key) || editor !== DYNAMIC_RENDER_EDITOR) {
return false;
}
if (typeof getEditCustomNode === 'function') {
column.getEditCustomNode = getEditCustomNode;
// 处理子列
if (Array.isArray(column.columns) && column.columns.length) {
for (const childColumn of column.columns) {
checkRenderEditor(childColumn, getEditCustomNode);
}
}
return true;
}
return typeof column.getEditCustomNode === 'function';
}
/**
* @description: 获取渲染式编辑器的列配置主键
* @param {any} column
* @return {*}
*/
function getRenderEditorColumnKeyField(column) {
const { field, key } = column || {};
// 兼容取 field
return isValid(key) ? key : field;
}
/**
* @description: 获取动态渲染式编辑器
* @param {boolean} create
* @param {any} currentContext
* @return {*}
*/
function getRenderEditor(create, currentContext) {
const registeredEditor = register.editor(DYNAMIC_RENDER_EDITOR);
let renderEditor = registeredEditor
? registeredEditor
: undefined;
if (!renderEditor && !!create) {
// 注册自定义编辑器
renderEditor = new DynamicRenderEditor(currentContext);
register.editor(DYNAMIC_RENDER_EDITOR, renderEditor);
}
return renderEditor;
}
export { checkRenderEditor, getRenderEditor, getRenderEditorColumnKeyField };