Organization Chart değişiklikleri
This commit is contained in:
parent
98add9e398
commit
92058ed5e9
3 changed files with 50 additions and 10 deletions
|
|
@ -11,6 +11,7 @@ import {
|
||||||
FaFileImage,
|
FaFileImage,
|
||||||
} from 'react-icons/fa'
|
} from 'react-icons/fa'
|
||||||
import { Helmet } from 'react-helmet'
|
import { Helmet } from 'react-helmet'
|
||||||
|
import { AnimatePresence } from 'framer-motion'
|
||||||
import {
|
import {
|
||||||
getOrgChartDepartments,
|
getOrgChartDepartments,
|
||||||
getOrgChartJobPositions,
|
getOrgChartJobPositions,
|
||||||
|
|
@ -24,6 +25,7 @@ import { useCurrentMenuIcon } from '@/utils/hooks/useCurrentMenuIcon'
|
||||||
import { Avatar } from '@/components/ui'
|
import { Avatar } from '@/components/ui'
|
||||||
import { AVATAR_URL } from '@/constants/app.constant'
|
import { AVATAR_URL } from '@/constants/app.constant'
|
||||||
import { useStoreState } from '@/store'
|
import { useStoreState } from '@/store'
|
||||||
|
import UserProfileCard from '@/views/intranet/SocialWall/UserProfileCard'
|
||||||
|
|
||||||
type ViewMode = 'department' | 'jobPosition'
|
type ViewMode = 'department' | 'jobPosition'
|
||||||
|
|
||||||
|
|
@ -337,7 +339,18 @@ function buildEdges(tree: TreeNode[]): EdgeLink[] {
|
||||||
return edges
|
return edges
|
||||||
}
|
}
|
||||||
|
|
||||||
function UserAvatar({ user, tenantId }: { user: OrgChartUserDto; tenantId?: string }) {
|
function UserAvatar({
|
||||||
|
user,
|
||||||
|
tenantId,
|
||||||
|
title,
|
||||||
|
department,
|
||||||
|
}: {
|
||||||
|
user: OrgChartUserDto
|
||||||
|
tenantId?: string
|
||||||
|
title: string
|
||||||
|
department?: string
|
||||||
|
}) {
|
||||||
|
const [showUserCard, setShowUserCard] = useState(false)
|
||||||
const initials = (user.fullName || user.userName || '?')
|
const initials = (user.fullName || user.userName || '?')
|
||||||
.split(' ')
|
.split(' ')
|
||||||
.map((w) => w[0]?.toUpperCase() ?? '')
|
.map((w) => w[0]?.toUpperCase() ?? '')
|
||||||
|
|
@ -347,15 +360,37 @@ function UserAvatar({ user, tenantId }: { user: OrgChartUserDto; tenantId?: stri
|
||||||
const src = AVATAR_URL(user.id, tenantId)
|
const src = AVATAR_URL(user.id, tenantId)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<div
|
||||||
|
className="relative flex-shrink-0"
|
||||||
|
data-stop-drag="true"
|
||||||
|
onMouseEnter={() => setShowUserCard(true)}
|
||||||
|
onMouseLeave={() => setShowUserCard(false)}
|
||||||
|
>
|
||||||
<Avatar
|
<Avatar
|
||||||
shape="circle"
|
shape="circle"
|
||||||
size={24}
|
size={24}
|
||||||
src={src}
|
src={src}
|
||||||
title={user.fullName || user.userName}
|
title={user.fullName || user.userName}
|
||||||
className="border border-indigo-200 bg-indigo-100 text-indigo-700 font-semibold text-xs flex-shrink-0"
|
className="border border-indigo-200 bg-indigo-100 text-indigo-700 font-semibold text-xs"
|
||||||
>
|
>
|
||||||
{initials}
|
{initials}
|
||||||
</Avatar>
|
</Avatar>
|
||||||
|
<AnimatePresence>
|
||||||
|
{showUserCard && (
|
||||||
|
<UserProfileCard
|
||||||
|
user={{
|
||||||
|
id: user.id,
|
||||||
|
name: user.fullName || user.userName,
|
||||||
|
title,
|
||||||
|
email: user.email,
|
||||||
|
department,
|
||||||
|
tenantId: tenantId ?? '',
|
||||||
|
}}
|
||||||
|
position="bottom"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</AnimatePresence>
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -501,7 +536,12 @@ function OrgChartNode({
|
||||||
<div className="flex flex-col gap-1">
|
<div className="flex flex-col gap-1">
|
||||||
{node.users.map((user) => (
|
{node.users.map((user) => (
|
||||||
<div key={user.id} data-user-row="" className="flex items-center gap-2">
|
<div key={user.id} data-user-row="" className="flex items-center gap-2">
|
||||||
<UserAvatar user={user} tenantId={tenantId} />
|
<UserAvatar
|
||||||
|
user={user}
|
||||||
|
tenantId={tenantId}
|
||||||
|
title={mode === 'jobPosition' ? node.name : node.departmentName || node.name}
|
||||||
|
department={mode === 'jobPosition' ? node.departmentName : node.name}
|
||||||
|
/>
|
||||||
<span data-user-name="" className="text-xs text-slate-600 truncate">
|
<span data-user-name="" className="text-xs text-slate-600 truncate">
|
||||||
{user.fullName || user.userName}
|
{user.fullName || user.userName}
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue