nicecode-v2/packages/meta/es/CompareImage/CompareImage.js

148 lines
11 KiB
JavaScript

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; }
import React, { useRef, useState, useEffect, forwardRef, useImperativeHandle } from 'react';
// @ts-ignore
import { generateImg, get, addEventListenerWrapper } from '@zhst/func';
import { useUpdateEffect } from '@zhst/hooks';
import Button from "../button";
import classNames from 'classnames';
import Viewer from "../ImageEditor/viewer";
import Icon from "../iconfont";
import CornerScore from "./components/CornerScore";
import "./index.less";
var componentName = "zhst-image__compater-view";
// 对比图组件
var CompareImage = /*#__PURE__*/forwardRef(function (props, ref) {
var _props$label = props.label,
label = _props$label === void 0 ? '标题' : _props$label,
_props$openRoll = props.openRoll,
openRoll = _props$openRoll === void 0 ? true : _props$openRoll,
_props$url = props.url,
url = _props$url === void 0 ? '' : _props$url,
_props$score = props.score,
score = _props$score === void 0 ? 0 : _props$score,
preDisable = props.preDisable,
nextDisable = props.nextDisable,
_props$showScore = props.showScore,
showScore = _props$showScore === void 0 ? true : _props$showScore,
onNext = props.onNext,
onPre = props.onPre;
var imgContainerRef = useRef(null);
var imgInsRef = useRef(null);
var _useState = useState(0),
_useState2 = _slicedToArray(_useState, 2),
scale = _useState2[0],
setScale = _useState2[1];
// 初始化页面
useEffect(function () {
if (!url) return;
var handleTransformChange = addEventListenerWrapper(imgContainerRef.current, 'viewer-transform-change', function (event) {
var data = event.detail;
setScale(get(data, 'scale', 0));
});
if (generateImg(url)) {
imgInsRef.current = new Viewer(imgContainerRef.current, {
image: generateImg(url)
});
}
return function () {
var _imgInsRef$current, _imgInsRef$current$de;
handleTransformChange === null || handleTransformChange === void 0 || handleTransformChange.remove();
imgInsRef === null || imgInsRef === void 0 || (_imgInsRef$current = imgInsRef.current) === null || _imgInsRef$current === void 0 || (_imgInsRef$current$de = _imgInsRef$current.destroy) === null || _imgInsRef$current$de === void 0 || _imgInsRef$current$de.call(_imgInsRef$current);
imgInsRef.current = null;
};
}, []);
// 监听下标变化
useUpdateEffect(function () {
if (imgInsRef.current) {
var _imgInsRef$current2;
(_imgInsRef$current2 = imgInsRef.current) === null || _imgInsRef$current2 === void 0 || _imgInsRef$current2.refleshImage({
image: generateImg(url)
});
}
}, [url]);
useImperativeHandle(ref, function () {
return {
imgInsRef: imgInsRef
};
});
return /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(componentName, "__container"))
}, /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(componentName, "__label"))
}, label), !url ? /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(componentName, "__empty"))
}, /*#__PURE__*/React.createElement("img", {
src: "data:image/png;base64,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",
title: "\u6682\u65E0\u6570\u636E"
}), /*#__PURE__*/React.createElement("span", {
className: classNames("".concat(componentName, "__empty--text"))
}, "\u6682\u65E0\u5339\u914D\u6570\u636E")) : /*#__PURE__*/React.createElement("div", {
ref: imgContainerRef,
className: classNames("".concat(componentName, "__view"))
}), !!url && openRoll && /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(componentName, "__scoll-module"))
}, /*#__PURE__*/React.createElement(Button, {
type: 'default',
className: classNames("".concat(componentName, "__scoll-module__btn")),
disabled: preDisable,
onClick: function onClick() {
onPre === null || onPre === void 0 || onPre();
}
}, /*#__PURE__*/React.createElement(Icon, {
icon: "icon-qiehuanzuo",
size: 40
})), /*#__PURE__*/React.createElement(Button, {
type: 'default',
className: classNames("".concat(componentName, "__scoll-module__btn")),
disabled: nextDisable,
onClick: function onClick() {
onNext === null || onNext === void 0 || onNext();
}
}, /*#__PURE__*/React.createElement(Icon, {
icon: "icon-qiehuanyou",
size: 40
}))), showScore && /*#__PURE__*/React.createElement(CornerScore, {
scoreTxt: score || 0
}), /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(componentName, "__tool"))
}, /*#__PURE__*/React.createElement(Button, {
type: "text",
onClick: function onClick() {
var _imgInsRef$current3, _imgInsRef$current3$s;
imgInsRef === null || imgInsRef === void 0 || (_imgInsRef$current3 = imgInsRef.current) === null || _imgInsRef$current3 === void 0 || (_imgInsRef$current3$s = _imgInsRef$current3.scaleTo) === null || _imgInsRef$current3$s === void 0 || _imgInsRef$current3$s.call(_imgInsRef$current3, 0.1);
}
}, /*#__PURE__*/React.createElement(Icon, {
size: 16,
icon: 'icon-fangda'
}), /*#__PURE__*/React.createElement("span", null, '放大')), /*#__PURE__*/React.createElement(Button, {
type: "text",
onClick: function onClick() {
var _imgInsRef$current4, _imgInsRef$current4$s;
imgInsRef === null || imgInsRef === void 0 || (_imgInsRef$current4 = imgInsRef.current) === null || _imgInsRef$current4 === void 0 || (_imgInsRef$current4$s = _imgInsRef$current4.scaleTo) === null || _imgInsRef$current4$s === void 0 || _imgInsRef$current4$s.call(_imgInsRef$current4, -0.1);
}
}, /*#__PURE__*/React.createElement(Icon, {
size: 16,
icon: 'icon-suoxiao'
}), /*#__PURE__*/React.createElement("span", null, '缩小')), /*#__PURE__*/React.createElement("span", {
className: classNames("".concat(componentName, "__tool__scale"))
}, Math.round(scale * 100) + '%'), /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(componentName, "__tool__line"))
}), /*#__PURE__*/React.createElement(Button, {
type: "text",
onClick: function onClick() {
var _imgInsRef$current5, _imgInsRef$current5$r;
imgInsRef === null || imgInsRef === void 0 || (_imgInsRef$current5 = imgInsRef.current) === null || _imgInsRef$current5 === void 0 || (_imgInsRef$current5$r = _imgInsRef$current5.reset) === null || _imgInsRef$current5$r === void 0 || _imgInsRef$current5$r.call(_imgInsRef$current5);
}
}, /*#__PURE__*/React.createElement(Icon, {
size: 16,
icon: 'icon-zhongzhi3'
}), /*#__PURE__*/React.createElement("span", null, '重置'))));
});
export default CompareImage;