refactor: Update CreateThemePage component to dynamically generate theme data

This commit is contained in:
Mauro Balades
2024-08-22 09:30:37 +02:00
parent 4347feae25
commit 590cf5bcdc

View File

@@ -22,6 +22,7 @@ const ThemeFormWrapper = styled.div<{
secondaryColor: string, secondaryColor: string,
tertiaryColor: string, tertiaryColor: string,
colorsBorder: string, colorsBorder: string,
dialogBg: string,
}>` }>`
${({ ${({
primaryColor, primaryColor,
@@ -29,12 +30,14 @@ const ThemeFormWrapper = styled.div<{
secondaryColor, secondaryColor,
tertiaryColor, tertiaryColor,
colorsBorder, colorsBorder,
dialogBg,
}: { }: {
primaryColor: string; primaryColor: string;
accentColor: string; accentColor: string;
secondaryColor: string; secondaryColor: string;
tertiaryColor: string; tertiaryColor: string;
colorsBorder: string; colorsBorder: string;
dialogBg: string;
}) => ` }) => `
--zen-primary-color: ${accentColor}; --zen-primary-color: ${accentColor};
@@ -43,6 +46,7 @@ const ThemeFormWrapper = styled.div<{
--zen-colors-tertiary: ${tertiaryColor}; --zen-colors-tertiary: ${tertiaryColor};
--zen-colors-border: ${colorsBorder}; --zen-colors-border: ${colorsBorder};
--zen-dialog-background: ${dialogBg};
`} `}
`; `;
@@ -63,6 +67,10 @@ const defaultStyles = {
light: "color-mix(in srgb, var(--zen-colors-secondary) 90%, black 10%)", light: "color-mix(in srgb, var(--zen-colors-secondary) 90%, black 10%)",
dark: "color-mix(in srgb, var(--zen-colors-secondary) 80%, black 20%)", dark: "color-mix(in srgb, var(--zen-colors-secondary) 80%, black 20%)",
}, },
dialogBg: {
light: "var(--zen-colors-tertiary)",
dark: "color-mix(in srgb, var(--zen-primary-color) 10%, black 90%)",
},
} }
export default function CreateThemePage() { export default function CreateThemePage() {
@@ -73,12 +81,14 @@ export default function CreateThemePage() {
const [secondaryColor, setSecondaryColor] = React.useState(defaultStyles.secondaryColor.dark); const [secondaryColor, setSecondaryColor] = React.useState(defaultStyles.secondaryColor.dark);
const [tertiaryColor, setTertiaryColor] = React.useState(defaultStyles.tertiaryColor.dark); const [tertiaryColor, setTertiaryColor] = React.useState(defaultStyles.tertiaryColor.dark);
const [colorsBorder, setColorsBorder] = React.useState(defaultStyles.colorsBorder.dark); const [colorsBorder, setColorsBorder] = React.useState(defaultStyles.colorsBorder.dark);
const [dialogBg, setDialogBg] = React.useState(defaultStyles.dialogBg.dark);
React.useEffect(() => { React.useEffect(() => {
setPrimaryColor(isDarkMode ? defaultStyles.primaryColor.dark : defaultStyles.primaryColor.light); setPrimaryColor(isDarkMode ? defaultStyles.primaryColor.dark : defaultStyles.primaryColor.light);
setSecondaryColor(isDarkMode ? defaultStyles.secondaryColor.dark : defaultStyles.secondaryColor.light); setSecondaryColor(isDarkMode ? defaultStyles.secondaryColor.dark : defaultStyles.secondaryColor.light);
setTertiaryColor(isDarkMode ? defaultStyles.tertiaryColor.dark : defaultStyles.tertiaryColor.light); setTertiaryColor(isDarkMode ? defaultStyles.tertiaryColor.dark : defaultStyles.tertiaryColor.light);
setColorsBorder(isDarkMode ? defaultStyles.colorsBorder.dark : defaultStyles.colorsBorder.light); setColorsBorder(isDarkMode ? defaultStyles.colorsBorder.dark : defaultStyles.colorsBorder.light);
setDialogBg(isDarkMode ? defaultStyles.dialogBg.dark : defaultStyles.dialogBg.light);
}, [isDarkMode]); }, [isDarkMode]);
const generateThemeData = () => { const generateThemeData = () => {
@@ -98,6 +108,9 @@ export default function CreateThemePage() {
if (colorsBorder !== (isDarkMode ? defaultStyles.colorsBorder.dark : defaultStyles.colorsBorder.light)) { if (colorsBorder !== (isDarkMode ? defaultStyles.colorsBorder.dark : defaultStyles.colorsBorder.light)) {
theme["colorsBorder"] = colorsBorder theme["colorsBorder"] = colorsBorder
} }
if (dialogBg !== (isDarkMode ? defaultStyles.dialogBg.dark : defaultStyles.dialogBg.light)) {
theme["dialogBg"] = dialogBg
}
return JSON.stringify(theme, null, 4); return JSON.stringify(theme, null, 4);
} }
@@ -108,6 +121,7 @@ export default function CreateThemePage() {
secondaryColor={secondaryColor} secondaryColor={secondaryColor}
tertiaryColor={tertiaryColor} tertiaryColor={tertiaryColor}
colorsBorder={colorsBorder} colorsBorder={colorsBorder}
dialogBg={dialogBg}
className="flex flex-col mt-32 items-center justify-center w-full min-h-screen"> className="flex flex-col mt-32 items-center justify-center w-full min-h-screen">
<div className="w-full lg:w-1/2 xl:w-1/2 mx-auto px-2 lg:px-none"> <div className="w-full lg:w-1/2 xl:w-1/2 mx-auto px-2 lg:px-none">
<h1 className="text-4xl lg:text-7xl font-bold">Create your theme</h1> <h1 className="text-4xl lg:text-7xl font-bold">Create your theme</h1>
@@ -185,7 +199,7 @@ export default function CreateThemePage() {
</div> </div>
{/* Preview */} {/* Preview */}
<div className="p-4 pr-0 pb-0 rounded-xl border-2 relative overflow-hidden w-72 h-48 border-[var(--zen-colors-border)] bg-[var(--zen-colors-tertiary)]"> <div className="p-4 pr-0 pb-0 rounded-xl border-2 relative overflow-hidden w-72 h-48 border-[var(--zen-colors-border)] bg-[var(--zen-colors-tertiary)]">
<div className="border-2 flex items-center justify-center border-[var(--zen-colors-border)] h-full w-full bg-[var(--zen-colors-tertiary)] rounded-tl-xl p-4 border-b-0 border-r-0"> <div className="border-2 flex items-center justify-center border-[var(--zen-colors-border)] h-full w-full bg-[var(--zen-dialog-background)] rounded-tl-xl p-4 border-b-0 border-r-0">
<Button className={ny("bg-[var(--zen-colors-secondary)]", isDarkMode ? "text-white" : "text-black")}>Button</Button> <Button className={ny("bg-[var(--zen-colors-secondary)]", isDarkMode ? "text-white" : "text-black")}>Button</Button>
</div> </div>
</div> </div>