refactor(sdk): split hooks, dsr-portal, provider, sync approaching 500 LOC
All four files split into focused sibling modules so every file lands
comfortably under the 300-LOC soft target (hard cap 500):
hooks.ts (474→43) → hooks-core / hooks-dsgvo / hooks-compliance
hooks-rag-security / hooks-ui
dsr-portal.ts (464→129) → dsr-portal-translations / dsr-portal-render
provider.tsx (462→247) → provider-effects / provider-callbacks
sync.ts (435→299) → sync-storage / sync-conflict
Zero behaviour changes. All public APIs remain importable from the
original paths (hooks.ts re-exports every hook, provider.tsx keeps all
named exports, sync.ts preserves StateSyncManager + factory).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
'use client'
|
||||
|
||||
import { useMemo } from 'react'
|
||||
import { useCompliance } from './hooks-core'
|
||||
|
||||
// =============================================================================
|
||||
// NAVIGATION HOOKS
|
||||
// =============================================================================
|
||||
|
||||
export function useSDKNavigation() {
|
||||
const {
|
||||
currentStep,
|
||||
goToStep,
|
||||
goToNextStep,
|
||||
goToPreviousStep,
|
||||
canGoNext,
|
||||
canGoPrevious,
|
||||
completionPercentage,
|
||||
phase1Completion,
|
||||
phase2Completion,
|
||||
state,
|
||||
} = useCompliance()
|
||||
|
||||
return useMemo(
|
||||
() => ({
|
||||
currentStep,
|
||||
currentPhase: state.currentPhase,
|
||||
completedSteps: state.completedSteps,
|
||||
goToStep,
|
||||
goToNextStep,
|
||||
goToPreviousStep,
|
||||
canGoNext,
|
||||
canGoPrevious,
|
||||
completionPercentage,
|
||||
phase1Completion,
|
||||
phase2Completion,
|
||||
}),
|
||||
[
|
||||
currentStep,
|
||||
state.currentPhase,
|
||||
state.completedSteps,
|
||||
goToStep,
|
||||
goToNextStep,
|
||||
goToPreviousStep,
|
||||
canGoNext,
|
||||
canGoPrevious,
|
||||
completionPercentage,
|
||||
phase1Completion,
|
||||
phase2Completion,
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// SYNC HOOKS
|
||||
// =============================================================================
|
||||
|
||||
export function useSync() {
|
||||
const { syncState, forceSyncToServer, isOnline, saveState, loadState } = useCompliance()
|
||||
|
||||
return useMemo(
|
||||
() => ({
|
||||
status: syncState.status,
|
||||
lastSyncedAt: syncState.lastSyncedAt,
|
||||
pendingChanges: syncState.pendingChanges,
|
||||
error: syncState.error,
|
||||
isOnline,
|
||||
isSyncing: syncState.status === 'syncing',
|
||||
hasConflict: syncState.status === 'conflict',
|
||||
forceSyncToServer,
|
||||
saveState,
|
||||
loadState,
|
||||
}),
|
||||
[syncState, isOnline, forceSyncToServer, saveState, loadState]
|
||||
)
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// CHECKPOINT HOOKS
|
||||
// =============================================================================
|
||||
|
||||
export function useCheckpoints() {
|
||||
const { validateCheckpoint, overrideCheckpoint, getCheckpointStatus, state } = useCompliance()
|
||||
|
||||
return useMemo(
|
||||
() => ({
|
||||
checkpoints: state.checkpoints,
|
||||
validateCheckpoint,
|
||||
overrideCheckpoint,
|
||||
getCheckpointStatus,
|
||||
passedCheckpoints: Object.values(state.checkpoints).filter(c => c.passed).length,
|
||||
totalCheckpoints: Object.keys(state.checkpoints).length,
|
||||
}),
|
||||
[state.checkpoints, validateCheckpoint, overrideCheckpoint, getCheckpointStatus]
|
||||
)
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// EXPORT HOOKS
|
||||
// =============================================================================
|
||||
|
||||
export function useExport() {
|
||||
const { exportState } = useCompliance()
|
||||
|
||||
return useMemo(
|
||||
() => ({
|
||||
exportJSON: () => exportState('json'),
|
||||
exportPDF: () => exportState('pdf'),
|
||||
exportZIP: () => exportState('zip'),
|
||||
exportState,
|
||||
}),
|
||||
[exportState]
|
||||
)
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// COMMAND BAR HOOK
|
||||
// =============================================================================
|
||||
|
||||
export function useCommandBar() {
|
||||
const { isCommandBarOpen, setCommandBarOpen } = useCompliance()
|
||||
|
||||
return useMemo(
|
||||
() => ({
|
||||
isOpen: isCommandBarOpen,
|
||||
open: () => setCommandBarOpen(true),
|
||||
close: () => setCommandBarOpen(false),
|
||||
toggle: () => setCommandBarOpen(!isCommandBarOpen),
|
||||
}),
|
||||
[isCommandBarOpen, setCommandBarOpen]
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user