useComponentStyle.ts
2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import type { CSSProperties } from 'vue'
import type { RenderComponentProps } from '../types'
import { NodeUtils } from '@/hooks/business/useNodeUtils'
import { EnableEnum, GradientDirectionEnum, type MxShapeStyleType } from '@/fitCore/types'
const gradientDirectionMap = {
[GradientDirectionEnum.NORTH]: 'to top',
[GradientDirectionEnum.EAST]: 'to right',
[GradientDirectionEnum.SOUTH]: 'to bottom',
[GradientDirectionEnum.WEST]: 'to left',
}
export interface UseComponentStyleReturnType {
style: CSSProperties
textAalign?: string
borderColor?: string
borderWidth?: number
borderStyle?: string
backgroundColor?: string
fontFamily?: string
color?: string
fontSize?: number
gradientBackgroundColor?: string
gradientDirection?: GradientDirectionEnum
opacity?: number
}
export function useComponentStyle(props: RenderComponentProps): UseComponentStyleReturnType {
const result: UseComponentStyleReturnType = { style: {} }
const nodeUtils = new NodeUtils()
const { cellInfo } = props.config
const { id } = cellInfo || {}
if (!id) return result
const cell = nodeUtils.getCellById(id)
if (!cell) return result
const cellState = nodeUtils.getCellState(cell)
const {
align,
dashed,
fillColor,
fontColor,
fontFamily,
fontSize,
gradientColor,
gradientDirection,
opacity,
// shadow,
strokeColor,
// sketch,
strokeWidth = 1,
} = cellState.style as MxShapeStyleType
const getBackgroundColor = () => {
return {
background: gradientColor !== 'none'
? gradientDirection === GradientDirectionEnum.RADIAL
? `radial-gradient(${fillColor}, ${gradientColor})`
: `linear-gradient(${gradientDirectionMap[gradientDirection]}, ${fillColor}, ${gradientColor})`
: fillColor,
} as CSSProperties
}
const getBorderStyle = () => {
return {
borderColor: strokeColor,
borderWidth: strokeWidth,
borderStyle: strokeColor
? dashed === EnableEnum.ENABLE
? 'dashed'
: 'solid'
: 'none',
} as CSSProperties
}
return {
style: {
textAlign: align,
opacity,
fontSize,
fontFamily,
color: fontColor,
...getBorderStyle(),
...getBackgroundColor(),
},
textAalign: align,
borderColor: strokeColor,
borderWidth: strokeWidth,
borderStyle: dashed === EnableEnum.ENABLE ? 'dashed' : 'solid',
backgroundColor: fillColor,
fontFamily,
color: fontColor,
fontSize,
gradientBackgroundColor: gradientColor,
gradientDirection,
opacity,
}
}