@php $isEdit = isset($service) && $service->exists && $service->id; $formAction = $isEdit ? route('admin.services.update', $service->id) : route('admin.services.store'); $formMethod = $isEdit ? 'PUT' : 'POST'; $formTitle = $isEdit ? 'Edit Service' : 'Create Service'; $submitText = $isEdit ? 'Update Service' : 'Save Service'; // ✅ Safe decode function function safeDecode($data) { if (is_null($data)) { return []; } if (is_array($data)) { return $data; } if (is_string($data)) { $decoded = json_decode($data, true); return is_array($decoded) ? $decoded : []; } return []; } // ✅ Use safeDecode for all JSON fields $serviceCards = safeDecode($service->service_cards ?? null); $processSteps = safeDecode($service->process_steps ?? null); $faqs = safeDecode($service->faqs ?? null); $whyChooseUs = safeDecode($service->why_choose_us ?? null); $packages = safeDecode($service->packages ?? null); $customSections = safeDecode($service->custom_sections ?? null); $galleryImages = safeDecode($service->gallery_images ?? null); @endphp @if ($errors->any())
Validation Errors!
@endif @if (session('success'))
{{ session('success') }}
@endif @if (session('error'))
{{ session('error') }}
@endif

{{ $formTitle }}

Back to List
@csrf @if($isEdit) @method('PUT') @endif
Basic Information
@error('title') {{ $message }} @enderror
{{ url('/') }}/services/
@error('slug') {{ $message }} @enderror
Preview: @if(isset($service) && $service->slug) {{ $service->slug }} @else auto-generated @endif
@error('short_description') {{ $message }} @enderror Maximum 500 characters. This appears in service listings.
@error('description') {{ $message }} @enderror
Hero Section
@error('hero_title') {{ $message }} @enderror
@error('hero_subtitle') {{ $message }} @enderror
@error('hero_video_url') {{ $message }} @enderror
@if(isset($service) && $service->hero_image)
Hero Image
Current Image
Click below to change
@else

Click to upload hero image

PNG, JPG, WEBP (Max 2MB)
@endif
@error('hero_image') {{ $message }} @enderror Max 2MB. Allowed: jpeg, png, jpg, gif, webp
Service Cards
@php $oldServiceCards = old('service_cards', $serviceCards); @endphp @if(!empty($oldServiceCards) && is_array($oldServiceCards)) @foreach($oldServiceCards as $index => $card)
Card #{{ $loop->iteration }}
@endforeach @else
Click "Add Card" to add service cards.
@endif
Process Steps
@php $oldProcessSteps = old('process_steps', $processSteps); @endphp @if(!empty($oldProcessSteps) && is_array($oldProcessSteps)) @foreach($oldProcessSteps as $index => $step)
Step #{{ $loop->iteration }}
@endforeach @else
Click "Add Step" to add process steps.
@endif
Why Choose Us
@php $oldWhyChoose = old('why_choose_us', $whyChooseUs); @endphp @if(!empty($oldWhyChoose) && is_array($oldWhyChoose)) @foreach($oldWhyChoose as $index => $item)
Point #{{ $loop->iteration }}
@endforeach @else
Click "Add Point" to add why choose us items.
@endif
FAQs
@php $oldFaqs = old('faqs', $faqs); @endphp @if(!empty($oldFaqs) && is_array($oldFaqs)) @foreach($oldFaqs as $index => $faq)
FAQ #{{ $loop->iteration }}
@endforeach @else
Click "Add FAQ" to add frequently asked questions.
@endif
Gallery Images
@error('gallery_images.*') {{ $message }} @enderror Max 2MB each. Allowed: jpeg, png, jpg, gif, webp. You can select multiple images.
@if(!empty($galleryImages)) @endif
Call to Action
@error('cta_text') {{ $message }} @enderror
@error('cta_url') {{ $message }} @enderror
Status
@error('status') {{ $message }} @enderror
@error('sort_order') {{ $message }} @enderror Lower numbers appear first.
SEO Settings
Optional
0 / 60 characters @error('meta_title') {{ $message }} @enderror
0 / 160 characters @error('meta_description') {{ $message }} @enderror
@error('meta_keywords') {{ $message }} @enderror
@php $user = Auth::guard('admin')->user(); $isAdmin = $user && ($user->id == 1 || $user->role_id == 2); $isUser = $user && $user->id != 1 && $user->role_id != 2; @endphp @if(isset($service) && $service->exists) {{-- EDIT MODE --}} @if($service->isLocked()) @else @if($isAdmin) @elseif($isUser) Your changes will be sent for approval. @endif @endif @else {{-- CREATE MODE --}} @endif Cancel