components([ Section::make(fn () => CheerfulNotification::getMessage('Detail Kerja Sama 🤝', 'Detail Kerja Sama')) ->description(fn () => CheerfulNotification::getMessage('Ayo lengkapi informasi mengenai judul, durasi, dan media yang diajak kerja sama! 🤝✨', 'Lengkapi informasi mengenai judul, durasi, dan media yang terlibat.')) ->icon(fn () => CheerfulNotification::getNotifStyle() === NotifStyle::CHEERFUL ? 'heroicon-o-hand-raised' : null) ->schema([ TextInput::make('title') ->label('Judul Kerja Sama') ->placeholder('Publikasi Pembangunan Daerah') ->autocomplete(false) ->autofocus() ->required() ->maxLength(200), Grid::make(2) ->schema([ DatePicker::make('initial_submission_date') ->label('Tgl Pengajuan Awal') ->placeholder(fn (): string => now()->translatedFormat('l, d F Y')) ->native(false) ->displayFormat('l, d F Y') ->required() ->minDate(today()) ->reactive(), DatePicker::make('final_submission_date') ->label('Tgl Pengajuan Akhir') ->placeholder(fn (): string => now()->addDays(7)->translatedFormat('l, d F Y')) ->native(false) ->displayFormat('l, d F Y') ->required() ->afterOrEqual('initial_submission_date') ->minDate(fn (Get $get) => $get('initial_submission_date')), ]), Select::make('partner_media_ids') ->label('Media Rekanan') ->relationship('partnerMedia', 'name', fn (Builder $query): Builder => $query->verified()) ->multiple() ->preload() ->searchable() ->native(false) ->required() ->selectablePlaceholder(false) ->helperText('Pilih satu atau lebih media yang akan diajak kerja sama.') ->suffixAction( Action::make('select_all') ->label('Pilih Semua') ->icon('heroicon-o-check-circle') ->action(function (Set $set): void { $allMediaIds = PartnerMedia::verified()->pluck('id')->toArray(); $set('partner_media_ids', $allMediaIds); }) ), Textarea::make('description') ->label('Deskripsi Kerja Sama') ->placeholder('Jelaskan detail lingkup kerja sama di sini...') ->required() ->rows(5) ->maxLength(65535) ->autocomplete(false), ]) ->columnSpan(2), Section::make(fn () => CheerfulNotification::getMessage('Lampiran & Media 🖼️', 'Lampiran & Media')) ->description(fn () => CheerfulNotification::getMessage('Jangan lupa unggah banner promosi dan template pengajuannya ya! 🖼️✨', 'Unggah banner promosi dan template untuk pengajuan.')) ->icon(fn () => CheerfulNotification::getNotifStyle() === NotifStyle::CHEERFUL ? 'heroicon-o-paper-clip' : null) ->schema([ SpatieMediaLibraryFileUpload::make('banner') ->label('Banner Promosi') ->disk(config('filesystems.default')) ->acceptedFileTypes(['image/*']) ->maxSize(1024 * 3) ->collection('banner') ->customProperties(fn (): array => [ 'feature' => 'cooperations', 'doc_type' => 'banner', 'date' => now()->toDateString(), ]) ->image(), AdvancedFileUpload::make('proposal_template') ->label('Template Pengajuan (PDF)') ->disk(config('filesystems.default')) ->acceptedFileTypes(['application/pdf']) ->maxSize(1024 * 10) ->directory(fn (): string => 'cooperations/proposal-template/'.now()->toDateString()) ->required(), ])->columnSpan(1), ]) ->columns(3); } }