/** * Licensed to the Apache Software Foundation (ASF) under one or more *
contributor license agreements. See the NOTICE file distributed with * this work
for additional information regarding copyright ownership. * The ASF licenses
this file to You 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. */

<template>
  <div class="rk-alarm flex-v">
    <AlarmTool
      :durationTime="durationTime"
      :total="rocketAlarm.total"
      :alarmScope="alarmScope"
      :inTopo="true"
      :prop-keyword="keyword"
    />
    <div style="flex-grow: 1;overflow: auto;height: 100%;">
      <AlarmTable :data="rocketAlarm.alarmService" />
    </div>
  </div>
</template>

<script lang="ts">
  import Vue from 'vue';
  import Component from 'vue-class-component';
  import { Prop, PropSync } from 'vue-property-decorator';
  import AlarmTool from '../../components/alarm/alarm-tool.vue';
  import AlarmTable from '../../components/alarm/alarm-table.vue';
  import { State, Action, Getter } from 'vuex-class';

  @Component({
    components: { AlarmTool, AlarmTable },
  })
  export default class WindowAlarm extends Vue {
    @State('rocketAlarm') private rocketAlarm!: any;
    @Getter('durationTime') private durationTime: any;
    @Prop({ default: () => ({ label: 'All', key: '' }) })
    private alarmScope: any;
    @Prop({ default: '' })
    private keyword!: string;
  }
</script>

<style lang="scss">
  .rk-alarm {
    flex-grow: 1;
    height: 100%;
    min-height: 0;
  }
</style>
