'Proses', self::COMPLETED => 'Selesai', self::VERIFIED => 'Terverifikasi', self::REJECTED => 'Ditolak', }; } public function isEditable(): bool { return in_array($this, [self::IN_PROGRESS, self::REJECTED], true); } public function canTransitionTo(self $status): bool { return match ($this) { self::IN_PROGRESS => $status === self::COMPLETED, self::COMPLETED => $status === self::VERIFIED, default => false, }; } public function transitionPermission(): Permission { return match ($this) { self::COMPLETED => Permission::CUTTINGS_COMPLETE, self::VERIFIED => Permission::CUTTINGS_VERIFY, self::REJECTED => Permission::CUTTINGS_REJECT, self::IN_PROGRESS => Permission::CUTTINGS_UPDATE, default => throw new InvalidArgumentException('Status tidak mendukung transisi.'), }; } /** * @return list */ public function availableActions(): array { return match ($this) { self::IN_PROGRESS => [ [ 'status' => self::COMPLETED->value, 'label' => 'Selesai', 'destructive' => false, 'permission' => Permission::CUTTINGS_COMPLETE->value, 'icon_only' => false, ], ], self::COMPLETED => [ [ 'status' => self::VERIFIED->value, 'label' => 'Verifikasi', 'destructive' => false, 'permission' => Permission::CUTTINGS_VERIFY->value, 'icon_only' => false, ], ], default => [], }; } }