diff --git a/src/actions/speaker-actions.js b/src/actions/speaker-actions.js index 1b25d275c..a5154e4d6 100644 --- a/src/actions/speaker-actions.js +++ b/src/actions/speaker-actions.js @@ -883,6 +883,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 906be372d..95b7c63cc 100644 --- a/src/actions/submitter-actions.js +++ b/src/actions/submitter-actions.js @@ -434,6 +434,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 3d36a1fbf..03a876b96 100644 --- a/src/pages/summit_speakers/summit-speakers-list-page.js +++ b/src/pages/summit_speakers/summit-speakers-list-page.js @@ -65,6 +65,8 @@ class SummitSpeakersListPage extends React.Component { super(props); this.getSubjectProps = this.getSubjectProps.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 = @@ -93,6 +95,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: "", @@ -111,31 +115,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(); } } @@ -155,6 +135,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 = @@ -176,7 +194,8 @@ class SummitSpeakersListPage extends React.Component { trackGroupFilter, activityTypeFilter, selectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter } = this.getSubjectProps(); const { speakerFilters: { orAndFilter } @@ -192,7 +211,8 @@ class SummitSpeakersListPage extends React.Component { activityTypeFilter, selectionStatusFilter, orAndFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter }); }); } @@ -205,236 +225,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: [] } } + ); } } @@ -454,31 +282,12 @@ class SummitSpeakersListPage extends React.Component { } else if (newSelectionStatusFilter.includes("alternate_rejected")) { newSelectionStatusFilter = ["alternate_rejected"]; } + this.callBySummit({}, { selectionStatusFilter: newSelectionStatusFilter }); + } - const { - term, - order, - page, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - mediaUploadTypeFilter - } = this.getSubjectProps(); - const { - speakerFilters: { orAndFilter } - } = this.state; - this.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - orAndFilter, - selectionStatusFilter: newSelectionStatusFilter, - mediaUploadTypeFilter - }); + handleChangePendingSubmissionsFilter(ev) { + const { value } = ev.target; + this.callBySummit({}, { pendingSubmissionsFilter: value }); } handleChangeFlowEvent(ev) { @@ -500,18 +309,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, @@ -531,15 +329,7 @@ class SummitSpeakersListPage extends React.Component { callable( term, - { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }, + this.getFilters(), testRecipient, excerptRecipient, shouldSendCopy2Submitter, @@ -599,30 +389,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) { @@ -661,32 +430,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() { @@ -710,6 +458,7 @@ class SummitSpeakersListPage extends React.Component { activityTypeFilter, selectionStatusFilter, mediaUploadTypeFilter, + pendingSubmissionsFilter, currentFlowEvent, totalActivities } = this.getSubjectProps(); @@ -770,6 +519,11 @@ class SummitSpeakersListPage extends React.Component { { label: "Alternate/Rejected", value: "alternate_rejected" } ]; + const pendingSubmissionsDDL = [ + { label: "Has Pending Submissions", value: true }, + { label: "No Pending Submissions", value: false } + ]; + const speakerSubmitterSourceSelectorDDL = [ { label: T.translate("summit_speakers_list.speakers"), @@ -995,6 +749,18 @@ class SummitSpeakersListPage extends React.Component { isMulti /> +
+ +
+ +