import { defineComponent, ref, computed, watch, resolveDirective, openBlock, createElementBlock, createElementVNode, Fragment, renderList, withDirectives, createVNode, TransitionGroup, withCtx, unref, vShow, nextTick } from 'vue';
import { useRoute } from 'vue-router';
import '../../../../utils/index.mjs';
import { getToken } from '../../../../utils/request.mjs';

const _hoisted_1 = { class: "layout-padding layout-padding-unset layout-iframe" };
const _hoisted_2 = { class: "layout-padding-auto layout-padding-view" };
const _hoisted_3 = ["src", "data-url"];
var _sfc_main = /* @__PURE__ */ defineComponent({
  __name: "iframes",
  props: {
    // 刷新 iframe
    refreshKey: {
      type: String,
      default: () => ""
    },
    // 过渡动画 name
    name: {
      type: String,
      default: () => "slide-right"
    },
    // iframe 列表
    list: {
      type: Array,
      default: () => []
    }
  },
  setup(__props) {
    const props = __props;
    const iframeRef = ref();
    const route = useRoute();
    const setIframeList = computed(() => {
      return props.list.filter((v) => {
        var _a;
        return (_a = v.meta) == null ? void 0 : _a.isIframeOpen;
      });
    });
    const getRoutePath = computed(() => {
      return route.path;
    });
    const closeIframeLoading = (val, item) => {
      nextTick(() => {
        if (!iframeRef.value) return false;
        iframeRef.value.forEach((v) => {
          if (v.dataset.url === val) {
            v.onload = () => {
              var _a;
              if (((_a = item.meta) == null ? void 0 : _a.isIframeOpen) && item.meta.loading) item.meta.loading = false;
            };
          }
        });
      });
    };
    watch(
      () => route.fullPath,
      (val) => {
        const item = props.list.find((v) => v.path === val);
        if (!item) return false;
        if (!item.meta.isIframeOpen) item.meta.isIframeOpen = true;
        closeIframeLoading(val, item);
      },
      {
        immediate: true
      }
    );
    watch(
      () => props.refreshKey,
      () => {
        const item = props.list.find((v) => v.path === route.path);
        if (!item) return false;
        if (item.meta.isIframeOpen) item.meta.isIframeOpen = false;
        setTimeout(() => {
          item.meta.isIframeOpen = true;
          item.meta.loading = true;
          closeIframeLoading(route.fullPath, item);
        });
      },
      {
        deep: true
      }
    );
    return (_ctx, _cache) => {
      const _directive_loading = resolveDirective("loading");
      return openBlock(), createElementBlock("div", _hoisted_1, [
        createElementVNode("div", _hoisted_2, [
          (openBlock(true), createElementBlock(
            Fragment,
            null,
            renderList(setIframeList.value, (v) => {
              return withDirectives((openBlock(), createElementBlock("div", {
                class: "w100",
                key: v.path,
                "element-loading-background": "white"
              }, [
                createVNode(TransitionGroup, { name: __props.name }, {
                  default: withCtx(() => [
                    withDirectives((openBlock(), createElementBlock("iframe", {
                      src: `${v.meta.isLink}${v.meta.isLink.indexOf("?") > 0 ? "&" : "?"}token=${unref(getToken)()}`,
                      key: v.path,
                      frameborder: "0",
                      height: "100%",
                      width: "100%",
                      style: { "position": "absolute" },
                      "data-url": v.path,
                      ref_for: true,
                      ref_key: "iframeRef",
                      ref: iframeRef
                    }, null, 8, _hoisted_3)), [
                      [vShow, getRoutePath.value === v.path]
                    ])
                  ]),
                  _: 2
                  /* DYNAMIC */
                }, 1032, ["name"])
              ])), [
                [_directive_loading, v.meta.loading]
              ]);
            }),
            128
            /* KEYED_FRAGMENT */
          ))
        ])
      ]);
    };
  }
});

export { _sfc_main as default };
