This commit completes stage 4 of the refactoring plan, focusing on cleanup and optimization of the modernized codebase. ## Key Changes ### Code Cleanup - Remove legacy `src/lib/styles.ts` (no longer needed) - Remove old modal components (`ImportProgressModal.tsx`, `ProviderList.tsx`) - Streamline `src/lib/tauri-api.ts` from 712 lines to 17 lines (-97.6%) - Remove global `window.api` pollution - Keep only event listeners (`tauriEvents.onProviderSwitched`) - All API calls now use modular `@/lib/api/*` layer ### Type System - Clean up `src/vite-env.d.ts` (remove 156 lines of outdated types) - Remove obsolete global type declarations - All TypeScript checks pass with zero errors ### Code Formatting - Format all source files with Prettier (82 files) - Fix formatting issues in 15 files: - App.tsx and core components - MCP management components - Settings module components - Provider management components - UI components ### Documentation Updates - Update `REFACTORING_CHECKLIST.md` with stage 4 progress - Mark completed tasks in `REFACTORING_MASTER_PLAN.md` ## Impact **Code Reduction:** - Total: -1,753 lines, +384 lines (net -1,369 lines) - tauri-api.ts: 712 → 17 lines (-97.6%) - Removed styles.ts: -82 lines - Removed vite-env.d.ts declarations: -156 lines **Quality Improvements:** - ✅ Zero TypeScript errors - ✅ Zero TODO/FIXME comments - ✅ 100% Prettier compliant - ✅ Zero `window.api` references - ✅ Fully modular API layer ## Testing - [x] TypeScript compilation passes - [x] Code formatting validated - [x] No linting errors Stage 4 completion: 100% Ready for stage 5 (testing and bug fixes)
72 lines
2.1 KiB
TypeScript
72 lines
2.1 KiB
TypeScript
import { Switch } from "@/components/ui/switch";
|
|
import { useTranslation } from "react-i18next";
|
|
import type { SettingsFormState } from "@/hooks/useSettings";
|
|
|
|
interface WindowSettingsProps {
|
|
settings: SettingsFormState;
|
|
onChange: (updates: Partial<SettingsFormState>) => void;
|
|
}
|
|
|
|
export function WindowSettings({ settings, onChange }: WindowSettingsProps) {
|
|
const { t } = useTranslation();
|
|
|
|
return (
|
|
<section className="space-y-4">
|
|
<header className="space-y-1">
|
|
<h3 className="text-sm font-medium">{t("settings.windowBehavior")}</h3>
|
|
<p className="text-xs text-muted-foreground">
|
|
{t("settings.windowBehaviorHint", {
|
|
defaultValue: "配置窗口最小化与 Claude 插件联动策略。",
|
|
})}
|
|
</p>
|
|
</header>
|
|
|
|
<ToggleRow
|
|
title={t("settings.minimizeToTray")}
|
|
description={t("settings.minimizeToTrayDescription")}
|
|
checked={settings.minimizeToTrayOnClose}
|
|
onCheckedChange={(value) => onChange({ minimizeToTrayOnClose: value })}
|
|
/>
|
|
|
|
<ToggleRow
|
|
title={t("settings.enableClaudePluginIntegration")}
|
|
description={t("settings.enableClaudePluginIntegrationDescription")}
|
|
checked={!!settings.enableClaudePluginIntegration}
|
|
onCheckedChange={(value) =>
|
|
onChange({ enableClaudePluginIntegration: value })
|
|
}
|
|
/>
|
|
</section>
|
|
);
|
|
}
|
|
|
|
interface ToggleRowProps {
|
|
title: string;
|
|
description?: string;
|
|
checked: boolean;
|
|
onCheckedChange: (value: boolean) => void;
|
|
}
|
|
|
|
function ToggleRow({
|
|
title,
|
|
description,
|
|
checked,
|
|
onCheckedChange,
|
|
}: ToggleRowProps) {
|
|
return (
|
|
<div className="flex items-start justify-between gap-4 rounded-lg border border-border p-4">
|
|
<div className="space-y-1">
|
|
<p className="text-sm font-medium leading-none">{title}</p>
|
|
{description ? (
|
|
<p className="text-xs text-muted-foreground">{description}</p>
|
|
) : null}
|
|
</div>
|
|
<Switch
|
|
checked={checked}
|
|
onCheckedChange={onCheckedChange}
|
|
aria-label={title}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|