coreui 소스를 ts 로 전환

This commit is contained in:
2025-12-30 19:15:56 +09:00
parent a99165e4d7
commit 7fb0cf6fba
35 changed files with 113 additions and 40 deletions

View File

@@ -0,0 +1,132 @@
import React, { useEffect, useRef } from 'react'
import { NavLink } from 'react-router-dom'
import { useSelector, useDispatch } from 'react-redux'
import { RootState } from '../store'
import {
CContainer,
CDropdown,
CDropdownItem,
CDropdownMenu,
CDropdownToggle,
CHeader,
CHeaderNav,
CHeaderToggler,
CNavLink,
CNavItem,
useColorModes,
} from '@coreui/react'
import CIcon from '@coreui/icons-react'
import {
cilBell,
cilContrast,
cilEnvelopeOpen,
cilList,
cilMenu,
cilMoon,
cilSun,
} from '@coreui/icons'
import { AppBreadcrumb } from './index'
import { AppHeaderDropdown } from './header/index'
const AppHeader = () => {
const headerRef = useRef<HTMLDivElement>(null)
const { colorMode, setColorMode } = useColorModes('coreui-free-react-admin-template-theme')
const dispatch = useDispatch()
const sidebarShow = useSelector((state: RootState) => state.sidebarShow)
useEffect(() => {
const handleScroll = () => {
headerRef.current &&
headerRef.current.classList.toggle('shadow-sm', document.documentElement.scrollTop > 0)
}
document.addEventListener('scroll', handleScroll)
return () => document.removeEventListener('scroll', handleScroll)
}, [])
return (
<CHeader position="sticky" className="mb-4 p-0" ref={headerRef}>
<CContainer className="border-bottom px-4" fluid>
<CHeaderToggler
onClick={() => dispatch({ type: 'set', sidebarShow: !sidebarShow })}
style={{ marginInlineStart: '-14px' }}
>
<CIcon icon={cilMenu} size="lg" />
</CHeaderToggler>
<CHeaderNav className="d-none d-md-flex">
<AppBreadcrumb />
</CHeaderNav>
<CHeaderNav className="ms-auto">
<CNavItem>
<CNavLink href="#">
<CIcon icon={cilBell} size="lg" />
</CNavLink>
</CNavItem>
<CNavItem>
<CNavLink href="#">
<CIcon icon={cilList} size="lg" />
</CNavLink>
</CNavItem>
<CNavItem>
<CNavLink href="#">
<CIcon icon={cilEnvelopeOpen} size="lg" />
</CNavLink>
</CNavItem>
</CHeaderNav>
<CHeaderNav>
<li className="nav-item py-1">
<div className="vr h-100 mx-2 text-body text-opacity-75"></div>
</li>
<CDropdown variant="nav-item" placement="bottom-end">
<CDropdownToggle caret={false}>
{colorMode === 'dark' ? (
<CIcon icon={cilMoon} size="lg" />
) : colorMode === 'auto' ? (
<CIcon icon={cilContrast} size="lg" />
) : (
<CIcon icon={cilSun} size="lg" />
)}
</CDropdownToggle>
<CDropdownMenu>
<CDropdownItem
active={colorMode === 'light'}
className="d-flex align-items-center"
as="button"
type="button"
onClick={() => setColorMode('light')}
>
<CIcon className="me-2" icon={cilSun} size="lg" /> Light
</CDropdownItem>
<CDropdownItem
active={colorMode === 'dark'}
className="d-flex align-items-center"
as="button"
type="button"
onClick={() => setColorMode('dark')}
>
<CIcon className="me-2" icon={cilMoon} size="lg" /> Dark
</CDropdownItem>
<CDropdownItem
active={colorMode === 'auto'}
className="d-flex align-items-center"
as="button"
type="button"
onClick={() => setColorMode('auto')}
>
<CIcon className="me-2" icon={cilContrast} size="lg" /> Auto
</CDropdownItem>
</CDropdownMenu>
</CDropdown>
<li className="nav-item py-1">
<div className="vr h-100 mx-2 text-body text-opacity-75"></div>
</li>
<AppHeaderDropdown />
</CHeaderNav>
</CContainer>
</CHeader>
)
}
export default AppHeader