import { isAlive, types } from "mobx-state-tree"; import { ImageEntity } from "./ImageEntity"; export const ImageEntityMixin = types .model({ currentImageEntity: types.maybeNull(types.reference(ImageEntity)), imageEntities: types.optional(types.array(ImageEntity), []), }) .actions((self) => { return { beforeDestroy() { self.currentImageEntity = null; }, }; }) .views((self) => ({ get maxItemIndex() { return self.imageEntities.length - 1; }, get imageIsLoaded() { const imageEntity = self.currentImageEntity; return !imageEntity.downloading && !imageEntity.error && imageEntity.downloaded && imageEntity.imageLoaded; }, get rotation() { if (!isAlive(self)) { return void 0; } return self.currentImageEntity?.rotation; }, set rotation(value) { self.currentImageEntity?.setRotation(value); }, get naturalWidth() { return self.currentImageEntity?.naturalWidth; }, set naturalWidth(value) { self.currentImageEntity?.setNaturalWidth(value); }, get naturalHeight() { return self.currentImageEntity?.naturalHeight; }, set naturalHeight(value) { self.currentImageEntity?.setNaturalHeight(value); }, get stageWidth() { return self.currentImageEntity?.stageWidth; }, set stageWidth(value) { self.currentImageEntity?.setStageWidth(value); }, get stageHeight() { return self.currentImageEntity?.stageHeight; }, set stageHeight(value) { self.currentImageEntity?.setStageHeight(value); }, get stageRatio() { return self.currentImageEntity?.stageRatio; }, set stageRatio(value) { self.currentImageEntity?.setStageRatio(value); }, get containerWidth() { return self.currentImageEntity?.containerWidth; }, set containerWidth(value) { self.currentImageEntity?.setContainerWidth(value); }, get containerHeight() { return self.currentImageEntity?.containerHeight; }, set containerHeight(value) { self.currentImageEntity?.setContainerHeight(value); }, get stageZoom() { return self.currentImageEntity?.stageZoom; }, set stageZoom(value) { self.currentImageEntity?.setStageZoom(value); }, get stageZoomX() { return self.currentImageEntity?.stageZoomX; }, set stageZoomX(value) { self.currentImageEntity?.setStageZoomX(value); }, get stageZoomY() { return self.currentImageEntity?.stageZoomY; }, set stageZoomY(value) { self.currentImageEntity?.setStageZoomY(value); }, get currentZoom() { return self.currentImageEntity?.currentZoom; }, set currentZoom(value) { self.currentImageEntity?.setCurrentZoom(value); }, get zoomScale() { if (!isAlive(self)) { return void 0; } return self.currentImageEntity?.zoomScale; }, set zoomScale(value) { self.currentImageEntity?.setZoomScale(value); }, get zoomingPositionX() { if (!isAlive(self)) { return void 0; } return self.currentImageEntity?.zoomingPositionX; }, set zoomingPositionX(value) { self.currentImageEntity?.setZoomingPositionX(value); }, get zoomingPositionY() { if (!isAlive(self)) { return null; } return self.currentImageEntity?.zoomingPositionY; }, set zoomingPositionY(value) { self.currentImageEntity?.setZoomingPositionY(value); }, get brightnessGrade() { return self.currentImageEntity?.brightnessGrade; }, set brightnessGrade(value) { self.currentImageEntity?.setBrightnessGrade(value); }, get contrastGrade() { return self.currentImageEntity?.contrastGrade; }, set contrastGrade(value) { self.currentImageEntity?.setContrastGrade(value); }, findImageEntity(index) { index = index ?? 0; return self.imageEntities.find((entity) => entity.index === index); }, }));