import React, { useState, useRef } from "react";
import { Button, Row, Col } from "antd";
import CheckTable from "../CheckTable";
import { doFetch } from "@/utils/doFetch";
import { ArrowRightOutlined, ArrowLeftOutlined } from "@ant-design/icons";
const TableTransfer = (props) => {
  const {
    leftColumns = [],
    rightColumns = [],
    leftPath,
    rightPath,
    toLeft,
    toRight,
    leftCol,
    rightCol,
    leftDataSource,
    rightDataSource,
    leftEditTable,
    leftExtraparams,
    rightExtraparams,
    leftRowKey = "id",
    rightRowKey = "id",
    leftRowName,
    rightRowName,
    leftPagination,
    rightPagination,
    pageSize,
    leftClickParams,
    rightClickParams,
    leftTitle = "",
    rightTitle = "",
    rightSelectRowKey,
    leftSelectRowKey,
  } = props;
  const getCol = (itemcol) => {
      if (itemcol) {
        return itemcol;
      } else {
        return { xs: 24, sm: 24, md: 24, lg: 10, xl: 10, xxl: 10 };
      }
    },
    actionRef = useRef(),
    actionRefs = useRef(),
    [leftValues, clf] = useState([]),
    [rightValues, clr] = useState([]);
  function reload() {
    actionRef.current.reload();
    actionRefs.current.reload();
    clf([]);
    clr([]);
  }
  return (
    <Row gutter={[12, 12]}>
      <Col {...getCol(leftCol)}>
        <div style={{ marginBottom: 15 }}>{leftTitle}</div>
        <CheckTable
          columns={leftColumns}
          extraparams={leftExtraparams}
          path={leftPath}
          editable={leftEditTable}
          dataSource={leftDataSource}
          rowKey={leftRowKey}
          rowName={leftRowName}
          pagination={leftPagination}
          pageSize={pageSize}
          actionRef={actionRef}
          onChange={(val) => {
            clf(val);
          }}
          value={leftValues}
        ></CheckTable>
      </Col>
      <Col span={1}>
        <div
          style={{
            height: "100%",
            display: "flex",
            flexDirection: "column",
            justifyContent: "center",
            alignItems: "center",
          }}
        >
          <Button
            disabled={rightValues.length == 0}
            onClick={() => {
              doFetch({
                url: toLeft,
                params: {
                  ...rightClickParams,
                  [rightSelectRowKey]: rightValues,
                },
              }).then((res) => {
                if (res.code == "0000") {
                  reload();
                }
              });
            }}
            type="primary"
            icon={<ArrowLeftOutlined style={{ fontSize: 18 }} />}
            style={{ marginBottom: 15 }}
          ></Button>
          <Button
            disabled={leftValues.length == 0}
            onClick={() => {
              doFetch({
                url: toRight,
                params: { ...leftClickParams, [leftSelectRowKey]: leftValues },
              }).then((res) => {
                if (res.code == "0000") {
                  reload();
                }
              });
            }}
            type="primary"
            icon={<ArrowRightOutlined style={{ fontSize: 18 }} />}
          ></Button>
        </div>
      </Col>
      <Col {...getCol(rightCol)}>
        <div style={{ marginBottom: 15 }}>{rightTitle}</div>
        <CheckTable
          columns={rightColumns}
          extraparams={rightExtraparams}
          path={rightPath}
          dataSource={rightDataSource}
          rowKey={rightRowKey}
          rowName={rightRowName}
          pagination={rightPagination}
          pageSize={pageSize}
          actionRef={actionRefs}
          onChange={(val) => {
            clr(val);
          }}
          value={rightValues}
        ></CheckTable>
      </Col>
    </Row>
  );
};

export default TableTransfer;
