Files
auditly/components/CompanyWiki/CompanyWikiManager.tsx
Ra cf565df13e feat: major UI overhaul with new components and enhanced UX
- Add comprehensive Company Wiki feature with complete state management
  - CompanyWikiManager, empty states, invite modals
- Implement new Chat system with enhanced layout and components
  - ChatLayout, ChatSidebar, MessageThread, FileUploadInput
- Create modern Login and OTP verification flows
  - LoginNew page, OTPVerification component
- Add new Employee Forms system with enhanced controller
- Introduce Figma-based design components and multiple choice inputs
- Add new font assets (NeueMontreal) and robot images for onboarding
- Enhance existing components with improved styling and functionality
- Update build configuration and dependencies
- Remove deprecated ModernLogin component
2025-08-20 04:06:49 -07:00

116 lines
3.9 KiB
TypeScript

import React, { useState } from 'react';
import { CompanyWikiEmptyState } from './CompanyWikiEmptyState';
import { CompanyWikiCompletedState } from './CompanyWikiCompletedState';
import { InviteEmployeesModal } from './InviteEmployeesModal';
import { InviteMultipleEmployeesModal } from './InviteMultipleEmployeesModal';
export type WikiState = 'empty' | 'completed';
export type InviteModalState = 'none' | 'single' | 'multiple';
interface Employee {
id: string;
name: string;
email: string;
avatar?: string;
}
interface CompanyWikiManagerProps {
initialState?: WikiState;
onboardingProgress?: number;
onCompleteOnboarding?: () => void;
qaItems?: Array<{ question: string; answer: string }>;
suggestedEmployees?: Employee[];
}
export const CompanyWikiManager: React.FC<CompanyWikiManagerProps> = ({
initialState = 'empty',
onboardingProgress = 60,
onCompleteOnboarding,
qaItems,
suggestedEmployees
}) => {
const [wikiState, setWikiState] = useState<WikiState>(initialState);
const [inviteModalState, setInviteModalState] = useState<InviteModalState>('none');
const [activeSection, setActiveSection] = useState(1);
const handleCompleteOnboarding = () => {
onCompleteOnboarding?.();
setWikiState('completed');
};
const handleInviteEmployee = (email: string) => {
console.log('Inviting employee:', email);
// Here you would typically call an API to send the invitation
setInviteModalState('none');
// You could show a success toast here
};
const handleInviteMultipleEmployees = (employees: Employee[]) => {
console.log('Inviting multiple employees:', employees);
// Here you would typically call an API to send multiple invitations
setInviteModalState('none');
// You could show a success toast here
};
const handleSectionClick = (section: number) => {
setActiveSection(section);
};
const handleCopyLink = () => {
// Copy wiki link to clipboard
const wikiUrl = `${window.location.origin}/#/company-wiki`;
navigator.clipboard.writeText(wikiUrl).then(() => {
console.log('Wiki link copied to clipboard');
// You could show a success toast here
});
};
const renderWikiContent = () => {
switch (wikiState) {
case 'empty':
return (
<CompanyWikiEmptyState
progress={onboardingProgress}
onCompleteOnboarding={handleCompleteOnboarding}
onInviteEmployees={() => setInviteModalState('single')}
onCopyLink={handleCopyLink}
/>
);
case 'completed':
return (
<CompanyWikiCompletedState
qaItems={qaItems}
activeSection={activeSection}
onSectionClick={handleSectionClick}
onInviteEmployees={() => setInviteModalState('single')}
onCopyLink={handleCopyLink}
/>
);
default:
return null;
}
};
return (
<div className="w-full h-full flex flex-col">
{renderWikiContent()}
{/* Modals */}
<InviteEmployeesModal
isOpen={inviteModalState === 'single'}
onClose={() => setInviteModalState('none')}
onInvite={handleInviteEmployee}
onMultipleInvite={() => setInviteModalState('multiple')}
/>
<InviteMultipleEmployeesModal
isOpen={inviteModalState === 'multiple'}
onClose={() => setInviteModalState('none')}
onInviteSelected={handleInviteMultipleEmployees}
suggestedEmployees={suggestedEmployees}
/>
</div>
);
};