-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.ts
83 lines (75 loc) · 2.04 KB
/
index.ts
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
import { valueRecoverer, attributeCompleter } from "@robust-ui/tools";
import { useGlobalContext } from "@robust-ui/use-global-context";
import { useMemo } from "react";
/**
* Custom hook that cleans and recovers the values of the input props based on certain conditions.
* @param props - The input props to be cleaned and recovered.
* @param context - Optional context object containing additional information for value recovery.
* @returns The cleaned and recovered props.
*/
export function useCleanValue({
props,
context,
}: {
props: Record<string, unknown>;
context?: {
mediaBreakpoints: Record<string, string | number>;
currentGlobalLanguage: string;
currentBreakpoint: unknown;
isDarkModeActive: boolean;
theme: Record<string, unknown>;
};
}) {
const {
mediaBreakpoints,
currentGlobalLanguage,
currentBreakpoint,
isDarkModeActive,
theme,
} = useGlobalContext({ key: "devData" }) || context;
return useMemo(() => {
const recoveredProps = attributeCompleter({
inputAttributes: props,
mediaBreakpoints,
});
if (!recoveredProps) {
return {};
}
const cleanProps = Object.entries(recoveredProps).reduce(
(acc, [key, value]) => {
if (!key || !value) {
return acc;
}
if (
key === "children" ||
key === "childrenWithOutPropagation" ||
key === "style" ||
typeof value === "string"
) {
return { ...acc, [key]: value };
}
const recoveredProp = valueRecoverer({
currentGlobalLanguage,
inputProp: key,
inputValue: value,
breakPoints: {
current: currentBreakpoint as string,
context: mediaBreakpoints,
},
darkMode: isDarkModeActive,
theme,
});
return { ...acc, [key]: recoveredProp };
},
{},
);
return cleanProps;
}, [
mediaBreakpoints,
currentGlobalLanguage,
currentBreakpoint,
isDarkModeActive,
theme,
props,
]);
}