'use client'; import React from 'react'; import { classNames } from 'primereact/utils'; import { PrimeReactContext } from 'primereact/api'; import { RadioButton, RadioButtonChangeEvent } from 'primereact/radiobutton'; import { InputSwitch, InputSwitchChangeEvent } from 'primereact/inputswitch'; import { Button } from 'primereact/button'; import { LayoutContext } from './context/layoutcontext'; import { Sidebar } from 'primereact/sidebar'; import { useContext, useEffect } from 'react'; import { AppConfigProps, ColorScheme } from '../types/layout'; const AppConfig = (props: AppConfigProps) => { const { layoutConfig, setLayoutConfig, layoutState, setLayoutState, isSlim, isHorizontal, isSlimPlus } = useContext(LayoutContext); const { setRipple, changeTheme } = useContext(PrimeReactContext); const scales = [12, 13, 14, 15, 16]; const componentThemes = [ { name: 'blue', color: '#0F8BFD' }, { name: 'green', color: '#0BD18A' }, { name: 'magenta', color: '#EC4DBC' }, { name: 'orange', color: '#FD9214' }, { name: 'purple', color: '#873EFE' }, { name: 'red', color: '#FC6161' }, { name: 'teal', color: '#00D0DE' }, { name: 'yellow', color: '#EEE500' } ]; useEffect(() => { if (isSlim() || isHorizontal() || isSlimPlus()) { setLayoutState((prevState) => ({ ...prevState, resetMenu: true })); } }, [layoutConfig.menuMode]); const changeInputStyle = (e: RadioButtonChangeEvent) => { setLayoutConfig((prevState) => ({ ...prevState, inputStyle: e.value })); }; const changeRipple = (e: InputSwitchChangeEvent) => { setRipple(e.value); setLayoutConfig((prevState) => ({ ...prevState, ripple: e.value })); }; const changeMenuMode = (e: RadioButtonChangeEvent) => { setLayoutConfig((prevState) => ({ ...prevState, menuMode: e.value })); }; const changeColorScheme = (colorScheme: ColorScheme) => { changeTheme(layoutConfig.colorScheme, colorScheme, 'theme-link', () => { setLayoutConfig((prevState) => ({ ...prevState, colorScheme })); }); }; const _changeTheme = (theme: string) => { changeTheme(layoutConfig.theme, theme, 'theme-link', () => { setLayoutConfig((prevState) => ({ ...prevState, theme })); }); }; const getComponentThemes = () => { return (
{componentThemes.map((theme, i) => { return (
_changeTheme(theme.name)} > {layoutConfig.theme === theme.name && ( )}
); })}
); }; const componentThemesElement = getComponentThemes(); const decrementScale = () => { setLayoutConfig((prevState) => ({ ...prevState, scale: prevState.scale - 1 })); }; const incrementScale = () => { setLayoutConfig((prevState) => ({ ...prevState, scale: prevState.scale + 1 })); }; const applyScale = () => { document.documentElement.style.fontSize = layoutConfig.scale + 'px'; }; useEffect(() => { applyScale(); }, [layoutConfig.scale]); return (
setLayoutState((prevState) => ({ ...prevState, configSidebarVisible: true })) } > setLayoutState((prevState) => ({ ...prevState, configSidebarVisible: false })) } >
Themes
{componentThemesElement}
Scale
{scales.map((s, i) => { return ( ); })}
{!props.minimal && ( <>
Menu Type
changeMenuMode(e)}>
changeMenuMode(e)}>
changeMenuMode(e)}>
changeMenuMode(e)}>
changeMenuMode(e)}>
changeMenuMode(e)}>
changeMenuMode(e)}>
)}
Color Scheme
changeColorScheme(e.value)}>
changeColorScheme(e.value)}>
Ripple Effect
changeRipple(e)} />
); }; export default AppConfig;