Files
gujurly.com/app/Filament/Pages/ManageSolutions.php

386 lines
15 KiB
PHP

<?php
namespace App\Filament\Pages;
use App\Settings\SolutionSettings;
use App\Models\UserRole;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Pages\SettingsPage;
use Illuminate\Contracts\Support\Htmlable;
class ManageSolutions extends SettingsPage
{
protected static ?string $navigationGroup = 'Home';
protected static ?string $navigationIcon = 'heroicon-o-wrench-screwdriver';
protected static string $settings = SolutionSettings::class;
public function form(Form $form): Form
{
return $form
->schema([
Section::make('Solutions Section')
->description('Manage the content for the solutions section on the homepage.')
->icon('heroicon-o-puzzle-piece')
->schema([
TextInput::make('solutions_subtitle')
->label('Subtitle')
->required()
->maxLength(100),
TextInput::make('solutions_header')
->label('Header')
->required()
->maxLength(255),
FileUpload::make('solutions_image')
->label('Image 1060x453')
->image()
->directory('solutions')
->required(),
Grid::make()->schema([
TextInput::make('solutions_button_text')
->label('Button Text')
->required()
->maxLength(50),
TextInput::make('solutions_button_url')
->label('Button URL')
->required()
->maxLength(255)
->url(),
])->columns(2),
]),
Section::make('Solution Items')
->description('Manage individual solution items.')
->icon('heroicon-o-cube')
->schema([
Repeater::make('solution_items')
->label('Solution Items')
->schema([
Select::make('icon_class')
->label('Icon Class')
->searchable()
->helperText('e.g., flaticon-it-department. Refer to Flaticon for available icons.')
->required()
->options(self::getIconOptions()),
TextInput::make('title')
->label('Title')
->required()
->maxLength(100),
TextInput::make('link')
->label('Link')
->required()
->maxLength(255)
->url(),
])
->columns(3)
->minItems(1)
->maxItems(6)
->defaultItems(3)
->grid(2)
->reorderable()
->collapsible(),
]),
])
->columns(1)
->statePath('data');
}
private static function getIconOptions(): array
{
return [
'microsoft-word' => 'microsoft-word',
'text-box' => 'text-box',
'document-1' => 'document-1',
'layers-1' => 'layers-1',
'folder-1' => 'folder-1',
'contract' => 'contract',
'layer' => 'layer',
'download-pdf' => 'download-pdf',
'pdf' => 'pdf',
'cloud-computing' => 'cloud-computing',
'downloads' => 'downloads',
'layers' => 'layers',
'document' => 'document',
'light-bulb-1' => 'light-bulb-1',
'idea-2' => 'idea-2',
'light-bulb' => 'light-bulb',
'idea-1' => 'idea-1',
'solution-2' => 'solution-2',
'lightbulb' => 'lightbulb',
'menus' => 'menus',
'support-1' => 'support-1',
'swipe-left' => 'swipe-left',
'development' => 'development',
'domain' => 'domain',
'pets' => 'pets',
'diagram' => 'diagram',
'targeting' => 'targeting',
'business-intelligence' => 'business-intelligence',
'menu-6' => 'menu-6',
'high-quality' => 'high-quality',
'campaign' => 'campaign',
'brain' => 'brain',
'software-application' => 'software-application',
'apps' => 'apps',
'wrench-1' => 'wrench-1',
'social-media-marketing-1' => 'social-media-marketing-1',
'category-1' => 'category-1',
'trophy-3' => 'trophy-3',
'email-marketing' => 'email-marketing',
'setting' => 'setting',
'more' => 'more',
'menu-5' => 'menu-5',
'menu-4' => 'menu-4',
'medical' => 'medical',
'sparkle' => 'sparkle',
'menu-3' => 'menu-3',
'technology-2' => 'technology-2',
'process' => 'process',
'hearth-1' => 'hearth-1',
'hearth' => 'hearth',
'technology-1' => 'technology-1',
'category' => 'category',
'customer-care' => 'customer-care',
'folder' => 'folder',
'portfolio-1' => 'portfolio-1',
'report' => 'report',
'thinking' => 'thinking',
'fingerprint' => 'fingerprint',
'clock-2' => 'clock-2',
'award' => 'award',
'paper-plane' => 'paper-plane',
'repair' => 'repair',
'email-5' => 'email-5',
'strategy' => 'strategy',
'portfolio' => 'portfolio',
'web-design' => 'web-design',
'email-4' => 'email-4',
'down-arrow-1' => 'down-arrow-1',
'location-2' => 'location-2',
'phone-call-2' => 'phone-call-2',
'telephone-call' => 'telephone-call',
'teamwork' => 'teamwork',
'up-arrow-1' => 'up-arrow-1',
'menu-2' => 'menu-2',
'developing' => 'developing',
'money-bag' => 'money-bag',
'thumbs-up' => 'thumbs-up',
'profits' => 'profits',
'location-1' => 'location-1',
'help-1' => 'help-1',
'online-chat' => 'online-chat',
'worker' => 'worker',
'smart-home' => 'smart-home',
'customer-service-1' => 'customer-service-1',
'internet' => 'internet',
'cash-flow' => 'cash-flow',
'monitor' => 'monitor',
'search-1' => 'search-1',
'wrench' => 'wrench',
'coin' => 'coin',
'cash' => 'cash',
'analyst' => 'analyst',
'dashboard-1' => 'dashboard-1',
'digital' => 'digital',
'searching' => 'searching',
'email-3' => 'email-3',
'star-1' => 'star-1',
'touch' => 'touch',
'medal' => 'medal',
'world-wide-web-1' => 'world-wide-web-1',
'phone' => 'phone',
'social-media' => 'social-media',
'24-7' => '24-7',
'hard-work' => 'hard-work',
'star' => 'star',
'plus' => 'plus',
'minus-2' => 'minus-2',
'menu-1' => 'menu-1',
'cloud' => 'cloud',
'handshake' => 'handshake',
'people' => 'people',
'ai' => 'ai',
'save-money' => 'save-money',
'shopping-online' => 'shopping-online',
'profit-1' => 'profit-1',
'blockchain' => 'blockchain',
'sales' => 'sales',
'back-in-time' => 'back-in-time',
'clock-1' => 'clock-1',
'user-3' => 'user-3',
'user-2' => 'user-2',
'pawprint' => 'pawprint',
'payment-method' => 'payment-method',
'world-wide-web' => 'world-wide-web',
'minus-1' => 'minus-1',
'add-1' => 'add-1',
'management' => 'management',
'help' => 'help',
'chip' => 'chip',
'artificial-intelligence' => 'artificial-intelligence',
'group' => 'group',
'money-1' => 'money-1',
'conversation' => 'conversation',
'email-2' => 'email-2',
'rating' => 'rating',
'placeholder' => 'placeholder',
'trophy-2' => 'trophy-2',
'cpu' => 'cpu',
'home' => 'home',
'right-arrow-1' => 'right-arrow-1',
'like' => 'like',
'mail' => 'mail',
'briefcase' => 'briefcase',
'money' => 'money',
'up-arrow' => 'up-arrow',
'trophy-1' => 'trophy-1',
'user-1' => 'user-1',
'question' => 'question',
'team-1' => 'team-1',
'user' => 'user',
'email-1' => 'email-1',
'price-tag-1' => 'price-tag-1',
'tag' => 'tag',
'loupe' => 'loupe',
'right-arrow' => 'right-arrow',
'left-arrow-1' => 'left-arrow-1',
'down-arrow' => 'down-arrow',
'price-tag' => 'price-tag',
'stars' => 'stars',
'search' => 'search',
'phone-call-1' => 'phone-call-1',
'award-symbol' => 'award-symbol',
'christmas-stars' => 'christmas-stars',
'minus' => 'minus',
'add' => 'add',
'cancel-1' => 'cancel-1',
'checked' => 'checked',
'cyber-security' => 'cyber-security',
'data-protection' => 'data-protection',
'hosting' => 'hosting',
'brand-awareness' => 'brand-awareness',
'ux-design' => 'ux-design',
'influencer' => 'influencer',
'online-advertising' => 'online-advertising',
'web-management' => 'web-management',
'seo-1' => 'seo-1',
'computer' => 'computer',
'software-development' => 'software-development',
'coding-1' => 'coding-1',
'coding' => 'coding',
'app-development' => 'app-development',
'content-marketing' => 'content-marketing',
'social-media-marketing' => 'social-media-marketing',
'analysis-1' => 'analysis-1',
'twitter' => 'twitter',
'repairing' => 'repairing',
'data-visualization' => 'data-visualization',
'information-technology' => 'information-technology',
'statistics-1' => 'statistics-1',
'exploration' => 'exploration',
'project-1' => 'project-1',
'cross-mark' => 'cross-mark',
'search-analysis' => 'search-analysis',
'system' => 'system',
'hashtag-1' => 'hashtag-1',
'hashtag' => 'hashtag',
'it-department' => 'it-department',
'creative' => 'creative',
'online-analytical' => 'online-analytical',
'secure-data' => 'secure-data',
'slash' => 'slash',
'creative-thinking' => 'creative-thinking',
'right-up' => 'right-up',
'dashboard' => 'dashboard',
'profit' => 'profit',
'project' => 'project',
'phone-call' => 'phone-call',
'seo' => 'seo',
'prototype' => 'prototype',
'creative-process' => 'creative-process',
'growth' => 'growth',
'technical-support' => 'technical-support',
'technology' => 'technology',
'solution-1' => 'solution-1',
'creative-tools' => 'creative-tools',
'data-science' => 'data-science',
'costumer' => 'costumer',
'cooperation' => 'cooperation',
'next' => 'next',
'back' => 'back',
'brand' => 'brand',
'right-arrows' => 'right-arrows',
'idea' => 'idea',
'design-thinking' => 'design-thinking',
'check' => 'check',
'cross' => 'cross',
'right' => 'right',
'link' => 'link',
'server' => 'server',
'analysis' => 'analysis',
'support' => 'support',
'project-management' => 'project-management',
'networking' => 'networking',
'team' => 'team',
'check-mark' => 'check-mark',
'consultation' => 'consultation',
'solution' => 'solution',
'success' => 'success',
'customer-review' => 'customer-review',
'select' => 'select',
'statistics' => 'statistics',
'machine-learning' => 'machine-learning',
'vector' => 'vector',
'trophy' => 'trophy',
'data' => 'data',
'clock' => 'clock',
'cancel' => 'cancel',
'customer-service' => 'customer-service',
'digital-marketing' => 'digital-marketing',
'email' => 'email',
'stats' => 'stats',
'menu' => 'menu',
'location' => 'location',
'tick' => 'tick',
'left-arrow' => 'left-arrow',
'dots-menu' => 'dots-menu',
];
}
public static function getNavigationGroup(): ?string
{
return __('Home');
}
public static function getNavigationLabel(): string
{
return __('Manage Solutions');
}
public function getTitle(): string|Htmlable
{
return 'Solutions';
}
public function getHeading(): string|Htmlable
{
return 'Edit solutions text, icons, and links from here';
}
public function getSubheading(): string|Htmlable|null
{
return 'Manage the solutions section content, including individual solution items.';
}
public static function canView(): bool
{
return auth()->user()->role === UserRole::ADMIN || auth()->user()->role === UserRole::MANAGER;
}
}