function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
var _excluded = ["rowKey", "isIndex", "indexWidth", "columns", "pagination", "height", "scroll", "dataSource", "onRowCallBack", "handleTableChange", "currentLayer", "indexFixed"];
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
import { DownOutlined, ExportOutlined } from '@ant-design/icons';
import { useMemoizedFn, useSetState } from 'ahooks';
import { Button, ConfigProvider, Dropdown, Menu, Table } from 'antd';
import zhCN from 'antd/es/locale/zh_CN';
import { useEffect, useMemo, useRef, useState } from 'react';
import useSettings from "../../_hooks/useSettings";
import "./style";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
var VMTable = function VMTable(props) {
  var _props$rowKey = props.rowKey,
    rowKey = _props$rowKey === void 0 ? 'id' : _props$rowKey,
    _props$isIndex = props.isIndex,
    isIndex = _props$isIndex === void 0 ? true : _props$isIndex,
    _props$indexWidth = props.indexWidth,
    indexWidth = _props$indexWidth === void 0 ? null : _props$indexWidth,
    columns = props.columns,
    _props$pagination = props.pagination,
    pagination = _props$pagination === void 0 ? false : _props$pagination,
    _props$height = props.height,
    height = _props$height === void 0 ? '' : _props$height,
    scroll = props.scroll,
    _props$dataSource = props.dataSource,
    dataSource = _props$dataSource === void 0 ? [] : _props$dataSource,
    onRowCallBack = props.onRowCallBack,
    handleTableChange = props.handleTableChange,
    _props$currentLayer = props.currentLayer,
    currentLayer = _props$currentLayer === void 0 ? {} : _props$currentLayer,
    _props$indexFixed = props.indexFixed,
    indexFixed = _props$indexFixed === void 0 ? false : _props$indexFixed,
    ext = _objectWithoutProperties(props, _excluded);
  var _useState = useState(),
    _useState2 = _slicedToArray(_useState, 2),
    scrollY = _useState2[0],
    setScrollY = _useState2[1];
  var tableRef = useRef();
  var calculateHeight = useMemoizedFn(function () {
    if (tableRef.current) {
      var paginationEle = (tableRef.current.nativeElement || tableRef.current).querySelector('.ant-pagination');
      var paginationHeight = paginationEle ? paginationEle.offsetHeight + 16 * 2 : 0;
      var parentElement = tableRef.current.parentElement;
      var rect = parentElement.getBoundingClientRect();
      var paddding = getComputedStyle(parentElement).padding.replace('px', '');
      var _height = rect.height - paddding * 2 - (tableRef.current.nativeElement || tableRef.current).querySelector('thead').offsetHeight - paginationHeight;
      setScrollY(_height);
    }
  });
  useEffect(function () {
    var resizeObserver = new ResizeObserver(function () {
      calculateHeight();
    });
    if (height) {
      setScrollY(height);
    } else {
      resizeObserver.observe(tableRef.current.parentElement, {
        box: 'border-box'
      });
      resizeObserver.observe(tableRef.current.nativeElement || tableRef.current, {
        box: 'border-box'
      });
    }
    return function () {
      resizeObserver.disconnect();
    };
  }, [height]);
  var _useSetState = useSetState({
      selectedRowId: ''
    }),
    _useSetState2 = _slicedToArray(_useSetState, 2),
    state = _useSetState2[0],
    setState = _useSetState2[1];
  var newColumns = useMemo(function () {
    var result = isIndex ? columns ? [{
      title: '序号',
      render: function render(_, __, index) {
        if (pagination && typeof (pagination === null || pagination === void 0 ? void 0 : pagination.current) === 'number' && typeof (pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) === 'number') {
          return ((pagination === null || pagination === void 0 ? void 0 : pagination.current) - 1) * (pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) + index + 1;
        } else {
          return index + 1;
        }
      },
      width: indexWidth || 60,
      fixed: indexFixed ? 'left' : ''
    }].concat(_toConsumableArray(columns)) : undefined : columns;
    if (result) {
      var _iterator = _createForOfIteratorHelper(result),
        _step;
      try {
        for (_iterator.s(); !(_step = _iterator.n()).done;) {
          var col = _step.value;
          if (!col.width) col.width = 70;
        }
      } catch (err) {
        _iterator.e(err);
      } finally {
        _iterator.f();
      }
    }
    return result;
  }, [columns, pagination]);
  var _useSettings = useSettings(),
    isDark = _useSettings.isDark;
  useEffect(function () {
    setState({
      selectedRowId: (currentLayer === null || currentLayer === void 0 ? void 0 : currentLayer.id) || ''
    });
  }, [JSON.stringify(currentLayer)]);
  useEffect(function () {
    if (currentLayer !== null && currentLayer !== void 0 && currentLayer.id && dataSource) {
      onRowCallBack && onRowCallBack(currentLayer);
      var tableDom = document.getElementsByClassName('ant-table-body')[0];
      tableDom.scrollTop = 38 * (dataSource === null || dataSource === void 0 ? void 0 : dataSource.findIndex(function (item) {
        return item.id === currentLayer.id;
      }));
    }
  }, [JSON.stringify(dataSource), JSON.stringify(currentLayer)]);
  return /*#__PURE__*/_jsx(ConfigProvider, {
    locale: zhCN,
    children: /*#__PURE__*/_jsx(Table, _objectSpread({
      className: "vm-table ".concat(isDark ? 'dark' : ''),
      ref: tableRef,
      rowKey: rowKey,
      scroll: scroll || {
        y: scrollY,
        scrollToFirstRowOnChange: true
      },
      columns: newColumns,
      pagination: pagination ? _objectSpread({
        size: 'default',
        showSizeChanger: false,
        showTotal: function showTotal(total) {
          return "\u5171".concat(total, "\u6761");
        }
      }, pagination) : false,
      dataSource: dataSource,
      rowClassName: function rowClassName(record) {
        return state.selectedRowId === record.id ? "vm-table-row ".concat(isDark ? 'dark' : '') : '';
      },
      onRow: function onRow(record) {
        return {
          onClick: function onClick() {
            if (!onRowCallBack) return;
            setState({
              selectedRowId: record.id
            });
            onRowCallBack(record);
          } // click row
        };
      },
      onChange: function onChange(_pagination, _filters, sorter) {
        return handleTableChange && handleTableChange(sorter);
      }
    }, ext))
  });
};

/**
 * 表格导出按钮
 * @param props
 * @returns
 */

export var ExportBtn = function ExportBtn(props) {
  var _onClick = props.onClick,
    items = props.items;
  var _useSettings2 = useSettings(),
    theme = _useSettings2.theme;
  var menu = /*#__PURE__*/_jsx(Menu, {
    onClick: function onClick(menuItem) {
      return _onClick && _onClick(menuItem.key);
    },
    items: items || [{
      label: '导出选中行',
      key: 'select-rows'
    }, {
      label: '导出当前页',
      key: 'current-page'
    }, {
      label: '导出全部',
      key: 'all'
    }]
  });
  return /*#__PURE__*/_jsx(Dropdown, {
    overlay: menu,
    trigger: ['click'],
    className: "vtx-export-btn ".concat(isDark ? 'dark' : ''),
    overlayClassName: "vtx-export-dropdown ".concat(isDark ? 'dark' : ''),
    children: /*#__PURE__*/_jsxs(Button, {
      type: "primary",
      style: {
        padding: '0 10px'
      },
      children: [/*#__PURE__*/_jsx(ExportOutlined, {}), "\u5BFC\u51FA", /*#__PURE__*/_jsx(DownOutlined, {})]
    })
  });
};
export var renderColumnParam = function renderColumnParam(cols) {
  var colsParam = [];
  cols.forEach(function (item) {
    colsParam.push({
      title: item.title,
      field: item.dataIndex
    });
  });
  return JSON.stringify(colsParam);
};
export default VMTable;