<feed xmlns='http://www.w3.org/2005/Atom'>
<title>BMC/OpenBmc/webui-vue.git/src/components, 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-09-28T10:42:29+00:00</updated>
<entry>
<title>Add asset tag edit functionality to overview page</title>
<updated>2026-09-28T10:42:29+00:00</updated>
<author>
<name>Nishant Tiwari</name>
<email>tiwari.nishant@ibm.com</email>
</author>
<published>2026-07-16T08:27:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=85248e05cf5c44fc2a77135f829ae33b0d485e2f'/>
<id>urn:sha1:85248e05cf5c44fc2a77135f829ae33b0d485e2f</id>
<content type='text'>
Implemented the ability to view and edit the system asset tag directly
from the Overview page, including a modal dialog for editing, Vuex store
action for saving, and truncation in the app header.

Changes:
  - Added ModalAssetTag.vue component with:
    - Form input for editing the asset tag value
    - Vuelidate validation requiring a non-empty tag
  - Updated OverviewServer.vue to:
    - Display asset tag in the system information section
    - Add inline edit button using Carbon edit icon
    - Dispatch saveAssetTag store action with toast feedback
    - Refresh global system info after a successful save
  - Added saveAssetTag action to SystemStore.js using PATCH
    against the system path endpoint
  - Updated AppHeader.vue to truncate asset tags longer than
    30 characters with an ellipsis, preserving full value in
    the title attribute for accessibility
  - Added translation keys for asset tag label, modal title,
    and success/error toast messages in en-US, ka-GE, and
    ru-RU locale files

Testing:
  - Verified asset tag displays correctly in system info section
  - Verified modal opens, validates, and submits correctly
  - Verified PATCH request updates asset tag on the server
  - Validated success and error toast notifications display
  - Confirmed long asset tags are truncated in the header

Change-Id: I6ac51dfc24b9d40986b74e9220cff955b029d659
Signed-off-by: Nishant Tiwari &lt;tiwari.nishant@ibm.com&gt;
</content>
</entry>
<entry>
<title>Implemented Reboot BMC with TanStack Vue Query</title>
<updated>2026-09-28T08:33:30+00:00</updated>
<author>
<name>Nikhil Ashoka</name>
<email>a.nikhil@ibm.com</email>
</author>
<published>2026-07-21T11:13:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=4628f24b336ea30b288a4b50d42c0e50d8d62869'/>
<id>urn:sha1:4628f24b336ea30b288a4b50d42c0e50d8d62869</id>
<content type='text'>
This change migrates the Reboot BMC page from Vuex to TanStack Query
and Composition API

Key changes:

1. Redfish types (src/api/types/redfish.ts):
- Adds Manager interface with LastResetTime and Actions fields,
  typed in PascalCase to match the Redfish schema

2. BMC reboot composable
(src/components/Composables/useRebootBmc.ts):
- Replaces Vuex controls/getLastBmcRebootTime and controls/rebootBmc
  with a Composition API composable
- Uses useRedfishRoot() to resolve the Managers collection URI from
  ServiceRoot; fetches the first member (the BMC Manager) in queryFn
- Configures staleTime: Infinity and gcTime: Infinity because
  LastResetTime only changes on a reboot; onSuccess invalidation
  handles the one real change event, avoiding unnecessary refetches
- mutationFn is pure (no i18n strings, no toast calls); view owns
  all user-facing messages via try/catch
- onSuccess calls invalidateQueries only (no optimistic update,
  which would be immediately overwritten by the refetch)
- resetTarget prefers Actions['#Manager.Reset'].target from the
  cached Manager, falls back to the conventional Redfish path

3. View modernization
(src/views/Operations/RebootBmc/RebootBmc.vue):
- Refactors from Options API to &lt;script setup&gt;, using useRebootBmc(),
  useLoadingBar(), and useToast() composables
- Loader semantics: isLoading drives the loading bar on first fetch
  only; cached data renders instantly on re-navigation with a silent
  background refetch (no flicker)
- Reboot button disabled when bmcQuery.isError is true, preventing
  mutation dispatch with an unavailable reset target
- Confirm dialog uses eventBus.$emit('confirm:open', ...) directly,
  matching the $confirm global property contract without Options API

4. Store cleanup
(src/store/modules/Operations/ControlStore.js):
- Removes lastBmcRebootTime state, getter, and setLastBmcRebootTime
  mutation (now owned by bmcQuery in the composable)
- Removes getLastBmcRebootTime and rebootBmc actions (replaced by
  useQuery and useMutation in useRebootBmc.ts)
- Removes unused i18n import
- Remaining ControlStore state (isOperationInProgress,
  lastPowerOperationTime) and server power actions are unchanged;
  they are still used by ServerPowerOperations.vue and Firmware.vue

5. Toast rendering fix (src/components/Composables/useToast.ts,
   src/plugins/toast.js):
- Fixes modelValue: false → true for danger/error toasts in both
  the Composition API useToast composable and the Options API
  ToastPlugin; modelValue: false suppressed toast rendering
  entirely in bootstrap-vue-next, making error toasts invisible
  app-wide

Tested-by: Manual testing on development server
- Last BMC reboot time loads correctly from Manager.LastResetTime
- Reboot button triggers GracefulRestart POST; success and error
  toasts display with localized messages
- Loading bar shows on first page load and during reboot POST;
  subsequent visits render cached data instantly
- Read-only user receives the global Unauthorized toast (403
  interceptor) followed by the page-level error toast

Change-Id: I5d49527f176041958e48889d6261780fcffdd9df
Signed-off-by: Nikhil Ashoka &lt;a.nikhil@ibm.com&gt;
</content>
</entry>
<entry>
<title>Fix translation bugs and remove unused keys</title>
<updated>2026-08-20T09:25:37+00:00</updated>
<author>
<name>Nikhil Ashoka</name>
<email>a.nikhil@ibm.com</email>
</author>
<published>2026-07-31T14:09:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=1322c5b754bbd147caa4065721eb9e5a2928a924'/>
<id>urn:sha1:1322c5b754bbd147caa4065721eb9e5a2928a924</id>
<content type='text'>
- Fix three structural bugs found by locale audit:
  - ka-GE: rename pageFirmware.sectionTitleHostCards to
  sectionTitleBiosCards to match the key used by
  FirmwareCardsBios.vue.
  - ru-RU: move global.offline.okToRetryCancelToLogin out of
  global.toast.offline to global.offline, restoring the correct
  nesting path that matches en-US and ka-GE.
  - PostCodeLogs: fix deleteAllLogs confirm dialog to reference
  pagePostCodeLogs.modal.deleteAllMessage/Title instead of
  pageEventLogs.modal.*, decoupling the two pages so future
  wording changes to Event Logs cannot silently affect Post
  Code Logs.
- TableDns: fix delete action title passed as a raw key string
  literal to TableRowAction; wrap with i18n.global.t() so the
  translated string is rendered instead of the key path.
- Remove 30 unused translation keys from all three locale files
(en-US, ru-RU, ka-GE). They were not being used.

Change-Id: I7edd9b326e1a4ad096508d5ed1661e1234c7f571
Signed-off-by: Nikhil Ashoka &lt;a.nikhil@ibm.com&gt;
</content>
</entry>
<entry>
<title>Fix header checkbox select-all in View All mode</title>
<updated>2026-08-13T04:49:26+00:00</updated>
<author>
<name>Aravinth Sri Krishna Raja Raghavan</name>
<email>aravinths@ami.com</email>
</author>
<published>2026-07-17T11:08:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=8f93ea76414a0be46813f1cc6615f309c5943137'/>
<id>urn:sha1:8f93ea76414a0be46813f1cc6615f309c5943137</id>
<content type='text'>
When "View All" is selected under Items per Page, perPage is 0. The
selection logic fell back to `this.perPage || 10`, treating the falsy
0 as a page size of 10. Clicking the header checkbox therefore selected
only the first 10 displayed logs instead of all of them, and the
selected count did not reflect the true total.

Treat perPage === 0 as "View All" so the computed page bounds span
every item. The calculation is centralized in a getPageBounds() helper
shared by the select-all handler and the header checkbox state logic,
keeping the two paths consistent.

Also fix a UI state bug where, after a resolve/unresolve action, the
row checkboxes appeared unselected but the selection header remained
visible and still referenced the stale selection. clearSelectedRows()
is now called in a finally() block so it runs whether the dispatch
succeeds or fails, keeping the selection state consistent.

fix issue for:
https://github.com/openbmc/webui-vue/issues/142

Change-Id: I46b33c1d73c633d6c7df446ceecaf4222be9ea90
Signed-off-by: Aravinth Sri Krishna Raja Raghavan &lt;aravinths@ami.com&gt;
</content>
</entry>
<entry>
<title>Fix toast visibility and auto-hide behavior</title>
<updated>2026-07-20T17:19:53+00:00</updated>
<author>
<name>Aravinth Sri Krishna Raja Raghavan</name>
<email>aravinths@ami.com</email>
</author>
<published>2026-07-07T18:23:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=eab5bcd07420f30d4199c1f7a13eac44e15446a7'/>
<id>urn:sha1:eab5bcd07420f30d4199c1f7a13eac44e15446a7</id>
<content type='text'>
In bootstrap-vue-next 0.40.8 a toast's modelValue controls
visibility: a number auto-hides after that many milliseconds,
true shows until dismissed, and false is never rendered. Because
non-success toasts were created with modelValue: false, only
success toasts (which used a numeric value) ever appeared.

Give every variant a valid modelValue so error, info, and
warning toasts render. Success toasts auto-dismiss after 10s;
all other variants stay visible until the user closes them
manually so important messages are not missed.

Change-Id: I2d885aa81d3cfb040d3e29f570f8c8855beae0f1
Signed-off-by: Aravinth Sri Krishna Raja Raghavan &lt;aravinths@ami.com&gt;
</content>
</entry>
<entry>
<title>Add Access Denied alert to SOL console</title>
<updated>2026-06-25T06:39:00+00:00</updated>
<author>
<name>Aravinth S</name>
<email>aravinths@ami.com</email>
</author>
<published>2026-05-21T11:58:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=f286d820e441325a86733fe7433be9d001a9a9d9'/>
<id>urn:sha1:f286d820e441325a86733fe7433be9d001a9a9d9</id>
<content type='text'>
Non-admin users navigating to the Serial Over LAN page had no
clear feedback — the page either failed silently or showed a
generic error. Show the SOL button and nav item to all users
and render an Access Denied alert when the session lacks the
required privilege.

A reusable AccessDeniedAlert global component is introduced
so other restricted pages can adopt the same pattern with a
single line.

Change-Id: Ifbb93bb966c801b3a72230e8f3b752b62ef22929
Signed-off-by: Aravinth Sri Krishna Raja Raghavan &lt;aravinths@ami.com&gt;
</content>
</entry>
<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>Add dynamic language selector in header</title>
<updated>2026-06-02T09:33:37+00:00</updated>
<author>
<name>Aravinth S</name>
<email>aravinths@ami.com</email>
</author>
<published>2026-05-06T16:03:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=95f0d613d5da226b190348bb36cf8ea911a2051c'/>
<id>urn:sha1:95f0d613d5da226b190348bb36cf8ea911a2051c</id>
<content type='text'>
Enable users to switch between English, Russian, and Georgian
languages directly from the application header, eliminating the
need to log out and log back in to change language preferences.

Prior to this enhancement, changing the interface language
required users to:
- Log out from their current session
- Return to the login page
- Select a different language
- Log back in with credentials

This workflow disruption made it impractical for operators to
switch languages during their work sessions. The new language
selector in the user dropdown allows users to:

- Change language instantly from any page without logout
- Switch between languages as needed during a single session
- Maintain active sessions and current page context
- Access all three supported languages (English, Russian, Georgian)

The language preference persists across sessions via the Vuex
store, so the selected language remains active after logout and login.

This improvement is particularly valuable for:
- Multilingual teams sharing the same BMC system
- Operators who need to verify terminology in different languages
- Training scenarios where instructors switch between languages
- International deployments with diverse user bases

Implementation includes:
- Language dropdown in user menu (between Profile Settings and Log Out)
- getAvailableLanguages() helper in i18n.js using Intl.DisplayNames
  to automatically generate language labels in "{English} - {Native}"
  format (e.g., "Russian - Русский", "US - English")
- getRoutePageTitle() helper in i18n.js to eliminate duplicated
  route-to-title logic between App.vue and PageTitle.vue
- Reactive translations via Vue i18n computed properties
- Page title updates in both DOM (PageTitle component) and
  browser tab (App.vue document.title)
- Component re-rendering triggered by routerKey increment
- Centralized localStorage persistence in GlobalStore.js
  setLanguagePreference mutation
- Translation keys added to en-US.json, ru-RU.json, and ka-GE.json
  (global.pageTitle.missing, appHeader.language)

All interface text, navigation menus, and page titles update
immediately when language is changed.

Change-Id: Ie11523c5ff23fc1600aca2d8ee5adb542c5ce4b3
Signed-off-by: Aravinth Sri Krishna Raja Raghavan &lt;aravinths@ami.com&gt;
</content>
</entry>
<entry>
<title>Add privilege check for firmware update page</title>
<updated>2026-05-27T14:09:49+00:00</updated>
<author>
<name>Aravinth S</name>
<email>aravinths@ami.com</email>
</author>
<published>2025-09-16T08:07:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=59a7a8b9233a979d4b75008b13478f44c21b3236'/>
<id>urn:sha1:59a7a8b9233a979d4b75008b13478f44c21b3236</id>
<content type='text'>
Disables firmware update page buttons for users with "Read-only"
privileges to improve user experience. This helps users understand
when they lack permissions to perform firmware updates based on
their current session role.

This is a UI-only improvement. Backend (bmcweb) validates all
operations according to Redfish privilege rules regardless of
UI state.

Changes:
- Created reusable usePrivilegeCheck() composable
- Added privilege check to disable firmware update controls for
read-only users
- Added info banner to notify "The attempted action is not accessible
from the logged in account. Contact your system administrator to check
your privilege role".
- Follows Vue 3 Composition API patterns

Tested-by: Manual testing with Administrator, Operator, and
ReadOnly roles

Change-Id: I7e6e28267b094ab04f7dcc4b1e0cc609dc7f5e28
Signed-off-by: Aravinth Sri Krishna Raja Raghavan &lt;aravinths@ami.com&gt;
</content>
</entry>
<entry>
<title>Implemented dynamic fetching of the sensors</title>
<updated>2026-03-09T08:48:27+00:00</updated>
<author>
<name>Nishant Tiwari</name>
<email>tiwari.nishant@ibm.com</email>
</author>
<published>2026-03-03T14:54:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=3ab2bc9910067076f89b713d027eefbfa8344ff9'/>
<id>urn:sha1:3ab2bc9910067076f89b713d027eefbfa8344ff9</id>
<content type='text'>
This commit updates the implementation to dynamically
discover all chassis and fetch sensors from each.

Changes include:

- Updated useSensors to use /redfish/v1/Chassis collection endpoint
- Fixed discoverParentsWithSubResource to properly check individual
  chassis members for Sensors sub-resource

The implementation now automatically discovers all chassis, fetches
sensors from each, and deduplicates results by @odata.id.

Tested: Verified sensors display from all chassis in
 multi-chassis systems

Change-Id: Idadaef1be1b019cdded52ce7debe6f5f795e985e
Signed-off-by: Nishant Tiwari &lt;tiwari.nishant@ibm.com&gt;
</content>
</entry>
</feed>
