removed dark mod and applied fixes for text colors
This commit is contained in:
parent
ddbb224d07
commit
dfee2ff5c8
|
|
@ -6,7 +6,6 @@ return [
|
||||||
'settings' => 'الإعدادات',
|
'settings' => 'الإعدادات',
|
||||||
'profile' => 'الملف الشخصي',
|
'profile' => 'الملف الشخصي',
|
||||||
'password' => 'كلمة المرور',
|
'password' => 'كلمة المرور',
|
||||||
'appearance' => 'المظهر',
|
|
||||||
'two_factor' => 'المصادقة الثنائية',
|
'two_factor' => 'المصادقة الثنائية',
|
||||||
'logout' => 'تسجيل الخروج',
|
'logout' => 'تسجيل الخروج',
|
||||||
'login' => 'تسجيل الدخول',
|
'login' => 'تسجيل الدخول',
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ return [
|
||||||
'settings' => 'Settings',
|
'settings' => 'Settings',
|
||||||
'profile' => 'Profile',
|
'profile' => 'Profile',
|
||||||
'password' => 'Password',
|
'password' => 'Password',
|
||||||
'appearance' => 'Appearance',
|
|
||||||
'two_factor' => 'Two-Factor Authentication',
|
'two_factor' => 'Two-Factor Authentication',
|
||||||
'logout' => 'Log Out',
|
'logout' => 'Log Out',
|
||||||
'login' => 'Login',
|
'login' => 'Login',
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,6 @@
|
||||||
@source '../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
|
@source '../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
|
||||||
@source '../../vendor/livewire/flux/stubs/**/*.blade.php';
|
@source '../../vendor/livewire/flux/stubs/**/*.blade.php';
|
||||||
|
|
||||||
@custom-variant dark (&:where(.dark, .dark *));
|
|
||||||
|
|
||||||
@theme {
|
@theme {
|
||||||
/* Font definitions - to be updated in typography story */
|
/* Font definitions - to be updated in typography story */
|
||||||
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||||
|
|
@ -72,14 +70,6 @@
|
||||||
--color-warning: #F39C12;
|
--color-warning: #F39C12;
|
||||||
}
|
}
|
||||||
|
|
||||||
@layer theme {
|
|
||||||
.dark {
|
|
||||||
--color-accent: var(--color-white);
|
|
||||||
--color-accent-content: var(--color-white);
|
|
||||||
--color-accent-foreground: var(--color-neutral-800);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
|
|
||||||
*,
|
*,
|
||||||
|
|
@ -91,6 +81,112 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Flux UI Light Mode Overrides
|
||||||
|
Ensure proper text visibility after dark mode removal
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/* Flux Headings - ensure dark text */
|
||||||
|
[data-flux-heading] {
|
||||||
|
color: rgb(24 24 27) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Text/Subheading - ensure readable gray */
|
||||||
|
[data-flux-text],
|
||||||
|
[data-flux-subheading] {
|
||||||
|
color: rgb(113 113 122) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navlist group headings */
|
||||||
|
[data-flux-navlist-group] > div:first-child {
|
||||||
|
color: rgb(113 113 122) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navlist items */
|
||||||
|
[data-flux-navlist-item] {
|
||||||
|
color: rgb(63 63 70) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-flux-navlist-item]:hover {
|
||||||
|
color: rgb(24 24 27) !important;
|
||||||
|
background-color: rgb(244 244 245) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-flux-navlist-item][data-current="true"],
|
||||||
|
[data-flux-navlist-item][aria-current="page"] {
|
||||||
|
color: rgb(24 24 27) !important;
|
||||||
|
background-color: rgb(244 244 245) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Menu items */
|
||||||
|
[data-flux-menu-item] {
|
||||||
|
color: rgb(63 63 70) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-flux-menu-item]:hover {
|
||||||
|
color: rgb(24 24 27) !important;
|
||||||
|
background-color: rgb(244 244 245) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Modal content */
|
||||||
|
[data-flux-modal] {
|
||||||
|
background-color: rgb(255 255 255) !important;
|
||||||
|
color: rgb(24 24 27) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Dropdown/Select */
|
||||||
|
[data-flux-menu],
|
||||||
|
[data-flux-listbox] {
|
||||||
|
background-color: rgb(255 255 255) !important;
|
||||||
|
border-color: rgb(228 228 231) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Profile text */
|
||||||
|
[data-flux-profile] span {
|
||||||
|
color: rgb(63 63 70) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Badge - ensure text is visible */
|
||||||
|
[data-flux-badge] {
|
||||||
|
color: rgb(255 255 255) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Badge variants with proper contrast */
|
||||||
|
[data-flux-badge][data-variant="outline"] {
|
||||||
|
color: rgb(63 63 70) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Callout text */
|
||||||
|
[data-flux-callout],
|
||||||
|
[data-flux-callout] * {
|
||||||
|
color: rgb(63 63 70) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-flux-callout-heading] {
|
||||||
|
color: rgb(24 24 27) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Table cells */
|
||||||
|
[data-flux-table] td,
|
||||||
|
[data-flux-table] th {
|
||||||
|
color: rgb(63 63 70) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-flux-table] th {
|
||||||
|
color: rgb(24 24 27) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Card content */
|
||||||
|
[data-flux-card] {
|
||||||
|
background-color: rgb(255 255 255) !important;
|
||||||
|
color: rgb(63 63 70) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flux Separator */
|
||||||
|
[data-flux-separator] {
|
||||||
|
background-color: rgb(228 228 231) !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* ==========================================================================
|
/* ==========================================================================
|
||||||
Logo Badge Styling (Story 12.2)
|
Logo Badge Styling (Story 12.2)
|
||||||
Creates "seal/stamp" effect for logo on Dark Charcoal backgrounds
|
Creates "seal/stamp" effect for logo on Dark Charcoal backgrounds
|
||||||
|
|
@ -673,7 +769,7 @@ img, video, iframe {
|
||||||
}
|
}
|
||||||
|
|
||||||
.timeline-line {
|
.timeline-line {
|
||||||
@apply absolute top-0 bottom-0 w-0.5 bg-zinc-200 dark:bg-zinc-700;
|
@apply absolute top-0 bottom-0 w-0.5 bg-zinc-200;
|
||||||
@apply start-4 sm:start-6;
|
@apply start-4 sm:start-6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="dark">
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||||
<head>
|
<head>
|
||||||
@include('partials.head')
|
@include('partials.head')
|
||||||
</head>
|
</head>
|
||||||
<body class="min-h-screen bg-white dark:bg-zinc-800">
|
<body class="min-h-screen bg-white">
|
||||||
<flux:header container class="border-b border-zinc-200 bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900">
|
<flux:header container class="border-b border-zinc-200 bg-zinc-50">
|
||||||
<flux:sidebar.toggle class="lg:hidden" icon="bars-2" inset="left" />
|
<flux:sidebar.toggle class="lg:hidden" icon="bars-2" inset="left" />
|
||||||
|
|
||||||
<a href="{{ route('dashboard') }}" class="ms-2 me-5 flex items-center space-x-2 rtl:space-x-reverse lg:ms-0" wire:navigate>
|
<a href="{{ route('dashboard') }}" class="ms-2 me-5 flex items-center space-x-2 rtl:space-x-reverse lg:ms-0" wire:navigate>
|
||||||
|
|
@ -56,7 +56,7 @@
|
||||||
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
|
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
|
||||||
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
|
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
|
||||||
<span
|
<span
|
||||||
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white"
|
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black"
|
||||||
>
|
>
|
||||||
{{ auth()->user()->initials() }}
|
{{ auth()->user()->initials() }}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -89,7 +89,7 @@
|
||||||
</flux:header>
|
</flux:header>
|
||||||
|
|
||||||
<!-- Mobile Menu -->
|
<!-- Mobile Menu -->
|
||||||
<flux:sidebar stashable sticky class="lg:hidden border-e border-zinc-200 bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900">
|
<flux:sidebar stashable sticky class="lg:hidden border-e border-zinc-200 bg-zinc-50">
|
||||||
<flux:sidebar.toggle class="lg:hidden" icon="x-mark" />
|
<flux:sidebar.toggle class="lg:hidden" icon="x-mark" />
|
||||||
|
|
||||||
<a href="{{ route('dashboard') }}" class="ms-1 flex items-center space-x-2 rtl:space-x-reverse" wire:navigate>
|
<a href="{{ route('dashboard') }}" class="ms-1 flex items-center space-x-2 rtl:space-x-reverse" wire:navigate>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}" class="dark">
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}">
|
||||||
<head>
|
<head>
|
||||||
@include('partials.head')
|
@include('partials.head')
|
||||||
</head>
|
</head>
|
||||||
<body class="min-h-screen bg-white dark:bg-zinc-800" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
|
<body class="min-h-screen bg-white" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
|
||||||
<!-- Skip to content link for keyboard accessibility -->
|
<!-- Skip to content link for keyboard accessibility -->
|
||||||
<a href="#main-content" class="skip-link" data-test="skip-to-content">
|
<a href="#main-content" class="skip-link" data-test="skip-to-content">
|
||||||
{{ __('accessibility.skip_to_content') }}
|
{{ __('accessibility.skip_to_content') }}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<flux:sidebar sticky stashable class="border-e border-zinc-200 bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900">
|
<flux:sidebar sticky stashable class="border-e border-zinc-200 bg-zinc-50 text-zinc-800">
|
||||||
<flux:sidebar.toggle class="lg:hidden" icon="x-mark" />
|
<flux:sidebar.toggle class="lg:hidden" icon="x-mark" />
|
||||||
|
|
||||||
@php
|
@php
|
||||||
|
|
@ -179,7 +179,7 @@
|
||||||
<div class="px-3 py-2">
|
<div class="px-3 py-2">
|
||||||
<a
|
<a
|
||||||
href="{{ route('admin.bookings.pending') }}"
|
href="{{ route('admin.bookings.pending') }}"
|
||||||
class="relative inline-flex items-center rounded-lg p-2 text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800"
|
class="relative inline-flex items-center rounded-lg p-2 text-zinc-600 transition-colors hover:bg-zinc-100"
|
||||||
wire:navigate
|
wire:navigate
|
||||||
>
|
>
|
||||||
<flux:icon name="bell" class="h-5 w-5" />
|
<flux:icon name="bell" class="h-5 w-5" />
|
||||||
|
|
@ -222,7 +222,7 @@
|
||||||
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
|
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
|
||||||
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
|
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
|
||||||
<span
|
<span
|
||||||
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white"
|
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black"
|
||||||
>
|
>
|
||||||
{{ auth()->user()->initials() }}
|
{{ auth()->user()->initials() }}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -266,7 +266,7 @@
|
||||||
@endphp
|
@endphp
|
||||||
<a
|
<a
|
||||||
href="{{ route('admin.bookings.pending') }}"
|
href="{{ route('admin.bookings.pending') }}"
|
||||||
class="relative inline-flex items-center rounded-lg p-2 text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800"
|
class="relative inline-flex items-center rounded-lg p-2 text-zinc-600 transition-colors hover:bg-zinc-100"
|
||||||
wire:navigate
|
wire:navigate
|
||||||
>
|
>
|
||||||
<flux:icon name="bell" class="h-5 w-5" />
|
<flux:icon name="bell" class="h-5 w-5" />
|
||||||
|
|
@ -293,7 +293,7 @@
|
||||||
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
|
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
|
||||||
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
|
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
|
||||||
<span
|
<span
|
||||||
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white"
|
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black"
|
||||||
>
|
>
|
||||||
{{ auth()->user()->initials() }}
|
{{ auth()->user()->initials() }}
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
@include('partials.head')
|
@include('partials.head')
|
||||||
</head>
|
</head>
|
||||||
<body class="min-h-screen bg-neutral-100 antialiased dark:bg-linear-to-b dark:from-neutral-950 dark:to-neutral-900" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
|
<body class="min-h-screen bg-neutral-100 antialiased" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
|
||||||
<!-- Skip to content link for keyboard accessibility -->
|
<!-- Skip to content link for keyboard accessibility -->
|
||||||
<a href="#main-content" class="skip-link" data-test="skip-to-content">
|
<a href="#main-content" class="skip-link" data-test="skip-to-content">
|
||||||
{{ __('accessibility.skip_to_content') }}
|
{{ __('accessibility.skip_to_content') }}
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<div class="flex flex-col gap-6">
|
<div class="flex flex-col gap-6">
|
||||||
<div class="rounded-xl border bg-white dark:bg-stone-950 dark:border-stone-800 text-stone-800 shadow-xs">
|
<div class="rounded-xl border bg-white text-stone-800 shadow-xs">
|
||||||
<div class="px-10 py-8">{{ $slot }}</div>
|
<div class="px-10 py-8">{{ $slot }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
@include('partials.head')
|
@include('partials.head')
|
||||||
</head>
|
</head>
|
||||||
<body class="min-h-screen bg-white antialiased dark:bg-linear-to-b dark:from-neutral-950 dark:to-neutral-900" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
|
<body class="min-h-screen bg-white antialiased" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
|
||||||
<!-- Skip to content link for keyboard accessibility -->
|
<!-- Skip to content link for keyboard accessibility -->
|
||||||
<a href="#main-content" class="skip-link" data-test="skip-to-content">
|
<a href="#main-content" class="skip-link" data-test="skip-to-content">
|
||||||
{{ __('accessibility.skip_to_content') }}
|
{{ __('accessibility.skip_to_content') }}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@
|
||||||
@if (Laravel\Fortify\Features::canManageTwoFactorAuthentication())
|
@if (Laravel\Fortify\Features::canManageTwoFactorAuthentication())
|
||||||
<flux:navlist.item :href="route('two-factor.show')" wire:navigate>{{ __('Two-Factor Auth') }}</flux:navlist.item>
|
<flux:navlist.item :href="route('two-factor.show')" wire:navigate>{{ __('Two-Factor Auth') }}</flux:navlist.item>
|
||||||
@endif
|
@endif
|
||||||
<flux:navlist.item :href="route('appearance.edit')" wire:navigate>{{ __('Appearance') }}</flux:navlist.item>
|
|
||||||
</flux:navlist>
|
</flux:navlist>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
<x-layouts.app :title="__('Dashboard')">
|
<x-layouts.app :title="__('Dashboard')">
|
||||||
<div class="flex h-full w-full flex-1 flex-col gap-4 rounded-xl">
|
<div class="flex h-full w-full flex-1 flex-col gap-4 rounded-xl">
|
||||||
<div class="grid auto-rows-min gap-4 md:grid-cols-3">
|
<div class="grid auto-rows-min gap-4 md:grid-cols-3">
|
||||||
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700">
|
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200">
|
||||||
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" />
|
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20" />
|
||||||
</div>
|
</div>
|
||||||
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700">
|
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200">
|
||||||
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" />
|
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20" />
|
||||||
</div>
|
</div>
|
||||||
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700">
|
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200">
|
||||||
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" />
|
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="relative h-full flex-1 overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700">
|
<div class="relative h-full flex-1 overflow-hidden rounded-xl border border-neutral-200">
|
||||||
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" />
|
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</x-layouts.app>
|
</x-layouts.app>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="group/disclosure-button mb-[2px] flex h-10 w-full items-center rounded-lg text-zinc-500 hover:bg-zinc-800/5 hover:text-zinc-800 lg:h-8 dark:text-white/80 dark:hover:bg-white/[7%] dark:hover:text-white"
|
class="group/disclosure-button mb-[2px] flex h-10 w-full items-center rounded-lg text-zinc-500 hover:bg-zinc-800/5 hover:text-zinc-800 lg:h-8"
|
||||||
>
|
>
|
||||||
<div class="ps-3 pe-4">
|
<div class="ps-3 pe-4">
|
||||||
<flux:icon.chevron-down class="hidden size-3! group-data-open/disclosure-button:block" />
|
<flux:icon.chevron-down class="hidden size-3! group-data-open/disclosure-button:block" />
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="relative hidden space-y-[2px] ps-7 data-open:block" @if ($expanded === true) data-open @endif>
|
<div class="relative hidden space-y-[2px] ps-7 data-open:block" @if ($expanded === true) data-open @endif>
|
||||||
<div class="absolute inset-y-[3px] start-0 ms-4 w-px bg-zinc-200 dark:bg-white/30"></div>
|
<div class="absolute inset-y-[3px] start-0 ms-4 w-px bg-zinc-200"></div>
|
||||||
|
|
||||||
{{ $slot }}
|
{{ $slot }}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ new class extends Component
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('audit.audit_logs') }}</flux:heading>
|
<flux:heading size="xl">{{ __('audit.audit_logs') }}</flux:heading>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ __('audit.audit_logs_description') }}</p>
|
<p class="text-sm text-zinc-500 mt-1">{{ __('audit.audit_logs_description') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<flux:button wire:click="exportCsv" icon="arrow-down-tray">
|
<flux:button wire:click="exportCsv" icon="arrow-down-tray">
|
||||||
{{ __('audit.export_csv') }}
|
{{ __('audit.export_csv') }}
|
||||||
|
|
@ -139,7 +139,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Filters -->
|
<!-- Filters -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
|
||||||
<flux:field>
|
<flux:field>
|
||||||
<flux:select wire:model.live="actionFilter">
|
<flux:select wire:model.live="actionFilter">
|
||||||
|
|
@ -188,7 +188,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Sort Headers -->
|
<!-- Sort Headers -->
|
||||||
<div class="hidden lg:flex bg-zinc-100 dark:bg-zinc-700 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 dark:text-zinc-300 gap-4 mb-0">
|
<div class="hidden lg:flex bg-zinc-100 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 gap-4 mb-0">
|
||||||
<span class="w-40">{{ __('audit.timestamp') }}</span>
|
<span class="w-40">{{ __('audit.timestamp') }}</span>
|
||||||
<span class="w-32">{{ __('audit.admin') }}</span>
|
<span class="w-32">{{ __('audit.admin') }}</span>
|
||||||
<span class="w-28">{{ __('audit.action') }}</span>
|
<span class="w-28">{{ __('audit.action') }}</span>
|
||||||
|
|
@ -200,18 +200,18 @@ new class extends Component
|
||||||
<!-- Logs List -->
|
<!-- Logs List -->
|
||||||
<div class="space-y-0">
|
<div class="space-y-0">
|
||||||
@forelse($logs as $log)
|
@forelse($logs as $log)
|
||||||
<div wire:key="log-{{ $log->id }}" class="bg-white dark:bg-zinc-800 p-4 border border-zinc-200 dark:border-zinc-700 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
|
<div wire:key="log-{{ $log->id }}" class="bg-white p-4 border border-zinc-200 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
|
||||||
<div class="flex flex-col lg:flex-row lg:items-center gap-4">
|
<div class="flex flex-col lg:flex-row lg:items-center gap-4">
|
||||||
<!-- Timestamp -->
|
<!-- Timestamp -->
|
||||||
<div class="lg:w-40">
|
<div class="lg:w-40">
|
||||||
<div class="text-sm font-medium text-zinc-900 dark:text-zinc-100">
|
<div class="text-sm font-medium text-zinc-900">
|
||||||
{{ $log->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'd/m/Y H:i' : 'm/d/Y H:i') }}
|
{{ $log->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'd/m/Y H:i' : 'm/d/Y H:i') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Admin -->
|
<!-- Admin -->
|
||||||
<div class="lg:w-32">
|
<div class="lg:w-32">
|
||||||
<div class="text-sm text-zinc-900 dark:text-zinc-100">
|
<div class="text-sm text-zinc-900">
|
||||||
{{ $log->admin?->name ?? __('audit.system') }}
|
{{ $log->admin?->name ?? __('audit.system') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -234,14 +234,14 @@ new class extends Component
|
||||||
|
|
||||||
<!-- Target -->
|
<!-- Target -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="text-sm text-zinc-900 dark:text-zinc-100">
|
<div class="text-sm text-zinc-900">
|
||||||
{{ __("audit.target_{$log->target_type}") }} #{{ $log->target_id }}
|
{{ __("audit.target_{$log->target_type}") }} #{{ $log->target_id }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- IP Address -->
|
<!-- IP Address -->
|
||||||
<div class="lg:w-36">
|
<div class="lg:w-36">
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400 font-mono">
|
<div class="text-sm text-zinc-500 font-mono">
|
||||||
{{ $log->ip_address }}
|
{{ $log->ip_address }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -255,7 +255,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700">
|
<div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
|
||||||
<flux:icon name="clipboard-document-list" class="w-12 h-12 mx-auto mb-4" />
|
<flux:icon name="clipboard-document-list" class="w-12 h-12 mx-auto mb-4" />
|
||||||
<p>{{ $actionFilter || $targetFilter || $dateFrom || $dateTo || $search ? __('audit.no_results') : __('audit.no_logs_found') }}</p>
|
<p>{{ $actionFilter || $targetFilter || $dateFrom || $dateTo || $search ? __('audit.no_results') : __('audit.no_logs_found') }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -274,38 +274,38 @@ new class extends Component
|
||||||
|
|
||||||
<div class="grid grid-cols-2 gap-4 text-sm">
|
<div class="grid grid-cols-2 gap-4 text-sm">
|
||||||
<div>
|
<div>
|
||||||
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.timestamp') }}:</span>
|
<span class="font-medium text-zinc-500">{{ __('audit.timestamp') }}:</span>
|
||||||
<span class="ms-2 text-zinc-900 dark:text-zinc-100">{{ $selectedLog->created_at->format('Y-m-d H:i:s') }}</span>
|
<span class="ms-2 text-zinc-900">{{ $selectedLog->created_at->format('Y-m-d H:i:s') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.admin') }}:</span>
|
<span class="font-medium text-zinc-500">{{ __('audit.admin') }}:</span>
|
||||||
<span class="ms-2 text-zinc-900 dark:text-zinc-100">{{ $selectedLog->admin?->name ?? __('audit.system') }}</span>
|
<span class="ms-2 text-zinc-900">{{ $selectedLog->admin?->name ?? __('audit.system') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.action') }}:</span>
|
<span class="font-medium text-zinc-500">{{ __('audit.action') }}:</span>
|
||||||
<span class="ms-2 text-zinc-900 dark:text-zinc-100">{{ __("audit.action_{$selectedLog->action}") }}</span>
|
<span class="ms-2 text-zinc-900">{{ __("audit.action_{$selectedLog->action}") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.target') }}:</span>
|
<span class="font-medium text-zinc-500">{{ __('audit.target') }}:</span>
|
||||||
<span class="ms-2 text-zinc-900 dark:text-zinc-100">{{ __("audit.target_{$selectedLog->target_type}") }} #{{ $selectedLog->target_id }}</span>
|
<span class="ms-2 text-zinc-900">{{ __("audit.target_{$selectedLog->target_type}") }} #{{ $selectedLog->target_id }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-2">
|
<div class="col-span-2">
|
||||||
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.ip_address') }}:</span>
|
<span class="font-medium text-zinc-500">{{ __('audit.ip_address') }}:</span>
|
||||||
<span class="ms-2 text-zinc-900 dark:text-zinc-100 font-mono">{{ $selectedLog->ip_address }}</span>
|
<span class="ms-2 text-zinc-900 font-mono">{{ $selectedLog->ip_address }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if($selectedLog->old_values)
|
@if($selectedLog->old_values)
|
||||||
<div>
|
<div>
|
||||||
<strong class="text-zinc-700 dark:text-zinc-300">{{ __('audit.old_values') }}:</strong>
|
<strong class="text-zinc-700">{{ __('audit.old_values') }}:</strong>
|
||||||
<pre class="bg-zinc-100 dark:bg-zinc-900 p-3 rounded-lg text-sm overflow-auto mt-2 text-zinc-800 dark:text-zinc-200" dir="ltr">{{ json_encode($selectedLog->old_values, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
|
<pre class="bg-zinc-100 p-3 rounded-lg text-sm overflow-auto mt-2 text-zinc-800" dir="ltr">{{ json_encode($selectedLog->old_values, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@if($selectedLog->new_values)
|
@if($selectedLog->new_values)
|
||||||
<div>
|
<div>
|
||||||
<strong class="text-zinc-700 dark:text-zinc-300">{{ __('audit.new_values') }}:</strong>
|
<strong class="text-zinc-700">{{ __('audit.new_values') }}:</strong>
|
||||||
<pre class="bg-zinc-100 dark:bg-zinc-900 p-3 rounded-lg text-sm overflow-auto mt-2 text-zinc-800 dark:text-zinc-200" dir="ltr">{{ json_encode($selectedLog->new_values, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
|
<pre class="bg-zinc-100 p-3 rounded-lg text-sm overflow-auto mt-2 text-zinc-800" dir="ltr">{{ json_encode($selectedLog->new_values, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ new class extends Component
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<!-- Filters -->
|
<!-- Filters -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
|
||||||
<div class="flex flex-col sm:flex-row gap-4 items-end">
|
<div class="flex flex-col sm:flex-row gap-4 items-end">
|
||||||
<flux:field class="flex-1">
|
<flux:field class="flex-1">
|
||||||
<flux:label>{{ __('admin.date_from') }}</flux:label>
|
<flux:label>{{ __('admin.date_from') }}</flux:label>
|
||||||
|
|
@ -205,7 +205,7 @@ new class extends Component
|
||||||
<!-- Bookings List -->
|
<!-- Bookings List -->
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
@forelse($bookings as $booking)
|
@forelse($bookings as $booking)
|
||||||
<div wire:key="booking-{{ $booking->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700">
|
<div wire:key="booking-{{ $booking->id }}" class="bg-white rounded-lg p-4 border border-zinc-200">
|
||||||
<div class="flex flex-col lg:flex-row lg:items-start justify-between gap-4">
|
<div class="flex flex-col lg:flex-row lg:items-start justify-between gap-4">
|
||||||
<!-- Booking Info -->
|
<!-- Booking Info -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
|
|
@ -213,7 +213,7 @@ new class extends Component
|
||||||
@if($booking->isGuest())
|
@if($booking->isGuest())
|
||||||
<flux:badge color="amber" size="sm">{{ __('admin.guest') }}</flux:badge>
|
<flux:badge color="amber" size="sm">{{ __('admin.guest') }}</flux:badge>
|
||||||
@endif
|
@endif
|
||||||
<span class="font-semibold text-zinc-900 dark:text-zinc-100">
|
<span class="font-semibold text-zinc-900">
|
||||||
{{ $booking->getClientName() }}
|
{{ $booking->getClientName() }}
|
||||||
</span>
|
</span>
|
||||||
<flux:badge variant="warning" size="sm">
|
<flux:badge variant="warning" size="sm">
|
||||||
|
|
@ -221,7 +221,7 @@ new class extends Component
|
||||||
</flux:badge>
|
</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-zinc-600 dark:text-zinc-400">
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-zinc-600">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<flux:icon name="calendar" class="w-4 h-4" />
|
<flux:icon name="calendar" class="w-4 h-4" />
|
||||||
{{ \Carbon\Carbon::parse($booking->booking_date)->translatedFormat('l, d M Y') }}
|
{{ \Carbon\Carbon::parse($booking->booking_date)->translatedFormat('l, d M Y') }}
|
||||||
|
|
@ -242,7 +242,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="mt-3 text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2">
|
<p class="mt-3 text-sm text-zinc-600 line-clamp-2">
|
||||||
{{ Str::limit($booking->problem_summary, 150) }}
|
{{ Str::limit($booking->problem_summary, 150) }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -279,7 +279,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700">
|
<div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
|
||||||
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
|
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
|
||||||
<p>{{ __('admin.no_pending_bookings') }}</p>
|
<p>{{ __('admin.no_pending_bookings') }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -210,7 +210,7 @@ new class extends Component
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<!-- Client/Guest Information -->
|
<!-- Client/Guest Information -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700 mb-6">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200 mb-6">
|
||||||
<div class="flex items-center gap-2 mb-4">
|
<div class="flex items-center gap-2 mb-4">
|
||||||
<flux:heading size="lg">{{ __('admin.client_information') }}</flux:heading>
|
<flux:heading size="lg">{{ __('admin.client_information') }}</flux:heading>
|
||||||
@if($consultation->isGuest())
|
@if($consultation->isGuest())
|
||||||
|
|
@ -220,22 +220,22 @@ new class extends Component
|
||||||
|
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_name') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.client_name') }}</p>
|
||||||
<p class="font-medium text-zinc-900 dark:text-zinc-100">
|
<p class="font-medium text-zinc-900">
|
||||||
{{ $consultation->getClientName() }}
|
{{ $consultation->getClientName() }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_email') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.client_email') }}</p>
|
||||||
<p class="font-medium text-zinc-900 dark:text-zinc-100">
|
<p class="font-medium text-zinc-900">
|
||||||
<a href="mailto:{{ $consultation->getClientEmail() }}" class="text-primary hover:underline">
|
<a href="mailto:{{ $consultation->getClientEmail() }}" class="text-primary hover:underline">
|
||||||
{{ $consultation->getClientEmail() }}
|
{{ $consultation->getClientEmail() }}
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_phone') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.client_phone') }}</p>
|
||||||
<p class="font-medium text-zinc-900 dark:text-zinc-100">
|
<p class="font-medium text-zinc-900">
|
||||||
@if($consultation->getClientPhone())
|
@if($consultation->getClientPhone())
|
||||||
<a href="tel:{{ $consultation->getClientPhone() }}" class="text-primary hover:underline">
|
<a href="tel:{{ $consultation->getClientPhone() }}" class="text-primary hover:underline">
|
||||||
{{ $consultation->getClientPhone() }}
|
{{ $consultation->getClientPhone() }}
|
||||||
|
|
@ -247,8 +247,8 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
@unless($consultation->isGuest())
|
@unless($consultation->isGuest())
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_type') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.client_type') }}</p>
|
||||||
<p class="font-medium text-zinc-900 dark:text-zinc-100">
|
<p class="font-medium text-zinc-900">
|
||||||
{{ ucfirst($consultation->user?->user_type?->value ?? '-') }}
|
{{ ucfirst($consultation->user?->user_type?->value ?? '-') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -257,30 +257,30 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Booking Details -->
|
<!-- Booking Details -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700 mb-6">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200 mb-6">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('admin.booking_details') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('admin.booking_details') }}</flux:heading>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.requested_date') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.requested_date') }}</p>
|
||||||
<p class="font-medium text-zinc-900 dark:text-zinc-100">
|
<p class="font-medium text-zinc-900">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.requested_time') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.requested_time') }}</p>
|
||||||
<p class="font-medium text-zinc-900 dark:text-zinc-100">
|
<p class="font-medium text-zinc-900">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.submission_date') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.submission_date') }}</p>
|
||||||
<p class="font-medium text-zinc-900 dark:text-zinc-100">
|
<p class="font-medium text-zinc-900">
|
||||||
{{ $consultation->created_at->translatedFormat('d M Y, g:i A') }}
|
{{ $consultation->created_at->translatedFormat('d M Y, g:i A') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.current_status') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.current_status') }}</p>
|
||||||
<flux:badge :variant="match($consultation->status) {
|
<flux:badge :variant="match($consultation->status) {
|
||||||
ConsultationStatus::Pending => 'warning',
|
ConsultationStatus::Pending => 'warning',
|
||||||
ConsultationStatus::Approved => 'success',
|
ConsultationStatus::Approved => 'success',
|
||||||
|
|
@ -293,8 +293,8 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400 mb-2">{{ __('admin.problem_summary') }}</p>
|
<p class="text-sm text-zinc-500 mb-2">{{ __('admin.problem_summary') }}</p>
|
||||||
<p class="text-zinc-900 dark:text-zinc-100 whitespace-pre-wrap">
|
<p class="text-zinc-900 whitespace-pre-wrap">
|
||||||
{{ $consultation->problem_summary }}
|
{{ $consultation->problem_summary }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -302,17 +302,17 @@ new class extends Component
|
||||||
|
|
||||||
<!-- Consultation History -->
|
<!-- Consultation History -->
|
||||||
@if($consultationHistory->count() > 0)
|
@if($consultationHistory->count() > 0)
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700 mb-6">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200 mb-6">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('admin.consultation_history') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('admin.consultation_history') }}</flux:heading>
|
||||||
|
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
@foreach($consultationHistory as $history)
|
@foreach($consultationHistory as $history)
|
||||||
<div class="flex items-center justify-between p-3 bg-zinc-50 dark:bg-zinc-700 rounded-lg">
|
<div class="flex items-center justify-between p-3 bg-zinc-50 rounded-lg">
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-zinc-900 dark:text-zinc-100">
|
<p class="font-medium text-zinc-900">
|
||||||
{{ \Carbon\Carbon::parse($history->booking_date)->translatedFormat('d M Y') }}
|
{{ \Carbon\Carbon::parse($history->booking_date)->translatedFormat('d M Y') }}
|
||||||
</p>
|
</p>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">
|
<p class="text-sm text-zinc-500">
|
||||||
{{ $history->consultation_type?->value ?? '-' }}
|
{{ $history->consultation_type?->value ?? '-' }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -350,7 +350,7 @@ new class extends Component
|
||||||
<flux:heading size="lg">{{ __('admin.approve_booking') }}</flux:heading>
|
<flux:heading size="lg">{{ __('admin.approve_booking') }}</flux:heading>
|
||||||
|
|
||||||
<!-- Client Info Summary -->
|
<!-- Client Info Summary -->
|
||||||
<div class="bg-zinc-50 dark:bg-zinc-700 p-4 rounded-lg">
|
<div class="bg-zinc-50 p-4 rounded-lg">
|
||||||
<p><strong>{{ __('admin.client') }}:</strong> {{ $consultation->getClientName() }}</p>
|
<p><strong>{{ __('admin.client') }}:</strong> {{ $consultation->getClientName() }}</p>
|
||||||
<p><strong>{{ __('admin.date') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}</p>
|
<p><strong>{{ __('admin.date') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}</p>
|
||||||
<p><strong>{{ __('admin.time') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}</p>
|
<p><strong>{{ __('admin.time') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}</p>
|
||||||
|
|
@ -405,7 +405,7 @@ new class extends Component
|
||||||
<flux:heading size="lg">{{ __('admin.reject_booking') }}</flux:heading>
|
<flux:heading size="lg">{{ __('admin.reject_booking') }}</flux:heading>
|
||||||
|
|
||||||
<!-- Client Info Summary -->
|
<!-- Client Info Summary -->
|
||||||
<div class="bg-zinc-50 dark:bg-zinc-700 p-4 rounded-lg">
|
<div class="bg-zinc-50 p-4 rounded-lg">
|
||||||
<p><strong>{{ __('admin.client') }}:</strong> {{ $consultation->getClientName() }}</p>
|
<p><strong>{{ __('admin.client') }}:</strong> {{ $consultation->getClientName() }}</p>
|
||||||
<p><strong>{{ __('admin.date') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}</p>
|
<p><strong>{{ __('admin.date') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}</p>
|
||||||
<p><strong>{{ __('admin.time') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}</p>
|
<p><strong>{{ __('admin.time') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}</p>
|
||||||
|
|
|
||||||
|
|
@ -87,10 +87,10 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<flux:heading size="xl">{{ __('clients.create_company') }}</flux:heading>
|
<flux:heading size="xl">{{ __('clients.create_company') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('clients.company_clients') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ __('clients.company_clients') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6">
|
||||||
<form wire:submit="create" class="space-y-6">
|
<form wire:submit="create" class="space-y-6">
|
||||||
<div class="grid gap-6 sm:grid-cols-2">
|
<div class="grid gap-6 sm:grid-cols-2">
|
||||||
<flux:field>
|
<flux:field>
|
||||||
|
|
@ -174,7 +174,7 @@ new class extends Component {
|
||||||
</flux:field>
|
</flux:field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
|
||||||
<flux:button variant="ghost" :href="route('admin.clients.company.index')" wire:navigate>
|
<flux:button variant="ghost" :href="route('admin.clients.company.index')" wire:navigate>
|
||||||
{{ __('clients.cancel') }}
|
{{ __('clients.cancel') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
|
||||||
|
|
@ -111,10 +111,10 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<flux:heading size="xl">{{ __('clients.edit_company') }}</flux:heading>
|
<flux:heading size="xl">{{ __('clients.edit_company') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ $client->company_name }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ $client->company_name }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6">
|
||||||
<form wire:submit="update" class="space-y-6">
|
<form wire:submit="update" class="space-y-6">
|
||||||
<div class="grid gap-6 sm:grid-cols-2">
|
<div class="grid gap-6 sm:grid-cols-2">
|
||||||
<flux:field>
|
<flux:field>
|
||||||
|
|
@ -210,7 +210,7 @@ new class extends Component {
|
||||||
</flux:field>
|
</flux:field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
|
||||||
<flux:button variant="ghost" :href="route('admin.clients.company.index')" wire:navigate>
|
<flux:button variant="ghost" :href="route('admin.clients.company.index')" wire:navigate>
|
||||||
{{ __('clients.cancel') }}
|
{{ __('clients.cancel') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ new class extends Component {
|
||||||
<div class="page-header mb-6">
|
<div class="page-header mb-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('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>
|
<flux:text class="mt-1 text-zinc-500">{{ __('clients.clients') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-actions">
|
<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">
|
<flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray" class="w-full sm:w-auto justify-center">
|
||||||
|
|
@ -67,7 +67,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-4 dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-4">
|
||||||
<div class="flex flex-col gap-4 sm:flex-row sm:items-end">
|
<div class="flex flex-col gap-4 sm:flex-row sm:items-end">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<flux:input
|
<flux:input
|
||||||
|
|
@ -101,50 +101,50 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="overflow-hidden rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="overflow-hidden rounded-lg border border-zinc-200 bg-white">
|
||||||
<div class="table-scroll-wrapper">
|
<div class="table-scroll-wrapper">
|
||||||
<table class="min-w-full divide-y divide-zinc-200 dark:divide-zinc-700">
|
<table class="min-w-full divide-y divide-zinc-200">
|
||||||
<thead class="bg-zinc-50 dark:bg-zinc-900">
|
<thead class="bg-zinc-50">
|
||||||
<tr>
|
<tr>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.company_name') }}
|
{{ __('clients.company_name') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.contact_person') }}
|
{{ __('clients.contact_person') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.email') }}
|
{{ __('clients.email') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.registration_number') }}
|
{{ __('clients.registration_number') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.status') }}
|
{{ __('clients.status') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.created_at') }}
|
{{ __('clients.created_at') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-end text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-end text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.actions') }}
|
{{ __('clients.actions') }}
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="divide-y divide-zinc-200 bg-white dark:divide-zinc-700 dark:bg-zinc-800">
|
<tbody class="divide-y divide-zinc-200 bg-white">
|
||||||
@forelse ($clients as $client)
|
@forelse ($clients as $client)
|
||||||
<tr wire:key="client-{{ $client->id }}">
|
<tr wire:key="client-{{ $client->id }}">
|
||||||
<td class="whitespace-nowrap px-6 py-4">
|
<td class="whitespace-nowrap px-6 py-4">
|
||||||
<div class="flex items-center gap-3">
|
<div class="flex items-center gap-3">
|
||||||
<flux:avatar size="sm" :name="$client->company_name" />
|
<flux:avatar size="sm" :name="$client->company_name" />
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $client->company_name }}</span>
|
<span class="font-medium text-zinc-900">{{ $client->company_name }}</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400">
|
<td class="whitespace-nowrap px-6 py-4 text-zinc-600">
|
||||||
{{ $client->contact_person_name }}
|
{{ $client->contact_person_name }}
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400">
|
<td class="whitespace-nowrap px-6 py-4 text-zinc-600">
|
||||||
{{ $client->email }}
|
{{ $client->email }}
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400">
|
<td class="whitespace-nowrap px-6 py-4 text-zinc-600">
|
||||||
{{ $client->company_cert_number }}
|
{{ $client->company_cert_number }}
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4">
|
<td class="whitespace-nowrap px-6 py-4">
|
||||||
|
|
@ -154,7 +154,7 @@ new class extends Component {
|
||||||
<flux:badge color="red" size="sm">{{ __('clients.deactivated') }}</flux:badge>
|
<flux:badge color="red" size="sm">{{ __('clients.deactivated') }}</flux:badge>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400">
|
<td class="whitespace-nowrap px-6 py-4 text-zinc-600">
|
||||||
{{ $client->created_at->format('Y-m-d') }}
|
{{ $client->created_at->format('Y-m-d') }}
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-end">
|
<td class="whitespace-nowrap px-6 py-4 text-end">
|
||||||
|
|
@ -183,7 +183,7 @@ new class extends Component {
|
||||||
<td colspan="7" class="px-6 py-12 text-center">
|
<td colspan="7" class="px-6 py-12 text-center">
|
||||||
<div class="flex flex-col items-center">
|
<div class="flex flex-col items-center">
|
||||||
<flux:icon name="building-office" class="mb-4 h-12 w-12 text-zinc-400" />
|
<flux:icon name="building-office" class="mb-4 h-12 w-12 text-zinc-400" />
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-zinc-500">
|
||||||
@if ($search || $statusFilter)
|
@if ($search || $statusFilter)
|
||||||
{{ __('clients.no_companies_match') }}
|
{{ __('clients.no_companies_match') }}
|
||||||
@else
|
@else
|
||||||
|
|
@ -204,7 +204,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($clients->hasPages())
|
@if ($clients->hasPages())
|
||||||
<div class="border-t border-zinc-200 bg-zinc-50 px-6 py-4 dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="border-t border-zinc-200 bg-zinc-50 px-6 py-4">
|
||||||
{{ $clients->links() }}
|
{{ $clients->links() }}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ new class extends Component {
|
||||||
</flux:button>
|
</flux:button>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap gap-2">
|
<div class="flex flex-wrap gap-2">
|
||||||
<flux:button variant="ghost" class="border border-amber-500 text-amber-600 hover:bg-amber-50 dark:text-amber-400 dark:hover:bg-amber-900/20" x-data x-on:click="$flux.modal('convert-to-individual').show()" icon="user">
|
<flux:button variant="ghost" class="border border-amber-500 text-amber-600 hover:bg-amber-50" x-data x-on:click="$flux.modal('convert-to-individual').show()" icon="user">
|
||||||
{{ __('clients.convert_to_individual') }}
|
{{ __('clients.convert_to_individual') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
<flux:button variant="primary" :href="route('admin.clients.company.edit', $client)" wire:navigate icon="pencil">
|
<flux:button variant="primary" :href="route('admin.clients.company.edit', $client)" wire:navigate icon="pencil">
|
||||||
|
|
@ -40,14 +40,14 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<flux:heading size="xl">{{ __('clients.company_profile') }}</flux:heading>
|
<flux:heading size="xl">{{ __('clients.company_profile') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ $client->company_name }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ $client->company_name }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid gap-6 lg:grid-cols-3">
|
<div class="grid gap-6 lg:grid-cols-3">
|
||||||
{{-- Company Information --}}
|
{{-- Company Information --}}
|
||||||
<div class="lg:col-span-2">
|
<div class="lg:col-span-2">
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="rounded-lg border border-zinc-200 bg-white">
|
||||||
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700">
|
<div class="border-b border-zinc-200 px-6 py-4">
|
||||||
<flux:heading size="lg">{{ __('clients.company_information') }}</flux:heading>
|
<flux:heading size="lg">{{ __('clients.company_information') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
|
|
@ -56,37 +56,37 @@ new class extends Component {
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="grid gap-6 sm:grid-cols-2">
|
<div class="grid gap-6 sm:grid-cols-2">
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.company_name') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.company_name') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->company_name }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->company_name }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.registration_number') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.registration_number') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->company_cert_number }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->company_cert_number }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.contact_person_name') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.contact_person_name') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->contact_person_name }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->contact_person_name }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.contact_person_id') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.contact_person_id') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->contact_person_id }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->contact_person_id }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.email') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.email') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->email }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->email }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.phone') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.phone') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->phone }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->phone }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.preferred_language') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.preferred_language') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">
|
<flux:text class="mt-1 text-zinc-900">
|
||||||
{{ $client->preferred_language === 'ar' ? __('clients.arabic') : __('clients.english') }}
|
{{ $client->preferred_language === 'ar' ? __('clients.arabic') : __('clients.english') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.status') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.status') }}</flux:text>
|
||||||
<div class="mt-1">
|
<div class="mt-1">
|
||||||
@if ($client->status === UserStatus::Active)
|
@if ($client->status === UserStatus::Active)
|
||||||
<flux:badge color="green">{{ __('clients.active') }}</flux:badge>
|
<flux:badge color="green">{{ __('clients.active') }}</flux:badge>
|
||||||
|
|
@ -96,12 +96,12 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.member_since') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.member_since') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->created_at->format('Y-m-d') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->created_at->format('Y-m-d') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.user_type') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.user_type') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ __('clients.company') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ __('clients.company') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -113,34 +113,34 @@ new class extends Component {
|
||||||
{{-- Stats Sidebar --}}
|
{{-- Stats Sidebar --}}
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
{{-- Consultation Summary --}}
|
{{-- Consultation Summary --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="rounded-lg border border-zinc-200 bg-white">
|
||||||
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700">
|
<div class="border-b border-zinc-200 px-6 py-4">
|
||||||
<flux:heading size="lg">{{ __('clients.consultation_history') }}</flux:heading>
|
<flux:heading size="lg">{{ __('clients.consultation_history') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.total_consultations') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.total_consultations') }}</flux:text>
|
||||||
<flux:badge color="zinc">{{ $client->consultations_count }}</flux:badge>
|
<flux:badge color="zinc">{{ $client->consultations_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.pending_consultations') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.pending_consultations') }}</flux:text>
|
||||||
<flux:badge color="yellow">{{ $client->pending_consultations_count }}</flux:badge>
|
<flux:badge color="yellow">{{ $client->pending_consultations_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.completed_consultations') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.completed_consultations') }}</flux:text>
|
||||||
<flux:badge color="green">{{ $client->completed_consultations_count }}</flux:badge>
|
<flux:badge color="green">{{ $client->completed_consultations_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@if ($client->consultations_count > 0)
|
@if ($client->consultations_count > 0)
|
||||||
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700">
|
<div class="mt-4 border-t border-zinc-200 pt-4">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-sm text-zinc-500">
|
||||||
{{ __('clients.view_all_consultations') }}
|
{{ __('clients.view_all_consultations') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700">
|
<div class="mt-4 border-t border-zinc-200 pt-4">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-sm text-zinc-500">
|
||||||
{{ __('clients.no_consultations') }}
|
{{ __('clients.no_consultations') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -149,30 +149,30 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Timeline Summary --}}
|
{{-- Timeline Summary --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="rounded-lg border border-zinc-200 bg-white">
|
||||||
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700">
|
<div class="border-b border-zinc-200 px-6 py-4">
|
||||||
<flux:heading size="lg">{{ __('clients.timeline_history') }}</flux:heading>
|
<flux:heading size="lg">{{ __('clients.timeline_history') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.total_timelines') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.total_timelines') }}</flux:text>
|
||||||
<flux:badge color="zinc">{{ $client->timelines_count }}</flux:badge>
|
<flux:badge color="zinc">{{ $client->timelines_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.active_timelines') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.active_timelines') }}</flux:text>
|
||||||
<flux:badge color="blue">{{ $client->active_timelines_count }}</flux:badge>
|
<flux:badge color="blue">{{ $client->active_timelines_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@if ($client->timelines_count > 0)
|
@if ($client->timelines_count > 0)
|
||||||
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700">
|
<div class="mt-4 border-t border-zinc-200 pt-4">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-sm text-zinc-500">
|
||||||
{{ __('clients.view_all_timelines') }}
|
{{ __('clients.view_all_timelines') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700">
|
<div class="mt-4 border-t border-zinc-200 pt-4">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-sm text-zinc-500">
|
||||||
{{ __('clients.no_timelines') }}
|
{{ __('clients.no_timelines') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -183,7 +183,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Lifecycle Actions Section --}}
|
{{-- Lifecycle Actions Section --}}
|
||||||
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('clients.account_actions') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('clients.account_actions') }}</flux:heading>
|
||||||
<livewire:admin.clients.lifecycle-actions :client="$client" />
|
<livewire:admin.clients.lifecycle-actions :client="$client" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -54,41 +54,41 @@ new class extends Component
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('admin.client_consultations') }}</flux:heading>
|
<flux:heading size="xl">{{ __('admin.client_consultations') }}</flux:heading>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ $user->full_name }}</p>
|
<p class="text-sm text-zinc-500 mt-1">{{ $user->full_name }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Statistics -->
|
<!-- Statistics -->
|
||||||
<div class="grid grid-cols-2 sm:grid-cols-4 gap-4 mb-6">
|
<div class="grid grid-cols-2 sm:grid-cols-4 gap-4 mb-6">
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 text-center">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 text-center">
|
||||||
<p class="text-2xl font-bold text-zinc-900 dark:text-zinc-100">{{ $statistics['total'] }}</p>
|
<p class="text-2xl font-bold text-zinc-900">{{ $statistics['total'] }}</p>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.total_consultations') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.total_consultations') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 text-center">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 text-center">
|
||||||
<p class="text-2xl font-bold text-green-600 dark:text-green-400">{{ $statistics['completed'] }}</p>
|
<p class="text-2xl font-bold text-green-600">{{ $statistics['completed'] }}</p>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.completed_consultations') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.completed_consultations') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 text-center">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 text-center">
|
||||||
<p class="text-2xl font-bold text-red-600 dark:text-red-400">{{ $statistics['cancelled'] }}</p>
|
<p class="text-2xl font-bold text-red-600">{{ $statistics['cancelled'] }}</p>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.cancelled_consultations') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.cancelled_consultations') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 text-center">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 text-center">
|
||||||
<p class="text-2xl font-bold text-amber-600 dark:text-amber-400">{{ $statistics['no_show'] }}</p>
|
<p class="text-2xl font-bold text-amber-600">{{ $statistics['no_show'] }}</p>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.no_show_consultations') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.no_show_consultations') }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Consultations List -->
|
<!-- Consultations List -->
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
@forelse($consultations as $consultation)
|
@forelse($consultations as $consultation)
|
||||||
<div wire:key="consultation-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700">
|
<div wire:key="consultation-{{ $consultation->id }}" class="bg-white rounded-lg p-4 border border-zinc-200">
|
||||||
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
|
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="flex items-center gap-3 mb-2">
|
<div class="flex items-center gap-3 mb-2">
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">
|
<span class="font-medium text-zinc-900">
|
||||||
{{ $consultation->booking_date->translatedFormat('l, d M Y') }}
|
{{ $consultation->booking_date->translatedFormat('l, d M Y') }}
|
||||||
</span>
|
</span>
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">
|
<span class="text-zinc-500">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -127,7 +127,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if($consultation->problem_summary)
|
@if($consultation->problem_summary)
|
||||||
<p class="mt-2 text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2">
|
<p class="mt-2 text-sm text-zinc-600 line-clamp-2">
|
||||||
{{ Str::limit($consultation->problem_summary, 150) }}
|
{{ Str::limit($consultation->problem_summary, 150) }}
|
||||||
</p>
|
</p>
|
||||||
@endif
|
@endif
|
||||||
|
|
@ -144,7 +144,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700">
|
<div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
|
||||||
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
|
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
|
||||||
<p>{{ __('admin.no_consultations') }}</p>
|
<p>{{ __('admin.no_consultations') }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ new class extends Component {
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="lg">{{ __('clients.convert_to_company') }}</flux:heading>
|
<flux:heading size="lg">{{ __('clients.convert_to_company') }}</flux:heading>
|
||||||
<flux:text class="mt-2 text-zinc-600 dark:text-zinc-400">
|
<flux:text class="mt-2 text-zinc-600">
|
||||||
{{ __('clients.convert_to_company_description') }}
|
{{ __('clients.convert_to_company_description') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -146,18 +146,18 @@ new class extends Component {
|
||||||
<flux:callout.text>{{ __('clients.confirm_conversion_to_company_message') }}</flux:callout.text>
|
<flux:callout.text>{{ __('clients.confirm_conversion_to_company_message') }}</flux:callout.text>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
<div class="rounded-lg border border-zinc-200 p-4 dark:border-zinc-700">
|
<div class="rounded-lg border border-zinc-200 p-4">
|
||||||
<div class="space-y-2 text-sm">
|
<div class="space-y-2 text-sm">
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.company_name') }}:</span>
|
<span class="text-zinc-500">{{ __('clients.company_name') }}:</span>
|
||||||
<span class="font-medium">{{ $company_name }}</span>
|
<span class="font-medium">{{ $company_name }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.registration_number') }}:</span>
|
<span class="text-zinc-500">{{ __('clients.registration_number') }}:</span>
|
||||||
<span class="font-medium">{{ $company_cert_number }}</span>
|
<span class="font-medium">{{ $company_cert_number }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.contact_person_name') }}:</span>
|
<span class="text-zinc-500">{{ __('clients.contact_person_name') }}:</span>
|
||||||
<span class="font-medium">{{ $contact_person_name }}</span>
|
<span class="font-medium">{{ $contact_person_name }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ new class extends Component {
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="lg">{{ __('clients.convert_to_individual') }}</flux:heading>
|
<flux:heading size="lg">{{ __('clients.convert_to_individual') }}</flux:heading>
|
||||||
<flux:text class="mt-2 text-zinc-600 dark:text-zinc-400">
|
<flux:text class="mt-2 text-zinc-600">
|
||||||
{{ __('clients.convert_to_individual_description') }}
|
{{ __('clients.convert_to_individual_description') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -132,14 +132,14 @@ new class extends Component {
|
||||||
<flux:callout.text>{{ __('clients.confirm_conversion_to_individual_message') }}</flux:callout.text>
|
<flux:callout.text>{{ __('clients.confirm_conversion_to_individual_message') }}</flux:callout.text>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
<div class="rounded-lg border border-zinc-200 p-4 dark:border-zinc-700">
|
<div class="rounded-lg border border-zinc-200 p-4">
|
||||||
<div class="space-y-2 text-sm">
|
<div class="space-y-2 text-sm">
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.full_name') }}:</span>
|
<span class="text-zinc-500">{{ __('clients.full_name') }}:</span>
|
||||||
<span class="font-medium">{{ $full_name }}</span>
|
<span class="font-medium">{{ $full_name }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.national_id') }}:</span>
|
<span class="text-zinc-500">{{ __('clients.national_id') }}:</span>
|
||||||
<span class="font-medium">{{ $national_id }}</span>
|
<span class="font-medium">{{ $national_id }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -80,10 +80,10 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<flux:heading size="xl">{{ __('clients.create_client') }}</flux:heading>
|
<flux:heading size="xl">{{ __('clients.create_client') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('clients.individual_clients') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ __('clients.individual_clients') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6">
|
||||||
<form wire:submit="create" class="space-y-6">
|
<form wire:submit="create" class="space-y-6">
|
||||||
<div class="grid gap-6 sm:grid-cols-2">
|
<div class="grid gap-6 sm:grid-cols-2">
|
||||||
<flux:field>
|
<flux:field>
|
||||||
|
|
@ -147,7 +147,7 @@ new class extends Component {
|
||||||
</flux:field>
|
</flux:field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
|
||||||
<flux:button variant="ghost" :href="route('admin.clients.individual.index')" wire:navigate>
|
<flux:button variant="ghost" :href="route('admin.clients.individual.index')" wire:navigate>
|
||||||
{{ __('clients.cancel') }}
|
{{ __('clients.cancel') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
|
||||||
|
|
@ -102,10 +102,10 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<flux:heading size="xl">{{ __('clients.edit_client') }}</flux:heading>
|
<flux:heading size="xl">{{ __('clients.edit_client') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ $client->full_name }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ $client->full_name }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6">
|
||||||
<form wire:submit="update" class="space-y-6">
|
<form wire:submit="update" class="space-y-6">
|
||||||
<div class="grid gap-6 sm:grid-cols-2">
|
<div class="grid gap-6 sm:grid-cols-2">
|
||||||
<flux:field>
|
<flux:field>
|
||||||
|
|
@ -181,7 +181,7 @@ new class extends Component {
|
||||||
</flux:field>
|
</flux:field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
|
||||||
<flux:button variant="ghost" :href="route('admin.clients.individual.index')" wire:navigate>
|
<flux:button variant="ghost" :href="route('admin.clients.individual.index')" wire:navigate>
|
||||||
{{ __('clients.cancel') }}
|
{{ __('clients.cancel') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ new class extends Component {
|
||||||
<div class="page-header mb-6">
|
<div class="page-header mb-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('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>
|
<flux:text class="mt-1 text-zinc-500">{{ __('clients.clients') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-actions">
|
<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">
|
<flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray" class="w-full sm:w-auto justify-center">
|
||||||
|
|
@ -67,7 +67,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-4 dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-4">
|
||||||
<div class="flex flex-col gap-4 sm:flex-row sm:items-end">
|
<div class="flex flex-col gap-4 sm:flex-row sm:items-end">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<flux:input
|
<flux:input
|
||||||
|
|
@ -101,50 +101,50 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="overflow-hidden rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="overflow-hidden rounded-lg border border-zinc-200 bg-white">
|
||||||
<div class="table-scroll-wrapper">
|
<div class="table-scroll-wrapper">
|
||||||
<table class="min-w-full divide-y divide-zinc-200 dark:divide-zinc-700">
|
<table class="min-w-full divide-y divide-zinc-200">
|
||||||
<thead class="bg-zinc-50 dark:bg-zinc-900">
|
<thead class="bg-zinc-50">
|
||||||
<tr>
|
<tr>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.full_name') }}
|
{{ __('clients.full_name') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.email') }}
|
{{ __('clients.email') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.national_id') }}
|
{{ __('clients.national_id') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.phone') }}
|
{{ __('clients.phone') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.status') }}
|
{{ __('clients.status') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.created_at') }}
|
{{ __('clients.created_at') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="px-6 py-3 text-end text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
|
<th class="px-6 py-3 text-end text-xs font-medium uppercase tracking-wider text-zinc-500">
|
||||||
{{ __('clients.actions') }}
|
{{ __('clients.actions') }}
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="divide-y divide-zinc-200 bg-white dark:divide-zinc-700 dark:bg-zinc-800">
|
<tbody class="divide-y divide-zinc-200 bg-white">
|
||||||
@forelse ($clients as $client)
|
@forelse ($clients as $client)
|
||||||
<tr wire:key="client-{{ $client->id }}">
|
<tr wire:key="client-{{ $client->id }}">
|
||||||
<td class="whitespace-nowrap px-6 py-4">
|
<td class="whitespace-nowrap px-6 py-4">
|
||||||
<div class="flex items-center gap-3">
|
<div class="flex items-center gap-3">
|
||||||
<flux:avatar size="sm" :name="$client->full_name" />
|
<flux:avatar size="sm" :name="$client->full_name" />
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $client->full_name }}</span>
|
<span class="font-medium text-zinc-900">{{ $client->full_name }}</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400">
|
<td class="whitespace-nowrap px-6 py-4 text-zinc-600">
|
||||||
{{ $client->email }}
|
{{ $client->email }}
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400">
|
<td class="whitespace-nowrap px-6 py-4 text-zinc-600">
|
||||||
{{ $client->national_id }}
|
{{ $client->national_id }}
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400">
|
<td class="whitespace-nowrap px-6 py-4 text-zinc-600">
|
||||||
{{ $client->phone }}
|
{{ $client->phone }}
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4">
|
<td class="whitespace-nowrap px-6 py-4">
|
||||||
|
|
@ -154,7 +154,7 @@ new class extends Component {
|
||||||
<flux:badge color="red" size="sm">{{ __('clients.deactivated') }}</flux:badge>
|
<flux:badge color="red" size="sm">{{ __('clients.deactivated') }}</flux:badge>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400">
|
<td class="whitespace-nowrap px-6 py-4 text-zinc-600">
|
||||||
{{ $client->created_at->format('Y-m-d') }}
|
{{ $client->created_at->format('Y-m-d') }}
|
||||||
</td>
|
</td>
|
||||||
<td class="whitespace-nowrap px-6 py-4 text-end">
|
<td class="whitespace-nowrap px-6 py-4 text-end">
|
||||||
|
|
@ -183,7 +183,7 @@ new class extends Component {
|
||||||
<td colspan="7" class="px-6 py-12 text-center">
|
<td colspan="7" class="px-6 py-12 text-center">
|
||||||
<div class="flex flex-col items-center">
|
<div class="flex flex-col items-center">
|
||||||
<flux:icon name="users" class="mb-4 h-12 w-12 text-zinc-400" />
|
<flux:icon name="users" class="mb-4 h-12 w-12 text-zinc-400" />
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-zinc-500">
|
||||||
@if ($search || $statusFilter)
|
@if ($search || $statusFilter)
|
||||||
{{ __('clients.no_clients_match') }}
|
{{ __('clients.no_clients_match') }}
|
||||||
@else
|
@else
|
||||||
|
|
@ -204,7 +204,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($clients->hasPages())
|
@if ($clients->hasPages())
|
||||||
<div class="border-t border-zinc-200 bg-zinc-50 px-6 py-4 dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="border-t border-zinc-200 bg-zinc-50 px-6 py-4">
|
||||||
{{ $clients->links() }}
|
{{ $clients->links() }}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ new class extends Component {
|
||||||
</flux:button>
|
</flux:button>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap gap-2">
|
<div class="flex flex-wrap gap-2">
|
||||||
<flux:button variant="ghost" class="border border-amber-500 text-amber-600 hover:bg-amber-50 dark:text-amber-400 dark:hover:bg-amber-900/20" x-data x-on:click="$flux.modal('convert-to-company').show()" icon="building-office">
|
<flux:button variant="ghost" class="border border-amber-500 text-amber-600 hover:bg-amber-50" x-data x-on:click="$flux.modal('convert-to-company').show()" icon="building-office">
|
||||||
{{ __('clients.convert_to_company') }}
|
{{ __('clients.convert_to_company') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
<flux:button variant="primary" :href="route('admin.clients.individual.edit', $client)" wire:navigate icon="pencil">
|
<flux:button variant="primary" :href="route('admin.clients.individual.edit', $client)" wire:navigate icon="pencil">
|
||||||
|
|
@ -40,14 +40,14 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<flux:heading size="xl">{{ __('clients.client_profile') }}</flux:heading>
|
<flux:heading size="xl">{{ __('clients.client_profile') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ $client->full_name }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ $client->full_name }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid gap-6 lg:grid-cols-3">
|
<div class="grid gap-6 lg:grid-cols-3">
|
||||||
{{-- Client Information --}}
|
{{-- Client Information --}}
|
||||||
<div class="lg:col-span-2">
|
<div class="lg:col-span-2">
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="rounded-lg border border-zinc-200 bg-white">
|
||||||
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700">
|
<div class="border-b border-zinc-200 px-6 py-4">
|
||||||
<flux:heading size="lg">{{ __('clients.client_information') }}</flux:heading>
|
<flux:heading size="lg">{{ __('clients.client_information') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
|
|
@ -56,29 +56,29 @@ new class extends Component {
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="grid gap-6 sm:grid-cols-2">
|
<div class="grid gap-6 sm:grid-cols-2">
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.full_name') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.full_name') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->full_name }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->full_name }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.national_id') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.national_id') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->national_id }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->national_id }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.email') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.email') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->email }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->email }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.phone') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.phone') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->phone }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->phone }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.preferred_language') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.preferred_language') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">
|
<flux:text class="mt-1 text-zinc-900">
|
||||||
{{ $client->preferred_language === 'ar' ? __('clients.arabic') : __('clients.english') }}
|
{{ $client->preferred_language === 'ar' ? __('clients.arabic') : __('clients.english') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.status') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.status') }}</flux:text>
|
||||||
<div class="mt-1">
|
<div class="mt-1">
|
||||||
@if ($client->status === UserStatus::Active)
|
@if ($client->status === UserStatus::Active)
|
||||||
<flux:badge color="green">{{ __('clients.active') }}</flux:badge>
|
<flux:badge color="green">{{ __('clients.active') }}</flux:badge>
|
||||||
|
|
@ -88,12 +88,12 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.member_since') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.member_since') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->created_at->format('Y-m-d') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ $client->created_at->format('Y-m-d') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.user_type') }}</flux:text>
|
<flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.user_type') }}</flux:text>
|
||||||
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ __('clients.individual') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-900">{{ __('clients.individual') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -105,34 +105,34 @@ new class extends Component {
|
||||||
{{-- Stats Sidebar --}}
|
{{-- Stats Sidebar --}}
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
{{-- Consultation Summary --}}
|
{{-- Consultation Summary --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="rounded-lg border border-zinc-200 bg-white">
|
||||||
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700">
|
<div class="border-b border-zinc-200 px-6 py-4">
|
||||||
<flux:heading size="lg">{{ __('clients.consultation_history') }}</flux:heading>
|
<flux:heading size="lg">{{ __('clients.consultation_history') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.total_consultations') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.total_consultations') }}</flux:text>
|
||||||
<flux:badge color="zinc">{{ $client->consultations_count }}</flux:badge>
|
<flux:badge color="zinc">{{ $client->consultations_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.pending_consultations') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.pending_consultations') }}</flux:text>
|
||||||
<flux:badge color="yellow">{{ $client->pending_consultations_count }}</flux:badge>
|
<flux:badge color="yellow">{{ $client->pending_consultations_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.completed_consultations') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.completed_consultations') }}</flux:text>
|
||||||
<flux:badge color="green">{{ $client->completed_consultations_count }}</flux:badge>
|
<flux:badge color="green">{{ $client->completed_consultations_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@if ($client->consultations_count > 0)
|
@if ($client->consultations_count > 0)
|
||||||
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700">
|
<div class="mt-4 border-t border-zinc-200 pt-4">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-sm text-zinc-500">
|
||||||
{{ __('clients.view_all_consultations') }}
|
{{ __('clients.view_all_consultations') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700">
|
<div class="mt-4 border-t border-zinc-200 pt-4">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-sm text-zinc-500">
|
||||||
{{ __('clients.no_consultations') }}
|
{{ __('clients.no_consultations') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -141,30 +141,30 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Timeline Summary --}}
|
{{-- Timeline Summary --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="rounded-lg border border-zinc-200 bg-white">
|
||||||
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700">
|
<div class="border-b border-zinc-200 px-6 py-4">
|
||||||
<flux:heading size="lg">{{ __('clients.timeline_history') }}</flux:heading>
|
<flux:heading size="lg">{{ __('clients.timeline_history') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.total_timelines') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.total_timelines') }}</flux:text>
|
||||||
<flux:badge color="zinc">{{ $client->timelines_count }}</flux:badge>
|
<flux:badge color="zinc">{{ $client->timelines_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.active_timelines') }}</flux:text>
|
<flux:text class="text-sm text-zinc-500">{{ __('clients.active_timelines') }}</flux:text>
|
||||||
<flux:badge color="blue">{{ $client->active_timelines_count }}</flux:badge>
|
<flux:badge color="blue">{{ $client->active_timelines_count }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@if ($client->timelines_count > 0)
|
@if ($client->timelines_count > 0)
|
||||||
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700">
|
<div class="mt-4 border-t border-zinc-200 pt-4">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-sm text-zinc-500">
|
||||||
{{ __('clients.view_all_timelines') }}
|
{{ __('clients.view_all_timelines') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700">
|
<div class="mt-4 border-t border-zinc-200 pt-4">
|
||||||
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="text-sm text-zinc-500">
|
||||||
{{ __('clients.no_timelines') }}
|
{{ __('clients.no_timelines') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -175,7 +175,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Lifecycle Actions Section --}}
|
{{-- Lifecycle Actions Section --}}
|
||||||
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('clients.account_actions') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('clients.account_actions') }}</flux:heading>
|
||||||
<livewire:admin.clients.lifecycle-actions :client="$client" />
|
<livewire:admin.clients.lifecycle-actions :client="$client" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -220,11 +220,11 @@ new class extends Component {
|
||||||
|
|
||||||
{{-- Deactivate/Reactivate Button --}}
|
{{-- Deactivate/Reactivate Button --}}
|
||||||
@if ($client->isActive())
|
@if ($client->isActive())
|
||||||
<flux:button variant="ghost" class="text-amber-600 hover:bg-amber-50 dark:text-amber-400 dark:hover:bg-amber-900/20" icon="pause-circle" wire:click="openDeactivateModal">
|
<flux:button variant="ghost" class="text-amber-600 hover:bg-amber-50" icon="pause-circle" wire:click="openDeactivateModal">
|
||||||
{{ __('clients.deactivate') }}
|
{{ __('clients.deactivate') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
@else
|
@else
|
||||||
<flux:button variant="ghost" class="text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20" icon="play-circle" wire:click="openReactivateModal">
|
<flux:button variant="ghost" class="text-green-600 hover:bg-green-50" icon="play-circle" wire:click="openReactivateModal">
|
||||||
{{ __('clients.reactivate') }}
|
{{ __('clients.reactivate') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
@endif
|
@endif
|
||||||
|
|
@ -246,7 +246,7 @@ new class extends Component {
|
||||||
<flux:callout.text>{{ __('clients.deactivate_warning') }}</flux:callout.text>
|
<flux:callout.text>{{ __('clients.deactivate_warning') }}</flux:callout.text>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
<div class="text-sm text-zinc-600 dark:text-zinc-400">
|
<div class="text-sm text-zinc-600">
|
||||||
<p class="mb-2">{{ __('clients.deactivate_effects') }}:</p>
|
<p class="mb-2">{{ __('clients.deactivate_effects') }}:</p>
|
||||||
<ul class="list-disc ps-5 space-y-1">
|
<ul class="list-disc ps-5 space-y-1">
|
||||||
<li>{{ __('clients.deactivate_effect_login') }}</li>
|
<li>{{ __('clients.deactivate_effect_login') }}</li>
|
||||||
|
|
@ -278,7 +278,7 @@ new class extends Component {
|
||||||
<flux:callout.text>{{ __('clients.reactivate_message') }}</flux:callout.text>
|
<flux:callout.text>{{ __('clients.reactivate_message') }}</flux:callout.text>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
<div class="text-sm text-zinc-600 dark:text-zinc-400">
|
<div class="text-sm text-zinc-600">
|
||||||
<p class="mb-2">{{ __('clients.reactivate_effects') }}:</p>
|
<p class="mb-2">{{ __('clients.reactivate_effects') }}:</p>
|
||||||
<ul class="list-disc ps-5 space-y-1">
|
<ul class="list-disc ps-5 space-y-1">
|
||||||
<li>{{ __('clients.reactivate_effect_login') }}</li>
|
<li>{{ __('clients.reactivate_effect_login') }}</li>
|
||||||
|
|
@ -310,7 +310,7 @@ new class extends Component {
|
||||||
<flux:callout.text>{{ __('clients.delete_warning') }}</flux:callout.text>
|
<flux:callout.text>{{ __('clients.delete_warning') }}</flux:callout.text>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
<div class="text-sm text-zinc-600 dark:text-zinc-400">
|
<div class="text-sm text-zinc-600">
|
||||||
<p class="mb-2">{{ __('clients.will_be_deleted') }}:</p>
|
<p class="mb-2">{{ __('clients.will_be_deleted') }}:</p>
|
||||||
<ul class="list-disc ps-5 space-y-1">
|
<ul class="list-disc ps-5 space-y-1">
|
||||||
<li>{{ __('clients.delete_item_consultations') }}</li>
|
<li>{{ __('clients.delete_item_consultations') }}</li>
|
||||||
|
|
@ -348,7 +348,7 @@ new class extends Component {
|
||||||
<flux:callout.text>{{ __('clients.reset_password_message') }}</flux:callout.text>
|
<flux:callout.text>{{ __('clients.reset_password_message') }}</flux:callout.text>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
<div class="text-sm text-zinc-600 dark:text-zinc-400">
|
<div class="text-sm text-zinc-600">
|
||||||
<p class="mb-2">{{ __('clients.reset_password_effects') }}:</p>
|
<p class="mb-2">{{ __('clients.reset_password_effects') }}:</p>
|
||||||
<ul class="list-disc ps-5 space-y-1">
|
<ul class="list-disc ps-5 space-y-1">
|
||||||
<li>{{ __('clients.reset_password_effect_generate') }}</li>
|
<li>{{ __('clients.reset_password_effect_generate') }}</li>
|
||||||
|
|
|
||||||
|
|
@ -185,11 +185,11 @@ new class extends Component {
|
||||||
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('export.export_consultations') }}</flux:heading>
|
<flux:heading size="xl">{{ __('export.export_consultations') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('export.export_consultations_description') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ __('export.export_consultations_description') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-5">
|
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-5">
|
||||||
|
|
@ -243,11 +243,11 @@ new class extends Component {
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6">
|
||||||
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
|
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">
|
<flux:text class="text-zinc-600">
|
||||||
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900 dark:text-zinc-100">{{ $previewCount }}</span>
|
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900">{{ $previewCount }}</span>
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -279,9 +279,9 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($previewCount === 0)
|
@if ($previewCount === 0)
|
||||||
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center dark:bg-zinc-900">
|
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center">
|
||||||
<flux:icon name="calendar" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
|
<flux:icon name="calendar" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('export.no_consultations_match') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('export.no_consultations_match') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,7 @@ new class extends Component
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('admin.consultations') }}</flux:heading>
|
<flux:heading size="xl">{{ __('admin.consultations') }}</flux:heading>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ __('admin.consultations_description') }}</p>
|
<p class="text-sm text-zinc-500 mt-1">{{ __('admin.consultations_description') }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -223,7 +223,7 @@ new class extends Component
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<!-- Filters -->
|
<!-- Filters -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
|
||||||
<flux:field>
|
<flux:field>
|
||||||
<flux:input
|
<flux:input
|
||||||
|
|
@ -290,15 +290,15 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Sort Headers -->
|
<!-- Sort Headers -->
|
||||||
<div class="hidden lg:flex bg-zinc-100 dark:bg-zinc-700 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 dark:text-zinc-300 gap-4 mb-0">
|
<div class="hidden lg:flex bg-zinc-100 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 gap-4 mb-0">
|
||||||
<button wire:click="sort('booking_date')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('booking_date')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
|
||||||
{{ __('admin.date') }}
|
{{ __('admin.date') }}
|
||||||
@if($sortBy === 'booking_date')
|
@if($sortBy === 'booking_date')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
@endif
|
@endif
|
||||||
</button>
|
</button>
|
||||||
<span class="flex-1">{{ __('admin.client') }}</span>
|
<span class="flex-1">{{ __('admin.client') }}</span>
|
||||||
<button wire:click="sort('status')" class="flex items-center gap-1 w-24 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('status')" class="flex items-center gap-1 w-24 hover:text-zinc-900">
|
||||||
{{ __('admin.current_status') }}
|
{{ __('admin.current_status') }}
|
||||||
@if($sortBy === 'status')
|
@if($sortBy === 'status')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
|
|
@ -311,14 +311,14 @@ new class extends Component
|
||||||
<!-- Consultations List -->
|
<!-- Consultations List -->
|
||||||
<div class="space-y-0">
|
<div class="space-y-0">
|
||||||
@forelse($consultations as $consultation)
|
@forelse($consultations as $consultation)
|
||||||
<div wire:key="consultation-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 p-4 border border-zinc-200 dark:border-zinc-700 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
|
<div wire:key="consultation-{{ $consultation->id }}" class="bg-white p-4 border border-zinc-200 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
|
||||||
<div class="flex flex-col lg:flex-row lg:items-center gap-4">
|
<div class="flex flex-col lg:flex-row lg:items-center gap-4">
|
||||||
<!-- Date/Time -->
|
<!-- Date/Time -->
|
||||||
<div class="lg:w-32">
|
<div class="lg:w-32">
|
||||||
<div class="text-sm font-medium text-zinc-900 dark:text-zinc-100">
|
<div class="text-sm font-medium text-zinc-900">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('d M Y') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('d M Y') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-xs text-zinc-500 dark:text-zinc-400">
|
<div class="text-xs text-zinc-500">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -326,14 +326,14 @@ new class extends Component
|
||||||
<!-- Client Info -->
|
<!-- Client Info -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="flex items-center gap-2 mb-1">
|
<div class="flex items-center gap-2 mb-1">
|
||||||
<a href="{{ route('admin.consultations.show', $consultation) }}" class="font-semibold text-zinc-900 dark:text-zinc-100 hover:text-blue-600 dark:hover:text-blue-400" wire:navigate>
|
<a href="{{ route('admin.consultations.show', $consultation) }}" class="font-semibold text-zinc-900 hover:text-blue-600" wire:navigate>
|
||||||
{{ $consultation->user?->full_name ?? __('common.unknown') }}
|
{{ $consultation->user?->full_name ?? __('common.unknown') }}
|
||||||
</a>
|
</a>
|
||||||
<flux:badge size="sm" variant="{{ $consultation->consultation_type === \App\Enums\ConsultationType::Paid ? 'primary' : 'outline' }}">
|
<flux:badge size="sm" variant="{{ $consultation->consultation_type === \App\Enums\ConsultationType::Paid ? 'primary' : 'outline' }}">
|
||||||
{{ $consultation->consultation_type->label() }}
|
{{ $consultation->consultation_type->label() }}
|
||||||
</flux:badge>
|
</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="text-sm text-zinc-500">
|
||||||
{{ $consultation->user?->email ?? '-' }}
|
{{ $consultation->user?->email ?? '-' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -444,7 +444,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700">
|
<div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
|
||||||
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
|
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
|
||||||
<p>{{ __('admin.no_consultations') }}</p>
|
<p>{{ __('admin.no_consultations') }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -350,24 +350,24 @@ new class extends Component
|
||||||
<!-- Main Details -->
|
<!-- Main Details -->
|
||||||
<div class="lg:col-span-2 space-y-6">
|
<div class="lg:col-span-2 space-y-6">
|
||||||
<!-- Booking Info -->
|
<!-- Booking Info -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('admin.booking_details') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('admin.booking_details') }}</flux:heading>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.requested_date') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.requested_date') }}</dt>
|
||||||
<dd class="text-zinc-900 dark:text-zinc-100 font-medium">
|
<dd class="text-zinc-900 font-medium">
|
||||||
{{ $consultation->booking_date->translatedFormat('l, d M Y') }}
|
{{ $consultation->booking_date->translatedFormat('l, d M Y') }}
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.requested_time') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.requested_time') }}</dt>
|
||||||
<dd class="text-zinc-900 dark:text-zinc-100 font-medium">
|
<dd class="text-zinc-900 font-medium">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.current_status') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.current_status') }}</dt>
|
||||||
<dd>
|
<dd>
|
||||||
@php
|
@php
|
||||||
$statusVariant = match($consultation->status) {
|
$statusVariant = match($consultation->status) {
|
||||||
|
|
@ -385,7 +385,7 @@ new class extends Component
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.consultation_type') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.consultation_type') }}</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<flux:badge variant="{{ $consultation->consultation_type === \App\Enums\ConsultationType::Paid ? 'primary' : 'outline' }}">
|
<flux:badge variant="{{ $consultation->consultation_type === \App\Enums\ConsultationType::Paid ? 'primary' : 'outline' }}">
|
||||||
{{ $consultation->consultation_type->label() }}
|
{{ $consultation->consultation_type->label() }}
|
||||||
|
|
@ -395,16 +395,16 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if($consultation->problem_summary)
|
@if($consultation->problem_summary)
|
||||||
<div class="mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-700">
|
<div class="mt-4 pt-4 border-t border-zinc-200">
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400 mb-2">{{ __('admin.problem_summary') }}</dt>
|
<dt class="text-sm text-zinc-500 mb-2">{{ __('admin.problem_summary') }}</dt>
|
||||||
<dd class="text-zinc-900 dark:text-zinc-100">{{ $consultation->problem_summary }}</dd>
|
<dd class="text-zinc-900">{{ $consultation->problem_summary }}</dd>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Payment Info (for paid consultations) -->
|
<!-- Payment Info (for paid consultations) -->
|
||||||
@if($consultation->consultation_type === \App\Enums\ConsultationType::Paid)
|
@if($consultation->consultation_type === \App\Enums\ConsultationType::Paid)
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200">
|
||||||
<div class="flex justify-between items-center mb-4">
|
<div class="flex justify-between items-center mb-4">
|
||||||
<flux:heading size="lg">{{ __('admin.payment_details') }}</flux:heading>
|
<flux:heading size="lg">{{ __('admin.payment_details') }}</flux:heading>
|
||||||
@if($consultation->payment_status === \App\Enums\PaymentStatus::Pending)
|
@if($consultation->payment_status === \App\Enums\PaymentStatus::Pending)
|
||||||
|
|
@ -421,13 +421,13 @@ new class extends Component
|
||||||
|
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.payment_amount') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.payment_amount') }}</dt>
|
||||||
<dd class="text-zinc-900 dark:text-zinc-100 font-medium">
|
<dd class="text-zinc-900 font-medium">
|
||||||
{{ number_format($consultation->payment_amount, 2) }} {{ __('common.currency') }}
|
{{ number_format($consultation->payment_amount, 2) }} {{ __('common.currency') }}
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.payment_status') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.payment_status') }}</dt>
|
||||||
<dd>
|
<dd>
|
||||||
@php
|
@php
|
||||||
$paymentVariant = match($consultation->payment_status) {
|
$paymentVariant = match($consultation->payment_status) {
|
||||||
|
|
@ -443,8 +443,8 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
@if($consultation->payment_received_at)
|
@if($consultation->payment_received_at)
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.payment_received_at') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.payment_received_at') }}</dt>
|
||||||
<dd class="text-zinc-900 dark:text-zinc-100">
|
<dd class="text-zinc-900">
|
||||||
{{ $consultation->payment_received_at->translatedFormat('d M Y, g:i A') }}
|
{{ $consultation->payment_received_at->translatedFormat('d M Y, g:i A') }}
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -454,7 +454,7 @@ new class extends Component
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<!-- Admin Notes -->
|
<!-- Admin Notes -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('admin.admin_notes') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('admin.admin_notes') }}</flux:heading>
|
||||||
|
|
||||||
<!-- Add Note Form -->
|
<!-- Add Note Form -->
|
||||||
|
|
@ -479,7 +479,7 @@ new class extends Component
|
||||||
<!-- Notes List -->
|
<!-- Notes List -->
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
@forelse($consultation->admin_notes ?? [] as $index => $note)
|
@forelse($consultation->admin_notes ?? [] as $index => $note)
|
||||||
<div wire:key="note-{{ $index }}" class="p-4 bg-zinc-50 dark:bg-zinc-700/50 rounded-lg">
|
<div wire:key="note-{{ $index }}" class="p-4 bg-zinc-50 rounded-lg">
|
||||||
@if($editingNoteIndex === $index)
|
@if($editingNoteIndex === $index)
|
||||||
<flux:field>
|
<flux:field>
|
||||||
<flux:textarea
|
<flux:textarea
|
||||||
|
|
@ -499,8 +499,8 @@ new class extends Component
|
||||||
</flux:button>
|
</flux:button>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<p class="text-zinc-900 dark:text-zinc-100 mb-2">{{ $note['text'] }}</p>
|
<p class="text-zinc-900 mb-2">{{ $note['text'] }}</p>
|
||||||
<div class="flex justify-between items-center text-xs text-zinc-500 dark:text-zinc-400">
|
<div class="flex justify-between items-center text-xs text-zinc-500">
|
||||||
<span>
|
<span>
|
||||||
{{ __('admin.added_by') }}: {{ $adminUsers[$note['admin_id']] ?? __('common.unknown') }}
|
{{ __('admin.added_by') }}: {{ $adminUsers[$note['admin_id']] ?? __('common.unknown') }}
|
||||||
@if(isset($note['updated_at']))
|
@if(isset($note['updated_at']))
|
||||||
|
|
@ -525,7 +525,7 @@ new class extends Component
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<p class="text-zinc-500 dark:text-zinc-400 text-center py-4">{{ __('admin.no_notes') }}</p>
|
<p class="text-zinc-500 text-center py-4">{{ __('admin.no_notes') }}</p>
|
||||||
@endforelse
|
@endforelse
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -534,30 +534,30 @@ new class extends Component
|
||||||
<!-- Sidebar -->
|
<!-- Sidebar -->
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<!-- Client Info -->
|
<!-- Client Info -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('admin.client_information') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('admin.client_information') }}</flux:heading>
|
||||||
|
|
||||||
@if($consultation->user)
|
@if($consultation->user)
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_name') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.client_name') }}</dt>
|
||||||
<dd class="text-zinc-900 dark:text-zinc-100 font-medium">
|
<dd class="text-zinc-900 font-medium">
|
||||||
{{ $consultation->user->full_name }}
|
{{ $consultation->user->full_name }}
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_email') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.client_email') }}</dt>
|
||||||
<dd class="text-zinc-900 dark:text-zinc-100">{{ $consultation->user->email }}</dd>
|
<dd class="text-zinc-900">{{ $consultation->user->email }}</dd>
|
||||||
</div>
|
</div>
|
||||||
@if($consultation->user->phone)
|
@if($consultation->user->phone)
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_phone') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('admin.client_phone') }}</dt>
|
||||||
<dd class="text-zinc-900 dark:text-zinc-100">{{ $consultation->user->phone }}</dd>
|
<dd class="text-zinc-900">{{ $consultation->user->phone }}</dd>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-700">
|
<div class="mt-4 pt-4 border-t border-zinc-200">
|
||||||
<flux:button
|
<flux:button
|
||||||
href="{{ route('admin.clients.consultation-history', $consultation->user) }}"
|
href="{{ route('admin.clients.consultation-history', $consultation->user) }}"
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
|
|
@ -569,13 +569,13 @@ new class extends Component
|
||||||
</flux:button>
|
</flux:button>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<p class="text-zinc-500 dark:text-zinc-400">{{ __('messages.client_account_not_found') }}</p>
|
<p class="text-zinc-500">{{ __('messages.client_account_not_found') }}</p>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Status Actions -->
|
<!-- Status Actions -->
|
||||||
@if($consultation->status === \App\Enums\ConsultationStatus::Approved)
|
@if($consultation->status === \App\Enums\ConsultationStatus::Approved)
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading>
|
||||||
|
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
|
|
@ -613,7 +613,7 @@ new class extends Component
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@if($consultation->status === \App\Enums\ConsultationStatus::Pending)
|
@if($consultation->status === \App\Enums\ConsultationStatus::Pending)
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading>
|
||||||
|
|
||||||
<flux:button
|
<flux:button
|
||||||
|
|
@ -635,9 +635,9 @@ new class extends Component
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('admin.reschedule_consultation') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('admin.reschedule_consultation') }}</flux:heading>
|
||||||
|
|
||||||
<div class="mb-4 p-4 bg-zinc-50 dark:bg-zinc-700/50 rounded-lg">
|
<div class="mb-4 p-4 bg-zinc-50 rounded-lg">
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400 mb-1">{{ __('admin.current_schedule') }}</p>
|
<p class="text-sm text-zinc-500 mb-1">{{ __('admin.current_schedule') }}</p>
|
||||||
<p class="text-zinc-900 dark:text-zinc-100 font-medium">
|
<p class="text-zinc-900 font-medium">
|
||||||
{{ $consultation->booking_date->translatedFormat('l, d M Y') }}
|
{{ $consultation->booking_date->translatedFormat('l, d M Y') }}
|
||||||
{{ __('admin.to') }}
|
{{ __('admin.to') }}
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
|
|
@ -663,7 +663,7 @@ new class extends Component
|
||||||
@endforeach
|
@endforeach
|
||||||
</flux:select>
|
</flux:select>
|
||||||
@else
|
@else
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.no_slots_available') }}</p>
|
<p class="text-sm text-zinc-500">{{ __('admin.no_slots_available') }}</p>
|
||||||
@endif
|
@endif
|
||||||
@error('newTime')
|
@error('newTime')
|
||||||
<flux:error>{{ $message }}</flux:error>
|
<flux:error>{{ $message }}</flux:error>
|
||||||
|
|
|
||||||
|
|
@ -187,106 +187,106 @@ new class extends Component
|
||||||
<div>
|
<div>
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('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>
|
<flux:text class="mt-1 text-zinc-500">{{ __('admin_metrics.subtitle') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stats-grid">
|
<div class="stats-grid">
|
||||||
{{-- User Metrics Card --}}
|
{{-- 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="rounded-lg border border-zinc-200 bg-white p-6">
|
||||||
<div class="mb-4 flex items-center gap-3">
|
<div class="mb-4 flex items-center gap-3">
|
||||||
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white dark:bg-[#D4AF37] dark:text-zinc-900">
|
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white">
|
||||||
<flux:icon name="users" class="h-5 w-5" />
|
<flux:icon name="users" class="h-5 w-5" />
|
||||||
</div>
|
</div>
|
||||||
<flux:heading size="lg">{{ __('admin_metrics.clients') }}</flux:heading>
|
<flux:heading size="lg">{{ __('admin_metrics.clients') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.total_active') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.total_active') }}</flux:text>
|
||||||
<span class="text-xl font-semibold text-zinc-900 dark:text-zinc-100">{{ $userMetrics['total_active'] }}</span>
|
<span class="text-xl font-semibold text-zinc-900">{{ $userMetrics['total_active'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.individual') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.individual') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $userMetrics['individual'] }}</span>
|
<span class="font-medium text-zinc-700">{{ $userMetrics['individual'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.company') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.company') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $userMetrics['company'] }}</span>
|
<span class="font-medium text-zinc-700">{{ $userMetrics['company'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="border-t border-zinc-200 pt-3 dark:border-zinc-700">
|
<div class="border-t border-zinc-200 pt-3">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.deactivated') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.deactivated') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ $userMetrics['deactivated'] }}</span>
|
<span class="font-medium text-zinc-500">{{ $userMetrics['deactivated'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.new_this_month') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.new_this_month') }}</flux:text>
|
||||||
<flux:badge color="lime" size="sm">{{ $userMetrics['new_this_month'] }}</flux:badge>
|
<flux:badge color="lime" size="sm">{{ $userMetrics['new_this_month'] }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Booking Metrics Card --}}
|
{{-- Booking Metrics Card --}}
|
||||||
<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-6">
|
||||||
<div class="mb-4 flex items-center gap-3">
|
<div class="mb-4 flex items-center gap-3">
|
||||||
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white dark:bg-[#D4AF37] dark:text-zinc-900">
|
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white">
|
||||||
<flux:icon name="calendar" class="h-5 w-5" />
|
<flux:icon name="calendar" class="h-5 w-5" />
|
||||||
</div>
|
</div>
|
||||||
<flux:heading size="lg">{{ __('admin_metrics.consultations') }}</flux:heading>
|
<flux:heading size="lg">{{ __('admin_metrics.consultations') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.pending_requests') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.pending_requests') }}</flux:text>
|
||||||
<flux:badge color="amber" size="sm">{{ $bookingMetrics['pending'] }}</flux:badge>
|
<flux:badge color="amber" size="sm">{{ $bookingMetrics['pending'] }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.today') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.today') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['today'] }}</span>
|
<span class="font-medium text-zinc-700">{{ $bookingMetrics['today'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.this_week') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.this_week') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['this_week'] }}</span>
|
<span class="font-medium text-zinc-700">{{ $bookingMetrics['this_week'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.this_month') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.this_month') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['this_month'] }}</span>
|
<span class="font-medium text-zinc-700">{{ $bookingMetrics['this_month'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="border-t border-zinc-200 pt-3 dark:border-zinc-700">
|
<div class="border-t border-zinc-200 pt-3">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.free') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.free') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['free'] }}</span>
|
<span class="font-medium text-zinc-700">{{ $bookingMetrics['free'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 flex items-center justify-between">
|
<div class="mt-2 flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.paid') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.paid') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['paid'] }}</span>
|
<span class="font-medium text-zinc-700">{{ $bookingMetrics['paid'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.no_show_rate') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.no_show_rate') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['no_show_rate'] }}%</span>
|
<span class="font-medium text-zinc-700">{{ $bookingMetrics['no_show_rate'] }}%</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Timeline Metrics Card --}}
|
{{-- Timeline Metrics Card --}}
|
||||||
<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-6">
|
||||||
<div class="mb-4 flex items-center gap-3">
|
<div class="mb-4 flex items-center gap-3">
|
||||||
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white dark:bg-[#D4AF37] dark:text-zinc-900">
|
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white">
|
||||||
<flux:icon name="clipboard-document-list" class="h-5 w-5" />
|
<flux:icon name="clipboard-document-list" class="h-5 w-5" />
|
||||||
</div>
|
</div>
|
||||||
<flux:heading size="lg">{{ __('admin_metrics.timelines') }}</flux:heading>
|
<flux:heading size="lg">{{ __('admin_metrics.timelines') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.active_cases') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.active_cases') }}</flux:text>
|
||||||
<span class="text-xl font-semibold text-zinc-900 dark:text-zinc-100">{{ $timelineMetrics['active'] }}</span>
|
<span class="text-xl font-semibold text-zinc-900">{{ $timelineMetrics['active'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.archived') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.archived') }}</flux:text>
|
||||||
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ $timelineMetrics['archived'] }}</span>
|
<span class="font-medium text-zinc-500">{{ $timelineMetrics['archived'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="border-t border-zinc-200 pt-3 dark:border-zinc-700">
|
<div class="border-t border-zinc-200 pt-3">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.updates_this_week') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.updates_this_week') }}</flux:text>
|
||||||
<flux:badge color="lime" size="sm">{{ $timelineMetrics['updates_this_week'] }}</flux:badge>
|
<flux:badge color="lime" size="sm">{{ $timelineMetrics['updates_this_week'] }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -294,21 +294,21 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Posts Metrics Card --}}
|
{{-- Posts Metrics Card --}}
|
||||||
<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-6">
|
||||||
<div class="mb-4 flex items-center gap-3">
|
<div class="mb-4 flex items-center gap-3">
|
||||||
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white dark:bg-[#D4AF37] dark:text-zinc-900">
|
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white">
|
||||||
<flux:icon name="document-text" class="h-5 w-5" />
|
<flux:icon name="document-text" class="h-5 w-5" />
|
||||||
</div>
|
</div>
|
||||||
<flux:heading size="lg">{{ __('admin_metrics.posts') }}</flux:heading>
|
<flux:heading size="lg">{{ __('admin_metrics.posts') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.total_published') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.total_published') }}</flux:text>
|
||||||
<span class="text-xl font-semibold text-zinc-900 dark:text-zinc-100">{{ $postMetrics['total_published'] }}</span>
|
<span class="text-xl font-semibold text-zinc-900">{{ $postMetrics['total_published'] }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="border-t border-zinc-200 pt-3 dark:border-zinc-700">
|
<div class="border-t border-zinc-200 pt-3">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.published_this_month') }}</flux:text>
|
<flux:text class="text-zinc-600">{{ __('admin_metrics.published_this_month') }}</flux:text>
|
||||||
<flux:badge color="lime" size="sm">{{ $postMetrics['this_month'] }}</flux:badge>
|
<flux:badge color="lime" size="sm">{{ $postMetrics['this_month'] }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -373,11 +373,11 @@ new class extends Component
|
||||||
|
|
||||||
<div class="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
<div class="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
||||||
{{-- Monthly Trends Chart --}}
|
{{-- Monthly Trends Chart --}}
|
||||||
<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-6">
|
||||||
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.monthly_trends') }}</flux:heading>
|
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.monthly_trends') }}</flux:heading>
|
||||||
@if (array_sum($chartData['newClients']) === 0 && array_sum($chartData['consultations']) === 0)
|
@if (array_sum($chartData['newClients']) === 0 && array_sum($chartData['consultations']) === 0)
|
||||||
<div class="flex h-64 items-center justify-center">
|
<div class="flex h-64 items-center justify-center">
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('admin_metrics.no_data_available') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('admin_metrics.no_data_available') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div
|
<div
|
||||||
|
|
@ -441,11 +441,11 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Consultation Breakdown Chart --}}
|
{{-- Consultation Breakdown Chart --}}
|
||||||
<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-6">
|
||||||
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.consultation_breakdown') }}</flux:heading>
|
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.consultation_breakdown') }}</flux:heading>
|
||||||
@if ($chartData['consultationBreakdown']['free'] === 0 && $chartData['consultationBreakdown']['paid'] === 0)
|
@if ($chartData['consultationBreakdown']['free'] === 0 && $chartData['consultationBreakdown']['paid'] === 0)
|
||||||
<div class="flex h-64 items-center justify-center">
|
<div class="flex h-64 items-center justify-center">
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('admin_metrics.no_data_available') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('admin_metrics.no_data_available') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div
|
<div
|
||||||
|
|
@ -502,11 +502,11 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- No-show Rate Chart --}}
|
{{-- No-show Rate Chart --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800 lg:col-span-2">
|
<div class="rounded-lg border border-zinc-200 bg-white p-6 lg:col-span-2">
|
||||||
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.noshow_rate_trend') }}</flux:heading>
|
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.noshow_rate_trend') }}</flux:heading>
|
||||||
@if (array_sum($chartData['noShowRates']) === 0)
|
@if (array_sum($chartData['noShowRates']) === 0)
|
||||||
<div class="flex h-64 items-center justify-center">
|
<div class="flex h-64 items-center justify-center">
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('admin_metrics.no_data_available') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('admin_metrics.no_data_available') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div
|
<div
|
||||||
|
|
@ -595,22 +595,22 @@ new class extends Component
|
||||||
|
|
||||||
<div class="widget-grid">
|
<div class="widget-grid">
|
||||||
{{-- Quick Actions Panel --}}
|
{{-- Quick Actions Panel --}}
|
||||||
<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">
|
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 lg:col-span-3">
|
||||||
<livewire:admin.widgets.quick-actions />
|
<livewire:admin.widgets.quick-actions />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Pending Bookings Widget --}}
|
{{-- Pending Bookings Widget --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm: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">
|
||||||
<livewire:admin.widgets.pending-bookings />
|
<livewire:admin.widgets.pending-bookings />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Today's Schedule Widget --}}
|
{{-- Today's Schedule Widget --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm: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">
|
||||||
<livewire:admin.widgets.todays-schedule />
|
<livewire:admin.widgets.todays-schedule />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Recent Updates Widget --}}
|
{{-- Recent Updates Widget --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm: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">
|
||||||
<livewire:admin.widgets.recent-updates />
|
<livewire:admin.widgets.recent-updates />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ new class extends Component
|
||||||
<div class="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
|
<div class="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('pages.edit_page') }}: {{ $page->title_en }}</flux:heading>
|
<flux:heading size="xl">{{ __('pages.edit_page') }}: {{ $page->title_en }}</flux:heading>
|
||||||
<p class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
|
<p class="mt-1 text-sm text-zinc-500">
|
||||||
{{ __('pages.last_updated') }}: {{ $page->updated_at->diffForHumans() }}
|
{{ __('pages.last_updated') }}: {{ $page->updated_at->diffForHumans() }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -81,19 +81,19 @@ new class extends Component
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<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-6">
|
||||||
<!-- Language Tabs -->
|
<!-- Language Tabs -->
|
||||||
<div class="mb-6 border-b border-zinc-200 dark:border-zinc-700">
|
<div class="mb-6 border-b border-zinc-200">
|
||||||
<nav class="-mb-px flex gap-4">
|
<nav class="-mb-px flex gap-4">
|
||||||
<button
|
<button
|
||||||
wire:click="setTab('ar')"
|
wire:click="setTab('ar')"
|
||||||
class="{{ $activeTab === 'ar' ? 'border-blue-500 text-blue-600 dark:text-blue-400' : 'border-transparent text-zinc-500 hover:border-zinc-300 hover:text-zinc-700 dark:text-zinc-400' }} border-b-2 px-1 pb-3 text-sm font-medium transition-colors"
|
class="{{ $activeTab === 'ar' ? 'border-blue-500 text-blue-600' : 'border-transparent text-zinc-500 hover:border-zinc-300 hover:text-zinc-700' }} border-b-2 px-1 pb-3 text-sm font-medium transition-colors"
|
||||||
>
|
>
|
||||||
{{ __('pages.arabic') }}
|
{{ __('pages.arabic') }}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
wire:click="setTab('en')"
|
wire:click="setTab('en')"
|
||||||
class="{{ $activeTab === 'en' ? 'border-blue-500 text-blue-600 dark:text-blue-400' : 'border-transparent text-zinc-500 hover:border-zinc-300 hover:text-zinc-700 dark:text-zinc-400' }} border-b-2 px-1 pb-3 text-sm font-medium transition-colors"
|
class="{{ $activeTab === 'en' ? 'border-blue-500 text-blue-600' : 'border-transparent text-zinc-500 hover:border-zinc-300 hover:text-zinc-700' }} border-b-2 px-1 pb-3 text-sm font-medium transition-colors"
|
||||||
>
|
>
|
||||||
{{ __('pages.english') }}
|
{{ __('pages.english') }}
|
||||||
</button>
|
</button>
|
||||||
|
|
@ -108,7 +108,7 @@ new class extends Component
|
||||||
<div wire:ignore>
|
<div wire:ignore>
|
||||||
<div
|
<div
|
||||||
id="editor-ar"
|
id="editor-ar"
|
||||||
class="min-h-[300px] rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-900"
|
class="min-h-[300px] rounded-lg border border-zinc-200 bg-white"
|
||||||
dir="rtl"
|
dir="rtl"
|
||||||
></div>
|
></div>
|
||||||
<textarea id="content_ar" wire:model="content_ar" class="hidden">{{ $content_ar }}</textarea>
|
<textarea id="content_ar" wire:model="content_ar" class="hidden">{{ $content_ar }}</textarea>
|
||||||
|
|
@ -123,14 +123,14 @@ new class extends Component
|
||||||
<div wire:ignore>
|
<div wire:ignore>
|
||||||
<div
|
<div
|
||||||
id="editor-en"
|
id="editor-en"
|
||||||
class="min-h-[300px] rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-900"
|
class="min-h-[300px] rounded-lg border border-zinc-200 bg-white"
|
||||||
></div>
|
></div>
|
||||||
<textarea id="content_en" wire:model="content_en" class="hidden">{{ $content_en }}</textarea>
|
<textarea id="content_en" wire:model="content_en" class="hidden">{{ $content_en }}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</flux:field>
|
</flux:field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
|
||||||
<flux:button variant="ghost" :href="route('admin.pages.index')" wire:navigate>
|
<flux:button variant="ghost" :href="route('admin.pages.index')" wire:navigate>
|
||||||
{{ __('common.cancel') }}
|
{{ __('common.cancel') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
@ -150,16 +150,16 @@ new class extends Component
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('pages.preview') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('pages.preview') }}</flux:heading>
|
||||||
|
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div class="border-b border-zinc-200 pb-4 dark:border-zinc-700">
|
<div class="border-b border-zinc-200 pb-4">
|
||||||
<h3 class="mb-2 text-lg font-semibold text-zinc-600 dark:text-zinc-400">{{ __('pages.arabic') }}</h3>
|
<h3 class="mb-2 text-lg font-semibold text-zinc-600">{{ __('pages.arabic') }}</h3>
|
||||||
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100" dir="rtl">{{ $page->title_ar }}</h2>
|
<h2 class="text-xl font-bold text-zinc-900" dir="rtl">{{ $page->title_ar }}</h2>
|
||||||
<div class="prose prose-sm mt-2 max-w-none dark:prose-invert" dir="rtl">{!! clean($content_ar) !!}</div>
|
<div class="prose prose-sm mt-2 max-w-none" dir="rtl">{!! clean($content_ar) !!}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h3 class="mb-2 text-lg font-semibold text-zinc-600 dark:text-zinc-400">{{ __('pages.english') }}</h3>
|
<h3 class="mb-2 text-lg font-semibold text-zinc-600">{{ __('pages.english') }}</h3>
|
||||||
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100">{{ $page->title_en }}</h2>
|
<h2 class="text-xl font-bold text-zinc-900">{{ $page->title_en }}</h2>
|
||||||
<div class="prose prose-sm mt-2 max-w-none dark:prose-invert">{!! clean($content_en) !!}</div>
|
<div class="prose prose-sm mt-2 max-w-none">{!! clean($content_en) !!}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -181,45 +181,6 @@ new class extends Component
|
||||||
.ql-container {
|
.ql-container {
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .ql-toolbar {
|
|
||||||
border-color: rgb(63 63 70);
|
|
||||||
background: rgb(24 24 27);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .ql-container {
|
|
||||||
border-color: rgb(63 63 70);
|
|
||||||
background: rgb(24 24 27);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .ql-editor {
|
|
||||||
color: rgb(244 244 245);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .ql-stroke {
|
|
||||||
stroke: rgb(161 161 170);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .ql-fill {
|
|
||||||
fill: rgb(161 161 170);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .ql-picker-label {
|
|
||||||
color: rgb(161 161 170);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .ql-picker-options {
|
|
||||||
background: rgb(39 39 42);
|
|
||||||
border-color: rgb(63 63 70);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .ql-picker-item {
|
|
||||||
color: rgb(244 244 245);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .ql-picker-item:hover {
|
|
||||||
color: rgb(59 130 246);
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ new class extends Component
|
||||||
<div class="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
|
<div class="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('pages.legal_pages') }}</flux:heading>
|
<flux:heading size="xl">{{ __('pages.legal_pages') }}</flux:heading>
|
||||||
<p class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">{{ __('pages.legal_pages_description') }}</p>
|
<p class="mt-1 text-sm text-zinc-500">{{ __('pages.legal_pages_description') }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -34,17 +34,17 @@ new class extends Component
|
||||||
@forelse ($pages as $page)
|
@forelse ($pages as $page)
|
||||||
<div
|
<div
|
||||||
wire:key="page-{{ $page->id }}"
|
wire:key="page-{{ $page->id }}"
|
||||||
class="{{ $loop->first ? 'rounded-t-lg' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ ! $loop->first ? 'border-t-0' : '' }} border border-zinc-200 bg-white p-4 dark:border-zinc-700 dark:bg-zinc-800"
|
class="{{ $loop->first ? 'rounded-t-lg' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ ! $loop->first ? 'border-t-0' : '' }} border border-zinc-200 bg-white p-4"
|
||||||
>
|
>
|
||||||
<div class="flex flex-col gap-4 lg:flex-row lg:items-center">
|
<div class="flex flex-col gap-4 lg:flex-row lg:items-center">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="flex items-center gap-3">
|
<div class="flex items-center gap-3">
|
||||||
<flux:icon name="document-text" class="h-5 w-5 text-zinc-400" />
|
<flux:icon name="document-text" class="h-5 w-5 text-zinc-400" />
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-zinc-900 dark:text-zinc-100">
|
<h3 class="font-semibold text-zinc-900">
|
||||||
{{ $page->title_en }}
|
{{ $page->title_en }}
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400" dir="rtl">
|
<p class="text-sm text-zinc-500" dir="rtl">
|
||||||
{{ $page->title_ar }}
|
{{ $page->title_ar }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -58,7 +58,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="lg:w-40">
|
<div class="lg:w-40">
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="text-sm text-zinc-500">
|
||||||
{{ __('pages.last_updated') }}: {{ $page->updated_at->diffForHumans() }}
|
{{ __('pages.last_updated') }}: {{ $page->updated_at->diffForHumans() }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -76,7 +76,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white py-12 text-center text-zinc-500 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-400">
|
<div class="rounded-lg border border-zinc-200 bg-white py-12 text-center text-zinc-500">
|
||||||
<flux:icon name="document-text" class="mx-auto mb-4 h-12 w-12" />
|
<flux:icon name="document-text" class="mx-auto mb-4 h-12 w-12" />
|
||||||
<p>{{ __('pages.no_pages') }}</p>
|
<p>{{ __('pages.no_pages') }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,7 @@ new class extends Component
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<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-6">
|
||||||
<form wire:submit="save" class="space-y-6">
|
<form wire:submit="save" class="space-y-6">
|
||||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
||||||
<!-- Arabic Fields -->
|
<!-- Arabic Fields -->
|
||||||
|
|
@ -159,7 +159,7 @@ new class extends Component
|
||||||
<trix-editor
|
<trix-editor
|
||||||
input="body_ar"
|
input="body_ar"
|
||||||
dir="rtl"
|
dir="rtl"
|
||||||
class="trix-content prose prose-sm max-w-none bg-white dark:bg-zinc-900 rounded-lg border border-zinc-200 dark:border-zinc-700 min-h-[200px]"
|
class="trix-content prose prose-sm max-w-none bg-white rounded-lg border border-zinc-200 min-h-[200px]"
|
||||||
x-data
|
x-data
|
||||||
x-on:trix-change="$wire.set('body_ar', $event.target.value)"
|
x-on:trix-change="$wire.set('body_ar', $event.target.value)"
|
||||||
></trix-editor>
|
></trix-editor>
|
||||||
|
|
@ -184,7 +184,7 @@ new class extends Component
|
||||||
<input id="body_en" type="hidden" wire:model="body_en">
|
<input id="body_en" type="hidden" wire:model="body_en">
|
||||||
<trix-editor
|
<trix-editor
|
||||||
input="body_en"
|
input="body_en"
|
||||||
class="trix-content prose prose-sm max-w-none bg-white dark:bg-zinc-900 rounded-lg border border-zinc-200 dark:border-zinc-700 min-h-[200px]"
|
class="trix-content prose prose-sm max-w-none bg-white rounded-lg border border-zinc-200 min-h-[200px]"
|
||||||
x-data
|
x-data
|
||||||
x-on:trix-change="$wire.set('body_en', $event.target.value)"
|
x-on:trix-change="$wire.set('body_en', $event.target.value)"
|
||||||
></trix-editor>
|
></trix-editor>
|
||||||
|
|
@ -194,7 +194,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
|
||||||
<flux:button variant="ghost" :href="route('admin.posts.index')" wire:navigate>
|
<flux:button variant="ghost" :href="route('admin.posts.index')" wire:navigate>
|
||||||
{{ __('common.cancel') }}
|
{{ __('common.cancel') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
@ -217,16 +217,16 @@ new class extends Component
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('posts.preview') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('posts.preview') }}</flux:heading>
|
||||||
|
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div class="border-b border-zinc-200 dark:border-zinc-700 pb-4">
|
<div class="border-b border-zinc-200 pb-4">
|
||||||
<h3 class="font-semibold text-lg mb-2 text-zinc-600 dark:text-zinc-400">{{ __('posts.arabic_content') }}</h3>
|
<h3 class="font-semibold text-lg mb-2 text-zinc-600">{{ __('posts.arabic_content') }}</h3>
|
||||||
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100" dir="rtl">{{ $title_ar }}</h2>
|
<h2 class="text-xl font-bold text-zinc-900" dir="rtl">{{ $title_ar }}</h2>
|
||||||
<div class="prose prose-sm dark:prose-invert mt-2 max-w-none" dir="rtl">{!! clean($body_ar) !!}</div>
|
<div class="prose prose-sm mt-2 max-w-none" dir="rtl">{!! clean($body_ar) !!}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-lg mb-2 text-zinc-600 dark:text-zinc-400">{{ __('posts.english_content') }}</h3>
|
<h3 class="font-semibold text-lg mb-2 text-zinc-600">{{ __('posts.english_content') }}</h3>
|
||||||
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100">{{ $title_en }}</h2>
|
<h2 class="text-xl font-bold text-zinc-900">{{ $title_en }}</h2>
|
||||||
<div class="prose prose-sm dark:prose-invert mt-2 max-w-none">{!! clean($body_en) !!}</div>
|
<div class="prose prose-sm mt-2 max-w-none">{!! clean($body_en) !!}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -162,10 +162,10 @@ new class extends Component
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('posts.edit_post') }}</flux:heading>
|
<flux:heading size="xl">{{ __('posts.edit_post') }}</flux:heading>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">
|
<p class="text-sm text-zinc-500 mt-1">
|
||||||
{{ __('posts.last_updated') }}: {{ $post->updated_at->diffForHumans() }}
|
{{ __('posts.last_updated') }}: {{ $post->updated_at->diffForHumans() }}
|
||||||
@if($status === 'draft')
|
@if($status === 'draft')
|
||||||
<span class="text-amber-600 dark:text-amber-400">({{ __('posts.auto_save_enabled') }})</span>
|
<span class="text-amber-600">({{ __('posts.auto_save_enabled') }})</span>
|
||||||
@endif
|
@endif
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -180,7 +180,7 @@ new class extends Component
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<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-6">
|
||||||
<form wire:submit="save" class="space-y-6">
|
<form wire:submit="save" class="space-y-6">
|
||||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
||||||
<!-- Arabic Fields -->
|
<!-- Arabic Fields -->
|
||||||
|
|
@ -200,7 +200,7 @@ new class extends Component
|
||||||
<trix-editor
|
<trix-editor
|
||||||
input="body_ar"
|
input="body_ar"
|
||||||
dir="rtl"
|
dir="rtl"
|
||||||
class="trix-content prose prose-sm max-w-none bg-white dark:bg-zinc-900 rounded-lg border border-zinc-200 dark:border-zinc-700 min-h-[200px]"
|
class="trix-content prose prose-sm max-w-none bg-white rounded-lg border border-zinc-200 min-h-[200px]"
|
||||||
x-data
|
x-data
|
||||||
x-on:trix-change="$wire.set('body_ar', $event.target.value)"
|
x-on:trix-change="$wire.set('body_ar', $event.target.value)"
|
||||||
></trix-editor>
|
></trix-editor>
|
||||||
|
|
@ -225,7 +225,7 @@ new class extends Component
|
||||||
<input id="body_en" type="hidden" wire:model="body_en" value="{{ $body_en }}">
|
<input id="body_en" type="hidden" wire:model="body_en" value="{{ $body_en }}">
|
||||||
<trix-editor
|
<trix-editor
|
||||||
input="body_en"
|
input="body_en"
|
||||||
class="trix-content prose prose-sm max-w-none bg-white dark:bg-zinc-900 rounded-lg border border-zinc-200 dark:border-zinc-700 min-h-[200px]"
|
class="trix-content prose prose-sm max-w-none bg-white rounded-lg border border-zinc-200 min-h-[200px]"
|
||||||
x-data
|
x-data
|
||||||
x-on:trix-change="$wire.set('body_en', $event.target.value)"
|
x-on:trix-change="$wire.set('body_en', $event.target.value)"
|
||||||
></trix-editor>
|
></trix-editor>
|
||||||
|
|
@ -235,7 +235,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center justify-between gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="flex items-center justify-between gap-4 border-t border-zinc-200 pt-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:button variant="danger" type="button" wire:click="delete">
|
<flux:button variant="danger" type="button" wire:click="delete">
|
||||||
{{ __('posts.delete_post') }}
|
{{ __('posts.delete_post') }}
|
||||||
|
|
@ -274,16 +274,16 @@ new class extends Component
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('posts.preview') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('posts.preview') }}</flux:heading>
|
||||||
|
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div class="border-b border-zinc-200 dark:border-zinc-700 pb-4">
|
<div class="border-b border-zinc-200 pb-4">
|
||||||
<h3 class="font-semibold text-lg mb-2 text-zinc-600 dark:text-zinc-400">{{ __('posts.arabic_content') }}</h3>
|
<h3 class="font-semibold text-lg mb-2 text-zinc-600">{{ __('posts.arabic_content') }}</h3>
|
||||||
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100" dir="rtl">{{ $title_ar }}</h2>
|
<h2 class="text-xl font-bold text-zinc-900" dir="rtl">{{ $title_ar }}</h2>
|
||||||
<div class="prose prose-sm dark:prose-invert mt-2 max-w-none" dir="rtl">{!! clean($body_ar) !!}</div>
|
<div class="prose prose-sm mt-2 max-w-none" dir="rtl">{!! clean($body_ar) !!}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-lg mb-2 text-zinc-600 dark:text-zinc-400">{{ __('posts.english_content') }}</h3>
|
<h3 class="font-semibold text-lg mb-2 text-zinc-600">{{ __('posts.english_content') }}</h3>
|
||||||
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100">{{ $title_en }}</h2>
|
<h2 class="text-xl font-bold text-zinc-900">{{ $title_en }}</h2>
|
||||||
<div class="prose prose-sm dark:prose-invert mt-2 max-w-none">{!! clean($body_en) !!}</div>
|
<div class="prose prose-sm mt-2 max-w-none">{!! clean($body_en) !!}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -302,7 +302,7 @@ new class extends Component
|
||||||
{{ __('posts.delete_post_warning') }}
|
{{ __('posts.delete_post_warning') }}
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
<p class="text-zinc-700 dark:text-zinc-300">
|
<p class="text-zinc-700">
|
||||||
{{ __('posts.deleting_post', ['title' => $post->getTitle()]) }}
|
{{ __('posts.deleting_post', ['title' => $post->getTitle()]) }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,7 @@ new class extends Component
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('posts.posts') }}</flux:heading>
|
<flux:heading size="xl">{{ __('posts.posts') }}</flux:heading>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ __('posts.posts_description') }}</p>
|
<p class="text-sm text-zinc-500 mt-1">{{ __('posts.posts_description') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<flux:button href="{{ route('admin.posts.create') }}" variant="primary" icon="plus" wire:navigate>
|
<flux:button href="{{ route('admin.posts.create') }}" variant="primary" icon="plus" wire:navigate>
|
||||||
{{ __('posts.create_post') }}
|
{{ __('posts.create_post') }}
|
||||||
|
|
@ -181,7 +181,7 @@ new class extends Component
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<!-- Filters -->
|
<!-- Filters -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
||||||
<flux:field>
|
<flux:field>
|
||||||
<flux:input
|
<flux:input
|
||||||
|
|
@ -219,21 +219,21 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Sort Headers -->
|
<!-- Sort Headers -->
|
||||||
<div class="hidden lg:flex bg-zinc-100 dark:bg-zinc-700 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 dark:text-zinc-300 gap-4 mb-0">
|
<div class="hidden lg:flex bg-zinc-100 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 gap-4 mb-0">
|
||||||
<button wire:click="sort('title')" class="flex items-center gap-1 flex-1 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('title')" class="flex items-center gap-1 flex-1 hover:text-zinc-900">
|
||||||
{{ __('posts.title') }}
|
{{ __('posts.title') }}
|
||||||
@if($sortBy === 'title')
|
@if($sortBy === 'title')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
@endif
|
@endif
|
||||||
</button>
|
</button>
|
||||||
<span class="w-24">{{ __('admin.current_status') }}</span>
|
<span class="w-24">{{ __('admin.current_status') }}</span>
|
||||||
<button wire:click="sort('updated_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('updated_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
|
||||||
{{ __('posts.last_updated') }}
|
{{ __('posts.last_updated') }}
|
||||||
@if($sortBy === 'updated_at')
|
@if($sortBy === 'updated_at')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
@endif
|
@endif
|
||||||
</button>
|
</button>
|
||||||
<button wire:click="sort('created_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('created_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
|
||||||
{{ __('posts.created') }}
|
{{ __('posts.created') }}
|
||||||
@if($sortBy === 'created_at')
|
@if($sortBy === 'created_at')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
|
|
@ -245,14 +245,14 @@ new class extends Component
|
||||||
<!-- Posts List -->
|
<!-- Posts List -->
|
||||||
<div class="space-y-0">
|
<div class="space-y-0">
|
||||||
@forelse($posts as $post)
|
@forelse($posts as $post)
|
||||||
<div wire:key="post-{{ $post->id }}" class="bg-white dark:bg-zinc-800 p-4 border border-zinc-200 dark:border-zinc-700 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
|
<div wire:key="post-{{ $post->id }}" class="bg-white p-4 border border-zinc-200 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
|
||||||
<div class="flex flex-col lg:flex-row lg:items-center gap-4">
|
<div class="flex flex-col lg:flex-row lg:items-center gap-4">
|
||||||
<!-- Title -->
|
<!-- Title -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<a href="{{ route('admin.posts.edit', $post) }}" class="font-semibold text-zinc-900 dark:text-zinc-100 hover:text-blue-600 dark:hover:text-blue-400" wire:navigate>
|
<a href="{{ route('admin.posts.edit', $post) }}" class="font-semibold text-zinc-900 hover:text-blue-600" wire:navigate>
|
||||||
{{ $post->getTitle() }}
|
{{ $post->getTitle() }}
|
||||||
</a>
|
</a>
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400 mt-1 line-clamp-2">
|
<div class="text-sm text-zinc-500 mt-1 line-clamp-2">
|
||||||
{{ $post->getExcerpt() }}
|
{{ $post->getExcerpt() }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -266,14 +266,14 @@ new class extends Component
|
||||||
|
|
||||||
<!-- Last Updated -->
|
<!-- Last Updated -->
|
||||||
<div class="lg:w-32">
|
<div class="lg:w-32">
|
||||||
<div class="text-sm text-zinc-900 dark:text-zinc-100">
|
<div class="text-sm text-zinc-900">
|
||||||
{{ $post->updated_at->diffForHumans() }}
|
{{ $post->updated_at->diffForHumans() }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Created -->
|
<!-- Created -->
|
||||||
<div class="lg:w-32">
|
<div class="lg:w-32">
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="text-sm text-zinc-500">
|
||||||
{{ $post->created_at->format('Y-m-d') }}
|
{{ $post->created_at->format('Y-m-d') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -306,7 +306,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700">
|
<div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
|
||||||
<flux:icon name="document-text" class="w-12 h-12 mx-auto mb-4" />
|
<flux:icon name="document-text" class="w-12 h-12 mx-auto mb-4" />
|
||||||
<p>{{ __('posts.no_posts') }}</p>
|
<p>{{ __('posts.no_posts') }}</p>
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
|
|
@ -332,7 +332,7 @@ new class extends Component
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
@if($postToDelete)
|
@if($postToDelete)
|
||||||
<p class="text-zinc-700 dark:text-zinc-300">
|
<p class="text-zinc-700">
|
||||||
{{ __('posts.deleting_post', ['title' => $postToDelete->getTitle()]) }}
|
{{ __('posts.deleting_post', ['title' => $postToDelete->getTitle()]) }}
|
||||||
</p>
|
</p>
|
||||||
@endif
|
@endif
|
||||||
|
|
|
||||||
|
|
@ -55,11 +55,11 @@ new class extends Component
|
||||||
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('report.monthly_report') }}</flux:heading>
|
<flux:heading size="xl">{{ __('report.monthly_report') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('report.monthly_report_description') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ __('report.monthly_report_description') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6">
|
||||||
<div class="flex flex-col gap-6 sm:flex-row sm:items-end">
|
<div class="flex flex-col gap-6 sm:flex-row sm:items-end">
|
||||||
<div class="w-full sm:w-64">
|
<div class="w-full sm:w-64">
|
||||||
<flux:select wire:model="selectedPeriod" :label="__('report.select_period')">
|
<flux:select wire:model="selectedPeriod" :label="__('report.select_period')">
|
||||||
|
|
@ -83,31 +83,31 @@ new class extends Component
|
||||||
</flux:button>
|
</flux:button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-8 rounded-lg bg-zinc-50 p-6 dark:bg-zinc-900">
|
<div class="mt-8 rounded-lg bg-zinc-50 p-6">
|
||||||
<flux:heading size="sm" class="mb-4">{{ __('report.table_of_contents') }}</flux:heading>
|
<flux:heading size="sm" class="mb-4">{{ __('report.table_of_contents') }}</flux:heading>
|
||||||
<div class="space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
|
<div class="space-y-2 text-sm text-zinc-600">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">1</span>
|
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">1</span>
|
||||||
<span>{{ __('report.executive_summary') }}</span>
|
<span>{{ __('report.executive_summary') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">2</span>
|
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">2</span>
|
||||||
<span>{{ __('report.user_statistics') }}</span>
|
<span>{{ __('report.user_statistics') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">3</span>
|
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">3</span>
|
||||||
<span>{{ __('report.consultation_statistics') }}</span>
|
<span>{{ __('report.consultation_statistics') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">4</span>
|
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">4</span>
|
||||||
<span>{{ __('report.timeline_statistics') }}</span>
|
<span>{{ __('report.timeline_statistics') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">5</span>
|
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">5</span>
|
||||||
<span>{{ __('report.post_statistics') }}</span>
|
<span>{{ __('report.post_statistics') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">6</span>
|
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">6</span>
|
||||||
<span>{{ __('report.trends_chart') }}</span>
|
<span>{{ __('report.trends_chart') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ new class extends Component {
|
||||||
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('admin.blocked_times') }}</flux:heading>
|
<flux:heading size="xl">{{ __('admin.blocked_times') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">
|
<flux:text class="mt-1 text-zinc-500">
|
||||||
{{ __('admin.blocked_times_description') }}
|
{{ __('admin.blocked_times_description') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -248,11 +248,11 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- List --}}
|
{{-- List --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="rounded-lg border border-zinc-200 bg-white">
|
||||||
@forelse($blockedTimes as $blocked)
|
@forelse($blockedTimes as $blocked)
|
||||||
<div
|
<div
|
||||||
wire:key="blocked-{{ $blocked->id }}"
|
wire:key="blocked-{{ $blocked->id }}"
|
||||||
class="flex flex-col gap-4 border-b border-zinc-200 p-4 last:border-b-0 dark:border-zinc-700 sm:flex-row sm:items-center sm:justify-between"
|
class="flex flex-col gap-4 border-b border-zinc-200 p-4 last:border-b-0 sm:flex-row sm:items-center sm:justify-between"
|
||||||
>
|
>
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="flex items-center gap-3">
|
<div class="flex items-center gap-3">
|
||||||
|
|
@ -268,14 +268,14 @@ new class extends Component {
|
||||||
{{ __('admin.all_day') }}
|
{{ __('admin.all_day') }}
|
||||||
</flux:badge>
|
</flux:badge>
|
||||||
@else
|
@else
|
||||||
<span class="text-sm text-zinc-600 dark:text-zinc-400">
|
<span class="text-sm text-zinc-600">
|
||||||
{{ $blocked->start_time }} - {{ $blocked->end_time }}
|
{{ $blocked->start_time }} - {{ $blocked->end_time }}
|
||||||
</span>
|
</span>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($blocked->reason)
|
@if ($blocked->reason)
|
||||||
<p class="mt-2 text-sm text-zinc-500 dark:text-zinc-400">
|
<p class="mt-2 text-sm text-zinc-500">
|
||||||
{{ $blocked->reason }}
|
{{ $blocked->reason }}
|
||||||
</p>
|
</p>
|
||||||
@endif
|
@endif
|
||||||
|
|
@ -297,7 +297,7 @@ new class extends Component {
|
||||||
@empty
|
@empty
|
||||||
<div class="p-8 text-center">
|
<div class="p-8 text-center">
|
||||||
<flux:icon name="calendar-days" class="mx-auto h-12 w-12 text-zinc-400" />
|
<flux:icon name="calendar-days" class="mx-auto h-12 w-12 text-zinc-400" />
|
||||||
<flux:text class="mt-2 text-zinc-500 dark:text-zinc-400">
|
<flux:text class="mt-2 text-zinc-500">
|
||||||
{{ __('admin.no_blocked_times') }}
|
{{ __('admin.no_blocked_times') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ new class extends Component {
|
||||||
<div>
|
<div>
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<flux:heading size="xl">{{ __('admin.working_hours') }}</flux:heading>
|
<flux:heading size="xl">{{ __('admin.working_hours') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">
|
<flux:text class="mt-1 text-zinc-500">
|
||||||
{{ __('admin.working_hours_description') }}
|
{{ __('admin.working_hours_description') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -103,20 +103,20 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<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-6">
|
||||||
<form wire:submit="save">
|
<form wire:submit="save">
|
||||||
<div class="space-y-1">
|
<div class="space-y-1">
|
||||||
@foreach (range(0, 6) as $day)
|
@foreach (range(0, 6) as $day)
|
||||||
<div
|
<div
|
||||||
wire:key="day-{{ $day }}"
|
wire:key="day-{{ $day }}"
|
||||||
class="flex flex-col gap-4 border-b border-zinc-200 py-4 last:border-b-0 dark:border-zinc-700 sm:flex-row sm:items-center"
|
class="flex flex-col gap-4 border-b border-zinc-200 py-4 last:border-b-0 sm:flex-row sm:items-center"
|
||||||
>
|
>
|
||||||
<div class="flex items-center gap-4 sm:w-48">
|
<div class="flex items-center gap-4 sm:w-48">
|
||||||
<flux:switch
|
<flux:switch
|
||||||
wire:model.live="schedule.{{ $day }}.is_active"
|
wire:model.live="schedule.{{ $day }}.is_active"
|
||||||
aria-label="{{ __('admin.working_hours') }} - {{ \App\Models\WorkingHour::getDayName($day) }}"
|
aria-label="{{ __('admin.working_hours') }} - {{ \App\Models\WorkingHour::getDayName($day) }}"
|
||||||
/>
|
/>
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">
|
<span class="font-medium text-zinc-900">
|
||||||
{{ \App\Models\WorkingHour::getDayName($day) }}
|
{{ \App\Models\WorkingHour::getDayName($day) }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -129,7 +129,7 @@ new class extends Component {
|
||||||
wire:model.live="schedule.{{ $day }}.start_time"
|
wire:model.live="schedule.{{ $day }}.start_time"
|
||||||
class="w-36"
|
class="w-36"
|
||||||
/>
|
/>
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">{{ __('admin.to') }}</span>
|
<span class="text-zinc-500">{{ __('admin.to') }}</span>
|
||||||
<flux:input
|
<flux:input
|
||||||
type="time"
|
type="time"
|
||||||
wire:model.live="schedule.{{ $day }}.end_time"
|
wire:model.live="schedule.{{ $day }}.end_time"
|
||||||
|
|
@ -138,7 +138,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center gap-2 text-sm">
|
<div class="flex items-center gap-2 text-sm">
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">
|
<span class="text-zinc-500">
|
||||||
({{ $this->formatTime($schedule[$day]['start_time']) }} - {{ $this->formatTime($schedule[$day]['end_time']) }})
|
({{ $this->formatTime($schedule[$day]['start_time']) }} - {{ $this->formatTime($schedule[$day]['end_time']) }})
|
||||||
</span>
|
</span>
|
||||||
@php($slots = $this->getSlotCount($day))
|
@php($slots = $this->getSlotCount($day))
|
||||||
|
|
@ -160,13 +160,13 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
@enderror
|
@enderror
|
||||||
@else
|
@else
|
||||||
<span class="text-zinc-400 dark:text-zinc-500">{{ __('admin.closed') }}</span>
|
<span class="text-zinc-400">{{ __('admin.closed') }}</span>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-6 flex justify-end border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="mt-6 flex justify-end border-t border-zinc-200 pt-6">
|
||||||
<flux:button variant="primary" type="submit">
|
<flux:button variant="primary" type="submit">
|
||||||
{{ __('admin.save_working_hours') }}
|
{{ __('admin.save_working_hours') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
|
||||||
|
|
@ -115,18 +115,18 @@ new class extends Component {
|
||||||
<flux:heading size="xl">{{ __('timelines.create_timeline') }}</flux:heading>
|
<flux:heading size="xl">{{ __('timelines.create_timeline') }}</flux:heading>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6 ">
|
||||||
<form wire:submit="create" class="space-y-6">
|
<form wire:submit="create" class="space-y-6">
|
||||||
{{-- Client Selection --}}
|
{{-- Client Selection --}}
|
||||||
<flux:field>
|
<flux:field>
|
||||||
<flux:label class="required">{{ __('timelines.select_client') }}</flux:label>
|
<flux:label class="required">{{ __('timelines.select_client') }}</flux:label>
|
||||||
|
|
||||||
@if($selectedUser)
|
@if($selectedUser)
|
||||||
<div class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-zinc-50 p-3 dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-zinc-50 p-3 ">
|
||||||
<flux:avatar size="sm" name="{{ $selectedUser->full_name }}" />
|
<flux:avatar size="sm" name="{{ $selectedUser->full_name }}" />
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selectedUser->full_name }}</div>
|
<div class="font-medium text-zinc-900 ">{{ $selectedUser->full_name }}</div>
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400">{{ $selectedUser->email }}</div>
|
<div class="text-sm text-zinc-500 ">{{ $selectedUser->email }}</div>
|
||||||
</div>
|
</div>
|
||||||
<flux:button variant="ghost" size="sm" wire:click="clearSelection" icon="x-mark" />
|
<flux:button variant="ghost" size="sm" wire:click="clearSelection" icon="x-mark" />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -141,29 +141,29 @@ new class extends Component {
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@if(strlen($search) >= 2)
|
@if(strlen($search) >= 2)
|
||||||
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white shadow-lg dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white shadow-lg ">
|
||||||
@forelse($this->clients as $client)
|
@forelse($this->clients as $client)
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
wire:key="client-{{ $client->id }}"
|
wire:key="client-{{ $client->id }}"
|
||||||
wire:click="selectUser({{ $client->id }})"
|
wire:click="selectUser({{ $client->id }})"
|
||||||
class="flex w-full items-center gap-3 px-4 py-3 text-start hover:bg-zinc-50 dark:hover:bg-zinc-700 first:rounded-t-lg last:rounded-b-lg"
|
class="flex w-full items-center gap-3 px-4 py-3 text-start hover:bg-zinc-50 first:rounded-t-lg last:rounded-b-lg"
|
||||||
>
|
>
|
||||||
<flux:avatar size="sm" name="{{ $client->full_name }}" />
|
<flux:avatar size="sm" name="{{ $client->full_name }}" />
|
||||||
<div>
|
<div>
|
||||||
<div class="font-medium text-zinc-900 dark:text-zinc-100">{{ $client->full_name }}</div>
|
<div class="font-medium text-zinc-900 ">{{ $client->full_name }}</div>
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400">{{ $client->email }}</div>
|
<div class="text-sm text-zinc-500 ">{{ $client->email }}</div>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
@empty
|
@empty
|
||||||
<div class="px-4 py-3 text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="px-4 py-3 text-sm text-zinc-500 ">
|
||||||
{{ __('timelines.no_clients_found') }}
|
{{ __('timelines.no_clients_found') }}
|
||||||
</div>
|
</div>
|
||||||
@endforelse
|
@endforelse
|
||||||
</div>
|
</div>
|
||||||
@elseif(strlen($search) > 0 && strlen($search) < 2)
|
@elseif(strlen($search) > 0 && strlen($search) < 2)
|
||||||
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white p-3 shadow-lg dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white p-3 shadow-lg ">
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="text-sm text-zinc-500 ">
|
||||||
{{ __('timelines.type_to_search') }}
|
{{ __('timelines.type_to_search') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -210,7 +210,7 @@ new class extends Component {
|
||||||
<flux:error name="initialNotes" />
|
<flux:error name="initialNotes" />
|
||||||
</flux:field>
|
</flux:field>
|
||||||
|
|
||||||
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700">
|
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 ">
|
||||||
<flux:button variant="ghost" :href="route('admin.dashboard')" wire:navigate>
|
<flux:button variant="ghost" :href="route('admin.dashboard')" wire:navigate>
|
||||||
{{ __('timelines.cancel') }}
|
{{ __('timelines.cancel') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
|
||||||
|
|
@ -196,11 +196,11 @@ new class extends Component {
|
||||||
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('export.export_timelines') }}</flux:heading>
|
<flux:heading size="xl">{{ __('export.export_timelines') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('export.export_timelines_description') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ __('export.export_timelines_description') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
||||||
|
|
@ -217,19 +217,19 @@ new class extends Component {
|
||||||
<button
|
<button
|
||||||
wire:click="clearClient"
|
wire:click="clearClient"
|
||||||
type="button"
|
type="button"
|
||||||
class="absolute end-2 top-8 text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300"
|
class="absolute end-2 top-8 text-zinc-400 hover:text-zinc-600"
|
||||||
>
|
>
|
||||||
<flux:icon name="x-mark" class="h-4 w-4" />
|
<flux:icon name="x-mark" class="h-4 w-4" />
|
||||||
</button>
|
</button>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@if (strlen($clientSearch) >= 2 && ! $clientId && $this->clients->count() > 0)
|
@if (strlen($clientSearch) >= 2 && ! $clientId && $this->clients->count() > 0)
|
||||||
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white shadow-lg dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white shadow-lg">
|
||||||
@foreach ($this->clients as $client)
|
@foreach ($this->clients as $client)
|
||||||
<button
|
<button
|
||||||
wire:click="selectClient({{ $client->id }})"
|
wire:click="selectClient({{ $client->id }})"
|
||||||
type="button"
|
type="button"
|
||||||
class="block w-full px-4 py-2 text-start hover:bg-zinc-100 dark:hover:bg-zinc-700"
|
class="block w-full px-4 py-2 text-start hover:bg-zinc-100"
|
||||||
>
|
>
|
||||||
<span class="font-medium">{{ $client->full_name }}</span>
|
<span class="font-medium">{{ $client->full_name }}</span>
|
||||||
<span class="text-sm text-zinc-500">{{ $client->email }}</span>
|
<span class="text-sm text-zinc-500">{{ $client->email }}</span>
|
||||||
|
|
@ -273,7 +273,7 @@ new class extends Component {
|
||||||
wire:model.live="includeUpdates"
|
wire:model.live="includeUpdates"
|
||||||
:label="__('export.include_updates')"
|
:label="__('export.include_updates')"
|
||||||
/>
|
/>
|
||||||
<flux:text class="ms-6 text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="ms-6 text-sm text-zinc-500">
|
||||||
{{ __('export.include_updates_description') }}
|
{{ __('export.include_updates_description') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -287,11 +287,11 @@ new class extends Component {
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6">
|
||||||
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
|
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">
|
<flux:text class="text-zinc-600">
|
||||||
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900 dark:text-zinc-100">{{ $previewCount }}</span>
|
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900">{{ $previewCount }}</span>
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -323,9 +323,9 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($previewCount === 0)
|
@if ($previewCount === 0)
|
||||||
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center dark:bg-zinc-900">
|
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center">
|
||||||
<flux:icon name="clock" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
|
<flux:icon name="clock" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('export.no_timelines_match') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('export.no_timelines_match') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ new class extends Component
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('timelines.timelines') }}</flux:heading>
|
<flux:heading size="xl">{{ __('timelines.timelines') }}</flux:heading>
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ __('timelines.timelines_description') }}</p>
|
<p class="text-sm text-zinc-500 mt-1">{{ __('timelines.timelines_description') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<flux:button href="{{ route('admin.timelines.export') }}" icon="arrow-down-tray" wire:navigate>
|
<flux:button href="{{ route('admin.timelines.export') }}" icon="arrow-down-tray" wire:navigate>
|
||||||
|
|
@ -150,7 +150,7 @@ new class extends Component
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<!-- Filters -->
|
<!-- Filters -->
|
||||||
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6">
|
<div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
|
||||||
<flux:field>
|
<flux:field>
|
||||||
<flux:input
|
<flux:input
|
||||||
|
|
@ -208,27 +208,27 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Sort Headers -->
|
<!-- Sort Headers -->
|
||||||
<div class="hidden lg:flex bg-zinc-100 dark:bg-zinc-700 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 dark:text-zinc-300 gap-4 mb-0">
|
<div class="hidden lg:flex bg-zinc-100 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 gap-4 mb-0">
|
||||||
<button wire:click="sort('case_name')" class="flex items-center gap-1 flex-1 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('case_name')" class="flex items-center gap-1 flex-1 hover:text-zinc-900">
|
||||||
{{ __('timelines.case_name') }}
|
{{ __('timelines.case_name') }}
|
||||||
@if($sortBy === 'case_name')
|
@if($sortBy === 'case_name')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
@endif
|
@endif
|
||||||
</button>
|
</button>
|
||||||
<button wire:click="sort('user_id')" class="flex items-center gap-1 w-40 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('user_id')" class="flex items-center gap-1 w-40 hover:text-zinc-900">
|
||||||
{{ __('admin.client') }}
|
{{ __('admin.client') }}
|
||||||
@if($sortBy === 'user_id')
|
@if($sortBy === 'user_id')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
@endif
|
@endif
|
||||||
</button>
|
</button>
|
||||||
<span class="w-24">{{ __('admin.current_status') }}</span>
|
<span class="w-24">{{ __('admin.current_status') }}</span>
|
||||||
<button wire:click="sort('updated_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('updated_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
|
||||||
{{ __('timelines.last_updated') }}
|
{{ __('timelines.last_updated') }}
|
||||||
@if($sortBy === 'updated_at')
|
@if($sortBy === 'updated_at')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
@endif
|
@endif
|
||||||
</button>
|
</button>
|
||||||
<button wire:click="sort('created_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white">
|
<button wire:click="sort('created_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
|
||||||
{{ __('timelines.created') }}
|
{{ __('timelines.created') }}
|
||||||
@if($sortBy === 'created_at')
|
@if($sortBy === 'created_at')
|
||||||
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
|
||||||
|
|
@ -241,15 +241,15 @@ new class extends Component
|
||||||
<!-- Timelines List -->
|
<!-- Timelines List -->
|
||||||
<div class="space-y-0">
|
<div class="space-y-0">
|
||||||
@forelse($timelines as $timeline)
|
@forelse($timelines as $timeline)
|
||||||
<div wire:key="timeline-{{ $timeline->id }}" class="bg-white dark:bg-zinc-800 p-4 border border-zinc-200 dark:border-zinc-700 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
|
<div wire:key="timeline-{{ $timeline->id }}" class="bg-white p-4 border border-zinc-200 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
|
||||||
<div class="flex flex-col lg:flex-row lg:items-center gap-4">
|
<div class="flex flex-col lg:flex-row lg:items-center gap-4">
|
||||||
<!-- Case Name -->
|
<!-- Case Name -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<a href="{{ route('admin.timelines.show', $timeline) }}" class="font-semibold text-zinc-900 dark:text-zinc-100 hover:text-blue-600 dark:hover:text-blue-400" wire:navigate>
|
<a href="{{ route('admin.timelines.show', $timeline) }}" class="font-semibold text-zinc-900 hover:text-blue-600" wire:navigate>
|
||||||
{{ $timeline->case_name }}
|
{{ $timeline->case_name }}
|
||||||
</a>
|
</a>
|
||||||
@if($timeline->case_reference)
|
@if($timeline->case_reference)
|
||||||
<div class="text-xs text-zinc-500 dark:text-zinc-400 mt-1">
|
<div class="text-xs text-zinc-500 mt-1">
|
||||||
{{ __('timelines.reference') }}: {{ $timeline->case_reference }}
|
{{ __('timelines.reference') }}: {{ $timeline->case_reference }}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
@ -257,10 +257,10 @@ new class extends Component
|
||||||
|
|
||||||
<!-- Client -->
|
<!-- Client -->
|
||||||
<div class="lg:w-40">
|
<div class="lg:w-40">
|
||||||
<div class="text-sm text-zinc-900 dark:text-zinc-100">
|
<div class="text-sm text-zinc-900">
|
||||||
{{ $timeline->user->full_name }}
|
{{ $timeline->user->full_name }}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-xs text-zinc-500 dark:text-zinc-400">
|
<div class="text-xs text-zinc-500">
|
||||||
{{ $timeline->user->email }}
|
{{ $timeline->user->email }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -274,14 +274,14 @@ new class extends Component
|
||||||
|
|
||||||
<!-- Last Updated -->
|
<!-- Last Updated -->
|
||||||
<div class="lg:w-32">
|
<div class="lg:w-32">
|
||||||
<div class="text-sm text-zinc-900 dark:text-zinc-100">
|
<div class="text-sm text-zinc-900">
|
||||||
{{ $timeline->updated_at->diffForHumans() }}
|
{{ $timeline->updated_at->diffForHumans() }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Created -->
|
<!-- Created -->
|
||||||
<div class="lg:w-32">
|
<div class="lg:w-32">
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="text-sm text-zinc-500">
|
||||||
{{ $timeline->created_at->format('Y-m-d') }}
|
{{ $timeline->created_at->format('Y-m-d') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -342,7 +342,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700">
|
<div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
|
||||||
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
|
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
|
||||||
<p>{{ __('timelines.no_timelines') }}</p>
|
<p>{{ __('timelines.no_timelines') }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -157,12 +157,12 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Timeline Header --}}
|
{{-- Timeline Header --}}
|
||||||
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800 {{ $timeline->isArchived() ? 'opacity-75' : '' }}">
|
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 {{ $timeline->isArchived() ? 'opacity-75' : '' }}">
|
||||||
<div class="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
|
<div class="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ $timeline->case_name }}</flux:heading>
|
<flux:heading size="xl">{{ $timeline->case_name }}</flux:heading>
|
||||||
@if($timeline->case_reference)
|
@if($timeline->case_reference)
|
||||||
<div class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="mt-1 text-sm text-zinc-500 ">
|
||||||
{{ __('timelines.reference') }}: {{ $timeline->case_reference }}
|
{{ __('timelines.reference') }}: {{ $timeline->case_reference }}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
@ -185,7 +185,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-4 flex flex-wrap gap-4 text-sm text-zinc-600 dark:text-zinc-300">
|
<div class="mt-4 flex flex-wrap gap-4 text-sm text-zinc-600 ">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<flux:icon.user class="size-4" />
|
<flux:icon.user class="size-4" />
|
||||||
<span>{{ $timeline->user->full_name }}</span>
|
<span>{{ $timeline->user->full_name }}</span>
|
||||||
|
|
@ -219,7 +219,7 @@ new class extends Component {
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
{{-- Add Update Form --}}
|
{{-- Add Update Form --}}
|
||||||
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800 {{ $timeline->isArchived() ? 'opacity-60' : '' }}">
|
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 {{ $timeline->isArchived() ? 'opacity-60' : '' }}">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('timelines.add_update') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('timelines.add_update') }}</flux:heading>
|
||||||
|
|
||||||
@if($timeline->isArchived())
|
@if($timeline->isArchived())
|
||||||
|
|
@ -258,34 +258,34 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Timeline Updates --}}
|
{{-- Timeline Updates --}}
|
||||||
<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-6 ">
|
||||||
<flux:heading size="lg" class="mb-6">{{ __('timelines.updates_history') }}</flux:heading>
|
<flux:heading size="lg" class="mb-6">{{ __('timelines.updates_history') }}</flux:heading>
|
||||||
|
|
||||||
@if($timeline->updates->isEmpty())
|
@if($timeline->updates->isEmpty())
|
||||||
<div class="text-center py-8 text-zinc-500 dark:text-zinc-400">
|
<div class="text-center py-8 text-zinc-500 ">
|
||||||
{{ __('timelines.no_updates') }}
|
{{ __('timelines.no_updates') }}
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
{{-- Timeline line --}}
|
{{-- Timeline line --}}
|
||||||
<div class="absolute start-4 top-0 bottom-0 w-0.5 bg-zinc-200 dark:bg-zinc-700"></div>
|
<div class="absolute start-4 top-0 bottom-0 w-0.5 bg-zinc-200 "></div>
|
||||||
|
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
@foreach($timeline->updates as $update)
|
@foreach($timeline->updates as $update)
|
||||||
<div wire:key="update-{{ $update->id }}" class="relative flex gap-4">
|
<div wire:key="update-{{ $update->id }}" class="relative flex gap-4">
|
||||||
{{-- Timeline dot --}}
|
{{-- Timeline dot --}}
|
||||||
<div class="relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-blue-100 dark:bg-blue-900">
|
<div class="relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-blue-100 ">
|
||||||
<flux:icon.document-text class="size-4 text-blue-600 dark:text-blue-400" />
|
<flux:icon.document-text class="size-4 text-blue-600 " />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Update content --}}
|
{{-- Update content --}}
|
||||||
<div class="flex-1 rounded-lg border border-zinc-200 bg-zinc-50 p-4 dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="flex-1 rounded-lg border border-zinc-200 bg-zinc-50 p-4 ">
|
||||||
<div class="mb-2 flex flex-wrap items-center justify-between gap-2">
|
<div class="mb-2 flex flex-wrap items-center justify-between gap-2">
|
||||||
<div class="flex flex-wrap items-center gap-3 text-sm">
|
<div class="flex flex-wrap items-center gap-3 text-sm">
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">
|
<span class="font-medium text-zinc-900 ">
|
||||||
{{ $update->admin->full_name }}
|
{{ $update->admin->full_name }}
|
||||||
</span>
|
</span>
|
||||||
<span class="text-zinc-500 dark:text-zinc-400">
|
<span class="text-zinc-500 ">
|
||||||
{{ $update->created_at->format('Y-m-d H:i') }}
|
{{ $update->created_at->format('Y-m-d H:i') }}
|
||||||
</span>
|
</span>
|
||||||
@if($update->updated_at->gt($update->created_at))
|
@if($update->updated_at->gt($update->created_at))
|
||||||
|
|
@ -307,7 +307,7 @@ new class extends Component {
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="prose prose-sm dark:prose-invert max-w-none">
|
<div class="prose prose-sm max-w-none">
|
||||||
{!! $update->update_text !!}
|
{!! $update->update_text !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -158,11 +158,11 @@ new class extends Component {
|
||||||
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ __('export.export_users') }}</flux:heading>
|
<flux:heading size="xl">{{ __('export.export_users') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('export.export_users_description') }}</flux:text>
|
<flux:text class="mt-1 text-zinc-500">{{ __('export.export_users_description') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800">
|
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
||||||
|
|
@ -208,11 +208,11 @@ new class extends Component {
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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-6">
|
||||||
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
|
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-zinc-600 dark:text-zinc-400">
|
<flux:text class="text-zinc-600">
|
||||||
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900 dark:text-zinc-100">{{ $previewCount }}</span>
|
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900">{{ $previewCount }}</span>
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -244,9 +244,9 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($previewCount === 0)
|
@if ($previewCount === 0)
|
||||||
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center dark:bg-zinc-900">
|
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center">
|
||||||
<flux:icon name="users" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
|
<flux:icon name="users" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('export.no_users_match') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('export.no_users_match') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -27,21 +27,21 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@forelse ($pendingBookings as $booking)
|
@forelse ($pendingBookings as $booking)
|
||||||
<div wire:key="pending-{{ $booking->id }}" class="border-b border-zinc-100 py-2 last:border-0 dark:border-zinc-700">
|
<div wire:key="pending-{{ $booking->id }}" class="border-b border-zinc-100 py-2 last:border-0">
|
||||||
<div class="font-medium text-zinc-900 dark:text-zinc-100">{{ $booking->user?->full_name ?? __('widgets.unknown_client') }}</div>
|
<div class="font-medium text-zinc-900">{{ $booking->user?->full_name ?? __('widgets.unknown_client') }}</div>
|
||||||
<div class="flex items-center gap-2 text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="flex items-center gap-2 text-sm text-zinc-500">
|
||||||
<span>{{ $booking->booking_date->translatedFormat('M j') }}</span>
|
<span>{{ $booking->booking_date->translatedFormat('M j') }}</span>
|
||||||
<flux:badge size="sm">{{ $booking->consultation_type->label() }}</flux:badge>
|
<flux:badge size="sm">{{ $booking->consultation_type->label() }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('widgets.no_pending_bookings') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('widgets.no_pending_bookings') }}</flux:text>
|
||||||
@endforelse
|
@endforelse
|
||||||
|
|
||||||
@if ($pendingCount > 5)
|
@if ($pendingCount > 5)
|
||||||
<a
|
<a
|
||||||
href="{{ route('admin.bookings.pending') }}"
|
href="{{ route('admin.bookings.pending') }}"
|
||||||
class="mt-4 block text-sm text-blue-600 hover:underline dark:text-blue-400"
|
class="mt-4 block text-sm text-blue-600 hover:underline"
|
||||||
wire:navigate
|
wire:navigate
|
||||||
>
|
>
|
||||||
{{ __('widgets.view_all_pending', ['count' => $pendingCount]) }}
|
{{ __('widgets.view_all_pending', ['count' => $pendingCount]) }}
|
||||||
|
|
|
||||||
|
|
@ -24,22 +24,22 @@ new class extends Component
|
||||||
<a
|
<a
|
||||||
wire:key="update-{{ $update->id }}"
|
wire:key="update-{{ $update->id }}"
|
||||||
href="{{ route('admin.timelines.show', $update->timeline_id) }}"
|
href="{{ route('admin.timelines.show', $update->timeline_id) }}"
|
||||||
class="block border-b border-zinc-100 py-2 last:border-0 hover:bg-zinc-50 dark:border-zinc-700 dark:hover:bg-zinc-700/50"
|
class="block border-b border-zinc-100 py-2 last:border-0 hover:bg-zinc-50"
|
||||||
wire:navigate
|
wire:navigate
|
||||||
>
|
>
|
||||||
<div class="text-sm text-zinc-900 dark:text-zinc-100">
|
<div class="text-sm text-zinc-900">
|
||||||
{{ Str::limit($update->update_text, 50) }}
|
{{ Str::limit($update->update_text, 50) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-1 flex items-center gap-2 text-xs text-zinc-500 dark:text-zinc-400">
|
<div class="mt-1 flex items-center gap-2 text-xs text-zinc-500">
|
||||||
<span>{{ $update->timeline?->case_name ?? __('widgets.unknown_case') }}</span>
|
<span>{{ $update->timeline?->case_name ?? __('widgets.unknown_case') }}</span>
|
||||||
<span>•</span>
|
<span>•</span>
|
||||||
<span>{{ $update->timeline?->user?->full_name ?? __('widgets.unknown_client') }}</span>
|
<span>{{ $update->timeline?->user?->full_name ?? __('widgets.unknown_client') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-1 text-xs text-zinc-400 dark:text-zinc-500">
|
<div class="mt-1 text-xs text-zinc-400">
|
||||||
{{ $update->created_at->diffForHumans() }}
|
{{ $update->created_at->diffForHumans() }}
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@empty
|
@empty
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('widgets.no_recent_updates') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('widgets.no_recent_updates') }}</flux:text>
|
||||||
@endforelse
|
@endforelse
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,12 @@ new class extends Component
|
||||||
<flux:heading size="sm" class="mb-4">{{ __('widgets.todays_schedule') }}</flux:heading>
|
<flux:heading size="sm" class="mb-4">{{ __('widgets.todays_schedule') }}</flux:heading>
|
||||||
|
|
||||||
@forelse ($todaySchedule as $consultation)
|
@forelse ($todaySchedule as $consultation)
|
||||||
<div wire:key="schedule-{{ $consultation->id }}" class="flex items-center justify-between border-b border-zinc-100 py-2 last:border-0 dark:border-zinc-700">
|
<div wire:key="schedule-{{ $consultation->id }}" class="flex items-center justify-between border-b border-zinc-100 py-2 last:border-0">
|
||||||
<div>
|
<div>
|
||||||
<div class="font-medium text-zinc-900 dark:text-zinc-100">
|
<div class="font-medium text-zinc-900">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2 text-sm text-zinc-500 dark:text-zinc-400">
|
<div class="flex items-center gap-2 text-sm text-zinc-500">
|
||||||
<span>{{ $consultation->user?->full_name ?? __('widgets.unknown_client') }}</span>
|
<span>{{ $consultation->user?->full_name ?? __('widgets.unknown_client') }}</span>
|
||||||
<flux:badge size="sm">{{ $consultation->consultation_type->label() }}</flux:badge>
|
<flux:badge size="sm">{{ $consultation->consultation_type->label() }}</flux:badge>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -62,6 +62,6 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('widgets.no_consultations_today') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('widgets.no_consultations_today') }}</flux:text>
|
||||||
@endforelse
|
@endforelse
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
@if (Route::has('register'))
|
@if (Route::has('register'))
|
||||||
<div class="space-x-1 text-sm text-center rtl:space-x-reverse text-zinc-600 dark:text-zinc-400">
|
<div class="space-x-1 text-sm text-center rtl:space-x-reverse text-zinc-600">
|
||||||
<span>{{ __('Don\'t have an account?') }}</span>
|
<span>{{ __('Don\'t have an account?') }}</span>
|
||||||
<flux:link :href="route('register')" wire:navigate>{{ __('Sign up') }}</flux:link>
|
<flux:link :href="route('register')" wire:navigate>{{ __('Sign up') }}</flux:link>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div class="space-x-1 rtl:space-x-reverse text-center text-sm text-zinc-600 dark:text-zinc-400">
|
<div class="space-x-1 rtl:space-x-reverse text-center text-sm text-zinc-600">
|
||||||
<span>{{ __('Already have an account?') }}</span>
|
<span>{{ __('Already have an account?') }}</span>
|
||||||
<flux:link :href="route('login')" wire:navigate>{{ __('Log in') }}</flux:link>
|
<flux:link :href="route('login')" wire:navigate>{{ __('Log in') }}</flux:link>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
</flux:text>
|
</flux:text>
|
||||||
|
|
||||||
@if (session('status') == 'verification-link-sent')
|
@if (session('status') == 'verification-link-sent')
|
||||||
<flux:text class="text-center font-medium !dark:text-green-400 !text-green-600">
|
<flux:text class="text-center font-medium !text-green-600">
|
||||||
{{ __('A new verification link has been sent to the email address you provided during registration.') }}
|
{{ __('A new verification link has been sent to the email address you provided during registration.') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
@endif
|
@endif
|
||||||
|
|
|
||||||
|
|
@ -172,7 +172,7 @@ new class extends Component
|
||||||
<!-- Day Headers -->
|
<!-- Day Headers -->
|
||||||
<div class="grid grid-cols-7 gap-1 mb-2" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}">
|
<div class="grid grid-cols-7 gap-1 mb-2" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}">
|
||||||
@foreach($dayHeaders as $day)
|
@foreach($dayHeaders as $day)
|
||||||
<div class="text-center text-sm font-semibold text-zinc-600 dark:text-zinc-400">
|
<div class="text-center text-sm font-semibold text-zinc-600">
|
||||||
{{ __("calendar.{$day}") }}
|
{{ __("calendar.{$day}") }}
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|
@ -188,11 +188,11 @@ new class extends Component
|
||||||
wire:click="selectDate('{{ $dayData['date'] }}')"
|
wire:click="selectDate('{{ $dayData['date'] }}')"
|
||||||
@class([
|
@class([
|
||||||
'calendar-cell rounded-lg text-center transition-colors font-medium min-h-[44px] text-white',
|
'calendar-cell rounded-lg text-center transition-colors font-medium min-h-[44px] text-white',
|
||||||
'bg-[#4A5D23]/70 hover:bg-[#4A5D23]/85 dark:bg-[#4A5D23]/60 dark:hover:bg-[#4A5D23]/75' => $dayData['status'] === 'available',
|
'bg-[#4A5D23]/70 hover:bg-[#4A5D23]/85' => $dayData['status'] === 'available',
|
||||||
'bg-[#D4A84B]/70 hover:bg-[#D4A84B]/85 dark:bg-[#D4A84B]/60 dark:hover:bg-[#D4A84B]/75' => $dayData['status'] === 'partial',
|
'bg-[#D4A84B]/70 hover:bg-[#D4A84B]/85' => $dayData['status'] === 'partial',
|
||||||
'bg-sky-400/50 cursor-not-allowed dark:bg-sky-500/40' => $dayData['status'] === 'user_booked',
|
'bg-sky-400/50 cursor-not-allowed' => $dayData['status'] === 'user_booked',
|
||||||
'bg-zinc-300/50 !text-zinc-400 cursor-not-allowed dark:bg-zinc-700/50 dark:!text-zinc-500' => in_array($dayData['status'], ['past', 'closed', 'blocked', 'full']),
|
'bg-zinc-300/50 !text-zinc-400 cursor-not-allowed' => in_array($dayData['status'], ['past', 'closed', 'blocked', 'full']),
|
||||||
'ring-2 ring-[#A68966] dark:ring-[#C4A882]' => $selectedDate === $dayData['date'],
|
'ring-2 ring-[#A68966]' => $selectedDate === $dayData['date'],
|
||||||
])
|
])
|
||||||
@disabled(in_array($dayData['status'], ['past', 'closed', 'blocked', 'full', 'user_booked']))
|
@disabled(in_array($dayData['status'], ['past', 'closed', 'blocked', 'full', 'user_booked']))
|
||||||
>
|
>
|
||||||
|
|
@ -215,14 +215,14 @@ new class extends Component
|
||||||
@foreach($availableSlots as $slot)
|
@foreach($availableSlots as $slot)
|
||||||
<button
|
<button
|
||||||
wire:click="$parent.selectSlot('{{ $selectedDate }}', '{{ $slot }}')"
|
wire:click="$parent.selectSlot('{{ $selectedDate }}', '{{ $slot }}')"
|
||||||
class="time-slot-btn rounded-lg border border-amber-500 text-amber-600 hover:bg-amber-500 hover:text-white transition-colors dark:border-amber-400 dark:text-amber-400 dark:hover:bg-amber-500 dark:hover:text-white"
|
class="time-slot-btn rounded-lg border border-amber-500 text-amber-600 hover:bg-amber-500 hover:text-white transition-colors"
|
||||||
>
|
>
|
||||||
{{ \Carbon\Carbon::parse($slot)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($slot)->format('g:i A') }}
|
||||||
</button>
|
</button>
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<p class="text-zinc-500 dark:text-zinc-400">{{ __('booking.no_slots_available') }}</p>
|
<p class="text-zinc-500">{{ __('booking.no_slots_available') }}</p>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
@ -230,22 +230,22 @@ new class extends Component
|
||||||
<!-- Legend -->
|
<!-- Legend -->
|
||||||
<div class="flex flex-wrap gap-4 mt-6 text-sm">
|
<div class="flex flex-wrap gap-4 mt-6 text-sm">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<div class="w-4 h-4 rounded bg-[#4A5D23]/70 dark:bg-[#4A5D23]/60"></div>
|
<div class="w-4 h-4 rounded bg-[#4A5D23]/70"></div>
|
||||||
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.available') }}</span>
|
<span class="text-zinc-600">{{ __('booking.available') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<div class="w-4 h-4 rounded bg-[#D4A84B]/70 dark:bg-[#D4A84B]/60"></div>
|
<div class="w-4 h-4 rounded bg-[#D4A84B]/70"></div>
|
||||||
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.partial') }}</span>
|
<span class="text-zinc-600">{{ __('booking.partial') }}</span>
|
||||||
</div>
|
</div>
|
||||||
@if(count($bookedDates) > 0)
|
@if(count($bookedDates) > 0)
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<div class="w-4 h-4 rounded bg-sky-400/50 dark:bg-sky-500/40"></div>
|
<div class="w-4 h-4 rounded bg-sky-400/50"></div>
|
||||||
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.user_booked') }}</span>
|
<span class="text-zinc-600">{{ __('booking.user_booked') }}</span>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<div class="w-4 h-4 rounded bg-zinc-300/50 dark:bg-zinc-700/50"></div>
|
<div class="w-4 h-4 rounded bg-zinc-300/50"></div>
|
||||||
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.unavailable') }}</span>
|
<span class="text-zinc-600">{{ __('booking.unavailable') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -187,32 +187,32 @@ new class extends Component
|
||||||
<flux:heading size="xl" class="mb-6 text-xl sm:text-2xl">{{ __('booking.request_consultation') }}</flux:heading>
|
<flux:heading size="xl" class="mb-6 text-xl sm:text-2xl">{{ __('booking.request_consultation') }}</flux:heading>
|
||||||
|
|
||||||
{{-- Booking Status Banner --}}
|
{{-- Booking Status Banner --}}
|
||||||
<div class="mb-6 rounded-lg border p-4 {{ $canBookToday ? 'border-green-200 bg-green-50 dark:border-green-800 dark:bg-green-900/20' : 'border-amber-200 bg-amber-50 dark:border-amber-800 dark:bg-amber-900/20' }}">
|
<div class="mb-6 rounded-lg border p-4 {{ $canBookToday ? 'border-green-200 bg-green-50' : 'border-amber-200 bg-amber-50' }}">
|
||||||
<div class="flex items-start gap-3">
|
<div class="flex items-start gap-3">
|
||||||
@if($canBookToday)
|
@if($canBookToday)
|
||||||
<flux:icon name="check-circle" class="mt-0.5 h-5 w-5 flex-shrink-0 text-green-600 dark:text-green-400" />
|
<flux:icon name="check-circle" class="mt-0.5 h-5 w-5 flex-shrink-0 text-green-600" />
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-green-700 dark:text-green-400">{{ __('booking.can_book_today') }}</p>
|
<p class="font-medium text-green-700">{{ __('booking.can_book_today') }}</p>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<flux:icon name="information-circle" class="mt-0.5 h-5 w-5 flex-shrink-0 text-amber-600 dark:text-amber-400" />
|
<flux:icon name="information-circle" class="mt-0.5 h-5 w-5 flex-shrink-0 text-amber-600" />
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-amber-700 dark:text-amber-400">{{ __('booking.already_booked_today') }}</p>
|
<p class="font-medium text-amber-700">{{ __('booking.already_booked_today') }}</p>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if($pendingRequests->isNotEmpty())
|
@if($pendingRequests->isNotEmpty())
|
||||||
<div class="mt-3 border-t border-zinc-200 pt-3 dark:border-zinc-700">
|
<div class="mt-3 border-t border-zinc-200 pt-3">
|
||||||
@if($pendingRequests->count() === 1)
|
@if($pendingRequests->count() === 1)
|
||||||
<p class="text-sm text-zinc-600 dark:text-zinc-400">
|
<p class="text-sm text-zinc-600">
|
||||||
{{ __('booking.pending_for_date', ['date' => $pendingRequests->first()->booking_date->format('d/m/Y')]) }}
|
{{ __('booking.pending_for_date', ['date' => $pendingRequests->first()->booking_date->format('d/m/Y')]) }}
|
||||||
</p>
|
</p>
|
||||||
@else
|
@else
|
||||||
<p class="text-sm text-zinc-600 dark:text-zinc-400">
|
<p class="text-sm text-zinc-600">
|
||||||
{{ __('booking.pending_count', ['count' => $pendingRequests->count()]) }}
|
{{ __('booking.pending_count', ['count' => $pendingRequests->count()]) }}
|
||||||
</p>
|
</p>
|
||||||
<ul class="mt-1 list-inside list-disc text-sm text-zinc-500 dark:text-zinc-400">
|
<ul class="mt-1 list-inside list-disc text-sm text-zinc-500">
|
||||||
@foreach($pendingRequests->take(3) as $request)
|
@foreach($pendingRequests->take(3) as $request)
|
||||||
<li>{{ $request->booking_date->format('d/m/Y') }}</li>
|
<li>{{ $request->booking_date->format('d/m/Y') }}</li>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|
@ -224,7 +224,7 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<p class="mt-3 text-xs text-zinc-500 dark:text-zinc-400">
|
<p class="mt-3 text-xs text-zinc-500">
|
||||||
{{ __('booking.limit_message') }}
|
{{ __('booking.limit_message') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -232,19 +232,19 @@ new class extends Component
|
||||||
@if(!$selectedDate || !$selectedTime)
|
@if(!$selectedDate || !$selectedTime)
|
||||||
<!-- Step 1: Calendar Selection -->
|
<!-- Step 1: Calendar Selection -->
|
||||||
<div class="mt-6">
|
<div class="mt-6">
|
||||||
<p class="mb-4 text-zinc-600 dark:text-zinc-400">{{ __('booking.select_date_time') }}</p>
|
<p class="mb-4 text-zinc-600">{{ __('booking.select_date_time') }}</p>
|
||||||
<livewire:availability-calendar :booked-dates="$bookedDates" />
|
<livewire:availability-calendar :booked-dates="$bookedDates" />
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<!-- Step 2: Problem Summary -->
|
<!-- Step 2: Problem Summary -->
|
||||||
<div class="mt-6">
|
<div class="mt-6">
|
||||||
<!-- Selected Time Display -->
|
<!-- Selected Time Display -->
|
||||||
<div class="bg-amber-50 dark:bg-amber-900/20 p-4 rounded-lg mb-6 border border-amber-200 dark:border-amber-800">
|
<div class="bg-amber-50 p-4 rounded-lg mb-6 border border-amber-200">
|
||||||
<div class="flex justify-between items-center">
|
<div class="flex justify-between items-center">
|
||||||
<div>
|
<div>
|
||||||
<p class="font-semibold text-zinc-900 dark:text-zinc-100">{{ __('booking.selected_time') }}</p>
|
<p class="font-semibold text-zinc-900">{{ __('booking.selected_time') }}</p>
|
||||||
<p class="text-zinc-600 dark:text-zinc-400">{{ \Carbon\Carbon::parse($selectedDate)->translatedFormat('l, d M Y') }}</p>
|
<p class="text-zinc-600">{{ \Carbon\Carbon::parse($selectedDate)->translatedFormat('l, d M Y') }}</p>
|
||||||
<p class="text-zinc-600 dark:text-zinc-400">{{ \Carbon\Carbon::parse($selectedTime)->format('g:i A') }}</p>
|
<p class="text-zinc-600">{{ \Carbon\Carbon::parse($selectedTime)->format('g:i A') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<flux:button size="sm" wire:click="clearSelection">
|
<flux:button size="sm" wire:click="clearSelection">
|
||||||
{{ __('common.change') }}
|
{{ __('common.change') }}
|
||||||
|
|
@ -285,7 +285,7 @@ new class extends Component
|
||||||
<!-- Confirmation Step -->
|
<!-- Confirmation Step -->
|
||||||
<flux:callout>
|
<flux:callout>
|
||||||
<flux:heading size="sm">{{ __('booking.confirm_booking') }}</flux:heading>
|
<flux:heading size="sm">{{ __('booking.confirm_booking') }}</flux:heading>
|
||||||
<p class="text-zinc-600 dark:text-zinc-400">{{ __('booking.confirm_message') }}</p>
|
<p class="text-zinc-600">{{ __('booking.confirm_message') }}</p>
|
||||||
|
|
||||||
<div class="mt-4 space-y-2">
|
<div class="mt-4 space-y-2">
|
||||||
<p><strong>{{ __('booking.date') }}:</strong>
|
<p><strong>{{ __('booking.date') }}:</strong>
|
||||||
|
|
@ -297,7 +297,7 @@ new class extends Component
|
||||||
|
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<p><strong>{{ __('booking.problem_summary') }}:</strong></p>
|
<p><strong>{{ __('booking.problem_summary') }}:</strong></p>
|
||||||
<p class="mt-1 text-sm text-zinc-600 dark:text-zinc-400">{{ $problemSummary }}</p>
|
<p class="mt-1 text-sm text-zinc-600">{{ $problemSummary }}</p>
|
||||||
</div>
|
</div>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,18 +65,18 @@ new class extends Component
|
||||||
@if($upcoming->isNotEmpty())
|
@if($upcoming->isNotEmpty())
|
||||||
<div class="space-y-3 sm:space-y-4">
|
<div class="space-y-3 sm:space-y-4">
|
||||||
@foreach($upcoming as $consultation)
|
@foreach($upcoming as $consultation)
|
||||||
<div wire:key="upcoming-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-3 sm:p-4 border border-zinc-200 dark:border-zinc-700">
|
<div wire:key="upcoming-{{ $consultation->id }}" class="bg-white rounded-lg p-3 sm:p-4 border border-zinc-200">
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start gap-4">
|
<div class="flex flex-col sm:flex-row justify-between items-start gap-4">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="flex items-center gap-2 mb-2">
|
<div class="flex items-center gap-2 mb-2">
|
||||||
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
|
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
|
||||||
<span class="font-semibold text-zinc-900 dark:text-zinc-100">
|
<span class="font-semibold text-zinc-900">
|
||||||
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
|
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2 mb-3">
|
<div class="flex items-center gap-2 mb-3">
|
||||||
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
|
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
|
||||||
<span class="text-zinc-600 dark:text-zinc-400">
|
<span class="text-zinc-600">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -116,9 +116,9 @@ new class extends Component
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="empty-state bg-zinc-50 dark:bg-zinc-800/50 rounded-lg">
|
<div class="empty-state bg-zinc-50 rounded-lg">
|
||||||
<flux:icon name="calendar-days" class="empty-state-icon text-zinc-300 dark:text-zinc-600" />
|
<flux:icon name="calendar-days" class="empty-state-icon text-zinc-300" />
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('booking.no_upcoming_consultations') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('booking.no_upcoming_consultations') }}</flux:text>
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<flux:button href="{{ route('client.consultations.book') }}" variant="primary" size="sm" wire:navigate class="w-full sm:w-auto">
|
<flux:button href="{{ route('client.consultations.book') }}" variant="primary" size="sm" wire:navigate class="w-full sm:w-auto">
|
||||||
{{ __('booking.book_consultation') }}
|
{{ __('booking.book_consultation') }}
|
||||||
|
|
@ -135,26 +135,26 @@ new class extends Component
|
||||||
@if($pending->isNotEmpty())
|
@if($pending->isNotEmpty())
|
||||||
<div class="space-y-3 sm:space-y-4">
|
<div class="space-y-3 sm:space-y-4">
|
||||||
@foreach($pending as $consultation)
|
@foreach($pending as $consultation)
|
||||||
<div wire:key="pending-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-3 sm:p-4 border border-zinc-200 dark:border-zinc-700">
|
<div wire:key="pending-{{ $consultation->id }}" class="bg-white rounded-lg p-3 sm:p-4 border border-zinc-200">
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start gap-4">
|
<div class="flex flex-col sm:flex-row justify-between items-start gap-4">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="flex items-center gap-2 mb-2">
|
<div class="flex items-center gap-2 mb-2">
|
||||||
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
|
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
|
||||||
<span class="font-semibold text-zinc-900 dark:text-zinc-100">
|
<span class="font-semibold text-zinc-900">
|
||||||
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
|
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2 mb-2">
|
<div class="flex items-center gap-2 mb-2">
|
||||||
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
|
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
|
||||||
<span class="text-zinc-600 dark:text-zinc-400">
|
<span class="text-zinc-600">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400 mb-2">
|
<div class="text-sm text-zinc-500 mb-2">
|
||||||
{{ __('booking.submitted_on') }}: {{ $consultation->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}
|
{{ __('booking.submitted_on') }}: {{ $consultation->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}
|
||||||
</div>
|
</div>
|
||||||
@if($consultation->problem_summary)
|
@if($consultation->problem_summary)
|
||||||
<p class="text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2">
|
<p class="text-sm text-zinc-600 line-clamp-2">
|
||||||
{{ Str::limit($consultation->problem_summary, 150) }}
|
{{ Str::limit($consultation->problem_summary, 150) }}
|
||||||
</p>
|
</p>
|
||||||
@endif
|
@endif
|
||||||
|
|
@ -167,9 +167,9 @@ new class extends Component
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="empty-state bg-zinc-50 dark:bg-zinc-800/50 rounded-lg">
|
<div class="empty-state bg-zinc-50 rounded-lg">
|
||||||
<flux:icon name="inbox" class="empty-state-icon text-zinc-300 dark:text-zinc-600" />
|
<flux:icon name="inbox" class="empty-state-icon text-zinc-300" />
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('booking.no_pending_requests') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('booking.no_pending_requests') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -181,18 +181,18 @@ new class extends Component
|
||||||
@if($past->isNotEmpty())
|
@if($past->isNotEmpty())
|
||||||
<div class="space-y-3 sm:space-y-4">
|
<div class="space-y-3 sm:space-y-4">
|
||||||
@foreach($past as $consultation)
|
@foreach($past as $consultation)
|
||||||
<div wire:key="past-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-3 sm:p-4 border border-zinc-200 dark:border-zinc-700">
|
<div wire:key="past-{{ $consultation->id }}" class="bg-white rounded-lg p-3 sm:p-4 border border-zinc-200">
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start gap-4">
|
<div class="flex flex-col sm:flex-row justify-between items-start gap-4">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<div class="flex items-center gap-2 mb-2">
|
<div class="flex items-center gap-2 mb-2">
|
||||||
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
|
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
|
||||||
<span class="font-semibold text-zinc-900 dark:text-zinc-100">
|
<span class="font-semibold text-zinc-900">
|
||||||
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
|
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2 mb-3">
|
<div class="flex items-center gap-2 mb-3">
|
||||||
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
|
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
|
||||||
<span class="text-zinc-600 dark:text-zinc-400">
|
<span class="text-zinc-600">
|
||||||
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -226,9 +226,9 @@ new class extends Component
|
||||||
{{ $past->links() }}
|
{{ $past->links() }}
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="empty-state bg-zinc-50 dark:bg-zinc-800/50 rounded-lg">
|
<div class="empty-state bg-zinc-50 rounded-lg">
|
||||||
<flux:icon name="archive-box" class="empty-state-icon text-zinc-300 dark:text-zinc-600" />
|
<flux:icon name="archive-box" class="empty-state-icon text-zinc-300" />
|
||||||
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('booking.no_past_consultations') }}</flux:text>
|
<flux:text class="text-zinc-500">{{ __('booking.no_past_consultations') }}</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</section>
|
</section>
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="space-y-6 p-4 sm:p-6">
|
<div class="space-y-6 p-4 sm:p-6">
|
||||||
{{-- Welcome Section --}}
|
{{-- Welcome Section --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-[#0A1F44] p-4 sm:p-6 text-white dark:border-zinc-700">
|
<div class="rounded-lg border border-zinc-200 bg-[#0A1F44] p-4 sm:p-6 text-white">
|
||||||
<flux:heading size="xl" class="text-white text-lg sm:text-xl lg:text-2xl">
|
<flux:heading size="xl" class="text-white text-lg sm:text-xl lg:text-2xl">
|
||||||
{{ __('client.dashboard.welcome', ['name' => auth()->user()->full_name]) }}
|
{{ __('client.dashboard.welcome', ['name' => auth()->user()->full_name]) }}
|
||||||
</flux:heading>
|
</flux:heading>
|
||||||
|
|
@ -45,7 +45,7 @@ new class extends Component {
|
||||||
{{-- Widgets Grid --}}
|
{{-- Widgets Grid --}}
|
||||||
<div class="grid gap-4 sm:gap-6 grid-cols-1 sm:grid-cols-2">
|
<div class="grid gap-4 sm:gap-6 grid-cols-1 sm:grid-cols-2">
|
||||||
{{-- Upcoming Consultation Widget --}}
|
{{-- Upcoming Consultation Widget --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm ">
|
||||||
<flux:heading size="lg" class="mb-4 text-base sm:text-lg">
|
<flux:heading size="lg" class="mb-4 text-base sm:text-lg">
|
||||||
{{ __('client.dashboard.upcoming_consultation') }}
|
{{ __('client.dashboard.upcoming_consultation') }}
|
||||||
</flux:heading>
|
</flux:heading>
|
||||||
|
|
@ -106,7 +106,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Active Cases Widget --}}
|
{{-- Active Cases Widget --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm ">
|
||||||
<flux:heading size="lg" class="mb-4 text-base sm:text-lg">
|
<flux:heading size="lg" class="mb-4 text-base sm:text-lg">
|
||||||
{{ __('client.dashboard.active_cases') }}
|
{{ __('client.dashboard.active_cases') }}
|
||||||
</flux:heading>
|
</flux:heading>
|
||||||
|
|
@ -122,8 +122,8 @@ new class extends Component {
|
||||||
$latestUpdate = $latestTimeline->updates()->reorder()->latest()->first();
|
$latestUpdate = $latestTimeline->updates()->reorder()->latest()->first();
|
||||||
@endphp
|
@endphp
|
||||||
@if ($latestUpdate)
|
@if ($latestUpdate)
|
||||||
<div class="rounded-lg bg-zinc-50 p-3 dark:bg-zinc-800">
|
<div class="rounded-lg bg-zinc-50 p-3">
|
||||||
<flux:text size="sm" class="text-zinc-600 dark:text-zinc-400">
|
<flux:text size="sm" class="text-zinc-600">
|
||||||
{{ __('client.dashboard.latest_update') }}:
|
{{ __('client.dashboard.latest_update') }}:
|
||||||
</flux:text>
|
</flux:text>
|
||||||
<flux:text class="mt-1">
|
<flux:text class="mt-1">
|
||||||
|
|
@ -152,7 +152,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Recent Updates Widget --}}
|
{{-- Recent Updates Widget --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm ">
|
||||||
<flux:heading size="lg" class="mb-4 text-base sm:text-lg">
|
<flux:heading size="lg" class="mb-4 text-base sm:text-lg">
|
||||||
{{ __('client.dashboard.recent_updates') }}
|
{{ __('client.dashboard.recent_updates') }}
|
||||||
</flux:heading>
|
</flux:heading>
|
||||||
|
|
@ -160,7 +160,7 @@ new class extends Component {
|
||||||
@if ($recentUpdates->isNotEmpty())
|
@if ($recentUpdates->isNotEmpty())
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
@foreach ($recentUpdates as $update)
|
@foreach ($recentUpdates as $update)
|
||||||
<div class="border-b border-zinc-100 pb-3 last:border-0 last:pb-0 dark:border-zinc-800">
|
<div class="border-b border-zinc-100 pb-3 last:border-0 last:pb-0 ">
|
||||||
<div class="flex items-start justify-between gap-2">
|
<div class="flex items-start justify-between gap-2">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<flux:text size="sm" class="font-medium">
|
<flux:text size="sm" class="font-medium">
|
||||||
|
|
@ -193,7 +193,7 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Booking Status Widget --}}
|
{{-- Booking Status Widget --}}
|
||||||
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm ">
|
||||||
<flux:heading size="lg" class="mb-4 text-base sm:text-lg">
|
<flux:heading size="lg" class="mb-4 text-base sm:text-lg">
|
||||||
{{ __('client.dashboard.booking_status') }}
|
{{ __('client.dashboard.booking_status') }}
|
||||||
</flux:heading>
|
</flux:heading>
|
||||||
|
|
@ -208,18 +208,18 @@ new class extends Component {
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<div class="rounded-lg p-3 {{ $canBookToday ? 'bg-green-50 dark:bg-green-900/20' : 'bg-amber-50 dark:bg-amber-900/20' }}">
|
<div class="rounded-lg p-3 {{ $canBookToday ? 'bg-green-50' : 'bg-amber-50' }}">
|
||||||
@if ($canBookToday)
|
@if ($canBookToday)
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<flux:icon name="check-circle" class="h-5 w-5 text-green-600" />
|
<flux:icon name="check-circle" class="h-5 w-5 text-green-600" />
|
||||||
<flux:text class="text-green-700 dark:text-green-400">
|
<flux:text class="text-green-700">
|
||||||
{{ __('client.dashboard.can_book') }}
|
{{ __('client.dashboard.can_book') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<flux:icon name="information-circle" class="h-5 w-5 text-amber-600" />
|
<flux:icon name="information-circle" class="h-5 w-5 text-amber-600" />
|
||||||
<flux:text class="text-amber-700 dark:text-amber-400">
|
<flux:text class="text-amber-700">
|
||||||
{{ __('client.dashboard.cannot_book') }}
|
{{ __('client.dashboard.cannot_book') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -39,66 +39,66 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Profile Information Card --}}
|
{{-- Profile Information Card --}}
|
||||||
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
|
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6 shadow-sm">
|
||||||
@if ($isIndividual)
|
@if ($isIndividual)
|
||||||
<dl class="space-y-4">
|
<dl class="space-y-4">
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.full_name') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.full_name') }}</dt>
|
||||||
<dd class="text-lg font-medium">{{ $user->full_name }}</dd>
|
<dd class="text-lg font-medium">{{ $user->full_name }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.national_id') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.national_id') }}</dt>
|
||||||
<dd>{{ $user->national_id }}</dd>
|
<dd>{{ $user->national_id }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.email') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.email') }}</dt>
|
||||||
<dd>{{ $user->email }}</dd>
|
<dd>{{ $user->email }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.phone') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.phone') }}</dt>
|
||||||
<dd>{{ $user->phone }}</dd>
|
<dd>{{ $user->phone }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.preferred_language') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.preferred_language') }}</dt>
|
||||||
<dd>{{ $user->preferred_language === 'ar' ? __('profile.arabic') : __('profile.english') }}</dd>
|
<dd>{{ $user->preferred_language === 'ar' ? __('profile.arabic') : __('profile.english') }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.member_since') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.member_since') }}</dt>
|
||||||
<dd>{{ $user->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}</dd>
|
<dd>{{ $user->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}</dd>
|
||||||
</div>
|
</div>
|
||||||
</dl>
|
</dl>
|
||||||
@else
|
@else
|
||||||
<dl class="space-y-4">
|
<dl class="space-y-4">
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.company_name') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.company_name') }}</dt>
|
||||||
<dd class="text-lg font-medium">{{ $user->company_name }}</dd>
|
<dd class="text-lg font-medium">{{ $user->company_name }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.registration_number') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.registration_number') }}</dt>
|
||||||
<dd>{{ $user->company_cert_number }}</dd>
|
<dd>{{ $user->company_cert_number }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.contact_person') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.contact_person') }}</dt>
|
||||||
<dd>{{ $user->contact_person_name }}</dd>
|
<dd>{{ $user->contact_person_name }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.contact_person_id') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.contact_person_id') }}</dt>
|
||||||
<dd>{{ $user->contact_person_id }}</dd>
|
<dd>{{ $user->contact_person_id }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.email') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.email') }}</dt>
|
||||||
<dd>{{ $user->email }}</dd>
|
<dd>{{ $user->email }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.phone') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.phone') }}</dt>
|
||||||
<dd>{{ $user->phone }}</dd>
|
<dd>{{ $user->phone }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.preferred_language') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.preferred_language') }}</dt>
|
||||||
<dd>{{ $user->preferred_language === 'ar' ? __('profile.arabic') : __('profile.english') }}</dd>
|
<dd>{{ $user->preferred_language === 'ar' ? __('profile.arabic') : __('profile.english') }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.member_since') }}</dt>
|
<dt class="text-sm text-zinc-500">{{ __('profile.member_since') }}</dt>
|
||||||
<dd>{{ $user->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}</dd>
|
<dd>{{ $user->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}</dd>
|
||||||
</div>
|
</div>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
|
||||||
|
|
@ -34,17 +34,17 @@ new class extends Component
|
||||||
{{-- Active Timelines --}}
|
{{-- Active Timelines --}}
|
||||||
@if($activeTimelines->total() > 0)
|
@if($activeTimelines->total() > 0)
|
||||||
<div class="mb-6 sm:mb-8">
|
<div class="mb-6 sm:mb-8">
|
||||||
<h2 class="text-base sm:text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-4">{{ __('client.active_cases') }}</h2>
|
<h2 class="text-base sm:text-lg font-semibold text-zinc-900 mb-4">{{ __('client.active_cases') }}</h2>
|
||||||
<div class="space-y-3 sm:space-y-4">
|
<div class="space-y-3 sm:space-y-4">
|
||||||
@foreach($activeTimelines as $timeline)
|
@foreach($activeTimelines as $timeline)
|
||||||
<div wire:key="timeline-{{ $timeline->id }}" class="bg-white dark:bg-zinc-800 p-3 sm:p-4 rounded-lg border-s-4 border-amber-500 shadow-sm">
|
<div wire:key="timeline-{{ $timeline->id }}" class="bg-white p-3 sm:p-4 rounded-lg border-s-4 border-amber-500 shadow-sm">
|
||||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3">
|
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3">
|
||||||
<div class="flex-1 min-w-0">
|
<div class="flex-1 min-w-0">
|
||||||
<h3 class="font-medium text-zinc-900 dark:text-zinc-100 truncate">{{ $timeline->case_name }}</h3>
|
<h3 class="font-medium text-zinc-900 truncate">{{ $timeline->case_name }}</h3>
|
||||||
@if($timeline->case_reference)
|
@if($timeline->case_reference)
|
||||||
<p class="text-sm text-zinc-600 dark:text-zinc-400">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
|
<p class="text-sm text-zinc-600">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
|
||||||
@endif
|
@endif
|
||||||
<p class="text-xs sm:text-sm text-zinc-500 dark:text-zinc-500 mt-1">
|
<p class="text-xs sm:text-sm text-zinc-500 mt-1">
|
||||||
{{ __('client.updates') }}: {{ $timeline->updates_count }}
|
{{ __('client.updates') }}: {{ $timeline->updates_count }}
|
||||||
@if($timeline->updates->first())
|
@if($timeline->updates->first())
|
||||||
· {{ __('client.last_update') }}: {{ $timeline->updates->first()->created_at->diffForHumans() }}
|
· {{ __('client.last_update') }}: {{ $timeline->updates->first()->created_at->diffForHumans() }}
|
||||||
|
|
@ -72,17 +72,17 @@ new class extends Component
|
||||||
{{-- Archived Timelines --}}
|
{{-- Archived Timelines --}}
|
||||||
@if($archivedTimelines->total() > 0)
|
@if($archivedTimelines->total() > 0)
|
||||||
<div>
|
<div>
|
||||||
<h2 class="text-base sm:text-lg font-semibold text-zinc-600 dark:text-zinc-400 mb-4">{{ __('client.archived_cases') }}</h2>
|
<h2 class="text-base sm:text-lg font-semibold text-zinc-600 mb-4">{{ __('client.archived_cases') }}</h2>
|
||||||
<div class="space-y-3 sm:space-y-4 opacity-75">
|
<div class="space-y-3 sm:space-y-4 opacity-75">
|
||||||
@foreach($archivedTimelines as $timeline)
|
@foreach($archivedTimelines as $timeline)
|
||||||
<div wire:key="timeline-{{ $timeline->id }}" class="bg-zinc-50 dark:bg-zinc-900 p-3 sm:p-4 rounded-lg shadow-sm">
|
<div wire:key="timeline-{{ $timeline->id }}" class="bg-zinc-50 p-3 sm:p-4 rounded-lg shadow-sm">
|
||||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3">
|
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3">
|
||||||
<div class="flex-1 min-w-0">
|
<div class="flex-1 min-w-0">
|
||||||
<h3 class="font-medium text-zinc-700 dark:text-zinc-300 truncate">{{ $timeline->case_name }}</h3>
|
<h3 class="font-medium text-zinc-700 truncate">{{ $timeline->case_name }}</h3>
|
||||||
@if($timeline->case_reference)
|
@if($timeline->case_reference)
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-500">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
|
<p class="text-sm text-zinc-500">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
|
||||||
@endif
|
@endif
|
||||||
<p class="text-xs sm:text-sm text-zinc-400 dark:text-zinc-600 mt-1">
|
<p class="text-xs sm:text-sm text-zinc-400 mt-1">
|
||||||
{{ __('client.updates') }}: {{ $timeline->updates_count }}
|
{{ __('client.updates') }}: {{ $timeline->updates_count }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -107,8 +107,8 @@ new class extends Component
|
||||||
{{-- Empty State --}}
|
{{-- Empty State --}}
|
||||||
@if($activeTimelines->total() === 0 && $archivedTimelines->total() === 0)
|
@if($activeTimelines->total() === 0 && $archivedTimelines->total() === 0)
|
||||||
<div class="empty-state">
|
<div class="empty-state">
|
||||||
<flux:icon name="folder-open" class="empty-state-icon text-zinc-300 dark:text-zinc-600" />
|
<flux:icon name="folder-open" class="empty-state-icon text-zinc-300" />
|
||||||
<p class="text-zinc-500 dark:text-zinc-400">{{ __('client.no_cases_yet') }}</p>
|
<p class="text-zinc-500">{{ __('client.no_cases_yet') }}</p>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ new class extends Component
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="xl">{{ $timeline->case_name }}</flux:heading>
|
<flux:heading size="xl">{{ $timeline->case_name }}</flux:heading>
|
||||||
@if($timeline->case_reference)
|
@if($timeline->case_reference)
|
||||||
<p class="text-zinc-600 dark:text-zinc-400">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
|
<p class="text-zinc-600 ">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
<flux:badge :variant="$timeline->status->value === 'active' ? 'success' : 'default'">
|
<flux:badge :variant="$timeline->status->value === 'active' ? 'success' : 'default'">
|
||||||
|
|
@ -39,19 +39,19 @@ new class extends Component
|
||||||
@forelse($timeline->updates as $update)
|
@forelse($timeline->updates as $update)
|
||||||
<div wire:key="update-{{ $update->id }}" class="relative ps-12">
|
<div wire:key="update-{{ $update->id }}" class="relative ps-12">
|
||||||
{{-- Dot --}}
|
{{-- Dot --}}
|
||||||
<div class="absolute start-2 top-2 w-4 h-4 rounded-full bg-amber-500 border-4 border-amber-50 dark:border-zinc-900"></div>
|
<div class="absolute start-2 top-2 w-4 h-4 rounded-full bg-amber-500 border-4 border-amber-50 "></div>
|
||||||
|
|
||||||
<div class="bg-white dark:bg-zinc-800 p-4 rounded-lg shadow-sm">
|
<div class="bg-white p-4 rounded-lg shadow-sm">
|
||||||
<div class="text-sm text-zinc-500 dark:text-zinc-400 mb-2">
|
<div class="text-sm text-zinc-500 mb-2">
|
||||||
{{ $update->created_at->translatedFormat('l, d M Y - g:i A') }}
|
{{ $update->created_at->translatedFormat('l, d M Y - g:i A') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="prose prose-sm dark:prose-invert max-w-none">
|
<div class="prose prose-sm max-w-none">
|
||||||
{!! $update->update_text !!}
|
{!! $update->update_text !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<p class="text-center text-zinc-500 dark:text-zinc-400 py-8">
|
<p class="text-center text-zinc-500 py-8">
|
||||||
{{ __('client.no_updates_yet') }}
|
{{ __('client.no_updates_yet') }}
|
||||||
</p>
|
</p>
|
||||||
@endforelse
|
@endforelse
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ new #[Layout('components.layouts.public')] class extends Component
|
||||||
{{ __('booking.success_title') }}
|
{{ __('booking.success_title') }}
|
||||||
</flux:heading>
|
</flux:heading>
|
||||||
|
|
||||||
<p class="text-zinc-600 dark:text-zinc-400 mb-6">
|
<p class="text-zinc-600 mb-6">
|
||||||
{{ __('booking.success_message') }}
|
{{ __('booking.success_message') }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -207,23 +207,23 @@ new #[Layout('components.layouts.public')] class extends Component
|
||||||
<p class="text-body">{{ __('booking.guest_intro') }}</p>
|
<p class="text-body">{{ __('booking.guest_intro') }}</p>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
<p class="mb-4 text-zinc-600 dark:text-zinc-400">
|
<p class="mb-4 text-zinc-600">
|
||||||
{{ __('booking.select_date_time') }}
|
{{ __('booking.select_date_time') }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<livewire:availability-calendar />
|
<livewire:availability-calendar />
|
||||||
@else
|
@else
|
||||||
{{-- Step 2+: Contact Form & Confirmation --}}
|
{{-- Step 2+: Contact Form & Confirmation --}}
|
||||||
<div class="bg-amber-50 dark:bg-amber-900/20 p-4 rounded-lg mb-6 border border-amber-200 dark:border-amber-800">
|
<div class="bg-amber-50 p-4 rounded-lg mb-6 border border-amber-200">
|
||||||
<div class="flex justify-between items-center">
|
<div class="flex justify-between items-center">
|
||||||
<div>
|
<div>
|
||||||
<p class="font-semibold text-zinc-900 dark:text-zinc-100">
|
<p class="font-semibold text-zinc-900">
|
||||||
{{ __('booking.selected_time') }}
|
{{ __('booking.selected_time') }}
|
||||||
</p>
|
</p>
|
||||||
<p class="text-zinc-600 dark:text-zinc-400">
|
<p class="text-zinc-600">
|
||||||
{{ \Carbon\Carbon::parse($selectedDate)->translatedFormat('l, d M Y') }}
|
{{ \Carbon\Carbon::parse($selectedDate)->translatedFormat('l, d M Y') }}
|
||||||
</p>
|
</p>
|
||||||
<p class="text-zinc-600 dark:text-zinc-400">
|
<p class="text-zinc-600">
|
||||||
{{ \Carbon\Carbon::parse($selectedTime)->format('g:i A') }}
|
{{ \Carbon\Carbon::parse($selectedTime)->format('g:i A') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -292,7 +292,7 @@ new #[Layout('components.layouts.public')] class extends Component
|
||||||
{{-- Confirmation Step --}}
|
{{-- Confirmation Step --}}
|
||||||
<flux:callout>
|
<flux:callout>
|
||||||
<flux:heading size="sm" class="text-body">{{ __('booking.confirm_booking') }}</flux:heading>
|
<flux:heading size="sm" class="text-body">{{ __('booking.confirm_booking') }}</flux:heading>
|
||||||
<p class="text-zinc-600 dark:text-zinc-400">{{ __('booking.confirm_message') }}</p>
|
<p class="text-zinc-600">{{ __('booking.confirm_message') }}</p>
|
||||||
|
|
||||||
<div class="mt-4 space-y-2">
|
<div class="mt-4 space-y-2">
|
||||||
<p><strong>{{ __('booking.guest_name') }}:</strong> {{ $guestName }}</p>
|
<p><strong>{{ __('booking.guest_name') }}:</strong> {{ $guestName }}</p>
|
||||||
|
|
@ -307,7 +307,7 @@ new #[Layout('components.layouts.public')] class extends Component
|
||||||
|
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<p><strong>{{ __('booking.problem_summary') }}:</strong></p>
|
<p><strong>{{ __('booking.problem_summary') }}:</strong></p>
|
||||||
<p class="mt-1 text-sm text-zinc-600 dark:text-zinc-400">{{ $problemSummary }}</p>
|
<p class="mt-1 text-sm text-zinc-600">{{ $problemSummary }}</p>
|
||||||
</div>
|
</div>
|
||||||
</flux:callout>
|
</flux:callout>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Livewire\Volt\Component;
|
|
||||||
|
|
||||||
new class extends Component {
|
|
||||||
//
|
|
||||||
}; ?>
|
|
||||||
|
|
||||||
<section class="w-full">
|
|
||||||
@include('partials.settings-heading')
|
|
||||||
|
|
||||||
<x-settings.layout :heading="__('Appearance')" :subheading="__('Update the appearance settings for your account')">
|
|
||||||
<flux:radio.group x-data variant="segmented" x-model="$flux.appearance">
|
|
||||||
<flux:radio value="light" icon="sun">{{ __('Light') }}</flux:radio>
|
|
||||||
<flux:radio value="dark" icon="moon">{{ __('Dark') }}</flux:radio>
|
|
||||||
<flux:radio value="system" icon="computer-desktop">{{ __('System') }}</flux:radio>
|
|
||||||
</flux:radio.group>
|
|
||||||
</x-settings.layout>
|
|
||||||
</section>
|
|
||||||
|
|
@ -113,7 +113,7 @@ new class extends Component {
|
||||||
</flux:text>
|
</flux:text>
|
||||||
|
|
||||||
@if (session('status') === 'verification-link-sent')
|
@if (session('status') === 'verification-link-sent')
|
||||||
<flux:text class="mt-2 font-medium !dark:text-green-400 !text-green-600">
|
<flux:text class="mt-2 font-medium !text-green-600">
|
||||||
{{ __('A new verification link has been sent to your email address.') }}
|
{{ __('A new verification link has been sent to your email address.') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
@endif
|
@endif
|
||||||
|
|
@ -144,7 +144,7 @@ new class extends Component {
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<flux:heading size="lg">{{ __('Email Configuration') }}</flux:heading>
|
<flux:heading size="lg">{{ __('Email Configuration') }}</flux:heading>
|
||||||
<flux:text class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
|
<flux:text class="mt-1 text-sm text-zinc-500">
|
||||||
{{ __('Verify your email configuration is working correctly.') }}
|
{{ __('Verify your email configuration is working correctly.') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
|
|
||||||
|
|
@ -166,18 +166,18 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2">
|
<div class="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2">
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-600 dark:text-zinc-400">
|
<flux:text class="text-sm font-medium text-zinc-600">
|
||||||
{{ __('admin.sender_name') }}
|
{{ __('admin.sender_name') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
<flux:text class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">
|
<flux:text class="mt-1 font-medium text-zinc-900">
|
||||||
{{ config('mail.from.name') }}
|
{{ config('mail.from.name') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<flux:text class="text-sm font-medium text-zinc-600 dark:text-zinc-400">
|
<flux:text class="text-sm font-medium text-zinc-600">
|
||||||
{{ __('admin.sender_email') }}
|
{{ __('admin.sender_email') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
<flux:text class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">
|
<flux:text class="mt-1 font-medium text-zinc-900">
|
||||||
{{ config('mail.from.address') }}
|
{{ config('mail.from.address') }}
|
||||||
</flux:text>
|
</flux:text>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -239,21 +239,21 @@ new class extends Component {
|
||||||
>
|
>
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div class="flex flex-col items-center space-y-4">
|
<div class="flex flex-col items-center space-y-4">
|
||||||
<div class="p-0.5 w-auto rounded-full border border-stone-100 dark:border-stone-600 bg-white dark:bg-stone-800 shadow-sm">
|
<div class="p-0.5 w-auto rounded-full border border-stone-100 bg-white shadow-sm">
|
||||||
<div class="p-2.5 rounded-full border border-stone-200 dark:border-stone-600 overflow-hidden bg-stone-100 dark:bg-stone-200 relative">
|
<div class="p-2.5 rounded-full border border-stone-200 overflow-hidden bg-stone-100 relative">
|
||||||
<div class="flex items-stretch absolute inset-0 w-full h-full divide-x [&>div]:flex-1 divide-stone-200 dark:divide-stone-300 justify-around opacity-50">
|
<div class="flex items-stretch absolute inset-0 w-full h-full divide-x [&>div]:flex-1 divide-stone-200 justify-around opacity-50">
|
||||||
@for ($i = 1; $i <= 5; $i++)
|
@for ($i = 1; $i <= 5; $i++)
|
||||||
<div></div>
|
<div></div>
|
||||||
@endfor
|
@endfor
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-col items-stretch absolute w-full h-full divide-y [&>div]:flex-1 inset-0 divide-stone-200 dark:divide-stone-300 justify-around opacity-50">
|
<div class="flex flex-col items-stretch absolute w-full h-full divide-y [&>div]:flex-1 inset-0 divide-stone-200 justify-around opacity-50">
|
||||||
@for ($i = 1; $i <= 5; $i++)
|
@for ($i = 1; $i <= 5; $i++)
|
||||||
<div></div>
|
<div></div>
|
||||||
@endfor
|
@endfor
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<flux:icon.qr-code class="relative z-20 dark:text-accent-foreground"/>
|
<flux:icon.qr-code class="relative z-20"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -301,9 +301,9 @@ new class extends Component {
|
||||||
@enderror
|
@enderror
|
||||||
|
|
||||||
<div class="flex justify-center">
|
<div class="flex justify-center">
|
||||||
<div class="relative w-64 overflow-hidden border rounded-lg border-stone-200 dark:border-stone-700 aspect-square">
|
<div class="relative w-64 overflow-hidden border rounded-lg border-stone-200 aspect-square">
|
||||||
@empty($qrCodeSvg)
|
@empty($qrCodeSvg)
|
||||||
<div class="absolute inset-0 flex items-center justify-center bg-white dark:bg-stone-700 animate-pulse">
|
<div class="absolute inset-0 flex items-center justify-center bg-white animate-pulse">
|
||||||
<flux:icon.loading/>
|
<flux:icon.loading/>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
|
|
@ -329,8 +329,8 @@ new class extends Component {
|
||||||
|
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
<div class="relative flex items-center justify-center w-full">
|
<div class="relative flex items-center justify-center w-full">
|
||||||
<div class="absolute inset-0 w-full h-px top-1/2 bg-stone-200 dark:bg-stone-600"></div>
|
<div class="absolute inset-0 w-full h-px top-1/2 bg-stone-200"></div>
|
||||||
<span class="relative px-2 text-sm bg-white dark:bg-stone-800 text-stone-600 dark:text-stone-400">
|
<span class="relative px-2 text-sm bg-white text-stone-600">
|
||||||
{{ __('or, enter the code manually') }}
|
{{ __('or, enter the code manually') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -350,9 +350,9 @@ new class extends Component {
|
||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<div class="flex items-stretch w-full border rounded-xl dark:border-stone-700">
|
<div class="flex items-stretch w-full border rounded-xl">
|
||||||
@empty($manualSetupKey)
|
@empty($manualSetupKey)
|
||||||
<div class="flex items-center justify-center w-full p-3 bg-stone-100 dark:bg-stone-700">
|
<div class="flex items-center justify-center w-full p-3 bg-stone-100">
|
||||||
<flux:icon.loading variant="mini"/>
|
<flux:icon.loading variant="mini"/>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
|
|
@ -360,12 +360,12 @@ new class extends Component {
|
||||||
type="text"
|
type="text"
|
||||||
readonly
|
readonly
|
||||||
value="{{ $manualSetupKey }}"
|
value="{{ $manualSetupKey }}"
|
||||||
class="w-full p-3 bg-transparent outline-none text-stone-900 dark:text-stone-100"
|
class="w-full p-3 bg-transparent outline-none text-stone-900"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
@click="copy()"
|
@click="copy()"
|
||||||
class="px-3 transition-colors border-l cursor-pointer border-stone-200 dark:border-stone-600"
|
class="px-3 transition-colors border-l cursor-pointer border-stone-200"
|
||||||
>
|
>
|
||||||
<flux:icon.document-duplicate x-show="!copied" variant="outline"></flux:icon>
|
<flux:icon.document-duplicate x-show="!copied" variant="outline"></flux:icon>
|
||||||
<flux:icon.check
|
<flux:icon.check
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ new class extends Component {
|
||||||
}; ?>
|
}; ?>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="py-6 space-y-6 border shadow-sm rounded-xl border-zinc-200 dark:border-white/10"
|
class="py-6 space-y-6 border shadow-sm rounded-xl border-zinc-200"
|
||||||
wire:cloak
|
wire:cloak
|
||||||
x-data="{ showRecoveryCodes: false }"
|
x-data="{ showRecoveryCodes: false }"
|
||||||
>
|
>
|
||||||
|
|
@ -112,7 +112,7 @@ new class extends Component {
|
||||||
|
|
||||||
@if (filled($recoveryCodes))
|
@if (filled($recoveryCodes))
|
||||||
<div
|
<div
|
||||||
class="grid gap-1 p-4 font-mono text-sm rounded-lg bg-zinc-100 dark:bg-white/5"
|
class="grid gap-1 p-4 font-mono text-sm rounded-lg bg-zinc-100"
|
||||||
role="list"
|
role="list"
|
||||||
aria-label="Recovery codes"
|
aria-label="Recovery codes"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<x-layouts.public>
|
<x-layouts.public>
|
||||||
<div class="py-8">
|
<div class="py-8">
|
||||||
<h1 class="mb-6 text-3xl font-bold text-text dark:text-off-white">{{ $page->getTitle() }}</h1>
|
<h1 class="mb-6 text-3xl font-bold text-text">{{ $page->getTitle() }}</h1>
|
||||||
<div class="prose prose-brand max-w-none rounded-lg bg-card p-8 shadow-card dark:bg-zinc-800 dark:prose-invert" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}">
|
<div class="prose prose-brand max-w-none rounded-lg bg-card p-8 shadow-card" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}">
|
||||||
@if ($page->getContent())
|
@if ($page->getContent())
|
||||||
{!! clean($page->getContent()) !!}
|
{!! clean($page->getContent()) !!}
|
||||||
@else
|
@else
|
||||||
<p class="text-body dark:text-zinc-400">{{ __('pages.content_coming_soon') }}</p>
|
<p class="text-body">{{ __('pages.content_coming_soon') }}</p>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
<p class="mt-4 text-sm text-body/70 dark:text-zinc-400">
|
<p class="mt-4 text-sm text-body/70">
|
||||||
{{ __('pages.last_updated') }}: {{ $page->updated_at->format('M d, Y') }}
|
{{ __('pages.last_updated') }}: {{ $page->updated_at->format('M d, Y') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -20,4 +20,3 @@
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
|
||||||
|
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||||
@fluxAppearance
|
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,6 @@ Route::middleware(['auth', 'active'])->group(function () {
|
||||||
|
|
||||||
Volt::route('settings/profile', 'settings.profile')->name('profile.edit');
|
Volt::route('settings/profile', 'settings.profile')->name('profile.edit');
|
||||||
Volt::route('settings/password', 'settings.password')->name('user-password.edit');
|
Volt::route('settings/password', 'settings.password')->name('user-password.edit');
|
||||||
Volt::route('settings/appearance', 'settings.appearance')->name('appearance.edit');
|
|
||||||
|
|
||||||
Volt::route('settings/two-factor', 'settings.two-factor')
|
Volt::route('settings/two-factor', 'settings.two-factor')
|
||||||
->middleware(
|
->middleware(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue