*/ public function rules(): array { /** @var Attribute|null $attribute */ $attribute = $this->route('attribute'); return [ 'codigo' => [ 'required', 'string', 'max:255', Rule::unique('attribute', 'codigo') ->ignore($attribute?->id) ->where(fn ($query) => $query->where('tenant_codigo', $attribute?->tenant_codigo)), ], 'nombre' => ['required', 'string', 'max:255'], 'is_required' => ['sometimes', 'boolean'], 'metadata_schema' => ['nullable', 'array'], 'type' => ['required', Rule::enum(FieldType::class)], 'options' => ['sometimes', 'array'], 'options.*.value' => ['required', 'string', 'max:255'], 'options.*.label' => ['required', 'string', 'max:255'], 'options.*.sort_order' => ['sometimes', 'integer'], 'options.*.metadata' => ['nullable', 'array'], ]; } public function withValidator(Validator $validator): void { $validator->after(function (Validator $validator): void { $type = $this->input('type'); $supportsOptions = in_array($type, [FieldType::Select->value, FieldType::Multiselect->value], true); if (! $supportsOptions && $this->filled('metadata_schema')) { $validator->errors()->add('metadata_schema', 'The metadata_schema field is only allowed for select and multiselect attributes.'); } if (! $supportsOptions && $this->filled('options')) { $validator->errors()->add('options', 'Options are only allowed for select and multiselect attributes.'); } }); } }