UNPKG

ideaz-element

Version:

<p align="center"> <a href="" target="_blank" rel="noopener noreferrer"> <img src="./docs/public/logo.svg" alt="Ideaz Element" width="180" style="width: 180px;" /> </a> </p>

1 lines 9.93 kB
{"version":3,"file":"useEditableColumns.cjs","sources":["../../../../../../packages/element/table/src/hooks/useEditableColumns.ts"],"sourcesContent":["import { isFunction, isObject, uid } from '@ideaz/utils'\nimport { isEqual } from 'lodash-unified'\nimport type { Ref } from 'vue'\nimport DialogTip from '../../../dialog/src/dialog'\nimport type { ITableProps } from '../props'\nimport type { BtnItem, TableCol, TableColumnScopeData } from '../../../types'\n\nfunction replacePropertyValues(obj: any, reverse = false) {\n for (const key in obj) {\n if (key.endsWith('Prop')) {\n const valueKey = key.slice(0, -4)\n if (Object.hasOwnProperty.call(obj, valueKey)) {\n if (reverse)\n obj[valueKey] = obj[key]\n\n else\n obj[key] = obj[valueKey]\n }\n }\n }\n\n return obj\n}\n\nexport function useEditableColumns(props: ITableProps, emit: any, tableData: Ref<any>): { zTableFormRef: Ref<any>, columns: Ref<TableCol[]> } {\n const editableType = ref<'single' | 'multiple'>(isObject(props.editable) ? (props.editable.type || 'single') : 'single')\n const zTableFormRef = ref()\n const columns = ref<TableCol[]>([])\n const { t } = useLocale()\n const { editable } = props\n\n const generateValidateFields = (index: number) => {\n if (tableData.value.length)\n return Object.keys(tableData.value[0]).map(prop => `tableData.${index}.${prop}`)\n\n return []\n }\n\n const renderEdit = (): BtnItem => {\n return {\n label: t('common.edit'),\n type: 'primary',\n link: true,\n hide: ({ row }: TableColumnScopeData) => row.__isEdit || editableType.value === 'multiple',\n onClick: ({ row, $index, column }: TableColumnScopeData) => {\n if (isObject(props.editable) && isFunction(props.editable?.onEdit)) {\n props.editable?.onEdit({ row, $index, column, formRef: zTableFormRef.value })\n }\n else {\n row.__isEdit = true\n emit('update:data', tableData.value)\n }\n },\n }\n }\n\n const renderSave = (): BtnItem => {\n return {\n label: t('common.save'),\n type: 'primary',\n link: true,\n hide: ({ row }: TableColumnScopeData) => !row.__isEdit || editableType.value === 'multiple',\n onClick: ({ row, $index, column }: TableColumnScopeData) => {\n if (!zTableFormRef.value)\n return\n if (isObject(props.editable) && isFunction(props.editable?.onSave)) {\n props.editable?.onSave({ row, $index, column, formRef: zTableFormRef.value })\n }\n else {\n zTableFormRef.value.validateField\n && zTableFormRef.value.validateField(generateValidateFields($index), (validated: boolean) => {\n if (!validated)\n return\n\n replacePropertyValues(row)\n row.__isEdit = false\n emit('update:data', tableData.value)\n })\n }\n },\n }\n }\n\n const renderCancel = (): BtnItem => {\n return {\n label: t('common.cancel'),\n type: 'primary',\n link: true,\n hide: ({ row }: TableColumnScopeData) => !row.__isEdit || editableType.value === 'multiple',\n onClick: ({ row, $index, column }: TableColumnScopeData) => {\n if (isObject(props.editable) && isFunction(props.editable?.onCancel)) {\n props.editable?.onCancel({ row, $index, column, formRef: zTableFormRef.value })\n }\n else {\n replacePropertyValues(row, true)\n row.__isEdit = false\n emit('update:data', tableData.value)\n }\n },\n }\n }\n\n const renderDelete = (): BtnItem => {\n return {\n label: t('common.delete'),\n type: 'primary',\n link: true,\n onClick: ({ row, $index, column }: TableColumnScopeData) => {\n const delData = () => {\n if (isObject(props.editable) && isFunction(props.editable?.onDelete)) {\n props.editable?.onDelete({ row, $index, column, formRef: zTableFormRef.value })\n }\n else {\n tableData.value.splice($index, 1)\n emit('update:data', tableData.value)\n }\n }\n if (isObject(props.editable) && props.editable?.deleteConfirm) {\n DialogTip({\n type: 'warning',\n title: t('dialog.tip'),\n message: t('table.deleteTip'),\n onConfirm: ({ done }) => {\n done()\n delData()\n },\n })\n }\n else {\n delData()\n }\n },\n }\n }\n\n watch(() => props.columns, (newVal, oldVal) => {\n // Avoid excessive update problems caused by reference address changes\n if (isEqual(newVal, oldVal))\n return\n const cols = props.columns.map((item: TableCol) => {\n if (item.type === 'sort')\n return { width: 48, ...item, __uid: uid() }\n if (isObject(item.component))\n return { ...item, __uid: uid(), component: markRaw(item.component) }\n return { ...item, __uid: uid() }\n }) as TableCol[]\n if (editable && cols.length > 0 && cols[cols.length - 1]?.type !== 'button') {\n columns.value = cols.concat({\n type: 'button',\n __uid: uid(),\n label: t('table.action'),\n buttons: [\n renderEdit(),\n renderSave(),\n renderCancel(),\n renderDelete(),\n ],\n } as TableCol)\n }\n else if (editable && cols.length > 0 && cols[cols.length - 1]?.type === 'button') {\n columns.value = cols.map((item: TableCol) => {\n if (item.type === 'button') {\n if (isFunction(item.buttons))\n item.buttons = item.buttons({ renderEdit: renderEdit(), renderSave: renderSave(), renderCancel: renderCancel(), renderDelete: renderDelete() }, tableData)\n }\n return item\n })\n }\n else {\n columns.value = cols\n }\n }, { immediate: true, deep: true })\n\n return { columns, zTableFormRef }\n}\n"],"names":["replacePropertyValues","obj","reverse","key","valueKey","useEditableColumns","props","emit","tableData","editableType","vue","is","zTableFormRef","columns","t","useLocale","editable","generateValidateFields","index","prop","renderEdit","row","$index","column","_a","_b","renderSave","validated","renderCancel","renderDelete","delData","dialog","done","newVal","oldVal","isEqual","cols","item","uid"],"mappings":"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"}