NMS-20128: Vue UI Manage Minions page - #8727
Conversation
Migrates the legacy AngularJS minions page to a PrimeVue /ui page over the existing v2 /api/v2/minions CRUD — no backend or JSON contract change, and the v1 REST stays. Table of minions (id, label, location, type, status, version, last updated, property count) with edit and delete; the editor changes label, location and the key/value properties (with duplicate-key validation) while the server-maintained fields round-trip via spread, and delete confirms and warns about re-registration. The menu entry points at the new page.
Swap direct PrimeVue for the Onms-XXX seam wrappers across the minions table and editor dialog: Button->OnmsButton (text/outlined mapped to variant), Dialog->OnmsDialog, InputText->OnmsInputText, DataTable->OnmsTable, Column->OnmsColumn, Tag->OnmsTag, and the IconField/InputIcon/InputText search box collapses into OnmsSearchInput. Message and IftaLabel have no wrapper yet and stay on PrimeVue. No behaviour change.
|
@synqotik @marshallmassengill — ready for review. This page now uses the |
…sDialog width prop Refresh and remove-property buttons now use OnmsIconButton with icon components instead of a fallthrough icon="pi ..."; dialog sizing routes through the OnmsDialog width prop (min(Npx, 95vw)); drop :loading, which OnmsTable does not declare (the #empty slot already handles the loading state). Removes reliance on $attrs riding into PrimeVue.
Replace the IftaLabel/nested-label markup in the minion editor with FormField's label/for props per ui/CLAUDE.md, and swap the PrimeVue Message error banner for a styled div so the page carries no raw primevue/* imports. Also make the feature's files pass pnpm lint (curly, arrow-parens, object-curly-spacing).
# Conflicts: # ui/src/services/index.ts
|
@marshallmassengill @synqotik — rebased on current develop (shared |
marshallmassengill
left a comment
There was a problem hiding this comment.
Couple blockers:
- ui/src/services/minionAdminService.ts contains a raw NUL byte (offset 2965, inside the minionNodeKey template literal). Git classifies the file as binary — the PR diff literally reads Bin 0 -> 5444 bytes, so that file is unreviewable on GitHub. Use \u0000 (which is what minionAdminService.test.ts and the legacy index.js both write) or a printable separator.
- menu-template-default.json still points manageMinions at minion/index.jsp with roles: null. The sibling Manage Groups migration needed a dedicated follow-up commit (6a2c064) for exactly this omission.
Write the minionNodeKey separator as a unicode escape instead of a raw NUL byte, so git treats the file as text (it was being classified as binary, which made the diff unreviewable); the runtime key is unchanged and the service test already asserts the escaped form. Point the manageMinions entry in menu-template-default.json and menu-template-alt.json at the Vue page with ROLE_ADMIN, matching menu-template.json.
|
@marshallmassengill both fixed:
|
marshallmassengill
left a comment
There was a problem hiding this comment.
No blockers for me but attaching some screenshots would be useful. @synqotik should still review this before merging.



Migrates the Manage Minions admin page from the legacy AngularJS list to a PrimeVue /ui screen. Reuses the existing
/api/v2/minionsREST unchanged — no backend, model, or schema change.ROLE_ADMIN;MenuHeaderITis updated to assert the new page.foreignIdlookup the legacy page used.