From 54c1bb0fc96b728d6ac2c93871ceb848b4f95337 Mon Sep 17 00:00:00 2001 From: JpMaxMan Date: Fri, 20 Feb 2026 13:18:55 -0600 Subject: [PATCH 1/3] feat: add timezone selector to selection plan edit page Allow users to choose a display timezone for date/time fields on the selection plan form instead of being locked to the summit timezone. Defaults to the summit timezone on load. Dates are still sent to the API as UTC epoch timestamps, so this is a client-only change. Co-Authored-By: Claude Opus 4.6 --- src/components/forms/selection-plan-form.js | 55 +++++++++++++------ src/i18n/en.json | 1 + .../edit-selection-plan-page.js | 6 +- 3 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/components/forms/selection-plan-form.js b/src/components/forms/selection-plan-form.js index eae94c098..fec2fd639 100644 --- a/src/components/forms/selection-plan-form.js +++ b/src/components/forms/selection-plan-form.js @@ -64,7 +64,8 @@ class SelectionPlanForm extends React.Component { showSection: "main", newMemberEmail: "", showImportModal: false, - importFile: null + importFile: null, + selectedTimezone: props.currentSummit.time_zone_id }; this.handleTrackGroupLink = this.handleTrackGroupLink.bind(this); @@ -314,9 +315,11 @@ class SelectionPlanForm extends React.Component { } render() { - const { entity, showSection, newMemberEmail, showImportModal } = this.state; + const { entity, showSection, newMemberEmail, showImportModal, selectedTimezone } = + this.state; const { currentSummit, + timezones, extraQuestionsOrderDir, extraQuestionsOrder, actionTypesOrderDir, @@ -324,6 +327,8 @@ class SelectionPlanForm extends React.Component { allowedMembers } = this.props; + const timezoneDdl = timezones.map((tz) => ({ label: tz, value: tz })); + const trackGroupsColumns = [ { columnKey: "name", value: T.translate("edit_selection_plan.name") }, { @@ -428,8 +433,6 @@ class SelectionPlanForm extends React.Component { } }; - console.log("CHECK...", entity, currentSummit); - return (
@@ -508,6 +511,22 @@ class SelectionPlanForm extends React.Component { +
+
+ + + this.setState({ selectedTimezone: ev.target.value }) + } + options={timezoneDdl} + /> +
+
+
@@ -534,10 +553,10 @@ class SelectionPlanForm extends React.Component { id="submission_end_date" onChange={this.handleChange} format={{ date: "YYYY-MM-DD", time: "HH:mm" }} - timezone={currentSummit.time_zone_id} + timezone={selectedTimezone} value={epochToMomentTimeZone( entity.submission_end_date, - currentSummit.time_zone_id + selectedTimezone )} />
@@ -573,10 +592,10 @@ class SelectionPlanForm extends React.Component { id="submission_lock_down_presentation_status_date" onChange={this.handleChange} format={{ date: "YYYY-MM-DD", time: "HH:mm" }} - timezone={currentSummit.time_zone_id} + timezone={selectedTimezone} value={epochToMomentTimeZone( entity.submission_lock_down_presentation_status_date, - currentSummit.time_zone_id + selectedTimezone )} /> @@ -591,10 +610,10 @@ class SelectionPlanForm extends React.Component { id="voting_begin_date" onChange={this.handleChange} format={{ date: "YYYY-MM-DD", time: "HH:mm" }} - timezone={currentSummit.time_zone_id} + timezone={selectedTimezone} value={epochToMomentTimeZone( entity.voting_begin_date, - currentSummit.time_zone_id + selectedTimezone )} /> @@ -607,10 +626,10 @@ class SelectionPlanForm extends React.Component { id="voting_end_date" onChange={this.handleChange} format={{ date: "YYYY-MM-DD", time: "HH:mm" }} - timezone={currentSummit.time_zone_id} + timezone={selectedTimezone} value={epochToMomentTimeZone( entity.voting_end_date, - currentSummit.time_zone_id + selectedTimezone )} /> @@ -625,10 +644,10 @@ class SelectionPlanForm extends React.Component { id="selection_begin_date" onChange={this.handleChange} format={{ date: "YYYY-MM-DD", time: "HH:mm" }} - timezone={currentSummit.time_zone_id} + timezone={selectedTimezone} value={epochToMomentTimeZone( entity.selection_begin_date, - currentSummit.time_zone_id + selectedTimezone )} /> @@ -641,10 +660,10 @@ class SelectionPlanForm extends React.Component { id="selection_end_date" onChange={this.handleChange} format={{ date: "YYYY-MM-DD", time: "HH:mm" }} - timezone={currentSummit.time_zone_id} + timezone={selectedTimezone} value={epochToMomentTimeZone( entity.selection_end_date, - currentSummit.time_zone_id + selectedTimezone )} /> diff --git a/src/i18n/en.json b/src/i18n/en.json index 30cebb8c6..222ca3e9b 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -446,6 +446,7 @@ "email": "Email", "enabled": "Enabled", "hidden": "Hidden", + "time_zone_for_dates": "Time Zone for Dates", "submission_begin_date": "Submissions Start", "submission_end_date": "Submissions End", "submission_lock_down_presentation_status_date": "Submissions Status Lock Down Date", diff --git a/src/pages/selection-plans/edit-selection-plan-page.js b/src/pages/selection-plans/edit-selection-plan-page.js index 07d37b595..3a7ed0efb 100644 --- a/src/pages/selection-plans/edit-selection-plan-page.js +++ b/src/pages/selection-plans/edit-selection-plan-page.js @@ -43,6 +43,7 @@ const EditSelectionPlanPage = ({ allowedMembers, errors, history, + timezones, extraQuestionsOrder, extraQuestionsOrderDir, updateSelectionPlanExtraQuestionOrder, @@ -194,6 +195,7 @@ const EditSelectionPlanPage = ({ entity={entity} allowedMembers={allowedMembers} currentSummit={currentSummit} + timezones={timezones} errors={errors} extraQuestionsOrder={extraQuestionsOrder} extraQuestionsOrderDir={extraQuestionsOrderDir} @@ -228,9 +230,11 @@ const EditSelectionPlanPage = ({ const mapStateToProps = ({ currentSummitState, - currentSelectionPlanState + currentSelectionPlanState, + baseState }) => ({ currentSummit: currentSummitState.currentSummit, + timezones: baseState.timezones, ...currentSelectionPlanState }); From f28ad939e8a9f72990d3a3079c01f5d4fa50de35 Mon Sep 17 00:00:00 2001 From: JpMaxMan Date: Fri, 20 Feb 2026 13:27:39 -0600 Subject: [PATCH 2/3] fix: add defensive fallback for timezones prop Co-Authored-By: Claude Opus 4.6 --- src/components/forms/selection-plan-form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/forms/selection-plan-form.js b/src/components/forms/selection-plan-form.js index fec2fd639..0425d599b 100644 --- a/src/components/forms/selection-plan-form.js +++ b/src/components/forms/selection-plan-form.js @@ -327,7 +327,7 @@ class SelectionPlanForm extends React.Component { allowedMembers } = this.props; - const timezoneDdl = timezones.map((tz) => ({ label: tz, value: tz })); + const timezoneDdl = (timezones || []).map((tz) => ({ label: tz, value: tz })); const trackGroupsColumns = [ { columnKey: "name", value: T.translate("edit_selection_plan.name") }, From 34450b58d18695bdedc3266dc1d57fb117cad942 Mon Sep 17 00:00:00 2001 From: JpMaxMan Date: Fri, 20 Feb 2026 15:47:09 -0600 Subject: [PATCH 3/3] fix: reset selectedTimezone to summit default when entity changes Co-Authored-By: Claude Opus 4.6 --- src/components/forms/selection-plan-form.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/forms/selection-plan-form.js b/src/components/forms/selection-plan-form.js index 0425d599b..88f920a1c 100644 --- a/src/components/forms/selection-plan-form.js +++ b/src/components/forms/selection-plan-form.js @@ -145,6 +145,7 @@ class SelectionPlanForm extends React.Component { if (!shallowEqual(prevProps.entity, this.props.entity)) { state.entity = { ...this.props.entity }; state.errors = {}; + state.selectedTimezone = this.props.currentSummit.time_zone_id; } if (!shallowEqual(prevProps.errors, this.props.errors)) {