Skip to content

feat(url): add URL field type#30

Merged
vitormattos merged 26 commits intomainfrom
feat/url-field-type
Mar 21, 2026
Merged

feat(url): add URL field type#30
vitormattos merged 26 commits intomainfrom
feat/url-field-type

Conversation

@vitormattos
Copy link
Member

Summary

Adds URL as a new profile field type, following the same pattern as the existing text, number, boolean, date, select, and multiselect types.

Changes

Backend (PHP)

  • lib/Enum/FieldType.php — Added URL = 'url' case between DATE and SELECT
  • lib/Service/FieldValueService.phpnormalizeUrlValue() validates with FILTER_VALIDATE_URL; match arm dispatches to it for URL fields
  • lib/Workflow/UserProfileFieldCheck.phpURL_OPERATORS const (is-set, not-is-set, is, not-is, contains, not-contains); contains/not-contains bypass URL validation to allow substring matching
  • lib/ResponseDefinitions.php — Added 'url' to ProfileFieldsType psalm-type union
  • lib/Service/FieldDefinitionValidator.php, ImportPayloadValidator.php, DataImportService.php — Type union annotations updated to include url

Frontend (Vue 3 / TypeScript)

  • src/types/index.tsFieldType union extended with 'url'
  • src/utils/workflowProfileFieldCheck.ts — URL fields return textOperatorKeys in getWorkflowOperatorKeys()
  • src/views/AdminSettings.vue — URL option added to field type selector
  • src/views/PersonalSettings.vuecomponentInputTypesByType includes url: 'url'; validation path covers URL
  • src/components/AdminUserFieldsDialog.vue — URL mappings for description, placeholder, inputMode, componentInputType, helperText, validation, and error messages

OpenAPI

  • Regenerated openapi.json, openapi-full.json, openapi-administration.json, and all three derived TS type files

Tests

  • PHP (TDD): FieldDefinitionValidatorTest, FieldValueServiceTest (+4 normalization cases), UserProfileFieldCheckTest (+2 workflow cases)
  • Frontend (Vitest): workflowProfileFieldCheck.spec.ts (+2), AdminSettings.spec.ts (+1), AdminUserFieldsDialog.spec.ts (+2), PersonalSettings.spec.ts (+1)

Validation

Check Result
npm run ts:check ✅ clean
npm run test (Vitest) ✅ 38/38 (10 files)
composer test (PHPUnit) ✅ 372/372 (1244 assertions)
composer cs:fix ✅ clean
composer psalm ✅ 0 errors
composer openapi ✅ regenerated

Screenshot

Admin → Profile fields → Create field → Type dropdown showing URL option:

URL field type in admin dropdown

Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
@vitormattos vitormattos merged commit 4d27486 into main Mar 21, 2026
21 checks passed
@vitormattos vitormattos deleted the feat/url-field-type branch March 21, 2026 02:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant