added Profile Page and Change password (also included breadcrumb

This commit is contained in:
2025-12-27 14:46:21 +07:00
parent bd71b27376
commit ba52869e8f
49 changed files with 11108 additions and 12778 deletions

View File

@@ -0,0 +1,65 @@
import { AnyRouteMatch, Link, useMatches } from '@tanstack/react-router'
import { Fragment } from 'react/jsx-runtime'
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from '../ui/breadcrumb'
export type BreadcrumbValue =
| string
| string[]
| ((match: AnyRouteMatch) => string | string[])
const RouterBreadcrumb = () => {
const matches = useMatches()
const breadcrumbs = matches.flatMap((match) => {
const staticData = match.staticData
if (!staticData?.breadcrumb) return []
const breadcrumbValue =
typeof staticData.breadcrumb === 'function'
? staticData.breadcrumb(match)
: staticData.breadcrumb
const items = Array.isArray(breadcrumbValue)
? breadcrumbValue
: [breadcrumbValue]
return items.map((item) => ({
label: item,
path: match.pathname,
}))
})
return (
<Breadcrumb>
<BreadcrumbList>
{breadcrumbs.map((crumb, index) => {
const isLast = index === breadcrumbs.length - 1
return (
<Fragment key={`${crumb.path}-${index}`}>
<BreadcrumbItem>
{isLast ? (
<BreadcrumbPage>{crumb.label}</BreadcrumbPage>
) : (
<BreadcrumbLink asChild>
<Link to={crumb.path}>{crumb.label}</Link>
</BreadcrumbLink>
)}
</BreadcrumbItem>
{!isLast && <BreadcrumbSeparator />}
</Fragment>
)
})}
</BreadcrumbList>
</Breadcrumb>
)
}
export default RouterBreadcrumb