Skip to content

Commit 79d1996

Browse files
committed
fix(js): error if pageParams or its attributes are null
- Add null check for pageParams - Add optional chaining - Use fallback empty strings in DEFAULT_STORAGE_URLS - page-context.js: Add null check for products and provide fallback values
1 parent 16567e2 commit 79d1996

File tree

2 files changed

+44
-32
lines changed

2 files changed

+44
-32
lines changed

assets/js/local-storage.js

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -84,25 +84,31 @@ function getPreferences() {
8484

8585

8686
const defaultUrls = {};
87-
Object.entries(pageParams.influxdb_urls).forEach(([product, {providers}]) => {
88-
defaultUrls[product] = providers.filter(provider => provider.name === 'Default')[0]?.regions[0]?.url;
89-
});
87+
// Guard against pageParams being null/undefined and safely access nested properties
88+
if (pageParams && pageParams.influxdb_urls) {
89+
Object.entries(pageParams.influxdb_urls).forEach(([product, {providers}]) => {
90+
// Use optional chaining and nullish coalescing to safely access properties
91+
const defaultProvider = providers?.filter(provider => provider?.name === 'Default')[0];
92+
const defaultRegion = defaultProvider?.regions?.[0];
93+
defaultUrls[product] = defaultRegion?.url || '';
94+
});
95+
}
9096

9197
export const DEFAULT_STORAGE_URLS = {
92-
oss: defaultUrls.oss,
93-
cloud: defaultUrls.cloud,
94-
serverless: defaultUrls.serverless,
95-
core: defaultUrls.core,
96-
enterprise: defaultUrls.enterprise,
97-
dedicated: defaultUrls.cloud_dedicated,
98-
clustered: defaultUrls.clustered,
99-
prev_oss: defaultUrls.oss,
100-
prev_cloud: defaultUrls.cloud,
101-
prev_core: defaultUrls.core,
102-
prev_enterprise: defaultUrls.enterprise,
103-
prev_serverless: defaultUrls.serverless,
104-
prev_dedicated: defaultUrls.cloud_dedicated,
105-
prev_clustered: defaultUrls.clustered,
98+
oss: defaultUrls.oss || '',
99+
cloud: defaultUrls.cloud || '',
100+
serverless: defaultUrls.serverless || '',
101+
core: defaultUrls.core || '',
102+
enterprise: defaultUrls.enterprise || '',
103+
dedicated: defaultUrls.cloud_dedicated || '',
104+
clustered: defaultUrls.clustered || '',
105+
prev_oss: defaultUrls.oss || '',
106+
prev_cloud: defaultUrls.cloud || '',
107+
prev_core: defaultUrls.core || '',
108+
prev_enterprise: defaultUrls.enterprise || '',
109+
prev_serverless: defaultUrls.serverless || '',
110+
prev_dedicated: defaultUrls.cloud_dedicated || '',
111+
prev_clustered: defaultUrls.clustered || '',
106112
custom: '',
107113
};
108114

assets/js/page-context.js

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,37 @@
33
*/
44
import { products, influxdb_urls } from '@params';
55

6+
const safeProducts = products || {};
7+
const safeUrls = influxdb_urls || {};
8+
69
function getCurrentProductData() {
710
const path = window.location.pathname;
811
const mappings = [
9-
{ pattern: /\/influxdb\/cloud\//, product: products.cloud, urls: influxdb_urls.influxdb_cloud },
10-
{ pattern: /\/influxdb3\/core/, product: products.influxdb3_core, urls: influxdb_urls.core },
11-
{ pattern: /\/influxdb3\/enterprise/, product: products.influxdb3_enterprise, urls: influxdb_urls.enterprise },
12-
{ pattern: /\/influxdb3\/cloud-serverless/, product: products.influxdb3_cloud_serverless, urls: influxdb_urls.cloud },
13-
{ pattern: /\/influxdb3\/cloud-dedicated/, product: products.influxdb3_cloud_dedicated, urls: influxdb_urls.dedicated },
14-
{ pattern: /\/influxdb3\/clustered/, product: products.influxdb3_clustered, urls: influxdb_urls.clustered },
15-
{ pattern: /\/enterprise_v1\//, product: products.enterprise_influxdb, urls: influxdb_urls.oss },
16-
{ pattern: /\/influxdb.*v1\//, product: products.influxdb, urls: influxdb_urls.oss },
17-
{ pattern: /\/influxdb.*v2\//, product: products.influxdb, urls: influxdb_urls.oss },
18-
{ pattern: /\/kapacitor\//, product: products.kapacitor, urls: influxdb_urls.oss },
19-
{ pattern: /\/telegraf\//, product: products.telegraf, urls: influxdb_urls.oss },
20-
{ pattern: /\/chronograf\//, product: products.chronograf, urls: influxdb_urls.oss },
21-
{ pattern: /\/flux\//, product: products.flux, urls: influxdb_urls.oss },
12+
{ pattern: /\/influxdb\/cloud\//, product: safeProducts.cloud, urls: safeUrls.influxdb_cloud },
13+
{ pattern: /\/influxdb3\/core/, product: safeProducts.influxdb3_core, urls: safeUrls.core },
14+
{ pattern: /\/influxdb3\/enterprise/, product: safeProducts.influxdb3_enterprise, urls: safeUrls.enterprise },
15+
{ pattern: /\/influxdb3\/cloud-serverless/, product: safeProducts.influxdb3_cloud_serverless, urls: safeUrls.cloud },
16+
{ pattern: /\/influxdb3\/cloud-dedicated/, product: safeProducts.influxdb3_cloud_dedicated, urls: safeUrls.dedicated },
17+
{ pattern: /\/influxdb3\/clustered/, product: safeProducts.influxdb3_clustered, urls: safeUrls.clustered },
18+
{ pattern: /\/enterprise_v1\//, product: safeProducts.enterprise_influxdb, urls: safeUrls.oss },
19+
{ pattern: /\/influxdb.*v1\//, product: safeProducts.influxdb, urls: safeUrls.oss },
20+
{ pattern: /\/influxdb.*v2\//, product: safeProducts.influxdb, urls: safeUrls.oss },
21+
{ pattern: /\/kapacitor\//, product: safeProducts.kapacitor, urls: safeUrls.oss },
22+
{ pattern: /\/telegraf\//, product: safeProducts.telegraf, urls: safeUrls.oss },
23+
{ pattern: /\/chronograf\//, product: safeProducts.chronograf, urls: safeUrls.oss },
24+
{ pattern: /\/flux\//, product: safeProducts.flux, urls: safeUrls.oss },
2225
];
2326

2427
for (const { pattern, product, urls } of mappings) {
2528
if (pattern.test(path)) {
26-
return { product, urls };
29+
return {
30+
product: product || 'unknown',
31+
urls: urls || {}
32+
};
2733
}
2834
}
2935

30-
return 'other';
36+
return { product: 'other', urls: {} };
3137
}
3238

3339
// Return the page context (cloud, serverless, oss/enterprise, dedicated, clustered, other)

0 commit comments

Comments
 (0)