<!-- @format -->

<template>
  <div class="ns-table-header">
    <div class="ns-table-title ns-title-extra-box" v-if="tableTitle">{{ tableTitle }}</div>
    <div class="ns-table-header-action" v-if="!isEmpty(getActions)">
      <slot name="header" :data="data"></slot>
      <template v-for="item in getActions" :key="item.name">
        <ns-button @click="item.finalHandle()" :disabled="item.dynamicDisabled" :type="item.type">
          <ns-v-node :content="item.label" />
        </ns-button>
      </template>
    </div>
  </div>
</template>

<script lang="ts">
  import { computed, defineComponent, inject } from 'vue';
  import { cloneDeep, isEmpty } from 'lodash-es';
  import { Action, useAction } from '/nerv-lib/use/use-action';
  import NsButton from '../form/button/button.vue';
  import { useRoute } from 'vue-router';

  export default defineComponent({
    name: 'NsTableHeader',
    components: {
      NsButton,
    },
    props: {
      searchData: {
        type: Object,
        default: () => ({}),
      },
      tableTitle: {
        type: String,
      },
      data: {
        type: [Array],
        default: () => [],
      },
      headerActions: {
        type: [Array],
        default: () => [],
      },
    },
    setup(props) {
      const reload = inject('reload', () => {});
      const { filterAction, transformAction } = useAction({ reload });
      const route = useRoute();
      const getData = computed(() => {
        return {
          ...route.query,
          ...route.params,
          ...props.searchData,
          list: props.data,
          formModel: props.searchData,
        };
      });

      const getActions = computed(() => {
        let actions = cloneDeep(props.headerActions);
        actions = actions
          .filter((action: Action) => {
            return filterAction(action, getData.value);
          })
          .map((action: Action) => {
            return transformAction(action, getData.value);
          });
        return actions;
      });

      return { getActions, getData, isEmpty };
    },
  });
</script>

<style lang="less" scoped>
  .ns-table-header {
    min-width: fit-content;
    user-select: none;
    // padding: 16px 0;
    padding-top: 16px;
    text-align: right;
    position: relative;
    height: 48px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    .ns-table-title {
      text-align: left;
      height: 32px;
      line-height: 32px;
      //font-size: 16px;
      font-weight: bold;
      user-select: text;
    }

    .ant-btn {
      margin-left: 6px;
    }
    :first-child.ant-btn {
      margin-left: 0;
    }
  }
</style>
