UNPKG

vue-admin-core

Version:
1 lines 5.36 kB
{"version":3,"file":"useResponsiveFormLayout.mjs","sources":["../../../../../../package/formily/form-layout/src/useResponsiveFormLayout.ts"],"sourcesContent":["import { isArr, isValid } from \"@formily/shared\";\nimport { onMounted, ref, getCurrentInstance } from \"vue\";\nimport type { ComponentInternalInstance } from \"vue\";\n\ninterface IProps {\n breakpoints?: number[];\n layout?: \"vertical\" | \"horizontal\" | \"inline\" | (\"vertical\" | \"horizontal\" | \"inline\")[];\n labelCol?: number | number[];\n wrapperCol?: number | number[];\n labelAlign?: \"right\" | \"left\" | (\"right\" | \"left\")[];\n wrapperAlign?: \"right\" | \"left\" | (\"right\" | \"left\")[];\n [props: string]: any;\n}\n\ninterface ICalcBreakpointIndex {\n (originalBreakpoints: number[], width: number): number;\n}\n\ninterface ICalculateProps {\n (target: Element, props: IProps): IProps;\n}\n\nconst calcBreakpointIndex: ICalcBreakpointIndex = (breakpoints, width) => {\n for (let i = 0; i < breakpoints.length; i++) {\n if (width <= breakpoints[i]) {\n return i;\n }\n }\n return -1;\n};\n\nconst calcFactor = <T>(value: T | T[], breakpointIndex: number): T => {\n if (Array.isArray(value)) {\n if (breakpointIndex === -1) return value[0];\n return value[breakpointIndex] ?? value[value.length - 1];\n } else {\n return value;\n }\n};\n\nconst factor = <T>(value: T | T[], breakpointIndex: number): T =>\n isValid(value) ? calcFactor(value as any, breakpointIndex) : value;\n\nconst calculateProps: ICalculateProps = (target, props) => {\n const { clientWidth } = target;\n const { breakpoints, layout, labelAlign, wrapperAlign, labelCol, wrapperCol, ...otherProps } =\n props;\n const breakpointIndex = calcBreakpointIndex(breakpoints as number[], clientWidth);\n\n return {\n layout: factor(layout, breakpointIndex),\n labelAlign: factor(labelAlign, breakpointIndex),\n wrapperAlign: factor(wrapperAlign, breakpointIndex),\n labelCol: factor(labelCol, breakpointIndex),\n wrapperCol: factor(wrapperCol, breakpointIndex),\n ...otherProps\n };\n};\n\nconst useRefs = (): Record<string, unknown> => {\n const vm: ComponentInternalInstance | null = getCurrentInstance();\n return vm?.refs || {};\n};\n\nexport const useResponsiveFormLayout = (props: any) => {\n const { breakpoints } = props;\n if (!isArr(breakpoints)) {\n return {\n props: ref(props)\n };\n }\n const layoutProps = ref<IProps>({});\n\n const updateUI = (target: HTMLElement) => {\n layoutProps.value = calculateProps(target, props);\n };\n\n onMounted(() => {\n const { root } = useRefs();\n const observer = () => {\n updateUI(root as HTMLElement);\n };\n const resizeObserver = new ResizeObserver(observer);\n if (root) {\n resizeObserver.observe(root as Element);\n }\n\n updateUI(root as HTMLElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n });\n\n return {\n props: layoutProps\n };\n};\n"],"names":[],"mappings":"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"}