Files
metabuilder/hooks/useStorageSettingsHandlers.ts
johndoe6345789 78a54228df feat(hooks): Create centralized hooks npm package
- Added @metabuilder/hooks workspace package at root
- Consolidated 30 React hooks from across codebase into single module
- Implemented conditional exports for tree-shaking support
- Added comprehensive package.json with build/lint/typecheck scripts
- Created README.md documenting hook categories and usage patterns
- Updated root package.json workspaces array to include hooks
- Supports multi-version peer dependencies (React 18/19, Redux 8/9)

Usage:
  import { useDashboardLogic } from '@metabuilder/hooks'
  import { useLoginLogic } from '@metabuilder/hooks/useLoginLogic'

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-01-23 19:17:17 +00:00

69 lines
1.6 KiB
TypeScript

import { useCallback, useState } from 'react'
import { useStorageBackend } from '@/hooks/use-unified-storage'
import { useStorageSwitchHandlers } from './useStorageSwitchHandlers'
import { useStorageDataHandlers } from './useStorageDataHandlers'
type StorageSettingsHandlersOptions = {
defaultFlaskUrl: string
exportFilename: () => string
importAccept: string
}
const flaskUrlStorageKey = 'codeforge-flask-url'
export const useStorageSettingsHandlers = ({
defaultFlaskUrl,
exportFilename,
importAccept,
}: StorageSettingsHandlersOptions) => {
const {
backend,
isLoading,
switchToFlask,
switchToSQLite,
switchToIndexedDB,
exportData,
importData,
} = useStorageBackend()
const [flaskUrl, setFlaskUrlState] = useState(
() => localStorage.getItem(flaskUrlStorageKey) || defaultFlaskUrl
)
const setFlaskUrl = useCallback((value: string) => {
setFlaskUrlState(value)
localStorage.setItem(flaskUrlStorageKey, value)
}, [])
const { isSwitching, handleSwitchToFlask, handleSwitchToSQLite, handleSwitchToIndexedDB } =
useStorageSwitchHandlers({
backend,
flaskUrl,
switchToFlask,
switchToSQLite,
switchToIndexedDB,
})
const { isExporting, isImporting, handleExport, handleImport } = useStorageDataHandlers({
exportData,
importData,
exportFilename,
importAccept,
})
return {
backend,
isLoading,
flaskUrl,
setFlaskUrl,
isSwitching,
handleSwitchToFlask,
handleSwitchToSQLite,
handleSwitchToIndexedDB,
isExporting,
isImporting,
handleExport,
handleImport,
}
}