UNPKG

tav-ui

Version:
1 lines 6.64 kB
{"version":3,"file":"useColumnAutoWidth2.mjs","sources":["../../../../../../../../packages/components/table-pro/src/hooks/useColumnAutoWidth.ts"],"sourcesContent":["import type { TableProActionItem } from '../typings'\n\n// const DEFAULT_MAX_WIDTH = (17 * 2) + (10 * 2) + (12 * 2 + 4) * 3 // = 138 俩个分割线、俩个 padding、三个俩个字俩个点\nconst DEFAULT_LABEL_MAX_WIDTH = 12 * 2 + 3 * 2 // 12 字体大小,3 一个英文点\nconst DEFAULT_DIVIDER_WIDTH = 16 + 1\nconst DEFAULT_PADDING = 10\nconst DEFAULT_CONTENT_MAX_WIDTH = DEFAULT_LABEL_MAX_WIDTH * 3 + DEFAULT_DIVIDER_WIDTH * 2\nconst DEFAULT_CONTENT_MIN_WIDTH = DEFAULT_LABEL_MAX_WIDTH\nconst DEFAULT_MORE_BUTTON_WIDTH = 3 * 3\n\nexport function useCanvasCalcContent() {\n let canvas: HTMLCanvasElement | null = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n // const getComputedStyle = window.getComputedStyle\n // let bodyEl: HTMLElement | null = document.body\n // const DEFAULT_FONT = `${getComputedStyle(bodyEl).fontWeight} ${getComputedStyle(bodyEl).fontSize} ${getComputedStyle(bodyEl).fontFamily}`\n const DEFAULT_FONT = `normal 12px -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"`\n\n function calcContent(content: string, font: string = DEFAULT_FONT) {\n if (ctx) {\n ctx.font = font\n const { width = 0 } = ctx.measureText(content)\n return Math.ceil(width) + 0.5 // 补 0.5 避免文字尾部截断\n }\n return 0\n }\n\n function clearCalcContentCanvas() {\n canvas?.remove()\n // ctx = null\n canvas = null\n // bodyEl = null\n }\n\n return {\n calcContent,\n clearCalcContentCanvas,\n }\n}\n\nexport function isOverMaxWidth(\n actions: TableProActionItem[] | null,\n calcFn?: (...args: any) => number\n) {\n if (!actions) return false\n\n const getTotal = (_actions: TableProActionItem[]) => {\n return _actions.reduce((total, action, idx) => {\n if (action.label) {\n total += calcFn ? calcFn(action.label) : 0\n } else {\n total += 0\n }\n\n if (idx !== _actions.length - 1) {\n total += DEFAULT_DIVIDER_WIDTH\n }\n return total\n }, 0)\n }\n\n return getTotal(actions) > DEFAULT_CONTENT_MAX_WIDTH\n}\n\nexport function useColumnActionAutoWidth(\n actions: TableProActionItem[] | null,\n labelMaxLength: number,\n calcFn?: (...args: any) => number\n) {\n if (!actions) return undefined\n\n const getTotal = (_actions: TableProActionItem[]) => {\n return _actions.reduce((total, action, idx) => {\n if (action.label) {\n total += calcFn ? calcFn(action.label) : 0\n } else {\n total += 0\n }\n\n if (idx !== _actions.length - 1) {\n total += DEFAULT_DIVIDER_WIDTH\n } else {\n total += DEFAULT_PADDING * 2\n }\n return total\n }, 0)\n }\n\n // 只保留计算宽度时用到的属性其他属性删除\n const actionsDefault = actions.map((action) => ({ label: action.label }))\n const handledActions = JSON.parse(JSON.stringify(actionsDefault))\n\n if (handledActions.length <= labelMaxLength) {\n const total = getTotal(handledActions)\n return total < DEFAULT_CONTENT_MIN_WIDTH + DEFAULT_PADDING * 2\n ? DEFAULT_CONTENT_MIN_WIDTH + DEFAULT_PADDING * 2\n : total\n } else {\n const contentActions = handledActions.slice(0, 2)\n let total = getTotal(contentActions)\n total += DEFAULT_MORE_BUTTON_WIDTH + DEFAULT_DIVIDER_WIDTH\n return total < DEFAULT_CONTENT_MIN_WIDTH + DEFAULT_PADDING * 2\n ? DEFAULT_CONTENT_MIN_WIDTH + DEFAULT_PADDING * 2\n : total\n }\n}\n"],"names":[],"mappings":"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"}