Vue 3 migration: Phase 5 — system configuration page (/config)#1042
Merged
Conversation
|
|
||
| const handler = actionMap[action]; | ||
| if (handler) { | ||
| await handler(data); |
Python Test Results 1 files 1 suites 1m 30s ⏱️ Results for commit 9a89af4. |
Ports the admin /config section — Shows, System, Settings, Users, Logs, Backups — from Vue 2 Vuex to Vue 3 Pinia with bootstrap-vue-next. Key patterns introduced: - BModal via ref<InstanceType<typeof BModal>> (replaces v-b-modal directive) - #footer slot (replaces #modal-footer in BVN) - window.confirm replaces $bvModal.msgBoxConfirm - SSE log streaming via Web Streams API (response.body.getReader()) - setTimeout-based polling with onBeforeUnmount cleanup - Dynamic Vuelidate rules computed from server-returned setting types - Cross-field date validators using helpers.withMessage Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Creates a singleton useConfirm() composable backed by a BModal-based ConfirmDialog component, replacing all window.confirm() calls with a styled, accessible modal dialog that matches the rest of the UI. ConfirmDialog is mounted once in App.vue; all callers share the same instance via module-level reactive state. Supports title, okVariant, okTitle, and cancelTitle options mirroring BV2's msgBoxConfirm API. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
V2 used plain horizontal tabs with lazy mounting, not the vertical pill layout carried over from the user settings page. Also restores lazy prop so tab content only mounts on first activation, avoiding all polling timers (sessions, users) starting simultaneously on page load. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…BCollapse BVN's BCollapse :visible prop sets localNoAnimation=true in useShowHide, bypassing the Bootstrap 5 collapsing transition entirely. Switching to :model-value/@update:model-value keeps animation enabled. Expanded state changed from string[] to Record<string, boolean> to support v-model binding per category key. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…erride Bootstrap 5 has no built-in .form-group margin; the global dark.scss adds margin-bottom: 1rem to .b-form-group, but the inline style="margin-bottom: 0" copied from V2 was overriding it, causing rows to appear compacted. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
9a89af4 to
4975877
Compare
|
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.



Summary
/configsection (6-tab interface) from Vue 2 to Vue 3ConfigView,ConfigSettings,ConfigShows,ConfigSystem,ConfigUsers,ConfigBackups,ConfigLogscomponentsCreateUser,ResetPassword,ConfigRbac,RbacResourceConfirmDialogcomposable + component to replacewindow.confirmwith a styled BModal dialog, reusable across the whole V3 frontendstores/system.tswithscriptModes,connectedSessions,versionStatusstate andgetScriptModes,getConnectedSessions,getVersionStatus,checkForUpdatesactions/configrouter entry to the real view (wasPlaceholderView)Notable implementation details
BTabsuseslazyprop to defer tab component mount — prevents all 6 tabs' polling timers starting simultaneously on page loadBCollapseaccordion uses:model-value/@update:model-value(not:visible) to preserve the slide transition animation — BVN'suseShowHidedisables animation when thevisibleprop is used directlyConfigLogsstreams live log output via the Web Streams API (response.body.getReader()) with 400ms debounce on search inputs and auto-scroll when near the bottomConfigSystemandConfigUsersusesetTimeout-based recursive polling (1s and 5s respectively) cleaned up inonBeforeUnmountTest plan
/ui-new/configas admin — 6 tabs render (Shows, System, Settings, Users, Logs, Backups)/api/v1/settings/configConfirmDialog(BModal) appears for all destructive actions — nowindow.confirmdialogs🤖 Generated with Claude Code