<feed xmlns='http://www.w3.org/2005/Atom'>
<title>BMC/OpenBmc/webui-vue.git/src/views/ResourceManagement, branch master</title>
<subtitle>Web-based user interface built on Vue.js for managing OpenBMC systems (mirror)</subtitle>
<id>https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/atom?h=master</id>
<link rel='self' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/'/>
<updated>2026-06-09T16:55:25+00:00</updated>
<entry>
<title>Implemented Power page with VueQuery and Composition API</title>
<updated>2026-06-09T16:55:25+00:00</updated>
<author>
<name>Nikhil Ashoka</name>
<email>a.nikhil@ibm.com</email>
</author>
<published>2026-02-06T12:01:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=99099183438d878391f66d3c674fa2cd037a7840'/>
<id>urn:sha1:99099183438d878391f66d3c674fa2cd037a7840</id>
<content type='text'>
This change switches power control to the EnvironmentMetrics-based
Redfish endpoint, derives minimum and maximum power cap values
dynamically from Redfish data, and updates ControlMode and SetPoint
handling to align with the latest schema.

Key changes:

1. Power control API and Redfish types:
- Removes src/api/services/powerControlService.ts; fetching and
PATCH are handled in the composable using shared Redfish utilities
- Adds EnvironmentMetrics and PowerLimitWatts types in
src/api/types/redfish.ts with proper ControlMode enum
('Automatic' | 'Disabled' | 'Manual' | 'Override')
- Chassis gains an EnvironmentMetrics link
- Composable resolves the Chassis collection via
useRedfishCollection&lt;Chassis&gt;('/redfish/v1/Chassis'), picks the
first chassis with EnvironmentMetrics, and fetches that resource
with useQuery; mutation sends PATCH and invalidates queries to
refetch fresh server state (returns Promise&lt;void&gt;; view owns
user-facing messages)

2. Power control composable
(src/components/Composables/usePowerControl.ts):
- Replaces Vuex PowerControlStore with a Composition API-based
composable
- Uses useRedfishRoot() and useRedfishCollection for cached
ServiceRoot and Chassis; uses TanStack Query to load and cache
EnvironmentMetrics power data
- Configures staleTime (30s freshness window) and refetchInterval
(30s automatic polling when tab visible) for live power
consumption updates
- Note: Only controls the first Chassis with EnvironmentMetrics in
multi-chassis systems (intentional for current use case)
- Forwards AbortSignal to API calls for proper request cancellation
- Reuses shouldRetry function from useAllSubResources
- Derives dynamic min and max power cap values from Redfish
PowerLimitWatts.AllowableMin/Max
- Provides a mutation for submitting updated SetPoint and
ControlMode; omits SetPoint when disabling to avoid sending
invalid values
- Handles all ControlMode enum values (Automatic, Disabled, Manual,
Override); UI sets Automatic/Disabled but preserves Manual/Override
when read from server
- Type-safe parameters (number | null instead of string coercion)

3. Toast composable and global plugin:
- useToast.ts (renamed from .js) uses bootstrap-vue-next useToast()
with TypeScript types; keeps successToast/errorToast API with
i18n titles
- Type restricted to string for simplicity; includes TODO for
potential VNode support expansion if needed
- src/plugins/toast.js continues to expose global $toast for
Options API
- BVToastMixin.js updated to use modelValue and extract VNode
content for consistency with bootstrap-vue-next 0.40.8
- Both implementations use isStatus: true for consistent toast
styling with status icons

4. Views modernization:
- Refactors src/views/ResourceManagement/Power.vue to use
&lt;script setup&gt;, usePowerControl(), and the new toast composable;
submitForm uses try/catch and
t('pageServerPowerOperations.toast.*') for success/error toasts
- Implements value caching to preserve user's typed input when
toggling power cap checkbox on/off
- Guards form sync watcher with v$.value?.$dirty check to prevent
overwriting in-progress edits during background refetch
- Loader semantics: show on first load (isLoading) and mutations,
but render cached data instantly on subsequent visits with silent
background refetch (avoids flicker)
- Renamed validator from 'between' to 'withinPowerCapRange' to
avoid confusion with Vuelidate's built-in validator
- Handles all ControlMode values (Automatic, Disabled, Manual,
Override) in form state synchronization
- Refactors src/views/Overview/OverviewPower.vue to read from the
power control composable instead of Vuex; implements settled
computed to emit overview-power-complete only when chassis
collection is fetched AND either no EnvironmentMetrics exists or
metrics query has completed (prevents premature completion)
- Shows power cap for all active control modes (Automatic, Manual,
Override)
- Removes mapState/mapActions usage and related Vuex wiring

5. Store cleanup and typing:
- Deletes src/store/modules/ResourceManagement/PowerControlStore.js
- Removes PowerControlStore registration from src/store/index.js
- Updates src/store/api.d.ts to match actual implementation
(set_auth_token with snake_case, accepts string | null |
undefined)
- Adds src/i18n.d.ts to provide basic typing for the shared api

Tested-by: Manual testing on development server
- Power consumption and cap values load correctly from
  EnvironmentMetrics with automatic 30-second polling (refetchInterval)
  when tab is visible
- Min and max power cap values reflect dynamic limits from Redfish
- Updating the power cap and enable state sends correct SetPoint and
  ControlMode values; SetPoint is omitted when disabling
- All ControlMode values (Automatic, Disabled, Manual, Override) are
  handled correctly
- User's typed values are preserved when toggling power cap checkbox
- Form edits are not overwritten by background refetch (dirty state
  guard)
- Success/error toasts show localized messages with consistent
  modelValue-based timing and status icons
- Overview power card reflects updated power state; overview loader
  waits for both chassis and metrics queries to settle before
  completing
- Request cancellation works properly on component unmount

Change-Id: Ic61631efd8790150a5e2914822f1dd25bd77305a
Signed-off-by: Nikhil Ashoka &lt;a.nikhil@ibm.com&gt;
</content>
</entry>
<entry>
<title>Fix Unit tests and useI18n() misuse</title>
<updated>2026-01-13T21:32:20+00:00</updated>
<author>
<name>jason westover</name>
<email>jwestover@nvidia.com</email>
</author>
<published>2025-08-18T22:16:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=313d15cf9f14e8a264f97a3370c3be4e494e5e0d'/>
<id>urn:sha1:313d15cf9f14e8a264f97a3370c3be4e494e5e0d</id>
<content type='text'>
Vue 3's vue-i18n requires useI18n() to be called within setup()
or reactive contexts. Calling it in Options API data() creates
disconnected i18n instances that cannot resolve linked messages.

Component fixes:
- Enable globalInjection in i18n.js for automatic $t injection
- Remove explicit useI18n() imports from 84 components that
  incorrectly called useI18n().t in their data() functions

Unit test fixes:
- Mock @/i18n module in jest.setup.js because Webpack's
  require.context() does not work in Jest, leaving the real
  module with no locale messages loaded
- Re-export real createI18nInstance so i18n unit tests work
- Update snapshots to reflect real translated text instead
  of raw translation keys
- Fix b-form-radio/checkbox stubs to wrap content in div for
  proper data-test-id attribute inheritance
- Remove duplicate i18n plugin installations from individual
  test files that caused 'already registered' warnings
- Suppress expected missing-key warning in vendor overlay test

Tested:
- Sanity testing on webui, ensured translations work.
- All Unit tests pass (19/19) with no Errors or Warnings.

Change-Id: I9789acd823261eccc7affde0957dd22e8fec06b1
Signed-off-by: Jason Westover &lt;jwestover@nvidia.com&gt;
</content>
</entry>
<entry>
<title>Migrate Vuelidate from v1 to v2 API</title>
<updated>2026-01-11T22:17:22+00:00</updated>
<author>
<name>Jason Westover</name>
<email>jwestover@nvidia.com</email>
</author>
<published>2025-12-21T17:54:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=75b020396e10c3ecc5ceae8eaf7ce7705445cdf8'/>
<id>urn:sha1:75b020396e10c3ecc5ceae8eaf7ce7705445cdf8</id>
<content type='text'>
Complete the migration from Vuelidate v1 (vuelidate 0.7.7) to v2
(@vuelidate/core 2.0.3 and @vuelidate/validators 2.0.4).

Changes include:
- Replace imports from 'vuelidate/lib/validators' with
  '@vuelidate/validators'
- Convert static 'validations:' objects to 'validations()' methods
  which return the validation rules object
- Update helpers.regex() syntax from v1 two-arg format
  helpers.regex('name', pattern) to v2 single-arg
  helpers.regex(pattern)
- Create custom macAddress validator using regex since macAddress
  is not included in @vuelidate/validators v2
- Remove deprecated vuelidate 0.7.7 package from dependencies
- Add unit tests for Vuelidate v2 migration verification
- Fix DateTime store to continue with DateTime update even if NTP
  settings update fails
- Fix Network Table components (IPv4, IPv6, DNS) missing @ok event
  handlers for Add modal dialogs
- Fix CSR country dropdown by restoring COUNTRY_LIST data and
  moving useI18n() call to setup() function
- Fix disconnected modals in Network page by using eventBus to
  communicate between child components and parent (hostname,
  MAC address, default gateway edit buttons)

Tested:
- npm run build completes successfully
- npm run test:unit passes 66 new Vuelidate validation tests:
  - VuelidateMixin.spec.js: getValidationState method tests
  - TableDateFilter.spec.js: Date range validation tests
  - ModalHostname.spec.js: Hostname validation tests
  - ModalMacAddress.spec.js: MAC address validation tests
  - ModalUser.spec.js: User form validation tests
- Manual testing performed:
  - User Management: Create/edit user with password confirmation
  - LDAP: Enable/disable with conditional field requirements
  - Date/Time: Switch between NTP and manual modes
  - Factory Reset: Confirm checkbox validation when server is on
  - Network Settings: Add IPv4, IPv6, DNS addresses via modals
  - Network Settings: Edit hostname, MAC address, default gateway
  - Certificates: Generate CSR with country dropdown working

Change-Id: I0f6b5d89d1791b36977f1a3c16cbd10bca6a484a
Signed-off-by: Jason Westover &lt;jwestover@nvidia.com&gt;
</content>
</entry>
<entry>
<title>Migrate to Bootstrap 5 and remove Vue compat plugin</title>
<updated>2025-11-22T03:03:11+00:00</updated>
<author>
<name>jason westover</name>
<email>jwestover@nvidia.com</email>
</author>
<published>2025-11-04T02:58:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=d36ac8a8be8636ddd0e64ce005d507b21bcdeb00'/>
<id>urn:sha1:d36ac8a8be8636ddd0e64ce005d507b21bcdeb00</id>
<content type='text'>
Complete migration from Bootstrap 4 (bootstrap-vue) to Bootstrap 5
(bootstrap-vue-next) and remove the @vue/compat plugin to finalize
the Vue 3 migration.

Bundle size impact:
- Before (Bootstrap 4 + bootstrap-vue): 535 KiB gzipped
- After (Bootstrap 5 + bootstrap-vue-next): 511 KiB gzipped
- Reduction: 24 KiB (4.5% smaller)

Package updates:
- Update bootstrap 4.6.2 -&gt; 5.3.8
- Update bootstrap-vue 2.23.1 -&gt; bootstrap-vue-next 0.40.8
- Remove @vue/compat plugin
- Update vue 3.4.29 -&gt; 3.5.24 and related packages
- Add mitt 3.0.1 for global event bus
- Add vue-demi 0.14.10 for library compatibility

Bootstrap 5 CSS updates:
- Replace directional classes: ml/mr/pl/pr -&gt; ms/me/ps/pe
- Replace text-left/right -&gt; text-start/end
- Replace sr-only -&gt; visually-hidden / visually-hidden-focusable
- Update media breakpoint xs -&gt; sm (Bootstrap 5 removed xs)
- Update color functions: gray("700") -&gt; $gray-700
- Add form-switch border-radius for curved toggles
- Update alert, table, toast, form, and button styles

Bootstrap-Vue-Next API changes:
- Use createBootstrap() for plugin registration
- Update modal footer slots: #modal-footer -&gt; #footer
- Fix form select events: @change -&gt; @update:model-value
- Add v-model bindings to modals instead of manual show()/hide()
- Update toast system with custom plugin wrapping useToast()
- Register components and directives explicitly

Vue 3 specific updates:
- Replace $root.$emit with mitt event bus (eventBus.js)
- Update render function from h(App) to createApp(App)
- Add emits option to components
- Use h() instead of $createElement in mixins
- Add Vue 3 compile-time feature flags with documentation
- Update event listeners: $on/$off to eventBus methods
- Add beforeUnmount cleanup for event listeners

New components and significant additions:
- src/plugins/toast.js - Custom toast plugin wrapping useToast() for
  Options API compatibility
- src/components/Global/ConfirmModal.vue - Global confirmation dialog
  shim to replace Bootstrap 4's removed bvModal.msgBoxConfirm
- src/eventBus.js - mitt-based event bus with Vue 2-compatible API
- Navigation state preservation on page refresh implemented

Critical fixes:
- Add global API interceptor to strip Vue reactivity from payloads
- Preserve binary data (File, Blob, FormData) in API requests
- Fix Generate CSR modal v-model binding for proper open/close
- Remove debug logging and fix jest configuration
- Fix responsive text visibility in AppHeader
- Update BVTableSelectableMixin for proper row selection
- Fix BVToastMixin VNode rendering for Vue 3

Vue 3 modal fixes (lazy-loaded components):
- Add v-model support to network modals (ModalIpv4, ModalIpv6, ModalDns,
  ModalHostname, ModalMacAddress, ModalDefaultGateway) by adding
  modelValue prop, watcher on modelValue that triggers show(), and
  update:modelValue emit in resetForm
- Remove lazy loading from TableIpv4, TableIpv6, TableDns to ensure
  modal component refs are available when v-model triggers
- Fix modal title accessibility by adding title prop to modals
  (ModalAddDestination, ModalUser, ModalAddRoleGroup, etc.)

i18n fixes (computed properties):
- Fix computed properties using i18n translations in ModalAddRoleGroup,
  ModalUser, and ModalUploadCertificate
- Move useI18n() call from data() to setup() and return i18n object
- Use i18n.t() instead of $t in computed properties and templates
- Prevents "this.$t is not a function" and "_ctx.$t is not a function"
  errors in Vue 3

Toast notification fixes:
- Fix toast progress bar visibility by setting progressProps to
  undefined (documented way to opt-out) instead of false
- Change modelValue prop to interval for auto-dismiss timing
- Remove temporary CSS display:none hack from _toasts.scss

Network settings fixes:
- Fix checkbox @change event sending Vue reactive proxy object instead
  of boolean by casting with !! operator in changeDomainNameState and
  related methods in NetworkGlobalSettings.vue
- Ensures API receives plain boolean values in PATCH requests

Navigation fixes:
- Fix nav-link styling for navigation items without children by
  replacing b-nav-item with router-link in AppNavigation.vue
- Prevents blue font color from .nav-link CSS class

Configuration updates:
- Remove vue-compat webpack configuration
- Add Vue 3 feature flags (__VUE_OPTIONS_API__, etc.)
- Add .cursor to .gitignore

Accessibility improvements:
- Add autocomplete attributes to password and credential inputs
- Add modal title props for screen reader support

Build completes successfully and UI behavior matches pre-migration.

Extracted features (to be submitted in follow-up PRs):
The following features were removed from this migration PR to keep it
focused on the Bootstrap 5 upgrade. They will be submitted separately:
1. UnresponsiveModal - Server connectivity watchdog with auto-retry
2. Auth token persistence - sessionStorage support for X-Auth-Token
3. Hardware store error handling - try/catch, dynamic discovery
4. Login page connecting indicator - Backend polling with spinner
5. Test updates - Jest setup and snapshot updates for
   Bootstrap-Vue-Next
6. Documentation updates - Vue 3 and Vue I18n v9+ API documentation
7. Enhanced ConfirmModal - Feature-rich confirmation dialog with
   custom actions

Change-Id: Ib76a58f324b3c926cf536e6e4626e4271639de38
Signed-off-by: Jason Westover &lt;jwestover@nvidia.com&gt;
</content>
</entry>
<entry>
<title>Invalid feedback if condition change</title>
<updated>2024-10-03T18:34:06+00:00</updated>
<author>
<name>Surya Venkatesan</name>
<email>suryav@ami.com</email>
</author>
<published>2024-09-23T14:25:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=69be824a756a42efc64ae05b7cc5ca0d83a1dee3'/>
<id>urn:sha1:69be824a756a42efc64ae05b7cc5ca0d83a1dee3</id>
<content type='text'>
For required, invalid format, minlength, maxlength, date, pattern
validation if condition change in the few components

Change-Id: Id8eebc140301e48dde833a604ca92426ebf77c9c
Signed-off-by: Surya Venkatesan &lt;suryav@ami.com&gt;
</content>
</entry>
<entry>
<title>Vuelidate, I18n, and filter are upgraded to vue3</title>
<updated>2024-10-03T18:34:06+00:00</updated>
<author>
<name>Surya V</name>
<email>suryav@ami.com</email>
</author>
<published>2024-07-11T09:49:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=de23ea23d88451a2fa2774ec72053772603c23ae'/>
<id>urn:sha1:de23ea23d88451a2fa2774ec72053772603c23ae</id>
<content type='text'>
While navigating to the pages i18n, vuelidate, and filters errors
occurred. i18n, and vuelidate code changes in each page adapted to
vue3. Filter global function for date and time format implemented
in the main.js file and those files which as called the filter
functions.

Change-Id: If1a2ee22d47750faef1c35ef2c263299067d9a20
Signed-off-by: Surya Venkatesan &lt;suryav@ami.com&gt;
</content>
</entry>
<entry>
<title>Upgrade vue3 and all dependencies</title>
<updated>2024-10-03T18:34:06+00:00</updated>
<author>
<name>Ed Tanous</name>
<email>ed@tanous.net</email>
</author>
<published>2024-03-23T21:56:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=7d6b44cb263da09e575c7cb28cab88c1eb339c7b'/>
<id>urn:sha1:7d6b44cb263da09e575c7cb28cab88c1eb339c7b</id>
<content type='text'>
Start the process of porting everything to Vue 3.  I have most things
working.  npm run-scripts build works, npm install works.  prettier
passes.  Styles load, login works, webui loads.

This was primarily done using the linked documents below.  It makes the
following design decisions:
1. Vue is put in compat 2 mode, which allows most of the components to
   work as-is.
2. Bootstrap v4 is used along with bootstrap-vue to keep our components
   working.
3. Minor changes are made to load the latest versions of vue-router,
   vuex, and vue-i18n.

I suspect this patchset is good enough to start with, and we can clean
up the broken things one patchset at a time.  The things that need to
happen are:

1. Get remaining features working again.  This primiarily is vue-i18n
   for mixins, and non vue components.  This likely needs to be done by
   not pulling in i18n into the non vue components, then using the .Vue
   files to do the internationalization in the component context, NOT in
   the mixin context.  Alternatively, we could drop MixIns alltogether.
2. Get custom styles working again.  Previously, we used some path
   hackery in vue.config.js to optionally pre-load styles.  This stops
   working now that we're required to @import our modules.  Likely we
   need some rearangement of the paths such that custom styles are a
   complete replacement (possibly importing the original) rather than
   additive with overrides.  That's a guess, but I don't really see
   anyone else doing customization the way we've defined it here.
3. Bootstrap 5 no longer requires ANY custom vue modules, as it has
   dropped the jquery dependency.  We won't be able to pull in bootstrap
   5 all at once, so pull in bootstrap 5 under an alias, like
     "bootstrap5" that we can optionally import 5 or 4.
4. One at a time, start porting components over to Vue3 syntax and
   bootstrap 5.  This will be the bulk of the manual work and review.

The only thing I think left is getting unit tests passing, which I
commented out the pre-commit hook to make this PR.

Tested: Code builds.  Needs better testing.

[1] https://router.vuejs.org/guide/migration/
[2] https://vue-i18n.intlify.dev/guide/migration/vue3
[3] https://vuelidate-next.netlify.app/migration_guide.html#package-name-and-imports

Change-Id: I5bb3187b9efbf2e4ff63e57994bc528756e2a981
Signed-off-by: Ed Tanous &lt;ed@tanous.net&gt;
</content>
</entry>
<entry>
<title>Remove hardcoded chassis in Manage power usage</title>
<updated>2021-12-28T08:48:11+00:00</updated>
<author>
<name>MichalX Szopinski</name>
<email>michalx.szopinski@intel.com</email>
</author>
<published>2021-07-12T10:59:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=f4328edf86b284fe8836717251ce6696670dbdd5'/>
<id>urn:sha1:f4328edf86b284fe8836717251ce6696670dbdd5</id>
<content type='text'>
Simmilar modification to
https://gerrit.openbmc-project.xyz/c/openbmc/webui-vue/+/42988
which removes the hardcoded chassis name from url on Manage power usage
tab. With this modification we are displaying only informations about
first power device. This change also fixes the overwriting existing
power cap value on load.

Signed-off-by: MichalX Szopinski &lt;michalx.szopinski@intel.com&gt;
Change-Id: Ia164db9f2c50d98bc767c0f4729e9572a2d01da1
</content>
</entry>
<entry>
<title>IA update: Add resource management section</title>
<updated>2021-08-10T19:20:42+00:00</updated>
<author>
<name>Sandeepa Singh</name>
<email>sandeepa.singh@ibm.com</email>
</author>
<published>2021-07-28T09:55:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=6dba4be6125c10210bafa030ac17737d3a9b28b8'/>
<id>urn:sha1:6dba4be6125c10210bafa030ac17737d3a9b28b8</id>
<content type='text'>
This is the sixth commit for information architecture changes and has
the following changes:

- Resource management section has been added
- Carbon icon used for resource management section is data--base--alt
- Manage power usage page from operations has been moved to
resource management
- Manage power usage page has been updated to power page

Signed-off-by: Sandeepa Singh &lt;sandeepa.singh@ibm.com&gt;
Change-Id: If3feb994dbad19dd6cfb1507d976d09643c8e4d6
</content>
</entry>
</feed>
