$data->label, 'key' => $this->uniqueKey($data->label), 'type' => $data->type, 'options' => $data->type === CustomFieldType::Select->value ? array_values($data->options ?? []) : null, 'is_required' => $data->isRequired, // New entries always land at the end of the list. 'sort_order' => (CustomFieldDefinition::max('sort_order') ?? -1) + 1, ]); } private function uniqueKey(string $label): string { $base = Str::slug($label, '_') ?: 'field'; $key = $base; $i = 1; while (CustomFieldDefinition::withTrashed()->where('key', $key)->exists()) { $key = $base.'_'.(++$i); } return $key; } }