'required', 'field.*.value' => 'required', ])] public array $field = []; protected string $resourceName = 'client-api'; public function show(int|string $id): void { $this->id = $id; } public function hide(): void { $this->reset('id', 'mode'); } public function editMode(): void { $this->mode = 'update'; } #[Computed] public function endpoints(): array { $case = ApiType::cases(); $endpoints = []; $apiEndpoints = ApiEndpoint::all()->mapWithKeys(function ($item) { return [$item->key->value => $item]; }); $clients = $this->clients->pluck('ulid', 'id'); foreach ($case as $item) { $client_id = null; $value = null; if (isset($apiEndpoints[$item->value])) { $client_id = $apiEndpoints[$item->value]->client_id; $client_id = $clients[$client_id]; $value = $apiEndpoints[$item->value]->value; } $endpoints[$item->value] = [ 'label' => $item->label(), 'value' => $value, ]; $this->field[$item->value] = [ 'type' => $item->value, 'value' => $value, 'client_id' => $client_id, ]; } return $endpoints; } #[Computed] public function clients(): Collection { return Client::all(['id', 'ulid', 'name']); } public function save(AssignEndpointUrl $assign): void { $this->validate(); $clients = $this->clients->pluck('id', 'ulid'); $endpointToSave = []; foreach ($this->field as $key => $item) { $endpointToSave[$key] = new EndpointUrlDTO( clientId: $clients[$item['client_id']], endpointUrl: $item['value'], field: ApiType::tryFrom($item['type']) ); } $assign->execute($endpointToSave); $this->mode = 'view'; $this->success($this->message()); } public function runSynchronization(ApiType $type, SynchronizeWithApi $api): void { try { $api->execute($type); $this->success(__('domains/channel/messages.clients.synced')); } catch (\Exception $e) { $this->error($e->getMessage()); } } };