*/ private const ENTRY_LABELS = [ 'baseline_profile' => 'Baseline profile', 'baseline_snapshot' => 'Snapshot', 'backup_set' => 'Backup set', 'current_policy_version' => 'Current policy version', 'operations' => 'Operations', 'parent_policy' => 'Policy', 'policy_version' => 'Policy version', 'restore_run' => 'Restore run', 'source_run' => 'Operation', ]; /** * @var array */ private const ACTION_LABELS = [ 'baseline_profile' => 'View baseline profile', 'baseline_snapshot' => 'View snapshot', 'backup_set' => 'View backup set', 'current_policy_version' => 'View policy version', 'operations' => 'Open operations', 'parent_policy' => 'View policy', 'policy_version' => 'View policy version', 'restore_run' => 'View restore run', 'source_run' => 'Open operation', ]; public function entryLabel(string $relationKey): string { if ($relationKey === 'operations') { return OperationRunLinks::collectionLabel(); } if ($relationKey === 'source_run') { return OperationRunLinks::singularLabel(); } return self::ENTRY_LABELS[$relationKey] ?? Str::headline(str_replace('_', ' ', $relationKey)); } public function actionLabel(string $relationKey): string { if ($relationKey === 'operations') { return OperationRunLinks::openCollectionLabel(); } if ($relationKey === 'source_run') { return OperationRunLinks::openLabel(); } return self::ACTION_LABELS[$relationKey] ?? 'Open '.Str::headline(str_replace('_', ' ', $relationKey)); } public function unavailableMessage(string $relationKey, string $reason): string { $subject = mb_strtolower($this->entryLabel($relationKey)); return match ($reason) { 'missing', 'deleted' => "The related {$subject} is no longer available.", 'unauthorized' => "The related {$subject} is not available in the current scope.", default => "The related {$subject} could not be resolved.", }; } }