Skip to content

Commit 16b3d5a

Browse files
Merge pull request #874 from neo4j-labs/fix/parameters-casting-at-start
fixing casting error at while loading the dashboards
2 parents 912994a + f40c9e1 commit 16b3d5a

File tree

5 files changed

+11
-25
lines changed

5 files changed

+11
-25
lines changed

src/application/ApplicationThunks.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { createNotificationThunk } from '../page/PageThunks';
1414
import { runCypherQuery } from '../report/ReportQueryRunner';
1515
import {
1616
setPageNumberThunk,
17-
updateParametersToNeo4jTypeThunk,
1817
updateGlobalParametersThunk,
1918
updateSessionParameterThunk,
2019
} from '../settings/SettingsThunks';
@@ -507,8 +506,6 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState:
507506
);
508507
}
509508
}
510-
// At the load of a dashboard, we want to ensure correct casting types
511-
dispatch(updateParametersToNeo4jTypeThunk());
512509

513510
// SSO - specific case starts here.
514511
if (state.application.waitForSSO) {
@@ -650,8 +647,8 @@ export const initializeApplicationAsStandaloneThunk =
650647
} else {
651648
dispatch(setDashboardToLoadAfterConnecting(`name:${config.standaloneDashboardName}`));
652649
}
653-
654650
dispatch(setParametersToLoadAfterConnecting(paramsToSetAfterConnecting));
651+
dispatch(updateGlobalParametersThunk(paramsToSetAfterConnecting));
655652

656653
if (clearNotificationAfterLoad) {
657654
dispatch(clearNotification());

src/chart/ChartUtils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ export function replaceDashboardParameters(str, parameters) {
220220
let type = getRecordType(val);
221221

222222
// Arrays weren't playing nicely with RenderSubValue(). Each object would be passed separately and return [oject Object].
223-
if (type === 'string' || type == 'link' ) {
223+
if (type === 'string' || type == 'link') {
224224
return val;
225225
} else if (type === 'array') {
226226
return RenderSubValue(val.join(', '));
@@ -415,7 +415,7 @@ export function isCastableToNeo4jDate(value: object) {
415415
return false;
416416
}
417417
let keys = Object.keys(value);
418-
return keys.length == 3 && keys.includes('day') && keys.includes('month') && keys.includes('year');
418+
return keys.includes('day') && keys.includes('month') && keys.includes('year');
419419
}
420420

421421
/**
@@ -425,7 +425,7 @@ export function isCastableToNeo4jDate(value: object) {
425425
*/
426426
export function castToNeo4jDate(value: object) {
427427
if (isCastableToNeo4jDate(value)) {
428-
return new Neo4jDate(value.year, value.month, value.day);
428+
return new Neo4jDate(toNumber(value.year), toNumber(value.month), toNumber(value.day));
429429
}
430430
throw new Error(`Invalid input for castToNeo4jDate: ${value}`);
431431
}

src/dashboard/DashboardThunks.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@ import { updateDashboardSetting } from '../settings/SettingsActions';
33
import { addPage, movePage, removePage, resetDashboardState, setDashboard, setDashboardUuid } from './DashboardActions';
44
import { QueryStatus, runCypherQuery } from '../report/ReportQueryRunner';
55
import { setDraft, setParametersToLoadAfterConnecting, setWelcomeScreenOpen } from '../application/ApplicationActions';
6-
import { updateGlobalParametersThunk, updateParametersToNeo4jTypeThunk } from '../settings/SettingsThunks';
6+
import { updateGlobalParametersThunk } from '../settings/SettingsThunks';
77
import { createUUID } from '../utils/uuid';
88
import { createLogThunk } from '../application/logging/LoggingThunk';
99
import { applicationGetConnectionUser, applicationIsStandalone } from '../application/ApplicationSelectors';
1010
import { applicationGetLoggingSettings } from '../application/logging/LoggingSelectors';
1111
import { NEODASH_VERSION, VERSION_TO_MIGRATE } from './DashboardReducer';
12-
import { Date as Neo4jDate } from 'neo4j-driver-core/lib/temporal-types.js';
1312

1413
export const removePageThunk = (number) => (dispatch: any, getState: any) => {
1514
try {
@@ -113,16 +112,6 @@ export const loadDashboardThunk = (uuid, text) => (dispatch: any, getState: any)
113112
throw `Invalid dashboard version: ${dashboard.version}. Try restarting the application, or retrieve your cached dashboard using a debug report.`;
114113
}
115114

116-
// Cast dashboard parameters from serialized format to correct types
117-
Object.keys(dashboard.settings.parameters).forEach((key) => {
118-
const value = dashboard.settings.parameters[key];
119-
120-
// Serialized Date to Neo4jDate
121-
if (value && value.year && value.month && value.day) {
122-
dashboard.settings.parameters[key] = new Neo4jDate(value.year, value.month, value.day);
123-
}
124-
});
125-
126115
// Reverse engineer the minimal set of fields from the selection loaded.
127116
dashboard.pages.forEach((p) => {
128117
p.reports.forEach((r) => {
@@ -140,9 +129,8 @@ export const loadDashboardThunk = (uuid, text) => (dispatch: any, getState: any)
140129
const { application } = getState();
141130

142131
dispatch(updateGlobalParametersThunk(application.parametersToLoadAfterConnecting));
132+
dispatch(updateGlobalParametersThunk(dashboard.settings.parameters));
143133
dispatch(setParametersToLoadAfterConnecting(null));
144-
dispatch(updateParametersToNeo4jTypeThunk());
145-
146134
// Pre-2.3.4 dashboards might now always have a UUID. Set it if not present.
147135
if (!dashboard.uuid) {
148136
dispatch(setDashboardUuid(uuid));

src/extensions/advancedcharts/Utils.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { valueIsArray } from '../../chart/ChartUtils';
2-
import { useDispatch, useSelector } from 'react-redux';
2+
import { useSelector } from 'react-redux';
33
import { getPageNumbersAndNames } from '../../dashboard/DashboardSelectors';
4-
import { updateDashboardSetting } from '../../settings/SettingsActions';
54

65
export const getRule = (e, rules, type) => {
76
let r = getRuleWithFieldPropertyName(e, rules, type, null);

src/settings/SettingsThunks.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { setSessionParameters } from '../application/ApplicationActions';
22
import { hardResetCardSettings } from '../card/CardActions';
3-
import { castToNeo4jDate, isCastableToNeo4jDate, valueIsNode } from '../chart/ChartUtils';
3+
import { castToNeo4jDate, isCastableToNeo4jDate, toNumber, valueIsNode } from '../chart/ChartUtils';
44
import { createNotificationThunk } from '../page/PageThunks';
55
import { updateDashboardSetting } from './SettingsActions';
66

@@ -73,6 +73,7 @@ export const updateGlobalParametersThunk = (newParameters) => (dispatch: any, ge
7373
}
7474
});
7575
dispatch(updateDashboardSetting('parameters', { ...parameters }));
76+
dispatch(updateParametersToNeo4jTypeThunk());
7677
}
7778
} catch (e) {
7879
dispatch(createNotificationThunk('Unable to update global parameters', e));
@@ -86,12 +87,13 @@ export const updateParametersToNeo4jTypeThunk = () => (dispatch: any, getState:
8687
try {
8788
const { settings } = getState().dashboard;
8889
const parameters = settings.parameters ? settings.parameters : {};
89-
9090
// if new parameters are set...
9191
// iterate over the key value pairs in parameters
9292
Object.keys(parameters).forEach((key) => {
9393
if (isCastableToNeo4jDate(parameters[key])) {
9494
parameters[key] = castToNeo4jDate(parameters[key]);
95+
} else if (parameters[key] && typeof toNumber(parameters[key]) === 'number') {
96+
parameters[key] = toNumber(parameters[key]);
9597
} else if (parameters[key] == undefined) {
9698
delete parameters[key];
9799
}

0 commit comments

Comments
 (0)