From 50348ed4ae098c813d64189fb1d4cebcc365d4f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Wed, 17 Jun 2026 18:04:19 -0300 Subject: [PATCH 1/7] fix: add new filter for pending submissions, functions to simplify template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- src/actions/speaker-actions.js | 9 + src/actions/submitter-actions.js | 9 + .../summit-speakers-list-page.js | 518 ++++++------------ .../summit-speakers-list-reducer.js | 1 + .../summit-submitters-list-reducer.js | 1 + 5 files changed, 175 insertions(+), 363 deletions(-) diff --git a/src/actions/speaker-actions.js b/src/actions/speaker-actions.js index 20431d87a..986576107 100644 --- a/src/actions/speaker-actions.js +++ b/src/actions/speaker-actions.js @@ -932,6 +932,15 @@ const parseFilters = (filters) => { ); } + if ( + filters.hasOwnProperty("pendingSubmissionsFilter") && + filters.pendingSubmissionsFilter !== null + ) { + filter.push( + `has_pending_presentations==${filters.pendingSubmissionsFilter}` + ); + } + // return checkOrFilter(filters, filter); return filter; }; diff --git a/src/actions/submitter-actions.js b/src/actions/submitter-actions.js index 7adabf00e..323f9baf3 100644 --- a/src/actions/submitter-actions.js +++ b/src/actions/submitter-actions.js @@ -508,6 +508,15 @@ const parseFilters = (filters) => { ); } + if ( + filters.hasOwnProperty("pendingSubmissionsFilter") && + filters.pendingSubmissionsFilter !== null + ) { + filter.push( + `has_pending_presentations==${filters.pendingSubmissionsFilter}` + ); + } + // return checkOrFilter(filters, filter); return filter; }; diff --git a/src/pages/summit_speakers/summit-speakers-list-page.js b/src/pages/summit_speakers/summit-speakers-list-page.js index 6c73e7ac9..73064c26e 100644 --- a/src/pages/summit_speakers/summit-speakers-list-page.js +++ b/src/pages/summit_speakers/summit-speakers-list-page.js @@ -119,6 +119,8 @@ class SummitSpeakersListPage extends React.Component { this.getSubjectProps = this.getSubjectProps.bind(this); this.getSelectedActivityCount = this.getSelectedActivityCount.bind(this); + this.getFilters = this.getFilters.bind(this); + this.callBySummit = this.callBySummit.bind(this); this.export = this.export.bind(this); this.getBySummit = this.getBySummit.bind(this); this.handleSpeakerSubmitterSourceChange = @@ -147,6 +149,8 @@ class SummitSpeakersListPage extends React.Component { this.handleOrAndFilter = this.handleOrAndFilter.bind(this); this.handleChangeMediaUploadTypeFilter = this.handleChangeMediaUploadTypeFilter.bind(this); + this.handleChangePendingSubmissionsFilter = + this.handleChangePendingSubmissionsFilter.bind(this); this.state = { testRecipient: "", @@ -165,31 +169,7 @@ class SummitSpeakersListPage extends React.Component { initSubmittersList(); initSpeakersList(); if (currentSummit) { - const { - term, - page, - order, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + this.callBySummit(); } } @@ -230,6 +210,44 @@ class SummitSpeakersListPage extends React.Component { callable(term, page, perPage, order, orderDir, filters, source); } + getFilters(filterOverrides = {}) { + const { + selectionPlanFilter, + trackFilter, + trackGroupFilter, + activityTypeFilter, + selectionStatusFilter, + mediaUploadTypeFilter, + pendingSubmissionsFilter + } = this.getSubjectProps(); + const { + speakerFilters: { orAndFilter } + } = this.state; + return { + selectionPlanFilter, + trackFilter, + trackGroupFilter, + activityTypeFilter, + selectionStatusFilter, + orAndFilter, + mediaUploadTypeFilter, + pendingSubmissionsFilter, + ...filterOverrides + }; + } + + callBySummit(posOverrides = {}, filterOverrides = {}) { + const { term, page, perPage, order, orderDir } = this.getSubjectProps(); + this.getBySummit( + posOverrides.term ?? term, + posOverrides.page ?? page, + posOverrides.perPage ?? perPage, + posOverrides.order ?? order, + posOverrides.orderDir ?? orderDir, + this.getFilters(filterOverrides) + ); + } + export(term, order, orderDir, filters) { const { source } = this.state; const callable = @@ -251,7 +269,8 @@ class SummitSpeakersListPage extends React.Component { trackGroupFilter, activityTypeFilter, selectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter } = this.getSubjectProps(); const { speakerFilters: { orAndFilter } @@ -267,7 +286,8 @@ class SummitSpeakersListPage extends React.Component { activityTypeFilter, selectionStatusFilter, orAndFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter }); }); } @@ -280,236 +300,44 @@ class SummitSpeakersListPage extends React.Component { } handlePageChange(page) { - const { - term, - order, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + this.callBySummit({ page }); } handleSort(index, key, dir) { - const { - term, - page, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, key, dir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + this.callBySummit({ order: key, orderDir: dir }); } handleSearch(term) { - const { - order, - orderDir, - page, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + this.callBySummit({ term }); } handleChangeSelectionPlanFilter(ev) { - const { value: newSelectionPlanFilter } = ev.target; - const { - term, - order, - page, - orderDir, - perPage, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter: newSelectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + this.callBySummit({}, { selectionPlanFilter: ev.target.value }); } handleChangeTrackFilter(ev) { - const { value: newTrackFilter } = ev.target; - const { - term, - order, - page, - orderDir, - perPage, - selectionPlanFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter: newTrackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + this.callBySummit({}, { trackFilter: ev.target.value }); } handleChangeTrackGroupFilter(ev) { - const { value: newTrackGroupFilter } = ev.target; - const { - term, - order, - page, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter: newTrackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + this.callBySummit({}, { trackGroupFilter: ev.target.value }); } handleChangeActivityTypeFilter(ev) { - const { value: newActivityTypeFilter } = ev.target; - const { - term, - order, - page, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter: newActivityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + this.callBySummit({}, { activityTypeFilter: ev.target.value }); } handleChangeMediaUploadTypeFilter(ev) { const { value, operator } = ev.target; - const { - term, - order, - page, - orderDir, - perPage, - activityTypeFilter, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; + const { mediaUploadTypeFilter } = this.getSubjectProps(); if (operator && value.length > 0) { - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter: { operator, value } - }); + this.callBySummit({}, { mediaUploadTypeFilter: { operator, value } }); // get speakers if the media upload types filter is clear } else if (mediaUploadTypeFilter.value.length > 0 && value.length === 0) { - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter: { operator: null, value: [] } - }); + this.callBySummit( + {}, + { mediaUploadTypeFilter: { operator: null, value: [] } } + ); } } @@ -526,7 +354,8 @@ class SummitSpeakersListPage extends React.Component { trackGroupFilter, activityTypeFilter, selectionStatusFilter: previousSelectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter } = this.getSubjectProps(); const newSelectionStatusFilter = resolveExclusiveSelectionStatusFilter( @@ -544,10 +373,16 @@ class SummitSpeakersListPage extends React.Component { activityTypeFilter, orAndFilter, selectionStatusFilter: newSelectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter }); } + handleChangePendingSubmissionsFilter(ev) { + const { value } = ev.target; + this.callBySummit({}, { pendingSubmissionsFilter: value }); + } + handleChangeFlowEvent(ev) { const { value } = ev.target; const { source } = this.state; @@ -567,18 +402,7 @@ class SummitSpeakersListPage extends React.Component { const excerptRecipient = this.ingestEmailRef.value; const shouldSendCopy2Submitter = isSpeakerMode && this.shouldSendCopy2SubmitterRef.checked; - const { - term, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; + const { term } = this.getSubjectProps(); this.props.validateSpecs( promoCodeStrategy, @@ -598,15 +422,7 @@ class SummitSpeakersListPage extends React.Component { callable( term, - { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }, + this.getFilters(), testRecipient, excerptRecipient, shouldSendCopy2Submitter, @@ -666,30 +482,9 @@ class SummitSpeakersListPage extends React.Component { } handleExport(ev) { - const { - term, - order, - orderDir, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; ev.preventDefault(); - this.export(term, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }); + const { term, order, orderDir } = this.getSubjectProps(); + this.export(term, order, orderDir, this.getFilters()); } handleSelected(item_id, isSelected) { @@ -728,32 +523,11 @@ class SummitSpeakersListPage extends React.Component { } handleOrAndFilter(ev) { - const { - term, - order, - page, - orderDir, - perPage, - trackFilter, - trackGroupFilter, - selectionPlanFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); this.setState({ ...this.state, speakerFilters: { ...this.state.speakerFilters, orAndFilter: ev } }); - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - mediaUploadTypeFilter, - selectionStatusFilter, - orAndFilter: ev - }); + this.callBySummit({}, { orAndFilter: ev }); } render() { @@ -779,6 +553,7 @@ class SummitSpeakersListPage extends React.Component { activityTypeFilter, selectionStatusFilter, mediaUploadTypeFilter, + pendingSubmissionsFilter, currentFlowEvent, totalActivities } = this.getSubjectProps(); @@ -829,6 +604,11 @@ class SummitSpeakersListPage extends React.Component { const selectionStatusDDL = SELECTION_STATUS_OPTIONS; + const pendingSubmissionsDDL = [ + { label: "Has Pending Submissions", value: true }, + { label: "No Pending Submissions", value: false } + ]; + const speakerSubmitterSourceSelectorDDL = [ { label: T.translate("summit_speakers_list.speakers"), @@ -847,70 +627,70 @@ class SummitSpeakersListPage extends React.Component { const emailFlowDDL = this.state.source === sources.speakers ? [ - { label: "-- SELECT EMAIL EVENT --", value: "" }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ALTERNATE", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ALTERNATE" - }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_REJECTED", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_REJECTED" - }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_REJECTED", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_REJECTED" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ONLY" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_ONLY" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_REJECTED_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_REJECTED_ONLY" - } - ] + { label: "-- SELECT EMAIL EVENT --", value: "" }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ALTERNATE", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ALTERNATE" + }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_REJECTED", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_REJECTED" + }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_REJECTED", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_REJECTED" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ONLY" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_ONLY" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_REJECTED_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_REJECTED_ONLY" + } + ] : [ - { label: "-- SELECT EMAIL EVENT --", value: "" }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ALTERNATE", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ALTERNATE" - }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_REJECTED", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_REJECTED" - }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_REJECTED", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_REJECTED" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ONLY" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_ONLY" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_REJECTED_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_REJECTED_ONLY" - } - ]; + { label: "-- SELECT EMAIL EVENT --", value: "" }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ALTERNATE", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ALTERNATE" + }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_REJECTED", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_REJECTED" + }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_REJECTED", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_REJECTED" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ONLY" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_ONLY" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_REJECTED_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_REJECTED_ONLY" + } + ]; const promoCodeStrategiesDDL = [ { @@ -1054,6 +834,18 @@ class SummitSpeakersListPage extends React.Component { isMulti /> +
+ +
+ +
Date: Thu, 17 Sep 2026 11:06:21 -0300 Subject: [PATCH 2/7] fix: update param name for currentPage on callBySummit function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- .../summit-speakers-list-page.js | 131 +++++++++--------- 1 file changed, 66 insertions(+), 65 deletions(-) diff --git a/src/pages/summit_speakers/summit-speakers-list-page.js b/src/pages/summit_speakers/summit-speakers-list-page.js index 73064c26e..b5f03b6f4 100644 --- a/src/pages/summit_speakers/summit-speakers-list-page.js +++ b/src/pages/summit_speakers/summit-speakers-list-page.js @@ -237,10 +237,11 @@ class SummitSpeakersListPage extends React.Component { } callBySummit(posOverrides = {}, filterOverrides = {}) { - const { term, page, perPage, order, orderDir } = this.getSubjectProps(); + const { term, currentPage, perPage, order, orderDir } = + this.getSubjectProps(); this.getBySummit( posOverrides.term ?? term, - posOverrides.page ?? page, + posOverrides.page ?? currentPage, posOverrides.perPage ?? perPage, posOverrides.order ?? order, posOverrides.orderDir ?? orderDir, @@ -627,70 +628,70 @@ class SummitSpeakersListPage extends React.Component { const emailFlowDDL = this.state.source === sources.speakers ? [ - { label: "-- SELECT EMAIL EVENT --", value: "" }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ALTERNATE", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ALTERNATE" - }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_REJECTED", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_REJECTED" - }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_REJECTED", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_REJECTED" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ONLY" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_ONLY" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_REJECTED_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_REJECTED_ONLY" - } - ] + { label: "-- SELECT EMAIL EVENT --", value: "" }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ALTERNATE", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ALTERNATE" + }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_REJECTED", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_REJECTED" + }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_REJECTED", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_REJECTED" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ACCEPTED_ONLY" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_ALTERNATE_ONLY" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_REJECTED_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SPEAKER_REJECTED_ONLY" + } + ] : [ - { label: "-- SELECT EMAIL EVENT --", value: "" }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ALTERNATE", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ALTERNATE" - }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_REJECTED", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_REJECTED" - }, - { - label: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_REJECTED", - value: - "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_REJECTED" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ONLY" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_ONLY" - }, - { - label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_REJECTED_ONLY", - value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_REJECTED_ONLY" - } - ]; + { label: "-- SELECT EMAIL EVENT --", value: "" }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ALTERNATE", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ALTERNATE" + }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_REJECTED", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_REJECTED" + }, + { + label: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_REJECTED", + value: + "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_REJECTED" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ACCEPTED_ONLY" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_ALTERNATE_ONLY" + }, + { + label: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_REJECTED_ONLY", + value: "SUMMIT_SUBMISSIONS_PRESENTATION_SUBMITTER_REJECTED_ONLY" + } + ]; const promoCodeStrategiesDDL = [ { From 24a4991b3c92dffffef41db6ee46e8ebd7d1aac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Thu, 17 Sep 2026 14:24:13 -0300 Subject: [PATCH 3/7] fix: add test cases, reuse getFilters, reset currentPage on filter apply MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- src/actions/__tests__/speaker-actions.test.js | 33 +++++ .../__tests__/submitter-actions.test.js | 33 +++++ .../summit-speakers-list-page.test.js | 30 ++++- .../summit-speakers-list-page.js | 114 ++++++++---------- 4 files changed, 142 insertions(+), 68 deletions(-) diff --git a/src/actions/__tests__/speaker-actions.test.js b/src/actions/__tests__/speaker-actions.test.js index feec65c78..1b5338ba4 100644 --- a/src/actions/__tests__/speaker-actions.test.js +++ b/src/actions/__tests__/speaker-actions.test.js @@ -225,4 +225,37 @@ describe("getSpeakersBySummit - published filter", () => { ); expect(filter.join(",")).not.toContain("has_published_presentations"); }); + + it.each([ + [true, "true"], + [false, "false"] + ])( + "maps pendingSubmissionsFilter %s to has_pending_presentations==%s", + async (pendingSubmissionsFilter, expectedFlag) => { + const store = mockStore(stateWithSummit); + + await store.dispatch( + getSpeakersBySummit(null, 1, 10, "full_name", 1, { + pendingSubmissionsFilter + }) + ); + + expect(listRequestFor().params["filter[]"]).toContain( + `has_pending_presentations==${expectedFlag}` + ); + } + ); + + it("omits the pending-submissions filter when it is null", async () => { + const store = mockStore(stateWithSummit); + + await store.dispatch( + getSpeakersBySummit(null, 1, 10, "full_name", 1, { + pendingSubmissionsFilter: null + }) + ); + + const filter = listRequestFor().params["filter[]"] ?? []; + expect(filter.join(",")).not.toContain("has_pending_presentations"); + }); }); diff --git a/src/actions/__tests__/submitter-actions.test.js b/src/actions/__tests__/submitter-actions.test.js index c2396fad1..e2bf731e9 100644 --- a/src/actions/__tests__/submitter-actions.test.js +++ b/src/actions/__tests__/submitter-actions.test.js @@ -89,4 +89,37 @@ describe("getSubmittersBySummit - published filter", () => { ); expect(filter.join(",")).not.toContain("has_published_presentations"); }); + + it.each([ + [true, "true"], + [false, "false"] + ])( + "maps pendingSubmissionsFilter %s to has_pending_presentations==%s", + async (pendingSubmissionsFilter, expectedFlag) => { + const store = mockStore(stateWithSummit); + + await store.dispatch( + getSubmittersBySummit(null, 1, 10, "full_name", 1, { + pendingSubmissionsFilter + }) + ); + + expect(listRequestFor().params["filter[]"]).toContain( + `has_pending_presentations==${expectedFlag}` + ); + } + ); + + it("omits the pending-submissions filter when it is null", async () => { + const store = mockStore(stateWithSummit); + + await store.dispatch( + getSubmittersBySummit(null, 1, 10, "full_name", 1, { + pendingSubmissionsFilter: null + }) + ); + + const filter = listRequestFor().params["filter[]"] ?? []; + expect(filter.join(",")).not.toContain("has_pending_presentations"); + }); }); diff --git a/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js b/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js index 1220c1538..178ced34f 100644 --- a/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js +++ b/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js @@ -8,7 +8,7 @@ const SummitSpeakersListPage = ConnectedSummitSpeakersListPage.WrappedComponent; const buildSubjectProps = () => ({ term: null, order: "full_name", - page: 1, + currentPage: 3, orderDir: 1, perPage: 10, selectionPlanFilter: [], @@ -17,6 +17,7 @@ const buildSubjectProps = () => ({ activityTypeFilter: [], selectionStatusFilter: [], mediaUploadTypeFilter: { operator: null, value: [] }, + pendingSubmissionsFilter: null, selectedCount: 0, totalActivities: 0 }); @@ -52,8 +53,11 @@ describe("SummitSpeakersListPage.handleChangeSelectionStatusFilter", () => { target: { value: selectedValues } }); - const filtersArg = getSpeakersBySummit.mock.calls[0][5]; + const [, pageArg, , , , filtersArg] = getSpeakersBySummit.mock.calls[0]; expect(filtersArg.selectionStatusFilter).toEqual(expected); + // a filter change can shrink the result set below the current page - + // it must reset to page 1, not preserve the page the user was on + expect(pageArg).toBe(1); } ); @@ -65,8 +69,9 @@ describe("SummitSpeakersListPage.handleChangeSelectionStatusFilter", () => { target: { value: ["accepted", "rejected"] } }); - const filtersArg = getSpeakersBySummit.mock.calls[0][5]; + const [, pageArg, , , , filtersArg] = getSpeakersBySummit.mock.calls[0]; expect(filtersArg.selectionStatusFilter).toEqual(["accepted", "rejected"]); + expect(pageArg).toBe(1); }); // Both values can be present at once (see resolveExclusiveSelectionStatusFilter) - @@ -87,8 +92,9 @@ describe("SummitSpeakersListPage.handleChangeSelectionStatusFilter", () => { target: { value: selectedValues } }); - const filtersArg = getSpeakersBySummit.mock.calls[0][5]; + const [, pageArg, , , , filtersArg] = getSpeakersBySummit.mock.calls[0]; expect(filtersArg.selectionStatusFilter).toEqual(expected); + expect(pageArg).toBe(1); } ); @@ -106,7 +112,21 @@ describe("SummitSpeakersListPage.handleChangeSelectionStatusFilter", () => { target: { value: ["published", "accepted"] } }); - const filtersArg = getSpeakersBySummit.mock.calls[0][5]; + const [, pageArg, , , , filtersArg] = getSpeakersBySummit.mock.calls[0]; expect(filtersArg.selectionStatusFilter).toEqual(["accepted"]); + expect(pageArg).toBe(1); + }); +}); + +describe("SummitSpeakersListPage.handleOrAndFilter", () => { + it("resets to page 1 and dispatches the new or/and combinator", () => { + const getSpeakersBySummit = jest.fn(); + const instance = buildInstance({ getSpeakersBySummit }); + + instance.handleOrAndFilter("or"); + + const [, pageArg, , , , filtersArg] = getSpeakersBySummit.mock.calls[0]; + expect(pageArg).toBe(1); + expect(filtersArg.orAndFilter).toBe("or"); }); }); diff --git a/src/pages/summit_speakers/summit-speakers-list-page.js b/src/pages/summit_speakers/summit-speakers-list-page.js index b5f03b6f4..40f55badd 100644 --- a/src/pages/summit_speakers/summit-speakers-list-page.js +++ b/src/pages/summit_speakers/summit-speakers-list-page.js @@ -56,7 +56,11 @@ import { AUTO_GENERATED_SPEAKERS_DISCOUNT_CODE } from "../../actions/promocode-actions"; -import { ALL_FILTER, SpeakersSources as sources } from "../../utils/constants"; +import { + ALL_FILTER, + DEFAULT_CURRENT_PAGE, + SpeakersSources as sources +} from "../../utils/constants"; import { validateEmail } from "../../utils/methods"; import MediaTypeFilter from "../../components/filters/media-type-filter"; @@ -260,36 +264,20 @@ class SummitSpeakersListPage extends React.Component { handleSpeakerSubmitterSourceChange(ev) { const { value } = ev.target; - const { - term, - order, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter, - pendingSubmissionsFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; + const { term, order, orderDir, perPage } = this.getSubjectProps(); + const filters = this.getFilters(); const { initSubmittersList, initSpeakersList } = this.props; this.setState({ ...this.state, source: value }, function () { initSubmittersList(); initSpeakersList(); - this.getBySummit(term, 1, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter, - pendingSubmissionsFilter - }); + this.getBySummit( + term, + DEFAULT_CURRENT_PAGE, + perPage, + order, + orderDir, + filters + ); }); } @@ -309,34 +297,52 @@ class SummitSpeakersListPage extends React.Component { } handleSearch(term) { - this.callBySummit({ term }); + // a new term can shrink the result set below the current page, leaving + // the user stranded on an empty page with no visible pagination - reset + // to page 1, same as every filter change below + this.callBySummit({ page: DEFAULT_CURRENT_PAGE, term }); } handleChangeSelectionPlanFilter(ev) { - this.callBySummit({}, { selectionPlanFilter: ev.target.value }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { selectionPlanFilter: ev.target.value } + ); } handleChangeTrackFilter(ev) { - this.callBySummit({}, { trackFilter: ev.target.value }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { trackFilter: ev.target.value } + ); } handleChangeTrackGroupFilter(ev) { - this.callBySummit({}, { trackGroupFilter: ev.target.value }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { trackGroupFilter: ev.target.value } + ); } handleChangeActivityTypeFilter(ev) { - this.callBySummit({}, { activityTypeFilter: ev.target.value }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { activityTypeFilter: ev.target.value } + ); } handleChangeMediaUploadTypeFilter(ev) { const { value, operator } = ev.target; const { mediaUploadTypeFilter } = this.getSubjectProps(); if (operator && value.length > 0) { - this.callBySummit({}, { mediaUploadTypeFilter: { operator, value } }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { mediaUploadTypeFilter: { operator, value } } + ); // get speakers if the media upload types filter is clear } else if (mediaUploadTypeFilter.value.length > 0 && value.length === 0) { this.callBySummit( - {}, + { page: DEFAULT_CURRENT_PAGE }, { mediaUploadTypeFilter: { operator: null, value: [] } } ); } @@ -344,44 +350,26 @@ class SummitSpeakersListPage extends React.Component { handleChangeSelectionStatusFilter(ev) { const { value: rawSelectionStatusFilter } = ev.target; - const { - term, - order, - page, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter: previousSelectionStatusFilter, - mediaUploadTypeFilter, - pendingSubmissionsFilter - } = this.getSubjectProps(); + const { selectionStatusFilter: previousSelectionStatusFilter } = + this.getSubjectProps(); const newSelectionStatusFilter = resolveExclusiveSelectionStatusFilter( rawSelectionStatusFilter, previousSelectionStatusFilter ); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - orAndFilter, - selectionStatusFilter: newSelectionStatusFilter, - mediaUploadTypeFilter, - pendingSubmissionsFilter - }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { selectionStatusFilter: newSelectionStatusFilter } + ); } handleChangePendingSubmissionsFilter(ev) { const { value } = ev.target; - this.callBySummit({}, { pendingSubmissionsFilter: value }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { pendingSubmissionsFilter: value } + ); } handleChangeFlowEvent(ev) { @@ -528,7 +516,7 @@ class SummitSpeakersListPage extends React.Component { ...this.state, speakerFilters: { ...this.state.speakerFilters, orAndFilter: ev } }); - this.callBySummit({}, { orAndFilter: ev }); + this.callBySummit({ page: DEFAULT_CURRENT_PAGE }, { orAndFilter: ev }); } render() { From 5bb1ddfc6b0a78f059edfc579610714a834371f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Thu, 17 Sep 2026 16:20:19 -0300 Subject: [PATCH 4/7] fix: add new filter on getSelectedSpeakersActivityCount MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- src/actions/speaker-actions.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/actions/speaker-actions.js b/src/actions/speaker-actions.js index 986576107..00bd13f7f 100644 --- a/src/actions/speaker-actions.js +++ b/src/actions/speaker-actions.js @@ -974,7 +974,8 @@ export const getSelectedSpeakersActivityCount = trackGroupFilter, activityTypeFilter, selectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter } = currentSummitSpeakersListState; const filters = { selectionPlanFilter, @@ -982,7 +983,8 @@ export const getSelectedSpeakersActivityCount = trackGroupFilter, activityTypeFilter, selectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter }; const filter = parseFilters(filters); const params = { access_token: accessToken }; From 3d93f34d68b53b9547d85f825fd28e9b86a46e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Thu, 17 Sep 2026 16:42:25 -0300 Subject: [PATCH 5/7] fix: add missing filter on submitter action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- src/actions/submitter-actions.js | 6 ++++-- src/pages/summit_speakers/summit-speakers-list-page.js | 3 --- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/actions/submitter-actions.js b/src/actions/submitter-actions.js index 323f9baf3..bc06d7b1f 100644 --- a/src/actions/submitter-actions.js +++ b/src/actions/submitter-actions.js @@ -84,7 +84,8 @@ export const getSelectedSubmittersActivityCount = trackGroupFilter, activityTypeFilter, selectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter } = currentSummitSubmittersListState; const filters = { selectionPlanFilter, @@ -92,7 +93,8 @@ export const getSelectedSubmittersActivityCount = trackGroupFilter, activityTypeFilter, selectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter }; const filter = parseFilters(filters); const params = { access_token: accessToken }; diff --git a/src/pages/summit_speakers/summit-speakers-list-page.js b/src/pages/summit_speakers/summit-speakers-list-page.js index 40f55badd..71a147cd2 100644 --- a/src/pages/summit_speakers/summit-speakers-list-page.js +++ b/src/pages/summit_speakers/summit-speakers-list-page.js @@ -297,9 +297,6 @@ class SummitSpeakersListPage extends React.Component { } handleSearch(term) { - // a new term can shrink the result set below the current page, leaving - // the user stranded on an empty page with no visible pagination - reset - // to page 1, same as every filter change below this.callBySummit({ page: DEFAULT_CURRENT_PAGE, term }); } From 144d51f30922293a45e1a53abd8681fec292a74a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Thu, 17 Sep 2026 16:46:15 -0300 Subject: [PATCH 6/7] fix: add unit test case on submitter actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- .../__tests__/submitter-actions.test.js | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/actions/__tests__/submitter-actions.test.js b/src/actions/__tests__/submitter-actions.test.js index e2bf731e9..ac0e71f22 100644 --- a/src/actions/__tests__/submitter-actions.test.js +++ b/src/actions/__tests__/submitter-actions.test.js @@ -4,7 +4,10 @@ import configureStore from "redux-mock-store"; import thunk from "redux-thunk"; import { getRequest } from "openstack-uicore-foundation/lib/utils/actions"; -import { getSubmittersBySummit } from "../submitter-actions"; +import { + getSubmittersBySummit, + getSelectedSubmittersActivityCount +} from "../submitter-actions"; import * as methods from "../../utils/methods"; jest.mock("openstack-uicore-foundation/lib/utils/actions", () => ({ @@ -122,4 +125,37 @@ describe("getSubmittersBySummit - published filter", () => { const filter = listRequestFor().params["filter[]"] ?? []; expect(filter.join(",")).not.toContain("has_pending_presentations"); }); + + it.each([ + [true, "true"], + [false, "false"] + ])( + "maps pendingSubmissionsFilter %s to has_pending_presentations==%s on the selected-activity count request", + async (pendingSubmissionsFilter, expectedFlag) => { + const store = mockStore({ + ...stateWithSummit, + currentSummitSubmittersListState: { + totalActivities: 0, + term: null, + selectedCount: 1, + selectedItems: [42], + excludedItems: [], + selectedAll: false, + selectionPlanFilter: [], + trackFilter: [], + trackGroupFilter: [], + activityTypeFilter: [], + selectionStatusFilter: [], + mediaUploadTypeFilter: { operator: null, value: [] }, + pendingSubmissionsFilter + } + }); + + await store.dispatch(getSelectedSubmittersActivityCount()); + + expect(countRequestFor().params["filter[]"]).toContain( + `has_pending_presentations==${expectedFlag}` + ); + } + ); }); From a7e999a002188a4414b115e47ff8ab38304057ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Thu, 17 Sep 2026 17:14:29 -0300 Subject: [PATCH 7/7] fix: remove dead code, add missing test case for speaker actions count MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- src/actions/__tests__/speaker-actions.test.js | 36 ++++++++++++++++++- .../summit-speakers-list-page.test.js | 13 ------- .../summit-speakers-list-page.js | 19 +--------- 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/actions/__tests__/speaker-actions.test.js b/src/actions/__tests__/speaker-actions.test.js index 1b5338ba4..88e916106 100644 --- a/src/actions/__tests__/speaker-actions.test.js +++ b/src/actions/__tests__/speaker-actions.test.js @@ -11,7 +11,8 @@ import { import { removeAttachedPicture, saveSpeaker, - getSpeakersBySummit + getSpeakersBySummit, + getSelectedSpeakersActivityCount } from "../speaker-actions"; import * as methods from "../../utils/methods"; @@ -258,4 +259,37 @@ describe("getSpeakersBySummit - published filter", () => { const filter = listRequestFor().params["filter[]"] ?? []; expect(filter.join(",")).not.toContain("has_pending_presentations"); }); + + it.each([ + [true, "true"], + [false, "false"] + ])( + "maps pendingSubmissionsFilter %s to has_pending_presentations==%s on the selected-activity count request", + async (pendingSubmissionsFilter, expectedFlag) => { + const store = mockStore({ + ...stateWithSummit, + currentSummitSpeakersListState: { + totalActivities: 0, + term: null, + selectedCount: 1, + selectedItems: [42], + excludedItems: [], + selectedAll: false, + selectionPlanFilter: [], + trackFilter: [], + trackGroupFilter: [], + activityTypeFilter: [], + selectionStatusFilter: [], + mediaUploadTypeFilter: { operator: null, value: [] }, + pendingSubmissionsFilter + } + }); + + await store.dispatch(getSelectedSpeakersActivityCount()); + + expect(countRequestFor().params["filter[]"]).toContain( + `has_pending_presentations==${expectedFlag}` + ); + } + ); }); diff --git a/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js b/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js index 178ced34f..750d367bc 100644 --- a/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js +++ b/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js @@ -117,16 +117,3 @@ describe("SummitSpeakersListPage.handleChangeSelectionStatusFilter", () => { expect(pageArg).toBe(1); }); }); - -describe("SummitSpeakersListPage.handleOrAndFilter", () => { - it("resets to page 1 and dispatches the new or/and combinator", () => { - const getSpeakersBySummit = jest.fn(); - const instance = buildInstance({ getSpeakersBySummit }); - - instance.handleOrAndFilter("or"); - - const [, pageArg, , , , filtersArg] = getSpeakersBySummit.mock.calls[0]; - expect(pageArg).toBe(1); - expect(filtersArg.orAndFilter).toBe("or"); - }); -}); diff --git a/src/pages/summit_speakers/summit-speakers-list-page.js b/src/pages/summit_speakers/summit-speakers-list-page.js index 71a147cd2..f382fa406 100644 --- a/src/pages/summit_speakers/summit-speakers-list-page.js +++ b/src/pages/summit_speakers/summit-speakers-list-page.js @@ -57,7 +57,6 @@ import { } from "../../actions/promocode-actions"; import { - ALL_FILTER, DEFAULT_CURRENT_PAGE, SpeakersSources as sources } from "../../utils/constants"; @@ -150,7 +149,6 @@ class SummitSpeakersListPage extends React.Component { this.handleSendEmails = this.handleSendEmails.bind(this); this.handleChangePromoCodeStrategy = this.handleChangePromoCodeStrategy.bind(this); - this.handleOrAndFilter = this.handleOrAndFilter.bind(this); this.handleChangeMediaUploadTypeFilter = this.handleChangeMediaUploadTypeFilter.bind(this); this.handleChangePendingSubmissionsFilter = @@ -161,10 +159,7 @@ class SummitSpeakersListPage extends React.Component { showSendEmailModal: false, excerptRecipient: "", source: sources.speakers, - promoCodeStrategy: 0, - speakerFilters: { - orAndFilter: ALL_FILTER - } + promoCodeStrategy: 0 }; } @@ -224,16 +219,12 @@ class SummitSpeakersListPage extends React.Component { mediaUploadTypeFilter, pendingSubmissionsFilter } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; return { selectionPlanFilter, trackFilter, trackGroupFilter, activityTypeFilter, selectionStatusFilter, - orAndFilter, mediaUploadTypeFilter, pendingSubmissionsFilter, ...filterOverrides @@ -508,14 +499,6 @@ class SummitSpeakersListPage extends React.Component { } } - handleOrAndFilter(ev) { - this.setState({ - ...this.state, - speakerFilters: { ...this.state.speakerFilters, orAndFilter: ev } - }); - this.callBySummit({ page: DEFAULT_CURRENT_PAGE }, { orAndFilter: ev }); - } - render() { const { currentSummit, currentPromocodeSpecification } = this.props;