feat(crm): move Import-Wizard into CRM-Settings tab

Import ist kein eigener Nav-Eintrag mehr, sondern ein Tab
in den CRM-Einstellungen. /crm/import redirectet auf /crm/settings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Thomas Reitz 2026-03-12 21:00:19 +01:00
parent dda672d41e
commit 27507f1372
3 changed files with 29 additions and 25 deletions

View file

@ -39,6 +39,7 @@ import {
CUSTOM_FIELD_TYPE_LABELS,
} from '../types';
import { LexwareSyncContent } from '../lexware/LexwareSyncPage';
import { ImportPage } from '../import/ImportPage';
import styles from './CrmSettingsPage.module.css';
// ============================================================
@ -1326,7 +1327,7 @@ function NorthDataConfig() {
// Page Component
// ============================================================
type SettingsTab = 'module' | 'customfields' | 'lexware' | 'integrations' | 'settings';
type SettingsTab = 'module' | 'customfields' | 'lexware' | 'integrations' | 'import' | 'settings';
export function CrmSettingsPage() {
const { user } = useAuth();
@ -1447,6 +1448,25 @@ export function CrmSettingsPage() {
</svg>
Integrationen
</button>
<button
className={`${styles.settingsTab} ${activeTab === 'import' ? styles.settingsTabActive : ''}`}
onClick={() => setActiveTab('import')}
>
<svg
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
stroke="currentColor"
strokeWidth="1.5"
strokeLinecap="round"
strokeLinejoin="round"
>
<path d="M8 2v8M5 7l3 3 3-3" />
<path d="M2 12h12" />
</svg>
Import
</button>
<button
className={`${styles.settingsTab} ${activeTab === 'settings' ? styles.settingsTabActive : ''}`}
onClick={() => setActiveTab('settings')}
@ -1610,6 +1630,13 @@ export function CrmSettingsPage() {
<NorthDataConfig />
)}
{/* Tab: Import */}
{activeTab === 'import' && (
<div className={styles.card}>
<ImportPage />
</div>
)}
{/* Tab: Weitere Einstellungen */}
{activeTab === 'settings' && (
<>

View file

@ -24,7 +24,6 @@ import { CrmSettingsProvider, CrmModuleGuard } from '../crm/settings/CrmSettings
import { CrmSettingsPage } from '../crm/settings/CrmSettingsPage';
import { LexwareSyncPage } from '../crm/lexware/LexwareSyncPage';
import { ForecastPage } from '../crm/forecast/ForecastPage';
import { ImportPage } from '../crm/import/ImportPage';
function PrivateRoute({ children }: { children: React.ReactNode }) {
const { isAuthenticated, isLoading } = useAuth();
@ -73,7 +72,7 @@ export function App() {
<Route path="crm/deals/:id" element={<CrmModuleGuard module="deals"><DealDetailPage /></CrmModuleGuard>} />
<Route path="crm/pipelines" element={<CrmModuleGuard module="pipelines"><PipelinesPage /></CrmModuleGuard>} />
<Route path="crm/forecast" element={<CrmModuleGuard module="deals"><ForecastPage /></CrmModuleGuard>} />
<Route path="crm/import" element={<ImportPage />} />
<Route path="crm/import" element={<Navigate to="/crm/settings" replace />} />
<Route path="crm/settings" element={<CrmSettingsPage />} />
<Route path="crm/lexware-sync" element={<LexwareSyncPage />} />
{/* Admin-Bereich mit eigenem Layout (Top-Tabs) */}

View file

@ -391,28 +391,6 @@ export function AppLayout() {
{!collapsed && 'Prognose'}
</NavLink>
)}
<NavLink
to="/crm/import"
className={({ isActive }) =>
`${styles.navLink} ${isActive ? styles.active : ''}`
}
title="Import"
>
<svg
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
stroke="currentColor"
strokeWidth="1.5"
strokeLinecap="round"
strokeLinejoin="round"
>
<path d="M8 2v8M5 7l3 3 3-3" />
<path d="M2 12h12" />
</svg>
{!collapsed && 'Import'}
</NavLink>
{/* CRM Einstellungen (nur Admins) */}
{isAdmin && (
<NavLink