feat: Katalogverwaltung ins Compliance SDK integriert (17 Kataloge)
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 36s
CI / test-python-backend-compliance (push) Successful in 41s
CI / test-python-document-crawler (push) Successful in 23s
CI / test-python-dsms-gateway (push) Successful in 18s
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 36s
CI / test-python-backend-compliance (push) Successful in 41s
CI / test-python-document-crawler (push) Successful in 23s
CI / test-python-dsms-gateway (push) Successful in 18s
Bestehende Catalog-Manager-Komponenten in SDK-Routes eingebunden: - SDKState + Reducer um customCatalogs CRUD erweitert - Neue Route /sdk/catalog-manager mit CatalogManagerContent - Sidebar-Link "Kataloge" mit Database-Icon Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
7
admin-compliance/app/sdk/catalog-manager/page.tsx
Normal file
7
admin-compliance/app/sdk/catalog-manager/page.tsx
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
'use client'
|
||||||
|
|
||||||
|
import CatalogManagerContent from '@/components/catalog-manager/CatalogManagerContent'
|
||||||
|
|
||||||
|
export default function CatalogManagerPage() {
|
||||||
|
return <CatalogManagerContent />
|
||||||
|
}
|
||||||
@@ -590,6 +590,18 @@ export function SDKSidebar({ collapsed = false, onCollapsedChange }: SDKSidebarP
|
|||||||
isActive={pathname === '/sdk/architecture'}
|
isActive={pathname === '/sdk/architecture'}
|
||||||
collapsed={collapsed}
|
collapsed={collapsed}
|
||||||
/>
|
/>
|
||||||
|
<AdditionalModuleItem
|
||||||
|
href="/sdk/catalog-manager"
|
||||||
|
icon={
|
||||||
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2}
|
||||||
|
d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4" />
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
label="Kataloge"
|
||||||
|
isActive={pathname === '/sdk/catalog-manager'}
|
||||||
|
collapsed={collapsed}
|
||||||
|
/>
|
||||||
<AdditionalModuleItem
|
<AdditionalModuleItem
|
||||||
href="https://macmini:3006"
|
href="https://macmini:3006"
|
||||||
icon={
|
icon={
|
||||||
|
|||||||
@@ -113,6 +113,9 @@ const initialState: SDKState = {
|
|||||||
securityIssues: [],
|
securityIssues: [],
|
||||||
securityBacklog: [],
|
securityBacklog: [],
|
||||||
|
|
||||||
|
// Catalog Manager
|
||||||
|
customCatalogs: {},
|
||||||
|
|
||||||
// UI State
|
// UI State
|
||||||
commandBarHistory: [],
|
commandBarHistory: [],
|
||||||
recentSearches: [],
|
recentSearches: [],
|
||||||
@@ -433,6 +436,41 @@ function sdkReducer(state: SDKState, action: ExtendedSDKAction): SDKState {
|
|||||||
preferences: { ...state.preferences, ...action.payload },
|
preferences: { ...state.preferences, ...action.payload },
|
||||||
})
|
})
|
||||||
|
|
||||||
|
case 'ADD_CUSTOM_CATALOG_ENTRY': {
|
||||||
|
const entry = action.payload
|
||||||
|
const existing = state.customCatalogs[entry.catalogId] || []
|
||||||
|
return updateState({
|
||||||
|
customCatalogs: {
|
||||||
|
...state.customCatalogs,
|
||||||
|
[entry.catalogId]: [...existing, entry],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'UPDATE_CUSTOM_CATALOG_ENTRY': {
|
||||||
|
const { catalogId, entryId, data } = action.payload
|
||||||
|
const entries = state.customCatalogs[catalogId] || []
|
||||||
|
return updateState({
|
||||||
|
customCatalogs: {
|
||||||
|
...state.customCatalogs,
|
||||||
|
[catalogId]: entries.map(e =>
|
||||||
|
e.id === entryId ? { ...e, data: { ...e.data, ...data }, updatedAt: new Date().toISOString() } : e
|
||||||
|
),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'DELETE_CUSTOM_CATALOG_ENTRY': {
|
||||||
|
const { catalogId, entryId } = action.payload
|
||||||
|
const items = state.customCatalogs[catalogId] || []
|
||||||
|
return updateState({
|
||||||
|
customCatalogs: {
|
||||||
|
...state.customCatalogs,
|
||||||
|
[catalogId]: items.filter(e => e.id !== entryId),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
case 'RESET_STATE':
|
case 'RESET_STATE':
|
||||||
return { ...initialState, lastModified: new Date() }
|
return { ...initialState, lastModified: new Date() }
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
* checkpoint system, and all compliance-related data structures.
|
* checkpoint system, and all compliance-related data structures.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import type { CustomCatalogs, CatalogId, CustomCatalogEntry } from './catalog-manager/types'
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// ENUMS
|
// ENUMS
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
@@ -1536,6 +1538,9 @@ export interface SDKState {
|
|||||||
securityIssues: SecurityIssue[]
|
securityIssues: SecurityIssue[]
|
||||||
securityBacklog: BacklogItem[]
|
securityBacklog: BacklogItem[]
|
||||||
|
|
||||||
|
// Catalog Manager
|
||||||
|
customCatalogs: CustomCatalogs
|
||||||
|
|
||||||
// UI State
|
// UI State
|
||||||
commandBarHistory: CommandHistory[]
|
commandBarHistory: CommandHistory[]
|
||||||
recentSearches: string[]
|
recentSearches: string[]
|
||||||
@@ -1621,6 +1626,9 @@ export type SDKAction =
|
|||||||
| { type: 'UPDATE_BACKLOG_ITEM'; payload: { id: string; data: Partial<BacklogItem> } }
|
| { type: 'UPDATE_BACKLOG_ITEM'; payload: { id: string; data: Partial<BacklogItem> } }
|
||||||
| { type: 'ADD_COMMAND_HISTORY'; payload: CommandHistory }
|
| { type: 'ADD_COMMAND_HISTORY'; payload: CommandHistory }
|
||||||
| { type: 'SET_PREFERENCES'; payload: Partial<UserPreferences> }
|
| { type: 'SET_PREFERENCES'; payload: Partial<UserPreferences> }
|
||||||
|
| { type: 'ADD_CUSTOM_CATALOG_ENTRY'; payload: CustomCatalogEntry }
|
||||||
|
| { type: 'UPDATE_CUSTOM_CATALOG_ENTRY'; payload: { catalogId: CatalogId; entryId: string; data: Record<string, unknown> } }
|
||||||
|
| { type: 'DELETE_CUSTOM_CATALOG_ENTRY'; payload: { catalogId: CatalogId; entryId: string } }
|
||||||
| { type: 'RESET_STATE' }
|
| { type: 'RESET_STATE' }
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user