ai-resume-builder / components /ControlPanel.tsx
mgbam's picture
Upload 11 files
2e9c97f verified
/**
* @license
* SPDX-License-Identifier: Apache-2.0
*/
import React, { useState } from 'react';
import InitialInputForm from './InitialInputForm';
import AiCoPilotPanel from './AiCoPilotPanel';
import type { InitialInput, ActiveEditor } from '../lib/types';
interface ControlPanelProps {
onGenerate: (formData: InitialInput) => void;
onClear: () => void;
activeEditor: ActiveEditor | null;
onRefine: (instruction: string) => void;
isGenerating: boolean;
isRefining: boolean;
}
type Tab = 'setup' | 'copilot';
export default function ControlPanel({
onGenerate,
onClear,
activeEditor,
onRefine,
isGenerating,
isRefining
}: ControlPanelProps) {
const [activeTab, setActiveTab] = useState<Tab>('setup');
return (
<div className="control-panel">
<div className="control-panel-tabs">
<button
className={`control-panel-tab ${activeTab === 'setup' ? 'active' : ''}`}
onClick={() => setActiveTab('setup')}
>
<i className="ph-note-pencil"></i> Initial Setup
</button>
<button
className={`control-panel-tab ${activeTab === 'copilot' ? 'active' : ''}`}
onClick={() => setActiveTab('copilot')}
disabled={!activeEditor}
aria-disabled={!activeEditor}
>
<i className="ph-magic-wand"></i> AI Co-pilot
</button>
</div>
<div className="tab-content">
{activeTab === 'setup' && (
<InitialInputForm
onSubmit={onGenerate}
onClear={onClear}
disabled={isGenerating}
isLoading={isGenerating}
/>
)}
{activeTab === 'copilot' && (
<AiCoPilotPanel
activeEditor={activeEditor}
onRefine={onRefine}
isLoading={isRefining}
/>
)}
</div>
</div>
);
}