/*
 Copyright 2020 TATA ELXSI

 Licensed under the Apache License, Version 2.0 (the 'License');
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
*/
/**
 * @file NS Instance Component
 */
import { Component } from '@angular/core';
import { SharedService } from 'SharedService';
/**
 * Creating component
 * @Component takes LayoutComponent.html as template url
 */
@Component({
    selector: 'app-layout',
    templateUrl: './LayoutComponent.html',
    styleUrls: ['./LayoutComponent.scss']
})
/** Exporting a class @exports LayoutComponent */
export class LayoutComponent {
    /** Contains all methods related to shared @private */
    public sharedService: SharedService;

    constructor(sharedService: SharedService) {
        this.sharedService = sharedService;
    }
    /** method to handle go to top event @public */
    public gotoTop(): void {
        window.scroll({ behavior: 'smooth', top: 0, left: 0 });
    }
}
