<template>
  <a-cascader :load-data="loadData" :options="options">
    <template #[item]="data" v-for="item in Object.keys($slots)" :key="item">
      <slot :name="item" v-bind="data || {}"> </slot>
    </template>
  </a-cascader>
</template>
<script lang="ts">
  import { defineComponent, ref, toRefs } from 'vue';
  import type { CascaderProps } from 'ant-design-vue';
  import { http } from '/nerv-lib/util';
  import { AxiosRequestConfig } from 'axios';
  import { useApi } from '/nerv-lib/use';
  import { get } from 'lodash-es';
  const { httpRequest } = useApi();
  export default defineComponent({
    name: 'NsCascader',
    props: {
      api: [Function, String, Object],
      options: Array,
      listField: {
        type: String,
        default: 'data',
      },
      defaultParams: Object,
    },
    setup(props, { attrs }) {
      console.log(props, attrs);
      const requestConfig: AxiosRequestConfig = { method: 'get' };
      let options = ref<any[]>(props['options'] || []);

      if (props.api) {
        // eslint-disable-next-line vue/no-setup-props-destructure
        const { api, defaultParams, listField } = props;
        httpRequest({
          api,
          params: defaultParams,
          pathParams: {},
          requestConfig,
        }).then((res) => {
          options.value = get(res, listField);
        });
      }
      let loadData: CascaderProps['loadData'] | null = (selectOptions) => {
        attrs['loadData'](selectOptions, options, attrs);
      };
      if (attrs['loadData']) {
        loadData(options);
      } else {
        loadData = null;
      }

      return {
        loadData,
        options,
      };
    },
  });
</script>
<style lang="less" scoped></style>