Skip to content
This repository has been archived by the owner on Feb 9, 2022. It is now read-only.

Commit

Permalink
Updated schedule builder
Browse files Browse the repository at this point in the history
* added selection status 'Rejected' as a filter
* updated bulk actions to include selection plan

Signed-off-by: smarcet <[email protected]>

Fixed bulk actions list layout

Signed-off-by: smarcet <[email protected]>

events bulk edition

fixed individual update of selection plan

Signed-off-by: smarcet <[email protected]>

Bulk edit

fixed layout

Signed-off-by: smarcet <[email protected]>

Activity bulk editiog

removed activity type bulk editing

Signed-off-by: smarcet <[email protected]>

Fixed Layout

Signed-off-by: smarcet <[email protected]>
  • Loading branch information
smarcet committed Jul 21, 2022
1 parent 63fc5d6 commit 270b4ab
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 29 deletions.
32 changes: 24 additions & 8 deletions src/actions/summit-event-bulk-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export const UPDATE_LOCATION_BULK = 'UPDATE_LOCATION_BULK';
export const UPDATE_TYPE_BULK = 'UPDATE_TYPE_BULK';
export const UPDATE_START_DATE_BULK = 'UPDATE_START_DATE_BULK';
export const UPDATE_END_DATE_BULK = 'UPDATE_END_DATE_BULK';
export const UPDATE_SELECTION_PLAN_BULK = 'UPDATE_SELECTION_PLAN_BULK';

export const getSummitEventsById = (summitId, eventIds ) => (dispatch, getState) => {

Expand Down Expand Up @@ -76,6 +77,13 @@ export const updateEventLocationLocal = (event, location, isValid) => (dispatch)
dispatch(createAction(UPDATE_LOCAL_EVENT)({ eventId: event.id, mutator: mutator(location, isValid) }))
};

export const updateEventSelectionPlanLocal = (event, selectionPlan, isValid) => (dispatch) => {

let mutator = (selectionPlan, isValid) => event => ({...event, selection_plan_id :selectionPlan.id, is_valid : isValid});

dispatch(createAction(UPDATE_LOCAL_EVENT)({ eventId: event.id, mutator: mutator(selectionPlan, isValid) }))
}

export const updateEventStartDateLocal = (event, startDate, isValid) => (dispatch) => {

let mutator = (startDate, isValid) => event => ({...event, start_date : startDate, is_valid : isValid});
Expand Down Expand Up @@ -114,6 +122,7 @@ export const updateEvents = (summitId, events) => (dispatch, getState) => {
type_id:event.type_id,
start_date:event.start_date,
end_date:event.end_date,
selection_plan_id: event.selection_plan_id,
}))
},
authErrorHandler
Expand All @@ -134,14 +143,17 @@ export const updateAndPublishEvents = (summitId, events) => (dispatch, getState
const { accessToken } = loggedUserState;
dispatch(startLoading());

events = events.map((event) => ({
id:event.id,
title:event.title,
location_id:event.location_id,
type_id:event.type_id,
start_date:event.start_date,
end_date:event.end_date,
}))
events = events.map((event) => (
{
id:event.id,
title:event.title,
location_id:event.location_id,
type_id:event.type_id,
start_date:event.start_date,
end_date:event.end_date,
selection_plan_id: event.selection_plan_id,
}
))
putRequest(
null,
createAction(UPDATED_REMOTE_EVENTS)({}),
Expand Down Expand Up @@ -227,6 +239,10 @@ export const updateEventsLocationLocal = (location) => (dispatch) => {
dispatch(createAction(UPDATE_LOCATION_BULK)({location}));
}

export const updateEventsSelectionPlanLocal = (selectionPlan) => (dispatch) => {
dispatch(createAction(UPDATE_SELECTION_PLAN_BULK)({selectionPlan}));
}

export const updateEventsTypeLocal = (eventType) => (dispatch) => {
dispatch(createAction(UPDATE_TYPE_BULK)({eventType}));
}
Expand Down
3 changes: 2 additions & 1 deletion src/components/schedule-builder/schedule-admin-dashboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -624,14 +624,15 @@ class ScheduleAdminDashBoard extends React.Component {
let presentationSelectionStatusOptions = [
{ value : 'selected', label: 'Selected' },
{ value : 'accepted', label: 'Accepted' },
{ value : 'rejected', label: 'Rejected' },
{ value : 'alternate', label: 'Alternate' }
];

// selection plan options

let presentationSelectionPlanOptions = currentSummit.selection_plans.map(sp => ({value: sp.id, label: sp.name}));

// sort options
// sort options

let orderByOptions = [
{ value : 'title', label: 'Title' },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import ScheduleAdminVenueSelector from '../schedule-builder/schedule-admin-venue
import ScheduleAdminEventTypeSelector from '../schedule-builder/schedule-admin-event-type-selector';
import moment from "moment-timezone";
import {TBALocation} from "../../utils/constants";
import Select from "react-select";

class SummitEventBulkEditorForm extends React.Component
{
Expand All @@ -32,11 +33,14 @@ class SummitEventBulkEditorForm extends React.Component
this.onEndDateChanged = this.onEndDateChanged.bind(this);
this.onSelectedEvent = this.onSelectedEvent.bind(this);
this.onBulkLocationChange = this.onBulkLocationChange.bind(this);
this.onBulkSelectionPlanChange = this.onBulkSelectionPlanChange.bind(this);
this.onBulkTypeChange = this.onBulkTypeChange.bind(this);
this.handleChangeBulkStartDate = this.handleChangeBulkStartDate.bind(this);
this.handleChangeBulkEndDate = this.handleChangeBulkEndDate.bind(this);
this.onSelectionPlanChanged = this.onSelectionPlanChanged.bind(this);
this.state = {
currentBulkLocation : null
currentBulkLocation : null,
currentBulkSelectionPlan: null,
}
}

Expand Down Expand Up @@ -78,6 +82,12 @@ class SummitEventBulkEditorForm extends React.Component
this.props.updateEventLocationLocal(events[idx], location, isValid);
}

onSelectionPlanChanged(idx, selectionPlan, isValid){
let { events } = this.props;
if(selectionPlan == null) return;
this.props.updateEventSelectionPlanLocal(events[idx], selectionPlan, isValid);
}

onTitleChanged(idx, title, isValid){
let { events } = this.props;
this.props.updateEventTitleLocal(events[idx], title, isValid)
Expand Down Expand Up @@ -105,6 +115,12 @@ class SummitEventBulkEditorForm extends React.Component
this.props.updateEventsLocationLocal(location)
}

onBulkSelectionPlanChange(option){
let selectionPlan = option.value;
this.setState({ ...this.state, currentBulkSelectionPlan: selectionPlan});
this.props.updateEventsSelectionPlanLocal(selectionPlan)
}

onBulkTypeChange(eventType){
this.props.updateEventsTypeLocal(eventType)
}
Expand All @@ -130,6 +146,7 @@ class SummitEventBulkEditorForm extends React.Component
{ value: TBALocation, label: TBALocation.name }
];

let selectionPlanOptions = [];

for(let i = 0; i < currentSummit.locations.length; i++) {
let location = currentSummit.locations[i];
Expand All @@ -143,7 +160,14 @@ class SummitEventBulkEditorForm extends React.Component
}
}

for(let i = 0; i < currentSummit.selection_plans.length; i++) {
let selection_plan = currentSummit.selection_plans[i];
let option = { value : selection_plan, label: selection_plan.name };
selectionPlanOptions.push(option);
}

let currentBulkLocation = venuesOptions.filter((option) => this.state.currentBulkLocation != null && option.value.id === this.state.currentBulkLocation.id).shift();
let currentBulkSelectionPlan = selectionPlanOptions.filter((option) => this.state.currentBulkSelectionPlan != null && option.value.id === this.state.currentBulkSelectionPlan.id).shift();
let typesOptions = [];
let currentBulkType = null;

Expand All @@ -164,24 +188,27 @@ class SummitEventBulkEditorForm extends React.Component
return (
<form>
<div className="row">
{canEditEventType &&
<div className="col-md-3">
<ScheduleAdminEventTypeSelector
currentValue={currentBulkType}
onEventTypeChanged={this.onBulkTypeChange}
eventTypes={typesOptions}
clearable={false}
&nbsp;
</div>
<div className="col-md-2">
<Select
placeholder={T.translate("schedule.placeholders.select_presentation_selection_plan")}
className="selection_plan_selector_bulk"
name="form-field-name"
value={currentBulkSelectionPlan}
onChange={this.onBulkSelectionPlanChange}
options={selectionPlanOptions}
/>
</div>
}
<div className="col-md-3">
<div className="col-md-2">
<ScheduleAdminVenueSelector
currentValue={currentBulkLocation}
onVenueChanged={this.onBulkLocationChange}
venues={venuesOptions}
/>
</div>
<div className="col-md-3">
<div className="col-md-2">
<DateTimePicker
id="start_date"
format={{date:"YYYY-MM-DD", time: "HH:mm"}}
Expand All @@ -192,7 +219,7 @@ class SummitEventBulkEditorForm extends React.Component
onChange={this.handleChangeBulkStartDate}
/>
</div>
<div className="col-md-3">
<div className="col-md-2">
<DateTimePicker
id="end_date"
format={{date:"YYYY-MM-DD", time: "HH:mm"}}
Expand All @@ -206,7 +233,8 @@ class SummitEventBulkEditorForm extends React.Component
</div>
<div className="row">
<div className="col-md-1 col-title">{T.translate("bulk_actions_page.event_id_label")}</div>
<div className="col-md-4 col-title">{T.translate("bulk_actions_page.event_name_label")}</div>
<div className="col-md-2 col-title">{T.translate("bulk_actions_page.event_name_label")}</div>
<div className="col-md-2 col-title">{T.translate("bulk_actions_page.event_selection_plan_label")}</div>
<div className="col-md-2 col-title">{T.translate("bulk_actions_page.event_location_label")}</div>
<div className="col-md-2 col-title">{T.translate("bulk_actions_page.event_start_date_label")}</div>
<div className="col-md-2 col-title">{T.translate("bulk_actions_page.event_end_date_label")}</div>
Expand All @@ -217,13 +245,15 @@ class SummitEventBulkEditorForm extends React.Component
key={idx}
index={idx}
venuesOptions={venuesOptions}
selectionPlanOptions={selectionPlanOptions}
event={event}
currentSummit={currentSummit}
onLocationChanged={this.onLocationChanged}
onTitleChanged={this.onTitleChanged}
onStartDateChanged={this.onStartDateChanged}
onEndDateChanged={this.onEndDateChanged}
onSelectedEvent={this.onSelectedEvent}
onSelectionPlanChanged={this.onSelectionPlanChanged}
/>
))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import moment from "moment-timezone";
import ScheduleAdminVenueSelector from '../schedule-builder/schedule-admin-venue-selector';
import T from 'i18n-react/dist/i18n-react'
import SummitEvent from '../../models/summit-event';
import Select from "react-select";

class SummitEventBulkEditorItem extends React.Component
{
Expand All @@ -27,6 +28,7 @@ class SummitEventBulkEditorItem extends React.Component
this.onTitleChanged = this.onTitleChanged.bind(this);
this.onLocationChanged = this.onLocationChanged.bind(this);
this.onSelectedEvent = this.onSelectedEvent.bind(this);
this.onSelectionPlanChanged = this.onSelectionPlanChanged.bind(this);
}

onSelectedEvent(evt){
Expand All @@ -49,6 +51,10 @@ class SummitEventBulkEditorItem extends React.Component
return isValid ? 'success':'warning';
}

getValidationEventSelectionPlan(){
return null;
}

getValidationStateVenue(){
return null;
}
Expand Down Expand Up @@ -95,18 +101,25 @@ class SummitEventBulkEditorItem extends React.Component
this.props.onLocationChanged(this.props.index, location, isValid);
}

onSelectionPlanChanged(option){
let selectionPlan = option.value;
let isValid = selectionPlan == null ? false:true;
this.props.onSelectionPlanChanged(this.props.index, selectionPlan, isValid);
}

render(){
let { event, currentSummit, venuesOptions } = this.props;
let { event, currentSummit, venuesOptions, selectionPlanOptions } = this.props;
let currentLocation = venuesOptions.filter((option) => option.value.id === event.location_id).shift()
let currentSummitStartDate = moment.tz(currentSummit.start_date * 1000, currentSummit.time_zone.name).hour(0).minute(0).second(0);
let currentSummitEndDate = moment.tz(currentSummit.end_date * 1000, currentSummit.time_zone.name).hour(23).minute(59).second(59);
let currentSelectionPlan = selectionPlanOptions.filter((option) => option.value.id === event.selection_plan_id).shift();

return (
<div className="row event-bulk-editor-item">
<div className="col-md-1">
<a className="event-edit" title={T.translate("bulk_actions_page.titles.view_event")} onClick={this.onSelectedEvent} href="#">{event.id}</a>
</div>
<div className="col-md-4">
<div className="col-md-2">
<FormGroup validationState={this.getValidationEventTitle()}>
<FormControl
type="text"
Expand All @@ -117,6 +130,19 @@ class SummitEventBulkEditorItem extends React.Component
<FormControl.Feedback />
</FormGroup>
</div>
<div className="col-md-2">
<FormGroup validationState={this.getValidationEventSelectionPlan()}>
<Select
placeholder={T.translate("schedule.placeholders.select_presentation_selection_plan")}
className="selection_plan_selector"
name="form-field-name"
value={currentSelectionPlan}
onChange={this.onSelectionPlanChanged}
options={selectionPlanOptions}
/>
<FormControl.Feedback/>
</FormGroup>
</div>
<div className="col-md-2">
<FormGroup validationState={this.getValidationStateVenue()}>
<ScheduleAdminVenueSelector
Expand Down
9 changes: 5 additions & 4 deletions src/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -149,17 +149,18 @@
"search_published": "Search for Published Activities ...",
"select_order_by": "Select Order By ...",
"select_day": "Select an Activity Day ...",
"select_venue": "Select an Activity Venue ...",
"select_venue": "Select a Venue ...",
"select_event_type": "Select an Activity Type ...",
"select_track": "Select an Activity Category ..."
}
},
"bulk_actions_page": {
"bulk_actions": "Bulk Actions",
"title": "Activity Bulk Actions",
"event_id_label": "Activity Id",
"event_name_label": "Activity Title",
"event_location_label": "Activity Location",
"event_id_label": "Id",
"event_name_label": "Title",
"event_selection_plan_label": "Selection Plan",
"event_location_label": "Location",
"event_start_date_label": "Start Date",
"event_end_date_label": "End Date",
"btn_apply_changes": "Apply Changes",
Expand Down
4 changes: 2 additions & 2 deletions src/models/summit-event.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,15 @@ class SummitEvent {
}

isValidEndDate(endDate){
if(endDate == null) return false;
if(endDate == null) return true;
let startDate = moment.tz(this._event.start_date * 1000, this._summit.time_zone.name);
endDate = moment.tz(endDate * 1000, this._summit.time_zone.name);
let summitEndDate = moment.tz(this._summit.end_date * 1000, this._summit.time_zone.name);
return endDate.isAfter(startDate) && (endDate.isBefore(summitEndDate) || endDate.isSame(summitEndDate));
}

isValidStartDate(startDate){
if(startDate == null) return false;
if(startDate == null) return true;
startDate = moment.tz(startDate* 1000, this._summit.time_zone.name);
let endDate = moment.tz(this._event.end_date * 1000, this._summit.time_zone.name);
let summitStartDate = moment.tz(this._summit.start_date * 1000, this._summit.time_zone.name);
Expand Down
8 changes: 8 additions & 0 deletions src/pages/events/summit-events-bulk-actions-page.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import {
updateEventsTypeLocal,
updateEventsStartDateLocal,
updateEventsEndDateLocal,
updateEventSelectionPlanLocal,
updateEventsSelectionPlanLocal
} from '../../actions/summit-event-bulk-actions';
import {getSummitById} from "../../actions/summit-actions";
import T from 'i18n-react/dist/i18n-react'
Expand Down Expand Up @@ -73,6 +75,8 @@ class SummitEventsBulkActionsPage extends React.Component {
updateEventsLocationLocal,
updateEventsStartDateLocal,
updateEventsEndDateLocal,
updateEventSelectionPlanLocal,
updateEventsSelectionPlanLocal,
} = this.props;

if(!currentSummit.id) return(<div />);
Expand All @@ -96,6 +100,8 @@ class SummitEventsBulkActionsPage extends React.Component {
updateEventsLocationLocal={updateEventsLocationLocal}
updateEventsStartDateLocal={updateEventsStartDateLocal}
updateEventsEndDateLocal={updateEventsEndDateLocal}
updateEventSelectionPlanLocal={updateEventSelectionPlanLocal}
updateEventsSelectionPlanLocal={updateEventsSelectionPlanLocal}
history={this.props.history}
/>
</div>
Expand Down Expand Up @@ -127,5 +133,7 @@ export default connect (
updateEventsTypeLocal,
updateEventsStartDateLocal,
updateEventsEndDateLocal,
updateEventSelectionPlanLocal,
updateEventsSelectionPlanLocal,
}
)(SummitEventsBulkActionsPage);
Loading

0 comments on commit 270b4ab

Please sign in to comment.