ImagePreviewGroup.js 3.04 KB
import template from "./ImagePreviewGroup.html";

class ImagePreviewGroup {
    useModules = ["esNgAntd"];

    template = template;

    state = {
        current: 0,
        visible: false,
        src: null,
        childrens: [],
    };

    constructor() {
        this.handlePreview();
    }

    addChildren(children) {
        this.state.childrens.push(children);
        return this.state.childrens.length - 1;
    }

    handleOpen(index) {
        this.state.current = index;
        this.state.src = this.state.childrens[index].state.src;
        this.state.visible = true;
    }

    handleClose() {
        this.state.visible = false;
    }

    handlePrev() {
        this.state.current =
            this.state.current > 0 ? this.state.current - 1 : 0;
        this.state.src = this.state.childrens[this.state.current].state.src;
    }

    handleNext() {
        this.state.current =
            this.state.current < this.state.childrens.length - 1
                ? this.state.current + 1
                : this.state.childrens.length - 1;
        this.state.src = this.state.childrens[this.state.current].state.src;
    }

    handlePreview() {
        esNgAntd.createLayer(
            `
            <div class="ant-image-preview-root">
                <div class="ant-image-preview-mask" ng-if="state.visible"></div>
                <div class="ant-image-preview-wrap" ng-show="state.visible">
                    <div class="ant-image-preview">
                        <div class="ant-image-preview-content">
                            <div class="ant-image-preview-body">
                                <ul class="ant-image-preview-operations">
                                    <li class="ant-image-preview-operations-operation">
                                        <span class="anticon anticon-close ant-image-preview-operations-icon" ng-click="handleClose()">
                                            <es-icon type="CloseOutlined"></es-icon>
                                        </span>
                                    </li> 
                                </ul>
                                <div class="ant-image-preview-img-wrapper">
                                    <img class="ant-image-preview-img" ng-src="{{state.src}}"/>
                                </div>
                                <div ng-class="{'ant-image-preview-switch-left': true, 'ant-image-preview-switch-left-disabled': state.current===0}" ng-click="handlePrev()">
                                    <es-icon type="LeftOutlined"></es-icon>
                                </div>
                                <div ng-class="{'ant-image-preview-switch-right': true,'ant-image-preview-switch-right-disabled': (state.childrens.length-1)===state.current}"  ng-click="handleNext()">
                                    <es-icon type="RightOutlined"></es-icon>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        `,
            $scope
        );
    }
}