*/ public function rules(): array { $fieldType = $this->input('field_type'); $type = RegistrationFieldType::tryFrom($fieldType); $rules = [ 'label' => ['required', 'string', 'max:255'], 'field_type' => ['required', Rule::in(array_column(RegistrationFieldType::cases(), 'value'))], 'help_text' => ['nullable', 'string', 'max:5000'], 'sort_order' => ['nullable', 'integer', 'min:0'], 'display_width' => ['sometimes', Rule::in(array_column(FieldDisplayWidth::cases(), 'value'))], ]; if ($type?->isStructural()) { return $rules; } return array_merge($rules, [ 'options' => [ $type?->requiresOptions() ? 'required' : 'nullable', $type?->prohibitsOptions() ? 'prohibited' : 'nullable', 'array', ], 'options.*' => ['required'], 'options.*.label' => ['required_if:options.*,array', 'string', 'max:255'], 'options.*.description' => ['nullable', 'string', 'max:200'], 'tag_category' => [ $type === RegistrationFieldType::TAG_PICKER ? 'nullable' : 'prohibited', 'string', 'max:50', ], 'is_required' => ['nullable', 'boolean'], 'is_portal_visible' => ['nullable', 'boolean'], 'is_admin_only' => ['nullable', 'boolean'], 'is_filterable' => ['nullable', 'boolean'], ]); } }