import { isNumber } from 'lodash';
import { defineComponent, h } from '@vue/composition-api';
import { VNode } from 'vue';
import icon from '@/lib/icon/index.vue';
import { TREE_INDENT_PX } from '@/lib/constants/dom-buffer';
import './index.scss';
import { CellValue, IndexColumn } from '@/lib/types';
import {log} from "@/lib/utils/log";
export const TextCell = defineComponent({
name: 'TextCell',
functional: true,
props: {
text: {
require: true,
type: String,
},
},
render(_h, { props }) {
const { text } = props;
return (
{text || ''}
);
},
});
export const treeTextRender = (
text: string,
isTreeExpand: boolean,
treeIndent: number | undefined,
narrowTreeRowHandle: () => void,
expandTreeRowHandle: () => void,
) => {
const renderText = () => {
const style = isNumber(treeIndent)
? {
'padding-left': `${treeIndent * TREE_INDENT_PX}px`,
}
: {};
return h(
'span',
{
class: {
'text-cell-content': true,
},
style,
},
text,
);
};
const renderBox = (vNodes: VNode[]) =>
h(
'div',
{
class: {
'text-cell-box': true,
'text-tree-box': true,
},
},
vNodes,
);
const expandIcon = h(icon, {
class: {
'tree-narrow': !isTreeExpand,
},
props: {
name: 'angle-down-solid',
},
nativeOn: {
click: (event) => {
event.stopPropagation();
if (isTreeExpand) {
narrowTreeRowHandle();
} else {
expandTreeRowHandle();
}
},
},
});
return renderBox([expandIcon, renderText()]);
};
export const textRender = (text: string, treeIndent: number | undefined) => {
const renderText = () => {
const style = isNumber(treeIndent)
? {
'padding-left': `${treeIndent * TREE_INDENT_PX}px`,
}
: {};
return h(
'span',
{
class: {
'text-cell-content': true,
},
style,
},
text,
);
};
const renderBox = (vNodes: VNode[]) =>
h(
'div',
{
class: {
'text-cell-box': true,
},
},
vNodes,
);
return renderBox([renderText()]);
};
export const customRender = (
renderer: IndexColumn['renderer'],
value: CellValue,
rowData,
rowId,
) => {
log(`[render] [cellar] customRender`, rowId);
const custom = renderer({ value, rowData, rowId });
return h(
'div',
{
class: {
'text-cell-box': true,
},
},
Array.isArray(custom) ? custom : [custom],
);
};