diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js index 129b8232bf12d6353bc1507d27f1b17a1821b683..a35c4877a60697883530df950ccd801e272e6dbc 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js @@ -2225,7 +2225,7 @@ function ViewTable(props) { Header: 'Action', id: 'Action', accessor: props.keyaccessor, - Cell: props => <button className='p-link' onClick={navigateTo(props)} ><i className="fa fa-eye" style={{ cursor: 'pointer' }}></i></button>, + Cell: props => <Link to={{pathname: props.cell.row.values['actionpath']}}className='p-link' onClick={(e) => navigateTo(e, props)} ><i className="fa fa-eye" style={{ cursor: 'pointer' }}></i></Link>, disableFilters: true, disableSortBy: true, //isVisible: defaultdataheader.includes(props.keyaccessor), diff --git a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppMenu.js b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppMenu.js index c207fc50489805bfeaa1456038b65609f39b523b..59ae81de1d231ccf7ed00b118af83f7a15deb562 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppMenu.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppMenu.js @@ -29,6 +29,9 @@ class AppSubmenu extends Component { } onMenuItemClick(event, item, index) { + if(event.ctrlKey){ + return; + } event.preventDefault(); //avoid processing disabled items if(item.disabled) { @@ -98,7 +101,7 @@ class AppSubmenu extends Component { if (item.to) { return ( //<NavLink activeClassName="active-route" to={item.to} onClick={(e) => this.onMenuItemClick(e, item, i)} exact target={item.target}> - <a activeClassName="active-route" onClick={(e) => this.onMenuItemClick(e, item, i)} exact target={item.target}> + <a href={item.to} activeClassName="active-route" onClick={(e) => this.onMenuItemClick(e, item, i)} exact target={item.target}> {content} {/* </NavLink> */} </a> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/PageHeader.js b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/PageHeader.js index 06521dd203b56cbe59f48143d249bf0fcca8581b..fdd553470409b4baabaa44d163371107e655918b 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/PageHeader.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/PageHeader.js @@ -21,6 +21,7 @@ export default ({ title, subTitle, actions, ...props}) => { }; const onButtonClick = (e, action) => { + e.preventDefault() if (action.actOn && action.actOn === 'click') { action.props.callback(e); } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/edit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/edit.js index fc08193ce91dbb54eebfc35de12f5f0c0d27b542..5c11fa8258d7dbf7be0a819e317ba904eececc47 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/edit.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/edit.js @@ -403,9 +403,8 @@ export class CycleEdit extends Component { */ cancelEdit() { publish('edit-dirty', false); - this.props.history.goBack(); + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/cycle/view/${this.props.match.params.id}`); this.setState({showDialog: false}); - this.props.history.goBack(); } render() { diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/view.js index 3d6b3a4e5fff34dc69d0155b71e4dbabc5589478..f1574f653ba783ced7d03bc887167c62474e1647 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/view.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/view.js @@ -35,6 +35,7 @@ export class CycleView extends Component { } else if (this.props.location.state && this.props.location.state.id) { this.state.cycleId = this.props.location.state.id; } + this.cancelView = this.cancelView.bind(this); this.state.redirect = this.state.cycleId?"":'/cycle' // If no cycle id is passed, redirect to cycle list page this.resourceUnitMap = UnitConverter.resourceUnitMap; // Resource unit conversion factor and constraints } @@ -50,6 +51,10 @@ export class CycleView extends Component { this.setState({userrole: permission}); } + cancelView(){ + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/cycle`); + } + /** * To get the cycle details from the backend using the service * @@ -110,7 +115,8 @@ export class CycleView extends Component { disabled: cycle.edit? !cycle.edit:true, props:{ pathname: `/cycle/edit/${this.state.cycle.name}`, state: {id: this.state.cycle?this.state.cycle.name:''}}}, - {icon: 'fa-window-close',link: this.props.history.goBack}]}/> + {icon: 'fa-window-close', + type: 'button', actOn: 'click', props:{ callback: this.cancelView }}]}/> { this.state.isLoading && <AppLoader /> } { this.state.cycle && <React.Fragment> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.js index 2bf59fe21e01e20a720199cd760caf0d0bcaf649..c929cc47ff51366a4f128600ed27d16622d3b9f0 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.js @@ -32,6 +32,7 @@ export class ProjectView extends Component { } else if (this.props.location.state && this.props.location.state.id) { this.state.projectId = this.props.location.state.id; } + this.cancelView = this.cancelView.bind(this); this.state.redirect = this.state.projectId?"":'/project' // If no project id is passed, redirect to Project list page this.resourceUnitMap = UnitConverter.resourceUnitMap; // Resource unit conversion factor and constraints } @@ -64,6 +65,9 @@ export class ProjectView extends Component { } } + cancelView(){ + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/project`); + } /** * To get the project details from the backend using the service * @@ -116,7 +120,7 @@ export class ProjectView extends Component { disabled: this.state.permissionById[this.state.projectId].edit?!this.state.permissionById[this.state.projectId].edit:true, props : { pathname: `/project/edit/${this.state.project.name}`, state: {id: this.state.project?this.state.project.name:''&& this.state.project}}}, - {icon:'fa-window-close',title: 'Click to Close Project View', link: this.props.history.goBack}]}/> + {icon:'fa-window-close',title: 'Click to Close Project View', type: 'button', actOn: 'click', props:{ callback: this.cancelView }}]}/> { this.state.isLoading && <AppLoader /> } { this.state.project && <React.Fragment> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.create.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.create.js index bfa70d3a2fd71f4aedb02a59a8540a70a0962288..9e5b75d2c0f4ca41322be9a61110f2cf864f76f7 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.create.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.create.js @@ -364,9 +364,8 @@ export class ReservationCreate extends Component { */ cancelCreate() { publish('edit-dirty', false); - this.props.history.goBack(); + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/su/timelineview`); this.setState({ showDialog: false }); - this.props.history.goBack(); } /** diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.edit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.edit.js index 0263f87a5c5ea5823cd17c10c423b9b78fda99a8..6507035bfa8c7eb293afa9a97351c89c79fad91d 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.edit.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.edit.js @@ -164,7 +164,7 @@ export class ReservationEdit extends Component { const reserId = this.props.match ? this.props.match.params.id : null; publish('edit-dirty', false); this.setState({ showDialog: false }); - this.props.history.goBack(); + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/reservation/view/${this.props.match.params.id}`); } /** diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.list.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.list.js index aff992ee5c742cd9420160633e040d3539b7581a..351f79852bb544acdd3f6ed3eb4de310fecf4e58 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.list.js @@ -132,6 +132,7 @@ export class ReservationList extends Component{ this.deleteReservations = this.deleteReservations.bind(this); this.closeDialog = this.closeDialog.bind(this); this.getReservationDialogContent = this.getReservationDialogContent.bind(this); + this.closeList = this.closeList.bind(this); } async componentDidMount() { @@ -375,6 +376,10 @@ export class ReservationList extends Component{ this.setState({dialogVisible: false}); } + closeList(){ + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/su/timelineview`); + } + /** * Create confirmation dialog details */ @@ -440,7 +445,7 @@ export class ReservationList extends Component{ title:permissions.create?'Add Reservation': "Don't have permission to add new Reservation", disabled: permissions.create? !permissions.create: true, props : { pathname: `/reservation/create`}}, - {icon: 'fa-window-close', title:'Click to close Reservation list', props : { pathname: `/su/timelineview`}}]}/> + {icon: 'fa-window-close', title:'Click to close Reservation list', type: 'button', actOn: 'click', props:{ callback: this.closeList }}]}/> {this.state.isLoading? <AppLoader /> : (this.state.reservationsList && this.state.reservationsList.length>0) ? <> {permissions.list? diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js index 990c1afc455317df16cbb52108fedb0fa2825449..2c6eaa352b1431300bf8f968aad7f296d4164652 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js @@ -701,7 +701,8 @@ class SchedulingUnitList extends Component{ /** * Check and delete the selected Scheduling Unit(s) */ - checkAndDeleteSchedulingUnit() { + checkAndDeleteSchedulingUnit(e) { + e.preventDefault(); this.pageUpdated = false; this.suDraftsList = []; this.suBlueprintList = []; @@ -936,7 +937,8 @@ class SchedulingUnitList extends Component{ } //Confirmation to Copy Scheduling Unit - confirmCopyingSU() { + confirmCopyingSU(e) { + e.preventDefault(); if (this.selectedRows.length > 0) { let dialog = this.state.dialog; dialog.type = "confirmation"; @@ -1040,7 +1042,8 @@ class SchedulingUnitList extends Component{ * If no selected scheduling unit is cancellable, show info to select a cancellable scheduling unit. * */ - confirmCancelSchedulingUnit() { + confirmCancelSchedulingUnit(e) { + e.preventDefault(); this.pageUpdated = false; let selectedBlueprints = this.selectedRows.filter(schedulingUnit => { return schedulingUnit.type === 'Blueprint' && @@ -1263,7 +1266,8 @@ class SchedulingUnitList extends Component{ /** * Function to invoke form UI to create cleanup task */ - async cleanUpSUTask() { + async cleanUpSUTask(e) { + e.preventDefault(); this.pageUpdated = false; if (this.selectedRows.length > 0) { this.suBlueprintList = _.filter(this.selectedRows, (schedulingUnit) => { return schedulingUnit.type.toLowerCase() === "blueprint"}); @@ -1365,7 +1369,8 @@ class SchedulingUnitList extends Component{ /** * Function to call the SUBCreator component's function to check and create SUBs */ - checkAndCreateSUB() { + checkAndCreateSUB(e) { + e.preventDefault(); if (this.selectedRows.length > 0) { const suBlueprintList = _.filter(this.selectedRows, (schedulingUnit) => { return schedulingUnit.type.toLowerCase() === "blueprint"}); const suDraftsList = _.filter(this.selectedRows, (schedulingUnit) => { return schedulingUnit.type.toLowerCase() === "draft"}); @@ -1414,7 +1419,8 @@ class SchedulingUnitList extends Component{ /** * Confirm to Prevent/Allow Automatic Deletion for selected SU draft(s)/blueprint(s) */ - async confirmAutoDeletion() { + async confirmAutoDeletion(e) { + e.preventDefault(); if (this.selectedRows.length > 0) { let dialog = this.state.dialog; dialog.type = "confirmation"; @@ -1530,7 +1536,7 @@ class SchedulingUnitList extends Component{ <> {this.state.suType === 'Draft' && <> - <a href="#" style={{marginLeft: "5px"}} onClick={this.checkAndCreateSUB} + <a href="#" style={{marginLeft: "5px"}} onClick={(e)=> this.checkAndCreateSUB(e)} title={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.createsub ? "Create Blueprint(s)":`${this.access_denied_message} to create Blueprint(s)`} > <i class= {this.state.userrole && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.createsub ?"fa fa-stamp":"fa fa-disabled fa-stamp"} aria-hidden="true" ></i> @@ -1539,28 +1545,28 @@ class SchedulingUnitList extends Component{ } {this.state.suType === 'Blueprint' && <> - <a href="#" style={{marginLeft: "5px"}} onClick={this.cleanUpSUTask} + <a href="#" style={{marginLeft: "5px"}} onClick={(e) => this.cleanUpSUTask(e)} title={this.state.userrole && this.state.userrole.userRolePermission.task_blueprint && this.state.userrole.userRolePermission.task_blueprint.canceltask ? "Create Clean-up Task(s)":`${this.access_denied_message} to create Clean-up Task(s)`} > <i class={this.state.userrole && this.state.userrole.userRolePermission.task_blueprint && this.state.userrole.userRolePermission.task_blueprint.canceltask?"fa fa-recycle":"fa fa-disabled fa-recycle"} aria-hidden="true" ></i> </a> - <a href="#" style={{marginLeft: "5px"}} onClick={this.confirmCancelSchedulingUnit} + <a href="#" style={{marginLeft: "5px"}} onClick={(e) => this.confirmCancelSchedulingUnit(e)} title={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit_blueprint && this.state.userrole.userRolePermission.scheduleunit_blueprint.edit ? "Cancel selected Scheduling Unit(s)":`${this.access_denied_message} to cancel Scheduling Unit(s)`} > <i class={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit_blueprint && this.state.userrole.userRolePermission.scheduleunit_blueprint.edit?"fa fa-ban":"fa fa-disabled fa-ban"} aria-hidden="true" ></i> </a> </> } - <a href="#" style={{marginLeft: "5px"}} onClick={this.confirmAutoDeletion} + <a href="#" style={{marginLeft: "5px"}} onClick={(e) => this.confirmAutoDeletion(e)} title={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.autodeletion ? "Prevent/Allow Automatic Deletion":`${this.access_denied_message} to allow/prevent Automatic Deletion`} > <i class={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.autodeletion?"fa fa-thumbtack":"fa fa-disabled fa-thumbtack"} aria-hidden="true" ></i> </a> - <a href="#" style={{marginLeft: "5px"}} onClick={this.confirmCopyingSU} + <a href="#" style={{marginLeft: "5px"}} onClick={(e) => this.confirmCopyingSU(e)} title={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.copysu ? "Copy Scheduling Unit(s) Draft/Blueprint":`${this.access_denied_message} to copy Scheduling Unit(s)`} > <i class={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.copysu?"fa fa-copy":"fa fa-disabled fa-copy"} ></i> </a> - <a href="#" style={{marginLeft: "5px"}} onClick={this.checkAndDeleteSchedulingUnit} + <a href="#" style={{marginLeft: "5px"}} onClick={(e) => this.checkAndDeleteSchedulingUnit(e)} title={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.delete ? "Delete selected Scheduling Unit(s)":`${this.access_denied_message} to delete Scheduling Unit(s)`} > <i class={this.state.userrole && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.delete?"fa fa-trash":"fa fa-disabled fa fa-trash"} aria-hidden="true" ></i> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js index 7fb8a366271baa5d7ccc256c3778af6ed8a64c6a..0ba2ef4aba472b929be1553ebe02246e69ea8f87 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js @@ -203,6 +203,7 @@ class ViewSchedulingUnit extends Component { this.getCleanUpDialogContent = this.getCleanUpDialogContent.bind(this); this.cleanUpSUTask = this.cleanUpSUTask.bind(this); this.confirmAutoDeletion = this.confirmAutoDeletion.bind(this); + this.cancelView = this.cancelView.bind(this); this.getFilterOptions = this.getFilterOptions.bind(this); } @@ -262,6 +263,10 @@ class ViewSchedulingUnit extends Component { } + cancelView(){ + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/schedulingunit`); + } + toggleBySorting = (sortData) => { UtilService.localStore({ type: 'set', key: this.lsKeySortColumn, value: sortData }); } @@ -386,7 +391,7 @@ class ViewSchedulingUnit extends Component { disabled: userPermissions.scheduleunit && userPermissions.scheduleunit.delete?canDelete?false:true : true, type: 'button', actOn: 'click', props: { callback: this.showDeleteSUConfirmation } }); - this.actions.push({ icon: 'fa-window-close', title: 'Click to Close Scheduling Unit View', link: this.props.history.goBack }); + this.actions.push({ icon: 'fa-window-close', title: 'Click to Close Scheduling Unit View', type: 'button', actOn: 'click', props:{ callback: this.cancelView }}); if (this.props.match.params.type ==='draft') { let blueprintExist = this.state.scheduleunit && this.state.scheduleunit.scheduling_unit_blueprints && this.state.scheduleunit.scheduling_unit_blueprints.length>0; if(isIngestPresent) { @@ -1404,14 +1409,14 @@ class ViewSchedulingUnit extends Component { <> {this.props.match.params.type === 'draft' && <> - <a href="#" onClick={this.confirmCancelTasks} + <button className="p-link" href="#" onClick={this.confirmCancelTasks} title={userPermissions.task_draft.canceltask?"Cancel selected Task(s)": `${this.access_denied_message} to cancel Task(s)`}> <i class={userPermissions.task_draft.canceltask?"fa fa-ban":"fa fa-ban fa-disabled"} aria-hidden="true" ></i> - </a> - <a href="#" style={{ pointerEvents: this.props.disabled ? 'none' : 'auto' }}onClick={this.confirmDeleteTasks} + </button> + <button className="p-link" href="#" style={{ pointerEvents: this.props.disabled ? 'none' : 'auto' }}onClick={this.confirmDeleteTasks} title={userPermissions.task.delete?"Delete selected Task(s)": `${this.access_denied_message} to delete Task(s)`} > <i class={userPermissions.task.delete?"fa fa-trash":"fa fa-trash fa-disabled"} aria-hidden="true" ></i> - </a> + </button> </> } {this.props.match.params.type === 'blueprint' && diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js index 069dd9273fb2ae3ae9ffad52bc369fb15a57ad63..1e057e96251ac18e891b7a9f2e7ac00600bebd8b 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js @@ -449,9 +449,8 @@ export class SchedulingUnitCreate extends Component { */ cancelCreate() { publish('edit-dirty', false); - this.props.history.goBack(); + this.props.history.length>1?this.props.history.goBack():this.props.history.push('/schedulingunit'); this.setState({showDialog: false}); - this.props.history.goBack(); } constraintStrategy(e){ diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/edit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/edit.js index 91bddd3e2f2ceaab7c338f4649272b221725f08b..a34c98651951fd8cb8bf54d08e87d4b6dda5e707 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/edit.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/edit.js @@ -430,9 +430,8 @@ export class EditSchedulingUnit extends Component { */ cancelCreate() { publish('edit-dirty', false); - this.props.history.goBack(); + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/schedulingunit`); this.setState({showDialog: false}); - this.props.history.goBack(); } constraintStrategy(schema, initValue){ diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/excelview.schedulingset.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/excelview.schedulingset.js index 95fda18c6276c0680563bfc3935994401069220f..b43942a7d7f9bdc39da30a39da78696cef8c242c 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/excelview.schedulingset.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/excelview.schedulingset.js @@ -2143,7 +2143,7 @@ export class SchedulingSetCreate extends Component { */ cancelCreate() { publish('edit-dirty', false); - this.setState({redirect: '/schedulingunit'}); + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/schedulingunit`); } /** diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/edit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/edit.js index a71b2eb11b091630e4c802669f30fbe498c7e6e5..4394a790448032f02b436f361f40cf5deec096fc 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/edit.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/edit.js @@ -174,9 +174,9 @@ export class TaskEdit extends Component { cancelEdit() { publish('edit-dirty', false); - this.props.history.goBack(); + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/task`); this.setState({showDialog: false}); - this.props.history.goBack(); + } async componentDidMount() { diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/view.js index b555a998d89141df6a14e5e032be7d11364213c5..741fd04ca60ab970256eec535c09a389ba6a30e0 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/view.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/view.js @@ -44,6 +44,7 @@ export class TaskView extends Component { this.getTaskDeleteDialogContent = this.getTaskDeleteDialogContent.bind(this); this.showCancelConfirmation = this.showCancelConfirmation.bind(this); this.cancelTask = this.cancelTask.bind(this); + this.cancelView = this.cancelView.bind(this); if (this.props.match.params.id) { @@ -180,6 +181,10 @@ export class TaskView extends Component { this.setState({confirmDialogVisible: false}); } + cancelView(){ + this.props.history.length>1?this.props.history.goBack():this.props.history.push(`/project`); + } + /** * Delete Task */ @@ -282,7 +287,7 @@ export class TaskView extends Component { this.state.permissionById && this.state.permissionById[this.state.taskId].delete? 'Delete Task': `${this.access_denied_message} to delete`, type: 'button', disabled: this.state.hasBlueprint, actOn: 'click', props:{ callback: this.showDeleteConfirmation}}); actions.push({ icon: 'fa-window-close', link: this.props.history.goBack, - title:'Click to Close Task', props : { pathname:'/schedulingunit' }}); + title:'Click to Close Task', type: 'button', actOn: 'click', props:{ callback: this.cancelView }}); // Child component to render predecessors and successors list const TaskRelationList = ({ list }) => ( diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/view.js index 4cce86576d2feee1c0766a9b237886225ae14fb5..da7b6ff5f534d7a7f87df5ab5b31170c8021c47c 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/view.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/view.js @@ -140,8 +140,9 @@ export class TimelineView extends Component { const timelinePermission = permission.userRolePermission.timeline; let taskTypes = [] - let menuOptions = [{ label: 'Add Reservation', icon: "fa fa-", disabled: !timelinePermission.addreservation, command: () => { this.selectOptionMenu('Add Reservation') } }, - { label: 'Reservation List', icon: "fa fa-", disabled: !timelinePermission.listreservation, command: () => { this.selectOptionMenu('Reservation List') } }, + let menuOptions = [{ label: 'Add Reservation', icon: "fa fa-", disabled: !timelinePermission.addreservation, command: (e) => { this.selectOptionMenu(e, 'Add Reservation') } }, + { label: 'Reservation List', icon: "fa fa-", disabled: !timelinePermission.listreservation, command: (e) => { + this.selectOptionMenu(e, 'Reservation List') } }, ] this.setState({menuOptions: menuOptions, loader: true }); TaskService.getTaskTypes().then(results => {taskTypes = results}); @@ -967,14 +968,26 @@ export class TimelineView extends Component { this.optionsMenu.toggle(event); } - selectOptionMenu(menuName) { + selectOptionMenu(e, menuName) { switch (menuName) { case 'Reservation List': { - this.setState({ redirect: `/reservation/list` }); + if(e.originalEvent.ctrlKey) { + window.open('/reservation/list','_blank'); + } + else { + this.props.history.push('/reservation/list'); + this.setState({ redirect: `/reservation/list` }); + } break; } case 'Add Reservation': { - this.setState({ redirect: `/reservation/create` }); + if(e.originalEvent.ctrlKey) { + window.open('/reservation/create','_blank'); + } + else { + this.props.history.push('/reservation/create') + this.setState({ redirect: `/reservation/create`}); + } break; } default: { diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/week.view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/week.view.js index 14cecc28ade9d431a96f94a064f5d799490bad29..a4690fda9d0d2cf645b4dba37bddda93fe958de6 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/week.view.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/week.view.js @@ -107,9 +107,11 @@ export class WeekTimelineView extends Component { async componentDidMount() { this.getStatusList(); const permission = await AuthUtil.getUserRolePermission(); + const timelinePermission = permission.userRolePermission.timeline; const weekviewPermission = permission.userRolePermission.weekoverview; - let menuOptions = [{ label: 'Add Reservation', icon: "fa fa-", disabled: !weekviewPermission.addreservation, command: () => { this.selectOptionMenu('Add Reservation') } }, - { label: 'Reservation List', icon: "fa fa-", disabled: !weekviewPermission.listreservation, command: () => { this.selectOptionMenu('Reservation List') } }, + let menuOptions = [{ label: 'Add Reservation', icon: "fa fa-", disabled: !timelinePermission.addreservation, command: (e) => { this.selectOptionMenu(e, 'Add Reservation') } }, + { label: 'Reservation List', icon: "fa fa-", disabled: !timelinePermission.listreservation, command: (e) => { + this.selectOptionMenu(e, 'Reservation List') } }, ] this.setState({menuOptions: menuOptions, userPermission: weekviewPermission}); @@ -572,14 +574,26 @@ export class WeekTimelineView extends Component { this.optionsMenu.toggle(event); } - selectOptionMenu(menuName) { + selectOptionMenu(e, menuName) { switch (menuName) { case 'Reservation List': { - this.setState({ redirect: `/reservation/list` }); + if(e.originalEvent.ctrlKey) { + window.open('/reservation/list','_blank'); + } + else { + this.props.history.push('/reservation/list'); + this.setState({ redirect: `/reservation/list` }); + } break; } case 'Add Reservation': { - this.setState({ redirect: `/reservation/create` }); + if(e.originalEvent.ctrlKey) { + window.open('/reservation/create','_blank'); + } + else { + this.props.history.push('/reservation/create') + this.setState({ redirect: `/reservation/create`}); + } break; } default: { diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js index c36001e6cd4a2d0af57f762ee13a8fd43960b1d1..43a99a7955af30d8cdc478e9eb59ece2b0454646 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js @@ -238,6 +238,9 @@ export default (props) => { let title = getStepItems()[currentView - 1].label; return title; } + const cancelView = () => { + props.history.length>1? props.history.goBack(): props.history.push(`/su/workflow`); + } return ( @@ -246,7 +249,7 @@ export default (props) => { {currentStep && <PageHeader location={props.location} title={getTitle()} actions={[{type:'ext_link', icon:'', label: 'SDC Helpdesk', title: 'Report major issues here', props: { pathname: 'https://support.astron.nl/sdchelpdesk' } }, - {icon: 'fa-window-close', link: props.history.goBack, title: 'Click to Close Workflow', props: { pathname: '/schedulingunit/1/workflow' } }, + {icon: 'fa-window-close', title: 'Click to Close Workflow', type: 'button', actOn: 'click', props:{ callback: cancelView }}, ]} />} {loader && <AppLoader />} {!loader && schedulingUnit && diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/workflow.list.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/workflow.list.js index d0167fada5277696821f2d362d3da1270fef629d..72352a6a07c1dc2c3609b92bf570d40c38686f3f 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/workflow.list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/workflow.list.js @@ -200,7 +200,7 @@ class WorkflowList extends Component{ * Go back to previous page */ close() { - this.props.history.goBack(); + this.props.history.push('/'); } /** @@ -308,8 +308,7 @@ class WorkflowList extends Component{ {project && project.list ? <> <PageHeader location={this.props.location} title={'Workflow - List'} - actions={[{icon: 'fa-window-close', title:'Click to Close Workflow - List', - type: 'button', actOn: 'click', props:{ callback: this.close }}]}/> + actions={[]}/> <div style={{marginTop: '15px'}}> {this.state.isLoading ? <AppLoader/> : (this.state.workflowProcessList.length>0 )? <>