fix: MC interactivity - tabs, filters, voice chat

This commit is contained in:
root
2026-02-16 12:15:39 +00:00
parent 62aa70b606
commit 98dfe1a442
@@ -1,7 +1,6 @@
"use client"; "use client";
import { useState } from "react"; import { useState } from "react";
import { motion } from "framer-motion";
import { useMissionControl } from "@/lib/mission-control/store"; import { useMissionControl } from "@/lib/mission-control/store";
import { TaskStatus } from "@/lib/mission-control/types"; import { TaskStatus } from "@/lib/mission-control/types";
import VoiceChat from "./VoiceChat"; import VoiceChat from "./VoiceChat";
@@ -46,20 +45,15 @@ const statusConfig: Record<TaskStatus, { label: string; color: string; bg: strin
paused: { label: "Paused", color: "text-gray-400", bg: "bg-gray-500/20" }, paused: { label: "Paused", color: "text-gray-400", bg: "bg-gray-500/20" },
}; };
const fadeUp = {
hidden: { opacity: 0, y: 20 },
visible: { opacity: 1, y: 0 },
};
export default function MissionControlDashboard() { export default function MissionControlDashboard() {
const { tasks, toggleTask, updateTaskStatus, getProjectProgress, getTasksByProject } = const { tasks, toggleTask, updateTaskStatus, getProjectProgress, getTasksByProject } =
useMissionControl(); useMissionControl();
const [selectedProject, setSelectedProject] = useState<"sitemente" | "holacompi" | "infrastructure">("sitemente"); const [selectedProject, setSelectedProject] = useState<string>("sitemente");
const [filter, setFilter] = useState<TaskStatus | "all">("all"); const [filter, setFilter] = useState<TaskStatus | "all">("all");
const projectTasks = getTasksByProject(selectedProject); const projectTasks = getTasksByProject(selectedProject as any);
const filteredTasks = filter === "all" ? projectTasks : projectTasks.filter((t) => t.status === filter); const filteredTasks = filter === "all" ? projectTasks : projectTasks.filter((t) => t.status === filter);
const progress = getProjectProgress(selectedProject); const progress = getProjectProgress(selectedProject as any);
const selectedProjectData = projects.find((p) => p.id === selectedProject)!; const selectedProjectData = projects.find((p) => p.id === selectedProject)!;
@@ -128,11 +122,11 @@ export default function MissionControlDashboard() {
{/* Project Tabs */} {/* Project Tabs */}
<div className="mb-8 flex gap-4"> <div className="mb-8 flex gap-4">
{projects.map((project) => { {projects.map((project) => {
const p = getProjectProgress(project.id); const p = getProjectProgress(project.id as any);
return ( return (
<button <button
key={project.id} key={project.id}
onClick={() => setSelectedProject(project.id as "sitemente" | "holacompi")} onClick={() => setSelectedProject(project.id)}
className={`relative flex-1 rounded-xl border p-4 text-left transition ${ className={`relative flex-1 rounded-xl border p-4 text-left transition ${
selectedProject === project.id selectedProject === project.id
? "border-white/30 bg-white/10" ? "border-white/30 bg-white/10"
@@ -196,7 +190,7 @@ export default function MissionControlDashboard() {
<div className="border-b border-white/10 px-6 py-4"> <div className="border-b border-white/10 px-6 py-4">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<h2 className="text-lg font-semibold"> <h2 className="text-lg font-semibold">
{selectedProjectData.name} Tasks {selectedProjectData?.name} Tasks
</h2> </h2>
<p className="text-sm text-white/60"> <p className="text-sm text-white/60">
{filteredTasks.filter((t) => t.status === "done").length} /{" "} {filteredTasks.filter((t) => t.status === "done").length} /{" "}
@@ -206,15 +200,11 @@ export default function MissionControlDashboard() {
</div> </div>
<div className="divide-y divide-white/5"> <div className="divide-y divide-white/5">
{filteredTasks.map((task, index) => { {filteredTasks.map((task) => {
const config = statusConfig[task.status]; const config = statusConfig[task.status];
return ( return (
<motion.div <div
key={task.id} key={task.id}
variants={fadeUp}
initial="hidden"
animate="visible"
transition={{ duration: 0.3, delay: index * 0.03 }}
className={`flex items-center gap-4 px-6 py-4 transition hover:bg-white/5 ${ className={`flex items-center gap-4 px-6 py-4 transition hover:bg-white/5 ${
task.status === "done" ? "opacity-50" : "" task.status === "done" ? "opacity-50" : ""
}`} }`}
@@ -262,7 +252,7 @@ export default function MissionControlDashboard() {
<option value="done">Done</option> <option value="done">Done</option>
<option value="blocked">Blocked</option> <option value="blocked">Blocked</option>
</select> </select>
</motion.div> </div>
); );
})} })}
</div> </div>