user()->can('View:Media'); } public function mount(): void { if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company) { $this->restricted = true; return; } $company = auth()->user()->company; if (! $company) { $this->restricted = true; return; } $this->company = $company; $this->isVerificationStage = in_array($company?->verificationRequest?->status, [ VerificationStatus::PENDING, VerificationStatus::REJECTED, ]) || $company->verificationRequest()->pending()->exists(); $verificationRequest = $this->company->verificationRequest() ->latest() ->first(); $this->verificationRequest = $verificationRequest; $media = $company->partnerMedia; if (! $media) { return; } $this->media = $media; $this->form->fill($media->toArray()); $documents = [ 'journalism_organization', 'press_council_certificate', ]; $mediaItems = $media->getMedia('partnerMedia'); foreach ($documents as $docType) { $mediaItem = $mediaItems ->where('custom_properties.doc_type', str($docType)->replace('_docs', '')->slug('-')) ->sortByDesc('created_at') ->first(); if ($mediaItem) { $path = $mediaItem->getPathRelativeToRoot(); $this->data["{$docType}_docs"] = [$path]; $this->originalDocuments["{$docType}_docs"] = [$path]; } } } public static function form(Schema $schema): Schema { return MediaForm::configure($schema); } public function save(): void { $this->mountAction('save'); } public function needsMediaReview(): bool { return $this->media?->company?->verificationRequest?->status !== null; } public function handleMediaSave(array $data = []): void { try { $media = MediaSaveService::handle( existingMedia: $this->media, companyId: $this->company->id, formState: $this->form->getState(), pageData: $this->data, originalDocuments: $this->originalDocuments, needsReview: $this->needsMediaReview(), actionData: $data, ); if ($this->needsMediaReview()) { return; } $this->media = $media; CheerfulNotification::create()->send(); } catch (ValidationException $e) { $this->unmountAction(); throw $e; } } }