- 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.
49 lines
1.3 KiB
TypeScript
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;
|
|
}
|