Skip to content

Commit b83fcde

Browse files
pdesoyres-ccflorian-sanders-cc
authored andcommitted
feat(cc-tile-metrics)!: add the ability to hide the grafana link
BREAKING CHANGE: the smart context has changed - `grafanaLink` optional object property has been added, - `consoleGrafanaLink` property has been moved to `grafanaLink.console`, - `grafanaBaseLink` property has been moved to `grafanaLink.base`.
1 parent cce6f1e commit b83fcde

File tree

4 files changed

+93
-33
lines changed

4 files changed

+93
-33
lines changed

src/components/cc-tile-metrics/cc-tile-metrics.js

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,22 @@ export class CcTileMetrics extends LitElement {
281281
const cpuColorType = this.metricsState.type === 'loaded' ? this._getColorLegend(lastCpuValue) : SKELETON_COLOR;
282282
const memColorType = this.metricsState.type === 'loaded' ? this._getColorLegend(lastMemValue) : SKELETON_COLOR;
283283

284-
const grafanaLink = this.grafanaLinkState.type === 'loaded' ? this.grafanaLinkState.link : null;
284+
const links = [];
285+
if (this.grafanaLinkState.type === 'loaded') {
286+
links.push(
287+
ccLink(
288+
this.grafanaLinkState.link,
289+
i18n('cc-tile-metrics.grafana'),
290+
skeleton,
291+
i18n('cc-tile-metrics.link-to-grafana'),
292+
),
293+
);
294+
}
295+
if (!isStringEmpty(this.metricsLink)) {
296+
links.push(
297+
ccLink(this.metricsLink, i18n('cc-tile-metrics.metrics-link'), false, i18n('cc-tile-metrics.link-to-metrics')),
298+
);
299+
}
285300

286301
const panel = this._getCurrentPanel();
287302

@@ -375,26 +390,14 @@ export class CcTileMetrics extends LitElement {
375390
376391
<div class="tile_docs ${classMap({ 'tile--hidden': panel !== 'docs' })}">
377392
${i18n('cc-tile-metrics.docs.msg')}
378-
<div class="docs-links">
379-
<p>${i18n('cc-tile-metrics.docs.more-metrics')}</p>
380-
<ul>
381-
<li>
382-
${ccLink(grafanaLink, i18n('cc-tile-metrics.grafana'), skeleton, i18n('cc-tile-metrics.link-to-grafana'))}
383-
</li>
384-
${!isStringEmpty(this.metricsLink)
385-
? html`
386-
<li>
387-
${ccLink(
388-
this.metricsLink,
389-
i18n('cc-tile-metrics.metrics-link'),
390-
false,
391-
i18n('cc-tile-metrics.link-to-metrics'),
392-
)}
393-
</li>
394-
`
395-
: ''}
396-
</ul>
397-
</div>
393+
${links.length > 0
394+
? html`<div class="docs-links">
395+
<p>${i18n('cc-tile-metrics.docs.more-metrics')}</p>
396+
<ul>
397+
${links.map((link) => html`<li>${link}</li>`)}
398+
</ul>
399+
</div>`
400+
: ''}
398401
</div>
399402
`;
400403
}

src/components/cc-tile-metrics/cc-tile-metrics.smart.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,13 @@ defineSmartComponent({
2121
apiConfig: { type: Object },
2222
ownerId: { type: String },
2323
appId: { type: String },
24-
consoleGrafanaLink: { type: String },
25-
grafanaBaseLink: { type: String },
24+
grafanaLink: { type: Object, optional: true },
2625
},
2726
/**
2827
* @param {OnContextUpdateArgs} args
2928
*/
3029
onContextUpdate({ context, updateComponent, signal }) {
31-
const { apiConfig, ownerId, appId, grafanaBaseLink, consoleGrafanaLink } = context;
30+
const { apiConfig, ownerId, appId, grafanaLink } = context;
3231

3332
updateComponent('metricsState', { type: 'loading' });
3433

@@ -48,14 +47,19 @@ defineSmartComponent({
4847
updateComponent('metricsState', { type: 'error' });
4948
});
5049

51-
fetchGrafanaAppLink({ apiConfig, ownerId, appId, grafanaBaseLink, signal })
52-
.then((grafanaAppLink) => {
53-
updateComponent('grafanaLinkState', { type: 'loaded', link: grafanaAppLink });
54-
})
55-
.catch(() => {
56-
// If Grafana is not enabled we fallback to the Console Grafana page
57-
updateComponent('grafanaLinkState', { type: 'loaded', link: consoleGrafanaLink });
58-
});
50+
if (grafanaLink == null) {
51+
updateComponent('grafanaLinkState', { type: 'hidden' });
52+
} else {
53+
updateComponent('grafanaLinkState', { type: 'loading' });
54+
fetchGrafanaAppLink({ apiConfig, ownerId, appId, grafanaBaseLink: grafanaLink.base, signal })
55+
.then((grafanaAppLink) => {
56+
updateComponent('grafanaLinkState', { type: 'loaded', link: grafanaAppLink });
57+
})
58+
.catch(() => {
59+
// If Grafana is not enabled we fallback to the Console Grafana page
60+
updateComponent('grafanaLinkState', { type: 'loaded', link: grafanaLink.console });
61+
});
62+
}
5963
},
6064
});
6165

src/components/cc-tile-metrics/cc-tile-metrics.stories.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,52 @@ export const defaultStory = makeStory(conf, {
105105
})),
106106
});
107107

108+
export const hiddenGrafanaLink = makeStory(conf, {
109+
/** @type {Array<Partial<CcTileMetrics>>} */
110+
items: baseItems.map((item) => ({
111+
...item,
112+
grafanaLinkState: { type: 'hidden' },
113+
metricsState: {
114+
type: 'loaded',
115+
metricsData: {
116+
cpuMetrics: addTimestamp(fakeMetricData(24, 25)),
117+
memMetrics: addTimestamp(fakeMetricData(24, 16)),
118+
},
119+
},
120+
})),
121+
});
122+
123+
export const hiddenMetricsLink = makeStory(conf, {
124+
/** @type {Array<Partial<CcTileMetrics>>} */
125+
items: baseItems.map((item) => ({
126+
...item,
127+
metricsLink: null,
128+
metricsState: {
129+
type: 'loaded',
130+
metricsData: {
131+
cpuMetrics: addTimestamp(fakeMetricData(24, 25)),
132+
memMetrics: addTimestamp(fakeMetricData(24, 16)),
133+
},
134+
},
135+
})),
136+
});
137+
138+
export const hiddenGrafanaAndMetricsLink = makeStory(conf, {
139+
/** @type {Array<Partial<CcTileMetrics>>} */
140+
items: baseItems.map((item) => ({
141+
...item,
142+
grafanaLinkState: { type: 'hidden' },
143+
metricsLink: null,
144+
metricsState: {
145+
type: 'loaded',
146+
metricsData: {
147+
cpuMetrics: addTimestamp(fakeMetricData(24, 25)),
148+
memMetrics: addTimestamp(fakeMetricData(24, 16)),
149+
},
150+
},
151+
})),
152+
});
153+
108154
export const loading = makeStory(conf, {
109155
/** @type {Array<Partial<CcTileMetrics>>} */
110156
items: baseItems.map((item) => ({

src/components/cc-tile-metrics/cc-tile-metrics.types.d.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ export interface MetricsData {
3333
memMetrics: Metric[];
3434
}
3535

36-
export type TileMetricsGrafanaLinkState = TileMetricsGrafanaLinkStateLoaded | TileMetricsGrafanaLinkStateLoading;
36+
export type TileMetricsGrafanaLinkState =
37+
| TileMetricsGrafanaLinkStateLoaded
38+
| TileMetricsGrafanaLinkStateLoading
39+
| TileMetricsGrafanaLinkStateHidden;
3740

3841
export interface TileMetricsGrafanaLinkStateLoaded {
3942
type: 'loaded';
@@ -44,6 +47,10 @@ export interface TileMetricsGrafanaLinkStateLoading {
4447
type: 'loading';
4548
}
4649

50+
export interface TileMetricsGrafanaLinkStateHidden {
51+
type: 'hidden';
52+
}
53+
4754
// this is what we retrieve directly from the API
4855
export interface RawMetric {
4956
data: { timestamp: number; value: string }[];

0 commit comments

Comments
 (0)