feat(frontend): add /users page for fork-specific user management - #15
Merged
kigiela merged 2 commits intoJul 19, 2026
Merged
Conversation
New /users route (client-side gated on plain isAdmin, no PRO_FEATURE license check) backed by pkg/routes/api/v1/docsalesadmin from #14. Mirrors views/admin/UsersView.vue's list/search/create/status/delete flow against /docsales-admin/users instead of /admin/users, minus the is_admin toggle and password management (those stay admin-panel-only). Adds a "migrate tasks" action per user: search the already-loaded user list, pick a destination, confirm - reassigns every task the source user created or is assigned to, via the new migrate-to endpoint. Depends on #14 merging first; the routes this hits don't exist on main yet.
Preview DeploymentPreview deployments for this PR are available at:
The preview environment will start automatically on first visit. Subsequent pushes to this PR will update the Run locally with Dockerdocker pull ghcr.io/docsales/vikunja:pr-15
docker run -p 3456:3456 ghcr.io/docsales/vikunja:pr-15Last updated for commit 5427ac3 |
Matches the project's logical-properties stylelint rule (csstools/use-logical), same convention already used elsewhere (margin-block-end, inset-block-start, etc.). CI caught this on #15.
kigiela
added a commit
that referenced
this pull request
Jul 20, 2026
… (#20) * feat(frontend): add /users page for the new unlicensed admin routes New /users route (client-side gated on plain isAdmin, no PRO_FEATURE license check) backed by pkg/routes/api/v1/docsalesadmin from #14. Mirrors views/admin/UsersView.vue's list/search/create/status/delete flow against /docsales-admin/users instead of /admin/users, minus the is_admin toggle and password management (those stay admin-panel-only). Adds a "migrate tasks" action per user: search the already-loaded user list, pick a destination, confirm - reassigns every task the source user created or is assigned to, via the new migrate-to endpoint. Depends on #14 merging first; the routes this hits don't exist on main yet. * fix(frontend): use max-block-size instead of max-height Matches the project's logical-properties stylelint rule (csstools/use-logical), same convention already used elsewhere (margin-block-end, inset-block-start, etc.). CI caught this on #15.
kigiela
added a commit
that referenced
this pull request
Jul 20, 2026
#21) The docsales-admin create-user form (PR #14/#15) has no language field, so CreateUserBody.Language is always sent empty - and the shared "language" govalidator tag treated empty as invalid, rejecting every request from that form with a generic "invalid data" error. Treat an empty language as "not specified" (valid, left as-is) instead of a validation failure. Non-empty values are still checked against the registered translations exactly as before - this only affects callers that omit the field entirely, matching how user creation already behaves elsewhere (e.g. the CLI's `user create` command never sets a language either).
kigiela
added a commit
that referenced
this pull request
Jul 20, 2026
Resolved and removed: instance-admin bootstrap, Marcelo/Gustavo/Rafael account migrations, PR #15 QA pass. Recorded: PRs #20-24, the upstream ClickUp migrator PR, and the full ClickUp reimport's discoveries and fixes (missing tasks, dropped assignees, missing project sharing, two separate Cloudflare issues, and the title-update field-wipe bug and its recovery).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on #14
Based on that branch since it needs the
/docsales-adminroutes to exist. Rebase ontomainafter #14 merges.What
New
/userspage, gated client-side on a plainisAdmincheck - mirrorsviews/admin/UsersView.vue's list/search/create/status/delete flow against/docsales-admin/usersinstead of/admin/users. Deliberately drops the is_admin toggle and password management from the copy, matching what the backend route group exposes.Adds a "Migrate tasks" action per row: search the already-loaded user list, pick a destination, confirm. Calls the new migrate-to endpoint and reports how many tasks/assignments moved.
Linked from the user dropdown menu (
AppHeader.vue), next to the existing built-in Admin Panel link, sameisAdminguard.Verification
mage check:translationsclean - added 7 new keys underadmin.users.*, no missing or dead keys.vue-tsctypecheck: ran it both with and against a cleanmaincheckout - the same long list of pre-existing errors appears on both (unrelated files, none of mine), confirming it's a local environment/toolchain issue rather than something this PR introduces. Neither of my new/changed files appears in either error list.isAdmin=true, and temporarily bypassing that guard for a local screenshot (even reverting right after) was correctly blocked by the environment's permission classifier. So: built and statically verified, not manually clicked through. Please sanity-check the actual UI after merging.