From c9009c709cfd1c67195b81115b268da5d96bccc6 Mon Sep 17 00:00:00 2001
From: Fanna Lautenbach <lautenbach@astron.nl>
Date: Thu, 7 Sep 2023 10:46:46 +0200
Subject: [PATCH] delete all deprecated views, components and its
 references/usages

---
 .../src/components/Timeline/index.js          |    3 -
 .../Timeline/CalendarTimeline.js              |    7 +-
 .../src/routes/Timeline/WeekView.js           |    2 +
 .../helpers/timeline.item.helper.test.js      |    7 +-
 .../tmss_webapp/src/routes/Timeline/index.js  |    3 -
 .../src/routes/Timeline/list.tabs.js          |  288 ---
 .../tmss_webapp/src/routes/Timeline/view.js   | 1986 -----------------
 .../src/routes/Timeline/week.view.js          | 1650 --------------
 .../frontend/tmss_webapp/src/routes/index.js  |    1 -
 9 files changed, 12 insertions(+), 3935 deletions(-)
 delete mode 100644 SAS/TMSS/frontend/tmss_webapp/src/components/Timeline/index.js
 rename SAS/TMSS/frontend/tmss_webapp/src/{components => routes}/Timeline/CalendarTimeline.js (99%)
 delete mode 100644 SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/index.js
 delete mode 100644 SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/list.tabs.js
 delete mode 100644 SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/view.js
 delete mode 100644 SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/week.view.js

diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/Timeline/index.js b/SAS/TMSS/frontend/tmss_webapp/src/components/Timeline/index.js
deleted file mode 100644
index ddf91940099..00000000000
--- a/SAS/TMSS/frontend/tmss_webapp/src/components/Timeline/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import { CalendarTimeline } from './CalendarTimeline';
-
-export default CalendarTimeline; 
\ No newline at end of file
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/Timeline/CalendarTimeline.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/CalendarTimeline.js
similarity index 99%
rename from SAS/TMSS/frontend/tmss_webapp/src/components/Timeline/CalendarTimeline.js
rename to SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/CalendarTimeline.js
index 2def44292ed..798a1caeb69 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/components/Timeline/CalendarTimeline.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/CalendarTimeline.js
@@ -16,8 +16,9 @@ import "flatpickr/dist/flatpickr.css";
 import confirmDatePlugin from "flatpickr/dist/plugins/confirmDate/confirmDate";
 import shortcutButtonsPlugin from "shortcut-buttons-flatpickr";
 import UIConstants from '../../utils/ui.constants';
-import DateTimeNavigator from "../../routes/Timeline/components/toolbar/DateTimeNavigator";
-import Filters from "../../routes/Timeline/components/toolbar/Filters";
+import DateTimeNavigator from "./components/toolbar/DateTimeNavigator";
+import Filters from "./components/toolbar/Filters";
+import {deprecate} from "@testing-library/jest-dom/dist/utils";
 
 // Label formats for day headers based on the interval label width
 const DAY_HEADER_FORMATS = [{ name: "longer", minWidth: 300, maxWidth: 50000, format: "DD dddd, MMMM YYYY"},
@@ -54,7 +55,7 @@ const DEFAULT_GROUP = [{'id': 0, 'title': ''}]; // 1st row is added purposefully
 //<<<<<<
 
 /**
- * Component to create a calendar timeline based out of react-calendar-timeline with UTC and LST date headers.
+ * DEPRECATED: Component to create a calendar timeline based out of react-calendar-timeline with UTC and LST date headers.
  */
 export class CalendarTimeline extends Component {
 
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js
index 2f26828c7e5..0e7188144e2 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js
@@ -1,5 +1,7 @@
 import Filters from "./components/toolbar/Filters";
 import React, {useEffect, useRef, useState} from "react";
+//TODO: this import does something magical for the timeline; find out what
+import CalendarTimeline from './CalendarTimeline';
 import Timeline, {
     CustomMarker,
     DateHeader,
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/timeline.item.helper.test.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/timeline.item.helper.test.js
index fba1215bde1..b11d9b36f73 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/timeline.item.helper.test.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/timeline.item.helper.test.js
@@ -1,8 +1,13 @@
 import moment from "moment";
-import {STATUS_COLORS} from "../week.view";
 import TimelineCommonUtils from "../common.utils";
 import {getTimelineItem, getReservationItem, getReservationTypeColorIndex} from "./timeline.item.helper";
 
+ const STATUS_COLORS = {
+    "ERROR": "FF0000", "CANCELLED": "#00FF00", "DEFINED": "#00BCD4", "UNSCHEDULABLE": "#9e0707",
+    "SCHEDULABLE": "#0000FF", "SCHEDULED": "#abc", "OBSERVING": "#bcd",
+    "OBSERVED": "#cde", "PROCESSING": "#cddc39", "PROCESSED": "#fed",
+    "INGESTING": "#edc", "FINISHED": "#47d53d"
+};
 describe("getTimelineItem", () => {
     const tasks = [
         {
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/index.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/index.js
deleted file mode 100644
index a252dd6dc9c..00000000000
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import {WeekTimelineView} from './week.view';
-
-export {WeekTimelineView} ;
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/list.tabs.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/list.tabs.js
deleted file mode 100644
index d281e0bef9a..00000000000
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/list.tabs.js
+++ /dev/null
@@ -1,288 +0,0 @@
-import React, { Component } from "react";
-import { TabView,TabPanel } from 'primereact/tabview';
-import _ from 'lodash';
-
-import ViewTable from "../../components/ViewTable";
-import TimelineConstants from "../../shared/timeline.constants";
-import UnitConverter from "../../utils/unit.converter";
-import TaskStatusLogs from "../Task/state_logs";
-import { Dialog } from "primereact/dialog";
-import UtilService from "../../services/util.service";
-
-/**
- * Component to show SU List, Task List and Reservation list of the Timeline range in tabs
- */
-class TimelineListTabs extends Component {
-    defaultSortColumns = {"SUListSortColumn": {id: "Start Time", desc: true},
-                            "TaskListSortColumn": {id: "Start Time", desc: true},
-                            "ResListSortColumn": {id: "Start Time", desc: true}}
-    constructor(props) {
-        super(props);
-        this.timelineUIAttributes = UtilService.localStore({ type: 'get', key: "TIMELINE_UI_ATTR" }) || {};
-        this.state = {
-            listTabIndex: this.timelineUIAttributes[`${props.viewName}_selectedTab`] || 0,
-            showStatusLogs: false,
-        }
-        this.pageUpdated = true;
-        this.filteredSUB = null;
-        this.setChangedTab = this.setChangedTab.bind(this);
-        this.suListFilterCallback = this.suListFilterCallback.bind(this);
-        this.taskListFilterCallback = this.taskListFilterCallback.bind(this);
-        this.reservListFilterCallback = this.reservListFilterCallback.bind(this);
-        this.getTaskList = this.getTaskList.bind(this);
-        this.getSUFilterOptions = this.getSUFilterOptions.bind(this);
-        this.getTaskFilterOptions = this.getTaskFilterOptions.bind(this);
-    }
-
-    componentDidMount() {
-    }
-
-    /**
-     * To get the tasks for the filtered Scheduling Units and format as required for the ViewTable component.
-     * @returns Array - Task objects
-     */
-    getTaskList() {
-        if ((!this.isSUFilterApplied || !this.filteredSUB) && this.props.suBlueprintList.length>0) {
-            this.filteredSUB = this.props.suBlueprintList.map(sub => {sub.Id = sub.id; return sub;});
-        }
-        const filteredSUB = this.filteredSUB;
-        const suBlueprintList = _.filter(this.props.suBlueprintList, function(suBlueprint) {
-            const filteredSU = _.find(filteredSUB || [], ['Id', suBlueprint.id])
-            return (filteredSU !== null && filteredSU !== undefined);
-        }) ;
-        let taskList = [];
-        for (const suBlueprint of suBlueprintList) {
-            for (const taskBlueprint of suBlueprint.task_blueprints) {
-                let task = _.cloneDeep(taskBlueprint);
-                task['actionpath'] = '/task/view/blueprint/' + task['id'];
-                task['statusLogs'] = this.getStatusLogColumn(task);
-                task.suId = suBlueprint.id;
-                task.suName = suBlueprint.name;
-                task.duration = UnitConverter.getSecsToHHmmss(suBlueprint.duration);
-                let outputDataproducts = [];
-                taskBlueprint.subtasks.map(function(subtask) { outputDataproducts = outputDataproducts.concat(subtask.output_dataproducts); return subtask;});
-                task.dataProducts = outputDataproducts.length;
-                task.dataSize = _.sumBy(outputDataproducts, 'size');
-                task.dataSizeOnDisk = _.sumBy(outputDataproducts, function (product) { return product.deletedSince ? 0 : product.size });
-                task.dataSize = UnitConverter.getUIResourceUnit('bytes', (task.dataSize));
-                task.dataSizeOnDisk = UnitConverter.getUIResourceUnit('bytes', (task.dataSizeOnDisk));
-                task.obsolete_since = task.obsolete_since !== null? true: false;
-                task.project = suBlueprint.draft.scheduling_set.project.name;
-                if (task['task_type']) {
-                    task['rowColor'] = 'task-'+task['task_type'];
-                }
-                taskList.push(task);
-            }
-        }
-        return taskList;
-    }
-    setChangedTab(tabIndex) {
-        this.timelineUIAttributes[`${this.props.viewName}_selectedTab`] = tabIndex;
-        this.storeUIAttributes();
-        this.setState({listTabIndex: tabIndex});
-    }
-
-    /**
-     * Callback function passed to SU List table and which in turn call the parent(View or Weekview) callback function to update the timeline.
-     * @param {Array} filteredData - Array of SU table rows
-     */
-    suListFilterCallback(filteredData) {
-        this.isSUFilterApplied = filteredData.length < this.props.suBlueprintList.length;
-        // Parent callback should be called only if there is any difference/change in the filter. Otherwise will keep calling the parent and timeline will keep moving
-        let isFilterChanged = ((_.differenceWith(this.filteredSUB, filteredData, _.isEqual))).length > 0;
-        isFilterChanged = isFilterChanged || ((_.differenceWith(filteredData, this.filteredSUB, _.isEqual))).length > 0;
-        if ( !this.filteredSUB || isFilterChanged ) {
-            this.filteredSUB = filteredData;
-            this.filteredTasks = this.getTaskList();
-            this.props.suListFilterCallback(filteredData, this.filteredTasks, this.filteredReservs);
-        }
-    }
-
-    /**
-     * Callback function passed to Task list table which in turn call back the parenst (View or Weekview) callback function
-     * to show or hide the tasks shown in the timeline.
-     * @param {Array} filteredData - Array of task table rows
-     */
-    taskListFilterCallback(filteredData) {
-        // Parent callback should be called only if there is any difference/change in the filter. Otherwise will keep calling the parent and timeline will keep moving
-        let filteredTaskIds = _.map(this.filteredTasks, "Task Id");
-        let filteredDataIds = _.map(filteredData, "Task Id");
-        let isFilterChanged = ((_.differenceWith(filteredTaskIds, filteredDataIds, _.isEqual))).length > 0;
-        isFilterChanged = isFilterChanged || ((_.differenceWith(filteredDataIds, filteredTaskIds, _.isEqual))).length > 0;
-        if ( !this.filteredTasks || isFilterChanged ) {
-            this.filteredTasks = filteredData;
-            this.props.suListFilterCallback(this.filteredSUB, filteredData, this.filteredReservs);
-        }
-    }
-    
-    /**
-     * Callback function passed to Reservation list table which in turn call back the parenst (View or Weekview) callback function
-     * to show or hide the reservations shown in the timeline.
-     * @param {Array} filteredData - Array of reservation table rows
-     */
-     reservListFilterCallback(filteredData) {
-        // Parent callback should be called only if there is any difference/change in the filter. Otherwise will keep calling the parent and timeline will keep moving
-        let filteredResIds = _.map(this.filteredReservs, "actionpath");
-        let filteredDataIds = _.map(filteredData, "actionpath");
-        let isFilterChanged = ((_.differenceWith(filteredResIds, filteredDataIds, _.isEqual))).length > 0;
-        isFilterChanged = isFilterChanged || ((_.differenceWith(filteredDataIds, filteredResIds, _.isEqual))).length > 0;
-        if ( !this.filteredReservs || isFilterChanged ) {
-            this.filteredReservs = filteredData;
-            this.props.suListFilterCallback(this.filteredSUB, this.filteredTasks, filteredData);
-        }
-    }
-
-    /**
-     * Child Component to display the status log column value with icon and show the dialog on clicking it.
-     * @param {Object} task 
-     * @returns - Component
-     */
-    getStatusLogColumn = (task) => {
-        return (
-            <button className="p-link" onClick={(e) => { this.setState({ showStatusLogs: true, task: task }) }}>
-                <i className="fa fa-history"></i>
-            </button>
-        );
-    }
-
-    /**
-     * Callback function to pass to View table component to store the sorting column in local storage
-     * @param {string} listName - Table name
-     * @param {Object} sortData - Sort column id and order as object
-     */
-    storeSortingColumn = (listName, sortData) => {
-        this.timelineUIAttributes[listName] = sortData;
-        this.storeUIAttributes();
-    }
-
-    /**
-     * Function to store the Last UI option atrributes as preference to consider while loading the page.
-     */
-    storeUIAttributes() {
-        UtilService.localStore({ type: 'set', key: 'TIMELINE_UI_ATTR', value: this.timelineUIAttributes });
-    }
-    
-    /**
-     * Get the sorting column from the previous session stored in the localstrage.
-     * @param {string} listName 
-     * @returns - array of soting data object stored in the localstorage. If nothing stored an empty object array 
-     * is returned
-     */
-    getSortingColumn = (listName) => {
-        const sortData = this.timelineUIAttributes[`${this.props.viewName}_${listName}`];
-        return sortData?[{...sortData}]:[this.defaultSortColumns[`${this.props.viewName}_${listName}`]];
-    }
-
-    /**
-     * Get Option-list values for Select Dropdown filter in SU 'Viewtable'
-     * @param {String} id : Column id
-     * @returns 
-     */
-     getSUFilterOptions(id) {
-        let options = null;
-        if(id && id === 'Status') {
-            options = this.props.suStatusList;
-        }
-        return options;
-    }
-
-    /**
-     * Get Option-list values for Select Dropdown filter in Task 'Viewtable'
-     * @param {String} id : Column id
-     * @returns 
-     */
-     getTaskFilterOptions(id) {
-        let options = null;
-        if(id && id === 'Status') {
-            options = this.props.taskStatusList;
-        }   else if(id && id === 'Task Type') {
-            options = this.props.taskTypeList;
-        }
-        return options;
-    }
-
-    render() {
-        const taskList = this.getTaskList();
-        return(
-            <React.Fragment>
-            <TabView activeIndex={this.state.listTabIndex} onTabChange={(e) => this.setChangedTab(e.index)}>
-                <TabPanel header="Scheduling Unit">
-                    <ViewTable
-                        viewInNewWindow
-                        data={this.props.suBlueprintList}
-                        defaultcolumns={TimelineConstants.SU_LIST_DEFAULT_COLUMNS}
-                        optionalcolumns={TimelineConstants.SU_LIST_OPTIONAL_COLUMNS}
-                        columnclassname={TimelineConstants.SU_LIST_COLUMN_CLASSES}
-                        columnOrders={TimelineConstants.SU_LIST_COLUMN_ORDER}
-                        defaultSortColumn={this.getSortingColumn("SUListSortColumn")}
-                        showaction="true"
-                        tablename={`${this.props.viewName}_scheduleunit_list`}
-                        showFilterOption={this.getSUFilterOptions} //Callback function to provide inputs for option-list in Select Dropdown filter
-                        showTopTotal={false}
-                        showGlobalFilter={true}
-                        showColumnFilter={true}
-                        filterCallback={this.suListFilterCallback}
-                        lsKeySortColumn={"SUListSortColumn"}
-                        toggleBySorting={(sortData) => this.storeSortingColumn(`${this.props.viewName}_SUListSortColumn`, sortData)}
-                        pageUpdated={this.pageUpdated}
-                        storeFilter={true}
-                    />
-                </TabPanel>
-                <TabPanel header="Tasks">
-                    <ViewTable
-                        viewInNewWindow
-                        data={taskList}
-                        defaultcolumns={TimelineConstants.TASK_LIST_DEFAULT_COLUMNS}
-                        optionalcolumns={TimelineConstants.TASK_LIST_OPTIONAL_COLUMNS}
-                        columnclassname={TimelineConstants.TASK_LIST_COLUMN_CLASSES}
-                        columnOrders={TimelineConstants.TASK_LIST_COLUMN_ORDER}
-                        defaultSortColumn={this.getSortingColumn("TaskListSortColumn")}
-                        showaction="true"
-                        showGlobalFilter={true}
-                        showColumnFilter={true}
-                        tablename={`${this.props.viewName}_task_list`}
-                        showFilterOption={this.getTaskFilterOptions} //Callback function to provide inputs for option-list in Select Dropdown filter
-                        showTopTotal={false}
-                        filterCallback={this.taskListFilterCallback}
-                        lsKeySortColumn={"TaskListSortColumn"}
-                        toggleBySorting={(sortData) => this.storeSortingColumn(`${this.props.viewName}_TaskListSortColumn`, sortData)}
-                        pageUpdated={this.pageUpdated}
-                        storeFilter={true}
-                    />
-                </TabPanel>
-                <TabPanel header="Reservations">
-                <ViewTable
-                        viewInNewWindow
-                        data={this.props.reservationList}
-                        defaultcolumns={TimelineConstants.RES_LIST_DEFAULT_COLUMNS}
-                        optionalcolumns={TimelineConstants.RES_LIST_OPTIONAL_COLUMNS}
-                        columnclassname={TimelineConstants.RES_LIST_COLUMN_CLASSES}
-                        columnOrders={TimelineConstants.RES_LIST_COLUMN_ORDER}
-                        defaultSortColumn={this.getSortingColumn("ResListSortColumn")}
-                        showaction="true"
-                        showGlobalFilter={true}
-                        showColumnFilter={true}
-                        tablename={`${this.props.viewName}_reservation_list`}
-                        showTopTotal={false}
-                        filterCallback={this.reservListFilterCallback}
-                        lsKeySortColumn={"ResListSortColumn"}
-                        toggleBySorting={(sortData) => this.storeSortingColumn(`${this.props.viewName}_ResListSortColumn`, sortData)}
-                        pageUpdated={this.pageUpdated}
-                        storeFilter={true}
-                    />
-                </TabPanel>
-            </TabView>
-            {this.state.showStatusLogs &&
-                <Dialog header={`Status change logs - ${this.state.task ? this.state.task.name : ""}`}
-                    visible={this.state.showStatusLogs} maximizable={false} maximized={false} position="left" style={{ width: '50vw' }}
-                    onHide={() => { this.setState({ showStatusLogs: false }) }}>
-                    <TaskStatusLogs taskId={this.state.task.id}></TaskStatusLogs>
-                </Dialog>
-            }
-                
-            </React.Fragment>
-        );
-    }
-}
-
-export default TimelineListTabs;
\ No newline at end of file
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/view.js
deleted file mode 100644
index 071601c9508..00000000000
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/view.js
+++ /dev/null
@@ -1,1986 +0,0 @@
-import React, { Component } from 'react';
-import { Redirect } from 'react-router-dom/cjs/react-router-dom.min';
-import moment from 'moment';
-import _ from 'lodash';
-import Websocket from 'react-websocket';
-import AppLoader from '../../layout/components/AppLoader';
-import PageHeader from '../../layout/components/PageHeader';
-import { CustomDialog } from '../../layout/components/CustomDialog';
-import Timeline from '../../components/Timeline';
-import ScheduleService from '../../services/schedule.service';
-import UtilService from '../../services/util.service';
-import UIConstants from '../../utils/ui.constants';
-import TaskService from '../../services/task.service';
-import ReservationService from '../../services/reservation.service';
-import UnitConverter from '../../utils/unit.converter';
-import Validator from '../../utils/validator';
-import SchedulingUnitSummary from '../Scheduling/summary';
-import ReservationSummary from '../Reservation/reservation.summary';
-import { TieredMenu } from 'primereact/tieredmenu';
-import TimelineListTabs from './list.tabs';
-import TimelineCommonUtils from './common.utils';
-import AuthStore from '../../authenticate/auth.store';
-import AuthUtil from '../../utils/auth.util';
-import DynamicScheduler from '../../components/DynamicScheduler';
-import TaskSummary from '../Task/summary';
-import UnitConversion from '../../utils/unit.converter';
-import { appGrowl } from '../../layout/components/AppGrowl';
-import TopProgressBar from '../../layout/components/TopProgressBar';
-import TimelineItemPopover from "./components/TimelineItemPopover";
-import Legendbar from "./components/Legendbar";
-
-// Color constant for SU status
-const SU_STATUS_COLORS = {
-    "ERROR": "FF0000", "CANCELLED": "#00FF00", "DEFINED": "#00BCD4", "UNSCHEDULABLE": "#9e0707",
-    "SCHEDULABLE": "#0000FF", "SCHEDULED": "#abc", "OBSERVING": "#bcd",
-    "OBSERVED": "#cde", "PROCESSING": "#cddc39", "PROCESSED": "#fed",
-    "INGESTING": "#edc", "FINISHED": "#47d53d"
-};
-
-// Color constant for Task status
-const TASK_STATUS_COLORS = {
-    "ERROR": "FF0000", "CANCELLED": "#00FF00", "DEFINED": "#00BCD4", "UNSCHEDULABLE": "#9e0707",
-    "SCHEDULABLE": "#0000FF", "SCHEDULED": "#abc", "QUEUED": "#00ffff", "STARTED": "#bcd",
-    "OBSERVED": "#cde", "FINISHED": "#47d53d"
-};
-
-const RESERVATION_COLORS = {
-    "true-true": { bgColor: "lightgrey", color: "#585859" }, "true-false": { bgColor: '#585859', color: "white" },
-    "false-true": { bgColor: "#9b9999", color: "white" }, "false-false": { bgColor: "black", color: "white" }
-};
-
-const OFFSET_DATA_DAYS = process.env.REACT_APP_TIMELINE_DATA_PRELOAD_PERIOD_DAYS;
-/**
- * Scheduling Unit timeline view component to view SU List and timeline
- */
-export class TimelineView extends Component {
-    timelineCommonUtils = new TimelineCommonUtils();
-
-    constructor(props) {
-        super(props);
-        this.timelineUIAttributes = UtilService.localStore({ type: 'get', key: "TIMELINE_UI_ATTR" }) || {};
-        this.state = {
-            isLoading: true,
-            suBlueprints: [],       // Scheduling Unit Blueprints
-            suDrafts: [],           // Scheduling Unit Drafts
-            suBlueprintList: [],    // SU Blueprints filtered to view
-            group: [],               // Timeline group from scheduling unit draft name
-            items: [],               // Timeline items from scheduling unit blueprints grouped by scheduling unit draft
-            isSUDetsVisible: false,
-            isTaskDetsVisible: false,
-            isUnscheduledDetVisible: false,
-            canExtendSUList: this.timelineUIAttributes.canExtendSUList===undefined?true:this.timelineUIAttributes.canExtendSUList,
-            canShrinkSUList: this.timelineUIAttributes.canShrinkSUList || false,
-            isSUListVisible: this.timelineUIAttributes.isSUListVisible===undefined?true:this.timelineUIAttributes.isSUListVisible,
-            isLegendVisible: this.timelineUIAttributes.isLegendVisible===undefined?true:this.timelineUIAttributes.isLegendVisible,
-            selectedItem: null,
-            mouseOverItem: null,
-            suTaskList: [],
-            taskTypeList: [],
-            isSummaryLoading: false,
-            stationView: this.timelineUIAttributes.stationView || false,
-            stationGroup: [],
-            missingStations: [],
-            selectedStationGroup: [], //Station Group(core,international,remote)
-            reservationFilter: [],
-            suToggle: this.timelineUIAttributes.suToggle !== undefined? this.timelineUIAttributes.suToggle: false,
-            taskToggle: this.timelineUIAttributes.taskToggle !== undefined ? this.timelineUIAttributes.taskToggle : false,
-            groupByProject: this.timelineUIAttributes.groupByProject || false,
-            taskTypes: [],
-            selectedTaskTypes: this.timelineUIAttributes["taskTypes"] || ['observation'],
-            isStationTasksVisible: this.timelineUIAttributes.isStationTasksVisible===undefined?true:this.timelineUIAttributes.isStationTasksVisible,
-            reservationsViewToggle: this.timelineUIAttributes.reservationsViewToggle !== undefined,     // Flag to show reservations in normal timeline view
-            userrole: AuthStore.getState(),
-            suStatusList: [],
-            taskStatusList: [],
-            unschedulableList: [],
-            unschedulableBlueprint: {},
-            datasetStartTime: null, datasetEndTime:null,
-            showDialog: false,
-            popPosition: {display: 'none'},
-            openEditConstraintDialog: false,
-            closeWindow:false,
-            cancelStatus:false,
-            onSavedisable:false,
-            result:false,
-            dsStatus: false, // To show the Dynamic Scheduling status in timeline/week view page header
-            subSystemStatus: false,
-            isOnSkyView: this.timelineUIAttributes.isOnSkyView===undefined?true:this.timelineUIAttributes.isOnSkyView,     // Flag to show on sky view in normal timeline view
-        }
-        this.STATUS_BEFORE_SCHEDULED = ['defining', 'defined', 'schedulable'];  // Statuses before scheduled to get station_group
-        this.allStationsGroup = [];
-        this.reservations = [];
-        this.optionsMenu = React.createRef();
-
-        this.getSchedulingUnits = this.getSchedulingUnits.bind(this);
-        this.loadSUsAheadAndTrail = this.loadSUsAheadAndTrail.bind(this);
-        this.showOptionMenu = this.showOptionMenu.bind(this);
-        this.selectOptionMenu = this.selectOptionMenu.bind(this);
-        this.onItemClick = this.onItemClick.bind(this);
-        this.onItemMouseOver = this.onItemMouseOver.bind(this);
-        this.onItemMouseOut = this.onItemMouseOut.bind(this);
-        this.showSUSummary = this.showSUSummary.bind(this);
-        this.showReservationSummary = this.showReservationSummary.bind(this);
-        this.showTaskSummary = this.showTaskSummary.bind(this);
-        this.closeSummaryPanel = this.closeSummaryPanel.bind(this);
-        this.cancelCheckstatus = this.cancelCheckstatus.bind(this);
-        this.dateRangeCallback = this.dateRangeCallback.bind(this);
-        this.resizeSUList = this.resizeSUList.bind(this);
-        this.suListFilterCallback = this.suListFilterCallback.bind(this);
-        this.addStationReservations = this.addStationReservations.bind(this);
-        this.onConnect = this.onConnect.bind(this);
-        this.handleData = this.handleData.bind(this);
-        this.addNewData = this.addNewData.bind(this);
-        this.updateExistingData = this.updateExistingData.bind(this);
-        this.deleteExistingData = this.deleteExistingData.bind(this);
-        this.updateSchedulingUnit = this.updateSchedulingUnit.bind(this);
-        this.setSelectedStationGroup = this.setSelectedStationGroup.bind(this);
-        this.getStationsByGroupName = this.getStationsByGroupName.bind(this);
-        this.setGroupByProject = this.setGroupByProject.bind(this);
-        this.changeViewBlocks = this.changeViewBlocks.bind(this);
-        this.setReservationsViewToggle = this.setReservationsViewToggle.bind(this);
-        this.showDymanicSchedulerPopup = this.showDymanicSchedulerPopup.bind(this);
-        this.onSaveChanges = this.onSaveChanges.bind(this);
-        this.editConstraint = this.editConstraint.bind(this);
-        this.onclosepopup =this.onclosepopup.bind(this);
-        this.newPopupvalue = this.newPopupvalue.bind(this);
-        this.getDSStatus = this.getDSStatus.bind(this);
-        this.updateDSStatus = this.updateDSStatus.bind(this);
-        this.close = this.close.bind(this);
-        this.setStationView = this.setStationView.bind(this);
-        this.setSelectedTaskTypes = this.setSelectedTaskTypes.bind(this);
-        this.setReservationFilter = this.setReservationFilter.bind(this);
-        this.setOnSkyView = this.setOnSkyView.bind(this);
-        this.setToggle = this.setToggle.bind(this);
-    }
-
-    /* Cancel on Scheduling Constraint Popup onEdit */
-    cancelCheckstatus(status){
-        this.setState({
-            cancelStatus:status
-        });
-    }
-
-    /* Getting updated value from the ScheduleConstraints Popup onEdit*/
-    newPopupvalue(jsonOutput){
-        this.setState({
-        suBlueprint: {
-            scheduling_constraints_doc: jsonOutput
-        }
-        });
-    }
-
-    /*
-    *   Onsavechanges for scheduling Constraints
-    *   @id : Schedule  Id, @val : update state from child components
-    */
-    async onSaveChanges(id,val){
-        const constStrategy = _.cloneDeep(val);
-        if (constStrategy.hasOwnProperty('time')) {
-            if (constStrategy.time.hasOwnProperty('at') && !constStrategy.time.at) {
-                delete constStrategy.time.at;
-            }
-            if (constStrategy.time.hasOwnProperty('before') && !constStrategy.time.after) {
-                delete constStrategy.time.after;
-            }
-            if (constStrategy.time.hasOwnProperty('before') && !constStrategy.time.before) {
-                delete constStrategy.time.before;
-            }
-            for (const type in constStrategy.time) {
-                if (constStrategy.time[type] && constStrategy.time[type].length) {
-                    if (typeof constStrategy.time[type] === 'string') {
-                        constStrategy.time[type] = `${moment(constStrategy.time[type]).format("YYYY-MM-DDTHH:mm:ss.SSSSS", { trim: false })}Z`;
-                    } else {
-                        constStrategy.time[type].forEach(time => {
-                            for (let key in time) {
-                                time[key] = `${moment(time[key] ).format("YYYY-MM-DDTHH:mm:ss.SSSSS", { trim: false })}Z`;
-                            }
-                        })
-                    }
-                }
-            }
-        }
-        if (constStrategy.hasOwnProperty('sky')) {
-            if (constStrategy.sky.transit_offset) {
-                constStrategy.sky.transit_offset.from = UnitConversion.getHHmmssToSecs(constStrategy.sky.transit_offset.from);
-                constStrategy.sky.transit_offset.to = UnitConversion.getHHmmssToSecs(constStrategy.sky.transit_offset.to);
-            }
-            UnitConversion.degreeToRadians(constStrategy.sky);
-        }
-
-       // getConstraintsEditorOutputService - service call  is done for getting updated blueprint id
-       const bluePrintValue = await ScheduleService.getConstraintsEditorOutputService(id);
-       // setConstraintsEditorOutputService - service call  is done for upddating the  blueprint object
-       bluePrintValue.scheduling_constraints_doc = constStrategy;
-       const updatedResponse = await ScheduleService.setConstraintsEditorOutputService(bluePrintValue);
-
-        /*
-        *  updating  suBlueprints value with current object
-        *  Currently setConstraintsEditorOutputService with not updating current values
-        */
-        if(updatedResponse.hasOwnProperty('data')){
-            const updateStateVal = await Object.assign([],this.state.suBlueprints);
-            updateStateVal.map((updateConstraints) => {
-                if(updateConstraints.id===id){
-                  updateConstraints.scheduling_constraints_doc = updatedResponse.data.scheduling_constraints_doc;
-                }
-                return updateConstraints;
-            });
-            this.setState({
-                suBlueprints: updateStateVal,
-                openEditConstraintDialog: false,
-                result: false,
-                onSavedisable:true
-            });
-            this.updateSchedulingUnit(this.state.stationView?this.state.selectedItem.suId:this.state.selectedItem.id)
-        } else{
-            appGrowl.show({ severity: 'error', summary: 'Error', detail: updatedResponse.message });
-        }
-    }
-
-    /*
-    *  to toggle the popup open and close
-    */
-    editConstraint(val) {
-        if (val === false) {
-            this.setState({
-                openEditConstraintDialog: val,
-               cancelStatus:false,
-               onSavedisable:true
-            });
-        } else {
-            this.setState({
-                openEditConstraintDialog: val,
-                cancelStatus:false,
-                onSavedisable:false
-            });
-        }
-    }
-
-    /* To close Pop-up */
-    onclosepopup() {
-        this.close = this.close.bind(this);
-        this.getDSStatus = this.getDSStatus.bind(this);
-        this.updateDSStatus = this.updateDSStatus.bind(this);
-    }
-
-    /**
-     * Get Dynamic Scheduling status
-     */
-    async getDSStatus() {
-        await UtilService.getDynamicSchedulerStatus()
-        .then(response => {
-            var status = false;
-            if(response) {
-                status = response.value;
-            }
-            this.setState({dsStatus: status});
-        });
-        await UtilService.getFixedTimeSchedulerStatus()
-        .then(response => {
-            var status = false;
-            if(response) {
-                status = response.value;
-            }
-            this.setState({fsStatus: status});
-        });
-        this.state.dsStatus && await UtilService.getSubSystemScheduler()
-        .then(response => {
-            var status = false;
-            if(response) {
-                status = response.status_value === 'active'? true: false;
-            }
-            this.setState({subSystemStatus: status});
-        })
-
-    }
-
-    /**
-     * Set current status when the Dynamic Scheduling On/Off
-     *
-     * @param {boolean} status
-     */
-    async updateDSStatus(status, scheduleType) {
-        if(scheduleType === 'dynamic') {
-            this.state.status && await UtilService.getSubSystemScheduler()
-            .then(response => {
-                var status = false;
-                if(response) {
-                    status = response.status_value === 'active'? true: false;
-                }
-                this.setState({subSystemStatus: status});
-            })
-            this.setState({dsStatus: status});
-        }
-        if(scheduleType === 'fixed') {
-
-            this.setState({fsStatus: status});
-        }
-    }
-
-    async componentDidMount() {
-        this.getDSStatus();
-        this.getStatusList();
-        this.getTaskTypeList();
-        const permission = await AuthUtil.getUserRolePermission();
-        const timelinePermission = permission.userRolePermission.timeline;
-
-        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') } },
-            { label: 'Add System Event', icon: "fa fa-", disabled: !timelinePermission.addsystemevent,
-            command: (e) => { this.selectOptionMenu(e, 'Add System Event') } },
-            { label: 'System Issues', icon: "fa fa-", disabled: !timelinePermission.listsystemevent,
-            command: (e) => { this.selectOptionMenu(e, 'System Issues') } },
-        ]
-        this.setState({menuOptions: menuOptions, loader: true });
-        TaskService.getTaskTypes().then(results => {this.setState({taskTypes : results})});
-
-        // Get all scheduling constraint templates
-        ScheduleService.getSchedulingConstraintTemplates()
-            .then(suConstraintTemplates => {
-                this.suConstraintTemplates = suConstraintTemplates;
-        });
-        const currentUTC = moment.utc(await UtilService.getUTC());
-        // Default start time, this should be updated if default view is changed. Take from localstorage if available
-        let defaultStartTime = this.timelineUIAttributes.dateRange?moment.utc(this.timelineUIAttributes.dateRange.startTime):null;
-        // Default end time, this should be updated if default view is changed. Take from localstorage if available
-        let defaultEndTime = this.timelineUIAttributes.dateRange?moment.utc(this.timelineUIAttributes.dateRange.endTime):null;
-
-        // Set default time if previous selected date range and zoom level available.
-        if (this.timelineUIAttributes.zoomLevel) {
-            const defaultZoomLevel = _.find(this.timelineCommonUtils.ZOOM_LEVELS, {name: this.timelineUIAttributes.zoomLevel});
-            const rangeDuration = defaultStartTime?defaultEndTime.diff(defaultStartTime)/1000-defaultZoomLevel.value:0;
-            defaultStartTime = defaultStartTime?defaultStartTime.add(1 * rangeDuration/2, 'seconds'):null;
-            defaultStartTime = defaultStartTime?defaultStartTime:currentUTC.clone().add(-1 * defaultZoomLevel.value/2, 'seconds');
-            defaultEndTime = defaultEndTime?defaultEndTime.add(-1 * rangeDuration/2, 'seconds'):null;
-            defaultEndTime = defaultEndTime?defaultEndTime:currentUTC.clone().add(1 * defaultZoomLevel.value/2, 'seconds');
-        }   else {
-            defaultStartTime = defaultStartTime?defaultStartTime:currentUTC.clone().add(-24, 'hours');      // Default start time, this should be updated if default view is changed.
-            defaultEndTime = defaultEndTime?defaultEndTime:currentUTC.clone().add(24, 'hours');         // Default end time, this should be updated if default view is changed.
-        }
-
-        // Fetch all details from server and prepare data to pass to timeline and table components
-        const promises = [ScheduleService.getStations('All')];
-        Promise.all(promises).then(async (responses) => {
-            this.mainStationGroupOptions = Object.keys(this.timelineCommonUtils.getMainStationGroups()).map(value => ({ value }));
-            for (const station of responses[0]['stations']) {
-                this.allStationsGroup.push({ id: station, title: station });
-            }
-            // Set the selectedStationGroup if the previous selected station groups are stored
-            const selectedStationGroup = this.timelineUIAttributes.stationGroups || _.keys(this.timelineCommonUtils.getMainStationGroups());
-            this.setState({
-                loader: false,
-                currentUTC: currentUTC, isLoading: false,
-                currentStartTime: defaultStartTime, currentEndTime: defaultEndTime,
-                selectedStationGroup: selectedStationGroup,
-                isFetchingData: true
-            });
-            // const schedulingUnits = await this.getSchedulingUnits(defaultStartTime, defaultEndTime);
-            this.setState({
-                // suBlueprints: schedulingUnits.original, suBlueprintList: schedulingUnits.formatted,
-                // datasetStartTime: schedulingUnits.datasetStartTime, datasetEndTime: schedulingUnits.datasetEndTime,
-                isFetchingData: false
-            });
-            this.getUnschedulableUnits().then(unschedulableList => this.setState({unschedulableList: unschedulableList}));
-            await this.dateRangeCallback(defaultStartTime, defaultEndTime, true);
-            this.updateTimeline();
-        });
-    }
-
-    /**
-     * Function to get only the data for the visible timeline first and the offset data in the background.
-     * @param {moment} startTime - start time of the visible timeline
-     * @param {moment} endTime  - end time of the visible timeline
-     * @returns Object with original SUBs, formatted SUBs, dataset start and end time properties.
-     */
-    async getSchedulingUnits(startTime, endTime) {
-        let {datasetStartTime, datasetEndTime, suBlueprints, suBlueprintList} = this.state;
-        let schedulingUnits = {original: suBlueprints};
-        let offSetSeconds = OFFSET_DATA_DAYS * 24 * 60 * 60;
-        // Initial loading of data. Fetches only the data for the visible timeline.
-        if (!datasetStartTime) {
-            schedulingUnits = await this.loadSchedulingUnits(startTime, endTime);
-            datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-            datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-            schedulingUnits.datasetStartTime = datasetStartTime;
-            schedulingUnits.datasetEndTime = datasetEndTime;
-            // Loads the offset data in the background
-            this.loadSUsAheadAndTrail(datasetStartTime, datasetEndTime, startTime, endTime);
-        }   else if (startTime.isSameOrBefore(datasetStartTime) && endTime.isSameOrAfter(datasetEndTime)) {
-            /* Enters this loop when timeline range or zoom level changes and the new start time is before datasetStartTime and new end time is after dataset end time
-                        DST---OST--------------OET---DET
-                    NST-----------------------------------NET
-            */
-            // If the new timeline start time is before the existing dataset start time(DST), 
-            // load only the SUBS between the new start time(NST) and old dataset start time
-            if (startTime.diff(datasetStartTime, 'seconds')!==0) {
-                const frontFillSUs = await this.loadSchedulingUnits(startTime, datasetStartTime);
-                suBlueprints = suBlueprints.concat(frontFillSUs.original);
-                suBlueprintList = suBlueprintList.concat(frontFillSUs.formatted);
-                datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-                schedulingUnits.datasetStartTime = datasetStartTime;
-                schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-                schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-                // Loads the offset data before the new start time in the background
-                this.loadSUsAheadAndTrail(datasetStartTime, null, startTime, null);
-            }
-            // If the new timeline end time is after the existing dataset end time(DET), 
-            // load only the SUBS between the new end time(NET) and old dataset end time
-            if (endTime.diff(datasetEndTime, 'seconds')!==0) {
-                const trailFillSUs = await this.loadSchedulingUnits(datasetEndTime, endTime);
-                suBlueprints = suBlueprints.concat(trailFillSUs.original);
-                suBlueprintList = suBlueprintList.concat(trailFillSUs.formatted);
-                datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-                schedulingUnits.datasetEndTime = datasetEndTime;
-                schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-                schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-                // Loads the offset data after the new end time in the background
-                this.loadSUsAheadAndTrail(null, datasetEndTime, null, endTime);
-            }
-        }   else if (startTime.isSameOrBefore(datasetStartTime) && endTime.isSameOrBefore(datasetStartTime)) {
-            /* Enters this loop when both new start time and new end time are before dataset start time
-                                    DST---OST--------------OET---DET
-                NST------------NET
-            */
-            // Load all SUBS between the new start time and new end time
-            const frontFillSUs = await this.loadSchedulingUnits(startTime, endTime);
-            suBlueprints = suBlueprints.concat(frontFillSUs.original);
-            suBlueprintList = suBlueprintList.concat(frontFillSUs.formatted);
-            datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-            schedulingUnits.datasetStartTime = datasetStartTime;
-            schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-            schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-            // If the time difference between the new end time and old dataset start time is less than or equal to the buffer data offset time,
-            // load only the SUBS between the new end time and old dataset start time
-            // else load the buffer data as per the offset time
-            if (this.state.datasetStartTime.diff(endTime, 'seconds')!==0 &&
-                    this.state.datasetStartTime.diff(endTime, 'seconds')<=offSetSeconds) {
-                const trailFillSUs = await this.loadSchedulingUnits(endTime, this.state.datasetStartTime);
-                suBlueprints = suBlueprints.concat(trailFillSUs.original);
-                suBlueprintList = suBlueprintList.concat(trailFillSUs.formatted);
-                endTime = datasetEndTime;
-                schedulingUnits.datasetEndTime = datasetEndTime;
-                schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-                schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-            }   else {
-                datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-            }
-            this.loadSUsAheadAndTrail(datasetStartTime, datasetEndTime, startTime, endTime);
-        }   else if (startTime.isSameOrAfter(datasetEndTime) && endTime.isSameOrAfter(datasetEndTime)) {
-            /* Enters this loop when both new start time and new end time are after dataset end time
-                        DST---OST--------------OET---DET
-                                                            NST------------NET
-            */
-            // Load all SUBS between the new start time and new end time
-            const frontFillSUs = await this.loadSchedulingUnits(startTime, endTime);
-            suBlueprints = suBlueprints.concat(frontFillSUs.original);
-            suBlueprintList = suBlueprintList.concat(frontFillSUs.formatted);
-            schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-            schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-            // If the time difference between the new start time and old dataset end time is less than or equal to the buffer data offset time,
-            // load only the SUBS between the new start time and old dataset end time
-            // else load the buffer data as per the offset time
-            if (startTime.diff(this.state.datasetEndTime, 'seconds')!==0 &&
-                startTime.diff(this.state.datasetEndTime, 'seconds')<=offSetSeconds) {
-                const trailFillSUs = await this.loadSchedulingUnits(this.state.datasetEndTime, startTime);
-                suBlueprints = suBlueprints.concat(trailFillSUs.original);
-                suBlueprintList = suBlueprintList.concat(trailFillSUs.formatted);
-                startTime = this.state.datasetStartTime;
-                schedulingUnits.datasetEndTime = datasetEndTime;
-                schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-                schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-            }   else {
-                datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-            }
-            datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-            this.loadSUsAheadAndTrail(datasetStartTime, datasetEndTime, startTime, endTime);
-        }   else {
-            /* Enters this loop when either new start time or new end time overlaps to the current dataset time range
-                            DST---OST--------------OET---DET
-                NST------------NET         (OR)       NST------------NET
-            */
-            // If the new timeline start time is before the existing dataset start time, 
-            // load only the SUBS between the new start time and old dataset start time
-            if (startTime.diff(datasetStartTime, 'seconds')!==0 && startTime.isSameOrBefore(datasetStartTime)) {
-                const frontFillSUs = await this.loadSchedulingUnits(startTime, datasetStartTime);
-                suBlueprints = suBlueprints.concat(frontFillSUs.original);
-                suBlueprintList = suBlueprintList.concat(frontFillSUs.formatted);
-                datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-                schedulingUnits.datasetStartTime = datasetStartTime;
-                schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-                schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-                // Loads the offset data before the new start time in the background
-                this.loadSUsAheadAndTrail(datasetStartTime, null, startTime, null);
-            }
-            // If the new timeline end time is after the existing dataset end time, 
-            // load only the SUBS between the new end time and old dataset end time
-            if (endTime.diff(datasetEndTime, 'seconds')!==0 && endTime.isSameOrAfter(datasetEndTime)) {
-                const trailFillSUs = await this.loadSchedulingUnits(datasetEndTime, endTime);
-                suBlueprints = suBlueprints.concat(trailFillSUs.original);
-                suBlueprintList = suBlueprintList.concat(trailFillSUs.formatted);
-                datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-                schedulingUnits.datasetEndTime = datasetEndTime;
-                schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-                schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-                // Loads the offset data after the new end time in the background
-                this.loadSUsAheadAndTrail(null, datasetEndTime, null, endTime);
-            }
-        }
-        // Add dummy variables start_time and stop_time to minimize code changes and switch between different flavours
-        _.map(schedulingUnits.original, su => {
-            su.start_time = this.state.stationView || this.state.isOnSkyView?su.on_sky_start_time:(su.process_start_time || su.on_sky_start_time);
-            su.stop_time = this.state.stationView || this.state.isOnSkyView?su.on_sky_stop_time:(su.process_stop_time || su.on_sky_stop_time);
-            _.map(su.task_blueprints, taskBp => {
-                taskBp.start_time = this.state.stationView || this.state.isOnSkyView?taskBp.on_sky_start_time:(taskBp.process_start_time || taskBp.on_sky_start_time);
-                taskBp.stop_time = this.state.stationView || this.state.isOnSkyView?taskBp.on_sky_stop_time:(taskBp.process_stop_time || taskBp.on_sky_stop_time);
-                return taskBp;
-            });
-            return su;
-        });
-        // Returning the data for the timeline only or the existing data.
-        return schedulingUnits;
-    }
-
-    /**
-     * Function to load the data before and after the timeline with an offset period in the background.
-     * This improves the performance in rendering the timeline.
-     * @param {moment} datasetStartTime - start time of the dataset to be loaded
-     * @param {moment} datasetEndTime - end time of the dataset to be loaded
-     * @param {moment} startTime - start time visible in the timeline
-     * @param {moment} endTime - end time visible in the timeline
-     */
-    async loadSUsAheadAndTrail(datasetStartTime, datasetEndTime, startTime, endTime) {
-        let suBlueprints = null;
-        let suBlueprintList = null;
-        // Load the SUBs from the dataset start time to timeline start time and concat to existing SUBs
-        if (datasetStartTime && startTime.diff(datasetStartTime, 'seconds')>0) {
-            const susAhead = await this.loadSchedulingUnits(datasetStartTime, startTime);
-            suBlueprints = this.state.suBlueprints.concat(susAhead.original);
-            suBlueprintList = this.state.suBlueprintList.concat(susAhead.formatted);
-        }
-        // Load the SUBs from the timeline end time to dataset end time and concat to existing SUBs
-        if (datasetEndTime && datasetEndTime.diff(endTime, 'seconds')>0) {
-            const susTrail = await this.loadSchedulingUnits(endTime, datasetEndTime);
-            suBlueprints = suBlueprints || this.state.suBlueprints;
-            suBlueprintList = suBlueprintList || this.state.suBlueprintList;
-            suBlueprints = suBlueprints.concat(susTrail.original);
-            suBlueprintList = suBlueprintList.concat(susTrail.formatted);
-        }
-        this.setState({suBlueprints: _.uniqBy(suBlueprints, 'id'),
-                        suBlueprintList: _.uniqBy(suBlueprintList, 'id'),
-                        datasetStartTime: datasetStartTime,
-                        datasetEndTime: datasetEndTime
-                    });
-    }
-
-    /**
-     * Fetches the SUBs with either start time or end time in the time range and formats as required for the table.
-     * @param {moment} startTime - start time from which SUBs should be loaded
-     * @param {moment} endTime - end time till which SUBs should be loaded
-     * @returns - Object with both original SUBs from backend and formatted SUBs for table list.
-     */
-    async loadSchedulingUnits(startTime, endTime) {
-        let reservations = await ReservationService.getTimelineReservations(startTime.format(UIConstants.CALENDAR_DATETIME_FORMAT),
-                                            endTime.format(UIConstants.CALENDAR_DATETIME_FORMAT));
-        this.reservations = _.uniqBy(this.reservations.concat(reservations), 'id');
-        let suBlueprints = await ScheduleService.getExpandedSUList(startTime.format(UIConstants.CALENDAR_DATETIME_FORMAT),
-                                                                    endTime.format(UIConstants.CALENDAR_DATETIME_FORMAT));
-        suBlueprints = _.filter(suBlueprints, suBlueprint => suBlueprint.status.toLowerCase !== 'obsolete', suBlueprint => suBlueprint.scheduling_constraints_doc);
-        let suList = [];
-        const suIds = _.map(suBlueprints, 'id');
-        let workflows = await this.timelineCommonUtils.getWorkflowsAndTasks(suIds);
-        for (let suBlueprint of suBlueprints){
-            suBlueprint['actionpath'] = `/schedulingunit/view/blueprint/${suBlueprint.id}`;
-            suBlueprint.suDraft = suBlueprint.draft;
-            suBlueprint.project = suBlueprint.draft.scheduling_set.project.name;
-            suBlueprint.project_rank = suBlueprint.draft.scheduling_set.project.rank;
-            suBlueprint.suSet = suBlueprint.draft.scheduling_set;
-            suBlueprint.durationInSec = suBlueprint.duration;
-            suBlueprint.duration = UnitConverter.getSecsToHHmmss(suBlueprint.duration);
-            const workflowDetails = this.timelineCommonUtils.getWorkflowDetails(workflows, suBlueprint.id);
-            suBlueprint.workflowStatus = workflowDetails.status;
-            suBlueprint.task_content = "";
-            suBlueprint.observ_template_name = suBlueprint.draft.observation_strategy_template?suBlueprint.draft.observation_strategy_template.name:null;
-            suBlueprint.tasks = suBlueprint.task_blueprints;
-            const itemStations = this.timelineCommonUtils.getSUStations(suBlueprint);
-            suBlueprint.stationGroupCount = this.timelineCommonUtils.getSUStationGroupCount(itemStations).counts;
-            for (let task of suBlueprint.tasks) {
-                const controlTask = _.find(task.subtasks, subtask => { return subtask.primary});
-                task.controlId = controlTask?controlTask.id:"";
-                if (task.task_type === "observation") {
-                    task.antenna_set = task.specifications_doc.station_configuration?.antenna_set;
-                    task.band = task.specifications_doc.station_configuration?.filter;
-                }
-            }
-        }
-        return {original: suBlueprints, formatted: suList};
-    }
-
-    /**
-     * Formatting data for the table
-     * @returns list of formatted unschedulable SU for table
-     */
-    async getUnschedulableUnits () {
-        let unschedulableBlueprints =  await ScheduleService.getSchedulingListByStatus('unschedulable');
-        const suIds = _.map(unschedulableBlueprints, 'id');
-        let workflows = await this.timelineCommonUtils.getWorkflowsAndTasks(suIds);
-        for (let unschedulableBlueprint of unschedulableBlueprints){
-            this.timelineCommonUtils.formatUnschedulableSUB(unschedulableBlueprint, workflows);
-        }
-        return unschedulableBlueprints;
-    }
-
-    setSelectedStationGroup(value) {
-        // By default all stations groups are selected.
-        // In that case no need to store the selected group otherwise store the selected groups in local storage
-        if (value.length === this.mainStationGroupOptions.length) {
-            delete this.timelineUIAttributes["stationGroups"];
-        }   else {
-            this.timelineUIAttributes["stationGroups"] = value;
-        }
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        this.setState({ selectedStationGroup: value });
-    }
-
-    /**
-     * Function to get/prepare Item object to be passed to Timeline component
-     * @param {Object} suBlueprint
-     */
-    getTimelineItem(suBlueprint) {
-        let antennaSet = "";
-        for (let task of suBlueprint.tasks) {
-            if (task.task_type.toLowerCase() === "observation"
-                && task.specifications_doc.station_configuration?.antenna_set) {
-                antennaSet = task.specifications_doc.station_configuration.antenna_set;
-            }
-        }
-        let item = {
-            id: suBlueprint.id,
-            group: this.state.groupByProject ? suBlueprint.project : suBlueprint.id,
-            //title: `${suBlueprint.project} - ${suBlueprint.suDraft.name} - ${(suBlueprint.durationInSec/3600).toFixed(2)}Hrs`,
-            title: "",
-            project: suBlueprint.project, type: 'SCHEDULE',
-            name: suBlueprint.name,
-            band: antennaSet ? antennaSet.split("_")[0] : "",
-            antennaSet: antennaSet,
-            scheduleMethod: suBlueprint.scheduling_constraints_doc.scheduler,
-            duration: suBlueprint.durationInSec ? `${(suBlueprint.durationInSec / 3600).toFixed(2)}Hrs` : "",
-            on_sky_duration : `${(suBlueprint.on_sky_duration / 3600).toFixed(2)}Hrs`,
-            start_time: moment.utc(suBlueprint.start_time),
-            end_time: moment.utc(suBlueprint.stop_time),
-            bgColor: suBlueprint.status ? SU_STATUS_COLORS[suBlueprint.status.toUpperCase()] : "#2196f3",
-            // selectedBgColor: suBlueprint.status? SU_STATUS_COLORS[suBlueprint.status.toUpperCase()]:"#2196f3"}; 
-            selectedBgColor: "none",
-            status: suBlueprint.status.toLowerCase(),
-            placed: suBlueprint.placed,
-            unschedulable_reason: suBlueprint.unschedulable_reason,
-        };
-        return item;
-    }
-
-    /**
-     * Get Timeline items for obsercation tasks of the SU Bluprint. Task Items are grouped to the SU draft and Task draft IDs
-     * @param {Object} suBlueprint
-     */
-    getTaskItems(suBlueprint, startTime, endTime, taskFilterData) {
-        let taskItems = {};
-        //If tasks are filtered in the table, consider 'Task Id' else 'id'
-        let filteredTasks = taskFilterData?_.map(taskFilterData, task => {return task["id"]?task["id"]:task["Task Id"]}):[];
-        if (suBlueprint.tasks) {
-            let items = [], itemGroup = [];
-            for (let task of suBlueprint.tasks) {
-                if (((!this.state.stationView && this.state.selectedTaskTypes.indexOf(task.task_type)>=0)
-                        || (this.state.stationView && task.task_type === 'observation'))
-                    && ( filteredTasks.length===0 || filteredTasks.indexOf(task.id)>=0 )
-                    && task.start_time && task.stop_time && task.obsolete_since === null) {
-                    const antennaSet = task.specifications_doc.station_configuration?.antenna_set;
-                    const start_time = moment.utc(task.start_time);
-                    const end_time = moment.utc(task.stop_time);
-                    if ((start_time.isBetween(startTime, endTime) ||
-                        end_time.isBetween(startTime, endTime))
-                        || (start_time.isSameOrBefore(startTime) && end_time.isSameOrAfter(endTime))) {
-                        const controlTask = _.find(task.subtasks, subtask => { return subtask.primary });
-                        const controlId = controlTask?controlTask.id:"";
-                        let item = {
-                            id: `${suBlueprint.id}_${task.id}`,
-                            suId: suBlueprint.id,
-                            taskId: task.id,
-                            controlId: controlId,
-                            group: `${this.state.groupByProject ? suBlueprint.project : suBlueprint.id}_${this.state.groupByProject ? task.task_type : task.draft_id}`,
-                            // group: `${suBlueprint.suDraft.id}_Tasks`,    // For single row task grouping
-                            title: '',
-                            project: suBlueprint.project, type: 'TASK',
-                            name: task.name,
-                            typeValue: task.task_type,
-                            band: antennaSet ? antennaSet.split("_")[0] : "",
-                            antennaSet: antennaSet ? antennaSet : "",
-                            scheduleMethod: suBlueprint.suDraft.scheduling_constraints_doc.scheduler,
-                            duration: `${(end_time.diff(start_time, 'seconds') / 3600).toFixed(2)}Hrs`,
-                            start_time: start_time,
-                            end_time: end_time,
-                            bgColor: task.status ? TASK_STATUS_COLORS[task.status.toUpperCase()] : "#2196f3",
-                            selectedBgColor: "none",
-                            status: task.status.toLowerCase(),
-                            unschedulable_reason: task.unschedulable_reason
-                        };
-                        items.push(item);
-                        if (!_.find(itemGroup, ['id', `${suBlueprint.suDraft.id}_${task.draft_id}`])) {
-                            itemGroup.push({
-                                'id': `${this.state.groupByProject ? suBlueprint.project : suBlueprint.id}_${this.state.groupByProject ? task.task_type : task.draft_id}`,
-                                parent: this.state.groupByProject ? suBlueprint.project : suBlueprint.id,
-                                start: start_time,
-                                title: `${!this.state.suToggle ? (this.state.groupByProject ? suBlueprint.project : suBlueprint.name) : ""} -- ${this.state.groupByProject ? task.task_type : task.name}`
-                            });
-                        }
-                        /* >>>>>> If all tasks should be shown in single row remove the above 2 lines and uncomment these lines
-                        if (!_.find(itemGroup, ['id', `${suBlueprint.suDraft.id}_Tasks`])) {
-                            itemGroup.push({'id': `${suBlueprint.suDraft.id}_Tasks`, parent: suBlueprint.suDraft.id, 
-                                            start_time: start_time, title: `${!this.state.showSUs?suBlueprint.suDraft.name:""} -- Tasks`});
-                        }
-                        <<<<<<*/
-                    }
-                }
-            }
-            taskItems['items'] = items;
-            taskItems['group'] = itemGroup
-        }
-        return taskItems;
-    }
-
-    /**
-     * Callback function to pass to Timeline component for item click.
-     * @param {Object} item
-     */
-    onItemClick(item) {
-        if (item.type === "UNSCHEDULABLE") {
-            this.showSUSummary(item, this.state.unschedulableList, false);
-        } else if (item.type === "RESERVATION") {
-            this.showReservationSummary(item);
-        } else if (item.type === "SCHEDULE") {
-            this.showSUSummary(item, this.state.suBlueprintList, true);
-        } else {
-            this.showTaskSummary(item);
-        }
-    }
-
-    /**
-     * To load SU summary and show
-     * @param {Object} item -  SU item object.
-     * @param {Array} blueprintList - List of blueprints based on the item type clicked
-     * @param {Boolean} isSchedulable - To check if selected item is unschedulable or not
-     */
-    async showSUSummary(item, blueprintList, isSchedulable) {
-        if (this.state.isSUDetsVisible && item.id === this.state.selectedItem.id) {
-            this.closeSummaryPanel();
-        } else {
-            const fetchDetails = !this.state.selectedItem || item.id !== this.state.selectedItem.id
-            this.setState({
-                isSchedulable: isSchedulable,
-                selectedItem: item, isSUDetsVisible: true, isTaskDetsVisible: false, isReservDetsVisible: false,
-                isSummaryLoading: fetchDetails,
-                suTaskList: !fetchDetails ? this.state.suTaskList : [],
-                canExtendSUList: false, canShrinkSUList: false
-            });
-            if (fetchDetails) {
-                const suBlueprint = _.find(blueprintList, { id: (this.state.stationView ? parseInt(item.id.split('-')[0]) : item.id) });
-                const suConstraintTemplate = _.find(this.suConstraintTemplates, { id: suBlueprint.scheduling_constraints_template_id });
-                let primarySubtasks = [];
-                for(const task of suBlueprint.task_blueprints){
-                    const subTaskList = (task.subtasks || []).filter(sTask => (sTask.primary && sTask.subtask_type === 'observation'));
-                    primarySubtasks = [...primarySubtasks, ...subTaskList];
-                }
-                let missingStations = [];
-                for(const sTask of primarySubtasks) {
-                    const mStation = await TaskService.getSubtaskMissingStations(sTask.id);
-                    missingStations = [...missingStations, ...mStation];
-                }
-                // remove duplicates, for example when we have multiple subtask observations in one unit
-                missingStations = [...new Set(missingStations)];
-                missingStations.sort();
-                /* If tasks are not loaded on component mounting fetch from API */
-                if (suBlueprint.tasks) {
-                    this.setState({
-                        suTaskList: _.sortBy(suBlueprint.tasks, "id"), suConstraintTemplate: suConstraintTemplate,
-                        stationGroup: this.timelineCommonUtils.getSUStations(suBlueprint), isSummaryLoading: false, missingStations: missingStations
-                    });
-                } else {
-                    ScheduleService.getTaskBPWithSubtaskTemplateOfSU(suBlueprint)
-                        .then(taskList => {
-                            for (let task of taskList) {
-                                //Control Task Id
-                                // const subTaskIds = (task.subTasks || []).filter(sTask => sTask.subTaskTemplate.name.indexOf('control') > 1);
-                                const subTaskIds = task.subtasks.filter(subtask => {
-                                    const template = _.find(this.subtaskTemplates, ['id', subtask.specifications_template_id]);
-                                    return (template && template.name.indexOf('control')) > 0;
-                                });
-                                task.subTaskID = subTaskIds.length ? subTaskIds[0].id : '';
-                                if (task.task_type.toLowerCase() === "observation") {
-                                    task.antenna_set = task.specifications_doc.station_configuration?.antenna_set;
-                                    task.band = task.specifications_doc.station_configuration?.filter;
-                                }
-                            }
-                            this.setState({
-                                suTaskList: _.sortBy(taskList, "id"), isSummaryLoading: false,
-                                stationGroup: this.timelineCommonUtils.getSUStations(suBlueprint),
-                                missingStations: missingStations
-                            });
-                        });
-                }
-                // Get the scheduling constraint template of the selected SU block
-                // ScheduleService.getSchedulingConstraintTemplate(suBlueprint.suDraft.scheduling_constraints_template_id)
-                //     .then(suConstraintTemplate => {
-                //         this.setState({suConstraintTemplate: suConstraintTemplate, isSummaryLoading: false});
-                //     });
-            }
-        }
-    }
-
-    /**
-     * To load and show Reservation summary
-     * @param {Object} item
-     */
-    showReservationSummary(item) {
-        this.setState({ selectedItem: item, isReservDetsVisible: true, isSUDetsVisible: false, isTaskDetsVisible: false });
-    }
-
-    /**
-     * To load task summary and show
-     * @param {Object} item - Timeline task item object
-     */
-    async showTaskSummary(item) {
-        if (this.state.isTaskDetsVisible && item.id === this.state.selectedItem.id) {
-            this.closeSummaryPanel();
-        }
-        else {
-            const taskDetails = await TaskService.getTaskDetails('blueprint', item.taskId, true);
-            this.setState({ selectedItem: item, isTaskDetsVisible: true, isSUDetsVisible: false, isReservDetsVisible: false, taskDetails: taskDetails });
-
-        }
-
-    }
-
-    /**
-     * Closes the SU details section
-     */
-    closeSummaryPanel() {
-        // If the stored previous position available, restore it else keep the default positions
-        const canExtendSUList = this.timelineUIAttributes.canExtendSUList!==undefined?this.timelineUIAttributes.canExtendSUList:true;
-        const canShrinkSUList = this.timelineUIAttributes.canShrinkSUList || false;
-        this.setState({ isSUDetsVisible: false, isReservDetsVisible: false, isTaskDetsVisible: false, isUnscheduledDetVisible: false,
-                        canExtendSUList: canExtendSUList, canShrinkSUList: canShrinkSUList
-                    });
-    }
-
-    /**
-     * Hide Tooltip popover on item mouseout event.
-     * @param {Event} evt
-     */
-    onItemMouseOut(evt) {
-        this.setState({popPosition: {display: 'none'}});
-    }
-
-    /**
-     * Show Tooltip popover on item mouseover event. Item & SU content formatted to show in Popover.
-     * @param {Event} evt
-     * @param {Object} item
-     */
-    onItemMouseOver(evt, item) {
-        let popPosition = {display:"block",
-                                left:`${evt.pageX+400>window.innerWidth?evt.pageX-400:evt.pageX+20}px`};
-        if (evt.clientY > window.screen.height/2) {
-            popPosition.bottom = `${evt.clientY - evt.pageY+30}px`;
-        }   else {
-            popPosition.top = `${evt.pageY}px`;
-        }
-        if (item.type === "SCHEDULE" || item.type === "TASK" || item.type==="STATION_TASK" ) {
-            const itemSU = _.find(this.state.suBlueprints, { id: (item.suId ? item.suId : item.id) });
-            item.suName = itemSU.name;
-            const itemStations = this.timelineCommonUtils.getSUStations(itemSU);
-            item.stations = this.timelineCommonUtils.getSUStationGroupCount(itemStations);
-        } else {
-            const reservation = _.find(this.reservations, { 'id': parseInt(item.id.split("-")[1]) });
-            const reservStations = reservation.specifications_doc.resources.stations;
-            // const reservStationGroups = this.groupSUStations(reservStations);
-            item.name = reservation.name;
-            item.contact = reservation.specifications_doc.activity.contact
-            item.activity_type = reservation.specifications_doc.activity.type;
-            item.stations = reservStations.length > 3 ?this.timelineCommonUtils.getSUStationGroupCount(reservStations) : _.toString(reservStations);
-            item.planned = reservation.specifications_doc.activity.planned;
-        }
-        this.setState({ mouseOverItem: item, popPosition: popPosition });
-    }
-
-    /**
-     * Callback function to pass to timeline component which is called on date range change to fetch new item and group records
-     * @param {moment} startTime
-     * @param {moment} endTime
-     */
-    async dateRangeCallback(startTime, endTime, loadOldData) {
-        let suBlueprints = this.state.suBlueprints;
-        if (!loadOldData) {
-            this.setState({ isFetchingData: true });
-            suBlueprints = _.sortBy((await this.getSchedulingUnits(startTime, endTime)).original, 'start_time');
-        }   else {
-            _.map(suBlueprints, su => {
-                su.start_time = this.state.stationView || this.state.isOnSkyView?su.on_sky_start_time:(su.process_start_time || su.on_sky_start_time);
-                su.stop_time = this.state.stationView || this.state.isOnSkyView?su.on_sky_stop_time:(su.process_stop_time || su.on_sky_stop_time);
-                _.map(su.task_blueprints, taskBp => {
-                    taskBp.start_time = this.state.stationView || this.state.isOnSkyView?taskBp.on_sky_start_time:(taskBp.process_start_time || taskBp.on_sky_start_time);
-                    taskBp.stop_time = this.state.stationView || this.state.isOnSkyView?taskBp.on_sky_stop_time:(taskBp.process_stop_time || taskBp.on_sky_stop_time);
-                    return taskBp;
-                });
-                return su;
-            });
-        }
-        let suBlueprintList = [], group = [], items = [];
-        if (startTime && endTime) {
-            const filteredSUBs = this.filteredSUBs || _.map(suBlueprints,"id");
-            for (const suBlueprint of suBlueprints) {
-                if (moment.utc(suBlueprint.start_time).isBetween(startTime, endTime)
-                    || moment.utc(suBlueprint.stop_time).isBetween(startTime, endTime)
-                    || (moment.utc(suBlueprint.start_time).isSameOrBefore(startTime) &&
-                        moment.utc(suBlueprint.stop_time).isSameOrAfter(endTime))) {
-                    if (_.includes(filteredSUBs, suBlueprint.id)) {
-                        // Get timeline item for station view noramlly and in timeline view only if SU to be shown
-                        let timelineItem = (this.state.suToggle || (this.state.stationView && !this.state.isStationTasksVisible)) ? this.getTimelineItem(suBlueprint) : null;
-                        if (this.state.stationView) {
-                            this.getStationItemGroups(suBlueprint, timelineItem, this.allStationsGroup, items, this.filteredTaskData);
-                        } else {
-                            // Add timeline SU item
-                            if (timelineItem) {
-                                items.push(timelineItem);
-                                if (!_.find(group, { 'id': suBlueprint.id })) {
-                                    /* parent and start properties are added to order and display task rows below the corresponding SU row */
-                                    group.push({
-                                        'id': this.state.groupByProject ? suBlueprint.project : suBlueprint.id,
-                                        parent: this.state.groupByProject ? suBlueprint.project : suBlueprint.id,
-                                        start: moment.utc("1900-01-01", "YYYY-MM-DD"),
-                                        title: this.state.groupByProject ? suBlueprint.project : suBlueprint.name
-                                    });
-                                }
-                            }
-                            // Add task item only in timeline view and when show task is enabled
-                            if (this.state.taskToggle && !this.state.stationView) {
-                                const taskItems = this.getTaskItems(suBlueprint, startTime, endTime, this.filteredTaskData);
-                                items = items.concat(taskItems.items);
-                                group = group.concat(taskItems.group);
-                            }
-                        }
-                    }
-                    suBlueprintList.push(suBlueprint);
-                }
-            }
-            if (this.state.stationView || this.state.reservationsViewToggle) {
-                items = this.addStationReservations(items, startTime, endTime);
-            }
-            if (this.state.reservationsViewToggle) {
-                let reservationGroup = [{id: "RESERVATION", parent: "RESERVATION",
-                                            start: moment.utc("1900-01-01", "YYYY-MM-DD"),
-                                            title: "RESERVATIONS"}
-                                        ];
-                group = reservationGroup.concat(group);
-            }
-        } else {
-            suBlueprintList = _.clone(this.state.suBlueprints);
-            group = this.state.group;
-            items = this.state.items;
-        }
-        this.setState({
-            suBlueprints: suBlueprints,
-            suBlueprintList: _.filter(suBlueprintList, (suBlueprint) => { return suBlueprint.start_time != null }),
-            currentStartTime: startTime, currentEndTime: endTime,
-            isFetchingData: false
-        });
-        // On range change close the Details pane
-        // this.closeSummaryPanel();     
-        group = this.state.stationView ? this.getStationsByGroupName() : _.orderBy(_.uniqBy(group, 'id'), ["parent", "start"], ['asc', 'asc']);
-        return { group: group, items: items, startTime: startTime, endTime: endTime };
-    }
-
-    /**
-     * To get items and groups for station view
-     * @param {Object} suBlueprint
-     * @param {Object} timelineItem
-     * @param {Array} group
-     * @param {Array} items
-     */
-    getStationItemGroups(suBlueprint, timelineItem, group, items, filteredTaskData) {
-        /* Get stations based on SU status */
-        let stations = this.timelineCommonUtils.getSUStations(suBlueprint);
-
-        let timelineItems = [timelineItem];
-        if (this.state.isStationTasksVisible) {
-            const taskItems = this.getTaskItems(suBlueprint, this.state.currentStartTime, this.state.currentEndTime, filteredTaskData);
-            timelineItems = taskItems.items;
-            // items = items.concat(taskItems.items);
-        }
-
-        for (const taskItem of timelineItems) {
-            /* Group the items by station */
-            for (const station of stations) {
-                let stationItem = _.cloneDeep(taskItem);
-                stationItem.id = `${stationItem.id}-${station}`;
-                stationItem.group = station;
-                stationItem.suId = suBlueprint.id;
-                stationItem.type = this.state.isStationTasksVisible?"STATION_TASK":"SCHEDULE"
-                items.push(stationItem);
-            }
-        }
-    }
-
-    /**
-     * Add Station Reservations during the visible timeline period
-     * @param {Array} items
-     * @param {moment} startTime
-     * @param {moment} endTime
-     */
-    addStationReservations(items, startTime, endTime, reservFilterData) {
-        let reservations = this.reservations;
-        let reservationItems = [];
-        reservFilterData = reservFilterData?reservFilterData:this.getReservationList();
-        let filteredReservations = reservFilterData?_.map(reservFilterData, data => {data.id = data.actionpath.split("view/")[1]; return parseInt(data.id);}):[];
-        for (const reservation of reservations) {
-            const reservationStartTime = moment.utc(reservation.start_time);
-            const reservationEndTime = reservation.duration ? reservationStartTime.clone().add(reservation.duration, 'seconds') : endTime;
-            const reservationSpec = reservation.specifications_doc;
-            if ((reservationStartTime.isSame(startTime)
-                || reservationStartTime.isSame(endTime)
-                || reservationStartTime.isBetween(startTime, endTime)
-                || reservationEndTime.isSame(startTime)
-                || reservationEndTime.isSame(endTime)
-                || reservationEndTime.isBetween(startTime, endTime)
-                || (reservationStartTime.isSameOrBefore(startTime)
-                    && reservationEndTime.isSameOrAfter(endTime)))
-                && (filteredReservations.length === 0 || filteredReservations.indexOf(reservation.id)>=0)
-                && (this.state.reservationFilter.length === 0 ||                                        // No reservation filter added
-                    this.state.reservationFilter.indexOf(reservationSpec.activity.type) >= 0 )) {     // Reservation reason == Filtered reaseon
-                if (this.state.stationView) {
-                    if (reservationSpec.resources.stations) {
-                        items = items.concat(this.getReservationItems(reservation, endTime, this.state.stationView));
-                    }
-                }   else {
-                    reservationItems.push(this.getReservationItems(reservation, endTime, this.state.stationView)[0]);
-                }
-            }
-        }
-        items = reservationItems.concat(items);
-        return items;
-    }
-
-    /**
-     * Get reservation timeline items. If the reservation doesn't have duration, item endtime should be timeline endtime.
-     * @param {Object} reservation
-     * @param {moment} endTime
-     */
-    getReservationItems(reservation, endTime, stationView) {
-        const reservationSpec = reservation.specifications_doc;
-        let items = [];
-        const start_time = moment.utc(reservation.start_time);
-        const end_time = reservation.duration ? start_time.clone().add(reservation.duration, 'seconds') : endTime;
-        if (stationView) {
-            for (const station of reservationSpec.resources.stations) {
-                const blockColor = RESERVATION_COLORS[this.getReservationType(reservationSpec.schedulability)];
-                let item = {
-                    id: `Res-${reservation.id}-${station}`,
-                    start_time: start_time, end_time: end_time,
-                    name: reservationSpec.activity.type, project: reservation.project_id,
-                    group: station, type: 'RESERVATION',
-                    actType: `${reservationSpec.activity.type}${reservation.project_id ? ("-" + reservation.project_id) : ""}`,
-                    title: "",
-                    desc: reservation.description,
-                    duration: reservation.duration ? UnitConverter.getSecsToHHmmss(reservation.duration) : "Unknown",
-                    bgColor: blockColor.bgColor, selectedBgColor: blockColor.bgColor, color: blockColor.color
-                };
-                items.push(item);
-            }
-        }   else {
-            const blockColor = RESERVATION_COLORS[this.getReservationType(reservationSpec.schedulability)];
-            let item = {
-                id: `Res-${reservation.id}`,
-                start_time: start_time, end_time: end_time,
-                name: reservationSpec.activity.type, project: reservation.project_id,
-                group: "RESERVATION", type: 'RESERVATION',
-                actType: `${reservationSpec.activity.type}${reservation.project_id ? ("-" + reservation.project_id) : ""}`,
-                title: "",
-                desc: reservation.description,
-                duration: reservation.duration ? UnitConverter.getSecsToHHmmss(reservation.duration) : "Unknown",
-                bgColor: blockColor.bgColor, selectedBgColor: blockColor.bgColor, color: blockColor.color
-            };
-            items.push(item);
-        }
-        return items;
-    }
-
-    /**
-     * Get the schedule type from the schedulability object. It helps to get colors of the reservation blocks
-     * according to the type.
-     * @param {Object} schedulability
-     */
-    getReservationType(schedulability) {
-        if (schedulability.fixed_time && schedulability.dynamic) {
-            return 'true-true';
-        } else if (!schedulability.fixed_time && !schedulability.dynamic) {
-            return 'false-false';
-        } else if (schedulability.fixed_time && !schedulability.dynamic) {
-            return 'true-false';
-        } else {
-            return 'false-true';
-        }
-    }
-
-    /**
-     * Set reservation filter
-     * @param {String} filter
-     */
-    setReservationFilter(filter) {
-        this.setState({ reservationFilter: filter });
-        this.updateTimeline();
-    }
-
-    /**
-     * Funtion called to get list of reservations available in the selected timeline range.
-     * @returns Array of Reservations
-     */
-    getReservationList() {
-        let items = [];
-        const startTime = this.state.currentStartTime;
-        const endTime = this.state.currentEndTime;
-        let reservations = this.reservations;
-        for (const reservation of reservations) {
-            const reservationStartTime = moment.utc(reservation.start_time);
-            const reservationEndTime = reservation.duration ? reservationStartTime.clone().add(reservation.duration, 'seconds') : null;
-            const reservationSpec = reservation.specifications_doc;
-            // if ((reservationStartTime.isSame(startTime)
-            //     || reservationStartTime.isSame(endTime)
-            //     || reservationStartTime.isBetween(startTime, endTime)
-            //     || reservationEndTime.isSame(startTime)
-            //     || reservationEndTime.isSame(endTime)
-            //     || reservationEndTime.isBetween(startTime, endTime)
-            //     || (reservationStartTime.isSameOrBefore(startTime)
-            //         && reservationEndTime.isSameOrAfter(endTime)))
-            if ((reservationStartTime.isSameOrBefore(endTime)
-                && (reservationEndTime === null || reservationEndTime.isSameOrAfter(startTime)))
-                && (this.state.reservationFilter.length === 0 ||                                        // No reservation filter added
-                    this.state.reservationFilter.indexOf(reservationSpec.activity.type) >= 0 )) {     // Reservation reason == Filtered reaseon
-                if (!this.state.stationView ||
-                    (this.state.stationView && reservationSpec.resources.stations)) {
-                    let item = _.cloneDeep(reservation);
-                    item.stop_time = item.stop_time || "Unknown";
-                    item.duration = item.duration?UnitConverter.getSecsToDDHHmmss(item.duration):"Unknown";
-                    item.activityType = reservationSpec.activity.type;
-                    item.activitySubject = reservationSpec.activity.subject;
-                    item.activityPlanned = reservationSpec.activity.planned;
-                    item.stations = reservationSpec.resources.stations.join(", ");
-                    item.scheduleFixedTime = reservationSpec.schedulability.fixed_time;
-                    item.scheduleDynamic = reservationSpec.schedulability.dynamic;
-                    item.fixedProject = reservationSpec.schedulability.project_exclusive;
-                    item.effectsExpert = reservationSpec.effects.expert;
-                    item.effectsHBARfi = reservationSpec.effects.hba_rfi;
-                    item.effectsLBARfi = reservationSpec.effects.lba_rfi;
-                    item['actionpath'] = `/reservation/view/${item.id}`;
-                    items.push(item);
-                }
-            }
-        }
-        return items;
-    }
-
-    setToggle(element, value) {
-        if (value === undefined) {
-            delete this.timelineUIAttributes[element];
-        }   else {
-            this.timelineUIAttributes[element] = value;
-        }
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        this.setState({[element]: value})
-        this.updateTimeline();
-    }
-
-    /**
-     * Function to show or hide the List panel.
-     * @param {boolean} value
-     */
-    showListPanel(value) {
-        this.timelineUIAttributes.isSUListVisible = value;
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        this.setState({isSUListVisible: value});
-    }
-
-    showLegend(value) {
-        this.timelineUIAttributes.isLegendVisible = value
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        this.setState({isLegendVisible: value});
-    }
-
-    /**
-     * Function called to shrink or expand the SU list section width
-     * @param {number} step - (-1) to shrink and (+1) to expand
-     */
-    resizeSUList(step) {
-        let canExtendSUList = this.state.canExtendSUList;
-        let canShrinkSUList = this.state.canShrinkSUList;
-        if (step === 1) {
-            // Can Extend when fully shrunk and still extendable
-            canExtendSUList = !!(!canShrinkSUList && canExtendSUList);
-            canShrinkSUList = true;
-        } else {
-            // Can Shrink when fully extended and still shrinkable
-            canShrinkSUList = !!(canShrinkSUList && !canExtendSUList);
-            canExtendSUList = true;
-        }
-        this.timelineUIAttributes = {...this.timelineUIAttributes,
-                                        ...{canExtendSUList: canExtendSUList,
-                                            canShrinkSUList: canShrinkSUList }};
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        this.setState({canExtendSUList: canExtendSUList, canShrinkSUList: canShrinkSUList });
-    }
-
-    /**
-     * Callback function to pass to the Scheduling Unit Table component to pass back filtered data.
-     * The same function is called when the filter applied in the task and reservation tables so that
-     * the tasks and reservations shown in the timeline are updated accordingly.
-     * @param {Array} filteredSUData - filtered data from Scheduling Unit list table
-     * @param {Array} filteredTaskData - filtered data from Task list table. This will be null when the function is called by SU List table.
-     * @param {Array} filteredReservData - filtered data from Reservation list table.
-     */
-    suListFilterCallback(filteredSUData, filteredTaskData, filteredReservData) {
-        let group = [], items = [];
-        const suBlueprints = this.state.suBlueprints;
-        // If filteredSUData is null, get the full list
-        if (!filteredSUData) {
-            filteredSUData = suBlueprints;
-            _.map(filteredSUData, sub => sub.Id = sub.id);
-        }
-        if (this.state.datasetStartTime) {
-            this.filteredSUBs = _.map(filteredSUData, "Id");
-        }
-        // If no tasks are filtered in table, filter tasks of the filtered SUBs
-        if (!filteredTaskData) {
-            const filteredSUIds = _.map(filteredSUData, 'Id');
-            const filteredSUBs = _.filter(suBlueprints, sub => { return filteredSUIds.indexOf(sub.id)>=0});
-            filteredTaskData = [];
-            _.map(filteredSUBs, sub => { filteredTaskData = filteredTaskData.concat(sub.tasks); return sub;});
-        }
-        this.filteredTaskData = filteredTaskData;
-        // If filteredReservData is null, get all reservations loaded
-        if (!filteredReservData) {
-            filteredReservData = this.getReservationList();
-        }
-        for (const data of _.sortBy(filteredSUData, 'Start Time')) {
-            const suBlueprint = _.find(suBlueprints, { actionpath: data.actionpath });
-            if (suBlueprint &&
-                    (moment.utc(suBlueprint.start_time).isBetween(this.state.currentStartTime, this.state.currentEndTime)
-                    || moment.utc(suBlueprint.stop_time).isBetween(this.state.currentStartTime, this.state.currentEndTime)
-                    || (moment.utc(suBlueprint.start_time).isSameOrBefore(this.state.currentStartTime) &&
-                        moment.utc(suBlueprint.stop_time).isSameOrAfter(this.state.currentEndTime)))) {
-                let timelineItem = (this.state.suToggle || this.state.stationView) ? this.getTimelineItem(suBlueprint) : null;
-                if (this.state.stationView) {
-                    this.getStationItemGroups(suBlueprint, timelineItem, this.allStationsGroup, items, filteredTaskData);
-                } else {
-                    if (timelineItem) {
-                        items.push(timelineItem);
-                        if (!_.find(group, { 'id': suBlueprint.id })) {
-                            /* parent and start properties are added to order and list task rows below the SU row */
-                            group.push({
-                                'id': this.state.groupByProject ? suBlueprint.project : suBlueprint.id,
-                                parent: this.state.groupByProject ? suBlueprint.project : suBlueprint.id,
-                                start: moment.utc("1900-01-01", "YYYY-MM-DD"),
-                                title: this.state.groupByProject ? suBlueprint.project : suBlueprint.name
-                            });
-                        }
-                    }
-                    if (this.state.taskToggle && !this.state.stationView) {
-                        const taskItems = this.getTaskItems(suBlueprint, this.state.currentStartTime, this.state.currentEndTime, filteredTaskData);
-                        items = items.concat(taskItems.items);
-                        group = group.concat(taskItems.group);
-                    }
-                }
-            }
-        }
-        if (this.state.stationView || this.state.reservationsViewToggle) {
-            items = this.addStationReservations(items, this.state.currentStartTime, this.state.currentEndTime, filteredReservData);
-        }
-        if (this.state.reservationsViewToggle) {
-            let reservationGroup = [{id: "RESERVATION", parent: "RESERVATION",
-                                        start: moment.utc("1900-01-01", "YYYY-MM-DD"),
-                                        title: "RESERVATIONS"}
-                                    ];
-            group = reservationGroup.concat(group);
-        }
-        if (this.timeline) {
-            this.timeline.updateTimeline({ group: this.state.stationView ? this.getStationsByGroupName() : _.orderBy(_.uniqBy(group, 'id'), ["parent", "start"], ['asc', 'asc']),
-                                            items: items, stationView: this.state.stationView});
-        }
-
-    }
-
-    getStationsByGroupName() {
-        let stations = [];
-        this.state.selectedStationGroup.forEach((group) => {
-            stations = [...stations, ...(this.timelineCommonUtils.getMainStationGroups()[group])];
-        });
-        stations = stations.map(station => ({ id: station, title: station }));
-        return stations;
-    }
-
-    setStationView(isChecked) {
-        this.closeSummaryPanel();
-        let selectedGroups = this.state.selectedStationGroup;
-        // Store selected view and station group. Remove for default values. Default is all station groups.
-        if (isChecked) {
-            this.timelineUIAttributes["stationView"] = isChecked;
-            selectedGroups = this.timelineUIAttributes.stationGroups || selectedGroups;
-            if (selectedGroups.length === this.mainStationGroupOptions.length) {
-                delete this.timelineUIAttributes["stationGroups"];
-            }   else {
-                this.timelineUIAttributes["stationGroups"] = selectedGroups;
-            }
-        }   else {
-            delete this.timelineUIAttributes["stationView"];
-        }
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        this.setState({ stationView: isChecked, selectedStationGroup: selectedGroups });
-        this.updateTimeline();
-    }
-
-    setOnSkyView(value) {
-        this.setState({isOnSkyView: value});
-        this.timelineUIAttributes['isOnSkyView'] = value;
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        this.updateTimeline();
-    }
-
-    showOptionMenu(event) {
-        this.optionsMenu.toggle(event);
-    }
-
-    selectOptionMenu(e, menuName) {
-        switch (menuName) {
-            case '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': {
-                if(e.originalEvent.ctrlKey) {
-                    window.open('/reservation/create','_blank');
-                }
-                else {
-                    this.props.history.push('/reservation/create')
-                    this.setState({ redirect: `/reservation/create`});
-                }
-                break;
-            }
-            case 'System Issues': {
-                if(e.originalEvent.ctrlKey) {
-                    window.open('/systemevent/list','_blank');
-                }
-                else {
-                    this.props.history.push('/systemevent/list');
-                    this.setState({ redirect: `/systemevent/list` });
-                }
-                break;
-            }
-            case 'Add System Event': {
-                if(e.originalEvent.ctrlKey) {
-                    window.open('/systemevent/create','_blank');
-                }
-                else {
-                    this.props.history.push('/systemevent/create')
-                    this.setState({ redirect: `/systemevent/create`});
-                }
-                break;
-            }
-            default: {
-                break;
-            }
-        }
-    }
-
-    /**
-     * Function to call wnen websocket is connected
-     */
-    onConnect() {
-        console.log("WS Opened");
-        const userDets = localStorage.getItem("user");
-        if (userDets) {
-            this.websocket.sendMessage(JSON.stringify({"token": JSON.parse(userDets).websocket_token}));
-            console.log("Auth token submitted");
-        }
-    }
-
-    /**
-     * Function to call when websocket is disconnected
-     */
-    onDisconnect() {
-        console.log("WS Closed")
-    }
-
-    /**
-     * Handles the message received through websocket
-     * @param {String} data - String of JSON data
-     */
-    handleData(data) {
-        if (data) {
-            console.log('received websocket data:', data)
-            const jsonData = JSON.parse(data);
-            if (jsonData.action === 'create') {
-                this.addNewData(jsonData.object_details.id, jsonData.object_type, jsonData.object_details);
-            } else if (jsonData.action === 'update') {
-                this.updateExistingData(jsonData.object_details.id? jsonData.object_details.id: '', jsonData.object_type, jsonData.object_details);
-            }   else if (jsonData.action === 'delete') {
-                this.deleteExistingData(jsonData.object_details.id, jsonData.object_type);
-            }
-        }
-    }
-
-    /**
-     * If any new object that is relevant to the timeline view, load the data to the existing state variable.
-     * @param {Number} id  - id of the object created
-     * @param {String} type  - model name of the object like scheduling_unit_draft, scheduling_unit_blueprint, task_blueprint, etc.,
-     * @param {Object} object - model object with certain properties
-     */
-    async addNewData(id, type, object) {
-        switch (type) {
-            /* When a new scheduling_unit_draft is created, it should be added to the existing list of suDraft. */
-            // case 'scheduling_unit_draft': {
-            //     this.updateSUDraft(id);
-            //     // let suDrafts = this.state.suDrafts;
-            //     // let suSets = this.state.suSets;
-            //     // ScheduleService.getSchedulingUnitDraftById(id)
-            //     // .then(suDraft => {
-            //     //     suDrafts.push(suDraft);
-            //     //     _.remove(suSets, function(suSet) { return suSet.id === suDraft.scheduling_set_id});
-            //     //     suSets.push(suDraft.scheduling_set_object);
-            //     //     this.setState({suSet: suSets, suDrafts: suDrafts});
-            //     // });
-            //     break;
-            // }
-            case 'scheduling_unit_blueprint': {
-                this.updateSchedulingUnit(id);
-                break;
-            }
-            case 'task_blueprint': {
-                // this.updateSchedulingUnit(object.scheduling_unit_blueprint_id);
-                break;
-            }
-            case 'reservation': {
-                ReservationService.getReservation(id).then (async(reservation) => {
-                    this.reservations.push(reservation);
-                    this.updateTimeline();
-                });
-                break;
-            }
-            default: { break; }
-        }
-    }
-
-    /**
-     * Delete existing data from the list
-     */
-    async deleteExistingData (id, type) {
-        switch (type) {
-            case 'reservation' : {
-                _.remove(this.reservations, function (reservation) { return reservation.id === id});
-                this.updateTimeline();
-                break;
-            }
-            default: { break; }
-        }
-    }
-
-    /**
-     * If any if the given properties of the object is modified, update the schedulingUnit object in the list of the state.
-     * It is validated for both scheduling_unit_blueprint and task_blueprint objects
-     * @param {Number} id
-     * @param {String} type
-     * @param {Object} object
-     */
-    async updateExistingData(id, type, object) {
-        const objectProps = ['status', 'start_time', 'stop_time', 'duration'];
-        switch (type) {
-            // case 'scheduling_unit_draft': {
-            //     this.updateSUDraft(id);
-            //     // let suDrafts = this.state.suDrafts;
-            //     // _.remove(suDrafts, function(suDraft) { return suDraft.id === id});
-            //     // suDrafts.push(object);
-            //     // this.setState({suDrafts: suDrafts});
-            //     break;
-            // }
-            case 'scheduling_unit_blueprint': {
-                let suBlueprints = this.state.suBlueprints;
-                let existingSUB = _.find(suBlueprints, ['id', id]);
-                if (Validator.isObjectModified(existingSUB, object, objectProps)) {
-                    this.updateSchedulingUnit(id);
-                }
-                break;
-            }
-            case 'subsystem': {
-                let subSystemStatus = this.state.subSystemStatus;
-                subSystemStatus = object.status_value === 'active' ? true: false
-                this.setState({subSystemStatus: subSystemStatus})
-                break;
-            }
-            case 'task_blueprint': {
-                // let suBlueprints = this.state.suBlueprints;
-                // let existingSUB = _.find(suBlueprints, ['id', object.scheduling_unit_blueprint_id]);
-                // let existingTask = _.find(existingSUB.tasks, ['id', id]);
-                // if (Validator.isObjectModified(existingTask, object, objectProps)) {
-                //     this.updateSchedulingUnit(object.scheduling_unit_blueprint_id);
-                // }
-                break;
-            }
-            case 'reservation': {
-                ReservationService.getReservation(id).then (async(reservation) => {
-                    _.remove(this.reservations, function (res) { return res.id === reservation.id });
-                    this.reservations.push(reservation);
-                    this.updateTimeline();
-                });
-                break;
-            }
-            default: { break; }
-        }
-    }
-
-    /**
-     * Add or update the SUDraft object in the state suDraft list after fetching through API call
-     * @param {Number} id
-     */
-    updateSUDraft(id) {
-        let suDrafts = this.state.suDrafts;
-        let suSets = this.state.suSets;
-        ScheduleService.getSchedulingUnitDraftById(id)
-            .then(suDraft => {
-                _.remove(suDrafts, function (suDraft) { return suDraft.id === id });
-                suDrafts.push(suDraft);
-                _.remove(suSets, function (suSet) { return suSet.id === suDraft.scheduling_set_id });
-                suSets.push(suDraft.scheduling_set_object);
-                this.setState({ suSet: suSets, suDrafts: suDrafts });
-            });
-    }
-
-    /**
-     * Fetch the latest SUB object from the backend and format as required for the timeline and pass them to the timeline component
-     * to update the timeline view with latest data.
-     * @param {Number} id
-     */
-    async updateSchedulingUnit(id) {
-        if(this.state.result===true) {
-            return false;
-        }
-        ScheduleService.getExpandedSUB(id)
-            .then(async(suBlueprint) => {
-                let workflows = await this.timelineCommonUtils.getWorkflowsAndTasks([id]);
-                let unschedulableList = this.state.unschedulableList;
-                // If the SUB status is changed to Unschedulable, add/update it to the unschedulable list
-                if (suBlueprint.status === "unschedulable") {
-                    let unscedulableSUB = this.timelineCommonUtils.formatUnschedulableSUB(_.cloneDeep(suBlueprint), workflows);
-                    let subIndex = _.findIndex(unschedulableList, sub => sub.id === unscedulableSUB.id);
-                    if (subIndex >= 0) {
-                        unschedulableList[subIndex] = unscedulableSUB;
-                    }   else {
-                        unschedulableList.push(unscedulableSUB);
-                    }
-                }   else {  // If the SUB status is changed from unschedulable to others, remove it from the unschedulable list
-                    let subIndex = _.findIndex(unschedulableList, sub => sub.id === suBlueprint.id);
-                    if (subIndex >= 0) {
-                        _.remove(unschedulableList, sub => sub.id === suBlueprint.id);
-                    }
-                }
-                let suBlueprints = this.state.suBlueprints;
-                suBlueprint['actionpath'] = `/schedulingunit/view/blueprint/${id}`;
-                suBlueprint.suDraft = suBlueprint.draft;
-                suBlueprint.project = suBlueprint.draft.scheduling_set.project.name;
-                suBlueprint.project_rank = suBlueprint.draft.scheduling_set.project.rank;
-                suBlueprint.suSet = suBlueprint.draft.scheduling_set;
-                suBlueprint.durationInSec = suBlueprint.duration;
-                suBlueprint.duration = UnitConverter.getSecsToHHmmss(suBlueprint.duration);
-                const workflowDetails = this.timelineCommonUtils.getWorkflowDetails(workflows, suBlueprint.id);
-                suBlueprint.workflowStatus = workflowDetails.status;
-                suBlueprint.task_content = "";
-                suBlueprint.observ_template_name = suBlueprint.draft.observation_strategy_template?suBlueprint.draft.observation_strategy_template.name:null;
-                suBlueprint.tasks = suBlueprint.task_blueprints;
-                suBlueprint.scheduling_constraints = suBlueprint.scheduling_constraints_doc;
-                const itemStations = this.timelineCommonUtils.getSUStations(suBlueprint);
-                suBlueprint.stationGroupCount = this.timelineCommonUtils.getSUStationGroupCount(itemStations).counts;
-                suBlueprint.start_time = this.state.stationView || this.state.isOnSkyView?suBlueprint.on_sky_start_time:(suBlueprint.process_start_time || suBlueprint.on_sky_start_time);
-                suBlueprint.stop_time = this.state.stationView || this.state.isOnSkyView?suBlueprint.on_sky_stop_time:(suBlueprint.process_stop_time || suBlueprint.on_sky_stop_time);
-                _.map(suBlueprint.task_blueprints, taskBp => {
-                    taskBp.start_time = this.state.stationView || this.state.isOnSkyView?taskBp.on_sky_start_time:(taskBp.process_start_time || taskBp.on_sky_start_time);
-                    taskBp.stop_time = this.state.stationView || this.state.isOnSkyView?taskBp.on_sky_stop_time:(taskBp.process_stop_time || taskBp.on_sky_stop_time);
-                    return taskBp;
-                });
-                _.remove(suBlueprints, function (suB) { return suB.id === id });
-                suBlueprints.push(suBlueprint);
-                // Set updated suBlueprints in the state and call the dateRangeCallback to create the timeline group and items
-                this.setState({ suBlueprints: suBlueprints, unschedulableList: unschedulableList });
-                // this.dateRangeCallback(this.state.currentStartTime, this.state.currentEndTime, true);
-                this.updateTimeline();
-            });
-    }
-
-    /**
-     * Function set selected task types. Selected types are stored in local storage.
-     * If default('observation') is selected, removed from local storage.
-     * @param {Array} types - Array of task types
-     */
-    async setSelectedTaskTypes(types) {
-        if (types.length === 1 && types[0] === "observation") {
-            delete this.timelineUIAttributes["taskTypes"];
-        }   else {
-            this.timelineUIAttributes["taskTypes"] = types;
-        }
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        await this.setState({selectedTaskTypes: types});
-        this.updateTimeline();
-    }
-
-    /**
-     * Set the grouping type project/SU. Default by SU. Store the selected grouping type in local storage.
-     * Remove the local storage if default is selected.
-     * @param {boolean} groupByProject
-     */
-    async setGroupByProject(groupByProject) {
-        if (groupByProject) {
-            this.timelineUIAttributes["groupByProject"] = groupByProject;
-        }   else {
-            delete this.timelineUIAttributes["groupByProject"];
-        }
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        await this.setState({groupByProject: groupByProject});
-        this.updateTimeline();
-    }
-
-    /**
-     * Toogle function to show tasks or scheduling units in station view.
-     */
-    async changeViewBlocks() {
-        // Remove the attribute from local storage when default option is toggled else store the option
-        if (this.state.isStationTasksVisible) {
-            this.timelineUIAttributes["isStationTasksVisible"] = false;
-        }   else {
-            delete this.timelineUIAttributes["isStationTasksVisible"];
-        }
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        await this.setState({isStationTasksVisible: !this.state.isStationTasksVisible});
-        this.updateTimeline();
-    }
-
-    /**
-     * Function sets the flag to show or hide reservation blocks in normal timeline view and the options is remembered.
-     */
-    setReservationsViewToggle(value) {
-        this.timelineUIAttributes["reservationsViewToggle"] = value
-        this.timelineCommonUtils.storeUIAttributes(this.timelineUIAttributes);
-        this.setState({reservationsViewToggle: value});
-        this.updateTimeline();
-    }
-
-    /**
-     * Get Status list for UI drop down list
-     */
-    async getStatusList() {
-        let suStatusList = [];
-        let taskStatusList = [];
-        const suFilters = await ScheduleService.getSchedulingUnitFilterDefinition('blueprint');
-        if (suFilters && suFilters.data.filters['status']) {
-            suFilters.data.filters['status'].choices.forEach(choice => {
-                const tmpVar = {name:  _.startCase(choice.value), value: choice.value};
-                suStatusList.push(tmpVar);
-            });
-        }
-        const taskFilters = await TaskService.getTaskFilterDefinition('blueprint');
-        if (taskFilters && taskFilters.data.filters['status']) {
-            taskFilters.data.filters['status'].choices.forEach(choice => {
-                const tmpVar = {name:  _.startCase(choice.value), value: choice.value};
-                taskStatusList.push(tmpVar);
-            });
-        }
-        this.setState({suStatusList: suStatusList, taskStatusList: taskStatusList});
-    }
-
-     /**
-     * Get Task Type list for UI drop down list
-     */
-      async getTaskTypeList() {
-        let taskTypeList = [];
-        const taskFilters = await TaskService.getTaskFilterDefinition('blueprint');
-        if (taskFilters && taskFilters.data.filters['task_type']) {
-            taskFilters.data.filters['task_type'].choices.forEach(choice => {
-                const tmpVar = {name:  _.startCase(choice.value), value: choice.value};
-                taskTypeList.push(tmpVar);
-            });
-        }
-        this.setState({taskTypeList: taskTypeList});
-    }
-
-    /**
-     * Show Dynamic Scheduling popup
-     */
-    showDymanicSchedulerPopup(){
-        this.setState({showDialog: true});
-    }
-
-    /**
-     * Close Dynamic Scheduling popup
-     */
-    close() {
-        this.setState({showDialog: false});
-    }
-
-    async updateTimeline() {
-        if (this.timeline) {
-            const rangeData = await this.dateRangeCallback(this.state.currentStartTime, this.state.currentEndTime, true);
-            this.timeline.updateTimeline({ group: this.state.stationView ? this.getStationsByGroupName() : _.orderBy(_.uniqBy(rangeData.group, 'id'), ["parent", "start"], ['asc', 'asc']),
-                                            items: rangeData.items, stationView: this.state.stationView});
-        }
-    }
-
-    render() {
-        if (this.state.redirect) {
-            return <Redirect to={{ pathname: this.state.redirect }}></Redirect>
-        }
-        // const {timeline} = this.state.userrole.userRolePermission
-        //  if (this.state.loader) {
-        //     return <AppLoader />
-        // }
-        const isSUListVisible = this.state.isSUListVisible;
-        let isSUDetsVisible = this.state.isSUDetsVisible;
-        const isReservDetsVisible = this.state.isReservDetsVisible;
-        const isTaskDetsVisible = this.state.isTaskDetsVisible;
-        const canExtendSUList = this.state.canExtendSUList;
-        const canShrinkSUList = this.state.canShrinkSUList;
-        let suBlueprint = null, reservation = null;
-        if (isSUDetsVisible) {
-            suBlueprint = _.find(this.state.isSchedulable?this.state.suBlueprints: this.state.unschedulableList, { id: this.state.stationView ? parseInt(this.state.selectedItem.id.split('-')[0]) : this.state.selectedItem.id });
-            isSUDetsVisible = isSUDetsVisible && suBlueprint;
-        }
-        if (isReservDetsVisible) {
-            reservation = _.find(this.reservations, { id: parseInt(this.state.selectedItem.id.split('-')[1]) });
-            reservation.project = this.state.selectedItem.project;
-        }
-        let mouseOverItem = this.state.mouseOverItem;
-        const leftPanelClassName = (isSUListVisible || this.state.isLegendVisible) && (isSUDetsVisible || isReservDetsVisible || isTaskDetsVisible ||
-                            (canExtendSUList && !canShrinkSUList) ? "col-lg-3 col-md-3 col-sm-12" :
-                            ((canExtendSUList && canShrinkSUList) ? "col-lg-5 col-md-5 col-sm-12" : "col-lg-6 col-md-6 col-sm-12"))
-        return (
-            <React.Fragment>
-                <TieredMenu className="app-header-menu" model={this.state.menuOptions} popup ref={el => this.optionsMenu = el} />
-                <PageHeader location={this.props.location} title={'Scheduling Units - Timeline View'}
-                    actions={[
-                        this.state.dsStatus && {
-                        title: this.state.subSystemStatus?'Dynamic Scheduler is Active':'Dynamic Scheduler is Idle',
-                        className:` fa fa-${this.state.subSystemStatus? 'play' : 'pause'} subsystem p-chips-token-label su-${this.state.subSystemStatus? 'finished': 'warning'}`,
-                        type: 'tag' },
-                        { content: 'D',
-                        title: this.state.dsStatus?'Dynamic Scheduling is On':'Dynamic Scheduling is Off',
-                        className:`tag p-chips-token-label su-${this.state.dsStatus? 'finished': 'error'}`,
-                        type: 'tag' },
-                        { content: 'F',
-                        title: this.state.fsStatus?'Fixed time Scheduling is On':'Fixed time Scheduling is Off',
-                        className:`tag p-chips-token-label su-${this.state.fsStatus? 'finished': 'error'}`,
-                        type: 'tag' },
-                        { icon: 'fa-cog',  title: 'Scheduling Settings',
-                            type: 'button', actOn: 'click', props: { callback: this.showDymanicSchedulerPopup }, },
-                        { icon: 'fa-bars', title: '',
-                            type: 'button', actOn: 'mouseOver', props: { callback: this.showOptionMenu }, },
-                        { icon: 'fa-calendar-alt', title: 'Week View', props: { pathname: `/su/timelineview/week` } }
-                    ]}
-                />
-                {this.state.isFetchingData &&
-                    <TopProgressBar />
-                }
-                { this.state.isLoading ? <AppLoader /> :
-                    <div className="p-grid">
-                        <div className={leftPanelClassName}>
-                            <div style={this.state.isLegendVisible ? {} : {display: "none"}} className="legend-header">Legend</div>
-                            <Legendbar style={this.state.isLegendVisible ? {} : {display: "none"}} canExtend={this.state.canExtendSUList} canShrink={this.state.canShrinkSUList}/>
-                            {/* SU List Panel */}
-                            <div className="timeline-panel"
-                                style={isSUListVisible ? { position: "inherit", borderRight: "3px solid #efefef", paddingTop: "10px" } : { display: 'none' }}>
-                                <TimelineListTabs suBlueprintList={this.state.suBlueprintList}
-                                    suListFilterCallback={this.suListFilterCallback}
-                                    reservationList={this.getReservationList()}
-                                    showSummary={this.onItemClick}
-                                    suStatusList={this.state.suStatusList}
-                                    taskStatusList={this.state.taskStatusList}
-                                    taskTypeList={this.state.taskTypeList}
-                                    unschedulableList={this.state.unschedulableList}
-                                    viewName="Timeline"
-                                    ></TimelineListTabs>
-                            </div>
-                        </div>
-                        {/* Timeline Panel */}
-                        <div className={(isSUListVisible || this.state.isLegendVisible) ?
-                            ((isSUDetsVisible || isReservDetsVisible || isTaskDetsVisible || this.state.isUnscheduledDetVisible) ? "timeline-panel col-lg-6 col-md-6 col-sm-12" :
-                            (!canExtendSUList && canShrinkSUList) ? "timeline-panel col-lg-6 col-md-6 col-sm-12" :
-                                ((canExtendSUList && canShrinkSUList) ? "timeline-panel col-lg-7 col-md-7 col-sm-12" : "timeline-panel col-lg-9 col-md-9 col-sm-12")) :
-                            ((isSUDetsVisible || isReservDetsVisible || isTaskDetsVisible) ? "timeline-panel col-lg-9 col-md-9 col-sm-12" : "timeline-panel col-lg-12 col-md-12 col-sm-12")}
-                        >
-                            {/* Panel Resize buttons */}
-                            {(isSUListVisible || this.state.isLegendVisible) &&
-                                <div className="resize-div">
-                                    <button className="p-link resize-btn" disabled={!this.state.canShrinkSUList}
-                                        title="Shrink List/Expand Timeline"
-                                        onClick={(e) => { this.resizeSUList(-1) }}>
-                                        <i className="pi pi-step-backward"></i>
-                                    </button>
-                                    <button className="p-link resize-btn" disabled={!this.state.canExtendSUList}
-                                        title="Expand List/Shrink Timeline"
-                                        onClick={(e) => { this.resizeSUList(1) }}>
-                                        <i className="pi pi-step-forward"></i>
-                                    </button>
-                                </div>
-                            }
-                            <div className={isSUListVisible ? "resize-div su-visible" : "resize-div su-hidden"}>
-                                {isSUListVisible &&
-                                    <button className="p-link resize-btn"
-                                        title="Hide List"
-                                        onClick={(e) => { this.showListPanel(false) }}>
-                                        <i className="pi pi-eye-slash"></i>
-                                    </button>
-                                }
-                                {!isSUListVisible &&
-                                    <button className="p-link resize-btn"
-                                            style={this.state.isLegendVisible ? {marginTop: "4.5rem"} : {}}
-                                            title="Show List"
-                                        onClick={(e) => { this.showListPanel(true) }}>
-                                        <i className="pi pi-eye"> Show List</i>
-                                    </button>
-                                }
-                            </div>
-                            <div className={this.state.isLegendVisible ? "resize-div su-visible" : "resize-div su-hidden"}
-                             style={isSUListVisible ? {marginLeft: "-1rem"} : {}}>
-                                {this.state.isLegendVisible &&
-                                    <button className="p-link resize-btn"
-                                        title="Hide Legend"
-                                        onClick={(e) => { this.showLegend(false) }}>
-                                        <i className="pi pi-filter-slash"></i>
-                                    </button>
-                                }
-                                {!this.state.isLegendVisible &&
-                                    <button className="p-link resize-btn"
-                                            style={isSUListVisible ? {marginTop: "5rem"} : {marginTop: "7rem"}}
-                                        title="Show Legend"
-                                        onClick={(e) => { this.showLegend(true) }}>
-                                        <i className="pi pi-filter"> Show Legend</i>
-                                    </button>
-                                }
-                            </div>
-                            <Timeline ref={(tl) => { this.timeline = tl }}
-                                defaultStartTime={this.state.currentStartTime}
-                                defaultEndTime={this.state.currentEndTime}
-                                group={this.state.group}
-                                items={this.state.items}
-                                currentUTC={this.state.currentUTC}
-                                rowHeight={this.state.stationView ? 18 : 50}
-                                sidebarWidth={!this.state.suToggle ? 250 : 200}
-                                itemClickCallback={this.onItemClick}
-                                itemMouseOverCallback={this.onItemMouseOver}
-                                itemMouseOutCallback={this.onItemMouseOut}
-                                dateRangeCallback={this.dateRangeCallback}
-                                showSunTimings={!this.state.stationView}
-                                timelineCommonUtils={this.timelineCommonUtils}
-                                timelineUIAttributes={this.timelineUIAttributes}
-                                stackItems
-                                className="timeline-toolbar-margin-top-0"
-                                //Toolbar properties
-                                onSkyViewToggle={this.state.isOnSkyView}
-                                setOnSkyViewToggle={this.setOnSkyView}
-                                stationsViewToggle={this.state.stationView}
-                                setStationsViewToggle={this.setStationView}
-                                isStationTasksVisible={this.state.isStationTasksVisible}
-                                changeViewBlocks={this.changeViewBlocks}
-                                selectedStationGroup={this.state.selectedStationGroup}
-                                mainStationGroupOptions={this.mainStationGroupOptions}
-                                setSelectedStationGroup={this.setSelectedStationGroup}
-                                suToggle={this.state.suToggle}
-                                setSUToggle={(value) => {this.setToggle("suToggle", value)}}
-                                taskToggle={this.state.taskToggle}
-                                setTaskToggle={(value) => {this.setToggle("taskToggle", value)}}
-                                selectedTaskTypes={this.state.selectedTaskTypes}
-                                taskTypes={this.state.taskTypes}
-                                setSelectedTaskTypes={this.setSelectedTaskTypes}
-                                setGroupByProject={this.setGroupByProject}
-                                isGroupedByProject={this.state.groupByProject}
-                                reservationsViewToggle={this.state.reservationsViewToggle}
-                                setReservationsViewToggle={this.setReservationsViewToggle}
-                                reservationFilter={this.state.reservationFilter}
-                                setReservationFilter={this.setReservationFilter}
-                            ></Timeline>
-                        </div>
-                        {/* Details Panel */}
-                        {isSUDetsVisible &&
-                            <div className="timeline-panel col-lg-3 col-md-3 col-sm-12"
-                                style={{ borderLeft: "1px solid #efefef", marginTop: "0px", backgroundColor: "#f2f2f2" }}>
-                                {this.state.isSummaryLoading ? <AppLoader /> :
-                                    <SchedulingUnitSummary schedulingUnit={suBlueprint} suTaskList={this.state.suTaskList}
-                                        viewInNewWindow
-                                        constraintsTemplate={this.state.suConstraintTemplate}
-                                        onUpdate = {this.onSaveChanges}
-                                        newPopupvalue={this.newPopupvalue}
-                                        onClose= {this.state.openEditConstraintDialog}
-                                        onSavedisable={this.state.onSavedisable}
-                                        onCloseFn={this.editConstraint}
-                                        stationGroup={this.state.stationGroup}
-                                        missingStations={this.state.missingStations}
-                                        cancelCheckstatus={this.cancelCheckstatus}
-                                        cancelStatus={this.state.cancelStatus}
-                                        closeCallback={this.closeSummaryPanel}></SchedulingUnitSummary>
-                                }
-                            </div>
-                        }
-                        {this.state.isTaskDetsVisible &&
-                            <div className="timeline-panel col-lg-3 col-md-3 col-sm-12"
-                                style={{ borderLeft: "1px solid #efefef", marginTop: "0px", backgroundColor: "#f2f2f2" }}>
-                                {this.state.isSummaryLoading ? <AppLoader /> :
-                                    <TaskSummary taskDetails={this.state.taskDetails}
-                                        task = {this.state.selectedItem}
-                                        viewInNewWindow
-                                        closeCallback={this.closeSummaryPanel}></TaskSummary>
-                                }
-                            </div>
-                        }
-                        {this.state.isReservDetsVisible &&
-                            <div className="timeline-panel col-lg-3 col-md-3 col-sm-12"
-                                style={{ borderLeft: "1px solid #efefef", marginTop: "0px", backgroundColor: "#f2f2f2" }}>
-                                {this.state.isSummaryLoading ? <AppLoader /> :
-                                    <ReservationSummary reservation={reservation} viewInNewWindow={true}
-                                        closeCallback={this.closeSummaryPanel}></ReservationSummary>
-                                }
-                            </div>
-                        }
-                    </div>
-
-                }
-                {/* SU Item Tooltip popover with SU status color */}
-                <div className="p-overlaypanel p-component timeline-popover"
-                     style={{...this.state.popPosition, zIndex: 1324, opacity: 1.944}}>
-                    <TimelineItemPopover mouseOverItem={mouseOverItem}/>
-                </div>
-                {!this.state.isLoading &&
-                    <Websocket ref={websocket => this.websocket = websocket} url={process.env.REACT_APP_WEBSOCKET_URL}
-                        onOpen={this.onConnect} onMessage={this.handleData} onClose={this.onDisconnect} />}
-                {this.state.showDialog &&
-                    <div className="p-grid" data-testid="confirm_dialog">
-                        <CustomDialog type="success" visible={this.state.showDialog} width="25vw" showIcon={false}
-                            header="Scheduling Settings" message={<DynamicScheduler callBack={this.updateDSStatus} />}
-                            content={''}
-                            actions={ [
-                            {id:"no", title: 'Close', callback: this.close} ]}
-                            onClose={this.close}
-                            />
-                    </div>
-                }
-            </React.Fragment>
-        );
-    }
-}
\ No newline at end of file
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
deleted file mode 100644
index 7f9e69c870c..00000000000
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/week.view.js
+++ /dev/null
@@ -1,1650 +0,0 @@
-import React, {Component} from 'react';
-import {Redirect} from 'react-router-dom/cjs/react-router-dom.min';
-import moment from 'moment';
-import _ from 'lodash';
-import Websocket from 'react-websocket';
-
-
-import {CustomDialog} from '../../layout/components/CustomDialog';
-import AppLoader from '../../layout/components/AppLoader';
-import PageHeader from '../../layout/components/PageHeader';
-import Timeline from '../../components/Timeline';
-import DynamicScheduler from '../../components/DynamicScheduler';
-
-import ScheduleService from '../../services/schedule.service';
-import TaskService from '../../services/task.service';
-import UtilService from '../../services/util.service';
-import UnitConversion from '../../utils/unit.converter';
-import {appGrowl} from '../../layout/components/AppGrowl';
-
-import UnitConverter from '../../utils/unit.converter';
-import Validator from '../../utils/validator';
-import SchedulingUnitSummary from '../Scheduling/summary';
-import UIConstants from '../../utils/ui.constants';
-import {TieredMenu} from 'primereact/tieredmenu';
-import ReservationSummary from '../Reservation/reservation.summary';
-import TimelineListTabs from './list.tabs';
-import TimelineCommonUtils from './common.utils';
-import ReservationService from '../../services/reservation.service';
-import AuthUtil from '../../utils/auth.util';
-import AuthStore from '../../authenticate/auth.store';
-import TopProgressBar from '../../layout/components/TopProgressBar';
-import TimelineItemPopover from "./components/TimelineItemPopover";
-import Legendbar from "./components/Legendbar";
-import {getTimelineItem} from "./helpers/timeline.item.helper";
-
-// Color constant for status
-export const STATUS_COLORS = {
-    "ERROR": "FF0000", "CANCELLED": "#00FF00", "DEFINED": "#00BCD4", "UNSCHEDULABLE": "#9e0707",
-    "SCHEDULABLE": "#0000FF", "SCHEDULED": "#abc", "OBSERVING": "#bcd",
-    "OBSERVED": "#cde", "PROCESSING": "#cddc39", "PROCESSED": "#fed",
-    "INGESTING": "#edc", "FINISHED": "#47d53d"
-};
-
-const RESERVATION_COLORS = {
-    "true-true": {bgColor: "lightgrey", color: "#585859"}, "true-false": {bgColor: '#585859', color: "white"},
-    "false-true": {bgColor: "#9b9999", color: "white"}, "false-false": {bgColor: "black", color: "white"}
-};
-
-const OFFSET_DATA_DAYS = process.env.REACT_APP_WEEKVIEW_DATA_PRELOAD_PERIOD_WEEKS * 7;
-
-/**
- * Scheduling Unit timeline view component to view SU List and timeline
- */
-export class WeekTimelineView extends Component {
-    timelineCommonUtils = new TimelineCommonUtils();
-
-    constructor(props) {
-        super(props);
-        this.timelineUIAttributes = UtilService.localStore({type: 'get', key: "TIMELINE_UI_ATTR"}) || {};
-        this.state = {
-            isLoading: true,
-            suBlueprints: [],       // Scheduling Unit Blueprints
-            suDrafts: [],           // Scheduling Unit Drafts
-            suBlueprintList: [],    // SU Blueprints filtered to view
-            group: [],               // Timeline group from scheduling unit draft name
-            items: [],               // Timeline items from scheduling unit blueprints grouped by scheduling unit draft
-            isSUDetsVisible: false,
-            isUnscheduledDetVisible: false,
-            canExtendSUList: this.timelineUIAttributes.canExtendSUList === undefined ? true : this.timelineUIAttributes.canExtendSUList,
-            canShrinkSUList: this.timelineUIAttributes.canShrinkSUList || false,
-            isSUListVisible: this.timelineUIAttributes.isSUListVisible === undefined ? true : this.timelineUIAttributes.isSUListVisible,
-            isLegendVisible: this.timelineUIAttributes.isLegendVisible === undefined ? true : this.timelineUIAttributes.isLegendVisible,
-            selectedItem: null,
-            suTaskList: [],
-            isSummaryLoading: false,
-            stationGroup: [],
-            missingStations: [],
-            reservationFilter: [],
-            reservationsViewToggle: this.timelineUIAttributes.reservationsViewToggle === undefined ? true : this.timelineUIAttributes.reservationsViewToggle,
-            suStatusList: [],
-            taskStatusList: [],
-            taskTypeList: [],
-            unschedulableList: [],
-            unschedulableBlueprint: {},
-            datasetStartTime: null, datasetEndTime: null,
-            showDialog: false,
-            userrole: AuthStore.getState(),
-            popPosition: {display: 'none'},
-            dsStatus: false, // To show the Dynamic Scheduling status in timeline/week view page header
-            fsStatus: false,
-            subSystemStatus: false,
-            onSkyViewToggle: this.timelineUIAttributes.isOnSkyWeekView === undefined ? true : this.timelineUIAttributes.isOnSkyWeekView,
-        }
-        this.STATUS_BEFORE_SCHEDULED = ['defining', 'defined', 'schedulable'];  // Statuses before scheduled to get station_group
-        this.reservations = [];
-        this.optionsMenu = React.createRef();
-        this.onConnect = this.onConnect.bind(this);
-        this.getSchedulingUnits = this.getSchedulingUnits.bind(this);
-        this.loadSUsAheadAndTrail = this.loadSUsAheadAndTrail.bind(this);
-        this.showOptionMenu = this.showOptionMenu.bind(this);
-        this.selectOptionMenu = this.selectOptionMenu.bind(this);
-        this.onItemClick = this.onItemClick.bind(this);
-        this.closeSUDets = this.closeSUDets.bind(this);
-        this.onItemMouseOver = this.onItemMouseOver.bind(this);
-        this.onItemMouseOut = this.onItemMouseOut.bind(this);
-        this.showSUSummary = this.showSUSummary.bind(this);
-        this.showReservationSummary = this.showReservationSummary.bind(this);
-        this.cancelCheckstatus = this.cancelCheckstatus.bind(this);
-        this.dateRangeCallback = this.dateRangeCallback.bind(this);
-        this.resizeSUList = this.resizeSUList.bind(this);
-        this.suListFilterCallback = this.suListFilterCallback.bind(this);
-        this.addWeekReservations = this.addWeekReservations.bind(this);
-        this.handleData = this.handleData.bind(this);
-        this.addNewData = this.addNewData.bind(this);
-        this.updateExistingData = this.updateExistingData.bind(this);
-        this.deleteExistingData = this.deleteExistingData.bind(this);
-        this.updateSchedulingUnit = this.updateSchedulingUnit.bind(this);
-        this.showDymanicSchedulerPopup = this.showDymanicSchedulerPopup.bind(this);
-        this.onSaveChanges = this.onSaveChanges.bind(this);
-        this.editConstraint = this.editConstraint.bind(this);
-        this.onclosepopup = this.onclosepopup.bind(this);
-        this.newPopupvalue = this.newPopupvalue.bind(this);
-        this.close = this.close.bind(this);
-        this.getDSStatus = this.getDSStatus.bind(this);
-        this.updateDSStatus = this.updateDSStatus.bind(this);
-        this.setOnSkyViewToggle = this.setOnSkyViewToggle.bind(this);
-        this.setReservationsViewToggle = this.setReservationsViewToggle.bind(this);
-        this.setReservationFilter = this.setReservationFilter.bind(this);
-    }
-
-    /**
-     * Get Dynamic Scheduling status
-     */
-    async getDSStatus() {
-        await UtilService.getDynamicSchedulerStatus()
-            .then(response => {
-                var status = false;
-                if (response) {
-                    status = response.value;
-                }
-                this.setState({dsStatus: status});
-            });
-        await UtilService.getFixedTimeSchedulerStatus()
-            .then(response => {
-                var status = false;
-                if (response) {
-                    status = response.value;
-                }
-                this.setState({fsStatus: status});
-            });
-        this.state.dsStatus && await UtilService.getSubSystemScheduler()
-            .then(response => {
-                var status = false;
-                if (response) {
-                    status = response.status_value === 'active' ? true : false;
-                }
-                this.setState({subSystemStatus: status});
-            })
-    }
-
-    /**
-     * Set current status when the Dynamic Scheduling On/Off
-     *
-     * @param {boolean} status
-     */
-    async updateDSStatus(status, scheduleType) {
-        if (scheduleType === 'dynamic') {
-            this.state.status && await UtilService.getSubSystemScheduler()
-                .then(response => {
-                    var status = false;
-                    if (response) {
-                        status = response.status_value === 'active' ? true : false;
-                    }
-                    this.setState({subSystemStatus: status});
-                })
-            this.setState({dsStatus: status});
-        }
-        if (scheduleType === 'fixed') {
-
-            this.setState({fsStatus: status});
-        }
-    }
-
-    /* Cancel on Scheduling Constraint Popup onEdit */
-    cancelCheckstatus(status) {
-        this.setState({
-            cancelStatus: status
-        });
-    }
-
-    /* Getting updated value from the ScheduleConstraints Popup onEdit*/
-    newPopupvalue(jsonOutput) {
-        this.setState({
-            suBlueprint: {
-                scheduling_constraints_doc: jsonOutput
-            }
-        });
-    }
-
-    /*
-    *   Onsavechanges for scheduling Constraints
-    *   @id : Schedule  Id, @val : update state from child components
-    */
-    async onSaveChanges(id, val) {
-        const constStrategy = _.cloneDeep(val);
-        if (constStrategy.hasOwnProperty('time')) {
-            if (constStrategy.time.hasOwnProperty('at') && !constStrategy.time.at) {
-                delete constStrategy.time.at;
-            }
-            if (constStrategy.time.hasOwnProperty('before') && !constStrategy.time.after) {
-                delete constStrategy.time.after;
-            }
-            if (constStrategy.time.hasOwnProperty('before') && !constStrategy.time.before) {
-                delete constStrategy.time.before;
-            }
-            for (const type in constStrategy.time) {
-                if (constStrategy.time[type] && constStrategy.time[type].length) {
-                    if (typeof constStrategy.time[type] === 'string') {
-                        constStrategy.time[type] = `${moment(constStrategy.time[type]).format("YYYY-MM-DDTHH:mm:ss.SSSSS", {trim: false})}Z`;
-                    } else {
-                        constStrategy.time[type].forEach(time => {
-                            for (let key in time) {
-                                time[key] = `${moment(time[key]).format("YYYY-MM-DDTHH:mm:ss.SSSSS", {trim: false})}Z`;
-                            }
-                        })
-                    }
-                }
-            }
-        }
-        if (constStrategy.hasOwnProperty('sky')) {
-            if (constStrategy.sky.transit_offset) {
-                constStrategy.sky.transit_offset.from = UnitConversion.getHHmmssToSecs(constStrategy.sky.transit_offset.from);
-                constStrategy.sky.transit_offset.to = UnitConversion.getHHmmssToSecs(constStrategy.sky.transit_offset.to);
-            }
-            UnitConversion.degreeToRadians(constStrategy.sky);
-        }
-
-        // getConstraintsEditorOutputService - service call  is done for getting updated blueprint id
-        const bluePrintValue = await ScheduleService.getConstraintsEditorOutputService(id);
-        // setConstraintsEditorOutputService - service call  is done for upddating the  blueprint object
-        bluePrintValue.scheduling_constraints_doc = constStrategy;
-        const updatedResponse = await ScheduleService.setConstraintsEditorOutputService(bluePrintValue);
-
-        /*
-        *  updating  suBlueprints value with current object
-        *  Currently setConstraintsEditorOutputService with not updating current values
-        */
-        if (updatedResponse.hasOwnProperty('data')) {
-            const updateStateVal = await Object.assign([], this.state.suBlueprints);
-            updateStateVal.map((updateConstraints) => {
-                if (updateConstraints.id === id) {
-                    updateConstraints.scheduling_constraints_doc = updatedResponse.data.scheduling_constraints_doc;
-                }
-                return updateConstraints;
-            });
-            this.setState({
-                suBlueprints: updateStateVal,
-                openEditConstraintDialog: false,
-                result: false,
-                onSavedisable: true
-            });
-            this.updateSchedulingUnit(this.state.selectedItem.suId)
-        } else {
-            appGrowl.show({severity: 'error', summary: 'Error', detail: updatedResponse.message});
-        }
-    }
-
-    /*
-    *  to toggle the popup open and close
-    */
-    editConstraint(val) {
-        if (val === false) {
-            this.setState({
-                openEditConstraintDialog: val,
-                cancelStatus: false,
-                onSavedisable: true
-            });
-        } else {
-            this.setState({
-                openEditConstraintDialog: val,
-                cancelStatus: false,
-                onSavedisable: false
-            });
-        }
-    }
-
-    /* To close Pop-up */
-    onclosepopup() {
-        this.close = this.close.bind(this);
-        this.getDSStatus = this.getDSStatus.bind(this);
-        this.updateDSStatus = this.updateDSStatus.bind(this);
-    }
-
-    async componentDidMount() {
-        this.getDSStatus();
-        this.getStatusList();
-        this.getTaskTypeList();
-        const permission = await AuthUtil.getUserRolePermission();
-        const timelinePermission = permission.userRolePermission.timeline;
-        const weekviewPermission = permission.userRolePermission.weekoverview;
-        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')
-                }
-            },
-            {
-                label: 'Add System Event', icon: "fa fa-", disabled: !timelinePermission.addsystemevent,
-                command: (e) => {
-                    this.selectOptionMenu(e, 'Add System Event')
-                }
-            },
-            {
-                label: 'System Issues', icon: "fa fa-", disabled: !timelinePermission.listsystemevent,
-                command: (e) => {
-                    this.selectOptionMenu(e, 'System Issues')
-                }
-            },
-        ]
-        this.setState({menuOptions: menuOptions, userPermission: weekviewPermission});
-
-        let weekDay = this.timelineUIAttributes.weekDay;
-        if (weekDay) {
-            weekDay = moment.utc(moment(weekDay).format("YYYY-MM-DD"));
-        }
-        const currentUTC = moment.utc(await UtilService.getUTC());
-        const startDay = weekDay ? weekDay.clone() : moment.utc();
-        const showCustomDate = this.timelineUIAttributes['showCustomDate'] || false;
-        const defaultStartTime = showCustomDate ? startDay.clone().hour(0).minutes(0).seconds(0) : startDay.day(-2).hour(0).minutes(0).seconds(0);
-        const endDay = defaultStartTime.clone();
-        const defaultEndTime = endDay.add(10, 'days').hour(23).minutes(59).seconds(59);
-
-        // Fetch all details from server and prepare data to pass to timeline and table components
-        let group = [], items = [];
-        for (const count of _.range(11)) {
-            const groupDate = defaultStartTime.clone().add(count, 'days');
-            group.push({
-                'id': groupDate.format("MMM DD ddd"),
-                title: groupDate.format("MMM DD  - ddd"),
-                value: groupDate
-            });
-        }
-        this.setState({
-            suBlueprints: [], suBlueprintList: [],
-            unschedulableList: [],
-            group: _.sortBy(group, ['value']),
-            items: items, currentUTC: currentUTC, isLoading: false,
-            startTime: defaultStartTime, endTime: defaultEndTime, weekDay: weekDay,
-            isFetchingData: true
-        });
-        const unschedulableList = await this.getUnschedulableUnits();
-        // Get all scheduling constraint templates
-        ScheduleService.getSchedulingConstraintTemplates()
-            .then(suConstraintTemplates => {
-                this.suConstraintTemplates = suConstraintTemplates;
-            });
-        this.setState({
-            unschedulableList: unschedulableList
-        });
-        let updatedItemGroupData = await this.dateRangeCallback(defaultStartTime, defaultEndTime, true, weekDay);
-        this.timeline.updateTimeline(updatedItemGroupData);
-    }
-
-    /**
-     * Function to get only the data for the visible timeline first and the offset data in the background.
-     * @param {moment} startTime - start time of the visible timeline
-     * @param {moment} endTime  - end time of the visible timeline
-     * @returns Object with original SUBs, formatted SUBs, dataset start and end time properties.
-     */
-    async getSchedulingUnits(startTime, endTime) {
-        let {datasetStartTime, datasetEndTime, suBlueprints, suBlueprintList} = this.state;
-        let schedulingUnits = {original: suBlueprints};
-        // Initial loading of data. Fetches only the data for the visible timeline.
-        if (!datasetStartTime) {
-            schedulingUnits = await this.loadSchedulingUnits(startTime, endTime);
-            datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-            datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-            schedulingUnits.datasetStartTime = datasetStartTime;
-            schedulingUnits.datasetEndTime = datasetEndTime;
-            // Loads the offset data in the background
-            this.loadSUsAheadAndTrail(datasetStartTime, datasetEndTime, startTime, endTime);
-        } else if (startTime.isSameOrBefore(datasetStartTime) && datasetStartTime.diff(startTime) !== 0) {
-            // If the new timeline start time is before the existing dataset start time, 
-            // load only the SUBS between the new start time and old dataset start time
-            if (endTime.isSameOrAfter(datasetStartTime)) {
-                schedulingUnits = await this.loadSchedulingUnits(startTime, datasetStartTime);
-                endTime = datasetEndTime;
-            } else {
-                schedulingUnits = await this.loadSchedulingUnits(startTime, endTime);
-                datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-            }
-            datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-            schedulingUnits.datasetStartTime = datasetStartTime;
-            schedulingUnits.datasetEndTime = datasetEndTime;
-            // Loads the offset data in the background
-            this.loadSUsAheadAndTrail(datasetStartTime, datasetEndTime, startTime, endTime);
-        } else if (endTime.isSameOrAfter(datasetEndTime) && datasetEndTime.diff(endTime) !== 0) {
-            // If the new timeline end time is after the existing dataset end time, 
-            // load only the SUBS between the new end time and old dataset end time
-            if (startTime.isSameOrAfter(datasetEndTime)) {
-                schedulingUnits = await this.loadSchedulingUnits(startTime, endTime);
-                datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-            } else {
-                schedulingUnits = await this.loadSchedulingUnits(datasetEndTime, endTime);
-                startTime = datasetStartTime;
-            }
-            datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-            schedulingUnits.datasetStartTime = datasetStartTime;
-            schedulingUnits.datasetEndTime = datasetEndTime;
-            // Loads the offset data in the background
-            this.loadSUsAheadAndTrail(datasetStartTime, datasetEndTime, startTime, endTime);
-        } else {  // When timeline range or zoom level changes
-            // If the new timeline start time is before the existing dataset start time, 
-            // load only the SUBS between the new start time and old dataset start time
-            if (startTime.isSameOrBefore(datasetStartTime) && startTime.diff(datasetStartTime) !== 0) {
-                const frontFillSUs = await this.loadSchedulingUnits(startTime, datasetStartTime);
-                suBlueprints = suBlueprints.concat(frontFillSUs.original);
-                suBlueprintList = suBlueprintList.concat(frontFillSUs.formatted);
-                datasetStartTime = startTime.clone().add(-1 * OFFSET_DATA_DAYS, 'days');
-                schedulingUnits.datasetStartTime = datasetStartTime;
-                schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-                schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-                // Loads the offset data before the new start time in the background
-                this.loadSUsAheadAndTrail(datasetStartTime, null, startTime, null);
-            }
-            // If the new timeline end time is after the existing dataset end time, 
-            // load only the SUBS between the new end time and old dataset end time
-            if (endTime.isSameOrAfter(datasetEndTime) && endTime.diff(datasetEndTime) !== 0) {
-                const trailFillSUs = await this.loadSchedulingUnits(endTime, datasetEndTime);
-                suBlueprints = suBlueprints.concat(trailFillSUs.original);
-                suBlueprintList = suBlueprintList.concat(trailFillSUs.formatted);
-                datasetEndTime = endTime.clone().add(OFFSET_DATA_DAYS, 'days');
-                schedulingUnits.datasetEndTime = datasetEndTime;
-                schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-                schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-                // Loads the offset data after the new end time in the background
-                this.loadSUsAheadAndTrail(null, datasetEndTime, null, endTime);
-            }
-        }
-        suBlueprints = suBlueprints.concat(schedulingUnits.original);
-        suBlueprintList = suBlueprintList.concat(schedulingUnits.formatted);
-        schedulingUnits.original = _.uniqBy(suBlueprints, 'id');
-        schedulingUnits.formatted = _.uniqBy(suBlueprintList, 'id');
-        // Add dummy variables start_time and stop_time to minimize code changes and switch between different flavours
-        _.map(schedulingUnits.original, su => {
-            su.start_time = this.state.onSkyViewToggle ? su.on_sky_start_time : (su.process_start_time || su.on_sky_start_time);
-            su.stop_time = this.state.onSkyViewToggle ? su.on_sky_stop_time : (su.process_stop_time || su.on_sky_stop_time);
-            _.map(su.task_blueprints, taskBp => {
-                taskBp.start_time = this.state.onSkyViewToggle ? taskBp.on_sky_start_time : (taskBp.process_start_time || taskBp.on_sky_start_time);
-                taskBp.stop_time = this.state.onSkyViewToggle ? taskBp.on_sky_stop_time : (taskBp.process_stop_time || taskBp.on_sky_stop_time);
-                return taskBp;
-            });
-            return su;
-        });
-        // Returning the data for the timeline only or the existing data.
-        return schedulingUnits;
-    }
-
-    /**
-     * Function to load the data before and after the timeline with an offset period in the background.
-     * This improves the performance in rendering the timeline.
-     * @param {moment} datasetStartTime - start time of the dataset to be loaded
-     * @param {moment} datasetEndTime - end time of the dataset to be loaded
-     * @param {moment} startTime - start time visible in the timeline
-     * @param {moment} endTime - end time visible in the timeline
-     */
-    async loadSUsAheadAndTrail(datasetStartTime, datasetEndTime, startTime, endTime) {
-        let suBlueprints = null;
-        let suBlueprintList = null;
-        // Load the SUBs from the dataset start time to timeline start time and concat to existing SUBs
-        if (datasetStartTime && startTime.diff(datasetStartTime, 'seconds') > 0) {
-            const susAhead = await this.loadSchedulingUnits(datasetStartTime, startTime);
-            suBlueprints = this.state.suBlueprints.concat(susAhead.original);
-            suBlueprintList = this.state.suBlueprintList.concat(susAhead.formatted);
-        }
-        // Load the SUBs from the timeline end time to dataset end time and concat to existing SUBs
-        if (datasetEndTime && datasetEndTime.diff(endTime, 'seconds') > 0) {
-            const susTrail = await this.loadSchedulingUnits(endTime, datasetEndTime);
-            suBlueprints = suBlueprints || this.state.suBlueprints;
-            suBlueprintList = suBlueprintList || this.state.suBlueprintList;
-            suBlueprints = suBlueprints.concat(susTrail.original);
-            suBlueprintList = suBlueprintList.concat(susTrail.formatted);
-        }
-        this.setState({
-            suBlueprints: _.uniqBy(suBlueprints, 'id'),
-            suBlueprintList: _.uniqBy(suBlueprintList, 'id'),
-            datasetStartTime: datasetStartTime,
-            datasetEndTime: datasetEndTime
-        });
-    }
-
-    /**
-     * Fetches the SUBs with either start time or end time in the time range and formats as required for the table.
-     * @param {moment} startTime - start time from which SUBs should be loaded
-     * @param {moment} endTime - end time till which SUBs should be loaded
-     * @returns - Object with both original SUBs from backend and formatted SUBs for table list.
-     */
-    async loadSchedulingUnits(startTime, endTime) {
-        let suList = [];
-        ReservationService.getTimelineReservations(startTime.format(UIConstants.CALENDAR_DATETIME_FORMAT),
-            endTime.format(UIConstants.CALENDAR_DATETIME_FORMAT))
-            .then(reservations => {
-                this.reservations = _.uniqBy(this.reservations.concat(reservations), 'id');
-            });
-        let suBlueprints = await ScheduleService.getExpandedSUList(startTime.format(UIConstants.CALENDAR_DATETIME_FORMAT),
-            endTime.format(UIConstants.CALENDAR_DATETIME_FORMAT));
-        suBlueprints = _.filter(suBlueprints, suBlueprint => suBlueprint.status.toLowerCase !== 'obsolete');
-        const suIds = _.map(suBlueprints, 'id');
-        let workflows = await this.timelineCommonUtils.getWorkflowsAndTasks(suIds);
-        for (let suBlueprint of suBlueprints) {
-            suBlueprint['actionpath'] = `/schedulingunit/view/blueprint/${suBlueprint.id}`;
-            suBlueprint.suDraft = suBlueprint.draft;
-            suBlueprint.project = suBlueprint.draft.scheduling_set.project.name;
-            suBlueprint.project_rank = suBlueprint.draft.scheduling_set.project.rank;
-            suBlueprint.suSet = suBlueprint.draft.scheduling_set;
-            suBlueprint.durationInSec = suBlueprint.duration;
-            suBlueprint.duration = UnitConverter.getSecsToHHmmss(suBlueprint.duration);
-            const workflowDetails = this.timelineCommonUtils.getWorkflowDetails(workflows, suBlueprint.id);
-            suBlueprint.workflowStatus = workflowDetails.status;
-            suBlueprint.task_content = "";
-            suBlueprint.observ_template_name = suBlueprint.draft.observation_strategy_template ? suBlueprint.draft.observation_strategy_template.name : null;
-            suBlueprint.tasks = suBlueprint.task_blueprints;
-            const itemStations = this.timelineCommonUtils.getSUStations(suBlueprint);
-            suBlueprint.stationGroupCount = this.timelineCommonUtils.getSUStationGroupCount(itemStations).counts;
-            // Add Subtask Id as control id for task if subtask is primary. Also add antenna_set & band prpoerties to the task object.
-            for (let task of suBlueprint.tasks) {
-                const controlTask = _.find(task.subtasks, subtask => {
-                    return subtask.primary
-                });
-                task.controlId = controlTask ? controlTask.id : "";
-                if (task.task_type.toLowerCase() === "observation") {
-                    task.antenna_set = task.specifications_doc.station_configuration?.antenna_set;
-                    task.band = task.specifications_doc.station_configuration?.filter;
-                }
-            }
-            // Get stations involved for this SUB
-            let stations = this.timelineCommonUtils.getSUStations(suBlueprint);
-            suBlueprint.stations = _.uniq(stations);
-            // suList.push(suBlueprint);
-        }
-        return {original: suBlueprints, formatted: suList};
-    }
-
-    /**
-     * Formatting data for the table
-     * @returns list of formatted unschedulable SU for table
-     */
-    async getUnschedulableUnits() {
-        let unschedulableBlueprints = await ScheduleService.getSchedulingListByStatus('unschedulable');
-        const suIds = _.map(unschedulableBlueprints, 'id');
-        let workflows = await this.timelineCommonUtils.getWorkflowsAndTasks(suIds);
-        for (let unschedulableBlueprint of unschedulableBlueprints) {
-            this.timelineCommonUtils.formatUnschedulableSUB(unschedulableBlueprint, workflows);
-        }
-        return unschedulableBlueprints;
-    }
-
-    /**
-     * Callback function to pass to Timeline component for item click.
-     * @param {Object} item
-     */
-    onItemClick(item) {
-        if (item.type === "UNSCHEDULABLE") {
-            let itemClicked = _.clone(item)
-            itemClicked.id = item.id + '-'
-            this.showSUSummary(itemClicked, this.state.unschedulableList, false);
-        } else if (item.type === "RESERVATION") {
-            this.showReservationSummary(item);
-        } else if (item.type === "SCHEDULE") {
-            this.showSUSummary(item, this.state.suBlueprintList, true);
-        } else {
-            this.showTaskSummary(item);
-        }
-    }
-
-    /**
-     * To load SU summary and show
-     * @param {Object} item -  SU item object.
-     * @param {Array} blueprintList - List of blueprints based on the item type clicked
-     * @param {Boolean} isSchedulable - To check if selected item is unschedulable or not
-     */
-    async showSUSummary(item, blueprintList, isSchedulable) {
-        if (this.state.isSUDetsVisible && item.id === this.state.selectedItem.id) {
-            this.closeSUDets();
-        } else {
-            const fetchDetails = !this.state.selectedItem || item.id !== this.state.selectedItem.id
-            if (!isSchedulable && !item.suId) {
-                item.suId = item.id.replaceAll("-", "");
-            }
-            this.setState({
-                isSchedulable: isSchedulable,
-                selectedItem: item, isSUDetsVisible: true, isReservDetsVisible: false,
-                isSummaryLoading: fetchDetails,
-                suTaskList: !fetchDetails ? this.state.suTaskList : [],
-                canExtendSUList: false, canShrinkSUList: false
-            });
-            if (fetchDetails) {
-                const suBlueprint = _.find(blueprintList, {id: parseInt(item.id.split('-')[0])});
-                const suConstraintTemplate = _.find(this.suConstraintTemplates, {id: suBlueprint.draft.scheduling_constraints_template_id});
-                let primarySubtasks = [];
-                for (const task of suBlueprint.task_blueprints) {
-                    const subTaskList = (task.subtasks || []).filter(sTask => (sTask.primary && sTask.subtask_type === 'observation'));
-                    primarySubtasks = [...primarySubtasks, ...subTaskList];
-                }
-                let missingStations = [];
-                for (const sTask of primarySubtasks) {
-                    const mStation = await TaskService.getSubtaskMissingStations(sTask.id);
-                    missingStations = [...missingStations, ...mStation];
-                }
-                // remove duplicates, for example when we have multiple subtask observations in one unit
-                missingStations = [...new Set(missingStations)];
-                missingStations.sort();
-
-                /* If tasks are not loaded on component mounting fetch from API */
-                if (suBlueprint.tasks) {
-                    this.setState({
-                        suTaskList: _.sortBy(suBlueprint.tasks, "id"), suConstraintTemplate: suConstraintTemplate,
-                        stationGroup: suBlueprint.stations, isSummaryLoading: false, missingStations: missingStations
-                    });
-                } else {
-                    ScheduleService.getTaskBPWithSubtaskTemplateOfSU(suBlueprint)
-                        .then(taskList => {
-                            for (let task of taskList) {
-                                //Control Task ID
-                                const subTaskIds = (task.subTasks || []).filter(sTask => sTask.primary);
-                                task.controlId = subTaskIds.length ? subTaskIds[0].id : '';
-                                if (task.template.type_value.toLowerCase() === "observation"
-                                    && task.specifications_doc.station_configuration) {
-                                    task.antenna_set = task.specifications_doc.station_configuration.antenna_set;
-                                    task.band = task.specifications_doc.station_configuration.filter;
-                                }
-                            }
-                            this.setState({
-                                suTaskList: _.sortBy(taskList, "id"), isSummaryLoading: false,
-                                stationGroup: this.timelineCommonUtils.getSUStations(suBlueprint),
-                                missingStations: missingStations
-                            });
-                        });
-                }
-            }
-        }
-    }
-
-    /**
-     * To load and show Reservation summary
-     * @param {Object} item
-     */
-    showReservationSummary(item) {
-        this.setState({selectedItem: item, isReservDetsVisible: true, isSUDetsVisible: false});
-    }
-
-    /**
-     * Closes the SU details section
-     */
-    closeSUDets() {
-        const canExtendSUList = this.timelineUIAttributes.canExtendSUList !== undefined ? this.timelineUIAttributes.canExtendSUList : true;
-        const canShrinkSUList = this.timelineUIAttributes.canShrinkSUList || false;
-        this.setState({
-            isSUDetsVisible: false, isReservDetsVisible: false, isUnscheduledDetVisible: false,
-            canExtendSUList: canExtendSUList, canShrinkSUList: canShrinkSUList
-        });
-    }
-
-    /**
-     * Hide Tooltip popover on item mouseout event.
-     * @param {Event} evt
-     */
-    onItemMouseOut(evt) {
-        this.setState({popPosition: {display: 'none'}});
-    }
-
-    /**
-     * Show Tooltip popover on item mouseover event. Item & SU content formatted to show in Popover.
-     * @param {Event} evt
-     * @param {Object} item
-     */
-    onItemMouseOver(evt, item) {
-        let popPosition = {
-            display: "block",
-            left: `${evt.pageX + 400 > window.innerWidth ? evt.pageX - 400 : evt.pageX + 20}px`
-        };
-        if (evt.clientY > window.screen.height / 2) {
-            popPosition.bottom = `${evt.clientY - evt.pageY + 30}px`;
-        } else {
-            popPosition.top = `${evt.pageY}px`;
-        }
-        if (item.type === "SCHEDULE") {
-            const itemSU = _.find(this.state.suBlueprints, {id: parseInt(item.id.split("-")[0])});
-            item.suStartTime = moment.utc(itemSU.start_time);
-            item.suStopTime = moment.utc(itemSU.stop_time);
-            item.stations = this.timelineCommonUtils.getSUStationGroupCount(itemSU.stations);
-        } else {
-            const reservation = _.find(this.reservations, {'id': parseInt(item.id.split("-")[1])});
-            const reservStations = reservation.specifications_doc.resources.stations;
-            // const reservStationGroups = this.groupSUStations(reservStations);
-            item.name = reservation.name;
-            item.contact = reservation.specifications_doc.activity.contact
-            item.activity_type = reservation.specifications_doc.activity.type;
-            item.stations = reservStations.length > 3 ? this.timelineCommonUtils.getSUStationGroupCount(reservStations) : _.toString(reservStations);
-            item.planned = reservation.specifications_doc.activity.planned;
-            item.displayStartTime = moment.utc(reservation.start_time);
-            item.displayEndTime = reservation.duration ? moment.utc(reservation.stop_time) : null;
-        }
-        this.setState({mouseOverItem: item, popPosition: popPosition});
-    }
-
-    /**
-     * Callback function to pass to timeline component which is called on week change to fetch new item and group records
-     * @param {moment} startTime
-     * @param {moment} endTime
-     * @param {boolean} refreshData - flag to reload the data or filter from existing data
-     * @param {moment} weekDay - Day of the week displayed on the timeline for which all SUs start and end time are set to display in different rows.
-     */
-    async dateRangeCallback(startTime, endTime, refreshData, weekDay) {
-        let suBlueprints = this.state.suBlueprints;
-        let suBlueprintList = [], group = [], items = [];
-        let currentUTC = this.state.currentUTC;
-        if (refreshData) {
-            this.setState({isFetchingData: true});
-            const schedulingUnits = await this.getSchedulingUnits(startTime, endTime);
-            suBlueprints = schedulingUnits.original;
-            for (const count of _.range(11)) {
-                const groupDate = startTime.clone().add(count, 'days');
-                group.push({
-                    'id': groupDate.format("MMM DD ddd"),
-                    title: groupDate.format("MMM DD  - ddd"),
-                    value: groupDate
-                });
-            }
-            let direction = startTime.week() - this.state.startTime.week();
-            currentUTC = this.state.currentUTC.clone().add(direction * 7, 'days');
-            weekDay = weekDay || currentUTC;
-            if (startTime && endTime) {
-                const filteredSUBs = this.filteredSUBs || _.map(suBlueprints, "id");
-                for (const suBlueprint of suBlueprints) {
-                    if ((moment.utc(suBlueprint.start_time).isBetween(startTime, endTime)
-                        || moment.utc(suBlueprint.stop_time).isBetween(startTime, endTime)
-                        || (moment.utc(suBlueprint.start_time).isSameOrBefore(startTime, endTime) &&
-                            moment.utc(suBlueprint.stop_time).isSameOrAfter(startTime, endTime)))
-                    ) {
-                        suBlueprintList.push(suBlueprint);
-                        if (_.includes(filteredSUBs, suBlueprint.id)) {
-                            const suStartTime = moment.utc(suBlueprint.start_time);
-                            const suEndTime = moment.utc(suBlueprint.stop_time);
-                            if (suStartTime.format("MM-DD-YYYY") !== suEndTime.format("MM-DD-YYYY")) {
-                                let suBlueprintStart = _.cloneDeep(suBlueprint);
-                                let suBlueprintEnd = _.cloneDeep(suBlueprint);
-                                suBlueprintStart.stop_time = suStartTime.hour(23).minutes(59).seconds(59).format('YYYY-MM-DDTHH:mm:ss.00000');
-                                suBlueprintEnd.start_time = suEndTime.hour(0).minutes(0).seconds(0).format('YYYY-MM-DDTHH:mm:ss.00000');
-                                items.push(getTimelineItem(suBlueprintStart, weekDay));
-                                items.push(getTimelineItem(suBlueprintEnd, weekDay));
-
-                            } else {
-                                items.push(getTimelineItem(suBlueprint, weekDay));
-                            }
-                        }
-                    }
-                }
-                if (this.state.reservationsViewToggle) {
-                    items = this.addWeekReservations(items, startTime, endTime, weekDay);
-                }
-            } else {
-                suBlueprintList = _.clone(this.state.suBlueprints);
-                group = this.state.group;
-                items = this.state.items;
-            }
-            this.setState({
-                suBlueprints: suBlueprints,
-                suBlueprintList: _.filter(suBlueprintList, (suBlueprint) => {
-                    return suBlueprint.start_time != null
-                }),
-                group: group,
-                items: items,
-                currentUTC: currentUTC,
-                startTime: startTime,
-                endTime: endTime,
-                weekDay: weekDay,
-                isFetchingData: false
-            });
-            if (!this.state.datasetStartTime) {
-                this.setState({
-                    datasetStartTime: schedulingUnits.datasetStartTime,
-                    datasetEndTime: schedulingUnits.datasetEndTime,
-                });
-            }
-            // On range change close the Details pane
-            // this.closeSUDets();
-        } else {
-            group = this.state.group;
-            items = this.state.items;
-        }
-        return {group: group, items: items};
-    }
-
-    /**
-     * Function to store the Last UI option atrributes as preference to consider while loading the page.
-     */
-    storeUIAttributes() {
-        UtilService.localStore({type: 'set', key: 'TIMELINE_UI_ATTR', value: this.timelineUIAttributes});
-    }
-
-    /**
-     * Function to show or hide the List panel.
-     * @param {boolean} value
-     */
-    showListPanel(value) {
-        this.timelineUIAttributes = {...this.timelineUIAttributes, ...{isSUListVisible: value}};
-        this.storeUIAttributes();
-        this.setState({isSUListVisible: value});
-    }
-
-    showLegend(value) {
-        this.timelineUIAttributes = {...this.timelineUIAttributes, ...{isLegendVisible: value}};
-        this.storeUIAttributes();
-        this.setState({isLegendVisible: value});
-    }
-
-
-    /**
-     * Function called to shrink or expand the SU list section width
-     * @param {number} step - (-1) to shrink and (+1) to expand
-     */
-    resizeSUList(step) {
-        let canExtendSUList = this.state.canExtendSUList;
-        let canShrinkSUList = this.state.canShrinkSUList;
-        if (step === 1) {
-            // Can Extend when fully shrunk and still extendable
-            canExtendSUList = (!canShrinkSUList && canExtendSUList) ? true : false;
-            canShrinkSUList = true;
-        } else {
-            // Can Shrink when fully extended and still shrinkable
-            canShrinkSUList = (canShrinkSUList && !canExtendSUList) ? true : false;
-            canExtendSUList = true;
-        }
-        this.timelineUIAttributes = {
-            ...this.timelineUIAttributes,
-            ...{
-                canExtendSUList: canExtendSUList,
-                canShrinkSUList: canShrinkSUList
-            }
-        };
-        this.storeUIAttributes();
-        this.setState({canExtendSUList: canExtendSUList, canShrinkSUList: canShrinkSUList});
-    }
-
-    /**
-     * Callback function to pass to the list tab component to pass back filtered data from the tables.
-     * Updates the timeline with filtered SU and reservation blocks.
-     * @param {Array} filteredSUData
-     * @param {Array} filteredTaskData
-     * @param {Array} filteredReservData
-     */
-    async suListFilterCallback(filteredSUData, filteredTaskData, filteredReservData) {
-        let currentUTC = this.state.currentUTC;
-        const suFilters = _.map(filteredSUData, data => parseInt(data.Id));
-        if (this.state.datasetStartTime && filteredSUData) {
-            this.filteredSUBs = _.map(filteredSUData, "Id");
-        }
-        let items = [];
-        const startTime = this.state.startTime;
-        const endTime = this.state.endTime;
-        const suBlueprints = this.state.suBlueprints;
-        const weekDay = this.state.weekDay || currentUTC;
-        for (const suBlueprint of suBlueprints) {
-            if ((moment.utc(suBlueprint.start_time).isBetween(startTime, endTime)
-                    || moment.utc(suBlueprint.stop_time).isBetween(startTime, endTime)
-                    || (moment.utc(suBlueprint.start_time).isSameOrBefore(startTime, endTime) &&
-                        moment.utc(suBlueprint.stop_time).isSameOrAfter(startTime, endTime)))
-                && (suFilters.indexOf(suBlueprint.id) >= 0)
-            ) {
-                const suStartTime = moment.utc(suBlueprint.start_time);
-                const suEndTime = moment.utc(suBlueprint.stop_time);
-                if (suStartTime.format("MM-DD-YYYY") !== suEndTime.format("MM-DD-YYYY")) {
-                    let suBlueprintStart = _.cloneDeep(suBlueprint);
-                    let suBlueprintEnd = _.cloneDeep(suBlueprint);
-                    suBlueprintStart.stop_time = suStartTime.hour(23).minutes(59).seconds(59).format('YYYY-MM-DDTHH:mm:ss.00000');
-                    suBlueprintEnd.start_time = suEndTime.hour(0).minutes(0).seconds(0).format('YYYY-MM-DDTHH:mm:ss.00000');
-                    items.push(getTimelineItem(suBlueprint, weekDay))
-
-                } else {
-                    items.push(getTimelineItem(suBlueprint, weekDay));
-                }
-            }
-        }
-
-        if (this.state.reservationsViewToggle) {
-            items = this.addWeekReservations(items, startTime, endTime, weekDay, filteredReservData);
-        }
-        if (this.timeline) {
-            this.timeline.updateTimeline({group: this.state.group, items: items});
-        }
-    }
-
-    filterByProject(project) {
-        this.setState({selectedProject: project});
-    }
-
-    showOptionMenu(event) {
-        this.optionsMenu.toggle(event);
-    }
-
-    selectOptionMenu(e, menuName) {
-        switch (menuName) {
-            case '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': {
-                if (e.originalEvent.ctrlKey) {
-                    window.open('/reservation/create', '_blank');
-                } else {
-                    this.props.history.push('/reservation/create')
-                    this.setState({redirect: `/reservation/create`});
-                }
-                break;
-            }
-            case 'System Issues': {
-                if (e.originalEvent.ctrlKey) {
-                    window.open('/systemevent/list', '_blank');
-                } else {
-                    this.props.history.push('/systemevent/list');
-                    this.setState({redirect: `/systemevent/list`});
-                }
-                break;
-            }
-            case 'Add System Event': {
-                if (e.originalEvent.ctrlKey) {
-                    window.open('/systemevent/create', '_blank');
-                } else {
-                    this.props.history.push('/systemevent/create')
-                    this.setState({redirect: `/systemevent/create`});
-                }
-                break;
-            }
-            default: {
-                break;
-            }
-        }
-    }
-
-    /**
-     * Function to call wnen websocket is connected
-     */
-    onConnect() {
-        console.log("WS Opened");
-        const userDets = localStorage.getItem("user");
-        if (userDets) {
-            this.websocket.sendMessage(JSON.stringify({"token": JSON.parse(userDets).websocket_token}));
-            console.log("Auth token submitted");
-        }
-    }
-
-    /**
-     * Function to call when websocket is disconnected
-     */
-    onDisconnect() {
-        console.log("WS Closed")
-    }
-
-    /**
-     * Handles the message received through websocket
-     * @param {String} data - String of JSON data
-     */
-    handleData(data) {
-        if (data) {
-            console.log('received websocket data:', data)
-            const jsonData = JSON.parse(data);
-            if (jsonData.action === 'create') {
-                this.addNewData(jsonData.object_details.id, jsonData.object_type, jsonData.object_details);
-            } else if (jsonData.action === 'update') {
-                this.updateExistingData(jsonData.object_details.id ? jsonData.object_details.id : '', jsonData.object_type, jsonData.object_details);
-            } else if (jsonData.action === 'delete') {
-                this.deleteExistingData(jsonData.object_details.id, jsonData.object_type);
-            }
-        }
-    }
-
-    /**
-     * If any new object that is relevant to the timeline view, load the data to the existing state variable.
-     * @param {Number} id  - id of the object created
-     * @param {String} type  - model name of the object like scheduling_unit_draft, scheduling_unit_blueprint, task_blueprint, etc.,
-     * @param {Object} object - model object with certain properties
-     */
-    addNewData(id, type, object) {
-        switch (type) {
-            /* When a new scheduling_unit_draft is created, it should be added to the existing list of suDraft. */
-            // case 'scheduling_unit_draft': {
-            //     let suDrafts = this.state.suDrafts;
-            //     let suSets = this.state.suSets;
-            //     ScheduleService.getSchedulingUnitDraftById(id)
-            //         .then(suDraft => {
-            //             suDrafts.push(suDraft);
-            //             _.remove(suSets, function (suSet) { return suSet.id === suDraft.scheduling_set_id });
-            //             suSets.push(suDraft.scheduling_set_object);
-            //             this.setState({ suSet: suSets, suDrafts: suDrafts });
-            //         });
-            //     break;
-            // }
-            case 'scheduling_unit_blueprint': {
-                this.updateSchedulingUnit(id);
-                break;
-            }
-            case 'task_blueprint': {
-                // this.updateSchedulingUnit(object.scheduling_unit_blueprint_id);
-                break;
-            }
-            case 'reservation': {
-                ReservationService.getReservation(id).then(async (reservation) => {
-                    this.reservations.push(reservation);
-                    let updatedItemGroupData = await this.dateRangeCallback(this.state.startTime, this.state.endTime, true, this.state.weekDay);
-                    this.timeline.updateTimeline(updatedItemGroupData);
-                });
-                break;
-            }
-            default: {
-                break;
-            }
-        }
-    }
-
-    /**
-     * If any if the given properties of the object is modified, update the schedulingUnit object in the list of the state.
-     * It is validated for both scheduling_unit_blueprint and task_blueprint objects
-     * @param {Number} id
-     * @param {String} type
-     * @param {Object} object
-     */
-    updateExistingData(id, type, object) {
-        const objectProps = ['status', 'start_time', 'stop_time', 'duration'];
-        switch (type) {
-            case 'scheduling_unit_blueprint': {
-                let suBlueprints = this.state.suBlueprints;
-                let existingSUB = _.find(suBlueprints, ['id', id]);
-                if (Validator.isObjectModified(existingSUB, object, objectProps)) {
-                    this.updateSchedulingUnit(id);
-                }
-                break;
-            }
-            case 'subsystem': {
-                let subSystemStatus = this.state.subSystemStatus;
-                subSystemStatus = object.status_value === 'active' ? true : false
-                this.setState({subSystemStatus: subSystemStatus})
-                break;
-            }
-            case 'task_blueprint': {
-                // let suBlueprints = this.state.suBlueprints;
-                // let existingSUB = _.find(suBlueprints, ['id', object.scheduling_unit_blueprint_id]);
-                // let existingTask = _.find(existingSUB.tasks, ['id', id]);
-                // if (Validator.isObjectModified(existingTask, object, objectProps)) {
-                //     this.updateSchedulingUnit(object.scheduling_unit_blueprint_id);
-                // }
-                break;
-            }
-            case 'reservation': {
-                ReservationService.getReservation(id).then(async (reservation) => {
-                    _.remove(this.reservations, function (res) {
-                        return res.id === reservation.id
-                    });
-                    this.reservations.push(reservation);
-                    let updatedItemGroupData = await this.dateRangeCallback(this.state.startTime, this.state.endTime, true, this.state.weekDay);
-                    this.timeline.updateTimeline(updatedItemGroupData);
-                });
-                break;
-            }
-            default: {
-                break;
-            }
-        }
-    }
-
-    /**
-     * Delete existing data from the list
-     */
-    async deleteExistingData(id, type) {
-        switch (type) {
-            case 'reservation' : {
-                _.remove(this.reservations, function (reservation) {
-                    return reservation.id === id
-                });
-                let updatedItemGroupData = await this.dateRangeCallback(this.state.startTime, this.state.endTime, true, this.state.weekDay);
-                this.timeline.updateTimeline(updatedItemGroupData);
-                break;
-            }
-            default: {
-                break;
-            }
-        }
-    }
-
-    /**
-     * Fetch the latest SUB object from the backend and format as required for the timeline and pass them to the timeline component
-     * to update the timeline view with latest data.
-     * @param {Number} id
-     */
-    async updateSchedulingUnit(id) {
-        ScheduleService.getExpandedSUB(id)
-            .then(async (suBlueprint) => {
-                let workflows = await this.timelineCommonUtils.getWorkflowsAndTasks([id]);
-                let unschedulableList = this.state.unschedulableList;
-                // If the SUB status is changed to Unschedulable, add/update it to the unschedulable list
-                if (suBlueprint.status === "unschedulable") {
-                    let unscedulableSUB = this.formatUnschedulableSUB(_.cloneDeep(suBlueprint), workflows);
-                    let subIndex = _.findIndex(unschedulableList, sub => sub.id === unscedulableSUB.id);
-                    if (subIndex >= 0) {
-                        unschedulableList[subIndex] = unscedulableSUB;
-                    } else {
-                        unschedulableList.push(unscedulableSUB);
-                    }
-                } else {  // If the SUB status is changed from unschedulable to others, remove it from the unschedulable list
-                    let subIndex = _.findIndex(unschedulableList, sub => sub.id === suBlueprint.id);
-                    if (subIndex >= 0) {
-                        _.remove(unschedulableList, sub => sub.id === suBlueprint.id);
-                    }
-                }
-                let suBlueprints = this.state.suBlueprints;
-                suBlueprint['actionpath'] = `/schedulingunit/view/blueprint/${id}`;
-                suBlueprint.suDraft = suBlueprint.draft;
-                suBlueprint.project = suBlueprint.draft.scheduling_set.project.name;
-                suBlueprint.project_rank = suBlueprint.draft.scheduling_set.project.rank;
-                suBlueprint.suSet = suBlueprint.draft.scheduling_set;
-                suBlueprint.durationInSec = suBlueprint.duration;
-                suBlueprint.duration = UnitConverter.getSecsToHHmmss(suBlueprint.duration);
-                const workflowDetails = this.timelineCommonUtils.getWorkflowDetails(workflows, suBlueprint.id);
-                suBlueprint.workflowStatus = workflowDetails.status;
-                suBlueprint.task_content = "";
-                suBlueprint.observ_template_name = suBlueprint.draft.observation_strategy_template ? suBlueprint.draft.observation_strategy_template.name : null;
-                suBlueprint.tasks = suBlueprint.task_blueprints;
-                const itemStations = this.timelineCommonUtils.getSUStations(suBlueprint);
-                suBlueprint.stationGroupCount = this.timelineCommonUtils.getSUStationGroupCount(itemStations).counts;
-                // Add Subtask Id as control id for task if subtask type us control. Also add antenna_set & band prpoerties to the task object.
-                for (let task of suBlueprint.tasks) {
-                    const controlTask = _.find(task.subtasks, subtask => {
-                        return subtask.primary
-                    });
-                    task.controlId = controlTask ? controlTask.id : "";
-                    if (task.task_type.toLowerCase() === "observation"
-                        && task.specifications_doc.station_configuration) {
-                        task.antenna_set = task.specifications_doc.station_configuration.antenna_set;
-                        task.band = task.specifications_doc.station_configuration.filter;
-                    }
-                }
-                // Get stations involved for this SUB
-                let stations = this.timelineCommonUtils.getSUStations(suBlueprint);
-                suBlueprint.stations = _.uniq(stations);
-                suBlueprint.start_time = this.state.onSkyViewToggle ? suBlueprint.on_sky_start_time : (suBlueprint.process_start_time || suBlueprint.on_sky_start_time);
-                suBlueprint.stop_time = this.state.onSkyViewToggle ? suBlueprint.on_sky_stop_time : (suBlueprint.process_stop_time || suBlueprint.on_sky_stop_time);
-                _.map(suBlueprint.task_blueprints, taskBp => {
-                    taskBp.start_time = this.state.onSkyViewToggle ? taskBp.on_sky_start_time : (taskBp.process_start_time || taskBp.on_sky_start_time);
-                    taskBp.stop_time = this.state.onSkyViewToggle ? taskBp.on_sky_stop_time : (taskBp.process_stop_time || taskBp.on_sky_stop_time);
-                    return taskBp;
-                });
-                // Remove the old SUB object from the existing list and add the newly fetched SUB
-                _.remove(suBlueprints, function (suB) {
-                    return suB.id === id
-                });
-                suBlueprints.push(suBlueprint);
-                this.setState({suBlueprints: suBlueprints, unschedulableList: unschedulableList});
-                // Create timeline group and items
-                let updatedItemGroupData = await this.dateRangeCallback(this.state.startTime, this.state.endTime, true, this.state.weekDay);
-                this.timeline.updateTimeline(updatedItemGroupData);
-            });
-    }
-
-    async setReservationsViewToggle(value) {
-        this.setState({reservationsViewToggle: value});
-        let updatedItemGroupData = await this.dateRangeCallback(this.state.startTime, this.state.endTime, true, this.state.weekDay);
-        this.timeline.updateTimeline(updatedItemGroupData);
-        this.timelineUIAttributes.reservationsViewToggle = value;
-        this.storeUIAttributes();
-    }
-
-    async setOnSkyViewToggle(value) {
-        this.setState({onSkyViewToggle: value});
-        this.timelineUIAttributes['isOnSkyWeekView'] = value;
-        let updatedItemGroupData = await this.dateRangeCallback(this.state.startTime, this.state.endTime, true, this.state.weekDay);
-        updatedItemGroupData.onSkyViewToggle = value
-        this.timeline.updateTimeline(updatedItemGroupData);
-        this.storeUIAttributes();
-    }
-
-    /**
-     * Add Week Reservations during the visible timeline period
-     * @param {Array} items
-     * @param {moment} startTime
-     * @param {moment} endTime
-     */
-    addWeekReservations(items, startTime, endTime, currentUTC, reservFilterData) {
-        let reservations = _.cloneDeep(this.reservations);
-        let filteredReservations = reservFilterData ? _.map(reservFilterData, data => {
-            data.id = data.actionpath.split("view/")[1];
-            return parseInt(data.id);
-        }) : [];
-        for (const reservation of reservations) {
-            const reservationStartTime = moment.utc(reservation.start_time);
-            const reservationEndTime = reservation.duration ? reservationStartTime.clone().add(reservation.duration, 'seconds') : endTime;
-            const reservationSpec = reservation.specifications_doc;
-            if ((reservationStartTime.isSame(startTime)
-                    || reservationStartTime.isSame(endTime)
-                    || reservationStartTime.isBetween(startTime, endTime)
-                    || reservationEndTime.isSame(startTime)
-                    || reservationEndTime.isSame(endTime)
-                    || reservationEndTime.isBetween(startTime, endTime)
-                    || (reservationStartTime.isSameOrBefore(startTime)
-                        && reservationEndTime.isSameOrAfter(endTime)))
-                && (filteredReservations.length === 0 || filteredReservations.indexOf(reservation.id) >= 0)
-                && (this.state.reservationFilter.length === 0 ||                                        // No reservation filter added
-                    this.state.reservationFilter.indexOf(reservationSpec.activity.type) >= 0)) {     // Reservation reason == Filtered reaseon
-                reservation.stop_time = reservationEndTime;
-                let splitReservations = this.splitReservations(reservation, startTime, endTime, currentUTC);
-                for (const splitReservation of splitReservations) {
-                    items.push(this.getReservationItem(splitReservation, currentUTC));
-                }
-
-            }
-        }
-        return items;
-    }
-
-    /**
-     * Function to check if a reservation is for more than a day and split it to multiple objects to display in each day
-     * @param {Object} reservation - Reservation object
-     * @param {moment} startTime - moment object of the start datetime of the week view
-     * @param {moment} endTime  - moment object of the end datetime of the week view
-     * @returns
-     */
-    splitReservations(reservation, startTime, endTime) {
-        const reservationStartTime = moment.utc(reservation.start_time);
-        let weekStartDate = moment(startTime).add(-1, 'day').startOf('day');
-        let weekEndDate = moment(endTime).add(1, 'day').startOf('day');
-        let splitReservations = [];
-        while (weekStartDate.add(1, 'days').diff(weekEndDate) < 0) {
-            const dayStart = weekStartDate.clone().startOf('day');
-            const dayEnd = weekStartDate.clone().endOf('day');
-            let splitReservation = null;
-            if (reservationStartTime.isSameOrBefore(dayStart) &&
-                (reservation.stop_time.isBetween(dayStart, dayEnd) ||
-                    reservation.stop_time.isSameOrAfter(dayEnd))) {
-                splitReservation = _.cloneDeep(reservation);
-                splitReservation.start_time = moment.utc(dayStart.format("YYYY-MM-DD HH:mm:ss"));
-            } else if (reservationStartTime.isBetween(dayStart, dayEnd)) {
-                splitReservation = _.cloneDeep(reservation);
-                splitReservation.start_time = reservationStartTime;
-            }
-            if (splitReservation) {
-                if (!reservation.stop_time || reservation.stop_time.isSameOrAfter(dayEnd)) {
-                    splitReservation.end_time = weekStartDate.clone().hour(23).minute(59).seconds(59);
-                } else if (reservation.stop_time.isSameOrBefore(dayEnd)) {
-                    splitReservation.end_time = weekStartDate.clone().hour(reservation.stop_time.hours()).minutes(reservation.stop_time.minutes()).seconds(reservation.stop_time.seconds);
-                }
-                splitReservations.push(splitReservation);
-            }
-        }
-        return splitReservations;
-    }
-
-    /**
-     * Get reservation timeline item. If the reservation doesn't have duration, item endtime should be week endtime.
-     * @param {Object} reservation
-     * @param {moment} endTime
-     */
-    getReservationItem(reservation, displayDate) {
-        const reservationSpec = reservation.specifications_doc;
-        const group = moment.utc(reservation.start_time).format("MMM DD ddd");
-        const blockColor = RESERVATION_COLORS[this.getReservationType(reservationSpec.schedulability)];
-        let item = {
-            id: `Res-${reservation.id}-${group}`,
-            start_time: moment.utc(`${displayDate.format('YYYY-MM-DD')} ${reservation.start_time.format('HH:mm:ss')}`),
-            end_time: moment.utc(`${displayDate.format('YYYY-MM-DD')} ${reservation.end_time.format('HH:mm:ss')}`),
-            name: reservationSpec.activity.type, project: reservation.project_id,
-            group: group,
-            type: 'RESERVATION',
-            actType: `${reservationSpec.activity.type}${reservation.project_id ? ("-" + reservation.project_id) : ""}`,
-            title: '',
-            desc: reservation.description,
-            duration: reservation.duration ? UnitConverter.getSecsToHHmmss(reservation.duration) : "Unknown",
-            bgColor: blockColor.bgColor, selectedBgColor: blockColor.bgColor, color: blockColor.color
-        };
-        return item;
-    }
-
-    /**
-     * Get the schedule type from the schedulability object. It helps to get colors of the reservation blocks
-     * according to the type.
-     * @param {Object} schedulability
-     */
-    getReservationType(schedulability) {
-        if (schedulability.fixed_time && schedulability.dynamic) {
-            return 'true-true';
-        } else if (!schedulability.fixed_time && !schedulability.dynamic) {
-            return 'false-false';
-        } else if (schedulability.fixed_time && !schedulability.dynamic) {
-            return 'true-false';
-        } else {
-            return 'false-true';
-        }
-    }
-
-    /**
-     * Function to get the reservation object lis formatted as required to show in the list table.
-     * @returns Array of Reservation object to show in table.
-     */
-    getReservationList() {
-        let items = [];
-        const startTime = this.state.startTime;
-        const endTime = this.state.endTime;
-        let reservations = this.reservations;
-        for (const reservation of reservations) {
-            const reservationStartTime = moment.utc(reservation.start_time);
-            const reservationEndTime = reservation.duration ? reservationStartTime.clone().add(reservation.duration, 'seconds') : null;
-            const reservationSpec = reservation.specifications_doc;
-            if ((reservationStartTime.isSameOrBefore(endTime)
-                    && (reservationEndTime === null || reservationEndTime.isSameOrAfter(startTime)))
-                && (this.state.reservationFilter.length === 0 ||                                        // No reservation filter added
-                    this.state.reservationFilter.indexOf(reservationSpec.activity.type) >= 0)) {     // Reservation reason == Filtered reaseon
-                let item = _.cloneDeep(reservation);
-                item.stop_time = item.stop_time || "Unknown";
-                item.duration = UnitConverter.getSecsToDDHHmmss(item.duration) || "Unknown";
-                item.activityType = reservationSpec.activity.type;
-                item.activitySubject = reservationSpec.activity.subject;
-                item.activityPlanned = reservationSpec.activity.planned;
-                item.stations = reservationSpec.resources.stations.join(", ");
-                item.scheduleFixedTime = reservationSpec.schedulability.fixed_time;
-                item.scheduleDynamic = reservationSpec.schedulability.dynamic;
-                item.fixedProject = reservationSpec.schedulability.project_exclusive;
-                item.effectsExpert = reservationSpec.effects.expert;
-                item.effectsHBARfi = reservationSpec.effects.hba_rfi;
-                item.effectsLBARfi = reservationSpec.effects.lba_rfi;
-                item['actionpath'] = `/reservation/view/${item.id}`;
-                items.push(item);
-            }
-        }
-        return items;
-    }
-
-    /**
-     * Set reservation filter
-     * @param {String} filter
-     */
-    async setReservationFilter(filter) {
-        this.setState({reservationFilter: filter});
-        let updatedItemGroupData = await this.dateRangeCallback(this.state.startTime, this.state.endTime, true, this.state.weekDay);
-        this.timeline.updateTimeline(updatedItemGroupData);
-    }
-
-    /**
-     * Get Status list for UI drop down list
-     */
-    async getStatusList() {
-        let suStatusList = [];
-        let taskStatusList = [];
-        const suFilters = await ScheduleService.getSchedulingUnitFilterDefinition('blueprint');
-        if (suFilters && suFilters.data.filters['status']) {
-            suFilters.data.filters['status'].choices.forEach(choice => {
-                const tmpVar = {name: _.startCase(choice.value), value: choice.value};
-                suStatusList.push(tmpVar);
-            });
-        }
-        const taskFilters = await TaskService.getTaskFilterDefinition('blueprint');
-        if (taskFilters && taskFilters.data.filters['status']) {
-            taskFilters.data.filters['status'].choices.forEach(choice => {
-                const tmpVar = {name: _.startCase(choice.value), value: choice.value};
-                taskStatusList.push(tmpVar);
-            });
-        }
-        this.setState({suStatusList: suStatusList, taskStatusList: taskStatusList});
-    }
-
-    /**
-     * Get Task Type list for UI drop down list
-     */
-    async getTaskTypeList() {
-        let taskTypeList = [];
-        const taskFilters = await TaskService.getTaskFilterDefinition('blueprint');
-        if (taskFilters && taskFilters.data.filters['task_type']) {
-            taskFilters.data.filters['task_type'].choices.forEach(choice => {
-                const tmpVar = {name: _.startCase(choice.value), value: choice.value};
-                taskTypeList.push(tmpVar);
-            });
-        }
-        this.setState({taskTypeList: taskTypeList});
-    }
-
-    /**
-     * Show Dynamic Scheduling popup
-     */
-    showDymanicSchedulerPopup() {
-        this.setState({showDialog: true});
-    }
-
-    /**
-     * Close Dynamic Scheduling popup
-     */
-    close() {
-        this.setState({showDialog: false});
-    }
-
-    render() {
-        if (this.state.redirect) {
-            return <Redirect to={{pathname: this.state.redirect}}></Redirect>
-        }
-        const isSUListVisible = this.state.isSUListVisible;
-        let isSUDetsVisible = this.state.isSUDetsVisible;
-        const isReservDetsVisible = this.state.isReservDetsVisible;
-        const canExtendSUList = this.state.canExtendSUList;
-        const canShrinkSUList = this.state.canShrinkSUList;
-        let suBlueprint = null, reservation = null;
-        if (isSUDetsVisible) {
-            suBlueprint = _.find(this.state.isSchedulable ? this.state.suBlueprints : this.state.unschedulableList, {id: parseInt(this.state.selectedItem.id.split('-')[0])});
-            isSUDetsVisible = isSUDetsVisible && suBlueprint;
-        }
-        if (isReservDetsVisible) {
-            reservation = _.find(this.reservations, {id: parseInt(this.state.selectedItem.id.split('-')[1])});
-            reservation.project = this.state.selectedItem.project;
-        }
-        const mouseOverItem = this.state.mouseOverItem;
-        const leftPanelClassName = (isSUListVisible || this.state.isLegendVisible) && (isSUDetsVisible || isReservDetsVisible ||
-                            (canExtendSUList && !canShrinkSUList) ? "col-lg-4 col-md-4 col-sm-12" :
-                                ((canExtendSUList && canShrinkSUList) ? "col-lg-5 col-md-5 col-sm-12" : "col-lg-6 col-md-6 col-sm-12"))
-        return (
-            <React.Fragment>
-                <TieredMenu className="app-header-menu" model={this.state.menuOptions} popup
-                            ref={el => this.optionsMenu = el}/>
-                <PageHeader location={this.props.location} title={'Scheduling Units - Week View'}
-                            actions={[
-                                this.state.dsStatus && {
-                                    title: this.state.subSystemStatus ? 'Dynamic Scheduler is Active' : 'Dynamic Scheduler is Idle',
-                                    className: ` fa fa-${this.state.subSystemStatus ? 'play' : 'pause'} subsystem p-chips-token-label su-${this.state.subSystemStatus ? 'finished' : 'warning'}`,
-                                    type: 'tag'
-                                },
-                                {
-                                    content: 'D',
-                                    title: this.state.dsStatus ? 'Dynamic Scheduling is On' : 'Dynamic Scheduling is Off',
-                                    className: `tag p-chips-token-label su-${this.state.dsStatus ? 'finished' : 'error'}`,
-                                    type: 'tag'
-                                },
-                                {
-                                    content: 'F',
-                                    title: this.state.fsStatus ? 'Fixed time Scheduling is On' : 'Fixed time Scheduling is Off',
-                                    className: `tag p-chips-token-label su-${this.state.fsStatus ? 'finished' : 'error'}`,
-                                    type: 'tag'
-                                },
-                                {
-                                    icon: 'fa-cog', title: 'Scheduling Settings',
-                                    type: 'button', actOn: 'click', props: {callback: this.showDymanicSchedulerPopup},
-                                },
-                                {
-                                    icon: 'fa-bars',
-                                    title: 'Options',
-                                    type: 'button',
-                                    actOn: 'mouseOver',
-                                    props: {callback: this.showOptionMenu},
-                                }]}/>
-                {this.state.isFetchingData &&
-                    <TopProgressBar/>
-                }
-                {this.state.isLoading ? <AppLoader/> :
-                    <>
-                        <div className="p-grid">
-                            <div className={leftPanelClassName}>
-                            <div style={this.state.isLegendVisible ? {} : {display: "none"}} className="legend-header">Legend</div>
-                            <Legendbar style={this.state.isLegendVisible ? {} : {display: "none"}} canExtend={this.state.canExtendSUList} canShrink={this.state.canShrinkSUList}/>
-                            {/* SU List Panel */}
-                                <div className="timeline-panel"
-                                     style={isSUListVisible ? {
-                                         position: "inherit",
-                                         borderRight: "5px solid #efefef",
-                                         paddingTop: "10px"
-                                     } : {display: "none"}}>
-                                    <TimelineListTabs suBlueprintList={this.state.suBlueprintList}
-                                                      suListFilterCallback={this.suListFilterCallback}
-                                                      reservationList={this.getReservationList()}
-                                                      suStatusList={this.state.suStatusList}
-                                                      showSummary={this.onItemClick}
-                                                      unschedulableList={this.state.unschedulableList}
-                                                      taskStatusList={this.state.taskStatusList}
-                                                      taskTypeList={this.state.taskTypeList}
-                                                      viewName="Weekview"
-                                    ></TimelineListTabs>
-                                </div>
-                            </div>
-                            {/* Timeline Panel */}
-                            <div
-                                className={(isSUListVisible || this.state.isLegendVisible) ? ((isSUDetsVisible || isReservDetsVisible || this.state.isUnscheduledDetVisible) ? "timeline-panel col-lg-5 col-md-5 col-sm-12" :
-                                        (!canExtendSUList && canShrinkSUList) ? "timeline-panel col-lg-6 col-md-6 col-sm-12" :
-                                            ((canExtendSUList && canShrinkSUList) ? "timeline-panel col-lg-7 col-md-7 col-sm-12" : "timeline-panel col-lg-8 col-md-8 col-sm-12")) :
-                                    ((isSUDetsVisible || isReservDetsVisible) ? "timeline-panel col-lg-9 col-md-9 col-sm-12" : "timeline-panel col-lg-12 col-md-12 col-sm-12")}
-                            >
-                                {/* Panel Resize buttons */}
-                            {(isSUListVisible || this.state.isLegendVisible) &&
-                                <div className="resize-div">
-                                    <button className="p-link resize-btn" disabled={!this.state.canShrinkSUList}
-                                        title="Shrink List/Expand Timeline"
-                                        onClick={(e) => { this.resizeSUList(-1) }}>
-                                        <i className="pi pi-step-backward"></i>
-                                    </button>
-                                    <button className="p-link resize-btn" disabled={!this.state.canExtendSUList}
-                                        title="Expand List/Shrink Timeline"
-                                        onClick={(e) => { this.resizeSUList(1) }}>
-                                        <i className="pi pi-step-forward"></i>
-                                    </button>
-                                </div>
-                            }
-                            <div className={isSUListVisible ? "resize-div su-visible" : "resize-div su-hidden"}>
-                                {isSUListVisible &&
-                                    <button className="p-link resize-btn"
-                                        title="Hide List"
-                                        onClick={(e) => { this.showListPanel(false) }}>
-                                        <i className="pi pi-eye-slash"></i>
-                                    </button>
-                                }
-                                {!isSUListVisible &&
-                                    <button className="p-link resize-btn"
-                                            style={this.state.isLegendVisible ? {marginTop: "4.5rem"} : {}}
-                                            title="Show List"
-                                        onClick={(e) => { this.showListPanel(true) }}>
-                                        <i className="pi pi-eye"> Show List</i>
-                                    </button>
-                                }
-                            </div>
-                            <div className={this.state.isLegendVisible ? "resize-div su-visible" : "resize-div su-hidden"}
-                             style={isSUListVisible ? {marginLeft: "-1rem"} : {}}>
-                                {this.state.isLegendVisible &&
-                                    <button className="p-link resize-btn"
-                                        title="Hide Legend"
-                                        onClick={(e) => { this.showLegend(false) }}>
-                                        <i className="pi pi-filter-slash"></i>
-                                    </button>
-                                }
-                                {!this.state.isLegendVisible &&
-                                    <button className="p-link resize-btn"
-                                            style={isSUListVisible ? {marginTop: "5rem"} : {marginTop: "7rem"}}
-                                        title="Show Legend"
-                                        onClick={(e) => { this.showLegend(true) }}>
-                                        <i className="pi pi-filter"> Show Legend</i>
-                                    </button>
-                                }
-                            </div>
-                                <Timeline ref={(tl) => {
-                                    this.timeline = tl
-                                }}
-                                          group={this.state.group}
-                                          items={this.state.items}
-                                          currentUTC={this.state.currentUTC}
-                                          rowHeight={50}
-                                          itemClickCallback={this.onItemClick}
-                                          itemMouseOverCallback={this.onItemMouseOver}
-                                          itemMouseOutCallback={this.onItemMouseOut}
-                                          sidebarWidth={185}
-                                          stackItems={true}
-                                          startTime={(this.state.weekDay ? this.state.weekDay.clone() : moment.utc(this.state.currentUTC)).hour(0).minutes(0).seconds(0)}
-                                          endTime={(this.state.weekDay ? this.state.weekDay.clone() : moment.utc(this.state.currentUTC)).hour(23).minutes(59).seconds(59)}
-                                          timelineCommonUtils={this.timelineCommonUtils}
-                                          timelineUIAttributes={this.timelineUIAttributes}
-                                          zoomLevel="1 Day"
-                                          showLive={false} showDateRange={false}
-                                          viewType={UIConstants.timeline.types.WEEKVIEW}
-                                          dateRangeCallback={this.dateRangeCallback}
-                                    //Toolbar properties
-                                          onSkyViewToggle={this.state.onSkyViewToggle}
-                                          setOnSkyViewToggle={this.setOnSkyViewToggle}
-                                          reservationsViewToggle={this.state.reservationsViewToggle}
-                                          setReservationsViewToggle={this.setReservationsViewToggle}
-                                          reservationFilter={this.state.reservationFilter}
-                                          setReservationFilter={this.setReservationFilter}
-                                ></Timeline>
-                            </div>
-                            {/* Details Panel */}
-                            {isSUDetsVisible &&
-                                <div className="col-lg-3 col-md-3 col-sm-12 timeline-panel"
-                                     style={{
-                                         borderLeft: "1px solid #efefef",
-                                         marginTop: "0px",
-                                         backgroundColor: "#f2f2f2"
-                                     }}>
-                                    {this.state.isSummaryLoading ? <AppLoader/> :
-                                        <SchedulingUnitSummary schedulingUnit={suBlueprint}
-                                                               suTaskList={this.state.suTaskList}
-                                                               viewInNewWindow
-                                                               constraintsTemplate={this.state.suConstraintTemplate}
-                                                               onUpdate={this.onSaveChanges}
-                                                               newPopupvalue={this.newPopupvalue}
-                                                               onClose={this.state.openEditConstraintDialog}
-                                                               onSavedisable={this.state.onSavedisable}
-                                                               onCloseFn={this.editConstraint}
-                                                               closeCallback={this.closeSUDets}
-                                                               cancelCheckstatus={this.cancelCheckstatus}
-                                                               cancelStatus={this.state.cancelStatus}
-                                                               stationGroup={this.state.stationGroup}
-                                                               missingStations={this.state.missingStations}
-                                                               location={this.props.location}></SchedulingUnitSummary>
-                                    }
-                                </div>
-                            }
-                            {this.state.isReservDetsVisible &&
-                                <div className="col-lg-3 col-md-3 col-sm-12 timeline-panel"
-                                     style={{
-                                         borderLeft: "1px solid #efefef",
-                                         marginTop: "0px",
-                                         backgroundColor: "#f2f2f2"
-                                     }}>
-                                    {this.state.isSummaryLoading ? <AppLoader/> :
-                                        <ReservationSummary reservation={reservation} viewInNewWindow
-                                                            location={this.props.location}
-                                                            closeCallback={this.closeSUDets}></ReservationSummary>
-                                    }
-                                </div>
-                            }
-                        </div>
-                    </>
-                }
-                {/* SU Item Tooltip popover with SU status color */}
-                <div className="p-overlaypanel p-component timeline-popover"
-                     style={{...this.state.popPosition, zIndex: 1324, opacity: 1.944}}>
-                    <TimelineItemPopover mouseOverItem={mouseOverItem}/>
-                </div>
-                {/* Open Websocket after loading all initial data */}
-                {!this.state.isLoading &&
-                    <Websocket ref={websocket => {
-                        this.websocket = websocket
-                    }} url={process.env.REACT_APP_WEBSOCKET_URL}
-                               onOpen={this.onConnect} onMessage={this.handleData} onClose={this.onDisconnect}/>}
-                {this.state.showDialog &&
-                    <div className="p-grid" data-testid="confirm_dialog">
-                        <CustomDialog type="success" visible={this.state.showDialog} width="25vw" showIcon={false}
-                                      header="Scheduling Settings"
-                                      message={<DynamicScheduler callBack={this.updateDSStatus}/>}
-                                      content={''}
-                                      actions={[
-                                          {id: "no", title: 'Close', callback: this.close}]}
-                                      onClose={this.close}
-                        />
-                    </div>
-                }
-            </React.Fragment>
-        );
-    }
-
-}
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/index.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/index.js
index c7281aebcc8..cfdab751d06 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/index.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/index.js
@@ -14,7 +14,6 @@ import ViewSchedulingUnit from './Scheduling/ViewSchedulingUnit'
 import SchedulingUnitCreate from './Scheduling/create';
 import EditSchedulingUnit from './Scheduling/edit';
 import { CycleList, CycleCreate, CycleView, CycleEdit } from './Cycle';
-import { TimelineView, WeekTimelineView} from './Timeline';
 import { ReservationCreate, ReservationList, ReservationView, ReservationEdit } from './Reservation';
 import { SystemEventCreate, SystemEventList, SystemEventView, SystemEventEdit } from './SystemEvent';
 import { FindObjectResult } from './Search/'
-- 
GitLab