Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions app/(main)/worker/profile/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export default function ProfilePage() {
const supabase = createClient()
const router = useRouter()
const [subscription, setSubscription] = useState<WorkerSubscription | null>(null)
const [orgMembership, setOrgMembership] = useState<{ org_name: string; org_rating: number; org_id: string } | null>(null)

useEffect(() => {
if (!profile?.id) return
Expand All @@ -31,6 +32,24 @@ export default function ProfilePage() {
fetchSub()
}, [profile])

useEffect(() => {
if (!profile?.id) return
const fetchOrg = async () => {
const { data } = await supabase
.from('organization_workers')
.select('organization_id, organizations!inner(id, name, rating)')
.eq('linked_user_id', profile.id)
.eq('is_active', true)
.limit(1)
.maybeSingle()
if (data?.organizations) {
const org = data.organizations as any
setOrgMembership({ org_name: org.name, org_rating: org.rating || 0, org_id: org.id })
}
}
fetchOrg()
}, [profile?.id, supabase])

const handleLogout = async () => {
await supabase.auth.signOut()
router.push('/login')
Expand Down Expand Up @@ -159,6 +178,28 @@ export default function ProfilePage() {
</div>
</div>

{/* Org Membership Rating */}
{orgMembership && (
<div className="px-6 mb-6">
<div
onClick={() => router.push(`/client/organization/${orgMembership.org_id}`)}
className="bg-gradient-to-r from-[#FF8A00]/10 to-[#FFB800]/5 border border-[#FF8A00]/20 rounded-2xl p-4 flex items-center gap-3 cursor-pointer active:scale-[0.98] transition-transform"
>
<div className="w-10 h-10 rounded-xl bg-[#FF8A00]/10 flex items-center justify-center shrink-0">
<Building2 size={18} className="text-[#FF8A00]" />
</div>
<div className="flex-1 min-w-0">
<p className="text-xs text-[#FF8A00] font-bold">تقييم كجزء من المؤسسة</p>
<p className="text-sm font-bold mt-0.5 truncate">{orgMembership.org_name}</p>
</div>
<div className="flex items-center gap-1 shrink-0">
<Star size={14} className="text-[#FFB800] fill-[#FFB800]" />
<span className="text-sm font-bold text-[#FFB800]">{orgMembership.org_rating || '0.0'}</span>
</div>
</div>
</div>
)}

<div className="flex justify-center mb-8">
<span className="text-xs text-[#4B5A7A]">حرفة - الإصدار 2.4.0</span>
</div>
Expand Down
45 changes: 43 additions & 2 deletions app/(main)/worker/profile/summary/page.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use client'

import React from 'react'
import React, { useState, useEffect } from 'react'
import { useRouter } from 'next/navigation'
import Image from 'next/image'
import { CheckCircle2, Power, Briefcase, Star } from 'lucide-react'
import { CheckCircle2, Power, Briefcase, Star, Building2 } from 'lucide-react'
import { PageHeader } from '@/components/ui/PageHeader'
import { SubPageLayout } from '@/components/ui/SubPageLayout'
import { StatCard } from '@/components/ui/profile/StatCard'
Expand All @@ -12,10 +12,31 @@ import { ServiceSummaryCard } from '@/components/ui/profile/ServiceSummaryCard'
import { ContactInfoCard } from '@/components/ui/profile/ContactInfoCard'
import { useProfileSummary } from '@/hooks/useProfileSummary'
import { PageLoader } from '@/components/ui/PageLoader'
import { createClient } from '@/lib/supabase/client'

export default function ProfileSummaryPage() {
const router = useRouter()
const { profile, services, reviews, loading } = useProfileSummary()
const supabase = createClient()
const [orgMembership, setOrgMembership] = useState<{ org_name: string; org_rating: number; org_id: string } | null>(null)

useEffect(() => {
if (!profile?.id) return
const fetchOrg = async () => {
const { data } = await supabase
.from('organization_workers')
.select('organization_id, organizations!inner(id, name, rating)')
.eq('linked_user_id', profile.id)
.eq('is_active', true)
.limit(1)
.maybeSingle()
if (data?.organizations) {
const org = data.organizations as any
setOrgMembership({ org_name: org.name, org_rating: org.rating || 0, org_id: org.id })
}
}
fetchOrg()
}, [profile?.id, supabase])

return (
<SubPageLayout>
Expand Down Expand Up @@ -63,6 +84,26 @@ export default function ProfileSummaryPage() {
</div>
</>
)}

{/* Org Membership Rating */}
{orgMembership && (
<div
onClick={() => router.push(`/client/organization/${orgMembership.org_id}`)}
className="mt-8 bg-gradient-to-r from-[#FF8A00]/10 to-[#FFB800]/5 border border-[#FF8A00]/20 rounded-2xl p-4 flex items-center gap-3 cursor-pointer active:scale-[0.98] transition-transform"
>
<div className="w-10 h-10 rounded-xl bg-[#FF8A00]/10 flex items-center justify-center shrink-0">
<Building2 size={18} className="text-[#FF8A00]" />
</div>
<div className="flex-1 min-w-0">
<p className="text-xs text-[#FF8A00] font-bold">تقييم كجزء من المؤسسة</p>
<p className="text-sm font-bold mt-0.5 truncate">{orgMembership.org_name}</p>
</div>
<div className="flex items-center gap-1 shrink-0">
<Star size={14} className="text-[#FFB800] fill-[#FFB800]" />
<span className="text-sm font-bold text-[#FFB800]">{orgMembership.org_rating || '0.0'}</span>
</div>
</div>
)}
</div>
</SubPageLayout>
)
Expand Down
Loading
Loading