import { $el, getStrTypeAttr, setHtml, removeAttrs } from '../../dom-utils'; import PREFIX from '../prefix'; import DefaultImage from '../../../assets/empty.svg'; class Empty { readonly VERSION: string; readonly COMPONENTS: NodeListOf; constructor() { this.VERSION = 'v1.0'; this.COMPONENTS = $el('r-empty', { all: true }); this._create(this.COMPONENTS); } private _create(COMPONENTS: NodeListOf) { COMPONENTS.forEach((node) => { const { desc, image, imageStyle } = this._attrs(node); const footerElm = node.firstElementChild; this._setMainTemplate(node, desc, image, imageStyle); this._setFooter(node, footerElm); removeAttrs(node, ['desc', 'image', 'image-style']); }); } private _setMainTemplate(node: Element, desc: string, image: string, imageStyle: string): void { const template = `
empty
${desc == 'false' ? '' : desc}
`; setHtml(node, template); } private _setFooter(node: Element, footerElm: Element | null): void { if (!footerElm) return; const footerTpl = ``; node.insertAdjacentHTML('beforeend', footerTpl); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion node.querySelector(`.${PREFIX.empty}-footer`)!.appendChild(footerElm); } private _attrs(node: Element) { return { desc: getStrTypeAttr(node, 'desc', '暂无数据'), image: getStrTypeAttr(node, 'image', `${DefaultImage}`), imageStyle: getStrTypeAttr(node, 'image-style', '') }; } } export default Empty;