'Dokumen Pers', 'text_name' => 'press_card', 'placeholder' => '*****', 'max' => 100, 'max_size' => 1024 * 10, 'file_name' => 'press_card_docs', 'accept' => ['application/pdf'], 'folder' => 'press-card/', ], [ 'title' => 'Sertifikat UKW', 'text_name' => 'ukw_certificate', 'placeholder' => '*****', 'max' => 100, 'max_size' => 1024 * 10, 'file_name' => 'ukw_certificate_docs', 'accept' => ['application/pdf'], 'folder' => 'ukw-certificate/', ], ]; return $schema ->components([ TextInput::make('name') ->label('Nama Lengkap') ->placeholder('John Doe') ->autocomplete(false) ->autofocus() ->required() ->maxLength(100), TextInput::make('email') ->label('Alamat Surel') ->placeholder('johndoe@example.com') ->autocomplete(false) ->required() ->maxLength(254) ->email() ->prefixIcon('heroicon-o-envelope'), TextInput::make('phone_number') ->label('Nomor Telepon') ->placeholder('08xx xxxx xxxx') ->autocomplete(false) ->required() ->maxLength(20) ->tel() ->prefixIcon('heroicon-o-phone'), Group::make() ->schema( collect($documents) ->map(function (array $doc): array { return [ TextInput::make($doc['text_name']) ->label('Nomor Identitas ('.$doc['title'].')') ->placeholder($doc['placeholder']) ->autocomplete(false) ->required() ->maxLength($doc['max']), AdvancedFileUpload::make($doc['file_name']) ->label('File Pendukung ('.$doc['title'].') (PDF)') ->disk(config('filesystems.default')) ->acceptedFileTypes($doc['accept']) ->directory(fn (): string => 'journalists/'.$doc['folder'].now()->toDateString()) ->maxSize($doc['max_size']) ->required(), ]; }) ->flatten() ->toArray() ), Textarea::make('change_reason') ->label('Alasan Perubahan') ->placeholder('Jelaskan alasan perubahan data ini...') ->rows(3) ->required() ->visible(fn () => auth()->user()->company?->verificationRequest?->status === VerificationStatus::APPROVED && auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)), ]) ->columns(1); } public static function table(Table $table): Table { return $table ->columns([ ...RowIndexColumn::make(), TextColumn::make('name') ->label('Nama') ->searchable() ->sortable(), TextColumn::make('email') ->label('Alamat Surel') ->searchable() ->sortable(), TextColumn::make('phone_number') ->label('Nomor Telepon') ->searchable() ->sortable(), TextColumn::make('press_card') ->label('Dokumen Pers') ->searchable() ->sortable() ->wrap(), TextColumn::make('ukw_certificate') ->label('Sertifikat UKW') ->searchable() ->sortable() ->wrap(), ...TimestampColumns::make(), ]) ->filters([ TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), ]) ->checkIfRecordIsSelectableUsing( fn () => ! ( in_array(auth()->user()->company?->verificationRequest?->status, [VerificationStatus::PENDING, VerificationStatus::REJECTED]) || auth()->user()->company?->verificationRequest()->pending()->exists() ) ) ->recordActions([ EditJournalistAction::make('edit') ->visible(fn () => ! (in_array(auth()->user()->company?->verificationRequest?->status, [VerificationStatus::PENDING, VerificationStatus::REJECTED]) || auth()->user()->company?->verificationRequest()->pending()->exists())), DeleteJournalistAction::make('delete') ->visible(fn () => ! (in_array(auth()->user()->company?->verificationRequest?->status, [VerificationStatus::PENDING, VerificationStatus::REJECTED]) || auth()->user()->company?->verificationRequest()->pending()->exists())), ForceDeleteAction::make() ->visible(fn () => ! (in_array(auth()->user()->company?->verificationRequest?->status, [VerificationStatus::PENDING, VerificationStatus::REJECTED]) || auth()->user()->company?->verificationRequest()->pending()->exists())), RestoreAction::make() ->visible(fn () => ! (in_array(auth()->user()->company?->verificationRequest?->status, [VerificationStatus::PENDING, VerificationStatus::REJECTED]) || auth()->user()->company?->verificationRequest()->pending()->exists())), ]) ->toolbarActions([ BulkActionGroup::make([ DeleteBulkAction::make(), ForceDeleteBulkAction::make(), RestoreBulkAction::make(), ])->visible(fn () => ! (in_array(auth()->user()->company?->verificationRequest?->status, [VerificationStatus::PENDING, VerificationStatus::REJECTED]) || auth()->user()->company?->verificationRequest()->pending()->exists())), ]) ->emptyStateIcon(Heroicon::OutlinedIdentification) ->emptyStateHeading(fn () => CheerfulNotification::getByKey('journalist.empty_state_heading')) ->emptyStateDescription(fn () => CheerfulNotification::getByKey('journalist.empty_state')) ->defaultSort('created_at', 'desc') ->deferFilters(false) ->paginated([25, 50, 100, 'all']) ->deferLoading() ->when(fn () => auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia, function (Table $table): Table { return $table ->emptyStateHeading(fn () => CheerfulNotification::getByKey('access.restricted')) ->emptyStateDescription(fn () => CheerfulNotification::getByKey('access.complete_media_data')) ->emptyStateIcon(Heroicon::OutlinedLockClosed) ->emptyStateActions([ Action::make('complete_media') ->label('Lengkapi Data Media') ->url(Media::getUrl()) ->button(), ]); }); } public static function getPages(): array { return [ 'index' => ManageJournalists::route('/'), ]; } public static function getEloquentQuery(): Builder { return parent::getEloquentQuery() ->when(fn () => auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia, function (Builder $query): Builder { return $query->whereRaw('1 = 0'); }) ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): Builder { return $query->whereHas('partnerMedia.company', function (Builder $q): void { $q->where('user_id', auth()->id()); }); }); } public static function getRecordRouteBindingEloquentQuery(): Builder { return parent::getRecordRouteBindingEloquentQuery() ->withoutGlobalScopes([ SoftDeletingScope::class, ]); } }