@@ -13,7 +13,7 @@ import { FluxOperatorIcon } from '../../layout/Icons'
1313import { useHashTab } from '../../../utils/hash'
1414
1515// Valid tabs for the ReconcilerPanel
16- const RECONCILER_TABS = [ 'overview' , 'history' , 'events' , 'spec' , 'status' ]
16+ const RECONCILER_TABS = [ 'overview' , 'history' , 'events' , 'values' , ' spec', 'status' ]
1717
1818export function ReconcilerPanel ( { kind, name, namespace, resourceData } ) {
1919 // Tab state synced with URL hash (e.g., #reconciler-events)
@@ -111,6 +111,18 @@ export function ReconcilerPanel({ kind, name, namespace, resourceData }) {
111111 }
112112 } , [ resourceData ] )
113113
114+ const valuesYaml = useMemo ( ( ) => {
115+ if ( kind !== 'HelmRelease' || ! resourceData ) return null
116+ if ( resourceData . status ?. helmValues ) return resourceData . status . helmValues
117+ if ( resourceData . spec ?. values ) return resourceData . spec . values
118+ return null
119+ } , [ resourceData , kind ] )
120+
121+ const valuesError = useMemo ( ( ) => {
122+ if ( kind !== 'HelmRelease' || ! resourceData ) return null
123+ return resourceData . status ?. helmValuesError || null
124+ } , [ resourceData , kind ] )
125+
114126 const statusYaml = useMemo ( ( ) => {
115127 if ( ! resourceData ?. status ) return null
116128 return {
@@ -183,7 +195,7 @@ export function ReconcilerPanel({ kind, name, namespace, resourceData }) {
183195 < DashboardPanel title = "Reconciler" id = "reconciler-panel" >
184196 { /* Tab Navigation */ }
185197 < div class = "border-b border-gray-200 dark:border-gray-700 mb-4" >
186- < nav class = "flex space-x-4" >
198+ < nav class = "flex space-x-4 overflow-x-auto " >
187199 < TabButton active = { reconcilerTab === 'overview' } onClick = { ( ) => setReconcilerTab ( 'overview' ) } >
188200 < span class = "sm:hidden" > Info</ span >
189201 < span class = "hidden sm:inline" > Overview</ span >
@@ -196,6 +208,11 @@ export function ReconcilerPanel({ kind, name, namespace, resourceData }) {
196208 < TabButton active = { reconcilerTab === 'events' } onClick = { ( ) => setReconcilerTab ( 'events' ) } >
197209 Events
198210 </ TabButton >
211+ { kind === 'HelmRelease' && ( valuesError || valuesYaml ) && (
212+ < TabButton active = { reconcilerTab === 'values' } onClick = { ( ) => setReconcilerTab ( 'values' ) } >
213+ Values
214+ </ TabButton >
215+ ) }
199216 < TabButton active = { reconcilerTab === 'spec' } onClick = { ( ) => setReconcilerTab ( 'spec' ) } >
200217 < span class = "sm:hidden" > Spec</ span >
201218 < span class = "hidden sm:inline" > Specification</ span >
@@ -292,6 +309,19 @@ export function ReconcilerPanel({ kind, name, namespace, resourceData }) {
292309 />
293310 ) }
294311
312+ { /* Values Tab */ }
313+ { reconcilerTab === 'values' && kind === 'HelmRelease' && (
314+ < div >
315+ { valuesError ? (
316+ < div class = "text-sm text-red-600 dark:text-red-400" >
317+ < pre class = "whitespace-pre-wrap break-all font-sans" > { valuesError } </ pre >
318+ </ div >
319+ ) : valuesYaml ? (
320+ < YamlBlock data = { valuesYaml } />
321+ ) : null }
322+ </ div >
323+ ) }
324+
295325 { reconcilerTab === 'spec' && < YamlBlock data = { specYaml } /> }
296326 { reconcilerTab === 'status' && < YamlBlock data = { statusYaml } /> }
297327
0 commit comments