-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSelectPrefix.tsx
More file actions
70 lines (63 loc) · 1.86 KB
/
SelectPrefix.tsx
File metadata and controls
70 lines (63 loc) · 1.86 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
import React from "react";
import { Box, BoxProps } from "../../primitives";
import { useTailwind, useTheme } from "../../theme";
import { createIcon } from "../create-icon";
import { Icon } from "../icon";
import { SelectProps } from "./Select";
interface SelectPrefixProps
extends Pick<
SelectProps,
"size" | "variant" | "disabled" | "invalid" | "prefix"
>,
BoxProps {
isPressedOrHovered: boolean;
isDefaultState: boolean;
}
export const SelectPrefix: React.FC<SelectPrefixProps> = ({
size,
variant,
invalid,
disabled,
isPressedOrHovered,
prefix,
isDefaultState,
...props
}) => {
const { ts, gc } = useTailwind();
const selectPrefixStyles = useTheme("select");
// Icon Stroke Color based on Select State
const iconColor = isPressedOrHovered
? selectPrefixStyles.base.variant[variant].prefix.pressedOrHovered
: disabled
? selectPrefixStyles.base.variant[variant].prefix.disabled
: invalid
? selectPrefixStyles.base.variant[variant].prefix.invalid
: isDefaultState
? selectPrefixStyles.base.variant[variant].suffix.default
: selectPrefixStyles.base.variant[variant].suffix.filled;
const _prefix: SelectProps["prefix"] = React.useMemo(() => {
const selectPrefix =
// @ts-ignore
prefix?.type === Icon
? createIcon({
icon: prefix,
iconSize: selectPrefixStyles.base.icon.size[size],
iconFill: gc(iconColor),
})
: prefix;
return selectPrefix;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [disabled, invalid, prefix, isPressedOrHovered]);
return (
<Box
style={ts(
selectPrefixStyles.prefixWrapper,
selectPrefixStyles.base.size[size].prefix,
selectPrefixStyles.base.variant[variant].prefix.wrapper,
)}
{...props}
>
{_prefix as React.ReactNode}
</Box>
);
};