From 88619e6ecc4ba70f8d0553962424fd222f3ba1bf Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 19 Jul 2022 14:07:00 -1000 Subject: [PATCH 1/3] Add report name getter for safe access --- src/pages/ReportSettingsPage.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pages/ReportSettingsPage.js b/src/pages/ReportSettingsPage.js index 5d9881feb60b..1d01f5a631ef 100644 --- a/src/pages/ReportSettingsPage.js +++ b/src/pages/ReportSettingsPage.js @@ -1,3 +1,4 @@ +import lodashGet from 'lodash/get'; import React, {Component} from 'react'; import PropTypes from 'prop-types'; import {View, ScrollView} from 'react-native'; @@ -95,18 +96,25 @@ class ReportSettingsPage extends Component { }; this.state = { - newRoomName: this.props.report.reportName, + newRoomName: this.getReportName(), errors: {}, }; this.validateAndRenameReport = this.validateAndRenameReport.bind(this); } + /** + * @returns {String} + */ + getReportName() { + return lodashGet(this.props, 'report.reportName', ''); + } + validateAndRenameReport() { if (!this.validate()) { return; } - if (this.props.report.reportName === this.state.newRoomName) { + if (this.getReportName() === this.state.newRoomName) { Growl.success(this.props.translate('newRoomPage.policyRoomRenamed')); return; } @@ -122,7 +130,7 @@ class ReportSettingsPage extends Component { } // We error if the room name already exists. We don't error if the room name matches same as previous. - if (ValidationUtils.isExistingRoomName(this.state.newRoomName, this.props.reports, this.props.report.policyID) && this.state.newRoomName !== this.props.report.reportName) { + if (ValidationUtils.isExistingRoomName(this.state.newRoomName, this.props.reports, this.props.report.policyID) && this.state.newRoomName !== this.getReportName()) { errors.newRoomName = this.props.translate('newRoomPage.roomAlreadyExistsError'); } From 2d42cf247da90d1532e50b60cb14f277b67f36f7 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 19 Jul 2022 14:17:51 -1000 Subject: [PATCH 2/3] update defaultProps instead --- src/pages/ReportSettingsPage.js | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/pages/ReportSettingsPage.js b/src/pages/ReportSettingsPage.js index 1d01f5a631ef..718b484718b0 100644 --- a/src/pages/ReportSettingsPage.js +++ b/src/pages/ReportSettingsPage.js @@ -1,4 +1,3 @@ -import lodashGet from 'lodash/get'; import React, {Component} from 'react'; import PropTypes from 'prop-types'; import {View, ScrollView} from 'react-native'; @@ -49,10 +48,16 @@ const propTypes = { /** The current user's notification preference for this report */ notificationPreference: PropTypes.string, + + /** Access setting e.g. whether the report is "restricted" */ + visibility: PropTypes.string, + + /** Linked policy's ID */ + policyID: PropTypes.string, }).isRequired, /** All reports shared with the user */ - reports: PropTypes.shape({ + reports: PropTypes.objectOf(PropTypes.shape({ /** The report name */ reportName: PropTypes.string, @@ -61,7 +66,7 @@ const propTypes = { /** ID of the policy */ policyID: PropTypes.string, - }).isRequired, + })).isRequired, /** The policies which the user has access to and which the report could be tied to */ policies: PropTypes.shape({ @@ -75,6 +80,13 @@ const propTypes = { const defaultProps = { ...fullPolicyDefaultProps, + report: { + reportID: 0, + reportName: '', + policyID: '', + notificationPreference: '', + visibility: '', + }, }; class ReportSettingsPage extends Component { @@ -96,25 +108,18 @@ class ReportSettingsPage extends Component { }; this.state = { - newRoomName: this.getReportName(), + newRoomName: props.report.reportName, errors: {}, }; this.validateAndRenameReport = this.validateAndRenameReport.bind(this); } - /** - * @returns {String} - */ - getReportName() { - return lodashGet(this.props, 'report.reportName', ''); - } - validateAndRenameReport() { if (!this.validate()) { return; } - if (this.getReportName() === this.state.newRoomName) { + if (this.props.report.reportName === this.state.newRoomName) { Growl.success(this.props.translate('newRoomPage.policyRoomRenamed')); return; } @@ -130,7 +135,7 @@ class ReportSettingsPage extends Component { } // We error if the room name already exists. We don't error if the room name matches same as previous. - if (ValidationUtils.isExistingRoomName(this.state.newRoomName, this.props.reports, this.props.report.policyID) && this.state.newRoomName !== this.getReportName()) { + if (ValidationUtils.isExistingRoomName(this.state.newRoomName, this.props.reports, this.props.report.policyID) && this.state.newRoomName !== this.props.report.reportName) { errors.newRoomName = this.props.translate('newRoomPage.roomAlreadyExistsError'); } From 0f38939cf23cee33a565a98db2546a8da98914c6 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 19 Jul 2022 14:20:55 -1000 Subject: [PATCH 3/3] Remove unneeded change --- src/pages/ReportSettingsPage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/ReportSettingsPage.js b/src/pages/ReportSettingsPage.js index 718b484718b0..7440780e3269 100644 --- a/src/pages/ReportSettingsPage.js +++ b/src/pages/ReportSettingsPage.js @@ -108,7 +108,7 @@ class ReportSettingsPage extends Component { }; this.state = { - newRoomName: props.report.reportName, + newRoomName: this.props.report.reportName, errors: {}, };