- Tenant-Admin-PWA: Neues /event-admin/welcome Onboarding mit WelcomeHero, Packages-, Order-Summary- und Event-Setup-Pages, Zustandsspeicher, Routing-Guard und Dashboard-CTA für Erstnutzer; Filament-/admin-Login via Custom-View behoben.
- Brand/Theming: Marketing-Farb- und Typographievariablen in `resources/css/app.css` eingeführt, AdminLayout, Dashboardkarten und Onboarding-Komponenten entsprechend angepasst; Dokumentation (`docs/todo/tenant-admin-onboarding-fusion.md`, `docs/changes/...`) aktualisiert. - Checkout & Payments: Checkout-, PayPal-Controller und Tests für integrierte Stripe/PayPal-Flows sowie Paket-Billing-Abläufe überarbeitet; neue PayPal SDK-Factory und Admin-API-Helper (`resources/js/admin/api.ts`) schaffen Grundlage für Billing/Members/Tasks-Seiten. - DX & Tests: Neue Playwright/E2E-Struktur (docs/testing/e2e.md, `tests/e2e/tenant-onboarding-flow.test.ts`, Utilities), E2E-Tenant-Seeder und zusätzliche Übersetzungen/Factories zur Unterstützung der neuen Flows. - Marketing-Kommunikation: Automatische Kontakt-Bestätigungsmail (`ContactConfirmation` + Blade-Template) implementiert; Guest-PWA unter `/event` erreichbar. - Nebensitzung: Blogsystem gefixt und umfassenden BlogPostSeeder für Beispielinhalte angelegt.
This commit is contained in:
48
resources/js/admin/onboarding/hooks/useTenantPackages.ts
Normal file
48
resources/js/admin/onboarding/hooks/useTenantPackages.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import React from 'react';
|
||||
import { getTenantPackagesOverview, getPackages, Package, TenantPackageSummary } from '../../api';
|
||||
|
||||
export type TenantPackagesState =
|
||||
| { status: 'loading' }
|
||||
| { status: 'error'; message: string }
|
||||
| {
|
||||
status: 'success';
|
||||
catalog: Package[];
|
||||
activePackage: TenantPackageSummary | null;
|
||||
purchasedPackages: TenantPackageSummary[];
|
||||
};
|
||||
|
||||
export function useTenantPackages(): TenantPackagesState {
|
||||
const [state, setState] = React.useState<TenantPackagesState>({ status: 'loading' });
|
||||
|
||||
React.useEffect(() => {
|
||||
let cancelled = false;
|
||||
(async () => {
|
||||
try {
|
||||
const [tenantPackages, catalog] = await Promise.all([
|
||||
getTenantPackagesOverview(),
|
||||
getPackages('endcustomer'),
|
||||
]);
|
||||
if (cancelled) return;
|
||||
setState({
|
||||
status: 'success',
|
||||
catalog,
|
||||
activePackage: tenantPackages.activePackage,
|
||||
purchasedPackages: tenantPackages.packages,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[useTenantPackages] Failed to fetch', error);
|
||||
if (cancelled) return;
|
||||
setState({
|
||||
status: 'error',
|
||||
message: 'Pakete konnten nicht geladen werden. Bitte später erneut versuchen.',
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
||||
return () => {
|
||||
cancelled = true;
|
||||
};
|
||||
}, []);
|
||||
|
||||
return state;
|
||||
}
|
||||
Reference in New Issue
Block a user