'use client'; import React, { useState, useEffect } from 'react'; import PageLayout from '../../components/PageLayout'; import ContractEditor from './components/contractEditor'; import ContractUploadCompanyStamp from './components/contractUploadCompanyStamp'; import ContractTemplateList from './components/contractTemplateList'; import useAuthStore from '../../store/authStore'; import { useRouter } from 'next/navigation'; const NAV = [ { key: 'stamp', label: 'Company Stamp', icon: }, { key: 'templates', label: 'Templates', icon: }, { key: 'editor', label: 'Create Template', icon: }, ]; export default function ContractManagementPage() { const [refreshKey, setRefreshKey] = useState(0); const user = useAuthStore((s) => s.user); const [mounted, setMounted] = useState(false); const router = useRouter(); const [section, setSection] = useState('templates'); const [editingTemplateId, setEditingTemplateId] = useState(null); useEffect(() => { setMounted(true); }, []); // Only allow admin const isAdmin = !!user && ( (user as any)?.role === 'admin' || (user as any)?.userType === 'admin' || (user as any)?.isAdmin === true || ((user as any)?.roles?.includes?.('admin')) ); useEffect(() => { if (mounted && !isAdmin) { router.replace('/'); } }, [mounted, isAdmin, router]); if (!mounted) return null; if (!isAdmin) return null; const bumpRefresh = () => setRefreshKey((k) => k + 1); return ( {/* Sidebar Navigation */} {NAV.map((item) => ( setSection(item.key)} className={`flex items-center gap-2 px-4 py-2 rounded-lg font-medium transition ${section === item.key ? 'bg-blue-900 text-blue-50 shadow' : 'bg-white text-blue-900 hover:bg-blue-50 hover:text-blue-900 border border-blue-200'}`} > {item.icon} {item.label} ))} {/* Main Content */} Contract Management Manage contract templates, company stamp, and create new templates. {/* Section Panels */} {section === 'stamp' && ( Company Stamp )} {section === 'templates' && ( Templates { setEditingTemplateId(id); setSection('editor'); }} /> )} {section === 'editor' && ( Create Template { setEditingTemplateId(null); setSection('templates'); }} onSaved={(info) => { bumpRefresh(); if (info?.action === 'revised') { setEditingTemplateId(null); setSection('templates'); } }} /> )} ); }
Manage contract templates, company stamp, and create new templates.