removed tenant user page
This commit is contained in:
parent
78ccea8bac
commit
f88d1c7719
8 changed files with 6 additions and 120 deletions
|
|
@ -39,7 +39,7 @@ import { GDPRPage } from './pages/GDPR';
|
|||
import StorePage from './pages/Store';
|
||||
import { IntegrationsOverviewPage } from './pages/IntegrationsOverviewPage';
|
||||
import { FeatureViewPage } from './pages/FeatureView';
|
||||
import { AccessManagementHub, AdminMandatesPage, AdminUsersPage, AdminUserMandatesPage, AdminFeatureAccessPage, AdminInvitationsPage, AdminUserRoleTemplatesPage, AdminFeatureRolesPage, AdminFeatureInstanceUsersPage, AdminUserAccessOverviewPage, AdminLogsPage, AdminDemoConfigPage } from './pages/admin';
|
||||
import { AccessManagementHub, AdminMandatesPage, AdminUsersPage, AdminFeatureAccessPage, AdminInvitationsPage, AdminUserRoleTemplatesPage, AdminFeatureRolesPage, AdminFeatureInstanceUsersPage, AdminUserAccessOverviewPage, AdminLogsPage, AdminDemoConfigPage } from './pages/admin';
|
||||
import { AdminMandateWizardPage, AdminInvitationWizardPage } from './pages/admin/wizards';
|
||||
import { PromptsPage, FilesPage, ConnectionsPage } from './pages/basedata';
|
||||
import { BillingDataView, BillingAdmin, BillingMandateView, AdminSubscriptionsPage } from './pages/billing';
|
||||
|
|
@ -206,7 +206,7 @@ function App() {
|
|||
<Route index element={<Navigate to="/admin/access" replace />} />
|
||||
<Route path="mandates" element={<AdminMandatesPage />} />
|
||||
<Route path="users" element={<AdminUsersPage />} />
|
||||
<Route path="user-mandates" element={<AdminUserMandatesPage />} />
|
||||
<Route path="user-mandates" element={<Navigate to="/admin/mandates" replace />} />
|
||||
<Route path="access" element={<AccessManagementHub />} />
|
||||
<Route path="feature-instances" element={<AdminFeatureAccessPage />} />
|
||||
<Route path="feature-roles" element={<AdminFeatureRolesPage />} />
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* MandateUsersPanel — manage users within a single mandate (members, roles, add/remove).
|
||||
* Shared by AdminMandatesPage (expanded row) and AdminUserMandatesPage.
|
||||
* Used in AdminMandatesPage expanded row (MandateExpandDashboard).
|
||||
*/
|
||||
|
||||
import React, { useState, useEffect, useMemo, useCallback, useRef } from 'react';
|
||||
|
|
|
|||
|
|
@ -66,8 +66,6 @@ export const PAGE_ICONS: Record<string, React.ReactNode> = {
|
|||
'page.admin.mandates': <FaBuilding />,
|
||||
'page.admin.userRoleTemplates': <FaUserTag />,
|
||||
'page.admin.role-permissions': <FaShieldAlt />,
|
||||
'page.admin.user-mandates': <FaUserTag />,
|
||||
'page.admin.userMandates': <FaUserTag />,
|
||||
'page.admin.feature-roles': <FaCube />,
|
||||
'page.admin.featureRoles': <FaCube />,
|
||||
'page.admin.feature-instances': <FaCubes />,
|
||||
|
|
|
|||
|
|
@ -413,9 +413,6 @@ export const AccessManagementHub: React.FC = () => {
|
|||
<Link to="/admin/mandates" className={hubStyles.mandatesLink}>
|
||||
<FaBuilding /> {t('Mandanten verwalten')}
|
||||
</Link>
|
||||
<Link to="/admin/user-mandates" className={hubStyles.mandatesLink}>
|
||||
<FaUsers /> {t('Mandant-Benutzer')}
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
{viewMode === 'hierarchy' ? (
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ export const AdminInvitationsPage: React.FC = () => {
|
|||
.catch(() => setBackendAttributes([]));
|
||||
}, [fetchMandates, request]);
|
||||
|
||||
// Load invitations and roles when mandate changes (same roles as AdminUserMandatesPage: user, viewer, admin)
|
||||
// Load invitations and roles when mandate changes (same roles as MandateUsersPanel: user, viewer, admin)
|
||||
useEffect(() => {
|
||||
if (selectedMandateId) {
|
||||
fetchInvitations(selectedMandateId, { includeExpired: showExpired, includeUsed: showUsed });
|
||||
|
|
@ -122,7 +122,7 @@ export const AdminInvitationsPage: React.FC = () => {
|
|||
[_rawColumns, backendAttributes],
|
||||
);
|
||||
|
||||
// Form attributes - same role options as AdminUserMandatesPage (user, viewer, admin)
|
||||
// Form attributes - same role options as MandateUsersPanel (user, viewer, admin)
|
||||
const createFields: AttributeDefinition[] = useMemo(() => {
|
||||
const excludedFields = ['id', 'mandateId', 'token', 'sysCreatedBy', 'sysCreatedAt', 'sysUpdatedAt', 'sysUpdatedBy', 'expiresAt', 'currentUses', 'inviteUrl', 'featureInstanceId'];
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
*/
|
||||
|
||||
import React, { useState, useCallback } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { useAdminMandates, useMandateFormAttributes, type Mandate } from '../../hooks/useMandates';
|
||||
import { useApiRequest } from '../../hooks/useApi';
|
||||
import { updateSettingsAdmin } from '../../api/billingApi';
|
||||
|
|
@ -15,7 +14,7 @@ import { usePrompt } from '../../hooks/usePrompt';
|
|||
import { FormGeneratorTable } from '../../components/FormGenerator/FormGeneratorTable';
|
||||
import { FormGeneratorForm } from '../../components/FormGenerator/FormGeneratorForm';
|
||||
import { MandateExpandDashboard } from '../../components/admin/MandateExpandDashboard';
|
||||
import { FaPlus, FaSync, FaUsers, FaSkullCrossbones } from 'react-icons/fa';
|
||||
import { FaPlus, FaSync, FaSkullCrossbones } from 'react-icons/fa';
|
||||
import styles from './Admin.module.css';
|
||||
|
||||
import { useLanguage } from '../../providers/language/LanguageContext';
|
||||
|
|
@ -23,7 +22,6 @@ import { useLanguage } from '../../providers/language/LanguageContext';
|
|||
export const AdminMandatesPage: React.FC = () => {
|
||||
const { t } = useLanguage();
|
||||
|
||||
const navigate = useNavigate();
|
||||
const { request } = useApiRequest();
|
||||
const { showWarning, showSuccess } = useToast();
|
||||
const { prompt, PromptDialog } = usePrompt();
|
||||
|
|
@ -174,13 +172,6 @@ export const AdminMandatesPage: React.FC = () => {
|
|||
</p>
|
||||
</div>
|
||||
<div className={styles.headerActions}>
|
||||
<button
|
||||
type="button"
|
||||
className={styles.secondaryButton}
|
||||
onClick={() => navigate('/admin/user-mandates')}
|
||||
>
|
||||
<FaUsers /> {t('Benutzer-Zuweisungen')}
|
||||
</button>
|
||||
<button
|
||||
className={styles.secondaryButton}
|
||||
onClick={() => refetch()}
|
||||
|
|
|
|||
|
|
@ -1,99 +0,0 @@
|
|||
/**
|
||||
* AdminUserMandatesPage
|
||||
*
|
||||
* Admin page for managing user-mandate memberships.
|
||||
* Allows assigning users to mandates and managing their roles within mandates.
|
||||
*/
|
||||
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { useUserMandates, type Mandate } from '../../hooks/useUserMandates';
|
||||
import { FaSync, FaBuilding } from 'react-icons/fa';
|
||||
import { MandateUsersPanel } from '../../components/admin/MandateUsersPanel';
|
||||
import styles from './Admin.module.css';
|
||||
|
||||
import { useLanguage } from '../../providers/language/LanguageContext';
|
||||
import { mandateDisplayLabel } from '../../utils/mandateDisplayUtils';
|
||||
|
||||
export const AdminUserMandatesPage: React.FC = () => {
|
||||
const { t } = useLanguage();
|
||||
|
||||
const { error, fetchMandates } = useUserMandates();
|
||||
|
||||
const [mandates, setMandates] = useState<Mandate[]>([]);
|
||||
const [selectedMandateId, setSelectedMandateId] = useState<string>('');
|
||||
|
||||
useEffect(() => {
|
||||
const loadMandates = async () => {
|
||||
const data = await fetchMandates();
|
||||
setMandates(data);
|
||||
if (data.length > 0) {
|
||||
setSelectedMandateId((prev) => prev || data[0].id);
|
||||
}
|
||||
};
|
||||
loadMandates();
|
||||
}, [fetchMandates]);
|
||||
|
||||
if (error && !selectedMandateId) {
|
||||
return (
|
||||
<div className={`${styles.adminPage} ${styles.adminPageFill}`}>
|
||||
<div className={styles.errorContainer}>
|
||||
<span className={styles.errorIcon}>⚠️</span>
|
||||
<p className={styles.errorMessage}>
|
||||
{t('Fehler')}: {error}
|
||||
</p>
|
||||
<button type="button" className={styles.secondaryButton} onClick={() => fetchMandates()}>
|
||||
<FaSync /> {t('Erneut versuchen')}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={`${styles.adminPage} ${styles.adminPageFill}`}>
|
||||
<div className={styles.pageHeader}>
|
||||
<div>
|
||||
<h1 className={styles.pageTitle}>{t('Mandanten-Mitglieder')}</h1>
|
||||
<p className={styles.pageSubtitle}>{t('Verwalten Sie, welche Benutzer Zugriff')}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.filterSection}>
|
||||
<div className={styles.filterGroup}>
|
||||
<label className={styles.filterLabel}>
|
||||
<FaBuilding style={{ marginRight: 8 }} />
|
||||
{t('Mandant auswählen')}:
|
||||
</label>
|
||||
<select
|
||||
className={styles.filterSelect}
|
||||
value={selectedMandateId}
|
||||
onChange={(e) => setSelectedMandateId(e.target.value)}
|
||||
>
|
||||
<option value="">{t('Mandant wählen')}</option>
|
||||
{mandates.map((m) => (
|
||||
<option key={m.id} value={m.id}>
|
||||
{mandateDisplayLabel(m)}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{!selectedMandateId ? (
|
||||
<div className={styles.emptyState}>
|
||||
<FaBuilding className={styles.emptyIcon} />
|
||||
<h3 className={styles.emptyTitle}>{t('Kein Mandant ausgewählt')}</h3>
|
||||
<p className={styles.emptyDescription}>
|
||||
{t('Wählen Sie einen Mandanten aus, um dessen Mitglieder zu verwalten.')}
|
||||
</p>
|
||||
</div>
|
||||
) : (
|
||||
<div className={styles.tableContainer}>
|
||||
<MandateUsersPanel mandateId={selectedMandateId} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default AdminUserMandatesPage;
|
||||
|
|
@ -7,7 +7,6 @@
|
|||
export { AccessManagementHub } from './AccessManagementHub';
|
||||
export { AdminMandatesPage } from './AdminMandatesPage';
|
||||
export { AdminUsersPage } from './AdminUsersPage';
|
||||
export { AdminUserMandatesPage } from './AdminUserMandatesPage';
|
||||
export { AdminFeatureAccessPage } from './AdminFeatureAccessPage';
|
||||
export { AdminInvitationsPage } from './AdminInvitationsPage';
|
||||
export { AdminUserRoleTemplatesPage } from './AdminUserRoleTemplatesPage';
|
||||
|
|
|
|||
Loading…
Reference in a new issue