<feed xmlns='http://www.w3.org/2005/Atom'>
<title>BMC/OpenBmc/webui-vue.git/src/components/Composables, 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-08-20T09:25:37+00:00</updated>
<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>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 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>
<entry>
<title>Implemented Sensors page with VueQuery and Composition API</title>
<updated>2026-02-13T09:54:27+00:00</updated>
<author>
<name>Nishant Tiwari</name>
<email>tiwari.nishant@ibm.com</email>
</author>
<published>2026-01-28T14:48:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/webui-vue.git/commit/?id=d3b05033fe82aed6c53f4f2b52c23d3bd285d423'/>
<id>urn:sha1:d3b05033fe82aed6c53f4f2b52c23d3bd285d423</id>
<content type='text'>
Introduce reusable Redfish API infrastructure and modernize the Sensors
page to use Vue 3 Composition API with TanStack Query, eliminating the
need for Vuex store patterns for server state management.

This change provides a foundation for migrating other hardware status
pages (Memory, Processors, Drives, etc.) to a more maintainable and
performant architecture.

Key changes:

1. Generic Redfish composables (src/api/composables/):
   - useRedfishRoot.ts: Caches ServiceRoot and detects OData support
   - useRedfishCollection.ts: Smart collection fetcher with OData
     $expand/$select support and graceful fallback
   - useAllSubResources.ts: Generic pattern for fetching nested
     resources from parent collections

2. Sensors page modernization:
   - Migrated from Vuex store to TanStack Query (Vue Query)
   - Created useSensors.ts composable for data fetching
   - Removed legacy Thermal and PowerSubsystem endpoints
   - Now uses only modern /Chassis/{id}/Sensors collection
   - Maintains existing UI/UX with Bootstrap Vue table

3. TypeScript support:
   - Added tsconfig.json and webpack ts-loader configuration
   - Created required Redfish type definitions
   - Preserves Redfish PascalCase property names

4. Performance optimizations:
   - Auto-detects and uses OData $expand for fewer API calls
   - Implements automatic caching and deduplication
   - Smart retry logic with exponential backoff
   - 30-second stale time with 5-minute garbage collection

Benefits for future development:

- The generic composables are designed for reuse across components:
  // Fetch all Memory from all Systems
  useAllSubResources&lt;Memory&gt;('/redfish/v1/Systems', 'Memory')

  // Fetch all Drives from all Storage
  useAllSubResources&lt;Drive&gt;('/redfish/v1/Storage', 'Drives')

- Implemented TypeScript types
- Reuses existing Bootstrap table components
- Preserves existing UI/UX
- Focuses on infrastructure reusability

This pattern eliminates boilerplate Vuex store code and provides
better developer experience with automatic loading states, error
handling, and background refetching.

Tested-by: Manual testing on development server
- Sensors page loads correctly
- OData optimization works when supported
- Graceful fallback when OData unavailable
- All table functionality preserved (sorting, filtering,
  export, cancel and searching)

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