@visactor/vue-vtable
Version:
The vue version of VTable
64 lines (60 loc) • 2.04 kB
JavaScript
;
var VTable = require('@visactor/vtable');
var vutils = require('@visactor/vutils');
var editor = require('./editor.js');
var constants = require('../constants.js');
/**
* @description: 校验动态渲染式编辑器
* @param {any} column
* @param {any} getEditCustomNode
* @return {*}
*/
function checkRenderEditor(column, getEditCustomNode) {
const { editor } = column || {};
const key = getRenderEditorColumnKeyField(column);
if (!vutils.isValid(key) || editor !== constants.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 vutils.isValid(key) ? key : field;
}
/**
* @description: 获取动态渲染式编辑器
* @param {boolean} create
* @param {any} currentContext
* @return {*}
*/
function getRenderEditor(create, currentContext) {
const registeredEditor = VTable.register.editor(constants.DYNAMIC_RENDER_EDITOR);
let renderEditor = registeredEditor
? registeredEditor
: undefined;
if (!renderEditor && !!create) {
// 注册自定义编辑器
renderEditor = new editor.DynamicRenderEditor(currentContext);
VTable.register.editor(constants.DYNAMIC_RENDER_EDITOR, renderEditor);
}
return renderEditor;
}
exports.checkRenderEditor = checkRenderEditor;
exports.getRenderEditor = getRenderEditor;
exports.getRenderEditorColumnKeyField = getRenderEditorColumnKeyField;