UNPKG

yhui-yuanhuan

Version:

A Component Library for Vue 3 based on element-plus

1 lines 12.7 kB
{"version":3,"file":"setting.mjs","sources":["../../../../../../packages/components/table/src/setting.ts"],"sourcesContent":["import { type Ref, VNode, ref, watch } from 'vue'\n\nexport const actionsColumnProp = '_@_actions'\n\ntype VNodeWithSeenChildren = VNode & { _seenChildren?: VNode[] }\n\ntype Column = {\n type: string\n prop: string\n label: string\n checked: boolean\n disabled: boolean\n children?: Column[]\n}\n\ntype SettingDataConstructorParam = Partial<SettingData> &\n Pick<SettingData, 'slotItems'>\n/**\n * 表格设置\n *\n * 有两个`map`:一个在`static`中,`new`时使用;一个在`storage`中,`retrieve`时使用\n *\n */\nexport class SettingData {\n columns: Column[] = [] as Column[]\n slotItems: VNode[] = []\n purifiedSlotItems: VNode[] = []\n propEnum: string[] = []\n id: string = Date.now().toString()\n static key = 'YH-TABLE-SETTING-MAPPING'\n /**\n * see getInstance\n */\n private constructor(param: SettingDataConstructorParam) {\n if (param.id) this.id = param.id\n if (param.slotItems) {\n this.slotItems = param.slotItems\n this.setColumns()\n }\n }\n static getInstance(param: SettingDataConstructorParam) {\n /* # 没有`id`返回新实例 */\n if (!param.id) return new SettingData(param)\n\n /* # 有`id`返回`storageSetting`*/\n const storageSetting = SettingData.unstore({\n id: param.id,\n slotItems: param.slotItems,\n })\n /* # `storage`中找到`id`对应实例 */\n if (storageSetting) return storageSetting\n /* # `storage`中没有`id`对应实例 */\n /* 需要创建新实例 */\n return new SettingData(param)\n }\n private validateProp(prop, current: VNode) {\n const isElTableColumn = getIsElTableColumn(current)\n if (!isElTableColumn) return\n if (!prop) {\n console.log(current)\n throw new Error(\n `\"prop\" attribute is required for ElTableColumn in YhTable`\n )\n }\n const hasSameProp = this.propEnum.includes(prop)\n if (hasSameProp) throw new Error(`prop ${prop} is duplicated`)\n }\n purifySlotItems(slotItems: VNode[]): VNodeWithSeenChildren[] {\n this.propEnum = []\n\n const purifiedSlotItems = slotItems.reduce((pre, cur) => {\n const type = cur.type.toString()\n const prop = cur.props?.prop\n\n const isComment = 'Symbol(Comment)' === type\n const isTemplate = type === 'template'\n if (isComment || isTemplate) return pre\n\n const isFragment = ['Symbol(v-fgt)', 'Symbol(Fragment)'].includes(type)\n if (isFragment && cur.children?.length) {\n pre.push(...this.purifySlotItems(cur.children as VNode[]))\n return pre\n }\n\n this.validateProp(prop, cur)\n this.propEnum.push(prop)\n\n // const isChildrenSlot = typeof cur.children?.['default'] === 'function'\n // if (isChildrenSlot) {\n // const children = cur.children!['default']!()\n // cur.children = children\n // }\n // const isChildrenArray = Array.isArray(cur.children)\n // if (isChildrenArray) {\n // cur.children = this.purifySlotItems(cur.children as VNode[])\n // }\n\n pre.push(cur)\n return pre\n }, [] as VNode[])\n\n return purifiedSlotItems\n }\n generateColumns(purifiedSlotItems: VNode[]) {\n if (!purifiedSlotItems) return []\n const columns = purifiedSlotItems.map((it) => {\n const type = it.props?.type\n const prop = it.props?.prop\n const label = it.props?.label\n const checked = true\n const disabled = false\n // const children = this.generateColumns(it.children as VNode[])\n return { type, prop, label, checked, disabled }\n })\n return columns\n }\n setColumns() {\n const purifiedSlotItems = this.purifySlotItems(this.slotItems)\n const columns = this.generateColumns(purifiedSlotItems)\n this.purifiedSlotItems = purifiedSlotItems\n this.columns = columns\n }\n\n clear() {\n if (!this) return\n let oldMapping = SettingData.unstore()\n if (typeof oldMapping !== 'object') oldMapping = {}\n const mapping = { ...oldMapping, [this.id]: undefined }\n localStorage.setItem(SettingData.key, JSON.stringify(mapping))\n this.setColumns()\n }\n watch(theRef?: Ref<SettingData>) {\n const thisRef = ref(this)\n const targetRef = theRef || thisRef\n watch(\n () => targetRef.value,\n () => targetRef.value.store(),\n { deep: true }\n )\n }\n store() {\n if (!this) return\n let oldMapping = SettingData.unstore()\n if (typeof oldMapping !== 'object') oldMapping = {}\n const mapping = {\n ...oldMapping,\n [this.id]: {\n ...this,\n slotItems: undefined,\n purifiedSlotItems: undefined,\n },\n }\n localStorage.setItem(SettingData.key, JSON.stringify(mapping))\n }\n static clear() {\n localStorage.removeItem(SettingData.key)\n }\n /**\n * 获取表格设置\n * @param option\n * @returns 无id,返回所有设置,需要自行 new SettingData(item)\n * @returns 有id,返回对应设置\n * @returns 有id和columns,返回合并的设置 columns:[...{...columnInOption,...columnInStorage}]\n * columns 由 option.columns.map 合并 storage 中的设置\n */\n static unstore(): Record<string, object> | null\n static unstore(\n option: Pick<SettingData, 'id' | 'slotItems'>\n ): SettingData | null\n static unstore(\n option: Pick<SettingData, 'id' | 'slotItems' | 'columns'>\n ): SettingData | null\n static unstore(\n option: SettingDataConstructorParam\n ): SettingData | Record<string, Partial<SettingData>> | null\n static unstore(\n option?: SettingDataConstructorParam\n ): SettingData | Record<string, Partial<SettingData>> | null {\n const string = localStorage.getItem(SettingData.key)\n if (!string) return null\n const mapping: Record<string, Partial<SettingData>> = JSON.parse(string)\n if (typeof mapping !== 'object') return null\n\n if (!option?.id) return mapping\n\n const mappedArg = mapping[option.id]\n if (!mappedArg) return null\n\n const setting = new SettingData({\n ...mappedArg,\n slotItems: option.slotItems,\n })\n if (!option?.columns) return setting\n\n const columns = option.columns.map((cInOption) => {\n const cInSetting = setting.columns.find((c) => c.prop === cInOption.prop)\n if (cInSetting) return { ...cInOption, ...cInSetting }\n return { ...cInOption }\n })\n setting.columns = columns\n return setting\n }\n}\n\nfunction getIsElTableColumn(node: VNode): node is VNode {\n return node.type?.['name'] === 'ElTableColumn'\n}\n"],"names":[],"mappings":"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"}