From f8a5c0fc494fb8e51443247db1eae44fbf995150 Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Tue, 7 Jul 2020 13:29:42 -0300 Subject: [PATCH 01/11] Fixed missing payment profiles resources Signed-off-by: Sebastian Marcet --- src/i18n/en.json | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/i18n/en.json b/src/i18n/en.json index d64b35225..0c4c547ee 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -1010,8 +1010,30 @@ "days_before" : "Days before event begin" }, "payment_profiles": { + "id": "#", + "application_type": "Application Type", + "provider" : "Provider", + "active" : "Is Active?", "payment_profiles_list" : "Payment Profiles List", - "payment_profiles" : "Payment Profiles" + "payment_profiles" : "Payment Profiles", + "add_payment_profile" : "Add Payment Profile", + "no_payment_profiles" : "No Payment Profiles found for current search criteria.", + "remove_warning" : "Are you sure you want to delete this Payment Profile?" + }, + "edit_payment_profile": { + "payment_profile": "Payment Profile", + "application_type" : "Application Type", + "provider" : "Provider", + "active" : "Is Active ?", + "test_mode_enabled": "Is Test Mode Enabled ?", + "live_secret_key" : "Live Secret Key", + "live_publishable_key" : "Live Publishable Key", + "test_secret_key" : "Test Secret Key", + "test_publishable_key" : "Test Publishable Key", + "info_stripe_keys" : "Get your API keys from your stripe account.", + "info_stripe_test_mode" : "Place the payment gateway in test mode using test API keys.", + "payment_profile_saved" : "Payment Profile saved successfully.", + "payment_profile_created" : "Payment Profile created successfully." }, "registration_invitations": { "registration_invitations_list" : "InvitationsList", From 86a4325ad2a9f9e50b498c83188c1cc229c08329 Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Thu, 9 Jul 2020 00:23:59 -0300 Subject: [PATCH 02/11] Added Selection Plan to Presentation EDIT Signed-off-by: Sebastian Marcet --- src/components/forms/event-form.js | 19 +++++++++++++++++-- src/i18n/en.json | 4 +++- src/pages/events/edit-summit-event-page.js | 1 + 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/components/forms/event-form.js b/src/components/forms/event-form.js index 5271589c4..5a1b001c2 100644 --- a/src/components/forms/event-form.js +++ b/src/components/forms/event-form.js @@ -31,7 +31,6 @@ import { } from 'openstack-uicore-foundation/lib/components' - class EventForm extends React.Component { constructor(props) { super(props); @@ -206,7 +205,7 @@ class EventForm extends React.Component { render() { let {entity, showSection} = this.state; - let { currentSummit, levelOpts, typeOpts, trackOpts, locationOpts, rsvpTemplateOpts, history } = this.props; + let { currentSummit, levelOpts, typeOpts, trackOpts, locationOpts, rsvpTemplateOpts, selectionPlansOpts, history } = this.props; let event_types_ddl = typeOpts.map( t => { @@ -232,6 +231,8 @@ class EventForm extends React.Component { let levels_ddl = levelOpts.map(l => ({label: l, value: l})); + let selection_plans_ddl = selectionPlansOpts.map(sp => ({label: sp.name, value: sp.id})); + let rsvp_templates_ddl = rsvpTemplateOpts.map( t => { return {label: t.title, value: t.id} @@ -397,6 +398,20 @@ class EventForm extends React.Component { } + {this.isEventType('PresentationType') && +
+
+ + +
+
+ }
diff --git a/src/i18n/en.json b/src/i18n/en.json index 0c4c547ee..d71152337 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -317,6 +317,7 @@ "streaming_url_info" : "Streaming URL could be a HLS/DASH feed (.m3u8/.mpd)", "meeting_url_info" : "Meeting URL could be a Zoom, Jitsy, or Google Meet", "etherpad_link" : "EtherPad URL", + "selection_plan" : "Selection Plan", "placeholders": { "select_venue" : "Select a Summit Venue ...", "start_date" : "Start Date", @@ -324,7 +325,8 @@ "select_event_type" : "Select an Event Type ...", "select_track" : "Select a Track ...", "select_level" : "Select a Level ...", - "select_rsvp_template": "Select a Template ..." + "select_rsvp_template": "Select a Template ...", + "select_selection_plan" : "Select a Selection Plan ..." } }, "edit_event_material": { diff --git a/src/pages/events/edit-summit-event-page.js b/src/pages/events/edit-summit-event-page.js index cc1c7ce12..b00609c30 100644 --- a/src/pages/events/edit-summit-event-page.js +++ b/src/pages/events/edit-summit-event-page.js @@ -40,6 +40,7 @@ class EditSummitEventPage extends React.Component { trackOpts={currentSummit.tracks} typeOpts={currentSummit.event_types} locationOpts={currentSummit.locations} + selectionPlansOpts={currentSummit.selection_plans} rsvpTemplateOpts={rsvpTemplateOptions} entity={entity} errors={errors} From bfbb9dc234684a7ce73ad6860da54cb1baa63baf Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Wed, 22 Jul 2020 16:34:06 -0300 Subject: [PATCH 03/11] Fixed report permissions for "summit front end admins" Signed-off-by: Sebastian Marcet --- src/access-routes.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/access-routes.yml b/src/access-routes.yml index a5206c05f..33765f242 100644 --- a/src/access-routes.yml +++ b/src/access-routes.yml @@ -83,6 +83,7 @@ tags: reports: - super-admins - administrators + - summit-front-end-administrators orders: - super-admins From b3f5caf2538fc9117e1d94d049f87f9ba25aad23 Mon Sep 17 00:00:00 2001 From: Santi Date: Mon, 3 Aug 2020 12:39:29 -0300 Subject: [PATCH 04/11] final tweaks on media upload --- src/reducers/events/summit-event-reducer.js | 54 ++++----------------- 1 file changed, 9 insertions(+), 45 deletions(-) diff --git a/src/reducers/events/summit-event-reducer.js b/src/reducers/events/summit-event-reducer.js index 3cb540580..49a8d76a8 100644 --- a/src/reducers/events/summit-event-reducer.js +++ b/src/reducers/events/summit-event-reducer.js @@ -82,10 +82,10 @@ const summitEventReducer = (state = DEFAULT_STATE, action) => { case EVENT_ADDED: case RECEIVE_EVENT: { let entity = payload.response; - let links = []; - let videos = []; - let slides = []; - let media_uploads = []; + let links = entity.slides || []; + let videos = entity.videos || []; + let slides = entity.links || []; + let media_uploads = entity.media_uploads || []; for(var key in entity) { if(entity.hasOwnProperty(key)) { @@ -95,38 +95,13 @@ const summitEventReducer = (state = DEFAULT_STATE, action) => { if (!entity.rsvp_external) entity.rsvp_link = null; - if (entity.links) { - links = entity.links.map(l => ({ - ...l, name: l.name ? l.name : l.link, - display_on_site_label: l.display_on_site ? 'Yes' : 'No', - })); - } - if (entity.videos) { - videos = entity.videos.map(v => ({ - ...v, - display_on_site_label: v.display_on_site ? 'Yes' : 'No', - })); - } - if (entity.slides) { - slides = entity.slides.map(s => ({ - ...s, - display_on_site_label: s.display_on_site ? 'Yes' : 'No', - })); - } - if (entity.media_uploads) { - media_uploads = entity.media_uploads.map(mu => { - const type = entity.type.allowed_media_upload_types.find(amu => amu.id === mu.media_upload_type_id); - return { - ...mu, - name: type ? type.name : '', - description: type ? type.description : '', - display_on_site_label: mu.display_on_site ? 'Yes' : 'No', - }; - }); - } - entity.materials = [...media_uploads, ...links, ...videos, ...slides]; + entity.materials.forEach(m => ({ + ...m, + display_on_site_label: m.display_on_site ? 'Yes' : 'No', + })); + return {...state, entity: {...state.entity, ...entity}, errors: {} }; } break; @@ -151,11 +126,6 @@ const summitEventReducer = (state = DEFAULT_STATE, action) => { break; case EVENT_MATERIAL_ADDED: { let newMaterial = {...payload.response}; - if (newMaterial.class_name === 'PresentationMediaUpload') { - const type = state.entity.type.allowed_media_upload_types.find(amu => amu.id === newMaterial.media_upload_type_id); - newMaterial.name = type ? type.name : ''; - newMaterial.description = type ? type.description : ''; - } newMaterial.display_on_site_label = (newMaterial.display_on_site) ? 'Yes' : 'No'; @@ -168,12 +138,6 @@ const summitEventReducer = (state = DEFAULT_STATE, action) => { let newMaterial = {...payload.response}; let oldMaterials = state.entity.materials.filter(m => m.id != newMaterial.id); - if (newMaterial.class_name === 'PresentationMediaUpload') { - const type = state.entity.type.allowed_media_upload_types.find(amu => amu.id === newMaterial.media_upload_type_id); - newMaterial.name = type ? type.name : ''; - newMaterial.description = type ? type.description : ''; - } - newMaterial.display_on_site_label = (newMaterial.display_on_site) ? 'Yes' : 'No'; let materials = [...oldMaterials, newMaterial]; From 9354103d9c71ebc7a81b1d42b260d1d6a31ecfe2 Mon Sep 17 00:00:00 2001 From: Santi Date: Fri, 7 Aug 2020 16:12:56 -0300 Subject: [PATCH 05/11] fix summit dropdown and selection plan dpdwn on event form --- src/actions/summit-actions.js | 24 +++++++++++++++++++ src/components/forms/event-form.js | 9 ++++++- src/components/forms/selection-plan-form.js | 1 + src/layouts/summit-id-layout.js | 8 +++++-- src/pages/events/event-category-list-page.js | 7 +++--- .../marketing/marketing-setting-list-page.js | 5 ++-- .../media_uploads/media-upload-list-page.js | 5 ++-- src/reducers/summits/directory-reducer.js | 8 ++++++- 8 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/actions/summit-actions.js b/src/actions/summit-actions.js index 89d5d7b2e..e9a9e91a4 100644 --- a/src/actions/summit-actions.js +++ b/src/actions/summit-actions.js @@ -32,6 +32,8 @@ export const REQUEST_SUMMIT = 'REQUEST_SUMMIT'; export const RECEIVE_SUMMIT = 'RECEIVE_SUMMIT'; export const REQUEST_SUMMITS = 'REQUEST_SUMMITS'; export const RECEIVE_SUMMITS = 'RECEIVE_SUMMITS'; +export const REQUEST_ALL_SUMMITS = 'REQUEST_ALL_SUMMITS'; +export const RECEIVE_ALL_SUMMITS = 'RECEIVE_ALL_SUMMITS'; export const SET_CURRENT_SUMMIT = 'SET_CURRENT_SUMMIT'; export const RESET_SUMMIT_FORM = 'RESET_SUMMIT_FORM'; export const UPDATE_SUMMIT = 'UPDATE_SUMMIT'; @@ -121,6 +123,28 @@ export const loadSummits = (page = 1, perPage = 10) => (dispatch, getState) => { ); } +export const getAllSummits = () => (dispatch, getState) => { + + let { loggedUserState } = getState(); + let { accessToken } = loggedUserState; + + let params = { + access_token : accessToken, + expand: 'none', + relations: 'none', + page: 1, + per_page: 100, + order: '-id', + }; + + getRequest( + createAction(REQUEST_ALL_SUMMITS), + createAction(RECEIVE_ALL_SUMMITS), + `${window.API_BASE_URL}/api/v1/summits/all`, + authErrorHandler + )(params)(dispatch, getState); +} + export const resetSummitForm = () => (dispatch, getState) => { dispatch(createAction(RESET_SUMMIT_FORM)({})); }; diff --git a/src/components/forms/event-form.js b/src/components/forms/event-form.js index 5a1b001c2..66b32fb4a 100644 --- a/src/components/forms/event-form.js +++ b/src/components/forms/event-form.js @@ -231,7 +231,14 @@ class EventForm extends React.Component { let levels_ddl = levelOpts.map(l => ({label: l, value: l})); - let selection_plans_ddl = selectionPlansOpts.map(sp => ({label: sp.name, value: sp.id})); + let selection_plans_ddl = []; + + if (entity.track_id) { + const track = trackOpts.find(t => t.id === entity.track_id); + selection_plans_ddl = selectionPlansOpts + .filter(sp => sp.track_groups.some(gr => track.track_groups.includes(gr))) + .map(sp => ({label: sp.name, value: sp.id})); + } let rsvp_templates_ddl = rsvpTemplateOpts.map( t => { diff --git a/src/components/forms/selection-plan-form.js b/src/components/forms/selection-plan-form.js index 1ac3c6b7f..d682a58ec 100644 --- a/src/components/forms/selection-plan-form.js +++ b/src/components/forms/selection-plan-form.js @@ -142,6 +142,7 @@ class SelectionPlanForm extends React.Component { id="max_submission_allowed_per_user" value={entity.max_submission_allowed_per_user} onChange={this.handleChange} + min={0} />
diff --git a/src/layouts/summit-id-layout.js b/src/layouts/summit-id-layout.js index abb9ea40e..5f31d8a82 100644 --- a/src/layouts/summit-id-layout.js +++ b/src/layouts/summit-id-layout.js @@ -17,7 +17,7 @@ import { Switch, Route, Redirect } from 'react-router-dom'; import { Breadcrumb } from 'react-breadcrumbs'; import T from "i18n-react/dist/i18n-react"; -import { getSummitById, resetSummitForm } from '../actions/summit-actions'; +import { getSummitById, resetSummitForm, getAllSummits } from '../actions/summit-actions'; import SummitDashboardPage from '../pages/summits/summit-dashboard-page' import EditSummitPage from '../pages/summits/edit-summit-page' @@ -66,6 +66,9 @@ class SummitIdLayout extends React.Component { this.props.resetSummitForm(); } else { this.props.getSummitById(summitId); + + // this is needed for summit dropdown, runs on background + this.props.getAllSummits(); } } @@ -146,7 +149,8 @@ export default connect ( mapStateToProps, { getSummitById, - resetSummitForm + resetSummitForm, + getAllSummits } )(SummitIdLayout); diff --git a/src/pages/events/event-category-list-page.js b/src/pages/events/event-category-list-page.js index 4dad538fa..1e8ba5f24 100644 --- a/src/pages/events/event-category-list-page.js +++ b/src/pages/events/event-category-list-page.js @@ -81,9 +81,8 @@ class EventCategoryListPage extends React.Component { } render(){ - let {currentSummit, eventCategories, summits} = this.props; - - summits = summits.filter(s => s.id != currentSummit.id); + let {currentSummit, eventCategories, allSummits} = this.props; + const summits = allSummits.filter(s => s.id != currentSummit.id); let columns = [ { columnKey: 'id', value: T.translate("general.id") }, @@ -136,7 +135,7 @@ class EventCategoryListPage extends React.Component { const mapStateToProps = ({ directoryState, currentSummitState, currentEventCategoryListState }) => ({ currentSummit : currentSummitState.currentSummit, - summits : directoryState.summits, + allSummits : directoryState.allSummits, ...currentEventCategoryListState }); diff --git a/src/pages/marketing/marketing-setting-list-page.js b/src/pages/marketing/marketing-setting-list-page.js index 7bb0463c6..0cb8df611 100644 --- a/src/pages/marketing/marketing-setting-list-page.js +++ b/src/pages/marketing/marketing-setting-list-page.js @@ -113,7 +113,8 @@ class MarketingSettingListPage extends React.Component { } render(){ - let {currentSummit, summits, settings, lastPage, currentPage, term, order, orderDir, totalSettings} = this.props; + let {currentSummit, allSummits, settings, lastPage, currentPage, term, order, orderDir, totalSettings} = this.props; + const summits = allSummits.filter(s => s.id != currentSummit.id); let columns = [ { columnKey: 'id', value: T.translate("general.id"), sortable: true }, @@ -193,7 +194,7 @@ class MarketingSettingListPage extends React.Component { const mapStateToProps = ({ currentSummitState, directoryState, marketingSettingListState }) => ({ currentSummit : currentSummitState.currentSummit, - summits : directoryState.summits, + allSummits : directoryState.allSummits, ...marketingSettingListState }) diff --git a/src/pages/media_uploads/media-upload-list-page.js b/src/pages/media_uploads/media-upload-list-page.js index 062f69a42..f61085e85 100644 --- a/src/pages/media_uploads/media-upload-list-page.js +++ b/src/pages/media_uploads/media-upload-list-page.js @@ -93,7 +93,8 @@ class MediaUploadListPage extends React.Component { canEdit = (item) => !item.is_system_defined; render(){ - let {media_uploads, summits, lastPage, currentPage, term, order, orderDir} = this.props; + let {currentSummit, media_uploads, allSummits, lastPage, currentPage, term, order, orderDir} = this.props; + const summits = allSummits.filter(s => s.id != currentSummit.id); let columns = [ { columnKey: 'id', value: T.translate("general.id"), sortable: true }, @@ -168,7 +169,7 @@ class MediaUploadListPage extends React.Component { const mapStateToProps = ({ directoryState, currentSummitState, mediaUploadListState }) => ({ currentSummit : currentSummitState.currentSummit, - summits : directoryState.summits, + allSummits : directoryState.allSummits, ...mediaUploadListState }) diff --git a/src/reducers/summits/directory-reducer.js b/src/reducers/summits/directory-reducer.js index 8d9e7d56a..5d0dd2e8f 100644 --- a/src/reducers/summits/directory-reducer.js +++ b/src/reducers/summits/directory-reducer.js @@ -1,8 +1,9 @@ -import { RECEIVE_SUMMITS, SUMMIT_ADDED, SUMMIT_DELETED } from '../../actions/summit-actions'; +import {RECEIVE_ALL_SUMMITS, RECEIVE_SUMMITS, SUMMIT_ADDED, SUMMIT_DELETED} from '../../actions/summit-actions'; import{ LOGOUT_USER } from 'openstack-uicore-foundation/lib/actions'; const DEFAULT_STATE = { summits : [], + allSummits : [], currentPage : 1, lastPage : 1, perPage : 10, @@ -17,6 +18,11 @@ const directoryReducer = (state = DEFAULT_STATE, action) => { return {...state, summits: data, currentPage: current_page, lastPage: last_page, totalSummits: total}; } break; + case RECEIVE_ALL_SUMMITS: { + let { data } = payload.response; + return {...state, allSummits: data}; + } + break; case SUMMIT_ADDED: { let { response } = payload; From d14730a19430c87168eae11dcd60efd29c3e7dc0 Mon Sep 17 00:00:00 2001 From: Santi Date: Fri, 7 Aug 2020 17:51:47 -0300 Subject: [PATCH 06/11] fix attendee form and event pic --- package-lock.json | 6 +++--- package.json | 2 +- src/components/forms/event-form.js | 11 +++++++---- src/components/forms/summit-form.js | 2 -- src/components/inputs/question-answers-input.js | 3 +-- src/reducers/attendees/attendee-reducer.js | 4 ++++ src/reducers/events/summit-event-reducer.js | 9 ++++++++- src/styles/general.less | 1 + 8 files changed, 25 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index a06d90735..6df60ff03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8339,9 +8339,9 @@ } }, "openstack-uicore-foundation": { - "version": "2.0.47", - "resolved": "https://registry.npmjs.org/openstack-uicore-foundation/-/openstack-uicore-foundation-2.0.47.tgz", - "integrity": "sha512-hOr+G+gPc5crTKTy0AmNyff+rfCloC2kUGUdBwJ1dmjOJN8bZPqYX+g48a7PJ9zkOk9wi8UIugf7fXtblsvrdg==" + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/openstack-uicore-foundation/-/openstack-uicore-foundation-2.0.53.tgz", + "integrity": "sha512-EPLRPrvaefapNy7lNxpadMzLuO/IxO1FBRlNyeYGui6+0dcpgXpZKoWubnWZxRk/p7zcNnXl6kvFTHJNyjpWxA==" }, "opn": { "version": "5.5.0", diff --git a/package.json b/package.json index 5705b7676..b4d5fd3d6 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "moment": "^2.22.2", "moment-timezone": "^0.5.28", "node-sass": "^4.14.1", - "openstack-uicore-foundation": "^2.0.47", + "openstack-uicore-foundation": "^2.0.49", "optimize-css-assets-webpack-plugin": "^5.0.3", "postcss-loader": "^2.1.6", "react": "^16.13.1", diff --git a/src/components/forms/event-form.js b/src/components/forms/event-form.js index 66b32fb4a..1b6710b9f 100644 --- a/src/components/forms/event-form.js +++ b/src/components/forms/event-form.js @@ -532,15 +532,18 @@ class EventForm extends React.Component { handleClick={this.toggleSection.bind(this, 'live')}>
- +