diff --git a/src/actions/__tests__/speaker-actions.test.js b/src/actions/__tests__/speaker-actions.test.js index feec65c78..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"; @@ -225,4 +226,70 @@ 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"); + }); + + 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/actions/__tests__/submitter-actions.test.js b/src/actions/__tests__/submitter-actions.test.js index c2396fad1..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", () => ({ @@ -89,4 +92,70 @@ 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"); + }); + + 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}` + ); + } + ); }); diff --git a/src/actions/speaker-actions.js b/src/actions/speaker-actions.js index 20431d87a..00bd13f7f 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; }; @@ -965,7 +974,8 @@ export const getSelectedSpeakersActivityCount = trackGroupFilter, activityTypeFilter, selectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter } = currentSummitSpeakersListState; const filters = { selectionPlanFilter, @@ -973,7 +983,8 @@ export const getSelectedSpeakersActivityCount = trackGroupFilter, activityTypeFilter, selectionStatusFilter, - mediaUploadTypeFilter + mediaUploadTypeFilter, + pendingSubmissionsFilter }; const filter = parseFilters(filters); const params = { access_token: accessToken }; diff --git a/src/actions/submitter-actions.js b/src/actions/submitter-actions.js index 7adabf00e..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 }; @@ -508,6 +510,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/__tests__/summit-speakers-list-page.test.js b/src/pages/summit_speakers/__tests__/summit-speakers-list-page.test.js index 1220c1538..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 @@ -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,8 @@ 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); }); }); diff --git a/src/pages/summit_speakers/summit-speakers-list-page.js b/src/pages/summit_speakers/summit-speakers-list-page.js index 6c73e7ac9..f382fa406 100644 --- a/src/pages/summit_speakers/summit-speakers-list-page.js +++ b/src/pages/summit_speakers/summit-speakers-list-page.js @@ -56,7 +56,10 @@ import { AUTO_GENERATED_SPEAKERS_DISCOUNT_CODE } from "../../actions/promocode-actions"; -import { ALL_FILTER, SpeakersSources as sources } from "../../utils/constants"; +import { + DEFAULT_CURRENT_PAGE, + SpeakersSources as sources +} from "../../utils/constants"; import { validateEmail } from "../../utils/methods"; import MediaTypeFilter from "../../components/filters/media-type-filter"; @@ -119,6 +122,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 = @@ -144,19 +149,17 @@ 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 = + this.handleChangePendingSubmissionsFilter.bind(this); this.state = { testRecipient: "", showSendEmailModal: false, excerptRecipient: "", source: sources.speakers, - promoCodeStrategy: 0, - speakerFilters: { - orAndFilter: ALL_FILTER - } + promoCodeStrategy: 0 }; } @@ -165,31 +168,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 +209,41 @@ 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(); + return { + selectionPlanFilter, + trackFilter, + trackGroupFilter, + activityTypeFilter, + selectionStatusFilter, + mediaUploadTypeFilter, + pendingSubmissionsFilter, + ...filterOverrides + }; + } + + callBySummit(posOverrides = {}, filterOverrides = {}) { + const { term, currentPage, perPage, order, orderDir } = + this.getSubjectProps(); + this.getBySummit( + posOverrides.term ?? term, + posOverrides.page ?? currentPage, + posOverrides.perPage ?? perPage, + posOverrides.order ?? order, + posOverrides.orderDir ?? orderDir, + this.getFilters(filterOverrides) + ); + } + export(term, order, orderDir, filters) { const { source } = this.state; const callable = @@ -241,34 +255,20 @@ class SummitSpeakersListPage extends React.Component { handleSpeakerSubmitterSourceChange(ev) { const { value } = ev.target; - const { - term, - order, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - mediaUploadTypeFilter - } = 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 - }); + this.getBySummit( + term, + DEFAULT_CURRENT_PAGE, + perPage, + order, + orderDir, + filters + ); }); } @@ -280,272 +280,84 @@ 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({ page: DEFAULT_CURRENT_PAGE, 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( + { page: DEFAULT_CURRENT_PAGE }, + { 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( + { page: DEFAULT_CURRENT_PAGE }, + { 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( + { page: DEFAULT_CURRENT_PAGE }, + { 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( + { page: DEFAULT_CURRENT_PAGE }, + { 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( + { 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.getBySummit(term, page, perPage, order, orderDir, { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter: { operator: null, value: [] } - }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { mediaUploadTypeFilter: { operator: null, value: [] } } + ); } } handleChangeSelectionStatusFilter(ev) { const { value: rawSelectionStatusFilter } = ev.target; - const { - term, - order, - page, - orderDir, - perPage, - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter: previousSelectionStatusFilter, - mediaUploadTypeFilter - } = 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 - }); + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { selectionStatusFilter: newSelectionStatusFilter } + ); + } + + handleChangePendingSubmissionsFilter(ev) { + const { value } = ev.target; + this.callBySummit( + { page: DEFAULT_CURRENT_PAGE }, + { pendingSubmissionsFilter: value } + ); } handleChangeFlowEvent(ev) { @@ -567,18 +379,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 +399,7 @@ class SummitSpeakersListPage extends React.Component { callable( term, - { - selectionPlanFilter, - trackFilter, - trackGroupFilter, - activityTypeFilter, - selectionStatusFilter, - orAndFilter, - mediaUploadTypeFilter - }, + this.getFilters(), testRecipient, excerptRecipient, shouldSendCopy2Submitter, @@ -666,30 +459,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) { @@ -727,35 +499,6 @@ 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 - }); - } - render() { const { currentSummit, currentPromocodeSpecification } = this.props; @@ -779,6 +522,7 @@ class SummitSpeakersListPage extends React.Component { activityTypeFilter, selectionStatusFilter, mediaUploadTypeFilter, + pendingSubmissionsFilter, currentFlowEvent, totalActivities } = this.getSubjectProps(); @@ -829,6 +573,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"), @@ -1054,6 +803,18 @@ class SummitSpeakersListPage extends React.Component { isMulti /> +