complete story 9.9 with qa test

This commit is contained in:
Naser Mansour
2026-01-03 02:39:33 +02:00
parent 9abaa93a49
commit 9228921669
16 changed files with 968 additions and 194 deletions
@@ -52,16 +52,16 @@ new class extends Component {
}; ?>
<div>
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div class="page-header mb-6">
<div>
<flux:heading size="xl">{{ __('clients.company_clients') }}</flux:heading>
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('clients.company_clients') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('clients.clients') }}</flux:text>
</div>
<div class="flex gap-3">
<flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray">
<div class="header-actions">
<flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray" class="w-full sm:w-auto justify-center">
{{ __('export.export_users') }}
</flux:button>
<flux:button variant="primary" :href="route('admin.clients.company.create')" wire:navigate icon="plus">
<flux:button variant="primary" :href="route('admin.clients.company.create')" wire:navigate icon="plus" class="w-full sm:w-auto justify-center">
{{ __('clients.create_company') }}
</flux:button>
</div>
@@ -102,7 +102,7 @@ new class extends Component {
</div>
<div class="overflow-hidden rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
<div class="overflow-x-auto">
<div class="table-scroll-wrapper">
<table class="min-w-full divide-y divide-zinc-200 dark:divide-zinc-700">
<thead class="bg-zinc-50 dark:bg-zinc-900">
<tr>
@@ -52,16 +52,16 @@ new class extends Component {
}; ?>
<div>
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div class="page-header mb-6">
<div>
<flux:heading size="xl">{{ __('clients.individual_clients') }}</flux:heading>
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('clients.individual_clients') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('clients.clients') }}</flux:text>
</div>
<div class="flex gap-3">
<flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray">
<div class="header-actions">
<flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray" class="w-full sm:w-auto justify-center">
{{ __('export.export_users') }}
</flux:button>
<flux:button variant="primary" :href="route('admin.clients.individual.create')" wire:navigate icon="plus">
<flux:button variant="primary" :href="route('admin.clients.individual.create')" wire:navigate icon="plus" class="w-full sm:w-auto justify-center">
{{ __('clients.create_client') }}
</flux:button>
</div>
@@ -102,7 +102,7 @@ new class extends Component {
</div>
<div class="overflow-hidden rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
<div class="overflow-x-auto">
<div class="table-scroll-wrapper">
<table class="min-w-full divide-y divide-zinc-200 dark:divide-zinc-700">
<thead class="bg-zinc-50 dark:bg-zinc-900">
<tr>
@@ -186,11 +186,11 @@ new class extends Component
<div>
<div class="mb-6">
<flux:heading size="xl">{{ __('admin_metrics.title') }}</flux:heading>
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('admin_metrics.title') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('admin_metrics.subtitle') }}</flux:text>
</div>
<div class="grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-4">
<div class="stats-grid">
{{-- User Metrics Card --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
<div class="mb-4 flex items-center gap-3">
@@ -318,45 +318,52 @@ new class extends Component
{{-- Analytics Charts Section --}}
<div class="mt-8">
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div class="page-header mb-6">
<flux:heading size="lg">{{ __('admin_metrics.analytics_charts') }}</flux:heading>
{{-- Date Range Selector --}}
<div class="flex flex-wrap items-center gap-2">
<flux:button
wire:click="$set('chartPeriod', '6m')"
:variant="$chartPeriod === '6m' ? 'primary' : 'ghost'"
size="sm"
>
{{ __('admin_metrics.last_6_months') }}
</flux:button>
<flux:button
wire:click="$set('chartPeriod', '12m')"
:variant="$chartPeriod === '12m' ? 'primary' : 'ghost'"
size="sm"
>
{{ __('admin_metrics.last_12_months') }}
</flux:button>
<div class="flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center">
<div class="flex gap-2">
<flux:button
wire:click="$set('chartPeriod', '6m')"
:variant="$chartPeriod === '6m' ? 'primary' : 'ghost'"
size="sm"
class="flex-1 sm:flex-none"
>
{{ __('admin_metrics.last_6_months') }}
</flux:button>
<flux:button
wire:click="$set('chartPeriod', '12m')"
:variant="$chartPeriod === '12m' ? 'primary' : 'ghost'"
size="sm"
class="flex-1 sm:flex-none"
>
{{ __('admin_metrics.last_12_months') }}
</flux:button>
</div>
{{-- Custom Range --}}
<div class="flex items-center gap-2">
<flux:input
type="month"
wire:model="customStartMonth"
class="w-36"
size="sm"
/>
<span class="text-zinc-500">-</span>
<flux:input
type="month"
wire:model="customEndMonth"
class="w-36"
size="sm"
/>
<div class="flex flex-col gap-2 sm:flex-row sm:items-center">
<div class="flex items-center gap-2">
<flux:input
type="month"
wire:model="customStartMonth"
class="w-full sm:w-36"
size="sm"
/>
<span class="text-zinc-500">-</span>
<flux:input
type="month"
wire:model="customEndMonth"
class="w-full sm:w-36"
size="sm"
/>
</div>
<flux:button
wire:click="setCustomRange"
:variant="$chartPeriod === 'custom' ? 'primary' : 'ghost'"
size="sm"
class="w-full sm:w-auto"
>
{{ __('admin_metrics.apply') }}
</flux:button>
@@ -586,24 +593,24 @@ new class extends Component
<div class="mt-8">
<flux:heading size="lg" class="mb-6">{{ __('widgets.quick_actions') }}</flux:heading>
<div class="grid grid-cols-1 gap-6 lg:grid-cols-3">
<div class="widget-grid">
{{-- Quick Actions Panel --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800 lg:col-span-3">
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 dark:border-zinc-700 dark:bg-zinc-800 lg:col-span-3">
<livewire:admin.widgets.quick-actions />
</div>
{{-- Pending Bookings Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 dark:border-zinc-700 dark:bg-zinc-800">
<livewire:admin.widgets.pending-bookings />
</div>
{{-- Today's Schedule Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 dark:border-zinc-700 dark:bg-zinc-800">
<livewire:admin.widgets.todays-schedule />
</div>
{{-- Recent Updates Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 dark:border-zinc-700 dark:bg-zinc-800">
<livewire:admin.widgets.recent-updates />
</div>
</div>