/*
 * Copyright 2019-present Open Networking Foundation
 *
 * 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.
 */

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import {RouterModule} from '@angular/router';
import { Gui2FwLibModule } from '../../../../../web/gui2-fw-lib/public_api';
import { RoadmDeviceComponent } from './roadm/roadm.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { RoadmPortComponent } from './port/port.component';

@NgModule({
    declarations: [
        RoadmDeviceComponent,
        RoadmPortComponent,
    ],
    imports: [
        RouterModule,
        RouterModule.forChild([{path: 'roadm-port-gui', component: RoadmPortComponent}]),
        Gui2FwLibModule,
        CommonModule,
        FormsModule,
        ReactiveFormsModule
    ],
    exports: [
        RoadmDeviceComponent,
        RoadmPortComponent,
    ]
})
export class RoadmGuiLibModule { }
