*/ public function toArray(Request $request): array { return [ ...parent::toArray($request), 'variant_properties' => $this->variantProperties(), ]; } /** * @return list * }> */ private function variantProperties(): array { $variant = $this->sourceVariant; if ($variant === null) { return []; } $itemAttributes = $variant->definitions ->map(fn ($definition) => $definition->itemAttribute) ->filter() ->merge($variant->catalogItem?->itemAttributes ?? collect()) ->unique('id') ->values(); return $variant->selectionOptions($itemAttributes) ->map(function (array $selection, string $attributeCode) use ($itemAttributes): array { $itemAttribute = $itemAttributes->first( fn (ItemAttribute $itemAttribute): bool => $itemAttribute->attribute?->codigo === $attributeCode, ); $values = array_is_list($selection) ? $selection : [$selection]; return [ 'code' => $attributeCode, 'label' => $itemAttribute?->attribute?->nombre ?? ($attributeCode === 'event_date' ? 'Fecha' : $attributeCode), 'values' => array_values($values), ]; }) ->values() ->all(); } }