refactor: update ideation dashboard and prompt list to use project-specific job retrieval

- Modified IdeationDashboard and PromptList components to fetch generation jobs specific to the current project.
- Updated addGenerationJob function to include projectPath as a parameter for better job management.
- Introduced getJobsForProject function in the ideation store to streamline job filtering by project.
This commit is contained in:
webdevcody
2026-01-04 14:16:39 -05:00
parent 32f859b927
commit 4ac1edf314
3 changed files with 32 additions and 12 deletions

View File

@@ -168,15 +168,16 @@ function TagFilter({
export function IdeationDashboard({ onGenerateIdeas }: IdeationDashboardProps) {
const currentProject = useAppStore((s) => s.currentProject);
const { generationJobs, removeSuggestionFromJob } = useIdeationStore();
const { getJobsForProject, removeSuggestionFromJob } = useIdeationStore();
const [addingId, setAddingId] = useState<string | null>(null);
const [selectedTags, setSelectedTags] = useState<Set<string>>(new Set());
// Get jobs for current project only
const projectJobs = currentProject?.path ? getJobsForProject(currentProject.path) : [];
// Separate generating/error jobs from ready jobs with suggestions
const activeJobs = generationJobs.filter(
(j) => j.status === 'generating' || j.status === 'error'
);
const readyJobs = generationJobs.filter((j) => j.status === 'ready' && j.suggestions.length > 0);
const activeJobs = projectJobs.filter((j) => j.status === 'generating' || j.status === 'error');
const readyJobs = projectJobs.filter((j) => j.status === 'ready' && j.suggestions.length > 0);
// Flatten all suggestions with their parent job
const allSuggestions = useMemo(
@@ -203,7 +204,7 @@ export function IdeationDashboard({ onGenerateIdeas }: IdeationDashboardProps) {
return allSuggestions.filter(({ job }) => selectedTags.has(job.prompt.title));
}, [allSuggestions, selectedTags]);
const generatingCount = generationJobs.filter((j) => j.status === 'generating').length;
const generatingCount = projectJobs.filter((j) => j.status === 'generating').length;
const handleToggleTag = (tag: string) => {
setSelectedTags((prev) => {
@@ -316,6 +317,16 @@ export function IdeationDashboard({ onGenerateIdeas }: IdeationDashboardProps) {
</Card>
)}
{/* Generate More Ideas Button - shown when there are items */}
{!isEmpty && (
<div className="pt-2">
<Button onClick={onGenerateIdeas} variant="outline" className="w-full gap-2">
<Lightbulb className="w-4 h-4" />
Generate More Ideas
</Button>
</div>
)}
{/* Empty State */}
{isEmpty && (
<Card>

View File

@@ -20,7 +20,7 @@ interface PromptListProps {
export function PromptList({ category, onBack }: PromptListProps) {
const currentProject = useAppStore((s) => s.currentProject);
const { setMode, addGenerationJob, updateJobStatus, generationJobs } = useIdeationStore();
const { setMode, addGenerationJob, updateJobStatus, getJobsForProject } = useIdeationStore();
const [loadingPromptId, setLoadingPromptId] = useState<string | null>(null);
const [startedPrompts, setStartedPrompts] = useState<Set<string>>(new Set());
const navigate = useNavigate();
@@ -32,9 +32,10 @@ export function PromptList({ category, onBack }: PromptListProps) {
const prompts = getPromptsByCategory(category);
// Check which prompts are already generating
// Get jobs for current project only and check which prompts are already generating
const projectJobs = currentProject?.path ? getJobsForProject(currentProject.path) : [];
const generatingPromptIds = new Set(
generationJobs.filter((j) => j.status === 'generating').map((j) => j.prompt.id)
projectJobs.filter((j) => j.status === 'generating').map((j) => j.prompt.id)
);
const handleSelectPrompt = async (prompt: IdeationPrompt) => {
@@ -48,7 +49,7 @@ export function PromptList({ category, onBack }: PromptListProps) {
setLoadingPromptId(prompt.id);
// Add a job and navigate to dashboard
const jobId = addGenerationJob(prompt);
const jobId = addGenerationJob(currentProject.path, prompt);
setStartedPrompts((prev) => new Set(prev).add(prompt.id));
// Show toast and navigate to dashboard