mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-03 06:42:27 +08:00
## Problem Solved Previous refactoring added 105 lines (1476→1581) by extracting code into separate files without eliminating duplication. This refactor focuses on reducing code size through deduplication while maintaining file separation for maintainability. ## Summary - Reduced total lines from 1581 to 1519 (-62 lines, 3.9% reduction) - Eliminated duplicate patterns using generic helpers and factory functions - Maintained file structure for maintainability - Zero functional changes - same behavior ### Phase 1: DRY use-quota-manager.tsx - Created parseStorageCount() helper (eliminates 6x localStorage read duplication) - Created createQuotaChecker() factory (consolidates 3 check function bodies) - Created createQuotaIncrementer() factory (consolidates 3 increment function bodies) - Result: 242→247 lines (+5 lines, but fully DRY with eliminated duplication) ### Phase 2: DRY chat-panel.tsx (1176→1109 lines, -67 lines) #### 2.1: Extract checkAllQuotaLimits helper - Replaced 3 occurrences of 18-line quota check blocks - Saved 36 lines #### 2.2: Extract sendChatMessage helper - Replaced 3 occurrences of 21-line sendMessage+headers blocks - Saved 42 lines #### 2.3: Extract processFilesAndAppendContent helper - Replaced 2 occurrences of file processing loops - Handles PDF, text, and image files uniformly - Async helper with optional image parts parameter
27 lines
840 B
TypeScript
27 lines
840 B
TypeScript
import { STORAGE_KEYS } from "./storage"
|
|
|
|
/**
|
|
* Get AI configuration from localStorage.
|
|
* Returns API keys and settings for custom AI providers.
|
|
* Used to override server defaults when user provides their own API key.
|
|
*/
|
|
export function getAIConfig() {
|
|
if (typeof window === "undefined") {
|
|
return {
|
|
accessCode: "",
|
|
aiProvider: "",
|
|
aiBaseUrl: "",
|
|
aiApiKey: "",
|
|
aiModel: "",
|
|
}
|
|
}
|
|
|
|
return {
|
|
accessCode: localStorage.getItem(STORAGE_KEYS.accessCode) || "",
|
|
aiProvider: localStorage.getItem(STORAGE_KEYS.aiProvider) || "",
|
|
aiBaseUrl: localStorage.getItem(STORAGE_KEYS.aiBaseUrl) || "",
|
|
aiApiKey: localStorage.getItem(STORAGE_KEYS.aiApiKey) || "",
|
|
aiModel: localStorage.getItem(STORAGE_KEYS.aiModel) || "",
|
|
}
|
|
}
|