Files
fotospiel-app/resources/js/admin/onboarding/hooks/useTenantPackages.ts
Codex Agent d04e234ca0 - 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.
2025-10-10 21:31:55 +02:00

49 lines
1.3 KiB
TypeScript

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;
}