{"version":3,"sources":["assets/img/logo.svg","apiService/apiService.js","redux/user/constants.js","pages/PhotoEditor.js","redux/photoEditor/actions.js","assets/img/icons/ADD TO FAV.svg","assets/img/icons/SEARCH.svg","assets/img/icons/SHOPPING_WHITE.svg","pages/Tools/rooms/roomItem/uploadRoom.js","pages/Tools/rooms/index.js","redux/auth/constants.js","components/Tools/inlineEditor.js","pages/Tools/rooms/roomItem/roomItem.js","components/Icons/Icon.js","assets/img/icons/SMILE.svg","helper/drawWarpHelper.js","helper/imageHelper.js","redux/tools/actions.js","assets/img/navbarIcons/edit.svg","assets/img/navbarIcons/logout.svg","assets/img/icons/EDIT ICON.svg","assets/img/navbarIcons/trash.svg","assets/img/navbarIcons/download.svg","assets/img/icons/SHOPPING (1).svg","assets/img/navbarIcons/rooms.svg","assets/img/navbarIcons/materials.svg","assets/img/icons/FILTER.svg","assets/img/icons/COMMENT_WHITE.svg","assets/img/icons/LIKE.svg","assets/img/icons/LIKE_WHITE.svg","assets/img/icons/SHARE_WHITE.svg","assets/img/icons/ADD TO FAV_WHITE.svg","assets/img/icons/SORT.svg","assets/img/cube/cube-1.png","assets/img/cube/cube-2.png","assets/img/cube/cube-3.png","assets/img/cube/cube-4.png","assets/img/logo-header-white.svg","helper/fileHelper.js","mapper/planMapper.js","assets/img/2000-01 (2).jpg","redux/tools/constants.js","redux/auth/actions.js","assets/img/cube/cube-5.png","assets/img/cube/cube-6.png","assets/img/cube/cube-7.png","assets/img/chair.png","assets/img/sample.jpg","assets/img/sample2.jpg","layouts/Auth.js","components/RangePicker.js","pages/Scene/miniEditor/MiniEditorV1.js","pages/Scene/miniEditor/MiniEditorV2.js","pages/Scene/Home_New.js","pages/Navbar/index/navbarItem/NavbarItem.js","routes/navbarConfig.js","services/authenticationChecker.js","pages/Navbar/index/Index.js","pages/Tools/Index/Index.js","layouts/Main.js","components/Plans/Sidebar/AccordionItem.js","redux/plan/actions.js","redux/plan/constants.js","pages/Plans/sidebar/PlanFilters.js","pages/Plans/sidebar/PlanSidebar.js","layouts/Plan.js","layouts/PhotoEditor.js","layouts/PlaceDetector.js","components/Loading/Loading.js","components/Plans/PlanPreview/PlanPreview.js","components/Plans/PlanShareModal/PlanShareModal.js","pages/Plans/index.js","redux/payment/constants.js","redux/payment/actions.js","components/Payment/Price/Price.js","components/Plans/PlanComments/Comment.js","components/Plans/PlanComments/PlanComments.js","pages/Plans/plan/index.js","pages/SignUp.js","pages/SignIn.js","pages/ForgotPassword.js","components/PlaceDetector/hoc/withSelectTool.js","components/PlaceDetector/hoc/withFastPenTool.js","components/PlaceDetector/hoc/withDeleteTool.js","components/PlaceDetector/hoc/withPerspectiveTool.js","components/PlaceDetector/Cube/lib/drag-tracker.js","components/PlaceDetector/Toolbar/Button.js","components/PlaceDetector/Toolbar/Menu/Dropdown.js","components/PlaceDetector/Toolbar/Menu/List.js","components/PlaceDetector/Toolbar/Menu/Menu.js","components/PlaceDetector/Toolbar/Menu/Item.js","components/PlaceDetector/Toolbar/Toolbar.js","components/PlaceDetector/Menu/Menu.js","components/PlaceDetector/Loader/Loader.js","components/PlaceDetector/Layers/Label.js","components/PlaceDetector/Layers/Item.js","components/PlaceDetector/Layers/Layers.js","pages/PlaceDetector.js","redux/placeDetector/actions.js","redux/placeDetector/constants.js","components/PlaceDetector/hoc/withInitial.js","components/PlaceDetector/hoc/withHistory.js","components/PlaceDetector/hoc/withFullscreen.js","components/PlaceDetector/hoc/withTools.js","components/PlaceDetector/hoc/withMoveTool.js","components/PlaceDetector/hoc/withDynamicCubeTool.js","components/PlaceDetector/hoc/withCubeTool.js","components/PlaceDetector/hoc/withPenTool.js","components/PlaceDetector/hoc/withCircleTool.js","components/PlaceDetector/hoc/withRectangleTool.js","layouts/Payment.js","pages/Payment/Cart/CartItem/CartItem.js","pages/Payment/Sidebar/PaymentSidebar.js","pages/Payment/Cart/Cart.js","pages/Payment/Index.js","routes/configs.js","pages/Payment/Result/PaymentResult.js","routes/Routes.js","App.js","redux/auth/reducer.js","redux/user/reducer.js","redux/photoEditor/reducer.js","redux/placeDetector/reducer.js","redux/tools/reducer.js","redux/plan/reducer.js","redux/payment/reducer.js","redux/rootReducer.js","redux/store.js","serviceWorker.js","i18n/fa/translations.js","i18n/fa/labels.js","i18n/fa/messages.js","index.js","redux/user/actions.js","assets/img/icons/SHOPPING.svg","assets/img/logo-white.svg","assets/img/navbarIcons/information.svg","helper/drawHelper.js","redux/photoEditor/constants.js"],"names":["module","exports","baseURL","baseShareURL","axios","defaults","setAxiosHeader","token","headers","common","Authorization","concat","productAPI","create","materials","getOne","_ref","id","get","params","consumer_key","consumer_secret","getAll","pageNumber","arguments","length","undefined","searchText","urlParams","URLSearchParams","append","toString","update","toUpdate","put","updateImage","async","file","patternFlipH","patternFlipV","_ref2","patternFile","createPatternFromImageNew","post","imageData","productId","resetEditedImage","delete","title","_ref3","thumbnailDataUrl","toBase64","thumbnailData","_ref4","rooms","_ref5","toThumbnail64","entityId","entity","imageDataUrl","_ref6","_ref7","auth","register","data","login","refreshToken","forgotPasswordStepOne","mobile","forgotPasswordStepTwo","resetPassword","validateUser","profile","getAddresses","getProfilePicture","uploadProfile","bodyFormData","FormData","console","log","uploadPlan","roomId","fabricIds","Compress","compress","dataurl","filename","arr","split","mime","match","bstr","atob","n","u8arr","Uint8Array","charCodeAt","File","type","dataURLtoFile","size","quality","resize","then","_fabricIds$join","relatedProjectId","usedFabrics","join","isPublic","changeName","firstName","lastName","plan","_ref8","sort","filter","search","filters","Object","hasOwnProperty","call","forEach","value","push","res","fabrics","isEmpty","getById","getFabricsById","addComment","planId","comment","postId","text","toggleLike","toggleFavourite","togglePublic","patch","path","op","from","getFilters","payment","submitOrder","wichFabricsHowMuchMeters","map","q","fabricId","meters","parseFloat","meterage","REGISTERATION_START","REGISTERATION_SUCCESS","REGISTERATION_DUPLICATE","REGISTERATION_FAIL","VALIDATION_START","VALIDATION_SUCCESS","VALIDATION_FAIL","GET_PROFILE_START","GET_PROFILE_SUCCESS","GET_PROFILE_FAIL","GET_PLAN_PROFILE_START","GET_PLAN_PROFILE_SUCCESS","GET_PLAN_PROFILE_FAIL","UPLOAD_PROFILE_START","UPLOAD_PROFILE_SUCCESS","UPLOAD_PROFILE_FAIL","CHANGE_NAME_START","CHANGE_NAME_SUCCESS","CHANGE_NAME_FAIL","UPLOAD_PLAN_START","UPLOAD_PLAN_SUCCESS","UPLOAD_PLAN_FAIL","FilterSymbol","brightness","contrast","saturate","sepia","invert","FilterType","keys","37","38","39","40","preventDefault","e","preventDefaultForScrollKeys","keyCode","supportsPassive","window","addEventListener","defineProperty","wheelOpt","passive","wheelEvent","document","createElement","target","className","removeEventListener","defaultChanges","filterType","scale","rotate","bitRotate","flipH","flipV","isDragging","offsetX","offsetY","canMouseX","canMouseY","mainPosX","mainPosY","lastPosX","lastPosY","diffX","diffY","PhotoEditor","React","Component","constructor","props","super","state","mainImage","mainImageData","mainImage64","changedImage","changeFilterCanvas","img","Image","crossOrigin","onload","scaleW","naturalWidth","scaleH","naturalHeight","this","canvasOriginal","current","originalCtx","getContext","drawImage","canvasNoir","noirCtx","canvasFade","fadeCtx","canvasChrome","chromeCtx","canvasMono","monoCtx","src","getEditorCanvas","width","height","canvas","querySelector","getEditorContext","loadImageOnCanvas","posX","posY","scaleV","imgWidth","imgHeight","Math","sqrt","pow","recDiamW","isMaterial","recDiamH","ctx","setState","abs","ctxFilter","key","X","Y","translate","PI","drawPattern","getCroppedImageCanvas","tempCanvas","tempCtx","cropSection","editorCropSection","getImageData","offsetLeft","offsetTop","offsetWidth","offsetHeight","putImageData","pattern","toDataURL","patternPreview","imgSrc","style","backgroundImage","handleFilterImage","newFilter","handleRotateImage","angle","newAngle","handleBitRotateImage","handleScaleImage","scaleRatio","handleFlipHImage","handleFlipVImage","handlePatternFlipHImage","handlePatternFlipVImage","handleFixedValueRange","handleSaveImage","handleMouseDown","parseInt","clientX","clientY","handleMouseUp","handleMouseOut","degToRad","handleMouseMove","handleFilterType","createRef","componentWillMount","image","material","photoEditorMaterial","url","prevState","componentDidMount","componentDidUpdate","render","filterDefault","filterDefaultStr","cropEditorClassNames","classnames","error","toast","Tabs","direction","defaultIndex","onSelect","num","onClick","onUpdate","onClose","xmlns","version","x","y","viewBox","enableBackground","xmlSpace","fillRule","clipRule","d","aria-hidden","focusable","fill","TabList","Tab","stroke","strokeWidth","strokeLinecap","strokeLinejoin","TabPanel","Container","Row","Col","sm","md","lg","InputRange","maxValue","minValue","step","onChange","formatLabel","cx","cy","r","x1","y1","x2","y2","rx","opacity","transform","name","checked","htmlFor","ref","background","Fragment","xmlnsXlink","preserveAspectRatio","xlinkHref","fillOpacity","strokeOpacity","padding","loading","onWheel","persist","deltaY","onMouseDown","onMouseMove","onMouseUp","onMouseOut","connect","store","photoEditor","tools","dispatch","saveImageData","types","initialImageData","uploadRoom","roomName","setRoomName","useState","roomImage","setRoomImage","setError","AvForm","onSubmit","handleSubmit","event","errors","values","AvField","bsSize","label","validate","required","errorMessage","tag","CustomInput","files","Spinner","Button","color","chooseRoom","getRooms","useEffect","isUploadRoomVisible","setIsUploadRoomVisible","toggle","setRooms","containerClassname","classames","margin","marginBottom","paddingLeft","paddingRight","Input","placeholder","word","includes","room","index","RoomItem","tabIndex","chooseRoomHandler","Modal","isOpen","ModalHeader","ModalBody","UploadRoom","AUTH_START","AUTH_SUCCESS","AUTH_FAIL","LOG_OUT","AUTH_REFRESHED","FORGOT_PASSWORD_STEP_ONE_START","FORGOT_PASSWORD_STEP_ONE_SUCCESS","FORGOT_PASSWORD_STEP_ONE_FAIL","FORGOT_PASSWORD_STEP_TWO_START","FORGOT_PASSWORD_STEP_TWO_SUCCESS","FORGOT_PASSWORD_STEP_TWO_FAIL","SET_ERROR","InlineEditor","onEdit","icon","saveIcon","inputRef","useRef","isEditing","setIsEditing","isHover","setIsHover","editedTitle","setEditedTitle","normalRender","hoverRender","handleEditing","setTimeout","focus","editingRender","innerRef","onBlur","handleSave","onMouseEnter","onMouseLeave","defaultProps","deleteRoom","updateRoomTitle","_props$room$editedThu","toggleDeletePopover","setIsDeletePopoverVisible","isDeletePopoverVisible","roomCardClassName","Card","onFocus","CardImg","editedThumbnailUrl","originalThumbnailUrl","newTitle","Link","to","editImage","trashImage","Popover","placement","trigger","PopoverHeader","PopoverBody","deleteHandler","Icon","hoverable","classNames","ImgWarper","Point","prototype","add","o","subtract","wXtX","w","Matrix22","dotP","multiply","M11","M21","M12","M22","multiply_d","weightedAverage","p","i","sx","sy","sw","InfintyNormDistanceTo","max","N11","N12","N21","N22","adjugate","determinant","m","addM","inverse","Warper","imgData","optGridSize","optAlpha","alpha","gridSize","source","bilinearInterpolation","BilinearInterpolation","setTransform","clearRect","grid","j","a","b","c","warp","fromPoints","toPoints","Date","getTime","deformation","AffineDeformation","transformedGrid","pointMover","newImg","generate","drawGrid","context","beginPath","point","moveTo","lineTo","strokeStyle","pRelative","qRelative","A","Array","t","pAverage","qAverage","B","imgTargetData","createImageData","fromGrid","toGrid","sourcePoints","fillingPoints","srcX","srcY","xl","xr","topX","topY","bottomX","bottomY","yl","yr","x0","y0","min","srcX1","floor","base","nnquery","query","ceil","base11","base12","base21","base22","t11","t12","PointDefiner","oriPoints","dstPoints","dragging_","computing_","currentPointIndex","imgWarper","redraw","addPoints","originalPoint","destinationPoint","original","destination","getCurrentPointIndex","currentPoint","redrawCanvas","points","drawOnePoint","lineWidth","getImageAbsolutePath","paper","corsChangeURL","d3","FastAverageColor","setPhotoEditorMaterial","payload","closePhotoEditorMaterial","getMaterials","getState","_getState$tools$allMa","allMaterials","apiService","response","status","meta_data","find","images","replace","editedImageUrl","originalImageUrl","message","description","catch","_error$response","uploadMaterial","_error$response2","editMaterial","_error$response3","resetMaterial","_error$response4","deleteMaterial","materialId","_error$response5","updateMaterialTitle","_error$response6","activePath","getRoom","convertedRoom","projectId","layers","projectData","JSON","parse","children","now","_error$response7","convertedRooms","localStorage","getItem","setItem","stringify","_error$response8","oldWidth","oldHeight","getElementById","newHeight","newWidth","setAttribute","setup","project","clear","prespective","dimension","myPath","Path","relatedCurvePoints","axis","closed","fillColor","_id","baseCanvas","_error$response9","editRoom","location","reload","_error$response10","_error$response11","_error$response12","drawForHelpTour","roomInDesignStage","dropAndDrawMaterial","zoom","offsetH","offsetV","layerChildren","currentLayerChild","globalCompositeOperation","selectedPrespectives","oldPerspectiveData","monhani","pathData","curvePoints","drawWarpedImage","scaledImage","perspective","layerChild","Promise","resolve","reject","myCanvas","position","clip","Path2D","myNewImage","grayscalePathOnImage","backgroundImgWidth","backgroundImgHeight","textureUrl","destinationPoints","item","isMain","faces","onFlyImage","addImageProcess","warpedImage","warpOnCube","cubeData","applyCurveFilter","selectCurve","range","paths","closePath","imgPixels","avg","element","isPointInPath","onerror","mainCanvas","DrawPathWithFilters","applyTextureZoom","setContrast","intercept","setBrightness","onFlyPathCanvas","onFlyPathContext","changeMultiplyIntensity","resetMultiply","reader","FileReader","readAsDataURL","readerEvent","dataUrl","thumbnailCanvas","maxLength","result","imageSrc","createPatternFromImage","textureSize","imageSize","tCtx","repeatNumberH","round","repeatNumberV","fillStyle","createPattern","rect","tempFlipedHCanvas","tFlipedHCtx","tempFlipedVCanvas","tFlipedVCtx","hIndex","vIndex","dx","dy","createPatternFromImageForDrawing","toPlans","plans","toPlan","fullName","authorFullName","imageUrl","thumbnail","isLiked","isFavourited","isMarked","showToggle","isOwner","toComments","comments","toComment","userImageUrl","authorProfilePhoto","time","addedDate","modificationDate","toPlanProfile","_profile$authorTotalP","authorProfilePicture","PlanCount","authorTotalPostCount","RegistrationDate","rankCurrentMonth","authorCurrentMonthRank","rankTotal","authorTotalRank","toUserProfile","_profile$postsCount","date","registerationDate","getFullYear","postsCount","rankInCurrentMonth","totalRank","toFabrics","toFabric","fabric","price","discount","offPrice","toFilters","toFilter","_filter$options$split","_filter$options","displayTitle","items","options","SET_PHOTO_EDITOR_MATERIAL","CLOSE_PHOTO_EDITOR_MATERIAL","OPERATION_STARTED","OPERATION_FAILED","GET_MATERIALS_SUCCESS","GET_ROOMS_SUCCESS","UPLOAD_MATERIAL_SUCCESS","RESET_MATERIAL_SUCCESS","DELETE_MATERIAL_SUCCESS","DELETE_ROOM_SUCCESS","UPLOAD_ROOM_SUCCESS","EDIT_MATERIAL_TITLE_SUCCESS","EDIT_ROOM_TITLE_SUCCESS","ACTIVE_PATH","CHOOOSE_ROOM","CHOOSE_ROOM_INITIAL","SELECT_CURVE","RESET_DRAG","APPLY_CURVE_FILTER","APPLY_TEXTURE_ZOOM","CHANGE_CURVE_MULTIPLY","CHANGE_MULTIPLY","GET_ROOM_SUCCESS","DRAWING_STARTED","DRAWING_ENDED","SAVE_GRAY_SCALE_IMAGES","password","history","userName","isUserValidated","href","validationKey","logout","removeItem","sendForgotPasswordToken","forgotPasswordFinalStep","Auth","RangePicker","onFinalChange","Range","renderTrack","display","borderRadius","getTrackBackground","colors","alignSelf","renderThumb","isDragged","assign","cursor","justifyContent","alignItems","backgroundSize","choosedPrespective","multiplyIntensity","_props$multiplyIntens","_props$roomInDesignSt","setZoom","setOffsetH","setOffsetV","setMultiplyIntensity","miniEditorClassNames","invisible","isVisible","bottom","grayScaleImages","setMultiply","left","right","roomPaths","isPhotoEditorVisible","hoveredPathId","isMiniEditorVisible","isDrawing","uploading","user","show","setShow","setPoints","tool","Tool","_window$paper$project","hitTest","_activeLayer","_children","selectionClassNames","overflow","zIndex","hidden","MiniEditorV1","MiniEditorV2","NavbarItem","tooltipOpen","setTooltipOpen","useDispatch","cart","useSelector","isButton","outline","showCartBadge","tooltip","Tooltip","config","cartIcon","logoutIcon","order","isEditorOnly","node","domtoimage","toPng","link","download","click","isAuthenticated","getUserFullname","unique_name","jwtDecode","Index","isPlan","isPayment","isTourOpen","setIsTourOpen","currentStep","setCurrentStep","toggleTourStatus","tourFooter","goTo","nextPage","restartTourStatus","steps","selector","content","action","stepInteraction","finalTourFooter","logo","alt","Tour","disableDotsNavigation","showNumber","showButtons","showCloseButton","goToStep","onRequestClose","rounded","pathname","Materials","lazy","Loading","textAlign","fontSize","fontWeight","activeTab","setActiveTab","tab","backgroundColor","Nav","tabs","NavItem","NavLink","active","materialImage","TabContent","TabPane","tabId","Suspense","fallback","Rooms","MainLayout","fluid","Tools","Navbar","Secene","AccordionItem","extraInfo","badge","setIsOpen","useHistory","Collapse","getPlans","oldPlans","getPlan","getPlanFabrics","planFabrics","newPlans","likesCount","success","newValue","updatePlan","PlanFilters","currentFilters","setCurrentFilters","addQueryString","filterTitle","planFilters","useLocation","newFilters","param","RegExp","test","set","isChecked","_currentFilters$find","some","FilterIcon","filterIndex","_currentFilters$find2","slice","FormGroup","check","Label","onFilterChanged","currentFilter","UserProfile","PlanSidebar","isCustomProfile","profileLoading","planProfileLoading","CartIcon","FavouriteIcon","PlanLayout","isImage","PlanPreview","fullSize","onLiked","onFavourited","onTogglePublic","onShare","CardHeader","top","onError","imgElement","classList","CardFooter","LikeIcon","LikeWhiteIcon","CommentWhiteIcon","ShareWhiteIcon","FavouriteWhiteIcon","PlanShareModal","visible","getUrl","WhatsappShareButton","separator","WhatsappIcon","TelegramShareButton","TelegramIcon","TwitterShareButton","TwitterIcon","EmailShareButton","subject","body","EmailIcon","_document$querySelect","_document$querySelect2","setSort","setType","setFilter","loadingPlans","dropdownOpen","setDropdownOpen","setSearch","setPageNumber","newSort","newType","onLikedPlan","onFavouritedPlan","isShareVisible","setIsShareVisible","toggleShare","currentPlanId","setCurrentPlanId","onSearchChanged","debounce","searchValue","onSearch","Form","InputGroup","InputGroupAddon","addonType","SearchIcon","SortIcon","Dropdown","DropdownToggle","caret","DropdownMenu","DropdownItem","InfiniteScroll","dataLength","next","fetchData","prevPageNumber","hasMore","loader","endMessage","scrollableTarget","clientHeight","CardColumns","updateCartMeterage","newMeterage","removeFromCart","Price","discounted","getPrice","_price$toLocaleString","toLocaleString","moment","loadPersian","Comment","fromNow","PlanComments","onAddComment","setComment","disabled","planComments","loadingFabrics","loadingPlan","useParams","xs","alert","goBack","_fabric$price","permalink","SignUp","registerUser","handleSubmitStepTwo","handleInputChange","getErrors","messages","CardTitle","CardBody","isRegistrationDone","autoComplete","waiting","minLength","informationIcon","withRouter","withTranslate","SignIn","duplicateMessage","ForgotPassword","handleSecondStepSubmit","isForgotPasswordTokenSent","HIT_TEST_OPTIONS","segments","tolerance","DragTracker","ep","Element","matches","msMatchesSelector","webkitMatchesSelector","closest","s","tagName","parentNode","parentElement","container","documentElement","callback","callbackStart","callbackDragStart","callbackEnd","callbackDragEnd","callbackClick","propagate","propagateEvents","roundCoords","dragOutside","handleOffset","offsetToCenter","dragged","mouseOffset","dragStart","getMousePos","elm","offset","stayWithin","respectBounds","bounds","getBoundingClientRect","nodeName","stopEvent","stopPropagation","onDown","contains","onMove","pos","onEnd","onTouchEnd","tweakTouch","isLeftButton","buttons","which","relayTouch","handler","touches","touch","targetTouches","changedTouches","bind","handleClick","setTool","rest","POS","l","onOpen","portalNode","align","ay","ax","ty","tx","oy","ox","_tether","Tether","attachment","targetAttachment","constraints","pin","beforeClose","remove","destroy","_timeout","componentWillUnmount","clearTimeout","closeOnEsc","closeOnOutsideClick","Portal","openByClickOn","Toolbar","menuCube","setMenuCube","cubeSkewAngle","setCubeSkewAngle","BootstrapButton","_ref9","_ref10","_ref11","_ref12","activeTool","fullscreen","showLayers","menuHandler","showMenu","showCube","stateDynamicCubeHandler","getCurrentStep","disableInteraction","closeWithMask","showDynamicCube","deleteDynamicCubeHandler","confirmDynamicCubeHandler","perspectiveType","onChangeComplete","applyCubeSkewChange","isShowMenu","setDefaultView","selectedItem","dimType","getInitialCubeSkewAngle","Cube1","Cube2","Cube4","Cube3","canRedo","redo","canUndo","undo","clearHistory","toggleLayers","toggleFullscreen","save","isSaving","Prompt","when","Loader","handleLabelClick","selected","getIcon","getText","Item","handleArrowClick","onArrowClick","expanded","activeLayer","onLabelClick","onStrokeColorClick","onChangeLockClick","isGroup","hasChildren","labelProps","treeProps","collapsed","nodeLabel","strokeColors","Tree","selectedElement","nextStrokeColor","islocked","locked","colorIndex","strokeColor","Layers","selectItem","handleStrokeColorClick","changeColorItem","handleLockClick","changeLockItem","itemProps","PlaceDetector","roomIndex","newRooms","$set","imageLoaded","loaded","saveData","_loaded","fitImage","updateFinalData","finalData","selectedItems","toolbarProps","pick","layerProps","viewProps","_view","moveToolMouseWheel","matrix","View","Layer","Raster","onLoad","layerId","itemId","_canvasStyle","moveToolMouseDown","onMouseDrag","moveToolMouseDrag","moveToolMouseUp","onKeyDown","selectToolKeyDown","onKeyUp","selectToolKeyUp","selectToolMouseDown","selectToolMouseDrag","selectToolMouseUp","selectToolMouseEnter","penToolMouseDown","penToolMouseDrag","penToolMouseUp","penToolKeyUp","fastPenToolMouseDown","fastPenToolMouseMove","fastPenToolKeyUp","circleToolMouseDown","rectangleToolMouseDown","perspectiveToolMouseDown","deleteToolMouseDown","cubeGenerator","dynamicCubeGenerator","showPhotoEditor","photoEditorHandler","randomInt","open","nextProps","placeDetector","savingError","email","newData","compose","WrappedComponent","resizeWindow","_request","requestAnimationFrame","resizePaper","forceUpdate","mounted","_box","initialData","INITIAL_DATA","_initialData","cancelAnimationFrame","initialLocalStorage","imageWidth","imageHeight","innerHeight","_this","keyDown","getPrevHistory","itemIndex","isLocked","nextHistory","0","addHistory","groupItems","hasGroup","groups","group","nextGroup","uuidv4","$push","addItem","layer","layerIndex","findIndex","nextItem","updateItem","updateItemById","$splice","historyIndex","exitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen","requestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","ALLOW_KEYBOARD_INPUT","fullScreenChange","code","_prevTool","keyUp","_pan","_pinch","_raster","raster","view","fitBounds","_imageLoaded","wr","hr","center","_defaultViewSettings","mouseWheel","nativeEvent","newZoom","wheelDelta","viewToProject","mouseDown","mouseDrag","getPinchEventData","prev","getPinchEventState","getPanEventData","getPanEventState","mouseUp","pageX","pageY","distance","projectToView","moveToolTouchStart","touchStart","moveToolTouchMove","touchMove","moveToolTouchEnd","touchEnd","selectItems","_firstSelectedItem","_item","_secondSelectedItem","deselectItems","deselectItem","modifiers","shift","_changed","_point","twoPath","_tool","_scope","newPath","exclude","getPathData","getSegments","seg","_updateTimeout","_project","hit","_segment","segment","bringToFront","delta","shiftKey","removeSegment","ctrlKey","insert","firstSelectedItem","measurePointAngles","vectors","point1","vector","deviations","vector1","removeOutlier","pathItem","strokeScaling","drawPerspectiveGuideLines","interpolatedPoints","interpolate","distances","point2","splice","_defaultData","initialDynamicCube","clearNodes","querySelectorAll","cornerPoints","breakRatio","skewAngle","isNew","getCubePoint","getCubePointFromPath","corner_points","warpOnCubeWithControls","dim","internalBounds","centerX","centerY","getPlanOfType","updateCubeSkewAngle","onmouseup","updateCubeByNodes","getFacesOfType","_dynamicCubeState","showMenuCube","pointsArray","p1","p2","p3","p4","p5","p6","p7","p8","polygons","isInsidePolygon","vs","inside","xi","yi","xj","yj","hideBackPoint","_svgState","lines","vertices","back_points","nodes","coord","hideLine","start","end","createNode","radius","nodeRadius","addNode","addLine","addPolygons","newPolygons","polygon_vertices","draggingNodeHandler","line","selectedNode","stateCubeHandler","initialCube","realPoints","realPointsSort","confirmCubeHandler","realIndex","pathIndex","deleteCubeHandler","dimPoints","dimPositions","newNodes","newLines","getAttribute","polygon","strokeDasharray","visibility","data-draggable","_path","simplify","toCSS","firstSegment","control","lastSegment","mouseMove","circle","Circle","randomColor","rectangle","Rectangle","PaymentLayout","CartItem","onRemove","onEdited","currentMeterage","setCurrentMeterage","isDeleteModalVisible","setIsDeleteModalVisible","onEditing","input","EditIcon","ModalFooter","PaymentSidebar","cartItems","reduce","curr","_curr$meterage","_curr$discount","_curr$meterage2","_curr$discount2","Cart","onRemoveCartItem","onCartItemEdited","CartWhiteIcon","submittingOrder","deliverOnStore","setDeliverOnStore","deliverOnAddress","setDeliverOnAddress","onRadioChanged","addresses","onBuy","buyOrder","PublicRoutes","component","layout","AuthLayout","PrivateRoutes","Home","Plans","Plan","layoutProps","Payment","PaymentResult","receiptNumber","setReceiptNumber","isSuccessful","SmileIcon","onResetCart","PhotoEditorLayout","PlaceDetectorLayout","Routes","Switch","Layout","Props","Route","exact","totalProps","Redirect","App","initialState","accessToken","userId","reducer","actions","planProfile","profileError","uploadingError","_state$roomInDesignSt","_state$roomInDesignSt2","_state$roomInDesignSt3","_state$roomInDesignSt4","_state$roomInDesignSt5","_state$roomInDesignSt6","_state$roomInDesignSt7","_state$roomInDesignSt8","_state$roomInDesignSt9","_state$roomInDesignSt10","_state$roomInDesignSt11","_state$roomInDesignSt12","_state$roomInDesignSt13","_state$roomInDesignSt14","_state$roomInDesignSt15","_state$roomInDesignSt16","_state$roomInDesignSt17","newState","dragKey","plansError","planError","loadingPlanComments","planCommentsError","loadingPlanFabrics","planFabricsError","planProfileError","planFiltersLoading","planFiltersError","addingComment","addressIsLoading","submittingOrderId","combineReducers","Intl","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","persistConfig","storage","whitelist","persistedReducer","persistReducer","rootReducer","Boolean","hostname","translations","fa","locale","help","notRegisteredYet","forgotYourPassword","requiredField","invalidEmailFormat","invalidMobileFormat","passwordMinLength","persistor","createStore","applyMiddleware","thunk","IntlActions","setLocale","persistStore","redux","ReactDOM","Provider","PersistGate","IntlProvider","HashRouter","ToastContainer","rtl","navigator","serviceWorker","ready","registration","unregister","Password","Mobile","FirstName","LastName","getProfile","_getState$tools$roomI","_getState$tools$roomI2","_getState$tools$roomI3","imgInitialWidth","_defaultOptions","skewSign","controls","triangles","showFrame","subs","divs","scaleFactor","dirtyTriangles","pts","mode","draw","imgBase64","appendChild","calcLengthAndAngles","stretchPoints","innerText","insertBefore","nextSibling","nodeIndex","ratio","lengthOf","atan2","tan","updateSameLinePoints","updateCornerPoints","calcBreakLine","angleOf","d0_3","d3_5","d0_1","d2_3","d2_4","d1_2","targetAngle1","targetAngle2","sin","cos","deltaX","renderPlane","tri","number","drawTriangle","p0","t0","u","v","t1","t2","innerWidth","calculateGeometry","k","triangle","dx1","dy1","dx2","dy2","imgW","imgH","sub","curRow","nextRow","curRowX1","curRowY1","curRowX2","curRowY2","nextRowX1","nextRowY1","nextRowX2","nextRowY2","div","curCol","nextCol","dNextX","dNextY","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","u1","u2","v1","v2","triangle1","Triangle","TextCoord","triangle2","sx0","sy0","sx1","sy1","sx2","sy2","denom","m11","m12","m21","m22","globalAlpha","restore","fromIndex","toIndex","ys","INITIAL_IMAGE_DATA","SAVE_IMAGE_DATA"],"mappings":"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","file":"static/js/main.0e344721.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo.9c606a98.svg\";","import axios from 'axios'\r\nimport Compress from 'compress.js'\r\nimport { isEmpty } from 'lodash'\r\nimport {\r\n createPatternFromImageNew,\r\n toBase64,\r\n toThumbnail64,\r\n} from '../helper/fileHelper'\r\n\r\nexport const baseURL = 'http://api.mokabber.com/'\r\nexport const baseShareURL = 'http://app.mokabber.com'\r\n\r\nconst productsBaseURL='http://localhost:51888';\r\naxios.defaults.baseURL = baseURL\r\n\r\nexport const setAxiosHeader = (token) => {\r\n axios.defaults.headers.common = { Authorization: `Bearer ${token}` }\r\n\r\n //axios.defaults.headers.common = { Authorization: `Basic ck_3db8b87a927dddc3dddf0e279915c90d90e8c2e0:cs_f6c2e509dedf4523fc8eeb363323434844937cd8` }\r\n}\r\n\r\nconst productAPI = axios.create({\r\n baseURL: 'https://mokabber.com/wp-json/wc/v3',\r\n \r\n})\r\n\r\nexport default {\r\n materials: {\r\n getOne: ({ id }) =>\r\n productAPI.get(`/products/${id}`, {\r\n params: {\r\n consumer_key : `ck_3db8b87a927dddc3dddf0e279915c90d90e8c2e0`,\r\n consumer_secret: `cs_f6c2e509dedf4523fc8eeb363323434844937cd8`,\r\n },\r\n }),\r\n getAll: (pageNumber = 1, searchText) => {\r\n const urlParams = new URLSearchParams()\r\n urlParams.append('page', pageNumber);\r\n\r\n urlParams.append('per_page', 50);\r\n\r\n if (searchText) urlParams.append('searchTerm', searchText)\r\n return productAPI.get(`/products?${urlParams.toString()}`, {\r\n params: {\r\n consumer_key : `ck_3db8b87a927dddc3dddf0e279915c90d90e8c2e0`,\r\n consumer_secret: `cs_f6c2e509dedf4523fc8eeb363323434844937cd8`,\r\n },\r\n })\r\n },\r\n update: (id, toUpdate) => axios.put(`/api/Fabric/${id}`, toUpdate),\r\n updateImage: async ({ id, file, patternFlipH, patternFlipV }) => {\r\n const patternFile = await createPatternFromImageNew(\r\n file,\r\n 100,\r\n 400,\r\n patternFlipH,\r\n patternFlipV\r\n )\r\n // const thumbnailDataUrl = await toThumbnail64(patternFile)\r\n return axios.post(\r\n '/api/product/UploadAppThumbnail',\r\n {\r\n imageData: patternFile,\r\n productId: id,\r\n },\r\n {\r\n baseURL: productsBaseURL,\r\n }\r\n )\r\n },\r\n resetEditedImage: (id) =>\r\n axios.delete(`/api/product/removeAppThumbnail/${id}`, {\r\n baseURL: productsBaseURL,\r\n }),\r\n create: async ({ title, file }) => {\r\n const { imageData, thumbnailDataUrl } = await toBase64(file)\r\n return axios.post('/api/Fabric', {\r\n imageData,\r\n title,\r\n thumbnailData: thumbnailDataUrl,\r\n })\r\n },\r\n delete: ({ id }) => axios.delete(`/api/Fabric/${id}`),\r\n },\r\n rooms: {\r\n getOne: (id) => axios.get(`/api/Project/${id}`),\r\n getAll: () => axios.get('/api/Project'),\r\n update: (id, toUpdate) => axios.put(`/api/Project/${id}`, toUpdate),\r\n updateImage: async ({ id, file }) => {\r\n const thumbnailDataUrl = await toThumbnail64(file)\r\n\r\n return axios.post('/api/Media?fromEditor=true', {\r\n entityId: id,\r\n entity: 'Project',\r\n imageDataUrl: file,\r\n thumbnailDataUrl,\r\n })\r\n },\r\n create: async ({ title, file }) => {\r\n const { imageData, thumbnailDataUrl } = await toBase64(file)\r\n return axios.post('/api/Project', {\r\n imageData,\r\n title,\r\n thumbnailData: thumbnailDataUrl,\r\n })\r\n },\r\n delete: ({ id }) => axios.delete(`/api/Project/${id}`),\r\n },\r\n auth: {\r\n register: (data) => axios.post('/api/Authentication/register', data),\r\n login: (data) => axios.post('/api/Authentication/login', data),\r\n // TODO:??\r\n refreshToken: () => axios.get(),\r\n forgotPasswordStepOne: (mobile) =>\r\n axios.post(\r\n `/api/Authentication/RequestForgotPsswordToken?userName=${mobile}`\r\n ),\r\n forgotPasswordStepTwo: (data) =>\r\n axios.post('/api/Authentication/ForgotPassword', data),\r\n resetPassword: (data) =>\r\n axios.post('/api/Authentication/ResetPassword', data),\r\n validateUser: (data) =>\r\n axios.post('/api/Authentication/validateAccount', data),\r\n },\r\n profile: {\r\n get: () => axios.get('/api/user'),\r\n getAddresses: (id) => axios.get(id),\r\n getProfilePicture: () => axios.get('/api/User/retrive-profile-photo'),\r\n uploadProfile: (file) => {\r\n const bodyFormData = new FormData()\r\n console.log('file', file)\r\n bodyFormData.append('image', file)\r\n return axios.post('/api/User/upload-profile', bodyFormData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n uploadPlan: (file, roomId, fabricIds) => {\r\n const compress = new Compress()\r\n\r\n function dataURLtoFile(dataurl, filename) {\r\n const arr = dataurl.split(',')\r\n const mime = arr[0].match(/:(.*?);/)[1]\r\n const bstr = atob(arr[1])\r\n let n = bstr.length\r\n const u8arr = new Uint8Array(n)\r\n\r\n while (n--) {\r\n u8arr[n] = bstr.charCodeAt(n)\r\n }\r\n return new File([u8arr], filename, { type: mime })\r\n }\r\n\r\n return compress\r\n .compress([dataURLtoFile(file)], {\r\n size: 1,\r\n quality: 0.75,\r\n resize: false,\r\n })\r\n .then((data) => {\r\n return axios.post('/api/Post', {\r\n relatedProjectId: roomId,\r\n usedFabrics: fabricIds?.join(',') ?? '',\r\n title: '',\r\n imageData: 'data:image/png;base64,' + data[0].data,\r\n isPublic: true,\r\n })\r\n })\r\n },\r\n changeName: (firstName, lastName) =>\r\n axios.put('/api/User', {\r\n firstName: firstName,\r\n lastName: lastName,\r\n }),\r\n },\r\n plan: {\r\n getAll: ({ type, sort, filter, search, pageNumber }) => {\r\n if (type === 'my') return axios.get('/api/Post/my-posts')\r\n else if (type === 'favourite')\r\n return axios.get('/api/Post/marked-posts')\r\n\r\n const filters = []\r\n for (const id in filter) {\r\n if (Object.hasOwnProperty.call(filter, id)) {\r\n const filterValues = filter[id].split(',')\r\n filterValues.forEach((value) => {\r\n filters.push({ id: id, value: value })\r\n })\r\n }\r\n }\r\n\r\n const urlParams = new URLSearchParams()\r\n urlParams.append('pageNumber', pageNumber ?? 1)\r\n urlParams.append('pageSize', 15)\r\n if (search) urlParams.append('searchTerm', search)\r\n\r\n switch (sort) {\r\n case 'popular':\r\n urlParams.append('orderBy', 'likesCount desc')\r\n break\r\n case 'most-seen':\r\n urlParams.append('orderBy', 'visitCount desc')\r\n break\r\n case 'newest':\r\n urlParams.append('orderBy', 'addedDate desc')\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n if (filters.length > 0) {\r\n return axios\r\n .post(\r\n '/api/Product/filter',\r\n {\r\n filters: filters,\r\n },\r\n {\r\n baseURL: productsBaseURL,\r\n }\r\n )\r\n .then((res) => {\r\n const fabrics = res.data\r\n return axios.post(\r\n '/api/Post/search?' + urlParams.toString(),\r\n isEmpty(fabrics) ? [0] : fabrics\r\n )\r\n })\r\n }\r\n\r\n return axios.post('/api/Post/search?' + urlParams.toString(), [])\r\n },\r\n getById: (id) => axios.get(`/api/Post/${id}`),\r\n getFabricsById: (id) =>\r\n productAPI.get(`/products/${id}`, {\r\n params: {\r\n consumer_key : `ck_3db8b87a927dddc3dddf0e279915c90d90e8c2e0`,\r\n consumer_secret: `cs_f6c2e509dedf4523fc8eeb363323434844937cd8`,\r\n },\r\n }),\r\n addComment: (planId, comment) =>\r\n axios.post('/api/comment', {\r\n postId: planId,\r\n text: comment,\r\n }),\r\n toggleLike: (planId) => axios.post(`/api/Post/like/${planId}`),\r\n toggleFavourite: (planId) => axios.post(`/api/Post/mark/${planId}`),\r\n togglePublic: (planId, value) =>\r\n axios.patch(`/api/Post/${planId}`, [\r\n {\r\n value: value,\r\n path: 'isPublic',\r\n op: 'replace',\r\n from: 'string',\r\n },\r\n ]),\r\n getFilters: () =>\r\n axios.get('/api/ProductFeature', {\r\n baseURL: productsBaseURL,\r\n }),\r\n },\r\n payment: {\r\n submitOrder: (fabrics) =>\r\n axios.post('api/Order/submit', {\r\n wichFabricsHowMuchMeters: fabrics.map((q) => ({\r\n fabricId: q.id,\r\n meters: parseFloat(q.meterage),\r\n })),\r\n }),\r\n },\r\n}\r\n","export const REGISTERATION_START = 'REGISTERATION_START'\r\nexport const REGISTERATION_SUCCESS = 'REGISTERATION_SUCCESS'\r\nexport const REGISTERATION_DUPLICATE = 'REGISTERATION_DUPLICATE'\r\nexport const REGISTERATION_FAIL = 'REGISTERATION_FAIL'\r\n\r\nexport const VALIDATION_START = 'VALIDATION_START'\r\nexport const VALIDATION_SUCCESS = 'VALIDATION_SUCCESS'\r\nexport const VALIDATION_FAIL = 'VALIDATION_FAIL'\r\n\r\nexport const GET_PROFILE_START = 'GET_PROFILE_START'\r\nexport const GET_PROFILE_SUCCESS = 'GET_PROFILE_SUCCESS'\r\nexport const GET_PROFILE_FAIL = 'GET_PROFILE_FAIL'\r\n\r\nexport const GET_PLAN_PROFILE_START = 'GET_PLAN_PROFILE_START'\r\nexport const GET_PLAN_PROFILE_SUCCESS = 'GET_PLAN_PROFILE_SUCCESS'\r\nexport const GET_PLAN_PROFILE_FAIL = 'GET_PLAN_PROFILE_FAIL'\r\n\r\nexport const UPLOAD_PROFILE_START = 'UPLOAD_PROFILE_START'\r\nexport const UPLOAD_PROFILE_SUCCESS = 'UPLOAD_PROFILE_SUCCESS'\r\nexport const UPLOAD_PROFILE_FAIL = 'UPLOAD_PROFILE_FAIL'\r\n\r\nexport const CHANGE_NAME_START = 'CHANGE_NAME_START'\r\nexport const CHANGE_NAME_SUCCESS = 'CHANGE_NAME_SUCCESS'\r\nexport const CHANGE_NAME_FAIL = 'CHANGE_NAME_FAIL'\r\n\r\nexport const UPLOAD_PLAN_START = 'UPLOAD_PLAN_START'\r\nexport const UPLOAD_PLAN_SUCCESS = 'UPLOAD_PLAN_SUCCESS'\r\nexport const UPLOAD_PLAN_FAIL = 'UPLOAD_PLAN_FAIL'\r\n","import React from 'react'\r\nimport { Tabs, TabList, Tab, TabPanel } from 'react-tabs'\r\nimport { Col, Container, Row, Toast, ToastBody, ToastHeader } from 'reactstrap'\r\n\r\nimport { connect } from 'react-redux'\r\nimport 'react-tabs/style/react-tabs.css'\r\nimport '../../src/assets/scss/photoEditor.scss'\r\nimport { saveImageData, initialImageData } from '../redux/photoEditor/actions'\r\nimport InputRange from 'react-input-range'\r\nimport 'react-input-range/lib/css/index.css'\r\nimport classnames from 'classnames'\r\n\r\nimport { toast } from 'react-toastify'\r\nimport { createPatternFromImageNew } from '../helper/fileHelper'\r\n\r\nconst FilterSymbol = {\r\n brightness: '%',\r\n contrast: '%',\r\n saturate: '%',\r\n sepia: '%',\r\n invert: '%',\r\n}\r\n\r\nconst FilterType = {\r\n original: 0,\r\n chrome: 1,\r\n fade: 2,\r\n mono: 3,\r\n noir: 4,\r\n}\r\n\r\n// left: 37, up: 38, right: 39, down: 40,\r\n// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36\r\nvar keys = { 37: 1, 38: 1, 39: 1, 40: 1 }\r\n\r\nfunction preventDefault(e) {\r\n e.preventDefault()\r\n}\r\n\r\nfunction preventDefaultForScrollKeys(e) {\r\n if (keys[e.keyCode]) {\r\n preventDefault(e)\r\n return false\r\n }\r\n}\r\n\r\n// modern Chrome requires { passive: false } when adding event\r\nvar supportsPassive = false\r\ntry {\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n supportsPassive = true\r\n },\r\n })\r\n )\r\n} catch (e) {}\r\n\r\nvar wheelOpt = supportsPassive ? { passive: false } : false\r\nvar wheelEvent =\r\n 'onwheel' in document.createElement('div') ? 'wheel' : 'mousewheel'\r\n\r\n// call this to Disable\r\nfunction disableScroll() {\r\n window.addEventListener('DOMMouseScroll', preventDefault, false) // older FF\r\n window.addEventListener(wheelEvent, preventDefault, wheelOpt) // modern desktop\r\n window.addEventListener('touchmove', preventDefault, wheelOpt) // mobile\r\n window.addEventListener('keydown', preventDefaultForScrollKeys, false)\r\n}\r\n\r\n// call this to Enable\r\nfunction enableScroll() {\r\n window.removeEventListener('DOMMouseScroll', preventDefault, false)\r\n window.removeEventListener(wheelEvent, preventDefault, wheelOpt)\r\n window.removeEventListener('touchmove', preventDefault, wheelOpt)\r\n window.removeEventListener('keydown', preventDefaultForScrollKeys, false)\r\n}\r\n\r\ndocument.addEventListener('wheel', (e) => {\r\n if (e.target.className === 'editor-crop') {\r\n disableScroll()\r\n } else {\r\n enableScroll()\r\n }\r\n})\r\n\r\nconst defaultChanges = {\r\n filter: {},\r\n filterType: FilterType.original,\r\n scale: 1,\r\n rotate: 0,\r\n bitRotate: 0,\r\n flipH: false,\r\n flipV: false,\r\n isDragging: false,\r\n offsetX: 304,\r\n offsetY: 160,\r\n canMouseX: 0,\r\n canMouseY: 0,\r\n mainPosX: null,\r\n mainPosY: null,\r\n lastPosX: null,\r\n lastPosY: null,\r\n diffX: null,\r\n diffY: null,\r\n patternFlipH: false,\r\n patternFlipV: false,\r\n}\r\n\r\nclass PhotoEditor extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.editorCropSection = React.createRef()\r\n this.canvasMono = React.createRef()\r\n this.canvasNoir = React.createRef()\r\n this.canvasFade = React.createRef()\r\n this.canvasChrome = React.createRef()\r\n this.canvasOriginal = React.createRef()\r\n }\r\n\r\n state = {\r\n mainImage: '',\r\n mainImageData: '',\r\n mainImage64: '',\r\n changedImage: '',\r\n ...defaultChanges,\r\n }\r\n\r\n componentWillMount() {\r\n let image = this.props.image\r\n if (this.props.isMaterial) {\r\n let material = this.props.photoEditorMaterial\r\n image = material.url\r\n }\r\n\r\n this.setState((prevState) => {\r\n return {\r\n ...prevState,\r\n // mainImage: \"images/kit.jpeg\"\r\n mainImage: image,\r\n }\r\n })\r\n\r\n // const img = new Image();\r\n // img.onload = () => {\r\n // const canvas = document.createElement(\"CANVAS\");\r\n // canvas.width = img.naturalWidth;\r\n // canvas.height = img.naturalHeight;\r\n // const ctx = canvas.getContext(\"2d\");\r\n // ctx.drawImage(img, 0, 0, 96, 96);\r\n // this.setState({\r\n // mainImageData: ctx.getImageData(\r\n // 0,\r\n // 0,\r\n // img.naturalWidth,\r\n // img.naturalHeight\r\n // ),\r\n // mainImage64: canvas.toDataURL(\"image/png\")\r\n // });\r\n // };\r\n // img.src = \"images/kit.jpeg\";\r\n }\r\n\r\n componentDidMount() {\r\n this.loadImageOnCanvas()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.loadImageOnCanvas()\r\n }\r\n\r\n changeFilterCanvas = () => {\r\n const img = new Image()\r\n img.crossOrigin = 'Anonymous'\r\n\r\n img.onload = () => {\r\n const scaleW = 96 / img.naturalWidth\r\n const scaleH = 96 / img.naturalHeight\r\n if (this.canvasOriginal.current) {\r\n const canvasOriginal = this.canvasOriginal.current\r\n const originalCtx = canvasOriginal.getContext('2d')\r\n originalCtx.scale(scaleW, scaleH)\r\n originalCtx.drawImage(img, 0, 0)\r\n originalCtx.scale(0, 0)\r\n }\r\n\r\n if (this.canvasNoir.current) {\r\n const canvasNoir = this.canvasNoir.current\r\n const noirCtx = canvasNoir.getContext('2d')\r\n noirCtx.filter = 'saturate(20%) contrast(150%)'\r\n noirCtx.scale(scaleW, scaleH)\r\n noirCtx.drawImage(img, 0, 0)\r\n noirCtx.scale(0, 0)\r\n }\r\n\r\n if (this.canvasFade.current) {\r\n const canvasFade = this.canvasFade.current\r\n const fadeCtx = canvasFade.getContext('2d')\r\n fadeCtx.filter = 'saturate(180%) brightness(90%)'\r\n fadeCtx.scale(scaleW, scaleH)\r\n fadeCtx.drawImage(img, 0, 0)\r\n fadeCtx.scale(0, 0)\r\n }\r\n\r\n if (this.canvasChrome.current) {\r\n const canvasChrome = this.canvasChrome.current\r\n const chromeCtx = canvasChrome.getContext('2d')\r\n chromeCtx.filter = 'saturate(180%) brightness(120%)'\r\n chromeCtx.scale(scaleW, scaleH)\r\n chromeCtx.drawImage(img, 0, 0)\r\n chromeCtx.scale(0, 0)\r\n }\r\n\r\n if (this.canvasMono.current) {\r\n const canvasMono = this.canvasMono.current\r\n const monoCtx = canvasMono.getContext('2d')\r\n monoCtx.filter = 'saturate(20%) contrast(110%)'\r\n monoCtx.scale(scaleW, scaleH)\r\n monoCtx.drawImage(img, 0, 0)\r\n monoCtx.scale(0, 0)\r\n }\r\n }\r\n img.src = 'images/kit.jpeg'\r\n }\r\n\r\n getEditorCanvas = (width = 0, height = 0) => {\r\n const canvas = document.querySelector('#editor-canvas')\r\n if (width !== 0 && height !== 0) {\r\n canvas.width = width\r\n canvas.height = height\r\n }\r\n return canvas\r\n }\r\n\r\n getEditorContext = () => {\r\n const canvas = document.querySelector('#editor-canvas')\r\n return canvas.getContext('2d')\r\n }\r\n\r\n loadImageOnCanvas = () => {\r\n const img = new Image()\r\n img.crossOrigin = 'Anonymous'\r\n\r\n img.onload = () => {\r\n let canvas = null\r\n let posX = 0,\r\n posY = 0,\r\n scaleH = 1,\r\n scaleV = 1,\r\n imgWidth = img.width,\r\n imgHeight = img.height\r\n\r\n let recDiam = Math.sqrt(\r\n Math.pow(imgWidth, 2) + Math.pow(imgHeight, 2)\r\n )\r\n const recDiamW = this.props.isMaterial ? 600 : 1200\r\n const recDiamH = this.props.isMaterial ? recDiamW : recDiamW * 0.35\r\n // const recDiamW = 1200\r\n // const recDiamH = recDiamW * 0.35\r\n\r\n canvas = this.getEditorCanvas(recDiamW, recDiamH)\r\n const ctx = canvas.getContext('2d')\r\n\r\n if (this.state.mainPosX === null || this.state.mainPosY === null) {\r\n this.setState({\r\n mainPosX: (recDiamW - imgWidth) / 2,\r\n mainPosY: Math.abs((recDiamH - imgHeight) / 2),\r\n })\r\n }\r\n posX = this.state.mainPosX\r\n posY = this.state.mainPosY\r\n\r\n // Dragging\r\n if (this.state.isDragging) {\r\n posX = this.state.canMouseX - this.state.diffX\r\n posY = this.state.canMouseY - this.state.diffY\r\n }\r\n\r\n // Filter\r\n const filters = { ...this.state.filter }\r\n let ctxFilter = ''\r\n Object.keys(filters).forEach(function eachKey(key) {\r\n ctxFilter += `${key}(${filters[key]}${FilterSymbol[key]})`\r\n })\r\n ctx.filter = ctxFilter\r\n\r\n // Center Postion of Image\r\n let X = posX + imgWidth / 2,\r\n Y = posY + imgHeight / 2\r\n\r\n // Rotate\r\n if (this.state.rotate !== 0) {\r\n ctx.translate(X, Y)\r\n ctx.rotate((this.state.rotate * Math.PI) / 180)\r\n ctx.translate(-X, -Y)\r\n }\r\n\r\n if (this.state.bitRotate !== 0) {\r\n ctx.translate(X, Y)\r\n ctx.rotate((this.state.bitRotate * Math.PI) / 180)\r\n ctx.translate(-X, -Y)\r\n }\r\n\r\n // FlipH & FlipV\r\n if (this.state.flipH) {\r\n scaleH = -1\r\n posX = -(imgWidth + posX)\r\n }\r\n if (this.state.flipV) {\r\n scaleV = -1\r\n posY = -(imgHeight + posY)\r\n }\r\n\r\n // Scale\r\n const scale = this.state.scale\r\n if (this.state.flipH || this.state.flipV) {\r\n ctx.scale(scaleH * scale, scaleV * scale)\r\n } else {\r\n ctx.translate(X, Y)\r\n ctx.scale(scale, scale)\r\n ctx.translate(-X, -Y)\r\n }\r\n\r\n switch (this.state.filterType) {\r\n case FilterType.chrome:\r\n ctx.filter = ctxFilter + ' saturate(180%) brightness(120%)'\r\n break\r\n case FilterType.fade:\r\n ctx.filter = ctxFilter + ' saturate(180%) brightness(90%)'\r\n break\r\n case FilterType.mono:\r\n ctx.filter = ctxFilter + ' saturate(20%) contrast(110%)'\r\n break\r\n case FilterType.noir:\r\n ctx.filter = ctxFilter + ' saturate(20%) contrast(150%)'\r\n break\r\n default:\r\n break\r\n }\r\n\r\n ctx.drawImage(img, posX, posY, imgWidth, imgHeight)\r\n ctx.rotate(0)\r\n ctx.scale(1, 1)\r\n\r\n if (this.props.isMaterial) this.drawPattern(ctx)\r\n }\r\n\r\n img.src = this.state.mainImage\r\n }\r\n\r\n getCroppedImageCanvas = (ctx) => {\r\n const tempCanvas = document.createElement('canvas')\r\n const tempCtx = tempCanvas.getContext('2d')\r\n\r\n const cropSection = this.editorCropSection.current\r\n let imageData = ctx.getImageData(\r\n cropSection.offsetLeft + (this.props.isMaterial ? 16 : 0),\r\n cropSection.offsetTop,\r\n cropSection.offsetWidth,\r\n cropSection.offsetHeight\r\n )\r\n tempCanvas.width = cropSection.offsetWidth\r\n tempCanvas.height = cropSection.offsetHeight\r\n\r\n tempCtx.putImageData(imageData, 0, 0)\r\n return tempCanvas\r\n }\r\n\r\n drawPattern = (ctx) => {\r\n let tempCanvas = this.getCroppedImageCanvas(ctx)\r\n let pattern = tempCanvas.toDataURL('image/png')\r\n\r\n const patternPreview = document.querySelector(\r\n '.editor-material-preview'\r\n )\r\n\r\n if (patternPreview) {\r\n const { patternFlipH, patternFlipV } = this.state\r\n createPatternFromImageNew(\r\n pattern,\r\n 100,\r\n 400,\r\n patternFlipH,\r\n patternFlipV\r\n ).then((imgSrc) => {\r\n patternPreview.style.backgroundImage = `url(${imgSrc})`\r\n })\r\n }\r\n }\r\n\r\n handleFilterImage = (newFilter) => {\r\n const filter = { ...this.state.filter, ...newFilter }\r\n this.setState({ filter })\r\n }\r\n\r\n handleRotateImage = (angle) => {\r\n let newAngle = 0\r\n newAngle = this.state.rotate + angle\r\n if (newAngle > 360) {\r\n newAngle = newAngle - 360\r\n }\r\n this.setState({ rotate: newAngle })\r\n }\r\n\r\n handleBitRotateImage = (angle) => {\r\n this.setState({ bitRotate: angle })\r\n }\r\n\r\n handleScaleImage = (scaleRatio) => {\r\n this.setState({ scale: this.state.scale + scaleRatio * 0.02 })\r\n }\r\n\r\n handleFlipHImage = () => {\r\n this.setState({ flipH: !this.state.flipH })\r\n }\r\n\r\n handleFlipVImage = () => {\r\n this.setState({ flipV: !this.state.flipV })\r\n }\r\n\r\n handlePatternFlipHImage = () => {\r\n this.setState({ patternFlipH: !this.state.patternFlipH })\r\n }\r\n\r\n handlePatternFlipVImage = () => {\r\n this.setState({ patternFlipV: !this.state.patternFlipV })\r\n }\r\n\r\n handleFixedValueRange = (value, type) => {\r\n if (type === 'value') {\r\n return false\r\n // return value.toFixed(2);\r\n }\r\n // return value;\r\n }\r\n\r\n handleSaveImage = () => {\r\n const cropSection = this.editorCropSection.current\r\n const canvas = this.getEditorCanvas()\r\n var ctx = canvas.getContext('2d')\r\n let canvas1 = this.getCroppedImageCanvas(ctx)\r\n\r\n // canvas1.toBlob((b) => {\r\n // window.open(window.URL.createObjectURL(b))\r\n // })\r\n\r\n var dataURL = canvas1.toDataURL('image/png')\r\n return dataURL\r\n }\r\n\r\n handleMouseDown = (e) => {\r\n if (e.target.className !== 'editor-crop-section') {\r\n const canMouseX = parseInt(e.clientX - this.state.offsetX)\r\n const canMouseY = parseInt(e.clientY - this.state.offsetY)\r\n console.log('e is down', e)\r\n console.log('canMouseX', canMouseX)\r\n console.log('canMouseY', canMouseY)\r\n\r\n this.setState({\r\n canMouseX,\r\n canMouseY,\r\n diffX: canMouseX - this.state.mainPosX,\r\n diffY: canMouseY - this.state.mainPosY,\r\n isDragging: true,\r\n })\r\n }\r\n }\r\n\r\n handleMouseUp = (e) => {\r\n if (e.target.className !== 'editor-crop-section') {\r\n const canMouseX = parseInt(e.clientX - this.state.offsetX)\r\n const canMouseY = parseInt(e.clientY - this.state.offsetY)\r\n console.log('e is up', e)\r\n console.log('canMouseX', canMouseX)\r\n console.log('canMouseY', canMouseY)\r\n\r\n this.setState({\r\n mainPosX: canMouseX - this.state.diffX,\r\n mainPosY: canMouseY - this.state.diffY,\r\n canMouseX,\r\n canMouseY,\r\n diffX: null,\r\n diffY: null,\r\n isDragging: false,\r\n })\r\n }\r\n }\r\n\r\n handleMouseOut = (e) => {\r\n if (e.target.className !== 'editor-crop-section') {\r\n const canMouseX = parseInt(e.clientX - this.state.offsetX)\r\n const canMouseY = parseInt(e.clientY - this.state.offsetY)\r\n console.log('e is out', e)\r\n console.log('canMouseX', canMouseX)\r\n console.log('canMouseY', canMouseY)\r\n\r\n if (this.state.isDragging) {\r\n this.setState({\r\n mainPosX: -100,\r\n mainPosY: -100,\r\n })\r\n }\r\n this.setState({\r\n canMouseX,\r\n canMouseY,\r\n isDragging: false,\r\n })\r\n }\r\n }\r\n\r\n degToRad = (angle) => {\r\n return (angle * Math.PI) / 180\r\n }\r\n\r\n handleMouseMove = (e) => {\r\n if (this.state.isDragging) {\r\n const canMouseX = parseInt(e.clientX - this.state.offsetX)\r\n const canMouseY = parseInt(e.clientY - this.state.offsetY)\r\n\r\n this.setState({\r\n canMouseX,\r\n canMouseY,\r\n })\r\n }\r\n }\r\n\r\n handleFilterType = (type) => {\r\n this.setState({ filterType: type })\r\n }\r\n\r\n render() {\r\n const filterDefault = { brightness: 1, contrast: 1, saturate: 1 }\r\n const { patternFlipH, patternFlipV } = this.state\r\n filterDefault.brightness = this.state.filter.brightness\r\n ? this.state.filter.brightness / 100\r\n : 1\r\n filterDefault.contrast = this.state.filter.contrast\r\n ? this.state.filter.contrast / 100\r\n : 1\r\n filterDefault.saturate = this.state.filter.saturate\r\n ? this.state.filter.saturate / 100\r\n : 1\r\n const filterDefaultStr = `brightness(${filterDefault.brightness}) contrast(${filterDefault.contrast}) saturate(${filterDefault.saturate})`\r\n\r\n const cropEditorClassNames = classnames({\r\n 'editor-crop': true,\r\n 'is-material': this.props.isMaterial,\r\n })\r\n\r\n if (this.props.error) {\r\n toast(this.props.error)\r\n }\r\n return (\r\n
\r\n
\r\n {\r\n if (num === 1) {\r\n this.changeFilterCanvas()\r\n }\r\n }}\r\n >\r\n
\r\n {\r\n const file = this.handleSaveImage()\r\n this.props.onUpdate(file, {\r\n patternFlipH,\r\n patternFlipV,\r\n })\r\n }}\r\n >\r\n ذخیره ویرایش\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n this.setState({ ...defaultChanges })\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n تنظیم رنگ\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n فیلتر\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n برش\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n this.handleFilterImage(\r\n {\r\n brightness: value,\r\n }\r\n )\r\n }\r\n formatLabel={\r\n this\r\n .handleFixedValueRange\r\n }\r\n />\r\n

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n روشنایی\r\n

\r\n
\r\n \r\n \r\n
\r\n \r\n this.handleFilterImage(\r\n {\r\n contrast: value,\r\n }\r\n )\r\n }\r\n formatLabel={\r\n this\r\n .handleFixedValueRange\r\n }\r\n />\r\n

\r\n \r\n \r\n \r\n \r\n \r\n \r\n کنتراست\r\n

\r\n
\r\n \r\n \r\n
\r\n \r\n this.handleFilterImage(\r\n {\r\n saturate: value,\r\n }\r\n )\r\n }\r\n formatLabel={\r\n this\r\n .handleFixedValueRange\r\n }\r\n />\r\n

\r\n \r\n \r\n \r\n \r\n \r\n \r\n ساتوریشن\r\n

\r\n
\r\n \r\n \r\n
\r\n \r\n this.handleFilterImage(\r\n {\r\n invert: value,\r\n }\r\n )\r\n }\r\n formatLabel={\r\n this\r\n .handleFixedValueRange\r\n }\r\n />\r\n

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n اینورت\r\n

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
    \r\n \r\n \r\n this.handleFilterType(\r\n FilterType.original\r\n )\r\n }\r\n checked={\r\n this.state.filterType ===\r\n FilterType.original\r\n }\r\n />\r\n \r\n
    \r\n \r\n
    \r\n
\r\n \r\n\r\n \r\n \r\n this.handleFilterType(\r\n FilterType.chrome\r\n )\r\n }\r\n checked={\r\n this.state.filterType ===\r\n FilterType.chrome\r\n }\r\n />\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n this.handleFilterType(\r\n FilterType.fade\r\n )\r\n }\r\n checked={\r\n this.state.filterType ===\r\n FilterType.fade\r\n }\r\n />\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n this.handleFilterType(\r\n FilterType.mono\r\n )\r\n }\r\n checked={\r\n this.state.filterType ===\r\n FilterType.mono\r\n }\r\n />\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n this.handleFilterType(\r\n FilterType.noir\r\n )\r\n }\r\n checked={\r\n this.state.filterType ===\r\n FilterType.noir\r\n }\r\n />\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {/* {\r\n \r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Aspect Ratio\r\n */}\r\n {this.props.isMaterial && (\r\n \r\n \r\n this.handlePatternFlipHImage()\r\n }\r\n >\r\n \r\n flip\r\n \r\n چرخش افقی الگو\r\n \r\n \r\n this.handlePatternFlipVImage()\r\n }\r\n >\r\n \r\n flip\r\n \r\n\r\n چرخش عمودی الگو\r\n \r\n \r\n )}\r\n this.handleFlipVImage()}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n چرخش افقی\r\n \r\n this.handleFlipHImage()}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n چرخش عمودی\r\n \r\n \r\n this.handleRotateImage(90)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n چرخش به راست\r\n \r\n \r\n this.handleRotateImage(-90)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n چرخش به چپ\r\n \r\n
\r\n \r\n \r\n this.handleBitRotateImage(value)\r\n }\r\n formatLabel={this.handleFixedValueRange}\r\n />\r\n \r\n
\r\n {this.props.isMaterial ? (\r\n \r\n \r\n {\r\n e.persist()\r\n if (e.deltaY < 0) {\r\n this.handleScaleImage(1)\r\n } else if (e.deltaY > 0) {\r\n this.handleScaleImage(-1)\r\n }\r\n return false\r\n }}\r\n >\r\n \r\n \r\n this.handleMouseDown(e)\r\n }\r\n onMouseMove={(e) =>\r\n this.handleMouseMove(e)\r\n }\r\n onMouseUp={(e) =>\r\n this.handleMouseUp(e)\r\n }\r\n onMouseOut={(e) =>\r\n this.handleMouseOut(e)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n {\r\n e.persist()\r\n if (e.deltaY < 0) {\r\n this.handleScaleImage(1)\r\n } else if (e.deltaY > 0) {\r\n this.handleScaleImage(-1)\r\n }\r\n return false\r\n }}\r\n >\r\n \r\n \r\n this.handleMouseDown(e)\r\n }\r\n onMouseMove={(e) =>\r\n this.handleMouseMove(e)\r\n }\r\n onMouseUp={(e) => this.handleMouseUp(e)}\r\n onMouseOut={(e) =>\r\n this.handleMouseOut(e)\r\n }\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n loading: store.photoEditor.loading,\r\n mainImage: store.photoEditor.mainImage,\r\n changedImage: store.photoEditor.changedImage,\r\n photoEditorMaterial: store.tools.photoEditorMaterial,\r\n error: store.photoEditor.error,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n saveImageData: (image) => {\r\n dispatch(saveImageData(image))\r\n },\r\n initialImageData: (image) => {\r\n dispatch(initialImageData(image))\r\n },\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PhotoEditor)\r\n","import * as types from \"./constants\";\r\n\r\nexport const initialImageData = (image) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.INITIAL_IMAGE_DATA,\r\n image: image,\r\n });\r\n };\r\n};\r\n\r\nexport const saveImageData = (image) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.SAVE_IMAGE_DATA,\r\n image: image,\r\n loading: false,\r\n });\r\n };\r\n};\r\n","module.exports = __webpack_public_path__ + \"static/media/ADD TO FAV.eb405031.svg\";","module.exports = __webpack_public_path__ + \"static/media/SEARCH.36c981c1.svg\";","module.exports = __webpack_public_path__ + \"static/media/SHOPPING_WHITE.8d0098ba.svg\";","import React, { useState } from 'react'\r\nimport {\r\n Container,\r\n Row,\r\n Col,\r\n Button,\r\n Spinner,\r\n CustomInput,\r\n} from 'reactstrap'\r\nimport { AvForm, AvField } from 'availity-reactstrap-validation'\r\nimport { connect } from 'react-redux'\r\nimport { uploadRoom } from '../../../../redux/tools/actions'\r\n\r\nimport './uploadRoom.css'\r\n\r\nconst UploadRoom = (props) => {\r\n const [roomName, setRoomName] = useState(null)\r\n const [roomImage, setRoomImage] = useState(null)\r\n const [error, setError] = useState(null)\r\n\r\n const handleSubmit = (event, errors, values) => {\r\n event.preventDefault()\r\n event.persist()\r\n\r\n setError(errors)\r\n\r\n if (errors.length == 0) {\r\n props.uploadRoom(roomName, roomImage)\r\n props.onClose()\r\n }\r\n }\r\n\r\n const handleInputChange = (e) => {\r\n const name = e.target.name\r\n if (name === 'name') setRoomName(e.target.value)\r\n }\r\n\r\n const handleUpload = async (e) => {\r\n const file = e.target.files[0]\r\n setRoomImage(file)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {!props.loading ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n loading: state.tools.loading,\r\n error: state.tools.error,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n uploadRoom: (name, file) => dispatch(uploadRoom(name, file)),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(UploadRoom)\r\n","import React, { useEffect, useState } from 'react'\r\nimport RoomItem from '../rooms/roomItem/roomItem'\r\nimport {\r\n Col,\r\n Row,\r\n Button,\r\n Input,\r\n Modal,\r\n ModalHeader,\r\n ModalBody,\r\n Spinner,\r\n} from 'reactstrap'\r\nimport { connect } from 'react-redux'\r\nimport { chooseRoom, getRooms, uploadRoom } from '../../../redux/tools/actions'\r\nimport { toast } from 'react-toastify'\r\nimport classames from 'classnames'\r\nimport UploadRoom from './roomItem/uploadRoom'\r\n\r\nimport './index.css'\r\n\r\nconst Index = (props) => {\r\n useEffect(() => {\r\n if (!props.error && !props.loading) {\r\n if (props.rooms && props.rooms.length > 0) return\r\n props.getRooms()\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (props.error) toast.error(props.error.toString())\r\n }, [props.error])\r\n\r\n const [isUploadRoomVisible, setIsUploadRoomVisible] = useState(false)\r\n const toggle = () => setIsUploadRoomVisible(!isUploadRoomVisible)\r\n\r\n const [rooms, setRooms] = useState([])\r\n useEffect(() => {\r\n setRooms(props.rooms)\r\n }, [props.rooms])\r\n\r\n const handleSearchChanged = (e) => {\r\n const word = e.target.value\r\n setRooms(props.rooms.filter((q) => q.title.includes(word)))\r\n }\r\n\r\n const containerClassname = classames({\r\n 'rooms-row': true,\r\n 'is-loading': props.loading,\r\n 'w-100': true,\r\n })\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {rooms.map((room, index) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n
\r\n \r\n
\r\n {props.loading && (\r\n
\r\n \r\n

لطفا منتظر بمانید

\r\n
\r\n )}\r\n \r\n اتاق جدید\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n rooms: state.tools.rooms,\r\n loading: state.tools.loading,\r\n error: state.tools.error,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n chooseRoom: (id) => dispatch(chooseRoom(id)),\r\n getRooms: () => dispatch(getRooms()),\r\n uploadRoom: (file) => dispatch(uploadRoom(file)),\r\n }\r\n}\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Index)\r\n","export const AUTH_START = \"AUTH_START\";\r\nexport const AUTH_SUCCESS = \"AUTH_SUCCESS\";\r\nexport const AUTH_FAIL = \"AUTH_FAIL\";\r\nexport const LOG_OUT = \"LOG_OUT\";\r\nexport const AUTH_REFRESHED = \"AUTH_REFRESHED\";\r\nexport const VALIDATION_START = 'VALIDATION_START'\r\nexport const VALIDATION_SUCCESS = 'VALIDATION_SUCCESS'\r\nexport const VALIDATION_FAIL = 'VALIDATION_FAIL'\r\nexport const FORGOT_PASSWORD_STEP_ONE_START = 'FORGOT_PASSWORD_STEP_ONE_START'\r\nexport const FORGOT_PASSWORD_STEP_ONE_SUCCESS = 'FORGOT_PASSWORD_STEP_ONE_SUCCESS'\r\nexport const FORGOT_PASSWORD_STEP_ONE_FAIL = 'FORGOT_PASSWORD_STEP_ONE_FAIL'\r\nexport const FORGOT_PASSWORD_STEP_TWO_START = 'FORGOT_PASSWORD_STEP_TWO_START'\r\nexport const FORGOT_PASSWORD_STEP_TWO_SUCCESS = 'FORGOT_PASSWORD_STEP_TWO_SUCCESS'\r\nexport const FORGOT_PASSWORD_STEP_TWO_FAIL = 'FORGOT_PASSWORD_STEP_TWO_FAIL'\r\nexport const SET_ERROR = 'SET_ERROR'","import React, { useState, useRef, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Input } from 'reactstrap'\r\n\r\nimport './inlineEditor.css'\r\n\r\nconst InlineEditor = ({ title, onEdit, icon, saveIcon, className }) => {\r\n const inputRef = useRef(null)\r\n\r\n const [isEditing, setIsEditing] = useState(false)\r\n const [isHover, setIsHover] = useState(false)\r\n const [editedTitle, setEditedTitle] = useState(title)\r\n\r\n useEffect(() => {\r\n setEditedTitle(title)\r\n }, [title])\r\n\r\n const toggleEditing = () => setIsEditing(!isEditing)\r\n\r\n const handleEditing = () => {\r\n toggleEditing()\r\n setTimeout(() => {\r\n inputRef.current.focus()\r\n }, 100)\r\n }\r\n const handleChangeInput = (e) => {\r\n e.preventDefault()\r\n const value = e.target.value\r\n setEditedTitle(value)\r\n }\r\n\r\n const handleSave = () => {\r\n onEdit(editedTitle)\r\n setIsEditing(false)\r\n }\r\n const normalRender =

{title}

\r\n const hoverRender = (\r\n \r\n

{title}

\r\n \r\n {icon}\r\n \r\n
\r\n )\r\n const editingRender = (\r\n \r\n \r\n setTimeout(() => {\r\n setIsEditing(false)\r\n }, 500)\r\n }\r\n />\r\n \r\n {saveIcon}\r\n \r\n \r\n )\r\n\r\n if (isEditing)\r\n return (\r\n setIsHover(true)}\r\n onMouseLeave={() => setIsHover(false)}\r\n >\r\n {editingRender}\r\n \r\n )\r\n if (isHover)\r\n return (\r\n setIsHover(true)}\r\n onMouseLeave={() => setIsHover(false)}\r\n >\r\n {hoverRender}\r\n \r\n )\r\n return (\r\n setIsHover(true)}\r\n onMouseLeave={() => setIsHover(false)}\r\n >\r\n {normalRender}\r\n \r\n )\r\n}\r\n\r\nInlineEditor.propTypes = {\r\n title: PropTypes.string,\r\n onEdit: PropTypes.func.isRequired,\r\n icon: PropTypes.string,\r\n saveIcon: PropTypes.string,\r\n}\r\n\r\nInlineEditor.defaultProps = {\r\n title: 'بدون نام',\r\n icon: 'edit',\r\n saveIcon: 'save',\r\n}\r\n\r\nexport default InlineEditor\r\n","import React, { useState } from 'react'\r\nimport {\r\n Card,\r\n CardBody,\r\n CardHeader,\r\n Row,\r\n CardImg,\r\n NavLink,\r\n Popover,\r\n PopoverHeader,\r\n PopoverBody,\r\n Button,\r\n} from 'reactstrap'\r\nimport { Link } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\n\r\nimport './roomItem.css'\r\nimport { deleteRoom, updateRoomTitle } from '../../../../redux/tools/actions'\r\nimport InlineEditor from '../../../../components/Tools/inlineEditor'\r\nimport classnames from 'classnames'\r\nimport editImage from '../../../../assets/img/navbarIcons/edit.svg'\r\nimport trashImage from '../../../../assets/img/navbarIcons/trash.svg'\r\n\r\nconst RoomItem = (props) => {\r\n const deleteHandler = () => {\r\n props.deleteRoom(props.room.id)\r\n toggleDeletePopover()\r\n }\r\n\r\n const toggleDeletePopover = () =>\r\n setIsDeletePopoverVisible(!isDeletePopoverVisible)\r\n\r\n const [isDeletePopoverVisible, setIsDeletePopoverVisible] = useState(false)\r\n const [isHover, setIsHover] = useState(false)\r\n\r\n const handleEditRoom = (newTitle) => {\r\n props.updateRoomTitle(props.room.id, newTitle)\r\n }\r\n\r\n const roomCardClassName = classnames('room-card', { 'is-hover': isHover })\r\n\r\n return (\r\n props.chooseRoomHandler(props.room)}\r\n onFocus={() => setIsHover(true)}\r\n onMouseEnter={() => setIsHover(true)}\r\n onMouseLeave={() => setIsHover(false)}\r\n tabIndex={props.tabIndex}\r\n >\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n آیا از حذف اطمینان دارید؟\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n deleteRoom: (id) => dispatch(deleteRoom(id)),\r\n updateRoomTitle: (id, title) => dispatch(updateRoomTitle(id, title)),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RoomItem)\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport './Icon.css'\r\n\r\nconst Icon = ({ src, size, className, hoverable, onClick }) => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default Icon\r\n","module.exports = __webpack_public_path__ + \"static/media/SMILE.19ce6b54.svg\";","const perspectiveTypes = {\r\n FRONT_1D: 1,\r\n FRONT_2D: 2,\r\n RIGHT_2D: 3,\r\n LEFT_2D: 4,\r\n LEFT_3D: 5,\r\n RIGHT_3D: 6,\r\n FRONT_3D: 7,\r\n}\r\n\r\n// ----------------------------------------------\r\n// Point.js\r\n// ----------------------------------------------\r\n\r\nvar ImgWarper = ImgWarper || {}\r\n\r\nImgWarper.Point = function (x, y) {\r\n this.x = x\r\n this.y = y\r\n}\r\n\r\nImgWarper.Point.prototype.add = function (o) {\r\n return new ImgWarper.Point(this.x + o.x, this.y + o.y)\r\n}\r\n\r\nImgWarper.Point.prototype.subtract = function (o) {\r\n return new ImgWarper.Point(this.x - o.x, this.y - o.y)\r\n}\r\n\r\n// w * [x; y] * [x, y]\r\nImgWarper.Point.prototype.wXtX = function (w) {\r\n return new ImgWarper.Matrix22(\r\n this.x * this.x * w,\r\n this.x * this.y * w,\r\n this.y * this.x * w,\r\n this.y * this.y * w\r\n )\r\n}\r\n\r\n// Dot product\r\nImgWarper.Point.prototype.dotP = function (o) {\r\n return this.x * o.x + this.y * o.y\r\n}\r\n\r\nImgWarper.Point.prototype.multiply = function (o) {\r\n return new ImgWarper.Point(\r\n this.x * o.M11 + this.y * o.M21,\r\n this.x * o.M12 + this.y * o.M22\r\n )\r\n}\r\n\r\nImgWarper.Point.prototype.multiply_d = function (o) {\r\n return new ImgWarper.Point(this.x * o, this.y * o)\r\n}\r\n\r\nImgWarper.Point.weightedAverage = function (p, w) {\r\n var i\r\n var sx = 0,\r\n sy = 0,\r\n sw = 0\r\n\r\n for (i = 0; i < p.length; i++) {\r\n sx += p[i].x * w[i]\r\n sy += p[i].y * w[i]\r\n sw += w[i]\r\n }\r\n return new ImgWarper.Point(sx / sw, sy / sw)\r\n}\r\n\r\nImgWarper.Point.prototype.InfintyNormDistanceTo = function (o) {\r\n return Math.max(Math.abs(this.x - o.x), Math.abs(this.y - o.y))\r\n}\r\n\r\n// ----------------------------------------------\r\n// matrix22.js\r\n// ----------------------------------------------\r\n\r\nImgWarper.Matrix22 = function (N11, N12, N21, N22) {\r\n this.M11 = N11\r\n this.M12 = N12\r\n this.M21 = N21\r\n this.M22 = N22\r\n}\r\n\r\nImgWarper.Matrix22.prototype.adjugate = function () {\r\n return new ImgWarper.Matrix22(this.M22, -this.M12, -this.M21, this.M11)\r\n}\r\n\r\nImgWarper.Matrix22.prototype.determinant = function () {\r\n return this.M11 * this.M22 - this.M12 * this.M21\r\n}\r\n\r\nImgWarper.Matrix22.prototype.multiply = function (m) {\r\n this.M11 *= m\r\n this.M12 *= m\r\n this.M21 *= m\r\n this.M22 *= m\r\n return this\r\n}\r\n\r\nImgWarper.Matrix22.prototype.addM = function (o) {\r\n this.M11 += o.M11\r\n this.M12 += o.M12\r\n this.M21 += o.M21\r\n this.M22 += o.M22\r\n}\r\n\r\nImgWarper.Matrix22.prototype.inverse = function () {\r\n return this.adjugate().multiply(1.0 / this.determinant())\r\n}\r\n\r\n// ----------------------------------------------\r\n// deformation.js\r\n// ----------------------------------------------\r\n\r\nvar ImgWarper = ImgWarper || {}\r\n\r\nImgWarper.Warper = function (canvas, img, imgData, optGridSize, optAlpha) {\r\n this.alpha = optAlpha || 1\r\n this.gridSize = optGridSize || 20\r\n this.canvas = canvas\r\n this.ctx = canvas.getContext('2d')\r\n\r\n var source = img\r\n this.width = source.width\r\n this.height = source.height\r\n this.imgData = imgData.data\r\n this.canvas.width = img.width\r\n this.canvas.height = img.height\r\n this.bilinearInterpolation = new ImgWarper.BilinearInterpolation(\r\n this.width,\r\n this.height,\r\n canvas\r\n )\r\n\r\n this.ctx.setTransform(1, 0, 0, 1, 0, 0)\r\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\r\n\r\n this.ctx.putImageData(imgData, 0, 0)\r\n\r\n this.grid = []\r\n for (var i = 0; i < this.width; i += this.gridSize) {\r\n for (var j = 0; j < this.height; j += this.gridSize) {\r\n var a = new ImgWarper.Point(i, j)\r\n var b = new ImgWarper.Point(i + this.gridSize, j)\r\n var c = new ImgWarper.Point(i + this.gridSize, j + this.gridSize)\r\n var d = new ImgWarper.Point(i, j + this.gridSize)\r\n this.grid.push([a, b, c, d])\r\n }\r\n }\r\n}\r\n\r\nImgWarper.Warper.prototype.warp = function (fromPoints, toPoints) {\r\n var t0 = new Date().getTime()\r\n var deformation = new ImgWarper.AffineDeformation(\r\n toPoints,\r\n fromPoints,\r\n this.alpha\r\n )\r\n var transformedGrid = []\r\n for (var i = 0; i < this.grid.length; ++i) {\r\n transformedGrid[i] = [\r\n deformation.pointMover(this.grid[i][0]),\r\n deformation.pointMover(this.grid[i][1]),\r\n deformation.pointMover(this.grid[i][2]),\r\n deformation.pointMover(this.grid[i][3]),\r\n ]\r\n }\r\n var t1 = new Date().getTime()\r\n var newImg = this.bilinearInterpolation.generate(\r\n this.imgData,\r\n this.grid,\r\n transformedGrid\r\n )\r\n this.ctx.setTransform(1, 0, 0, 1, 0, 0)\r\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\r\n\r\n this.ctx.putImageData(newImg, 0, 0)\r\n\r\n var t2 = new Date().getTime()\r\n}\r\n\r\nImgWarper.Warper.prototype.drawGrid = function (fromPoints, toPoints) {\r\n // Forward warping.\r\n var deformation = new ImgWarper.AffineDeformation(\r\n fromPoints,\r\n toPoints,\r\n this.alpha\r\n )\r\n var context = this.canvas.getContext('2d')\r\n for (var i = 0; i < this.grid.length; ++i) {\r\n context.beginPath()\r\n var point = deformation.pointMover(this.grid[i][0])\r\n context.moveTo(point.x, point.y)\r\n for (var j = 1; j < 4; ++j) {\r\n point = deformation.pointMover(this.grid[i][j])\r\n context.lineTo(point.x, point.y)\r\n }\r\n context.strokeStyle = 'rgba(170, 170, 170, 0.5)'\r\n context.stroke()\r\n }\r\n}\r\n\r\nImgWarper.AffineDeformation = function (fromPoints, toPoints, alpha) {\r\n this.w = null\r\n this.pRelative = null\r\n this.qRelative = null\r\n this.A = null\r\n if (fromPoints.length != toPoints.length) {\r\n console.error('Points are not of same length.')\r\n return\r\n }\r\n this.n = fromPoints.length\r\n this.fromPoints = fromPoints\r\n this.toPoints = toPoints\r\n this.alpha = alpha\r\n}\r\nImgWarper.AffineDeformation.prototype.pointMover = function (point) {\r\n if (null == this.pRelative || this.pRelative.length < this.n) {\r\n this.pRelative = new Array(this.n)\r\n }\r\n if (null == this.qRelative || this.qRelative.length < this.n) {\r\n this.qRelative = new Array(this.n)\r\n }\r\n if (null == this.w || this.w.length < this.n) {\r\n this.w = new Array(this.n)\r\n }\r\n if (null == this.A || this.A.length < this.n) {\r\n this.A = new Array(this.n)\r\n }\r\n\r\n for (var i = 0; i < this.n; ++i) {\r\n var t = this.fromPoints[i].subtract(point)\r\n this.w[i] = Math.pow(t.x * t.x + t.y * t.y, -this.alpha)\r\n }\r\n\r\n var pAverage = ImgWarper.Point.weightedAverage(this.fromPoints, this.w)\r\n var qAverage = ImgWarper.Point.weightedAverage(this.toPoints, this.w)\r\n\r\n for (var i = 0; i < this.n; ++i) {\r\n this.pRelative[i] = this.fromPoints[i].subtract(pAverage)\r\n this.qRelative[i] = this.toPoints[i].subtract(qAverage)\r\n }\r\n\r\n var B = new ImgWarper.Matrix22(0, 0, 0, 0)\r\n\r\n for (var i = 0; i < this.n; ++i) {\r\n B.addM(this.pRelative[i].wXtX(this.w[i]))\r\n }\r\n\r\n B = B.inverse()\r\n for (var j = 0; j < this.n; ++j) {\r\n this.A[j] =\r\n point.subtract(pAverage).multiply(B).dotP(this.pRelative[j]) *\r\n this.w[j]\r\n }\r\n\r\n var r = qAverage //r is an point\r\n for (var j = 0; j < this.n; ++j) {\r\n r = r.add(this.qRelative[j].multiply_d(this.A[j]))\r\n }\r\n return r\r\n}\r\n\r\n// ----------------------------------------------\r\n// interpolation.js\r\n// ----------------------------------------------\r\nvar ImgWarper = ImgWarper || {}\r\n\r\nImgWarper.BilinearInterpolation = function (width, height, canvas) {\r\n this.width = width\r\n this.height = height\r\n this.ctx = canvas.getContext('2d')\r\n this.imgTargetData = this.ctx.createImageData(this.width, this.height)\r\n}\r\n\r\nImgWarper.BilinearInterpolation.prototype.generate = function (\r\n source,\r\n fromGrid,\r\n toGrid\r\n) {\r\n this.imgData = source\r\n for (var i = 0; i < toGrid.length; ++i) {\r\n this.fill(toGrid[i], fromGrid[i])\r\n }\r\n return this.imgTargetData\r\n}\r\n\r\nImgWarper.BilinearInterpolation.prototype.fill = function (\r\n sourcePoints,\r\n fillingPoints\r\n) {\r\n var i, j\r\n var srcX, srcY\r\n var x0 = fillingPoints[0].x\r\n var x1 = fillingPoints[2].x\r\n var y0 = fillingPoints[0].y\r\n var y1 = fillingPoints[2].y\r\n x0 = Math.max(x0, 0)\r\n y0 = Math.max(y0, 0)\r\n x1 = Math.min(x1, this.width - 1)\r\n y1 = Math.min(y1, this.height - 1)\r\n\r\n var xl, xr, topX, topY, bottomX, bottomY\r\n var yl, yr, rgb, index\r\n\r\n for (i = x0; i <= x1; ++i) {\r\n xl = (i - x0) / (x1 - x0)\r\n xr = 1 - xl\r\n topX = xr * sourcePoints[0].x + xl * sourcePoints[1].x\r\n topY = xr * sourcePoints[0].y + xl * sourcePoints[1].y\r\n bottomX = xr * sourcePoints[3].x + xl * sourcePoints[2].x\r\n bottomY = xr * sourcePoints[3].y + xl * sourcePoints[2].y\r\n for (j = y0; j <= y1; ++j) {\r\n yl = (j - y0) / (y1 - y0)\r\n yr = 1 - yl\r\n srcX = topX * yr + bottomX * yl\r\n srcY = topY * yr + bottomY * yl\r\n index = (j * this.width + i) * 4\r\n if (\r\n srcX < 0 ||\r\n srcX > this.width - 1 ||\r\n srcY < 0 ||\r\n srcY > this.height - 1\r\n ) {\r\n this.imgTargetData.data[index] = 255\r\n this.imgTargetData.data[index + 1] = 255\r\n this.imgTargetData.data[index + 2] = 255\r\n this.imgTargetData.data[index + 3] = 0.5\r\n continue\r\n }\r\n var srcX1 = Math.floor(srcX)\r\n var srcY1 = Math.floor(srcY)\r\n var base = (srcY1 * this.width + srcX1) * 4\r\n // rgb = this.nnquery(srcX, srcY);\r\n this.imgTargetData.data[index] = this.imgData[base]\r\n this.imgTargetData.data[index + 1] = this.imgData[base + 1]\r\n this.imgTargetData.data[index + 2] = this.imgData[base + 2]\r\n this.imgTargetData.data[index + 3] = this.imgData[base + 3]\r\n }\r\n }\r\n}\r\n\r\nImgWarper.BilinearInterpolation.prototype.nnquery = function (x, y) {\r\n var x1 = Math.floor(x)\r\n var y1 = Math.floor(y)\r\n var base = (y1 * this.width + x1) * 4\r\n return [\r\n this.imgData[base],\r\n this.imgData[base + 1],\r\n this.imgData[base + 2],\r\n this.imgData[base + 3],\r\n ]\r\n}\r\n\r\nImgWarper.BilinearInterpolation.prototype.query = function (x, y) {\r\n var x1, x2, y1, y2\r\n x1 = Math.floor(x)\r\n x2 = Math.ceil(x)\r\n y1 = Math.floor(y)\r\n y2 = Math.ceil(y)\r\n\r\n var c = [0, 0, 0, 0] // get new RGB\r\n\r\n var base11 = (y1 * this.width + x1) * 4\r\n var base12 = (y2 * this.width + x1) * 4\r\n var base21 = (y1 * this.width + x2) * 4\r\n var base22 = (y2 * this.width + x2) * 4\r\n // 4 channels: RGBA\r\n for (var i = 0; i < 4; ++i) {\r\n var t11 = this.imgData[base11 + i]\r\n var t12 = this.imgData[base12 + i]\r\n var t21 = this.imgData[base21 + i]\r\n var t22 = this.imgData[base22 + i]\r\n var t =\r\n (t11 * (x2 - x) * (y2 - y) +\r\n t21 * (x - x1) * (y2 - y) +\r\n t12 * (x2 - x) * (y - y1) +\r\n t22 * (x - x1) * (y - y1)) /\r\n ((x2 - x1) * (y2 - y1))\r\n c[i] = parseInt(t)\r\n }\r\n return c\r\n}\r\n\r\n// ----------------------------------------------\r\n// point_definer.js\r\n// ----------------------------------------------\r\n\r\nvar ImgWarper = ImgWarper || {}\r\n\r\nImgWarper.PointDefiner = function (\r\n canvas,\r\n image,\r\n imgData,\r\n optGridSize,\r\n optAlpha,\r\n oriPoints,\r\n dstPoints\r\n) {\r\n this.oriPoints = oriPoints ?? new Array()\r\n this.dstPoints = dstPoints ?? new Array()\r\n\r\n //set up points for change;\r\n var c = canvas\r\n this.canvas = canvas\r\n var that = this\r\n this.dragging_ = false\r\n this.computing_ = false\r\n this.currentPointIndex = -1\r\n this.imgWarper = new ImgWarper.Warper(\r\n c,\r\n image,\r\n imgData,\r\n optGridSize,\r\n optAlpha\r\n )\r\n}\r\n\r\nImgWarper.PointDefiner.prototype.redraw = function () {\r\n this.imgWarper.warp(this.oriPoints, this.dstPoints)\r\n}\r\n\r\nImgWarper.PointDefiner.prototype.addPoints = function (\r\n originalPoint,\r\n destinationPoint\r\n) {\r\n this.dragging_ = true\r\n\r\n var original = new ImgWarper.Point(originalPoint.x, originalPoint.y)\r\n this.oriPoints.push(original)\r\n\r\n var destination = new ImgWarper.Point(\r\n destinationPoint.x,\r\n destinationPoint.y\r\n )\r\n this.dstPoints.push(destination)\r\n\r\n this.currentPointIndex = this.getCurrentPointIndex(original)\r\n this.redraw()\r\n}\r\n\r\nImgWarper.PointDefiner.prototype.getCurrentPointIndex = function (q) {\r\n var currentPoint = -1\r\n\r\n for (var i = 0; i < this.dstPoints.length; i++) {\r\n if (this.dstPoints[i].InfintyNormDistanceTo(q) <= 20) {\r\n currentPoint = i\r\n return i\r\n }\r\n }\r\n return currentPoint\r\n}\r\n\r\nImgWarper.PointDefiner.prototype.redrawCanvas = function (points) {\r\n var ctx = this.canvas.getContext('2d')\r\n for (var i = 0; i < this.oriPoints.length; i++) {\r\n if (i < this.dstPoints.length) {\r\n if (i == this.currentPointIndex) {\r\n this.drawOnePoint(this.dstPoints[i], ctx, 'orange')\r\n } else {\r\n this.drawOnePoint(this.dstPoints[i], ctx, '#6373CF')\r\n }\r\n\r\n ctx.beginPath()\r\n ctx.lineWidth = 3\r\n ctx.moveTo(this.oriPoints[i].x, this.oriPoints[i].y)\r\n ctx.lineTo(this.dstPoints[i].x, this.dstPoints[i].y)\r\n //ctx.strokeStyle = '#691C50';\r\n ctx.stroke()\r\n } else {\r\n this.drawOnePoint(this.oriPoints[i], ctx, '#119a21')\r\n }\r\n }\r\n ctx.stroke()\r\n}\r\n\r\n// ----------------------------------------------\r\n// utility.js\r\n// ----------------------------------------------\r\n\r\nvar calculatedWidthRatio\r\nvar calculatedHeightRatio\r\nvar ImgWarper = ImgWarper || {}\r\n\r\nconst calcWidthRatio = (points, planesNumber) => {\r\n if (planesNumber === Planes.Three) {\r\n let upPoint = points.find(\r\n (q) =>\r\n q.faces.includes(Faces.Up) &&\r\n !q.faces.includes(Faces.Left) &&\r\n !q.faces.includes(Faces.Right)\r\n )\r\n let leftUpPoint = points.find(\r\n (q) => q.faces.includes(Faces.Left) && q.faces.includes(Faces.Up)\r\n )\r\n let leftBottomPoint = points.find(\r\n (q) =>\r\n q.faces.includes(Faces.Left) &&\r\n !q.faces.includes(Faces.Up) &&\r\n !q.faces.includes(Faces.Right)\r\n )\r\n\r\n let leftDistance = distancePoint(leftBottomPoint, leftUpPoint)\r\n let upDistance = distancePoint(leftUpPoint, upPoint)\r\n return (calculatedWidthRatio = upDistance / (leftDistance + upDistance))\r\n }\r\n\r\n return null\r\n}\r\n\r\nconst calcHeightRatio = (points, planesNumber) => {\r\n if (planesNumber === Planes.Three) {\r\n let upPoint = points.find(\r\n (q) =>\r\n q.faces.includes(Faces.Up) &&\r\n !q.faces.includes(Faces.Left) &&\r\n !q.faces.includes(Faces.Right)\r\n )\r\n let rightUpPoint = points.find(\r\n (q) => q.faces.includes(Faces.Right) && q.faces.includes(Faces.Up)\r\n )\r\n let rightBottomPoint = points.find(\r\n (q) =>\r\n q.faces.includes(Faces.Right) &&\r\n !q.faces.includes(Faces.Up) &&\r\n !q.faces.includes(Faces.Left)\r\n )\r\n\r\n let rightDistance = distancePoint(rightBottomPoint, rightUpPoint)\r\n let upDistance = distancePoint(rightUpPoint, upPoint)\r\n return (calculatedHeightRatio =\r\n upDistance / (rightDistance + upDistance))\r\n } else if (planesNumber === Planes.Two) {\r\n let upRightPoint = points.find((q) => q.index === 2)\r\n let middleRightPoint = points.find((q) => q.index === 4)\r\n let bottomRightPoint = points.find((q) => q.index === 6)\r\n let rightDistance = distancePoint(middleRightPoint, bottomRightPoint)\r\n let upDistance = distancePoint(upRightPoint, middleRightPoint)\r\n\r\n return (calculatedHeightRatio =\r\n upDistance / (rightDistance + upDistance))\r\n }\r\n return null\r\n}\r\n\r\nconst defaultOriginalPoints = (\r\n backgroundImgWidth,\r\n backgroundImgHeight,\r\n widthRatio,\r\n heightRatio,\r\n planesNumber,\r\n margin = 0\r\n) => {\r\n let result = []\r\n\r\n const xMin = 0 + margin\r\n const xMax = backgroundImgWidth - margin\r\n const xMid = backgroundImgWidth * widthRatio\r\n\r\n const yMin = 0 + margin\r\n const yMax = backgroundImgHeight - margin\r\n const yMid = backgroundImgHeight * heightRatio\r\n\r\n result.push(\r\n ...[\r\n { index: 0, x: xMin, y: yMin },\r\n { index: 2, x: xMax, y: yMin },\r\n { index: 5, x: xMin, y: yMax },\r\n { index: 6, x: xMax, y: yMax },\r\n ]\r\n )\r\n\r\n switch (planesNumber) {\r\n case Planes.One:\r\n {\r\n result.push(\r\n ...[\r\n { index: 7, x: (xMax + xMin) / 2, y: yMin },\r\n { index: 8, x: xMin, y: (yMin + yMax) / 2 },\r\n { index: 9, x: xMax, y: (yMin + yMax) / 2 },\r\n { index: 10, x: (xMax + xMin) / 2, y: yMax },\r\n ]\r\n )\r\n }\r\n break\r\n case Planes.Two:\r\n result.push(\r\n ...[\r\n { index: 3, x: xMin, y: yMid },\r\n { index: 4, x: xMax, y: yMid },\r\n // { index: 7, x: xMin, y: (yMin + yMid) / 2 },\r\n // { index: 8, x: xMax, y: (yMin + yMid) / 2 },\r\n // { index: 9, x: xMin, y: (yMid + yMax) / 2 },\r\n // { index: 10, x: xMax, y: (yMid + yMax) / 2 },\r\n\r\n { index: 11, x: (xMin + xMax) / 2, y: yMid },\r\n // { index: 12, x: xMin + ((xMax - xMin) * 2) / 5, y: yMid },\r\n // { index: 13, x: xMin + ((xMax - xMin) * 3) / 5, y: yMid },\r\n // { index: 14, x: xMin + ((xMax - xMin) * 4) / 5, y: yMid },\r\n\r\n { index: 15, x: (xMin + xMax) / 2, y: yMax },\r\n { index: 16, x: (xMin + xMax) / 2, y: yMin },\r\n ]\r\n )\r\n break\r\n case Planes.Three:\r\n result.push(\r\n ...[\r\n { index: 1, x: xMid, y: yMin },\r\n { index: 3, x: xMin, y: yMid },\r\n { index: 4, x: xMid, y: yMid },\r\n ]\r\n )\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n if (planesNumber === Planes.Three) {\r\n const xMidMid = widthRatio > 0.5 ? (xMin + xMid) / 2 : (xMax + xMid) / 2\r\n const yMidMid =\r\n heightRatio > 0.5 ? (yMin + yMid) / 2 : (yMax + yMid) / 2\r\n\r\n result.push(\r\n ...[\r\n { index: 7, x: xMidMid, y: yMin },\r\n { index: 8, x: xMin, y: yMidMid },\r\n {\r\n index: 9,\r\n x: xMid,\r\n y: yMidMid,\r\n },\r\n {\r\n index: 10,\r\n x: xMax,\r\n y: yMidMid,\r\n },\r\n {\r\n index: 11,\r\n x: xMidMid,\r\n y: yMid,\r\n },\r\n {\r\n index: 12,\r\n x: xMidMid,\r\n y: yMax,\r\n },\r\n ]\r\n )\r\n }\r\n\r\n return result\r\n}\r\n\r\nconst getFinalPoints = (\r\n destinationPoints,\r\n planesNumber,\r\n defaultOriginalPoints,\r\n usingSevenPoints = true,\r\n interpolateMiddles = false,\r\n interpolate2D = true,\r\n perspectiveType\r\n) => {\r\n let originalPoints = []\r\n\r\n if (planesNumber === Planes.Two && interpolate2D)\r\n cleanDestinationPoints(destinationPoints)\r\n destinationPoints.forEach((destinationPoint) => {\r\n if (destinationPoint.isMain) {\r\n originalPoints.push(\r\n defaultOriginalPoints.find(\r\n (q) => q.index === destinationPoint.index\r\n )\r\n )\r\n } else if (usingSevenPoints) {\r\n destinationPoints = destinationPoints.filter(\r\n (q) => q.index != destinationPoint.index\r\n )\r\n }\r\n })\r\n\r\n if (interpolateMiddles) {\r\n const topMiddlePoint = getTopMiddlePoint(destinationPoints)\r\n destinationPoints.push(topMiddlePoint)\r\n originalPoints.push(defaultOriginalPoints.find((q) => q.index === 7))\r\n\r\n const leftMiddlePoint = getLeftMiddlePoint(destinationPoints)\r\n destinationPoints.push(leftMiddlePoint)\r\n originalPoints.push(defaultOriginalPoints.find((q) => q.index === 8))\r\n\r\n const rightMiddlePoint = getRightMiddlePoint(destinationPoints)\r\n destinationPoints.push(rightMiddlePoint)\r\n originalPoints.push(defaultOriginalPoints.find((q) => q.index === 9))\r\n\r\n const bottomMiddlePoint = getBottomMiddlePoint(destinationPoints)\r\n destinationPoints.push(bottomMiddlePoint)\r\n originalPoints.push(defaultOriginalPoints.find((q) => q.index === 11))\r\n\r\n const rightPoint = getRightPoint(destinationPoints)\r\n destinationPoints.push(rightPoint)\r\n originalPoints.push(defaultOriginalPoints.find((q) => q.index === 10))\r\n\r\n const bottomPoint = getBottomPoint(destinationPoints)\r\n destinationPoints.push(bottomPoint)\r\n originalPoints.push(defaultOriginalPoints.find((q) => q.index === 12))\r\n }\r\n\r\n if (planesNumber === Planes.Two && true) {\r\n for (let index = 1; index < 2; index++) {\r\n let fraction = 2\r\n if (\r\n perspectiveType == perspectiveTypes.RIGHT_2D ||\r\n perspectiveType == perspectiveTypes.RIGHT_3D\r\n )\r\n fraction = 2\r\n else if (\r\n perspectiveType == perspectiveTypes.LEFT_2D ||\r\n perspectiveType == perspectiveTypes.LEFT_3D\r\n )\r\n fraction = 3\r\n\r\n const point = getMiddlePoints2D(\r\n destinationPoints,\r\n fraction,\r\n perspectiveType\r\n )\r\n destinationPoints.push(point)\r\n originalPoints.push(\r\n defaultOriginalPoints.find((q) => q.index === 1 + 10)\r\n )\r\n }\r\n const middleBottomPoint = getBottomMiddlePoint2D(\r\n destinationPoints,\r\n perspectiveType\r\n )\r\n destinationPoints.push(middleBottomPoint)\r\n originalPoints.push(defaultOriginalPoints.find((q) => q.index === 15))\r\n\r\n const middleTopPoint = getTopMiddlePoint(\r\n destinationPoints,\r\n perspectiveType\r\n )\r\n destinationPoints.push(middleTopPoint)\r\n originalPoints.push(defaultOriginalPoints.find((q) => q.index === 16))\r\n }\r\n\r\n let result = usingSevenPoints ? originalPoints : defaultOriginalPoints\r\n return { originalPoints: result, destinationPoints }\r\n}\r\n\r\nconst cleanDestinationPoints = (destinationPoints) => {\r\n const limitInPixel = 0\r\n const margin = 0\r\n\r\n const point3 = getPointAt(destinationPoints, 3)\r\n const point5 = getPointAt(destinationPoints, 5)\r\n\r\n let distanceLeft = distancePoint(point3, point5)\r\n if (distanceLeft < limitInPixel) {\r\n const point = extrapolate(point3, point5, margin)\r\n point5.x = point.x\r\n point5.y = point.y\r\n }\r\n\r\n const point4 = getPointAt(destinationPoints, 4)\r\n const point6 = getPointAt(destinationPoints, 6)\r\n\r\n let distanceRight = distancePoint(point4, point6)\r\n if (distanceRight < limitInPixel) {\r\n const point = extrapolate(point4, point6, margin)\r\n point6.x = point.x\r\n point6.y = point.y\r\n }\r\n}\r\n\r\nconst getMiddlePoints2D = (\r\n destinationPoints,\r\n fractionIndex,\r\n perspectiveType\r\n) => {\r\n let leftIndex = 3\r\n let rightIndex = 4\r\n\r\n let average = averagePointAt(\r\n destinationPoints,\r\n leftIndex,\r\n rightIndex,\r\n 5 / fractionIndex\r\n )\r\n\r\n return { index: fractionIndex + 10, x: average.x, y: average.y }\r\n}\r\n\r\nconst getBottomMiddlePoint2D = (destinationPoints, perspectiveType) => {\r\n let leftIndex = 5\r\n let rightIndex = 6\r\n\r\n let average = averagePointAt(destinationPoints, leftIndex, rightIndex)\r\n\r\n let result = { index: 15, x: average.x, y: average.y }\r\n if (\r\n perspectiveType == perspectiveTypes.RIGHT_2D ||\r\n perspectiveType == perspectiveTypes.RIGHT_3D\r\n )\r\n result.x *= 2\r\n else if (\r\n perspectiveType == perspectiveTypes.LEFT_2D ||\r\n perspectiveType == perspectiveTypes.LEFT_3D\r\n )\r\n result.y *= 2\r\n\r\n return result\r\n}\r\n\r\nconst getTopMiddlePoint = (destinationPoints, perspectiveType) => {\r\n // let leftIndex = calculatedWidthRatio > 0.5 ? 0 : 1;\r\n // let rightIndex = calculatedWidthRatio > 0.5 ? 1 : 2;\r\n\r\n let leftIndex = 0\r\n let rightIndex = 2\r\n\r\n if (\r\n perspectiveType == perspectiveTypes.RIGHT_2D ||\r\n perspectiveType == perspectiveTypes.RIGHT_3D\r\n ) {\r\n leftIndex = 3\r\n rightIndex = 0\r\n }\r\n\r\n let average = averagePointAt(destinationPoints, leftIndex, rightIndex)\r\n\r\n let result = { index: 16, x: average.x, y: average.y }\r\n if (\r\n perspectiveType == perspectiveTypes.RIGHT_2D ||\r\n perspectiveType == perspectiveTypes.RIGHT_3D\r\n ) {\r\n result.x *= 2\r\n result.y *= 0.5\r\n } else if (\r\n perspectiveType == perspectiveTypes.LEFT_2D ||\r\n perspectiveType == perspectiveTypes.LEFT_3D\r\n ) {\r\n result.x *= 0.5\r\n result.y *= 2\r\n }\r\n\r\n return result\r\n // return { index: 7, x: average.x * 1.5, y: average.y * 0.5 };\r\n}\r\n\r\nconst getLeftMiddlePoint = (destinationPoints) => {\r\n let topIndex = calculatedHeightRatio > 0.5 ? 0 : 3\r\n let bottomIndex = calculatedHeightRatio > 0.5 ? 3 : 5\r\n\r\n let average = averagePointAt(destinationPoints, topIndex, bottomIndex)\r\n\r\n return { index: 8, x: average.x, y: average.y }\r\n}\r\n\r\nconst getRightMiddlePoint = (destinationPoints) => {\r\n let topIndex = calculatedHeightRatio > 0.5 ? 1 : 4\r\n let bottomIndex = calculatedHeightRatio > 0.5 ? 4 : 6\r\n\r\n let average = averagePointAt(destinationPoints, topIndex, bottomIndex)\r\n\r\n return { index: 9, x: average.x, y: average.y }\r\n}\r\n\r\nconst getBottomMiddlePoint = (destinationPoints) => {\r\n let leftIndex = calculatedHeightRatio > 0.5 ? 3 : 4\r\n let rightIndex = calculatedHeightRatio > 0.5 ? 4 : 5\r\n\r\n let average = averagePointAt(destinationPoints, leftIndex, rightIndex)\r\n\r\n return { index: 11, x: average.x, y: average.y }\r\n}\r\n\r\nconst getRightPoint = (destinationPoints) => {\r\n let topIndex = 2\r\n let bottomIndex = 6\r\n\r\n let average = averagePointAt(destinationPoints, bottomIndex, topIndex)\r\n\r\n return { index: 11, x: average.x, y: average.y }\r\n}\r\n\r\nconst getBottomPoint = (destinationPoints) => {\r\n let leftIndex = 5\r\n let rightIndex = 6\r\n\r\n let average = averagePointAt(destinationPoints, leftIndex, rightIndex)\r\n\r\n return { index: 11, x: average.x, y: average.y }\r\n}\r\n\r\nconst extrapolate = (point1, point2, distance) => {\r\n const vector = { x: point2.x - point1.x, y: point2.y - point1.y }\r\n const vectorDimension = distancePoint(vector, { x: 0, y: 0 })\r\n return {\r\n x: point1.x + (vector.x * distance) / vectorDimension,\r\n y: point1.y + (vector.y * distance) / vectorDimension,\r\n }\r\n}\r\n\r\nconst averagePointAt = (destinationPoints, index1, index2, weight = 2) => {\r\n let point1 = getPointAt(destinationPoints, index1)\r\n let point2 = getPointAt(destinationPoints, index2)\r\n return averagePoint(point1, point2, weight)\r\n}\r\n\r\nconst averagePoint = (point1, point2, weight) => {\r\n return {\r\n x: point1.x - (point1.x - point2.x) / weight,\r\n y: point1.y - (point1.y - point2.y) / weight,\r\n }\r\n}\r\n\r\nconst distancePoint = (point1, point2) => {\r\n return Math.sqrt(\r\n (point2.y - point1.y) * (point2.y - point1.y) +\r\n (point2.x - point1.x) * (point2.x - point1.x)\r\n )\r\n}\r\n\r\nconst getPointAt = (destinationPoints, index) => {\r\n return destinationPoints.find((q) => q.index === index)\r\n}\r\n\r\nconst screenshot = (e) => {\r\n let canvas = document.getElementById('main-canvas')\r\n let src = canvas.toDataURL('image/jpeg', 0.5)\r\n scaleImage(src, 1)\r\n}\r\n\r\nconst scaleImage = (mainCanvas, src, scale, callBack) => {\r\n let image = new Image()\r\n image.crossOrigin = 'Anonymous'\r\n image.onload = function () {\r\n let canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d')\r\n\r\n let width = mainCanvas.width\r\n let height = mainCanvas.height\r\n\r\n canvas.width = width * scale\r\n canvas.height = height * scale\r\n\r\n ctx.drawImage(\r\n this,\r\n ((1 - scale) * width) / 2,\r\n ((1 - scale) * height) / 2,\r\n width * scale,\r\n height * scale\r\n )\r\n let result = canvas.toDataURL('image/jpeg', 0.5)\r\n callBack(result)\r\n }\r\n image.src = src\r\n return src\r\n}\r\n\r\nconst createMainCanvas = () => {\r\n let result = document.createElement('canvas')\r\n result.id = 'main-canvas'\r\n result.style.backgroundRepeat = 'no-repeat'\r\n result.style.backgroundSize = 'contain'\r\n result.style.backgroundPosition = 'center'\r\n result.style.margin = '0'\r\n result.style.display = 'none'\r\n\r\n return result\r\n}\r\n\r\nconst createHelperCanvas = () => {\r\n let result = document.createElement('canvas')\r\n result.id = 'my-canvas'\r\n result.style.display = 'none'\r\n return result\r\n}\r\n\r\nconst createRepeatImageCanvas = (width, height, textureScale) => {\r\n let result = document.createElement('canvas')\r\n result.id = 'repeat-image-canvas'\r\n result.width = width * textureScale\r\n result.height = height * textureScale\r\n result.style.backgroundRepeat = 'no-repeat'\r\n result.style.backgroundSize = 'contain'\r\n result.style.backgroundPosition = 'center'\r\n result.style.margin = '0'\r\n result.style.display = 'none'\r\n\r\n return result\r\n}\r\n\r\nfunction repeatImage(imgUrl, imgWidth, imgHeight, textureScale, callback) {\r\n var canvas = createRepeatImageCanvas(imgWidth, imgHeight, textureScale),\r\n context = canvas.getContext('2d'),\r\n img = new Image()\r\n img.crossOrigin = 'Anonymous'\r\n\r\n img.onload = function () {\r\n // create pattern\r\n var ptrn = context.createPattern(img, 'repeat') // Create a pattern with this image, and set it to \"repeat\".\r\n context.fillStyle = ptrn\r\n context.fillRect(0, 0, canvas.width, canvas.height) // context.fillRect(x, y, width, height);\r\n callback(canvas.toDataURL())\r\n }\r\n\r\n img.src = imgUrl\r\n\r\n return img\r\n}\r\n\r\nconst Faces = { Up: 'Up', Right: 'Right', Left: 'Left' }\r\nconst Planes = { One: '1', Two: '2', Three: '3' }\r\n\r\n// ----------------------------------------------\r\n// main.js\r\n// ----------------------------------------------\r\nexport const drawPerspective = (\r\n points,\r\n textureUrl,\r\n imgWidth,\r\n imgHeight,\r\n planesNumber,\r\n resultCallBack,\r\n gridSize = 10,\r\n marginInPixel,\r\n textureScale = 1,\r\n perspectiveType\r\n) => {\r\n repeatImage(\r\n textureUrl,\r\n imgWidth,\r\n imgHeight,\r\n textureScale,\r\n function (imgSrc) {\r\n loadTexture(\r\n imgSrc,\r\n points,\r\n imgWidth,\r\n imgHeight,\r\n planesNumber,\r\n resultCallBack,\r\n gridSize,\r\n marginInPixel,\r\n perspectiveType\r\n )\r\n }\r\n )\r\n}\r\n\r\nconst loadTexture = (\r\n url,\r\n destinationPoints,\r\n backgroundImgWidth,\r\n backgroundImgHeight,\r\n planesNumber,\r\n callBack,\r\n gridSize,\r\n marginInPixel,\r\n perspectiveType\r\n) => {\r\n var canvas = createMainCanvas()\r\n var warper = null\r\n\r\n var img = render(\r\n url,\r\n function (imageData) {\r\n const widthRatio =\r\n planesNumber === Planes.One\r\n ? null\r\n : calcWidthRatio(destinationPoints, planesNumber)\r\n const heightRatio =\r\n planesNumber === Planes.One\r\n ? null\r\n : calcHeightRatio(destinationPoints, planesNumber)\r\n\r\n let originalPoints = defaultOriginalPoints(\r\n backgroundImgWidth,\r\n backgroundImgHeight,\r\n widthRatio,\r\n heightRatio,\r\n planesNumber,\r\n marginInPixel\r\n )\r\n\r\n let convertedPoints = getFinalPoints(\r\n destinationPoints,\r\n planesNumber,\r\n originalPoints,\r\n true,\r\n false,\r\n false,\r\n perspectiveType\r\n )\r\n\r\n warper = new ImgWarper.PointDefiner(\r\n canvas,\r\n img,\r\n imageData,\r\n gridSize\r\n // 0.5\r\n )\r\n\r\n for (\r\n let index = 0;\r\n index < convertedPoints.destinationPoints.length;\r\n index++\r\n ) {\r\n warper.addPoints(\r\n convertedPoints.originalPoints[index],\r\n convertedPoints.destinationPoints[index]\r\n )\r\n }\r\n\r\n let src = canvas.toDataURL('image/jpeg', 0.5)\r\n scaleImage(canvas, src, 1, callBack)\r\n },\r\n backgroundImgWidth,\r\n backgroundImgHeight\r\n )\r\n}\r\n\r\nfunction render(src, callback, backgroundImgWidth, backgroundImgHeight) {\r\n var image = new Image()\r\n image.crossOrigin = 'Anonymous'\r\n\r\n image.onload = function () {\r\n var canvas = createHelperCanvas()\r\n var ctx = canvas.getContext('2d')\r\n ctx.clearRect(0, 0, canvas.width, canvas.height)\r\n image.width = backgroundImgWidth\r\n image.height = backgroundImgHeight\r\n canvas.width = backgroundImgWidth\r\n canvas.height = backgroundImgHeight\r\n\r\n ctx.drawImage(image, 0, 0, image.width, image.height)\r\n callback(ctx.getImageData(0, 0, image.width, image.height))\r\n }\r\n image.src = src\r\n return image\r\n}\r\n","import { baseURL } from '../apiService/apiService'\r\n\r\nexport const getImageAbsolutePath = (path) => baseURL + path\r\n","import apiService from '../../apiService/apiService'\r\nimport * as types from './constants'\r\nimport rooms from '../../pages/Tools/rooms'\r\nimport { nanoid } from 'nanoid'\r\nimport mokaber from '../../assets/img/2000-01 (2).jpg'\r\nimport FastAverageColor from 'fast-average-color'\r\nimport { drawPerspective } from '../../helper/drawWarpHelper'\r\nimport { getImageAbsolutePath } from '../../helper/imageHelper'\r\nimport { warpOnCube } from '../../helper/drawHelper'\r\nimport roomItem from '../../pages/Tools/rooms/roomItem/roomItem'\r\n\r\nvar globalMultiply = 0.8\r\n\r\nconst paper = window.paper\r\nconst d3 = window.d3\r\nconst fac = new FastAverageColor()\r\n\r\nconst corsChangeURL = 'http://185.164.73.236:8080/'\r\n//const corsChangeURL='http://localhost:8080/'\r\n\r\nexport const setPhotoEditorMaterial = (material) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.SET_PHOTO_EDITOR_MATERIAL,\r\n payload: material,\r\n })\r\n }\r\n}\r\n\r\nexport const closePhotoEditorMaterial = () => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.CLOSE_PHOTO_EDITOR_MATERIAL,\r\n })\r\n }\r\n}\r\n\r\nexport const getMaterials = (pageNumber, searchText) => {\r\n return (dispatch, getState) => {\r\n const allMaterials =\r\n pageNumber === 1 ? [] : getState().tools.allMaterials ?? []\r\n apiService.materials\r\n .getAll(pageNumber, searchText)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.GET_MATERIALS_SUCCESS,\r\n payload: [\r\n ...allMaterials,\r\n ...response.data.map((q) => ({\r\n ...q,\r\n title: q.name,\r\n url:\r\n corsChangeURL +\r\n (q.meta_data.filter((x) => x.key == 'pic_pattern' && x.value!=\"0\").length > 0\r\n ? `https://mokabber.com/?attachment_id=${\r\n q.meta_data.find(\r\n (x) => x.key == 'pic_pattern'\r\n ).value\r\n }`\r\n : q.images[0].src.replace(\r\n '.jpg',\r\n '-300x300.jpg'\r\n )),\r\n // url:\r\n // q.appThumbnail ??\r\n // getImageAbsolutePath(q.originalImageUrl),\r\n originalThumbnailUrl:\r\n corsChangeURL +\r\n (q.meta_data.filter((x) => x.key == 'pic_pattern' && x.value!=\"0\").length > 0\r\n ? `https://mokabber.com/?attachment_id=${\r\n q.meta_data.find(\r\n (x) => x.key == 'pic_pattern'\r\n ).value\r\n }`\r\n : q.images[0].src.replace(\r\n '.jpg',\r\n '-300x300.jpg'\r\n )),\r\n // originalThumbnailUrl:\r\n // q.appThumbnail ??\r\n // getImageAbsolutePath(\r\n // q.originalThumbnailUrl\r\n // ),\r\n id: q.id,\r\n //id: q.fabricId ?? q.id,\r\n editedImageUrl:\r\n corsChangeURL +\r\n (q.meta_data.filter((x) => x.key == 'pic_pattern' && x.value!=\"0\").length > 0\r\n ? `https://mokabber.com/?attachment_id=${\r\n q.meta_data.find(\r\n (x) => x.key == 'pic_pattern'\r\n ).value\r\n }`\r\n : q.images[0].src.replace(\r\n '.jpg',\r\n '-300x300.jpg'\r\n )),\r\n // editedImageUrl: q.editedImageUrl\r\n // ? getImageAbsolutePath(\r\n // `${q.editedImageUrl}?v=${Date.now()}`\r\n // )\r\n // : null,\r\n editedThumbnailUrl:\r\n corsChangeURL +\r\n (q.meta_data.filter((x) => x.key == 'pic_pattern' && x.value!=\"0\").length > 0\r\n ? `https://mokabber.com/?attachment_id=${\r\n q.meta_data.find(\r\n (x) => x.key == 'pic_pattern'\r\n ).value\r\n }`\r\n : q.images[0].src.replace(\r\n '.jpg',\r\n '-300x300.jpg'\r\n )),\r\n // editedThumbnailUrl: q.editedThumbnailUrl\r\n // ? getImageAbsolutePath(\r\n // `${\r\n // q.editedThumbnailUrl\r\n // }?v=${Date.now()}`\r\n // )\r\n // : null,\r\n originalImageUrl: null,\r\n fabricId: null,\r\n })),\r\n ],\r\n })\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const uploadMaterial = (name, file) => {\r\n const data = {\r\n title: name,\r\n file,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n\r\n apiService.materials\r\n .create(data)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.UPLOAD_MATERIAL_SUCCESS,\r\n })\r\n dispatch(getMaterials())\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const editMaterial = (file, { patternFlipH, patternFlipV }) => {\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n\r\n const { id } = getState().tools.photoEditorMaterial\r\n apiService.materials\r\n .updateImage({ id, file, patternFlipH, patternFlipV })\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.UPLOAD_MATERIAL_SUCCESS,\r\n })\r\n dispatch(getMaterials())\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const resetMaterial = (id) => {\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n\r\n apiService.materials\r\n .resetEditedImage(id)\r\n .then((response) => {\r\n if (response.status == 200 || response.status == 204) {\r\n dispatch({\r\n type: types.RESET_MATERIAL_SUCCESS,\r\n })\r\n dispatch(getMaterials())\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const deleteMaterial = (materialId) => {\r\n const data = { id: materialId }\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n\r\n apiService.materials\r\n .delete(data)\r\n .then((response) => {\r\n if (response.status == 200 || response.status == 204) {\r\n dispatch({\r\n type: types.DELETE_MATERIAL_SUCCESS,\r\n })\r\n dispatch(getMaterials())\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const updateMaterialTitle = (id, title) => {\r\n const data = {\r\n title,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n apiService.materials\r\n .update(id, data)\r\n .then((response) => {\r\n if (response.status == 200 || response.status == 204) {\r\n dispatch({\r\n type: types.EDIT_MATERIAL_TITLE_SUCCESS,\r\n })\r\n dispatch(getMaterials())\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const activePath = (id) => {\r\n return {\r\n type: types.ACTIVE_PATH,\r\n payload: id,\r\n }\r\n}\r\n\r\nexport const getRoom = (id) => {\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n apiService.rooms\r\n .getOne(id)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const room = response.data\r\n const convertedRoom = {\r\n ...room,\r\n image: getImageAbsolutePath(room.originalImageUrl),\r\n id: room.projectId,\r\n layers: room.projectData\r\n ? JSON.parse(room.projectData).layers\r\n : [{ children: [] }],\r\n projectData: null,\r\n originalImageUrl: null,\r\n editedImageUrl: room.editedImageUrl\r\n ? getImageAbsolutePath(\r\n `${room.editedImageUrl}?v=${Date.now()}`\r\n )\r\n : null,\r\n }\r\n dispatch({\r\n type: types.GET_ROOM_SUCCESS,\r\n payload: convertedRoom,\r\n })\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const getRooms = () => {\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n payload: rooms,\r\n })\r\n apiService.rooms\r\n .getAll()\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const rooms = response.data\r\n const convertedRooms = rooms.map((q) => ({\r\n ...q,\r\n image: getImageAbsolutePath(q.originalImageUrl),\r\n originalThumbnailUrl: getImageAbsolutePath(\r\n q.originalThumbnailUrl\r\n ),\r\n id: q.projectId,\r\n layers: q.projectData\r\n ? JSON.parse(q.projectData).layers\r\n : [{ children: [] }],\r\n projectData: null,\r\n originalImageUrl: null,\r\n editedThumbnailUrl: q.editedThumbnailUrl\r\n ? getImageAbsolutePath(\r\n `${q.editedThumbnailUrl}?v=${Date.now()}`\r\n )\r\n : null,\r\n editedImageUrl: q.editedImageUrl\r\n ? getImageAbsolutePath(\r\n `${q.editedImageUrl}?v=${Date.now()}`\r\n )\r\n : null,\r\n }))\r\n const data = JSON.parse(localStorage.getItem('rooms'))\r\n data.rooms = convertedRooms\r\n localStorage.setItem('rooms', JSON.stringify(data))\r\n dispatch({\r\n type: types.GET_ROOMS_SUCCESS,\r\n payload: convertedRooms,\r\n })\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nvar oldWidth = null\r\nvar oldHeight = null\r\nexport const chooseRoom = (room) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.CHOOSE_ROOM_INITIAL,\r\n })\r\n var canvas = document.getElementById('selection')\r\n var img = document.createElement('img')\r\n img.crossOrigin = 'Anonymous'\r\n img.onload = () => {\r\n oldWidth = img.width\r\n oldHeight = img.height\r\n var newHeight = img.height\r\n var newWidth = img.width\r\n\r\n // var newHeight = img.height\r\n if (img.width > 1000) {\r\n newWidth = 1000\r\n newHeight = (img.height / img.width) * 1000\r\n }\r\n\r\n img.width = newWidth\r\n img.height = newHeight\r\n\r\n canvas.setAttribute('width', newWidth)\r\n canvas.setAttribute('height', newHeight)\r\n paper.setup(canvas)\r\n paper.project.clear()\r\n if (room.layers && room.layers.length > 0) {\r\n room.layers[0].children.length > 0 &&\r\n room.layers[0].children.forEach((prespective) => {\r\n if (prespective.dimension) {\r\n var myPath = new paper.Path()\r\n\r\n prespective.relatedCurvePoints.forEach(\r\n (axis, index) => {\r\n myPath.add(\r\n new paper.Point(\r\n // (1000 / oldWidth) * axis.x,\r\n // (img.height / oldHeight) * axis.y\r\n axis.x,\r\n axis.y\r\n )\r\n )\r\n }\r\n )\r\n myPath.closed = true\r\n myPath.fillColor = '#e0e0e0a1'\r\n myPath.opacity = 0\r\n prespective.id = myPath._id\r\n }\r\n })\r\n }\r\n\r\n var baseCanvas = document.getElementById('main-scene')\r\n\r\n if (!baseCanvas) return\r\n baseCanvas.setAttribute('width', newWidth)\r\n baseCanvas.setAttribute('height', newHeight)\r\n var ctx = baseCanvas.getContext('2d')\r\n\r\n ctx.drawImage(img, 0, 0, newWidth, newHeight)\r\n\r\n dispatch({\r\n type: types.CHOOOSE_ROOM,\r\n payload: room,\r\n })\r\n }\r\n img.src = room.editedImageUrl ? room.editedImageUrl : room.image\r\n }\r\n}\r\n\r\nexport const uploadRoom = (name, file) => {\r\n const data = {\r\n title: name,\r\n file,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n\r\n apiService.rooms\r\n .create(data)\r\n .then((res) => {\r\n const result = res.data\r\n if (result) {\r\n dispatch({\r\n type: types.UPLOAD_ROOM_SUCCESS,\r\n })\r\n dispatch(getRooms())\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const editRoom = (roomId, file) => {\r\n const data = {\r\n id: roomId,\r\n file,\r\n }\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n\r\n apiService.rooms\r\n .updateImage(data)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.UPLOAD_ROOM_SUCCESS,\r\n })\r\n dispatch(getRooms()).then(() => window.location.reload())\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const deleteRoom = (roomId) => {\r\n const data = { id: roomId }\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n\r\n apiService.rooms\r\n .delete(data)\r\n .then((response) => {\r\n if (response.status == 200 || response.status == 204) {\r\n dispatch({\r\n type: types.DELETE_ROOM_SUCCESS,\r\n })\r\n dispatch(getRooms())\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const updateRoomTitle = (id, title) => {\r\n const data = {\r\n title,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.OPERATION_STARTED,\r\n })\r\n apiService.rooms\r\n .update(id, data)\r\n .then((response) => {\r\n if (response.status == 200 || response.status == 204) {\r\n dispatch({\r\n type: types.EDIT_ROOM_TITLE_SUCCESS,\r\n })\r\n dispatch(getRooms())\r\n } else {\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.OPERATION_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const drawForHelpTour = () => {\r\n return (dispatch, getState) => {\r\n // TODO: check for errors\r\n const room = getState().tools.roomInDesignStage\r\n const id = getState().tools.roomInDesignStage.layers[0].children[0].id\r\n const material = getState().tools.allMaterials[0]\r\n const multiply = getState().tools.multiply\r\n dispatch(dropAndDrawMaterial(room, id, material, multiply))\r\n }\r\n}\r\n\r\nexport const dropAndDrawMaterial = (\r\n room,\r\n id,\r\n material,\r\n multiply,\r\n zoom = 100,\r\n offsetH = 0,\r\n offsetV = 0\r\n) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.DRAWING_STARTED,\r\n })\r\n const layerChildren = room.layers[0].children\r\n const currentLayerChild = layerChildren.find((q) => q.id === id)\r\n\r\n let baseCanvas = document.getElementById('main-scene')\r\n let ctx = baseCanvas.getContext('2d')\r\n ctx.clearRect(0, 0, baseCanvas.width, baseCanvas.height)\r\n\r\n let img = new Image()\r\n img.crossOrigin = 'Anonymous'\r\n img.src = room.editedImageUrl ? room.editedImageUrl : room.image\r\n img.onload = async () => {\r\n oldWidth = img.width\r\n oldHeight = img.height\r\n let newHeight = img.height\r\n let newWidth = img.width\r\n\r\n if (img.width > 1000) {\r\n newWidth = 1000\r\n newHeight = (img.height / img.width) * 1000\r\n }\r\n\r\n img.width = newWidth\r\n img.height = newHeight\r\n\r\n baseCanvas.setAttribute('width', newWidth)\r\n baseCanvas.setAttribute('height', newHeight)\r\n\r\n ctx.globalCompositeOperation = 'multiply'\r\n ctx.drawImage(img, 0, 0, newWidth, newHeight)\r\n\r\n if (!room.selectedPrespectives) {\r\n room.selectedPrespectives = []\r\n }\r\n\r\n const oldPerspectiveData = room.selectedPrespectives.filter(\r\n (q) => q.id == id\r\n )\r\n let brightness,\r\n contrast = null\r\n\r\n if (oldPerspectiveData && oldPerspectiveData.length > 0) {\r\n brightness = oldPerspectiveData[0].brightness\r\n contrast = oldPerspectiveData[0].contrast\r\n }\r\n room.selectedPrespectives = room.selectedPrespectives\r\n .filter((q) => q.id != id)\r\n .concat({\r\n id: id,\r\n monhani: currentLayerChild.pathData,\r\n curvePoints: currentLayerChild.relatedCurvePoints,\r\n material: { ...material },\r\n image: room.image,\r\n zoom: zoom,\r\n offsetH: offsetH,\r\n offsetV: offsetV,\r\n brightness: brightness,\r\n contrast: contrast,\r\n })\r\n\r\n const drawWarpedImage = (scaledImage, perspective, layerChild) =>\r\n new Promise((resolve, reject) => {\r\n let image = new Image()\r\n image.crossOrigin = 'Anonymous'\r\n image.onload = function () {\r\n let myCanvas = document.createElement('canvas')\r\n myCanvas.style.position = 'absolute'\r\n let context = myCanvas.getContext('2d')\r\n myCanvas.setAttribute('width', baseCanvas.width)\r\n myCanvas.setAttribute('height', baseCanvas.height)\r\n\r\n // TODO: removed if confirmed\r\n // drawPathData(\r\n // context,\r\n // layerChild.relatedCurvePoints,\r\n // 1000 / oldWidth,\r\n // baseCanvas.height / oldHeight\r\n // )\r\n\r\n context.clip(new Path2D(layerChild.pathData))\r\n context.drawImage(image, 0, 0)\r\n\r\n let myNewImage = new Image()\r\n myNewImage.crossOrigin = 'Anonymous'\r\n myNewImage.onload = function () {\r\n perspective.imageData = myCanvas.toDataURL()\r\n ctx.drawImage(myNewImage, 0, 0)\r\n resolve()\r\n }\r\n myNewImage.src = myCanvas.toDataURL()\r\n }\r\n\r\n image.src = scaledImage\r\n })\r\n\r\n if (multiply != 0.8) {\r\n ctx.clearRect(0, 0, baseCanvas.width, baseCanvas.height)\r\n grayscalePathOnImage(ctx, img, room, multiply, baseCanvas)\r\n }\r\n for (const perspective of room.selectedPrespectives) {\r\n let layerChild = layerChildren.find(\r\n (x) => x.id == perspective.id\r\n )\r\n if (!layerChild) continue\r\n if (layerChild.id === perspective.id) {\r\n const backgroundImgWidth = baseCanvas.width\r\n const backgroundImgHeight = baseCanvas.height\r\n const textureUrl = perspective.material.editedImageUrl\r\n ? perspective.material.editedImageUrl\r\n : perspective.material.url\r\n let destinationPoints = []\r\n layerChild.dimension.forEach((item) => {\r\n destinationPoints.push({\r\n index: item.index,\r\n x: (item.x * 1000) / oldWidth,\r\n y: (item.y * baseCanvas.height) / oldHeight,\r\n isMain: true,\r\n faces: item.faces,\r\n })\r\n })\r\n // if (mode === null)\r\n // drawPerspective(\r\n // destinationPoints,\r\n // textureUrl,\r\n // backgroundImgWidth,\r\n // backgroundImgHeight,\r\n // layerChild.plan,\r\n // getFinalScaledImage,\r\n // layerChild.gridSize,\r\n // layerChild.margin,\r\n // layerChild.textureScale,\r\n // layerChild.perspective\r\n // )\r\n // else\r\n\r\n if (perspective.imageData != null) {\r\n if (\r\n perspective.brightness == null ||\r\n perspective.contrast == null\r\n ) {\r\n var onFlyImage = await addImageProcess(\r\n perspective.imageData\r\n )\r\n ctx.drawImage(onFlyImage, 0, 0)\r\n }\r\n } else {\r\n const warpedImage = await warpOnCube(\r\n destinationPoints,\r\n layerChild.perspective,\r\n textureUrl,\r\n backgroundImgWidth,\r\n backgroundImgHeight,\r\n layerChild.pathData,\r\n { zoom, offsetH, offsetV },\r\n layerChild.cubeData\r\n )\r\n await drawWarpedImage(\r\n warpedImage,\r\n perspective,\r\n layerChild\r\n )\r\n }\r\n }\r\n }\r\n\r\n // await DrawPathWithFilters(room)\r\n // dispatch({\r\n // type: types.CHOOOSE_ROOM,\r\n // payload: room,\r\n // })\r\n dispatch({\r\n type: types.RESET_DRAG,\r\n payload: room,\r\n })\r\n\r\n dispatch({\r\n type: types.SELECT_CURVE,\r\n payload: id,\r\n })\r\n dispatch({\r\n type: types.APPLY_TEXTURE_ZOOM,\r\n payload: {\r\n zoom: zoom,\r\n offsetH: offsetH,\r\n offsetV: offsetV,\r\n room: room,\r\n },\r\n })\r\n if (brightness || contrast) {\r\n let perspective = room.selectedPrespectives.filter(\r\n (q) => q.id == id\r\n )[0]\r\n dispatch(\r\n applyCurveFilter(\r\n perspective,\r\n brightness,\r\n contrast,\r\n room,\r\n multiply\r\n )\r\n )\r\n }\r\n dispatch({\r\n type: types.DRAWING_ENDED,\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport const selectCurve = (id, roomInDesignStage) => {\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: types.SELECT_CURVE,\r\n payload: id,\r\n })\r\n\r\n // let perspective = id\r\n // if (typeof perspective !== 'object' && perspective !== null) {\r\n // if (!roomInDesignStage.selectedPrespectives) return\r\n // perspective = roomInDesignStage.selectedPrespectives.find(\r\n // (q) => q.id === perspective\r\n // )\r\n // if (!perspective) return\r\n // }\r\n // dispatch({\r\n // type: types.APPLY_CURVE_FILTER,\r\n // payload: {\r\n // brightness: perspective.brightness ?? 0,\r\n // contrast: perspective.contrast ?? 0,\r\n // },\r\n // })\r\n }\r\n}\r\n\r\nfunction grayscalePathOnImage(ctx, img, roomInDesignStage, range, canvas) {\r\n var paths = []\r\n roomInDesignStage.selectedPrespectives.forEach((q) => {\r\n const path = new Path2D()\r\n path.moveTo(q.curvePoints[0].x, q.curvePoints[0].y)\r\n for (let index = 1; index < q.curvePoints.length; index++) {\r\n path.lineTo(q.curvePoints[index].x, q.curvePoints[index].y)\r\n }\r\n path.closePath()\r\n paths.push(path)\r\n })\r\n\r\n ctx.drawImage(img, 0, 0)\r\n\r\n var width = canvas.width * 2\r\n var height = canvas.height\r\n var imgPixels = ctx.getImageData(0, 0, width, height)\r\n\r\n for (var y = 0; y < height; y++) {\r\n for (var x = 0; x < width; x++) {\r\n var i = y * 4 * width + x * 4\r\n var avg =\r\n (imgPixels.data[i] +\r\n imgPixels.data[i + 1] +\r\n imgPixels.data[i + 2]) /\r\n 3\r\n\r\n if (avg < 50) {\r\n avg += Math.pow(256 - avg, range + 0.09)\r\n } else if (avg >= 50 && avg < 100) {\r\n avg += Math.pow(256 - avg, range + 0.08)\r\n } else if (avg >= 100 && avg < 150) {\r\n avg += Math.pow(256 - avg, range + 0.05)\r\n } else if (avg >= 150 && avg < 200) {\r\n avg += Math.pow(256 - avg, range + 0.04)\r\n } else if (avg >= 200 && avg < 225) {\r\n avg += Math.pow(256 - avg, range + 0.03)\r\n }\r\n\r\n paths.forEach((element) => {\r\n if (\r\n ctx.isPointInPath(element, x + 1, y) &&\r\n ctx.isPointInPath(element, x - 1, y) &&\r\n ctx.isPointInPath(element, x, y + 1) &&\r\n ctx.isPointInPath(element, x, y - 1)\r\n ) {\r\n imgPixels.data[i] = avg\r\n imgPixels.data[i + 1] = avg - 5\r\n imgPixels.data[i + 2] = avg - 15\r\n }\r\n })\r\n }\r\n }\r\n\r\n ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height)\r\n}\r\n\r\nconst addImageProcess = (src) => {\r\n return new Promise((resolve, reject) => {\r\n let img = new Image()\r\n img.crossOrigin = 'Anonymous'\r\n img.onload = () => resolve(img)\r\n img.onerror = reject\r\n img.src = src\r\n })\r\n}\r\n\r\nexport const applyCurveFilter = (\r\n perspective,\r\n brightness,\r\n contrast,\r\n room,\r\n multiply\r\n) => {\r\n var a = typeof perspective\r\n return async (dispatch, getState) => {\r\n dispatch({\r\n type: types.DRAWING_STARTED,\r\n })\r\n if (typeof perspective != 'object') {\r\n perspective = room.selectedPrespectives.find(\r\n (q) => q.id == perspective\r\n )\r\n }\r\n perspective.brightness = brightness\r\n perspective.contrast = contrast\r\n\r\n room.selectedPrespectives\r\n .filter((q) => q.id !== perspective.id)\r\n .concat(perspective)\r\n\r\n let mainImage = await addImageProcess(room.image)\r\n\r\n let mainCanvas = document.getElementById('main-scene')\r\n let ctx = mainCanvas.getContext('2d')\r\n\r\n ctx.clearRect(0, 0, mainCanvas.width, mainCanvas.height)\r\n\r\n ctx.drawImage(mainImage, 0, 0)\r\n if (multiply != 0.8) {\r\n globalMultiply = multiply\r\n\r\n ctx.clearRect(0, 0, mainCanvas.width, mainCanvas.height)\r\n\r\n grayscalePathOnImage(ctx, mainImage, room, multiply, mainCanvas)\r\n }\r\n\r\n room.selectedPrespectives\r\n .filter((q) => q.brightness == null || q.contrast == null)\r\n .forEach(async (q) => {\r\n //get image object from image base 64\r\n let img = await addImageProcess(q.imageData)\r\n\r\n ctx.drawImage(img, 0, 0)\r\n\r\n // if (typeof perspective !== 'object' && perspective !== null) {\r\n // if (room.selectedPrespectives) return\r\n // perspective = room.selectedPrespectives.find(\r\n // (q) => q.id === perspective\r\n // )\r\n // if (!perspective) return\r\n // }\r\n })\r\n\r\n await DrawPathWithFilters(room)\r\n\r\n dispatch({\r\n type: types.APPLY_CURVE_FILTER,\r\n payload: {\r\n brightness: brightness,\r\n contrast: contrast,\r\n room: room,\r\n multiply: multiply,\r\n },\r\n })\r\n dispatch({\r\n type: types.DRAWING_ENDED,\r\n })\r\n }\r\n}\r\n\r\nexport const applyTextureZoom = (\r\n perspective,\r\n zoom,\r\n offsetH,\r\n offsetV,\r\n room,\r\n multiply\r\n) => {\r\n return async (dispatch, getState) => {\r\n if (typeof perspective != 'object') {\r\n perspective = room.selectedPrespectives.find(\r\n (q) => q.id == perspective\r\n )\r\n }\r\n\r\n perspective.zoom = zoom\r\n perspective.offsetH = offsetH\r\n perspective.offsetV = offsetV\r\n\r\n room.selectedPrespectives\r\n .filter((q) => q.id !== perspective.id)\r\n .concat(perspective)\r\n\r\n dispatch(\r\n dropAndDrawMaterial(\r\n room,\r\n perspective.id,\r\n perspective.material,\r\n multiply,\r\n zoom,\r\n offsetH,\r\n offsetV\r\n )\r\n )\r\n }\r\n}\r\n\r\nconst setContrast = function (imgData, contrast) {\r\n var d = imgData.data\r\n contrast = contrast / 100 + 1\r\n var intercept = 128 * (1 - contrast)\r\n for (var i = 0; i < d.length; i += 4) {\r\n d[i] = d[i] * contrast + intercept\r\n d[i + 1] = d[i + 1] * contrast + intercept\r\n d[i + 2] = d[i + 2] * contrast + intercept\r\n }\r\n return imgData\r\n}\r\n\r\nconst setBrightness = function (imgData, brightness) {\r\n var d = imgData.data\r\n for (var i = 0; i < d.length; i += 4) {\r\n d[i] += brightness\r\n d[i + 1] += brightness\r\n d[i + 2] += brightness\r\n }\r\n return imgData\r\n}\r\n\r\nconst DrawPathWithFilters = async (room) => {\r\n for (let index = 0; index < room.selectedPrespectives.length; index++) {\r\n const perspective = room.selectedPrespectives[index]\r\n if (perspective.contrast == null || !perspective.brightness == null) {\r\n continue\r\n }\r\n\r\n let baseCanvas = document.getElementById('main-scene')\r\n let ctx = baseCanvas.getContext('2d')\r\n\r\n //get image object from image base 64\r\n let image = await addImageProcess(perspective.imageData)\r\n\r\n let onFlyPathCanvas = document.createElement('canvas')\r\n let onFlyPathContext = onFlyPathCanvas.getContext('2d')\r\n onFlyPathCanvas.setAttribute('width', baseCanvas.width)\r\n onFlyPathCanvas.setAttribute('height', baseCanvas.height)\r\n onFlyPathContext.drawImage(image, 0, 0)\r\n\r\n onFlyPathContext.putImageData(\r\n setContrast(\r\n onFlyPathContext.getImageData(\r\n 0,\r\n 0,\r\n baseCanvas.width,\r\n baseCanvas.height\r\n ),\r\n perspective.contrast\r\n ),\r\n 0,\r\n 0\r\n )\r\n onFlyPathContext.putImageData(\r\n setBrightness(\r\n onFlyPathContext.getImageData(\r\n 0,\r\n 0,\r\n baseCanvas.width,\r\n baseCanvas.height\r\n ),\r\n perspective.brightness\r\n ),\r\n 0,\r\n 0\r\n )\r\n var images = []\r\n images.push(await addImageProcess(onFlyPathCanvas.toDataURL()))\r\n images.forEach((img) => {\r\n ctx.drawImage(img, 0, 0)\r\n })\r\n }\r\n}\r\n\r\nconst drawPathData = (\r\n context,\r\n pathData,\r\n points,\r\n ratioWidth,\r\n ratioHeight,\r\n isPath = false\r\n) => {\r\n if (isPath) {\r\n context.beginPath()\r\n context.fillStyle = '#FFF'\r\n context.lineWidth = 1\r\n context.globalAlpha = 1\r\n context.globalCompositeOperation = 'copy'\r\n const p = new Path2D(pathData)\r\n context.stroke(p)\r\n } else {\r\n context.beginPath()\r\n context.moveTo(points[0].x * ratioWidth, points[0].y * ratioHeight)\r\n for (let index = 1; index < points.length; index++) {\r\n const element = points[index]\r\n context.lineTo(element.x * ratioWidth, element.y * ratioHeight)\r\n }\r\n context.closePath()\r\n }\r\n}\r\n\r\nexport const changeMultiplyIntensity = (roomInDesignStage, value) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: types.DRAWING_STARTED,\r\n })\r\n var mainImage = await addImageProcess(roomInDesignStage.image)\r\n\r\n var mainCanvas = document.getElementById('main-scene')\r\n var ctx = mainCanvas.getContext('2d')\r\n ctx.clearRect(0, 0, mainCanvas.width, mainCanvas.height)\r\n var temp = 1\r\n\r\n grayscalePathOnImage(\r\n ctx,\r\n mainImage,\r\n roomInDesignStage,\r\n value,\r\n mainCanvas\r\n )\r\n\r\n roomInDesignStage.selectedPrespectives\r\n .filter((q) => q.brightness == null || q.contrast == null)\r\n .forEach((q) => {\r\n addImageProcess(q.imageData)\r\n .then((img) => {\r\n ctx.drawImage(img, 0, 0)\r\n })\r\n .catch((error) => console.log(error))\r\n })\r\n\r\n await DrawPathWithFilters(roomInDesignStage)\r\n\r\n dispatch({\r\n type: types.CHANGE_MULTIPLY,\r\n payload: {\r\n value: value,\r\n },\r\n })\r\n dispatch({\r\n type: types.DRAWING_ENDED,\r\n })\r\n }\r\n}\r\n\r\nexport const resetMultiply = (roomInDesignStage) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: types.DRAWING_STARTED,\r\n })\r\n var mainImage = await addImageProcess(roomInDesignStage.image)\r\n\r\n var mainCanvas = document.getElementById('main-scene')\r\n var ctx = mainCanvas.getContext('2d')\r\n ctx.clearRect(0, 0, mainCanvas.width, mainCanvas.height)\r\n ctx.drawImage(mainImage, 0, 0)\r\n roomInDesignStage.selectedPrespectives\r\n .filter((q) => q.brightness == null || q.contrast == null)\r\n .forEach((q) => {\r\n addImageProcess(q.imageData)\r\n .then((img) => {\r\n ctx.drawImage(img, 0, 0)\r\n })\r\n .catch((error) => console.log(error))\r\n })\r\n await DrawPathWithFilters(roomInDesignStage)\r\n dispatch({\r\n type: types.CHANGE_MULTIPLY,\r\n payload: {\r\n value: 0.8,\r\n },\r\n })\r\n dispatch({\r\n type: types.DRAWING_ENDED,\r\n })\r\n }\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/edit.4174ec54.svg\";","module.exports = __webpack_public_path__ + \"static/media/logout.224bdc6a.svg\";","module.exports = __webpack_public_path__ + \"static/media/EDIT ICON.645a599c.svg\";","module.exports = __webpack_public_path__ + \"static/media/trash.67fdbe27.svg\";","module.exports = __webpack_public_path__ + \"static/media/download.dd51d1d3.svg\";","module.exports = __webpack_public_path__ + \"static/media/SHOPPING (1).dcd7cfa7.svg\";","module.exports = __webpack_public_path__ + \"static/media/rooms.20879395.svg\";","module.exports = __webpack_public_path__ + \"static/media/materials.a15f819c.svg\";","module.exports = __webpack_public_path__ + \"static/media/FILTER.5667cdc1.svg\";","module.exports = __webpack_public_path__ + \"static/media/COMMENT_WHITE.e94ff639.svg\";","module.exports = __webpack_public_path__ + \"static/media/LIKE.77e50932.svg\";","module.exports = __webpack_public_path__ + \"static/media/LIKE_WHITE.2cd1623c.svg\";","module.exports = __webpack_public_path__ + \"static/media/SHARE_WHITE.ba26371e.svg\";","module.exports = __webpack_public_path__ + \"static/media/ADD TO FAV_WHITE.36dc10b3.svg\";","module.exports = __webpack_public_path__ + \"static/media/SORT.72bb9d78.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/logo-header-white.47c42481.svg\";","const max_size = 1000\r\nconst thumbnail_size = 128\r\n\r\nexport const toBase64 = (file) =>\r\n new Promise((resolve, reject) => {\r\n if (file.type.match(/image.*/)) {\r\n const reader = new FileReader()\r\n reader.readAsDataURL(file)\r\n reader.onload = (readerEvent) => {\r\n var image = new Image()\r\n image.onload = () => {\r\n // Resize the image\r\n const canvas = document.createElement('canvas')\r\n let width = image.width,\r\n height = image.height\r\n\r\n if (width > height) {\r\n if (width > max_size) {\r\n height *= max_size / width\r\n width = max_size\r\n }\r\n } else {\r\n if (height > max_size) {\r\n width *= max_size / height\r\n height = max_size\r\n }\r\n }\r\n canvas.width = width\r\n canvas.height = height\r\n canvas\r\n .getContext('2d')\r\n .drawImage(image, 0, 0, width, height)\r\n var dataUrl = canvas.toDataURL('image/png')\r\n\r\n const thumbnailCanvas = document.createElement('canvas')\r\n\r\n const maxLength = Math.max(...[width, height])\r\n\r\n thumbnailCanvas.width = (width / maxLength) * thumbnail_size\r\n thumbnailCanvas.height =\r\n (height / maxLength) * thumbnail_size\r\n thumbnailCanvas\r\n .getContext('2d')\r\n .drawImage(\r\n image,\r\n 0,\r\n 0,\r\n thumbnailCanvas.width,\r\n thumbnailCanvas.height\r\n )\r\n const thumbnailDataUrl = thumbnailCanvas.toDataURL(\r\n 'image/png'\r\n )\r\n resolve({ imageData: dataUrl, thumbnailDataUrl })\r\n }\r\n image.onerror = (error) => reject(error)\r\n image.src = readerEvent.target.result\r\n }\r\n reader.onerror = (error) => reject(error)\r\n } else reject('File type is not valid...')\r\n })\r\n\r\nexport const toThumbnail64 = (imageSrc) =>\r\n new Promise((resolve, reject) => {\r\n var image = new Image()\r\n image.onload = () => {\r\n // Resize the image\r\n let width = image.width,\r\n height = image.height\r\n\r\n const thumbnailCanvas = document.createElement('canvas')\r\n\r\n const maxLength = Math.max(...[width, height])\r\n\r\n thumbnailCanvas.width = (width / maxLength) * thumbnail_size\r\n thumbnailCanvas.height = (height / maxLength) * thumbnail_size\r\n thumbnailCanvas\r\n .getContext('2d')\r\n .drawImage(\r\n image,\r\n 0,\r\n 0,\r\n thumbnailCanvas.width,\r\n thumbnailCanvas.height\r\n )\r\n const thumbnailDataUrl = thumbnailCanvas.toDataURL('image/png')\r\n resolve(thumbnailDataUrl)\r\n }\r\n image.onerror = (error) => reject(error)\r\n image.src = imageSrc\r\n })\r\n\r\nexport const createPatternFromImage = (\r\n file,\r\n textureSize = 100,\r\n imageSize = 300\r\n) =>\r\n new Promise((resolve, reject) => {\r\n var img = new Image()\r\n img.crossOrigin = 'Anonymous'\r\n\r\n img.onload = function () {\r\n const maxLength = Math.max(...[img.width, img.height])\r\n\r\n const canvas = document.createElement('canvas')\r\n\r\n var tempCanvas = document.createElement('canvas'),\r\n tCtx = tempCanvas.getContext('2d')\r\n\r\n tempCanvas.width = (img.width / maxLength) * textureSize\r\n tempCanvas.height = (img.height / maxLength) * textureSize\r\n\r\n const repeatNumberH = Math.round(\r\n imageSize / ((img.width / maxLength) * textureSize)\r\n )\r\n const repeatNumberV = Math.round(\r\n imageSize / ((img.height / maxLength) * textureSize)\r\n )\r\n canvas.width = tempCanvas.width * repeatNumberH\r\n canvas.height = tempCanvas.height * repeatNumberV\r\n\r\n tCtx.drawImage(\r\n img,\r\n 0,\r\n 0,\r\n img.width,\r\n img.height,\r\n 0,\r\n 0,\r\n tempCanvas.width,\r\n tempCanvas.height\r\n )\r\n\r\n // use getContext to use the canvas for drawing\r\n var ctx = canvas.getContext('2d')\r\n ctx.clearRect(0, 0, canvas.width, canvas.height)\r\n ctx.fillStyle = ctx.createPattern(tempCanvas, 'repeat')\r\n\r\n ctx.beginPath()\r\n ctx.rect(0, 0, canvas.width, canvas.height)\r\n ctx.fill()\r\n var dataUrl = canvas.toDataURL('image/png')\r\n resolve(dataUrl)\r\n }\r\n img.onerror = (error) => reject(error)\r\n img.src = file\r\n })\r\n\r\nexport const createPatternFromImageNew = (\r\n file,\r\n textureSize = 100,\r\n imageSize = 300,\r\n flipH = false,\r\n flipV = false\r\n) =>\r\n new Promise((resolve, reject) => {\r\n var img = new Image()\r\n img.crossOrigin = 'Anonymous'\r\n\r\n img.onload = function () {\r\n const maxLength = Math.max(...[img.width, img.height])\r\n\r\n const canvas = document.createElement('canvas')\r\n\r\n var tempCanvas = document.createElement('canvas'),\r\n tCtx = tempCanvas.getContext('2d')\r\n\r\n var tempFlipedHCanvas = document.createElement('canvas'),\r\n tFlipedHCtx = tempFlipedHCanvas.getContext('2d')\r\n\r\n var tempFlipedVCanvas = document.createElement('canvas'),\r\n tFlipedVCtx = tempFlipedVCanvas.getContext('2d')\r\n\r\n tempCanvas.width = tempFlipedHCanvas.width = tempFlipedVCanvas.width =\r\n (img.width / maxLength) * textureSize\r\n tempCanvas.height = tempFlipedHCanvas.height = tempFlipedVCanvas.height =\r\n (img.height / maxLength) * textureSize\r\n\r\n const repeatNumberH = Math.round(\r\n imageSize / ((img.width / maxLength) * textureSize)\r\n )\r\n const repeatNumberV = Math.round(\r\n imageSize / ((img.height / maxLength) * textureSize)\r\n )\r\n canvas.width = tempCanvas.width * repeatNumberH\r\n canvas.height = tempCanvas.height * repeatNumberV\r\n\r\n tCtx.drawImage(\r\n img,\r\n 0,\r\n 0,\r\n img.width,\r\n img.height,\r\n 0,\r\n 0,\r\n tempCanvas.width,\r\n tempCanvas.height\r\n )\r\n tFlipedHCtx.translate(tempCanvas.width, 0)\r\n tFlipedHCtx.scale(-1, 1)\r\n tFlipedHCtx.drawImage(\r\n img,\r\n 0,\r\n 0,\r\n img.width,\r\n img.height,\r\n 0,\r\n 0,\r\n tempCanvas.width,\r\n tempCanvas.height\r\n )\r\n\r\n tFlipedVCtx.translate(0, tempCanvas.height)\r\n tFlipedVCtx.scale(1, -1)\r\n tFlipedVCtx.drawImage(\r\n img,\r\n 0,\r\n 0,\r\n img.width,\r\n img.height,\r\n 0,\r\n 0,\r\n tempCanvas.width,\r\n tempCanvas.height\r\n )\r\n\r\n // use getContext to use the canvas for drawing\r\n var ctx = canvas.getContext('2d')\r\n ctx.clearRect(0, 0, canvas.width, canvas.height)\r\n\r\n for (let hIndex = 0; hIndex < repeatNumberH; hIndex++) {\r\n for (let vIndex = 0; vIndex < repeatNumberV; vIndex++) {\r\n let dx = tempCanvas.width * hIndex\r\n let dy = tempCanvas.height * vIndex\r\n if (flipH && hIndex % 2 == 0) {\r\n ctx.drawImage(tempFlipedHCanvas, dx, dy)\r\n } else if (flipV && vIndex % 2 == 0) {\r\n ctx.drawImage(tempFlipedVCanvas, dx, dy)\r\n } else ctx.drawImage(tempCanvas, dx, dy)\r\n }\r\n }\r\n\r\n var dataUrl = canvas.toDataURL('image/png')\r\n resolve(dataUrl)\r\n }\r\n img.onerror = (error) => reject(error)\r\n img.src = file\r\n })\r\n\r\nexport const createPatternFromImageForDrawing = (\r\n file,\r\n textureSize = 100,\r\n imageSize = 300,\r\n offsetH = 0,\r\n offsetV = 0\r\n) =>\r\n new Promise((resolve, reject) => {\r\n var img = new Image()\r\n // img.crossOrigin = 'anonymous'\r\n img.setAttribute('crossorigin', 'anonymous'); // works for me\r\n\r\n\r\n img.onload = function () {\r\n const maxLength = Math.max(...[img.width, img.height])\r\n\r\n const canvas = document.createElement('canvas')\r\n\r\n var tempCanvas = document.createElement('canvas'),\r\n tCtx = tempCanvas.getContext('2d')\r\n\r\n tempCanvas.width = (img.width / maxLength) * textureSize\r\n tempCanvas.height = (img.height / maxLength) * textureSize\r\n\r\n const repeatNumberH = Math.round(\r\n imageSize / ((img.width / maxLength) * textureSize)\r\n )\r\n const repeatNumberV = Math.round(\r\n imageSize / ((img.height / maxLength) * textureSize)\r\n )\r\n canvas.width = tempCanvas.width * repeatNumberH\r\n canvas.height = tempCanvas.height * repeatNumberV\r\n\r\n tCtx.drawImage(\r\n img,\r\n 0,\r\n 0,\r\n img.width,\r\n img.height,\r\n 0,\r\n 0,\r\n tempCanvas.width,\r\n tempCanvas.height\r\n )\r\n\r\n // use getContext to use the canvas for drawing\r\n var ctx = canvas.getContext('2d')\r\n ctx.clearRect(0, 0, canvas.width, canvas.height)\r\n\r\n for (let hIndex = 0; hIndex <= repeatNumberH; hIndex++) {\r\n for (let vIndex = 0; vIndex <= repeatNumberV; vIndex++) {\r\n let dx = tempCanvas.width * (hIndex - 1) + (offsetH * tempCanvas.width)\r\n let dy = tempCanvas.height * (vIndex - 1) + (offsetV * tempCanvas.height)\r\n ctx.drawImage(tempCanvas, dx, dy)\r\n }\r\n }\r\n\r\n var dataUrl = canvas.toDataURL('image/png')\r\n resolve(dataUrl)\r\n }\r\n img.onerror = (error) => reject(error)\r\n img.src = file\r\n })\r\n","import { baseURL } from '../apiService/apiService'\r\n\r\nexport const toPlans = (plans) => {\r\n return plans.map((q) => toPlan(q))\r\n}\r\nexport const toPlan = (plan) => ({\r\n ...plan,\r\n fullName: plan.authorFullName,\r\n imageUrl: baseURL + plan.thumbnail,\r\n isLiked: plan.isLiked,\r\n isFavourited: plan.isMarked,\r\n isPublic: plan.isPublic,\r\n showToggle: plan.isOwner,\r\n})\r\nexport const toComments = (comments) => {\r\n return comments.map((q) => toComment(q))\r\n}\r\nexport const toComment = (comment) => ({\r\n ...comment,\r\n id: comment.id,\r\n name: comment.authorFullName,\r\n userImageUrl: comment.authorProfilePhoto,\r\n time: new Date(comment.addedDate),\r\n modificationDate: new Date(comment.modificationDate),\r\n text: comment.text,\r\n})\r\nexport const toPlanProfile = (profile) => ({\r\n fullName: profile.authorFullName,\r\n image: profile.authorProfilePicture,\r\n PlanCount: profile.authorTotalPostCount ?? '-',\r\n RegistrationDate: new Date(profile.addedDate),\r\n rankCurrentMonth:\r\n profile.authorCurrentMonthRank == 0\r\n ? '-'\r\n : profile.authorCurrentMonthRank,\r\n rankTotal: profile.authorTotalRank == 0 ? '-' : profile.authorTotalRank,\r\n})\r\nexport const toUserProfile = (profile) => {\r\n let date = new Date(profile.registerationDate)\r\n\r\n if (date.getFullYear() < 100) date = new Date(2021, 1, 1)\r\n\r\n return {\r\n fullName: `${profile.firstName} ${profile.lastName}`,\r\n PlanCount: profile.postsCount ?? '-',\r\n RegistrationDate: date,\r\n rankCurrentMonth:\r\n profile.rankInCurrentMonth == 0 ? '-' : profile.rankInCurrentMonth,\r\n rankTotal: profile.totalRank == 0 ? '-' : profile.totalRank,\r\n }\r\n}\r\nexport const toFabrics = (fabrics) => {\r\n if (!fabrics) return []\r\n if (typeof fabrics !== 'string') return []\r\n\r\n return fabrics.split(',').map((q) => ({ id: q }))\r\n}\r\nexport const toFabric = (fabric) => ({\r\n ...fabric,\r\n //name: fabric.title,\r\n //imageUrl: fabric.thumbnail,\r\n price: parseInt(fabric.price) ,\r\n discount: fabric.offPrice,\r\n meterage: 1,\r\n})\r\nexport const toFilters = (filters) => {\r\n return filters.map((q) => toFilter(q))\r\n}\r\nexport const toFilter = (filter) => ({\r\n ...filter,\r\n id: filter.id,\r\n title: filter.id,\r\n displayTitle: filter.title,\r\n type: 'checkbox',\r\n items: filter?.options?.split(',') ?? [],\r\n})\r\n","module.exports = __webpack_public_path__ + \"static/media/2000-01 (2).99a90bc3.jpg\";","export const SET_PHOTO_EDITOR_MATERIAL = 'SET_PHOTO_EDITOR_MATERIAL'\r\nexport const CLOSE_PHOTO_EDITOR_MATERIAL = 'CLOSE_PHOTO_EDITOR_MATERIAL'\r\n\r\nexport const OPERATION_STARTED = 'OPERATION_STARTED'\r\nexport const OPERATION_FAILED = 'OPERATION_FAILED'\r\n\r\nexport const GET_MATERIALS_SUCCESS = 'GET_MATERIALS_SUCCESS'\r\n\r\nexport const GET_ROOMS_SUCCESS = 'GET_ROOMS_SUCCESS'\r\n\r\nexport const GET_MATERIAL_BY_ID = 'GET_MATERIAL_BY_ID'\r\n\r\nexport const UPLOAD_MATERIAL_SUCCESS = 'UPLOAD_MATERIAL_SUCCESS'\r\nexport const RESET_MATERIAL_SUCCESS = 'RESET_MATERIAL_SUCCESS'\r\n\r\nexport const DELETE_MATERIAL_SUCCESS = 'DELETE_MATERIAL_SUCCESS'\r\nexport const DELETE_ROOM_SUCCESS = 'DELETE_ROOM_SUCCESS'\r\n\r\nexport const UPLOAD_ROOM_SUCCESS = 'UPLOAD_ROOM_SUCCESS'\r\n\r\nexport const EDIT_MATERIAL_TITLE_SUCCESS = 'EDIT_MATERIAL_TITLE_SUCCESS'\r\nexport const EDIT_ROOM_TITLE_SUCCESS = 'EDIT_ROOM_TITLE_SUCCESS'\r\n\r\nexport const ACTIVE_PATH = 'ACTIVE_PATH'\r\nexport const CHOOOSE_ROOM = 'CHOOOSE_ROOM'\r\nexport const CHOOSE_ROOM_INITIAL = 'CHOOSE_ROOM_INITIAL'\r\nexport const SELECT_CURVE = 'SELECT_CURVE'\r\nexport const RESET_DRAG = 'RESET_DRAG'\r\nexport const APPLY_CURVE_FILTER = 'APPLY_CURVE_FILTER'\r\nexport const APPLY_TEXTURE_ZOOM = 'APPLY_TEXTURE_ZOOM'\r\nexport const CHANGE_CURVE_MULTIPLY = 'CHANGE_CURVE_MULTIPLY'\r\nexport const CHANGE_MULTIPLY = 'CHANGE_MULTIPLY'\r\n\r\nexport const GET_ROOM_SUCCESS = 'GET_ROOM_SUCCESS'\r\n\r\nexport const DRAWING_STARTED = 'DRAWING_STARTED'\r\nexport const DRAWING_ENDED = 'DRAWING_ENDED'\r\n\r\nexport const SAVE_GRAY_SCALE_IMAGES = 'SAVE_GRAY_SCALE_IMAGES'\r\n","import * as types from './constants'\r\nimport apiService, { setAxiosHeader } from '../../apiService/apiService'\r\n\r\nexport const login = (mobile, password, history) => {\r\n const data = {\r\n userName: mobile,\r\n password,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.AUTH_START,\r\n })\r\n apiService.auth\r\n .login(data)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const { token } = response.data\r\n if (token) {\r\n localStorage.setItem('token', token)\r\n setAxiosHeader(token)\r\n dispatch({\r\n type: types.AUTH_SUCCESS,\r\n token: token,\r\n isUserValidated: false,\r\n })\r\n window.location.href = '/'\r\n return\r\n }\r\n\r\n dispatch({\r\n type: types.AUTH_SUCCESS,\r\n token: null,\r\n isUserValidated: false,\r\n })\r\n } else {\r\n dispatch({\r\n type: types.AUTH_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n if (error?.response?.status == '403') {\r\n dispatch({\r\n type: types.AUTH_SUCCESS,\r\n token: null,\r\n isUserValidated: false,\r\n })\r\n return\r\n }\r\n let errorMessage = 'خطا در اجرای دستور'\r\n if (error?.response?.data) errorMessage = error.response.data\r\n else if (error?.data) errorMessage = error.data\r\n\r\n dispatch({\r\n\r\n type: types.AUTH_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const validateUser = (mobile, validationKey, history) => {\r\n const data = {\r\n userName: mobile,\r\n token: validationKey,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.VALIDATION_START,\r\n })\r\n apiService.auth\r\n .validateUser(data)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const { token } = response.data\r\n localStorage.setItem('token', token)\r\n setAxiosHeader(token)\r\n dispatch({\r\n type: types.VALIDATION_SUCCESS,\r\n payload: token,\r\n })\r\n window.location.href = '/'\r\n } else {\r\n dispatch({\r\n type: types.VALIDATION_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.VALIDATION_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const logout = () => {\r\n return (dispatch) => {\r\n localStorage.removeItem('token')\r\n dispatch({\r\n type: types.LOG_OUT,\r\n })\r\n window.location.href = '/'\r\n }\r\n}\r\n\r\nexport const setError = (message) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.SET_ERROR,\r\n error: message,\r\n })\r\n }\r\n}\r\n\r\nexport const sendForgotPasswordToken = (mobile) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.FORGOT_PASSWORD_STEP_ONE_START,\r\n })\r\n apiService.auth\r\n .forgotPasswordStepOne(mobile)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.FORGOT_PASSWORD_STEP_ONE_SUCCESS,\r\n })\r\n } else {\r\n dispatch({\r\n type: types.FORGOT_PASSWORD_STEP_ONE_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.FORGOT_PASSWORD_STEP_ONE_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const forgotPasswordFinalStep = (mobile, token, password, history) => {\r\n const data = {\r\n userName: mobile,\r\n password: password,\r\n token: token,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.FORGOT_PASSWORD_STEP_TWO_START,\r\n })\r\n apiService.auth\r\n .forgotPasswordStepTwo(data)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const { token } = response.data\r\n localStorage.setItem('token', token)\r\n setAxiosHeader(token)\r\n dispatch({\r\n type: types.FORGOT_PASSWORD_STEP_TWO_SUCCESS,\r\n })\r\n window.location.href = '/'\r\n } else {\r\n dispatch({\r\n type: types.FORGOT_PASSWORD_STEP_TWO_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.FORGOT_PASSWORD_STEP_TWO_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n","module.exports = \"data:image/png;base64,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0SG3zysKwDEAJ0kFYBjwxYH/iaYAHANwhkiAFN+jVAWAAUKW6afL7xzwPUpXABgghHGe4JnwjZPKAsAAIYzzBDcth/4DbQE4Z2PDgBD09QGbvhT4cXUBOGdjw4AAjNn1swED9AXgnI2N0+QCMAx4/GTrpw0I0CzDABmHyfl9+Svrf9aCAJzT0WFAAMaOka9+bd3PmhCA9TaDUeE2jP0CXz9x7Y/aEIDzNnMKBgTYR87vG/df84NGBOCsc9tXrlX1wFgt/ug1BlgRoJmjG4C7xkLQb5//5trvUWYE4Kx0XAmPajrnYXJ+a2+dtSNAs3qWXMGAcW3fzN0TY4AhAZoTdAOAjONX7hwd/u/KCsAZEwQyrtzPMPyfFRaAMyIEZHzLpACcESEg4/i3LQrAmd0EMrbaFIAxogFknDMpAAwox3dMCgADinH93SYFgAHF+K5NAWBAKb5nVAAYUIrvGxWAc54gEPCUVQE45wmCeE6bFYCz1hVEc96uADCgBD8wLAAMKIFlATjrBEEkpgVo5uinoIA4bAvA2fEAojAuQNPsLBKDX8wL0NxbJgiv2Bego4VABgRwDgRwDgRwDgRwDgRwDgRwDgRwDgRwTvUCaLfOPhDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAORDAOSIBLORrvoHGkQlgIGDr7bOOUAD9hI03zzxSAdQj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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/chair.40fe1716.png\";","module.exports = __webpack_public_path__ + \"static/media/sample.44b044f6.jpg\";","module.exports = __webpack_public_path__ + \"static/media/sample2.370d177a.jpg\";","import React from \"react\";\r\n\r\nimport { Col, Container, Row } from \"reactstrap\";\r\n\r\nconst Auth = ({ children }) => (\r\n \r\n \r\n \r\n \r\n
{children}
\r\n \r\n
\r\n
\r\n
\r\n);\r\n\r\nexport default Auth;\r\n","import { values } from 'lodash'\r\nimport React from 'react'\r\nimport { Range, getTrackBackground } from 'react-range'\r\n\r\nconst RangePicker = ({ min, max, onChange, onFinalChange, value, step }) => {\r\n return (\r\n onChange(values[0])}\r\n onFinalChange={(values) => {\r\n onFinalChange([values[0]])\r\n }}\r\n renderTrack={({ props, children }) => (\r\n \r\n \r\n {children}\r\n \r\n \r\n )}\r\n renderThumb={({ props, isDragged }) => (\r\n \r\n \r\n \r\n )}\r\n getTrackBackground={{\r\n min: -100,\r\n max: 100,\r\n values: [value],\r\n colors: ['red'],\r\n }}\r\n />\r\n )\r\n}\r\n\r\nexport default RangePicker\r\n","import React, { useState, useEffect } from 'react'\r\nimport InputRange from 'react-input-range'\r\nimport 'react-input-range/lib/css/index.css'\r\nimport { connect } from 'react-redux'\r\nimport {\r\n applyCurveFilter,\r\n applyTextureZoom,\r\n} from '../../../redux/tools/actions'\r\nimport { Range, getTrackBackground } from 'react-range'\r\nimport { values } from 'lodash'\r\nimport RangePicker from '../../../components/RangePicker'\r\nimport classnames from 'classnames'\r\n\r\nconst STEP = 0.1\r\nconst MIN = 0\r\nconst MAX = 100\r\n\r\nconst MiniEditor = (props) => {\r\n const [brightness, setBrightness] = useState(-50)\r\n const [contrast, setContrast] = useState(20)\r\n const [zoom, setZoom] = useState(100)\r\n const [offsetH, setOffsetH] = useState(0)\r\n const [offsetV, setOffsetV] = useState(0)\r\n\r\n const [multiplyIntensity, setMultiplyIntensity] = useState(\r\n props.multiplyIntensity ?? 0\r\n )\r\n\r\n useEffect(() => {\r\n setBrightness(props.brightness)\r\n }, [props.brightness])\r\n\r\n useEffect(() => {\r\n setContrast(props.contrast)\r\n }, [props.contrast])\r\n\r\n useEffect(() => {\r\n setZoom(props.zoom)\r\n }, [props.zoom])\r\n\r\n useEffect(() => {\r\n setOffsetH(props.offsetH)\r\n }, [props.offsetH])\r\n\r\n useEffect(() => {\r\n setOffsetV(props.offsetV)\r\n }, [props.offsetV])\r\n\r\n let miniEditorClassNames = classnames('mini-editor', {\r\n invisible: !props.isVisible,\r\n })\r\n\r\n return (\r\n \r\n
\r\n \r\n {\r\n props.applyTextureZoom(\r\n props.choosedPrespective,\r\n props.zoom,\r\n offsetH,\r\n props.offsetV,\r\n props.roomInDesignStage,\r\n props.multiply\r\n )\r\n }}\r\n />\r\n
\r\n
\r\n \r\n {\r\n props.applyTextureZoom(\r\n props.choosedPrespective,\r\n props.zoom,\r\n props.offsetH,\r\n offsetV,\r\n props.roomInDesignStage,\r\n props.multiply\r\n )\r\n }}\r\n />\r\n
\r\n
\r\n \r\n {\r\n props.applyTextureZoom(\r\n props.choosedPrespective,\r\n zoom,\r\n props.offsetH,\r\n props.offsetV,\r\n props.roomInDesignStage,\r\n props.multiply\r\n )\r\n }}\r\n />\r\n
\r\n
\r\n \r\n {\r\n props.applyCurveFilter(\r\n props.choosedPrespective,\r\n brightness,\r\n props.contrast,\r\n props.roomInDesignStage,\r\n props.multiply\r\n )\r\n }}\r\n />\r\n
\r\n
\r\n \r\n\r\n setContrast(values[0])}\r\n onFinalChange={(values) => {\r\n props.applyCurveFilter(\r\n props.choosedPrespective,\r\n props.brightness,\r\n contrast,\r\n props.roomInDesignStage,\r\n props.multiply\r\n )\r\n }}\r\n renderTrack={({ props, children }) => (\r\n \r\n \r\n {children}\r\n
\r\n \r\n )}\r\n renderThumb={({ props, isDragged }) => (\r\n \r\n \r\n \r\n )}\r\n />\r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n choosedPrespective: state.tools.choosedPrespective,\r\n brightness: state.tools.brightness,\r\n contrast: state.tools.contrast,\r\n zoom: state.tools.zoom,\r\n offsetH: state.tools.offsetH,\r\n offsetV: state.tools.offsetV,\r\n multiplyIntensity: state.tools.multiplyIntensity,\r\n roomInDesignStage: state.tools.roomInDesignStage,\r\n multiply: state.tools.multiply,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n applyCurveFilter: (prespective, brightness, contrast, room, multiply) =>\r\n dispatch(\r\n applyCurveFilter(\r\n prespective,\r\n brightness,\r\n contrast,\r\n room,\r\n multiply\r\n )\r\n ),\r\n applyTextureZoom: (\r\n prespective,\r\n zoom,\r\n offsetH,\r\n offsetV,\r\n room,\r\n multiply\r\n ) =>\r\n dispatch(\r\n applyTextureZoom(\r\n prespective,\r\n zoom,\r\n offsetH,\r\n offsetV,\r\n room,\r\n multiply\r\n )\r\n ),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MiniEditor)\r\n","import React, { useState, useEffect } from 'react'\r\nimport InputRange from 'react-input-range'\r\nimport 'react-input-range/lib/css/index.css'\r\nimport { connect } from 'react-redux'\r\nimport RangePicker from '../../../components/RangePicker'\r\nimport {\r\n applyCurveFilter,\r\n changeMultiplyIntensity,\r\n resetMultiply,\r\n} from '../../../redux/tools/actions'\r\nimport classnames from 'classnames'\r\n\r\nconst MiniEditor = (props) => {\r\n const [multiply, setMultiply] = useState(0.8)\r\n\r\n useEffect(() => {\r\n setMultiply(props.multiply)\r\n }, [props.multiply])\r\n\r\n let miniEditorClassNames = classnames('mini-editor', 'p-3', {\r\n invisible: !props.isVisible,\r\n })\r\n\r\n return (\r\n \r\n
\r\n \r\n {\r\n if (value == 0.81 || value == 0.8) {\r\n props.resetMultiply(props.roomInDesignStage)\r\n } else {\r\n props.changeMultiplyIntensity(\r\n props.roomInDesignStage,\r\n multiply,\r\n props.grayScaleImages\r\n )\r\n }\r\n }}\r\n />\r\n
\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n choosedPrespective: state.tools.choosedPrespective,\r\n multiplyIntensity: state.tools.multiplyIntensity,\r\n roomInDesignStage: state.tools.roomInDesignStage,\r\n grayScaleImages: state.tools.grayScaleImages,\r\n multiply: state.tools.multiply,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n applyCurveFilter: (prespective, brightness, contrast) =>\r\n dispatch(applyCurveFilter(prespective, brightness, contrast)),\r\n changeMultiplyIntensity: (roomInDesignStage, value, grayScaleImages) =>\r\n dispatch(\r\n changeMultiplyIntensity(\r\n roomInDesignStage,\r\n value,\r\n grayScaleImages\r\n )\r\n ),\r\n resetMultiply: (roomInDesignStage) =>\r\n dispatch(resetMultiply(roomInDesignStage)),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MiniEditor)\r\n","import React, { useEffect, useState } from 'react'\r\nimport { activePath, selectCurve } from '../../redux/tools/actions'\r\nimport { connect } from 'react-redux'\r\nimport './Scene.css'\r\nimport { Spinner } from 'reactstrap'\r\nimport MiniEditor from './miniEditor/MiniEditorV1'\r\nimport MiniEditorV1 from './miniEditor/MiniEditorV1'\r\nimport MiniEditorV2 from './miniEditor/MiniEditorV2'\r\nimport classnames from 'classnames'\r\n\r\nconst Home = (props) => {\r\n let [show, setShow] = useState(false)\r\n let [points, setPoints] = useState([])\r\n var paper = window.paper\r\n var tool = new paper.Tool()\r\n\r\n useEffect(() => {\r\n tool.onMouseMove = function (event) {\r\n //console.log(event.point);\r\n if (paper.project.hitTest(event.point)) {\r\n props.activePath(paper.project.hitTest(event.point).item._id)\r\n } else {\r\n props.activePath(null)\r\n\r\n if (window.paper.project._activeLayer?._children)\r\n window.paper.project._activeLayer._children.forEach((q) => {\r\n q.opacity = 0\r\n })\r\n }\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n tool.onMouseDown = function (event) {\r\n if (paper.project.hitTest(event.point)) {\r\n props.selectCurve(\r\n paper.project.hitTest(event.point).item._id,\r\n props.roomInDesignStage\r\n )\r\n }\r\n }\r\n if (!props.isPhotoEditorVisible && props.hoveredPathId) {\r\n window.paper.project._activeLayer._children.forEach((q) => {\r\n if (q._id === props.hoveredPathId) {\r\n q.opacity = 0.7\r\n } else {\r\n q.opacity = 0\r\n }\r\n })\r\n }\r\n }, [props.hoveredPathId])\r\n\r\n useEffect(() => {}, [props.choosedPrespective])\r\n\r\n let selectionClassNames = classnames({\r\n 'not-selectable': props.isPhotoEditorVisible,\r\n })\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {(props.isDrawing || props.uploading) && (\r\n
\r\n \r\n

لطفا منتظر بمانید

\r\n
\r\n )}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n roomPaths: state.tools.roomPaths,\r\n isPhotoEditorVisible: state.tools.isPhotoEditorVisible,\r\n hoveredPathId: state.tools.hoveredPathId,\r\n choosedPrespective: state.tools.choosedPrespective,\r\n isMiniEditorVisible: state.tools.isMiniEditorVisible,\r\n isDrawing: state.tools.isDrawing,\r\n uploading: state.user.uploading,\r\n roomInDesignStage: state.tools.roomInDesignStage,\r\n multiply: state.tools.multiply,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n activePath: (id) => dispatch(activePath(id)),\r\n selectCurve: (id, roomInDesignStage) =>\r\n dispatch(selectCurve(id, roomInDesignStage)),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Home)\r\n","import React, { useState } from 'react'\r\nimport { Tooltip } from 'reactstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Button from 'reactstrap/lib/Button'\r\n\r\nconst NavbarItem = (props) => {\r\n const [tooltipOpen, setTooltipOpen] = useState(false)\r\n const dispatch = useDispatch()\r\n const cart = useSelector(state => state.payment.cart)\r\n const toggle = () => setTooltipOpen(!tooltipOpen)\r\n\r\n return (\r\n \r\n props.onClick(dispatch)}\r\n id={props.name}\r\n style={props.style}\r\n >\r\n {props.isButton && (\r\n \r\n )}\r\n {!props.isButton && props.icon && (\r\n {props.icon}\r\n )}\r\n {!props.isButton && props.image && }\r\n {!props.isButton && props.title && {props.title}}\r\n {props.showCartBadge && cart.length > 0 && {cart.length}}\r\n \r\n {props.tooltip && (\r\n \r\n {props.tooltip}\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default NavbarItem\r\n","import domtoimage from 'dom-to-image'\r\nimport { logout } from '../redux/auth/actions'\r\nimport logoutIcon from '../assets/img/navbarIcons/logout.svg'\r\nimport saveIcon from '../assets/img/navbarIcons/download.svg'\r\nimport cartIcon from '../assets/img/icons/SHOPPING (1).svg'\r\nimport { uploadPlan } from '../redux/user/actions'\r\n\r\nconst config = [\r\n {\r\n name: 'cart',\r\n image: cartIcon,\r\n tooltip: 'سبد خرید',\r\n onClick: (dispatch) => {\r\n window.location.href = '/#/cart'\r\n },\r\n showCartBadge: true,\r\n },\r\n {\r\n name: 'logout',\r\n image: logoutIcon,\r\n tooltip: 'خروج',\r\n onClick: (dispatch) => {\r\n dispatch(logout())\r\n },\r\n },\r\n {\r\n name: 'save',\r\n image: saveIcon,\r\n isButton: true,\r\n title: 'ذخیره عکس',\r\n style: { order: 1 },\r\n isEditorOnly: true,\r\n onClick: (dispatch) => {\r\n var node = document.getElementById('main-scene')\r\n\r\n setTimeout(() => {\r\n domtoimage\r\n .toPng(node)\r\n .then(function (dataUrl) {\r\n var link = document.createElement('a')\r\n link.download = `mokabber_plus_${Date.now()}.jpeg`\r\n link.href = dataUrl\r\n link.click()\r\n dispatch(uploadPlan(dataUrl))\r\n })\r\n .catch(function (error) {\r\n console.error('oops, something went wrong!', error)\r\n })\r\n }, 1000)\r\n },\r\n },\r\n]\r\n\r\nexport default config\r\n","import jwtDecode from 'jwt-decode'\r\nimport { setAxiosHeader } from '../apiService/apiService'\r\n\r\nexport const isAuthenticated = () => {\r\n if (!localStorage.getItem('token')) return false\r\n\r\n setAxiosHeader(localStorage.getItem('token'))\r\n\r\n // const accessToken = JSON.parse(localStorage.getItem(\"accessToken\"));\r\n // const refreshToken = localStorage.getItem(\"refreshToken\");\r\n\r\n return true\r\n}\r\n\r\nexport const getUserFullname = () => {\r\n const token = localStorage.getItem('token')\r\n if (!token) return null\r\n\r\n const { unique_name, fullName } = jwtDecode(token)\r\n if (fullName) return fullName\r\n return unique_name\r\n}\r\n","import React, { useState, Fragment } from 'react'\r\nimport './Index.css'\r\nimport NavbarItem from '../index/navbarItem/NavbarItem'\r\nimport config from '../../../routes/navbarConfig'\r\nimport logo from '../../../assets/img/logo.svg'\r\nimport {\r\n getUserFullname,\r\n isAuthenticated,\r\n} from '../../../services/authenticationChecker'\r\nimport Tour from 'reactour'\r\nimport Button from 'reactstrap/lib/Button'\r\nimport { useDispatch } from 'react-redux'\r\nimport { Link } from 'react-router-dom'\r\nimport { drawForHelpTour } from '../../../redux/tools/actions'\r\nimport classNames from 'classnames'\r\n\r\nconst Index = ({ isPlan, isPayment, ...props }) => {\r\n const [isTourOpen, setIsTourOpen] = useState(false)\r\n const [currentStep, setCurrentStep] = useState(0)\r\n\r\n const toggleTourStatus = () => {\r\n setIsTourOpen(!isTourOpen)\r\n setCurrentStep(0)\r\n }\r\n\r\n const dispatch = useDispatch()\r\n\r\n const tourFooter = (goTo, nextPage) => (\r\n
\r\n goTo(nextPage)}\r\n >\r\n بعدی\r\n \r\n restartTourStatus(goTo)}\r\n >\r\n بعدا میبینم\r\n \r\n
\r\n )\r\n\r\n const finalTourFooter = (goTo) => (\r\n
\r\n restartTourStatus(goTo)}\r\n >\r\n اتمام\r\n \r\n
\r\n )\r\n\r\n const restartTourStatus = (goTo) => {\r\n toggleTourStatus()\r\n goTo(0)\r\n }\r\n\r\n const steps = [\r\n {\r\n selector: '.nav.nav-tabs .nav-item:last-child a',\r\n content: ({ goTo }) => (\r\n \r\n

\r\n 1\r\n بر روی اتاق‌ها کلیک کنید\r\n

\r\n {tourFooter(goTo, 1)}\r\n
\r\n ),\r\n action: (node) => {\r\n if (node && node.focus) {\r\n node.focus()\r\n node.click()\r\n }\r\n },\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: '.room-card.card',\r\n content: ({ goTo }) => (\r\n \r\n

\r\n 2\r\n اتاق را انتخاب کنید\r\n

\r\n {tourFooter(goTo, 2)}\r\n
\r\n ),\r\n action: (node) => {\r\n if (node && node.focus) {\r\n node.focus()\r\n node.click()\r\n }\r\n },\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: '.nav.nav-tabs .nav-item a',\r\n content: ({ goTo }) => (\r\n \r\n

\r\n 3\r\n بر روی پارچه‌ها کلیک کنید\r\n

\r\n {tourFooter(goTo, 3)}\r\n
\r\n ),\r\n action: (node) => {\r\n if (node && node.focus) {\r\n node.focus()\r\n node.click()\r\n }\r\n },\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: '.material-item-wrapper',\r\n content: ({ goTo }) => (\r\n \r\n

\r\n 4\r\n پارچه مورد نظر را انتخاب نموده و بر روی ناحیه دلخواه در\r\n تصویر کشیده و رها کنید\r\n

\r\n {tourFooter(goTo, 4)}\r\n
\r\n ),\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: '#scene-container',\r\n content: ({ goTo }) => (\r\n \r\n

\r\n 5\r\n برای ایجاد تغییراتی از قبیل روشنایی و بزرگنمایی ابتدا\r\n ناحیه مورد نظر را انتخاب کنید\r\n

\r\n {tourFooter(goTo, 5)}\r\n
\r\n ),\r\n action: () => {\r\n dispatch(drawForHelpTour())\r\n },\r\n position: 'right',\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: '.mini-editor',\r\n content: ({ goTo }) => (\r\n \r\n

\r\n 6\r\n امکان تغییر کنتراست، بزرگنمایی، روشنایی و غیره وجود دارد\r\n

\r\n {tourFooter(goTo, 6)}\r\n
\r\n ),\r\n stepInteraction: true,\r\n },\r\n {\r\n selector: '.download-btn',\r\n content: ({ goTo }) => (\r\n \r\n

\r\n 7\r\n پس از ایجاد تغییرات و نهایی شدن طرح، با کلیک بر روی\r\n دانلود، عکس طرح ذخیره خواهد شد\r\n

\r\n {finalTourFooter(goTo)}\r\n
\r\n ),\r\n stepInteraction: true,\r\n },\r\n ]\r\n\r\n return (\r\n \r\n \r\n \"\"\r\n \r\n \r\n
    \r\n {isAuthenticated && (\r\n \r\n
  • {getUserFullname()}
  • \r\n \r\n )}\r\n {config\r\n .filter((q) => (!isPayment && !isPlan) || !q.isEditorOnly)\r\n .map((item, index) => {\r\n return \r\n })}\r\n {!isPayment && !isPlan && isAuthenticated && (\r\n
  • \r\n راهنمای استفاده\r\n
  • \r\n )}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default Index\r\n","import React, { useState, lazy, Suspense } from 'react'\r\nimport {\r\n TabContent,\r\n TabPane,\r\n Nav,\r\n NavItem,\r\n NavLink,\r\n Card,\r\n Button,\r\n CardTitle,\r\n CardText,\r\n Row,\r\n Col,\r\n} from 'reactstrap'\r\nimport classnames from 'classnames'\r\nimport './Index.css'\r\nimport Rooms from '../rooms/index'\r\nimport roomImage from '../../../assets/img/navbarIcons/rooms.svg'\r\nimport materialImage from '../../../assets/img/navbarIcons/materials.svg'\r\n\r\nconst Materials = lazy(() => import('../materials/index'))\r\n\r\nconst Loading = () => {\r\n return (\r\n \r\n در حال بارگذاری ...\r\n \r\n )\r\n}\r\n\r\nconst Index = (props) => {\r\n const [activeTab, setActiveTab] = useState('2')\r\n\r\n const toggle = (tab) => {\r\n if (activeTab !== tab) setActiveTab(tab)\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {activeTab === '1' && (\r\n }>\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {activeTab === '2' && (\r\n }>\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default Index\r\n","import React from 'react'\r\nimport { Col, Container, Row } from 'reactstrap'\r\nimport Secene from '../pages/Scene/Home_New'\r\nimport Navbar from '../pages/Navbar/index/Index'\r\nimport Tools from '../pages/Tools/Index/Index'\r\nimport AppInfo from '../components/AppInfo'\r\n\r\nconst MainLayout = ({ children }) => (\r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport default MainLayout\r\n","import React, { useState } from \"react\";\r\nimport { isEmpty } from \"lodash\";\r\nimport './AccordionItem.css';\r\nimport Icon from \"../../Icons/Icon\";\r\nimport classNames from \"classnames\";\r\nimport { Collapse } from \"reactstrap\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nconst AccordionItem = ({ icon, title, extraInfo, badge, className, children, to }) => {\r\n\r\n const [isOpen, setIsOpen] = useState(false)\r\n const history = useHistory();\r\n\r\n return (\r\n
to && history.push(to)}>\r\n
\r\n {!isEmpty(icon) && }\r\n children && setIsOpen(!isOpen)}\r\n >{title}\r\n {extraInfo}\r\n {badge != null && badge != undefined && badge > 0 && {badge}}\r\n children && setIsOpen(!isOpen)}>›\r\n
\r\n {children && \r\n {children}\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default AccordionItem\r\n","import * as types from './constants'\r\nimport apiService from '../../apiService/apiService'\r\nimport {\r\n toFabrics,\r\n toComments,\r\n toPlan,\r\n toPlans,\r\n toPlanProfile,\r\n toFabric,\r\n toFilters,\r\n} from '../../mapper/planMapper'\r\nimport { toast } from 'react-toastify'\r\n\r\nexport const getPlans = ({\r\n type,\r\n sort,\r\n filter,\r\n search,\r\n pageNumber,\r\n replace,\r\n}) => {\r\n return (dispatch, getState) => {\r\n let oldPlans = getState().plan.plans\r\n if (replace) oldPlans = []\r\n dispatch({\r\n type: types.GET_PLANS_START,\r\n })\r\n apiService.plan\r\n .getAll({ type, sort, filter, search, pageNumber })\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const plans = response.data\r\n\r\n dispatch({\r\n type: types.GET_PLANS_SUCCESS,\r\n payload: [...oldPlans, ...toPlans(plans)],\r\n })\r\n } else {\r\n dispatch({\r\n type: types.GET_PLANS_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_PLANS_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const resetPlans = () => {\r\n return (dispatch) =>\r\n dispatch({\r\n type: types.RESET_PLANS,\r\n })\r\n}\r\n\r\nexport const getPlan = (planId) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.GET_PLAN_START,\r\n })\r\n apiService.plan\r\n .getById(planId)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const plan = response.data\r\n dispatch({\r\n type: types.GET_PLAN_SUCCESS,\r\n payload: toPlan(plan),\r\n })\r\n dispatch({\r\n type: types.GET_PLAN_COMMENTS_SUCCESS,\r\n payload: toComments(plan.comments),\r\n })\r\n const fabrics = toFabrics(plan.usedFabrics)\r\n dispatch({\r\n type: types.GET_PLAN_FABRICS_SUCCESS,\r\n payload: fabrics,\r\n })\r\n dispatch(getPlanFabrics(fabrics))\r\n console.log('toPlanProfile(plan)', toPlanProfile(plan))\r\n dispatch({\r\n type: types.GET_PLAN_PROFILE_SUCCESS,\r\n payload: toPlanProfile(plan),\r\n })\r\n } else {\r\n dispatch({\r\n type: types.GET_PLAN_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_PLAN_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const getFilters = () => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.GET_PLAN_FILTERS_START,\r\n })\r\n apiService.plan\r\n .getFilters()\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const filters = response.data\r\n\r\n dispatch({\r\n type: types.GET_PLAN_FILTERS_SUCCESS,\r\n payload: toFilters(filters),\r\n })\r\n } else {\r\n dispatch({\r\n type: types.GET_PLAN_FILTERS_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_PLAN_FILTERS_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const getPlanFabrics = (fabrics) => {\r\n return (dispatch, getState) => {\r\n fabrics.forEach((fabric, index) => {\r\n if (index === 0)\r\n dispatch({\r\n type: types.GET_PLAN_FABRICS_START,\r\n })\r\n\r\n apiService.plan\r\n .getFabricsById(fabric.id)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const fabric = response.data\r\n\r\n dispatch({\r\n type: types.GET_PLAN_FABRICS_SUCCESS,\r\n payload: getState()\r\n .plan.planFabrics.filter(\r\n (q) => q.id != fabric.id\r\n )\r\n .concat(toFabric(fabric)),\r\n })\r\n } else {\r\n dispatch({\r\n type: types.GET_PLAN_FABRICS_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(error)\r\n let errorMessage = error\r\n if (error?.response?.data)\r\n errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_PLAN_FABRICS_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const toggleLike = (planId) => {\r\n return (dispatch, getState) => {\r\n const plans = getState().plan.plans\r\n\r\n const newPlans = plans.map((plan) => {\r\n if (plan.id === planId) {\r\n plan.isLiked = !plan.isLiked\r\n if (plan.isLiked) plan.likesCount++\r\n else plan.likesCount--\r\n }\r\n\r\n return plan\r\n })\r\n\r\n dispatch({\r\n type: types.GET_PLANS_SUCCESS,\r\n payload: newPlans,\r\n })\r\n\r\n apiService.plan\r\n .toggleLike(planId)\r\n .then(() => {\r\n toast.success('بازخورد شما با موفقیت ثبت شد')\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_PLAN_PROFILE_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const toggleFavourite = (planId) => {\r\n return (dispatch, getState) => {\r\n const plans = getState().plan.plans\r\n\r\n const newPlans = plans.map((plan) => {\r\n if (plan.id === planId) plan.isFavourited = !plan.isFavourited\r\n\r\n return plan\r\n })\r\n\r\n dispatch({\r\n type: types.GET_PLANS_SUCCESS,\r\n payload: newPlans,\r\n })\r\n\r\n apiService.plan\r\n .toggleFavourite(planId)\r\n .then(() => {\r\n toast.success('بازخورد شما با موفقیت ثبت شد')\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_PLAN_PROFILE_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const togglePublic = (planId, newValue) => {\r\n return (dispatch, getState) => {\r\n const plans = getState().plan.plans\r\n\r\n const newPlans = plans.map((plan) => {\r\n if (plan.id === planId) plan.isPublic = !plan.isPublic\r\n\r\n return plan\r\n })\r\n\r\n dispatch({\r\n type: types.GET_PLANS_SUCCESS,\r\n payload: newPlans,\r\n })\r\n\r\n apiService.plan\r\n .togglePublic(planId, newValue)\r\n .then(() => {\r\n toast.success('تغییر درخواستی شما با موفقیت ثبت شد')\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_PLAN_PROFILE_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const updatePlan = (plan) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.UPDATE_PLAN,\r\n payload: plan,\r\n })\r\n }\r\n}\r\n\r\nexport const addComment = (planId, comment) => {\r\n return (dispatch) => {\r\n apiService.plan\r\n .addComment(planId, comment)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.ADD_COMMENT_START,\r\n })\r\n toast.success('نظر شما با موفقیت ثبت شد')\r\n dispatch(getPlan(planId))\r\n } else {\r\n dispatch({\r\n type: types.ADD_COMMENT_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.ADD_COMMENT_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n","export const GET_PLANS_START = 'GET_PLANS_START'\r\nexport const GET_PLANS_SUCCESS = 'GET_PLANS_SUCCESS'\r\nexport const GET_PLANS_FAIL = 'GET_PLANS_FAIL'\r\nexport const RESET_PLANS = 'RESET_PLANS'\r\n\r\nexport const GET_PLAN_START = 'GET_PLAN_START'\r\nexport const GET_PLAN_SUCCESS = 'GET_PLAN_SUCCESS'\r\nexport const GET_PLAN_FAIL = 'GET_PLAN_FAIL'\r\n\r\nexport const GET_PLAN_COMMENTS_START = 'GET_PLAN_COMMENTS_START'\r\nexport const GET_PLAN_COMMENTS_SUCCESS = 'GET_PLAN_COMMENTS_SUCCESS'\r\nexport const GET_PLAN_COMMENTS_FAIL = 'GET_PLAN_COMMENTS_FAIL'\r\n\r\nexport const GET_PLAN_FABRICS_START = 'GET_PLAN_FABRICS_START'\r\nexport const GET_PLAN_FABRICS_SUCCESS = 'GET_PLAN_FABRICS_SUCCESS'\r\nexport const GET_PLAN_FABRICS_FAIL = 'GET_PLAN_FABRICS_FAIL'\r\n\r\nexport const GET_PLAN_PROFILE_START = 'GET_PLAN_PROFILE_START'\r\nexport const GET_PLAN_PROFILE_SUCCESS = 'GET_PLAN_PROFILE_SUCCESS'\r\nexport const GET_PLAN_PROFILE_FAIL = 'GET_PLAN_PROFILE_FAIL'\r\n\r\nexport const GET_PLAN_FILTERS_START = 'GET_PLAN_FILTERS_START'\r\nexport const GET_PLAN_FILTERS_SUCCESS = 'GET_PLAN_FILTERS_SUCCESS'\r\nexport const GET_PLAN_FILTERS_FAIL = 'GET_PLAN_FILTERS_FAIL'\r\n\r\nexport const UPDATE_PLAN = 'UPDATE_PLAN'\r\n\r\nexport const ADD_COMMENT_START = 'ADD_COMMENT_START'\r\nexport const ADD_COMMENT_SUCCESS = 'ADD_COMMENT_SUCCESS'\r\nexport const ADD_COMMENT_FAIL = 'ADD_COMMENT_FAIL'\r\n","import React, { useEffect, useState } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useHistory, useLocation } from 'react-router-dom'\r\n\r\nimport { FormGroup, Label, Input } from 'reactstrap'\r\n\r\nimport { getFilters } from '../../../redux/plan/actions'\r\n\r\nimport AccordionItem from '../../../components/Plans/Sidebar/AccordionItem'\r\nimport Icon from '../../../components/Icons/Icon'\r\n\r\nimport FilterIcon from '../../../assets/img/icons/FILTER.svg'\r\n\r\nimport './PlanFilters.css'\r\n\r\nconst PlanFilters = () => {\r\n const [currentFilters, setCurrentFilters] = useState([])\r\n\r\n const onFilterChanged = (filterTitle, item, value) => {\r\n const currentFilter = currentFilters.find(\r\n (q) => q.filterTitle == filterTitle\r\n )\r\n if (!currentFilter && value) {\r\n setCurrentFilters([\r\n ...currentFilters,\r\n { filterTitle, items: [item] },\r\n ])\r\n return\r\n }\r\n\r\n currentFilter.items = currentFilter.items.filter((q) => q !== item)\r\n if (value) currentFilter.items.push(item)\r\n setCurrentFilters([\r\n ...currentFilters.filter((q) => q.filterTitle !== filterTitle),\r\n currentFilter,\r\n ])\r\n }\r\n\r\n useEffect(() => {\r\n currentFilters.map((filter) =>\r\n addQueryString(filter.filterTitle, filter.items.join(','))\r\n )\r\n }, [currentFilters])\r\n\r\n const dispatch = useDispatch()\r\n const filters = useSelector((state) => state.plan.planFilters)\r\n useEffect(() => {\r\n dispatch(getFilters())\r\n }, [])\r\n\r\n const location = useLocation()\r\n const history = useHistory()\r\n\r\n useEffect(() => {\r\n const params = new URLSearchParams(location.search)\r\n const newFilters = []\r\n for (let param of params) {\r\n const key = param[0]\r\n const value = param[1]\r\n\r\n if (new RegExp('[0-9]+').test(key)) {\r\n newFilters.push({ filterTitle: key, items: value.split(',') })\r\n }\r\n }\r\n setCurrentFilters(newFilters)\r\n }, [filters])\r\n\r\n const addQueryString = (key, value) => {\r\n let urlParams = new URLSearchParams(location.search)\r\n if (!value) urlParams.delete(key)\r\n else urlParams.set(key, value)\r\n history.push({ pathname: '/', search: '?' + urlParams.toString() })\r\n }\r\n\r\n const isChecked = (filterTitle, value) => {\r\n return currentFilters\r\n .find((q) => q.filterTitle == filterTitle)\r\n ?.items.some((q) => q == value)\r\n }\r\n\r\n return (\r\n
\r\n

\r\n فیلترها\r\n

\r\n {filters.map((filter, filterIndex) => (\r\n q.filterTitle == filter.title)\r\n ?.items.map((q) => {q + ' '})\r\n .slice(0, 3)}\r\n >\r\n {filter.items.map((q) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n ))}\r\n
\r\n )\r\n}\r\n\r\nexport default PlanFilters\r\n","import React, { Suspense, lazy } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { Row, Button, Container, Col } from 'reactstrap'\r\nimport AccordionItem from '../../../components/Plans/Sidebar/AccordionItem'\r\nimport PlanFilters from './PlanFilters'\r\n\r\nimport CartIcon from '../../../assets/img/icons/SHOPPING.svg'\r\nimport FavouriteIcon from '../../../assets/img/icons/ADD TO FAV.svg'\r\nimport './PlanSidebar.css'\r\nimport { useSelector } from 'react-redux'\r\n\r\nconst UserProfile = lazy(() => import('../userProfile/UserProfile'))\r\n\r\nconst Loading = () => {\r\n return (\r\n \r\n در حال بارگذاری ...\r\n \r\n )\r\n}\r\n\r\nconst PlanSidebar = ({ isCustomProfile, ...props }) => {\r\n const cart = useSelector((state) => state.payment.cart)\r\n const profileLoading = useSelector((state) => state.user.profileLoading)\r\n const planProfileLoading = useSelector(\r\n (state) => state.user.planProfileLoading\r\n )\r\n\r\n return (\r\n \r\n {profileLoading || planProfileLoading ? (\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n }>\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n }>\r\n {!isCustomProfile && }\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default PlanSidebar\r\n","import React from 'react'\r\nimport { Col, Container, Row } from 'reactstrap'\r\n\r\nimport Navbar from '../pages/Navbar/index/Index'\r\nimport PlanSidebar from '../pages/Plans/sidebar/PlanSidebar'\r\n\r\nconst PlanLayout = ({ children, isCustomProfile }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport default PlanLayout\r\n","import React from \"react\";\r\nimport { Col, Container, Row } from \"reactstrap\";\r\n\r\nconst MainLayout = ({ children }) => (\r\n \r\n
{children}
\r\n
\r\n);\r\n\r\nexport default MainLayout;\r\n","import React from \"react\";\r\nimport { Col, Container, Row } from \"reactstrap\";\r\n\r\nconst MainLayout = ({ children }) => (\r\n {children}\r\n);\r\n\r\nexport default MainLayout;\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { Spinner } from 'reactstrap'\r\n\r\nimport './Loading.css'\r\n\r\nconst Loading = ({ isImage, size }) => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Loading\r\n","import React from 'react'\r\nimport { Card, CardImg, CardHeader, CardFooter, CustomInput } from 'reactstrap'\r\n\r\nimport CommentWhiteIcon from '../../../assets/img/icons/COMMENT_WHITE.svg'\r\nimport LikeIcon from '../../../assets/img/icons/LIKE.svg'\r\nimport LikeWhiteIcon from '../../../assets/img/icons/LIKE_WHITE.svg'\r\nimport ShareWhiteIcon from '../../../assets/img/icons/SHARE_WHITE.svg'\r\nimport FavouriteIcon from '../../../assets/img/icons/ADD TO FAV.svg'\r\nimport FavouriteWhiteIcon from '../../../assets/img/icons/ADD TO FAV_WHITE.svg'\r\nimport Loading from '../../../components/Loading/Loading'\r\n\r\nimport './PlanPreview.css'\r\nimport Icon from '../../Icons/Icon'\r\nimport classNames from 'classnames'\r\nimport { useHistory } from 'react-router-dom'\r\n\r\nconst PlanPreview = ({\r\n id,\r\n fullName,\r\n imageUrl,\r\n isLiked,\r\n likesCount,\r\n isFavourited,\r\n showToggle,\r\n isPublic,\r\n fullSize,\r\n onLiked,\r\n onFavourited,\r\n onTogglePublic,\r\n loading,\r\n onShare,\r\n ...props\r\n}) => {\r\n const history = useHistory()\r\n\r\n const onImageNotLoaded = (e) => {\r\n const imgElement = e.target\r\n\r\n imgElement.classList.add('plan-preview__img--empty')\r\n imgElement.src = '/images/empty.png'\r\n }\r\n\r\n return (\r\n \r\n {!fullSize && (\r\n \r\n {fullName}\r\n \r\n )}\r\n {loading ? (\r\n \r\n ) : (\r\n !fullSize && history.push('/plan/' + id)}\r\n loading=\"lazy\"\r\n onError={onImageNotLoaded}\r\n />\r\n )}\r\n {showToggle && (\r\n
\r\n onTogglePublic(id, !isPublic)}\r\n />\r\n
\r\n )}\r\n \r\n onLiked(id)}\r\n />\r\n {likesCount > 0 && (\r\n \r\n {likesCount}\r\n \r\n )}\r\n history.push('/plan/' + id)}\r\n />\r\n onShare(id)}\r\n />\r\n onFavourited(id)}\r\n />\r\n \r\n \r\n )\r\n}\r\n\r\nexport default PlanPreview\r\n","import React from 'react'\r\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap'\r\nimport {\r\n WhatsappShareButton,\r\n WhatsappIcon,\r\n TelegramShareButton,\r\n TelegramIcon,\r\n TwitterShareButton,\r\n TwitterIcon,\r\n EmailShareButton,\r\n EmailIcon,\r\n} from 'react-share'\r\n\r\nimport { baseShareURL } from '../../../apiService/apiService'\r\n\r\nimport './PlanShareModal.css'\r\n\r\nconst PlanShareModal = ({ planId, visible, toggle }) => {\r\n const getUrl = () => baseShareURL + '/#/plan/' + planId\r\n const getTitle = () => 'مکبر پلاس'\r\n\r\n return (\r\n \r\n اشتراک‌گذاری طراحی\r\n \r\n

طرح خود را در شبکه‌های اجتماعی به اشتراک بگذارید

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default PlanShareModal\r\n","import React, { useEffect, useState } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useHistory, useLocation } from 'react-router-dom'\r\n\r\nimport {\r\n Container,\r\n Row,\r\n Col,\r\n Input,\r\n Button,\r\n Dropdown,\r\n DropdownToggle,\r\n DropdownMenu,\r\n DropdownItem,\r\n InputGroup,\r\n InputGroupAddon,\r\n Form,\r\n} from 'reactstrap'\r\nimport CardColumns from 'reactstrap/lib/CardColumns'\r\nimport InfiniteScroll from 'react-infinite-scroll-component'\r\nimport classNames from 'classnames'\r\nimport { debounce, isEmpty } from 'lodash'\r\n\r\nimport {\r\n getPlans,\r\n resetPlans,\r\n toggleFavourite,\r\n toggleLike,\r\n togglePublic,\r\n} from '../../redux/plan/actions'\r\n\r\nimport Icon from '../../components/Icons/Icon'\r\nimport PlanPreview from '../../components/Plans/PlanPreview/PlanPreview'\r\nimport PlanShareModal from '../../components/Plans/PlanShareModal/PlanShareModal'\r\nimport Loading from '../../components/Loading/Loading'\r\n\r\nimport SortIcon from '../../assets/img/icons/SORT.svg'\r\nimport SearchIcon from '../../assets/img/icons/SEARCH.svg'\r\n\r\nimport './index.css'\r\n\r\nconst Index = (props) => {\r\n const dispatch = useDispatch()\r\n const [sort, setSort] = useState(null)\r\n const [type, setType] = useState(null)\r\n const [filter, setFilter] = useState(null)\r\n\r\n const plans = useSelector((state) => state.plan.plans)\r\n const loadingPlans = useSelector((state) => state.plan.loadingPlans)\r\n\r\n const [dropdownOpen, setDropdownOpen] = useState(false)\r\n const location = useLocation()\r\n const history = useHistory()\r\n const [search, setSearch] = useState('')\r\n\r\n useEffect(() => {\r\n if (type) addQueryString('type', type)\r\n }, [type])\r\n\r\n const [pageNumber, setPageNumber] = useState(1)\r\n\r\n const fetchData = () => {\r\n setPageNumber((prevPageNumber) => prevPageNumber + 1)\r\n dispatch(\r\n getPlans({\r\n type: type,\r\n sort: sort,\r\n filter: filter,\r\n search: search,\r\n pageNumber: pageNumber + 1,\r\n })\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n let newSort = sort\r\n let newType = type\r\n let newFilter = {}\r\n\r\n const params = new URLSearchParams(location.search)\r\n for (let param of params) {\r\n const [key, value] = param\r\n\r\n if (key === 'sort') newSort = value\r\n else if (key === 'type') newType = value\r\n else if (new RegExp('[0-9]+').test(key)) {\r\n newFilter = { ...newFilter, [key]: value }\r\n }\r\n }\r\n\r\n dispatch(\r\n getPlans({\r\n type: newType,\r\n sort: newSort,\r\n filter: newFilter,\r\n pageNumber: 1,\r\n search: search,\r\n replace: true,\r\n })\r\n )\r\n setPageNumber(1)\r\n setSort(newSort)\r\n setType(newType)\r\n setFilter(newFilter)\r\n }, [location])\r\n\r\n const resetPaging = () => {\r\n setPageNumber(1)\r\n dispatch(resetPlans())\r\n }\r\n\r\n const toggle = () => setDropdownOpen((prevState) => !prevState)\r\n\r\n const addQueryString = (key, value) => {\r\n resetPaging()\r\n let urlParams = new URLSearchParams(location.search)\r\n urlParams.set(key, value)\r\n history.push({ pathname: '/', search: '?' + urlParams.toString() })\r\n }\r\n\r\n const onLikedPlan = (planId) => {\r\n dispatch(toggleLike(planId))\r\n }\r\n const onFavouritedPlan = (planId) => {\r\n dispatch(toggleFavourite(planId))\r\n }\r\n const onTogglePublic = (planId, newValue) => {\r\n dispatch(togglePublic(planId, newValue))\r\n }\r\n\r\n const [isShareVisible, setIsShareVisible] = useState(false)\r\n const toggleShare = () => setIsShareVisible(!isShareVisible)\r\n const [currentPlanId, setCurrentPlanId] = useState(null)\r\n\r\n const onShare = (planId) => {\r\n setCurrentPlanId(planId)\r\n toggleShare()\r\n }\r\n\r\n const onSearchChanged = debounce((searchValue) => {\r\n onSearch(searchValue)\r\n }, 500)\r\n\r\n const onSearch = (searchValue) => {\r\n setSearch(searchValue)\r\n\r\n dispatch(\r\n getPlans({\r\n type: type,\r\n sort: sort,\r\n filter: filter,\r\n search: searchValue,\r\n pageNumber: 1,\r\n replace: true,\r\n })\r\n )\r\n }\r\n\r\n return (\r\n \r\n
\r\n {\r\n e.preventDefault()\r\n onSearch()\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n onSearchChanged(e.target.value)}\r\n />\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n مرتب سازی بر اساس\r\n addQueryString('sort', 'popular')}\r\n >\r\n محبوب‌ترین ها\r\n \r\n addQueryString('sort', 'most-seen')}\r\n >\r\n پربازدیدترین ها\r\n \r\n addQueryString('sort', 'newest')}\r\n >\r\n جدید‌ترین ها\r\n \r\n
\r\n
\r\n نمایش\r\n \r\n \r\n {type === 'my' ? 'طرح‌های من' : 'همه'}\r\n \r\n \r\n setType('all')}>\r\n همه\r\n \r\n setType('my')}>\r\n طرح‌های من\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n endMessage={\r\n loadingPlans ? (\r\n \r\n ) : (\r\n !isEmpty(plans) &&\r\n pageNumber !== 1 && (\r\n

\r\n تمامی طرح‌ها دیده شد!\r\n

\r\n )\r\n )\r\n }\r\n scrollableTarget={document.querySelector(\r\n '.plans__container'\r\n )}\r\n height={\r\n document.querySelector('.plans__container')\r\n ?.clientHeight ?? 500\r\n }\r\n >\r\n \r\n {isEmpty(plans) && !loadingPlans ? (\r\n

هیچ طرحی پیدا نشد

\r\n ) : (\r\n plans.map((plan) => (\r\n \r\n ))\r\n )}\r\n
\r\n \r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Index\r\n","export const ADD_TO_CART = 'ADD_TO_CART'\r\nexport const SET_CART = 'SET_CART'\r\nexport const RESET_CART = 'RESET_CART'\r\n\r\nexport const GET_ADDRESSES_START = 'GET_ADDRESSES_START'\r\nexport const GET_ADDRESSES_SUCCESS = 'GET_ADDRESSES_SUCCESS'\r\nexport const GET_ADDRESSES_FAIL = 'GET_ADDRESSES_FAIL'\r\n\r\nexport const SUBMIT_ORDER_START = 'SUBMIT_ORDER_START'\r\nexport const SUBMIT_ORDER_SUCCESS = 'SUBMIT_ORDER_SUCCESS'\r\nexport const SUBMIT_ORDER_FAIL = 'SUBMIT_ORDER_FAIL'\r\n","import * as types from './constants'\r\nimport apiService from '../../apiService/apiService'\r\n\r\nexport const addToCart = (product) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.ADD_TO_CART,\r\n payload: product,\r\n })\r\n }\r\n}\r\n\r\nexport const updateCartMeterage = (productId, newMeterage) => {\r\n return (dispatch, getState) => {\r\n const cartItems = getState().payment.cart\r\n\r\n dispatch({\r\n type: types.SET_CART,\r\n payload: cartItems.map((q) => {\r\n if (q.id === productId) q.meterage = newMeterage\r\n return q\r\n }),\r\n })\r\n }\r\n}\r\n\r\nexport const removeFromCart = (productId) => {\r\n return (dispatch, getState) => {\r\n const cartItems = getState().payment.cart\r\n\r\n dispatch({\r\n type: types.SET_CART,\r\n payload: cartItems.filter((q) => q.id !== productId),\r\n })\r\n }\r\n}\r\n\r\nexport const resetCart = () => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.RESET_CART,\r\n })\r\n }\r\n}\r\n\r\nexport const getAddresses = (profileId) => {\r\n return (dispatch) => {\r\n apiService.profile\r\n .getAddresses(profileId)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const addresses = response.data\r\n dispatch({\r\n type: types.GET_ADDRESSES_START,\r\n payload: addresses,\r\n })\r\n } else {\r\n dispatch({\r\n type: types.GET_ADDRESSES_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_ADDRESSES_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const buyOrder = (history) => {\r\n return (dispatch, getState) => {\r\n const cartItems = getState().payment.cart\r\n dispatch({\r\n type: types.SUBMIT_ORDER_START,\r\n })\r\n\r\n apiService.payment\r\n .submitOrder(cartItems)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.SUBMIT_ORDER_SUCCESS,\r\n payload: response.data,\r\n })\r\n history.push({\r\n pathname: '/payment/result',\r\n search: `?id=${response.data}`,\r\n })\r\n } else {\r\n dispatch({\r\n type: types.SUBMIT_ORDER_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n history.push({\r\n pathname: '/payment/result',\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.SUBMIT_ORDER_FAIL,\r\n error: errorMessage,\r\n })\r\n history.push({\r\n pathname: '/payment/result',\r\n })\r\n })\r\n }\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport './Price.css'\r\n\r\nconst Price = ({ price, size, color, discounted }) => {\r\n const getPrice = () => {\r\n return price?.toLocaleString('fa') ?? 0\r\n }\r\n\r\n return (\r\n \r\n {getPrice()}\r\n تومان\r\n \r\n )\r\n}\r\n\r\nexport default Price\r\n","import React from 'react'\r\n\r\nimport './Comment.css';\r\n\r\nimport moment from \"moment-jalaali\";\r\nmoment.loadPersian();\r\n\r\nconst Comment = ({ name, userImageUrl, time, text }) => {\r\n return (\r\n
\r\n \r\n
\r\n

{name}

\r\n {moment(time).fromNow()}\r\n
\r\n

{text}

\r\n
\r\n )\r\n}\r\n\r\nexport default Comment\r\n","import { isEmpty } from 'lodash'\r\nimport React, { useState } from 'react'\r\nimport { Form, InputGroup, InputGroupAddon, Input, Button } from 'reactstrap'\r\nimport Loading from '../../Loading/Loading'\r\nimport Comment from './Comment'\r\n\r\nimport './PlanComments.css'\r\n\r\nconst PlanComments = ({ comments, loading, onAddComment }) => {\r\n const [comment, setComment] = useState('')\r\n\r\n return (\r\n
\r\n {\r\n e.preventDefault()\r\n onAddComment(comment)\r\n }}\r\n >\r\n \r\n \r\n \r\n ارسال\r\n \r\n \r\n setComment(e.target.value)}\r\n disabled={loading}\r\n />\r\n \r\n \r\n {loading ? (\r\n \r\n ) : (\r\n !isEmpty(comments) &&\r\n comments.map((comment, index) => (\r\n \r\n ))\r\n )}\r\n
\r\n )\r\n}\r\n\r\nexport default PlanComments\r\n","import React, { useEffect, useState } from 'react'\r\nimport { useHistory } from 'react-router'\r\nimport { useParams } from 'react-router-dom'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\n\r\nimport {\r\n Container,\r\n Row,\r\n Col,\r\n Input,\r\n Label,\r\n Button,\r\n Form,\r\n InputGroup,\r\n InputGroupAddon,\r\n} from 'reactstrap'\r\nimport { isEmpty } from 'lodash'\r\n\r\nimport { addToCart } from '../../../redux/payment/actions'\r\nimport { addComment, getPlan } from '../../../redux/plan/actions'\r\nimport {\r\n toggleFavourite,\r\n toggleLike,\r\n togglePublic,\r\n updatePlan,\r\n} from '../../../redux/plan/actions'\r\n\r\nimport Price from '../../../components/Payment/Price/Price'\r\nimport CartIcon from '../../../assets/img/icons/SHOPPING.svg'\r\nimport SearchIcon from '../../../assets/img/icons/SEARCH.svg'\r\nimport Icon from '../../../components/Icons/Icon'\r\nimport PlanPreview from '../../../components/Plans/PlanPreview/PlanPreview'\r\nimport PlanComments from '../../../components/Plans/PlanComments/PlanComments'\r\nimport Loading from '../../../components/Loading/Loading'\r\n\r\nimport './index.css'\r\nimport PlanShareModal from '../../../components/Plans/PlanShareModal/PlanShareModal'\r\n\r\nconst Index = (props) => {\r\n const plan = useSelector((state) => state.plan.plan)\r\n const fabrics = useSelector((state) => state.plan.planFabrics)\r\n const comments = useSelector((state) => state.plan.planComments)\r\n\r\n const loadingFabrics = useSelector((state) => state.plan.loadingFabrics)\r\n const loadingPlan = useSelector((state) => state.plan.loadingPlan)\r\n\r\n const dispatch = useDispatch()\r\n const history = useHistory()\r\n const { id: planId } = useParams()\r\n\r\n useEffect(() => {\r\n if (planId) dispatch(getPlan(planId))\r\n }, [planId])\r\n\r\n const onAddNewComment = (comment) => dispatch(addComment(plan.id, comment))\r\n const [search, setSearch] = useState('')\r\n\r\n const onAddToCart = (fabric) => {\r\n dispatch(addToCart(fabric))\r\n history.push('/cart')\r\n }\r\n\r\n const onLikedPlan = (planId) => {\r\n dispatch(toggleLike(planId))\r\n dispatch(updatePlan({ ...plan, isLiked: !plan.isLiked }))\r\n }\r\n const onFavouritedPlan = (planId) => {\r\n dispatch(toggleFavourite(planId))\r\n dispatch(updatePlan({ ...plan, isFavourited: !plan.isFavourited }))\r\n }\r\n const onTogglePublic = (planId, newValue) => {\r\n dispatch(togglePublic(planId, newValue))\r\n dispatch(updatePlan({ ...plan, isPublic: !plan.isPublic }))\r\n }\r\n\r\n const [isShareVisible, setIsShareVisible] = useState(false)\r\n const toggleShare = () => setIsShareVisible(!isShareVisible)\r\n const [currentPlanId, setCurrentPlanId] = useState(null)\r\n\r\n const onShare = (planId) => {\r\n setCurrentPlanId(planId)\r\n toggleShare()\r\n }\r\n\r\n const onSearch = () => {\r\n alert(search)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n e.preventDefault()\r\n onSearch()\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n setSearch(e.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n history.goBack()}\r\n >\r\n بازگشت\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {loadingFabrics ? (\r\n \r\n ) : isEmpty(fabrics) ? (\r\n

\r\n پارچه‌ای در طرح پیدا نشد\r\n

\r\n ) : (\r\n fabrics.filter(x=>x.name).map((fabric) => (\r\n
\r\n
\r\n

\r\n {fabric.name}\r\n

\r\n {fabric?.images && }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n خرید پارچه\r\n \r\n
\r\n ))\r\n )}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Index\r\n","import React, { Component } from 'react'\r\nimport {\r\n Button,\r\n Card,\r\n CardHeader,\r\n CardTitle,\r\n CardBody,\r\n Spinner,\r\n} from 'reactstrap'\r\nimport { connect } from 'react-redux'\r\nimport { AvForm, AvField } from 'availity-reactstrap-validation'\r\nimport { registerUser, validateUser } from '../redux/user/actions'\r\nimport logo from '../assets/img/logo-white.svg'\r\nimport { NavLink, withRouter } from 'react-router-dom'\r\nimport { withTranslate } from 'react-redux-multilingual'\r\nimport informationIcon from '../assets/img/navbarIcons/information.svg'\r\n\r\nclass SignUp extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n image: '',\r\n validationKey: '',\r\n }\r\n }\r\n\r\n handleSubmit = (event, errors, values) => {\r\n event.preventDefault()\r\n event.persist()\r\n this.setState({ errors, values })\r\n\r\n if (errors.length == 0)\r\n this.props.registerUser(\r\n this.state.password,\r\n this.state.firstName,\r\n this.state.lastName,\r\n this.state.mobile,\r\n this.props.history\r\n )\r\n }\r\n\r\n handleSubmitStepTwo = (event, errors, values) => {\r\n event.preventDefault()\r\n event.persist()\r\n this.setState({ errors, values })\r\n\r\n if (errors.length == 0)\r\n this.props.validateUser(\r\n this.state.mobile,\r\n this.state.validationKey,\r\n this.props.history\r\n )\r\n }\r\n\r\n handleInputChange = (e) => {\r\n const name = e.target.name\r\n this.setState({ [name]: e.target.value })\r\n }\r\n\r\n getErrors = () => {\r\n if (!this.props.error) return ''\r\n\r\n if (typeof this.props.error == 'object') {\r\n let messages = []\r\n for (const key in this.props.error) {\r\n messages.push(

{this.props.error[key]}

)\r\n }\r\n return messages\r\n }\r\n return this.props.error.toString()\r\n }\r\n\r\n render = () => {\r\n return (\r\n \r\n
\r\n \"\"\r\n
\r\n\r\n \r\n {this.props.error && (\r\n \r\n \r\n {this.getErrors()}\r\n \r\n \r\n )}\r\n \r\n {!this.props.isRegistrationDone ? (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n
\r\n \r\n قبلا ثبت نام کرده اید؟\r\n \r\n {!this.props.waiting ? (\r\n \r\n ثبت نام\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n ) : (\r\n
\r\n \r\n \r\n\r\n
\r\n {!this.props.waiting ? (\r\n \r\n تایید تلفن همراه\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n \r\n قبلا ثبت نام کرده اید؟\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n \r\n {this.props.translate('help')}\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n isRegistrationDone: store.user.isRegistrationDone,\r\n waiting: store.user.waiting,\r\n error: store.user.error,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n registerUser: (password, firstName, lastName, mobile, history) =>\r\n dispatch(\r\n registerUser(password, firstName, lastName, mobile, history)\r\n ),\r\n validateUser: (mobile, validationKey, history) =>\r\n dispatch(validateUser(mobile, validationKey, history)),\r\n }\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withRouter(withTranslate(SignUp)))\r\n","import React, { Component } from 'react'\r\nimport {\r\n Button,\r\n Card,\r\n CardHeader,\r\n CardTitle,\r\n CardBody,\r\n Spinner,\r\n} from 'reactstrap'\r\nimport { connect } from 'react-redux'\r\nimport { NavLink } from 'react-router-dom'\r\nimport { AvForm, AvField } from 'availity-reactstrap-validation'\r\nimport { login, setError, validateUser } from '../redux/auth/actions'\r\nimport logo from '../assets/img/logo-white.svg'\r\nimport { withTranslate } from 'react-redux-multilingual'\r\nimport informationIcon from '../assets/img/navbarIcons/information.svg'\r\n\r\nclass SignIn extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n mobile: '',\r\n password: '',\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.duplicateMessage) {\r\n this.props.setError(this.props.duplicateMessage)\r\n } else {\r\n this.props.setError(null)\r\n }\r\n }\r\n handleSubmit = (event, errors, values) => {\r\n event.preventDefault()\r\n event.persist()\r\n this.setState({ errors, values })\r\n\r\n if (errors.length == 0)\r\n this.props.login(\r\n this.state.mobile,\r\n this.state.password,\r\n this.props.history\r\n )\r\n }\r\n\r\n handleSubmitStepTwo = (event, errors, values) => {\r\n event.preventDefault()\r\n event.persist()\r\n this.setState({ errors, values })\r\n\r\n if (errors.length == 0)\r\n this.props.validateUser(\r\n this.state.mobile,\r\n this.state.validationKey,\r\n this.props.history\r\n )\r\n }\r\n\r\n handleInputChange = (e) => {\r\n const name = e.target.name\r\n this.setState({ [name]: e.target.value })\r\n }\r\n\r\n getErrors = () => {\r\n if (!this.props.error) return ''\r\n\r\n if (typeof this.props.error == 'object') {\r\n let messages = []\r\n for (const key in this.props.error) {\r\n messages.push(

{this.props.error[key]}

)\r\n }\r\n return messages\r\n }\r\n return this.props.error.toString()\r\n }\r\n\r\n render = () => {\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n {this.props.error && (\r\n \r\n \r\n {this.getErrors()}\r\n \r\n \r\n )}\r\n \r\n {!this.props.isUserValidated ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {this.props.translate(\r\n 'forgotYourPassword'\r\n )}\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {this.props.translate(\r\n 'notRegisteredYet'\r\n )}\r\n \r\n {!this.props.waiting ? (\r\n \r\n {this.props.translate('login')}\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n ) : (\r\n
\r\n \r\n \r\n\r\n
\r\n {!this.props.waiting ? (\r\n \r\n تایید تلفن همراه\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n \r\n \r\n {this.props.translate('help')}\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n isUserValidated: store.auth.isUserValidated,\r\n duplicateMessage: store.user.duplicateMessage,\r\n waiting: store.auth.waiting,\r\n error: store.auth.error,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n login: (mobile, password, history) =>\r\n dispatch(login(mobile, password, history)),\r\n validateUser: (mobile, validationKey, history) =>\r\n dispatch(validateUser(mobile, validationKey, history)),\r\n setError: (message) => dispatch(setError(message)),\r\n }\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withTranslate(SignIn))\r\n","import React, { Component } from 'react'\r\nimport {\r\n Button,\r\n Card,\r\n CardHeader,\r\n CardTitle,\r\n CardBody,\r\n Spinner,\r\n} from 'reactstrap'\r\nimport { connect } from 'react-redux'\r\nimport { AvForm, AvField } from 'availity-reactstrap-validation'\r\nimport { registerUser } from '../redux/user/actions'\r\nimport logo from '../assets/img/logo-white.svg'\r\nimport { NavLink } from 'react-router-dom'\r\nimport {\r\n sendForgotPasswordToken,\r\n forgotPasswordFinalStep,\r\n} from '../redux/auth/actions'\r\nimport { withTranslate } from 'react-redux-multilingual'\r\nimport informationIcon from '../assets/img/navbarIcons/information.svg'\r\n\r\nclass ForgotPassword extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n image: '',\r\n mobile: '',\r\n token: '',\r\n password: '',\r\n }\r\n }\r\n\r\n handleSubmit = (event, errors, values) => {\r\n event.preventDefault()\r\n event.persist()\r\n this.setState({ errors, values })\r\n\r\n if (errors.length == 0)\r\n this.props.sendForgotPasswordToken(this.state.mobile)\r\n }\r\n\r\n handleSecondStepSubmit = (event, errors, values) => {\r\n event.preventDefault()\r\n event.persist()\r\n this.setState({ errors, values })\r\n\r\n if (errors.length == 0)\r\n this.props.forgotPasswordFinalStep(\r\n this.state.mobile,\r\n this.state.token,\r\n this.state.password\r\n )\r\n }\r\n\r\n handleInputChange = (e) => {\r\n const name = e.target.name\r\n this.setState({ [name]: e.target.value })\r\n }\r\n\r\n getErrors = () => {\r\n if (!this.props.error) return ''\r\n\r\n if (typeof this.props.error == 'object') {\r\n let messages = []\r\n for (const key in this.props.error) {\r\n messages.push(

{this.props.error[key]}

)\r\n }\r\n return messages\r\n }\r\n return this.props.error.toString()\r\n }\r\n\r\n render = () => {\r\n return (\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n {this.props.error && (\r\n \r\n \r\n {this.getErrors()}\r\n \r\n \r\n )}\r\n \r\n
\r\n {!this.props.isForgotPasswordTokenSent ? (\r\n \r\n \r\n\r\n
\r\n \r\n {this.props.translate('notRegisteredYet')}\r\n \r\n {!this.props.waiting ? (\r\n \r\n ارسال کد\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n\r\n
\r\n \r\n {this.props.translate('notRegisteredYet')}\r\n \r\n {!this.props.waiting ? (\r\n \r\n تغییر رمز عبور\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.props.translate('help')}\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n waiting: store.auth.waiting,\r\n error: store.auth.error,\r\n isForgotPasswordTokenSent: store.auth.isForgotPasswordTokenSent,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n sendForgotPasswordToken: (mobile) =>\r\n dispatch(sendForgotPasswordToken(mobile)),\r\n forgotPasswordFinalStep: (mobile, token, password) =>\r\n dispatch(forgotPasswordFinalStep(mobile, token, password)),\r\n }\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withTranslate(ForgotPassword))\r\n","import React, { Component } from \"react\";\r\n\r\nconst HIT_TEST_OPTIONS = {\r\n segments: true,\r\n stroke: true,\r\n fill: true,\r\n tolerance: 5\r\n};\r\n\r\nexport default function withSelectTool(WrappedComponent) {\r\n return class SelectTool extends Component {\r\n constructor(props) {\r\n super(props);\r\n const d = props.initialData;\r\n const id = d && d[0] && d[0].id;\r\n this.state = {\r\n activeLayer: id,\r\n selectedItem: id,\r\n firstSelectedItem: {},\r\n selectedItems: []\r\n };\r\n this._changed = false;\r\n this._item = null;\r\n this._segment = null;\r\n this._point = null;\r\n this._tool = null;\r\n this._firstSelectedItem = null;\r\n this._secondSelectedItem = null;\r\n }\r\n\r\n selectItems = ({ id }) => {\r\n if (!this.state.selectedItems.includes(id)) {\r\n const items = this.state.selectedItems ? this.state.selectedItems : [];\r\n items.push(id);\r\n this.setState({ selectedItems: items });\r\n\r\n if (items.length == 1) {\r\n this._firstSelectedItem = this._item;\r\n } else if (items.length == 2) {\r\n this._secondSelectedItem = this._item;\r\n }\r\n }\r\n };\r\n\r\n deselectItems = () => {\r\n this._firstSelectedItem = null;\r\n this.setState({ selectedItems: [] });\r\n };\r\n\r\n selectItem = ({ id, type }) => {\r\n if (id === this.state.selectedItem) {\r\n return;\r\n }\r\n switch (type) {\r\n case \"Layer\":\r\n this.setState({ activeLayer: id, selectedItem: id });\r\n break;\r\n case \"Path\":\r\n case \"Circle\":\r\n case \"Rectangle\":\r\n this.setState({ selectedItem: id });\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n deselectItem = () => {\r\n this.setState({ selectedItem: null });\r\n };\r\n\r\n keyDown = (e) => {\r\n if (this._item) {\r\n const {\r\n key,\r\n modifiers: { shift }\r\n } = e;\r\n switch (key) {\r\n case \"delete\":\r\n this.props.removeItem(this._item);\r\n this._changed = false;\r\n this._item = null;\r\n this._point = null;\r\n break;\r\n case \"up\":\r\n this._item.translate(0, shift ? -10 : -1);\r\n this._changed = true;\r\n break;\r\n case \"down\":\r\n this._item.translate(0, shift ? 10 : 1);\r\n this._changed = true;\r\n break;\r\n case \"left\":\r\n this._item.translate(shift ? -10 : -1, 0);\r\n this._changed = true;\r\n break;\r\n case \"right\":\r\n this._item.translate(shift ? 10 : 1, 0);\r\n this._changed = true;\r\n break;\r\n case \"ل\":\r\n case \"g\":\r\n this.props.groupItems(this.state.selectedItems);\r\n this.deselectItems();\r\n this.deselectItem();\r\n case \"ث\":\r\n case \"e\":\r\n var twoPath = [],\r\n selectedEl = {};\r\n const paper = this._tool._scope;\r\n this.state.selectedItems.forEach((item, index) => {\r\n this.props.data.layers[0].children.forEach((element) => {\r\n if (element.id === item) {\r\n if (index === 0) {\r\n selectedEl = element;\r\n }\r\n twoPath.push(new paper.Path(element.pathData));\r\n }\r\n });\r\n });\r\n\r\n // var newPath = twoPath[0].unite(twoPath[1])\r\n // var newPath = twoPath[0].intersect(twoPath[1])\r\n // var newPath = twoPath[0].subtract(twoPath[1])\r\n var newPath = twoPath[0].exclude(twoPath[1]);\r\n // var newPath = twoPath[0].divide(twoPath[1])\r\n this.props.updateItem(this._firstSelectedItem, {\r\n pathData: newPath.getPathData(),\r\n selected: true,\r\n relatedCurvePoints: newPath.getSegments().map((seg) => {\r\n return { x: seg.point.x, y: seg.point.y };\r\n })\r\n });\r\n\r\n this.props.removeItem(this._secondSelectedItem);\r\n default:\r\n break;\r\n }\r\n }\r\n };\r\n\r\n keyUp = (e) => {\r\n const { key } = e;\r\n if (this._item && this._changed && key !== \"shift\") {\r\n if (this._updateTimeout) {\r\n clearTimeout(this._updateTimeout);\r\n }\r\n this._updateTimeout = setTimeout(() => {\r\n this.props.updateItem(this._item, {\r\n pathData: this._item.getPathData(),\r\n selected: true,\r\n relatedCurvePoints: this._item.getSegments().map((seg) => {\r\n return { x: seg.point.x, y: seg.point.y };\r\n })\r\n });\r\n this._changed = false;\r\n this._updateTimeout = null;\r\n }, 350);\r\n }\r\n };\r\n\r\n mouseDown = (e) => {\r\n this._tool = e.tool;\r\n\r\n e.tool.view._project.layers[2]._children.forEach((element) => {\r\n element.fillColor._canvasStyle = \"rgb(255,255,255,0.05)\";\r\n element.opacity = 1;\r\n });\r\n\r\n this.deselectItem();\r\n const hit = e.tool.view._project.hitTest(e.point, HIT_TEST_OPTIONS);\r\n if (hit && hit.item && !hit.item.locked) {\r\n if (hit.type === \"segment\") {\r\n this._segment = hit.segment;\r\n }\r\n\r\n hit.item.fillColor = hit.item.strokeColor._canvasStyle;\r\n hit.item.opacity = 0.5;\r\n\r\n this.selectItem(hit.item.data);\r\n hit.item.bringToFront();\r\n this._item = hit.item;\r\n this._point = e.point;\r\n } else {\r\n this._item = null;\r\n this._point = null;\r\n this.deselectItems();\r\n }\r\n };\r\n\r\n mouseDrag = (e) => {\r\n if (this.state.selectedItems.length == 0) {\r\n if (this._segment) {\r\n this._segment.point.x += e.delta.x;\r\n this._segment.point.y += e.delta.y;\r\n } else if (this._item && this._point) {\r\n this._item.translate(e.point.subtract(this._point));\r\n }\r\n\r\n this._changed = true;\r\n this._point = e.point;\r\n }\r\n };\r\n\r\n mouseUp = (e) => {\r\n if (this._segment) {\r\n if (e.event.shiftKey) {\r\n this._item.removeSegment(this._segment.index);\r\n }\r\n } else if (this._item) {\r\n if (e.event.ctrlKey) {\r\n const hit = e.tool.view._project.hitTest(e.point, HIT_TEST_OPTIONS);\r\n if (hit.location && this.state.selectedItems.length == 0) {\r\n this._item.insert(hit.location.segment.index + 1, e.point);\r\n } else {\r\n this.deselectItem();\r\n this.selectItems(this._item.data);\r\n }\r\n }\r\n }\r\n\r\n if (this._changed && this._item) {\r\n this.props.updateItem(this._item, {\r\n pathData: this._item.getPathData(),\r\n selected: true,\r\n relatedCurvePoints: this._item.getSegments().map((seg) => {\r\n return { x: seg.point.x, y: seg.point.y };\r\n })\r\n });\r\n }\r\n\r\n this._changed = false;\r\n this._point = null;\r\n this._segment = null;\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n}\r\n","import React, { Component } from \"react\";\r\n\r\nconst HIT_TEST_OPTIONS = {\r\n segments: true,\r\n stroke: false,\r\n fill: false,\r\n tolerance: 4\r\n};\r\n\r\nexport default function withFastPenTool(WrappedComponent) {\r\n return class extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._path = null;\r\n }\r\n\r\n keyUp = (e) => {\r\n const { key } = e;\r\n if (this._path && key === \"escape\") {\r\n this._path.remove();\r\n this._path = null;\r\n }\r\n };\r\n\r\n mouseDown = (e) => {\r\n this.props.deselectItem();\r\n if (!this._path) {\r\n const paper = e.tool._scope;\r\n this._path = new paper.Path({\r\n segments: [e.point],\r\n strokeColor: \"red\",\r\n strokeScaling: false,\r\n strokeWidth: 2,\r\n selected: true\r\n });\r\n } else {\r\n const hit = e.tool.view._project.hitTest(e.point, HIT_TEST_OPTIONS);\r\n\r\n if (\r\n (hit &&\r\n hit.point &&\r\n hit.point.x === hit.item.firstSegment.point.x &&\r\n hit.point.y === hit.item.firstSegment.point.y) ||\r\n e.modifiers.control\r\n ) {\r\n this._path.removeSegment(this._path.lastSegment.index);\r\n\r\n this._path.layer.data.id = 1;\r\n const item = this.props.addItem(this._path.layer, {\r\n type: \"Path\",\r\n pathData: this._path.getPathData(),\r\n strokeColor: this._path.style.strokeColor.toCSS(true),\r\n strokeScaling: this._path.strokeScaling,\r\n strokeWidth: this._path.strokeWidth,\r\n closed: true,\r\n relatedCurvePoints: this._path.getSegments().map((seg) => {\r\n return { x: seg.point.x, y: seg.point.y };\r\n })\r\n });\r\n this.props.selectItem(item);\r\n this._path.remove();\r\n this._path = null;\r\n } else if (this._path) {\r\n this._path.add(e.point);\r\n }\r\n }\r\n };\r\n\r\n mouseMove = (e) => {\r\n if (this._path) {\r\n if (this._path.lastSegment && this._path.lastSegment.index > 0) {\r\n this._path.removeSegment(this._path.lastSegment.index);\r\n }\r\n\r\n this._path.add(e.point);\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n}\r\n","import React, { Component } from \"react\";\r\n\r\nconst HIT_TEST_OPTIONS = {\r\n segments: true,\r\n stroke: true,\r\n fill: true,\r\n tolerance: 12\r\n};\r\n\r\nexport default function withDeleteTool(WrappedComponent) {\r\n return class extends Component {\r\n mouseDown = (e) => {\r\n this.props.deselectItem();\r\n const hit = e.tool.view._project.hitTest(e.point, HIT_TEST_OPTIONS);\r\n if (hit && hit.item && !hit.item.locked) {\r\n this.props.removeItem(hit.item);\r\n this.props.deselectItem();\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n}\r\n","import React, { Component } from 'react'\r\n\r\nconst HIT_TEST_OPTIONS = {\r\n segments: true,\r\n stroke: true,\r\n fill: true,\r\n tolerance: 5\r\n}\r\n\r\nexport default function withPerspectiveTool(WrappedComponent) {\r\n return class PerspectiveTool extends Component {\r\n constructor(props) {\r\n super(props)\r\n this._changed = false\r\n this._item = null\r\n this._segment = null\r\n this._point = null\r\n this.paper = null\r\n this.state = {\r\n showCube: false\r\n }\r\n }\r\n\r\n perspectiveToolMouseDown = (e) => {\r\n this.paper = e.tool._scope\r\n const hit = e.tool.view._project.hitTest(e.point, HIT_TEST_OPTIONS)\r\n if (hit && hit.type === 'stroke') this.measurePointAngles(hit.item)\r\n }\r\n\r\n measurePointAngles = (item) => {\r\n var segments = item.segments\r\n var vectors = []\r\n //براساس نقاط هر ناحیه برداری رسم کن\r\n for (let index = 0; index < segments.length; index++) {\r\n var point1 = segments[index].point\r\n var point2 = segments[index].next.point\r\n var vector = point2 - point1\r\n vectors.push(vector)\r\n }\r\n\r\n var deviations = [] // لیست انحراف نقاط\r\n for (let index = 0; index < vectors.length; index++) {\r\n // دو بردار مجاور را انتخاب کن\r\n var vector1 = vectors[index]\r\n var vector2\r\n if (index === vectors.length - 1)\r\n // اگر به پایان مسیر رسیدیم نقاط مجاور می شود اولین نقطه\r\n vector2 = vectors[0]\r\n else vector2 = vectors[index + 1]\r\n\r\n // احتلاف زاویه دو بردار یا زاویه بین دو بردار با حساب کن\r\n var angle = vector2.angle - vector1.angle\r\n\r\n // چون زوایا در پیپر جی اس با محور افقی حساب می شوند\r\n // ممکن است زاوبیه بین دو بردار از 180 منفی کمتر شود\r\n // ما چون با قدر مطلق زاویه انحراف کار داریم به 360 جمع میکنیم\r\n if (angle < -180) angle += 360\r\n\r\n // نقطه بعدی را دربیار\r\n var segment =\r\n index === vectors.length - 1 ? segments[0] : segments[index + 1]\r\n\r\n // به لیست انحرافات نقطه، زاویه و اندیس را بیفزا\r\n deviations.push({\r\n angle: angle,\r\n x: segment.point.x,\r\n y: segment.point.y,\r\n index: index\r\n })\r\n }\r\n\r\n // تا اینجای کار هر نقطه با زاویه ی آن درآمد\r\n\r\n // مرتب سازی براساس برگترین زاویه انحراف\r\n deviations.sort(function (a, b) {\r\n return b.angle - a.angle\r\n })\r\n\r\n // 5 نقطه اول با بزرگترین زاویه انحراف را نگه دار\r\n deviations = deviations.slice(0, 5)\r\n\r\n // حالا این پنج نقطه را براساس اندیس یا شماره نقطه مرتب کن\r\n deviations.sort(function (a, b) {\r\n return a.index - b.index\r\n })\r\n\r\n // در اینجا از بین 5 نقطه 1 نقطه را حذف کن\r\n deviations = this.removeOutlier(deviations)\r\n\r\n // پس تا اینجا 4 نقطه تمیز با بیشترین انحراف را داریم\r\n\r\n // رسم مسیر بسته پرسپکتیو\r\n var path = new this.paper.Path()\r\n path.closed = true\r\n var points = []\r\n for (var i = 0; i < 4; i++) {\r\n var point = new this.paper.Point({\r\n x: deviations[i].x,\r\n y: deviations[i].y\r\n })\r\n path.add(point)\r\n points.push(point)\r\n }\r\n\r\n //path.layer.data.id = 2\r\n const pathItem = this.props.addItem(path.layer, {\r\n type: 'Path',\r\n pathData: path.getPathData(),\r\n strokeColor: '#00ff00',\r\n strokeScaling: false,\r\n strokeWidth: 2,\r\n opacity: 0.5,\r\n fillColor: 'yellow',\r\n closed: true\r\n })\r\n this.props.selectItem(pathItem)\r\n\r\n // رسم خطوط راهنمای پرسپکتیو\r\n this.drawPerspectiveGuideLines(points)\r\n }\r\n\r\n drawPerspectiveGuideLines = (points) => {\r\n // تابع زیر یک نقطه بین دو نقط ورودی پیدا می کند است\r\n // interpolate\r\n var interpolatedPoints = []\r\n for (var index = 0; index < points.length; index++) {\r\n var point = this.interpolate(\r\n points[index],\r\n points[index === points.length - 1 ? 0 : index + 1],\r\n 0.5\r\n )\r\n // چهار نقطه وسطی اضافه می شوند\r\n interpolatedPoints.push(point)\r\n }\r\n\r\n for (let index = 0; index < points.length; index++) {\r\n // بین نقطه اول و جدید\r\n let point = this.interpolate(\r\n points[index],\r\n interpolatedPoints[index],\r\n 0.5\r\n )\r\n interpolatedPoints.push(point)\r\n\r\n // بین نقطه جدید و آخر\r\n point = this.interpolate(\r\n points[index === points.length - 1 ? 0 : index + 1],\r\n interpolatedPoints[index],\r\n 0.5\r\n )\r\n interpolatedPoints.push(point)\r\n }\r\n\r\n // تا اینجا نقاط درونیابی شده را داریم\r\n\r\n // // ابتدا دایره های سبز رنگ مربوط به هر نقطه را رسم می کنیم\r\n // for (let index = 0; index < interpolatedPoints.length; index++) {\r\n // var shape = new this.paper.Shape.Circle(interpolatedPoints[index], 2)\r\n // shape.fillColor = 'green'\r\n // }\r\n\r\n // // نوشته های روی نقاط سبز رنگ\r\n // for (let index = 0; index < interpolatedPoints.length; index++) {\r\n // const shape = new this.paper.Shape.Circle(interpolatedPoints[index], 2)\r\n // new this.paper.PointText(\r\n // interpolatedPoints[index] + new this.paper.Point(5, 5)\r\n // ).content = index.toString()\r\n // shape.fillColor = 'green'\r\n // }\r\n\r\n // رسم خطوط بین نقاط سبز\r\n // همیشه هر دو جفت زیر روی به روی هم هستند\r\n // new this.paper.Path.Line(\r\n // interpolatedPoints[7],\r\n // interpolatedPoints[10]\r\n // ).strokeColor = 'green'\r\n // new this.paper.Path.Line(\r\n // interpolatedPoints[1],\r\n // interpolatedPoints[3]\r\n // ).strokeColor = 'green'\r\n // new this.paper.Path.Line(\r\n // interpolatedPoints[6],\r\n // interpolatedPoints[11]\r\n // ).strokeColor = 'green'\r\n // new this.paper.Path.Line(\r\n // interpolatedPoints[5],\r\n // interpolatedPoints[8]\r\n // ).strokeColor = 'green'\r\n // new this.paper.Path.Line(\r\n // interpolatedPoints[0],\r\n // interpolatedPoints[2]\r\n // ).strokeColor = 'green'\r\n // new this.paper.Path.Line(\r\n // interpolatedPoints[4],\r\n // interpolatedPoints[9]\r\n // ).strokeColor = 'green'\r\n }\r\n\r\n // تابع درون یابی\r\n interpolate = (a, b, t) => {\r\n return new this.paper.Point(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t)\r\n }\r\n\r\n // تابع حذف نقاط پرت\r\n removeOutlier = (deviations) => {\r\n var distances = []\r\n\r\n for (var index = 0; index < deviations.length; index++) {\r\n var point1 = deviations[index]\r\n var point2\r\n if (index === deviations.length - 1) point2 = deviations[0]\r\n else point2 = deviations[index + 1]\r\n\r\n // فاصله بین هر دو نقطه را حساب کن\r\n var value =\r\n Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2)\r\n distances.push({ index: index, value: value })\r\n }\r\n\r\n // مرتب سازی براساس اندازه فواصل\r\n distances.sort(function (a, b) {\r\n return a.value - b.value\r\n })\r\n\r\n // حذف کمترین اندازه\r\n deviations.splice(distances[0].index, 1)\r\n\r\n return deviations\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n }\r\n}\r\n","const DragTracker = (options) => {\r\n var ep = Element.prototype\r\n if (!ep.matches) ep.matches = ep.msMatchesSelector || ep.webkitMatchesSelector\r\n if (!ep.closest)\r\n ep.closest = function (s) {\r\n var node = this\r\n do {\r\n if (node.matches(s)) return node\r\n node = node.tagName === 'svg' ? node.parentNode : node.parentElement\r\n } while (node)\r\n\r\n return null\r\n }\r\n\r\n options = options || {}\r\n var container = options.container || document.documentElement,\r\n selector = options.selector,\r\n callback = options.callback || console.log,\r\n callbackStart = options.callbackDragStart,\r\n callbackEnd = options.callbackDragEnd,\r\n callbackClick = options.callbackClick,\r\n propagate = options.propagateEvents,\r\n roundCoords = options.roundCoords !== false,\r\n dragOutside = options.dragOutside !== false,\r\n handleOffset = options.handleOffset || options.handleOffset !== false\r\n var offsetToCenter = null\r\n switch (handleOffset) {\r\n case 'center':\r\n offsetToCenter = true\r\n break\r\n case 'topleft':\r\n case 'top-left':\r\n offsetToCenter = false\r\n break\r\n }\r\n\r\n var dragged = void 0,\r\n mouseOffset = void 0,\r\n dragStart = void 0\r\n\r\n function getMousePos(e, elm, offset, stayWithin) {\r\n var x = e.clientX,\r\n y = e.clientY\r\n\r\n function respectBounds(value, min, max) {\r\n return Math.max(min, Math.min(value, max))\r\n }\r\n\r\n if (elm) {\r\n var bounds = elm.getBoundingClientRect()\r\n x -= bounds.left\r\n y -= bounds.top\r\n\r\n if (offset) {\r\n x -= offset[0]\r\n y -= offset[1]\r\n }\r\n if (stayWithin) {\r\n x = respectBounds(x, 0, bounds.width)\r\n y = respectBounds(y, 0, bounds.height)\r\n }\r\n\r\n if (elm !== container) {\r\n var center =\r\n offsetToCenter !== null\r\n ? offsetToCenter\r\n : elm.nodeName === 'circle' || elm.nodeName === 'ellipse'\r\n\r\n if (center) {\r\n x -= bounds.width / 2\r\n y -= bounds.height / 2\r\n }\r\n }\r\n }\r\n return roundCoords ? [Math.round(x), Math.round(y)] : [x, y]\r\n }\r\n\r\n function stopEvent(e) {\r\n e.preventDefault()\r\n if (!propagate) {\r\n e.stopPropagation()\r\n }\r\n }\r\n\r\n function onDown(e) {\r\n if (selector) {\r\n dragged =\r\n selector instanceof Element\r\n ? selector.contains(e.target)\r\n ? selector\r\n : null\r\n : e.target.closest(selector)\r\n } else {\r\n dragged = {}\r\n }\r\n\r\n if (dragged) {\r\n stopEvent(e)\r\n\r\n mouseOffset = selector && handleOffset ? getMousePos(e, dragged) : [0, 0]\r\n dragStart = getMousePos(e, container, mouseOffset)\r\n if (roundCoords) {\r\n dragStart = dragStart.map(Math.round)\r\n }\r\n\r\n if (callbackStart) {\r\n callbackStart(dragged, dragStart)\r\n }\r\n }\r\n }\r\n\r\n function onMove(e) {\r\n if (!dragged) {\r\n return\r\n }\r\n stopEvent(e)\r\n\r\n var pos = getMousePos(e, container, mouseOffset, !dragOutside)\r\n callback(dragged, pos, dragStart)\r\n }\r\n\r\n function onEnd(e) {\r\n if (!dragged) {\r\n return\r\n }\r\n\r\n if (callbackEnd || callbackClick) {\r\n var pos = getMousePos(e, container, mouseOffset, !dragOutside)\r\n\r\n if (callbackClick && dragStart[0] === pos[0] && dragStart[1] === pos[1]) {\r\n callbackClick(dragged, dragStart)\r\n }\r\n if (callbackEnd) {\r\n callbackEnd(dragged, pos, dragStart)\r\n }\r\n }\r\n dragged = null\r\n }\r\n\r\n container.addEventListener('mousedown', function (e) {\r\n if (isLeftButton(e)) {\r\n onDown(e)\r\n }\r\n })\r\n container.addEventListener('touchstart', function (e) {\r\n relayTouch(e, onDown)\r\n })\r\n\r\n window.addEventListener('mousemove', function (e) {\r\n if (!dragged) {\r\n return\r\n }\r\n\r\n if (isLeftButton(e)) {\r\n onMove(e)\r\n } else {\r\n onEnd(e)\r\n }\r\n })\r\n window.addEventListener('touchmove', function (e) {\r\n relayTouch(e, onMove)\r\n })\r\n\r\n window.addEventListener('mouseup', function (e) {\r\n if (dragged && !isLeftButton(e)) {\r\n onEnd(e)\r\n }\r\n })\r\n function onTouchEnd(e) {\r\n onEnd(tweakTouch(e))\r\n }\r\n container.addEventListener('touchend', onTouchEnd)\r\n container.addEventListener('touchcancel', onTouchEnd)\r\n\r\n function isLeftButton(e) {\r\n return e.buttons !== undefined ? e.buttons === 1 : e.which === 1\r\n }\r\n function relayTouch(e, handler) {\r\n if (e.touches.length !== 1) {\r\n onEnd(e)\r\n return\r\n }\r\n\r\n handler(tweakTouch(e))\r\n }\r\n function tweakTouch(e) {\r\n var touch = e.targetTouches[0]\r\n if (!touch) {\r\n touch = e.changedTouches[0]\r\n }\r\n\r\n touch.preventDefault = e.preventDefault.bind(e)\r\n touch.stopPropagation = e.stopPropagation.bind(e)\r\n return touch\r\n }\r\n}\r\n\r\nexport default DragTracker\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport './Button.css'\r\n\r\nexport default class Button extends Component {\r\n\r\n static propTypes = {\r\n active: PropTypes.bool,\r\n children: PropTypes.node,\r\n onClick: PropTypes.func,\r\n setTool: PropTypes.func,\r\n tool: PropTypes.string,\r\n }\r\n\r\n handleClick = (e) => {\r\n if (this.props.onClick) {\r\n this.props.onClick(e)\r\n } else if (this.props.setTool) {\r\n this.props.setTool(this.props.tool)\r\n }\r\n }\r\n\r\n render() {\r\n const { active, children, onClick, setTool, tool, ...rest } = this.props\r\n const props = {\r\n className: `Button${active ? ' Button-active' : ''}`,\r\n onClick: this.handleClick,\r\n }\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Portal } from 'react-portal'\r\nimport Tether from 'tether'\r\n\r\nimport './Dropdown.css'\r\n\r\nconst POS = {\r\n t: 'top',\r\n b: 'bottom',\r\n l: 'left',\r\n r: 'right',\r\n m: 'middle',\r\n c: 'center',\r\n}\r\n\r\nexport default class Dropdown extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.ref = React.createRef()\r\n }\r\n\r\n static propTypes = {\r\n align: function(props, propName, componentName) {\r\n if (!/[btm][lrc] [btm][lrc]/.test(props[propName])) {\r\n return new Error(\r\n `Invalid prop ${propName} (${props[propName]}) ` +\r\n `supplied to ${componentName}. Validation failed.`\r\n )\r\n }\r\n },\r\n children: PropTypes.any.isRequired,\r\n closeOnEsc: PropTypes.bool,\r\n closeOnOutsideClick: PropTypes.bool,\r\n offset: PropTypes.string,\r\n target: PropTypes.element.isRequired,\r\n }\r\n\r\n static defaultProps = {\r\n align: 'tl bl',\r\n closeOnEsc: true,\r\n closeOnOutsideClick: true,\r\n offset: '0 0',\r\n }\r\n\r\n onOpen = (portalNode) => {\r\n const { align, offset } = this.props\r\n const [ay,ax,ty,tx] = align.split('').map(a => a && POS[a]).filter(a => a)\r\n const [oy,ox] = offset.split(' ').map(o => parseInt(o, 10))\r\n\r\n portalNode.classList.add('Dropdown')\r\n\r\n this._tether = new Tether({\r\n element: portalNode,\r\n target: this.ref,\r\n attachment: `${ay} ${ax}`,\r\n targetAttachment: `${ty} ${tx}`,\r\n offset: `${oy} ${ox}`,\r\n constraints: [{\r\n to: 'window',\r\n pin: true,\r\n }],\r\n })\r\n\r\n portalNode.style.opacity = 1\r\n }\r\n\r\n beforeClose = (portalNode, remove) => {\r\n if (this._tether) {\r\n this._tether.destroy()\r\n }\r\n this._timeout = setTimeout(remove)\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._timeout) {\r\n clearTimeout(this._timeout)\r\n }\r\n }\r\n render() {\r\n const { children, closeOnEsc, closeOnOutsideClick, target } = this.props\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n }\r\n\r\n}\r\n","import React, { Component, Children, cloneElement } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport './List.css'\r\n\r\nexport default class List extends Component {\r\n\r\n static propTypes = {\r\n children: PropTypes.any.isRequired,\r\n closePortal: PropTypes.func,\r\n }\r\n\r\n render() {\r\n const { closePortal } = this.props\r\n const children = Children.toArray(this.props.children).filter(c => c)\r\n return (\r\n
    this.list = ref}>\r\n {Children.map(children, (child, index) => cloneElement(child, {\r\n tabIndex: index + 1,\r\n closeMenu: closePortal,\r\n }))}\r\n
\r\n )\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Dropdown from './Dropdown'\r\nimport List from './List'\r\n\r\nimport './Menu.css'\r\n\r\nexport default class Menu extends Component {\r\n\r\n static propTypes = {\r\n align: PropTypes.string,\r\n children: PropTypes.any.isRequired,\r\n offset: PropTypes.string,\r\n target: PropTypes.element.isRequired,\r\n }\r\n\r\n render() {\r\n const { children, ...rest } = this.props\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport './Item.css'\r\n\r\nexport default class Item extends Component {\r\n\r\n static propTypes = {\r\n children: PropTypes.any.isRequired,\r\n closeMenu: PropTypes.func,\r\n onClick: PropTypes.func,\r\n tabIndex: PropTypes.number,\r\n }\r\n\r\n handleClick = () => {\r\n if (this.props.onClick) {\r\n this.props.onClick(this.props)\r\n }\r\n this.props.closeMenu()\r\n }\r\n\r\n render() {\r\n const { children, tabIndex } = this.props\r\n const props = {\r\n className: 'PortalMenu__Item',\r\n onClick: this.handleClick,\r\n tabIndex,\r\n }\r\n return (\r\n
  • \r\n {children}\r\n
  • \r\n )\r\n }\r\n}\r\n","import React, { useState, Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Link, Prompt } from 'react-router-dom'\r\nimport InputRange from 'react-input-range'\r\nimport Button from './Button'\r\nimport Menu from './Menu/Menu'\r\nimport MenuItem from './Menu/Item'\r\nimport './Toolbar.css'\r\nimport Tour from 'reactour'\r\nimport { Button as BootstrapButton } from 'reactstrap'\r\n\r\nimport Cube1 from '../../../assets/img/cube/cube-1.png'\r\nimport Cube2 from '../../../assets/img/cube/cube-2.png'\r\nimport Cube3 from '../../../assets/img/cube/cube-3.png'\r\nimport Cube4 from '../../../assets/img/cube/cube-4.png'\r\nimport Cube5 from '../../../assets/img/cube/cube-5.png'\r\nimport Cube6 from '../../../assets/img/cube/cube-6.png'\r\nimport Cube7 from '../../../assets/img/cube/cube-7.png'\r\nimport logo from '../../../assets/img/logo-header-white.svg'\r\n\r\nconst Toolbar = (props) => {\r\n const [menuCube, setMenuCube] = useState(false)\r\n const [cubeSkewAngle, setCubeSkewAngle] = useState(45)\r\n const [isTourOpen, setIsTourOpen] = useState(false)\r\n const [currentStep, setCurrentStep] = useState(0)\r\n\r\n const toggleTourStatus = () => {\r\n setIsTourOpen(!isTourOpen)\r\n setCurrentStep(0)\r\n }\r\n\r\n const restartTourStatus = (goTo) => {\r\n toggleTourStatus()\r\n goTo(0)\r\n }\r\n\r\n const tourFooter = (goTo, nextPage) => (\r\n
    \r\n goTo(nextPage)}\r\n >\r\n بعدی\r\n \r\n restartTourStatus(goTo)}\r\n >\r\n بعدا میبینم\r\n \r\n
    \r\n )\r\n\r\n const finalTourFooter = (goTo) => (\r\n
    \r\n restartTourStatus(goTo)}\r\n >\r\n اتمام\r\n \r\n
    \r\n )\r\n\r\n const steps = [\r\n {\r\n selector: '.Toolbar button:nth-child(3)',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 1\r\n ابزار 'رسم مسیر' را انتخاب کنید\r\n

    \r\n {tourFooter(goTo, 1)}\r\n
    \r\n ),\r\n action: (node) => {\r\n if (node && node.focus) {\r\n node.focus()\r\n node.click()\r\n }\r\n },\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: 'canvas',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 2\r\n اطراف ناحیه دلخواه جهت امتحان کردن پارچه را انتخاب کنید\r\n

    \r\n {tourFooter(goTo, 2)}\r\n
    \r\n ),\r\n action: (node) => {\r\n if (node && node.focus) {\r\n node.focus()\r\n node.click()\r\n }\r\n },\r\n stepInteraction: true,\r\n },\r\n {\r\n selector: '.Toolbar button:nth-child(2)',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 3\r\n ابزار 'انتخاب مسیر' را انتخاب کنید\r\n

    \r\n {tourFooter(goTo, 3)}\r\n
    \r\n ),\r\n action: (node) => {\r\n if (node) {\r\n node.click()\r\n }\r\n },\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: 'canvas',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 4\r\n با انتخاب مسیر و سپس جابجایی نقاط، می‎توان دقت انتخاب مسیر را افزایش دهید\r\n

    \r\n {tourFooter(goTo, 4)}\r\n
    \r\n ),\r\n action: (node) => {\r\n if (node && node.focus) {\r\n node.focus()\r\n node.click()\r\n }\r\n },\r\n stepInteraction: true,\r\n },\r\n {\r\n selector: '.Toolbar div:nth-of-type(3)',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 5\r\n در صورت هرگونه اشتباه امکان بازگشت به یک مرحله یا بازگشت به مرحله اول نیز وجود دارد\r\n

    \r\n {tourFooter(goTo, 5)}\r\n
    \r\n ),\r\n action: (node) => {\r\n if (node && node.focus) {\r\n node.focus()\r\n node.click()\r\n }\r\n },\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: '.Toolbar div:nth-of-type(2) button',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 6\r\n پس از تکمیل انتخاب مسیر، 'وضعیت پرسکتیو' را انتخاب کنید\r\n

    \r\n {tourFooter(goTo, 6)}\r\n
    \r\n ),\r\n action: (node) => {\r\n if (node) {\r\n node.click()\r\n }\r\n },\r\n stepInteraction: true,\r\n },\r\n {\r\n selector: '.Toolbar .pers-menu-items',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 7\r\n زاویه و نحوه قرارگیری ناحیه انتخاب شده را در تصویر انتخاب کنید\r\n

    \r\n {tourFooter(goTo, 7)}\r\n
    \r\n ),\r\n action: (node) => {\r\n if (node) {\r\n node.click()\r\n }\r\n },\r\n stepInteraction: true,\r\n },\r\n {\r\n selector: 'canvas',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 8\r\n با جابجایی نقاط جهت خواب پارچه و نحوه قرارگیری آن در نقاط مختلف تغییر خواهد کرد\r\n

    \r\n {tourFooter(goTo, 8)}\r\n
    \r\n ),\r\n stepInteraction: true,\r\n },\r\n {\r\n selector: '.Toolbar .pers-menu .input-range',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 9\r\n با جابجایی اسلایدر زاویه شکست پارچه در نقاط میانی تغییر خواهد کرد\r\n

    \r\n {tourFooter(goTo, 9)}\r\n
    \r\n ),\r\n stepInteraction: true,\r\n },\r\n {\r\n selector: '.Toolbar .pers-menu button',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 10\r\n پس از انجام تغییرات و رسیدن به مکان مورد انتظار دکمه 'تایید' را انتخاب کنید\r\n

    \r\n {tourFooter(goTo, 10)}\r\n
    \r\n ),\r\n stepInteraction: true,\r\n },\r\n {\r\n selector: '.Toolbar div:nth-of-type(5)',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 11\r\n پس از انجام تغییرات و برای نگهداری تغییرات بر روی دکمه 'ذخیره' کلیک کنید\r\n

    \r\n {tourFooter(goTo, 11)}\r\n
    \r\n ),\r\n stepInteraction: false,\r\n },\r\n {\r\n selector: '.Toolbar div:nth-of-type(6)',\r\n content: ({ goTo }) => (\r\n \r\n

    \r\n 12\r\n برای بازگشت به صفحه اصلی بر روی دکمه 'بازگشت' را انتخاب کنید\r\n

    \r\n {finalTourFooter(goTo)}\r\n
    \r\n ),\r\n stepInteraction: false,\r\n },\r\n ]\r\n\r\n const { activeTool, fullscreen, imageSize, showLayers } = props\r\n\r\n const menuHandler = (showMenu, showCube, type) => {\r\n setMenuCube(showMenu)\r\n // props.stateCubeHandler(showCube, type)\r\n props.stateDynamicCubeHandler(showCube, type)\r\n }\r\n\r\n return (\r\n
    \r\n setCurrentStep(step)}\r\n disableInteraction={false}\r\n closeWithMask={false}\r\n rounded={8}\r\n />\r\n \r\n راهنمای استفاده\r\n \r\n
    \r\n \r\n pan_tool\r\n \r\n \r\n touch_app\r\n \r\n \r\n create\r\n \r\n \r\n timeline\r\n \r\n {props.showDynamicCube ? (\r\n props.deleteDynamicCubeHandler()}\r\n >\r\n delete\r\n \r\n ) : (\r\n \r\n delete\r\n \r\n )}\r\n
    \r\n \r\n
    \r\n {/* \r\n view_comfy\r\n */}\r\n\r\n {!props.showDynamicCube ? (\r\n {\r\n let isShowMenu = true\r\n props.setDefaultView()\r\n props.data.layers[0].children.forEach(\r\n (element, index) => {\r\n if (\r\n element.id === props.selectedItem &&\r\n element.dimension\r\n ) {\r\n isShowMenu = false\r\n // props.stateCubeHandler(\r\n // true,\r\n // element.dimType\r\n // )\r\n props.stateDynamicCubeHandler(\r\n true,\r\n element.dimType,\r\n () =>\r\n setCubeSkewAngle(\r\n props.getInitialCubeSkewAngle()\r\n )\r\n )\r\n }\r\n }\r\n )\r\n\r\n isShowMenu && setMenuCube(!menuCube)\r\n }}\r\n disabled={props.selectedItem == null}\r\n >\r\n 3d_rotation\r\n \r\n ) : (\r\n \r\n props.confirmDynamicCubeHandler()}\r\n >\r\n check\r\n \r\n menuHandler(false, false)}\r\n >\r\n close\r\n \r\n {props.perspectiveType != 1 && (\r\n {\r\n setCubeSkewAngle(value)\r\n }}\r\n onChangeComplete={(value) =>\r\n props.applyCubeSkewChange(cubeSkewAngle)\r\n }\r\n />\r\n )}\r\n \r\n )}\r\n\r\n {menuCube && (\r\n
    \r\n menuHandler(false, true, 1)}\r\n >\r\n \r\n
    \r\n menuHandler(false, true, 2)}\r\n >\r\n \r\n
    \r\n menuHandler(false, true, 3)}\r\n >\r\n \r\n
    \r\n menuHandler(false, true, 4)}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n
    \r\n \r\n redo\r\n \r\n \r\n undo\r\n \r\n \r\n clear\r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n {showLayers ? 'layers' : 'layers_clear'}\r\n \r\n \r\n \r\n \r\n {fullscreen ? 'fullscreen_exit' : 'fullscreen'}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n save\r\n \r\n
    \r\n {/*
    \r\n \r\n color_lens\r\n \r\n
    */}\r\n {props.isSaving && (\r\n \r\n
    \r\n در حال ذخیره...\r\n
    \r\n
    \r\n )}\r\n \r\n
    \r\n \r\n\r\n \r\n بازگشت\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n )\r\n}\r\n\r\nToolbar.propTypes = {\r\n activeTool: PropTypes.string,\r\n canUndo: PropTypes.bool,\r\n canRedo: PropTypes.bool,\r\n fullscreen: PropTypes.bool,\r\n imageSize: PropTypes.number,\r\n showLayers: PropTypes.bool,\r\n save: PropTypes.func,\r\n setTool: PropTypes.func,\r\n undo: PropTypes.func,\r\n redo: PropTypes.func,\r\n clearHistory: PropTypes.func,\r\n toggleFullscreen: PropTypes.func,\r\n toggleLayers: PropTypes.func,\r\n isSaving: PropTypes.bool,\r\n savingError: PropTypes.any,\r\n}\r\n\r\nexport default Toolbar\r\n","import React, { Component } from 'react'\r\nimport { Motion, StaggeredMotion, spring } from 'react-motion'\r\nimport range from 'lodash.range'\r\n\r\nimport './Menu.css'\r\n\r\n// Diameter of the main button in pixels\r\nconst MAIN_BUTTON_DIAM = 64\r\nconst CHILD_BUTTON_DIAM = 48\r\n\r\n// The number of child buttons that fly out from the main button\r\nconst NUM_CHILDREN = 6\r\n\r\n// should be between 0 and 0.5 (its maximum value is difference between scale in\r\n// finalChildButtonStyles and initialChildButtonStyles)\r\nconst OFFSET = 0.05\r\n\r\nconst SPRING_CONFIG = { stiffness: 400, damping: 28 }\r\n\r\n// How far away from the main button does the child buttons go\r\nconst FLY_OUT_RADIUS = 90,\r\n SEPARATION_ANGLE = 42, //degrees\r\n FAN_ANGLE = (NUM_CHILDREN - 1) * SEPARATION_ANGLE, //degrees\r\n BASE_ANGLE = (180 - FAN_ANGLE) / 2 // degrees\r\n\r\n// Utility functions\r\n\r\nfunction toRadians(degrees) {\r\n return degrees * (Math.PI / 180)\r\n}\r\n\r\nfunction finalChildDeltaPositions(index) {\r\n let angle = BASE_ANGLE + index * SEPARATION_ANGLE\r\n return {\r\n deltaX: FLY_OUT_RADIUS * Math.cos(toRadians(angle)) - CHILD_BUTTON_DIAM / 2,\r\n deltaY: FLY_OUT_RADIUS * Math.sin(toRadians(angle)) + CHILD_BUTTON_DIAM / 2\r\n }\r\n}\r\n\r\nexport default class Menu extends Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n isOpen: false,\r\n childButtons: []\r\n }\r\n\r\n // Bind this to the functions\r\n this.toggleMenu = this.toggleMenu.bind(this)\r\n this.closeMenu = this.closeMenu.bind(this)\r\n this.setTool = this.setTool.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('click', this.closeMenu)\r\n let childButtons = []\r\n\r\n this.setState({ childButtons: childButtons.slice(0) })\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('click', this.closeMenu)\r\n }\r\n\r\n mainButtonStyles() {\r\n return {\r\n width: MAIN_BUTTON_DIAM,\r\n height: MAIN_BUTTON_DIAM,\r\n top: this.props.y - MAIN_BUTTON_DIAM / 2,\r\n left: this.props.x - MAIN_BUTTON_DIAM / 2\r\n }\r\n }\r\n\r\n initialChildButtonStyles() {\r\n return {\r\n width: CHILD_BUTTON_DIAM,\r\n height: CHILD_BUTTON_DIAM,\r\n top: spring(this.props.y - CHILD_BUTTON_DIAM / 2, SPRING_CONFIG),\r\n left: spring(this.props.x - CHILD_BUTTON_DIAM / 2, SPRING_CONFIG),\r\n rotate: spring(-180, SPRING_CONFIG),\r\n scale: spring(0.5, SPRING_CONFIG)\r\n }\r\n }\r\n\r\n initialChildButtonStylesInit() {\r\n return {\r\n width: CHILD_BUTTON_DIAM,\r\n height: CHILD_BUTTON_DIAM,\r\n top: this.props.y - CHILD_BUTTON_DIAM / 2,\r\n left: this.props.x - CHILD_BUTTON_DIAM / 2,\r\n rotate: -180,\r\n scale: 0.5\r\n }\r\n }\r\n\r\n finalChildButtonStylesInit(childIndex) {\r\n let { deltaX, deltaY } = finalChildDeltaPositions(childIndex)\r\n return {\r\n width: CHILD_BUTTON_DIAM,\r\n height: CHILD_BUTTON_DIAM,\r\n top: this.props.y - deltaY,\r\n left: this.props.x + deltaX,\r\n rotate: 0,\r\n scale: 1\r\n }\r\n }\r\n\r\n finalChildButtonStyles(childIndex) {\r\n let { deltaX, deltaY } = finalChildDeltaPositions(childIndex)\r\n return {\r\n width: CHILD_BUTTON_DIAM,\r\n height: CHILD_BUTTON_DIAM,\r\n top: spring(this.props.y - deltaY, SPRING_CONFIG),\r\n left: spring(this.props.x + deltaX, SPRING_CONFIG),\r\n rotate: spring(0, SPRING_CONFIG),\r\n scale: spring(1, SPRING_CONFIG)\r\n }\r\n }\r\n\r\n toggleMenu(e) {\r\n e.stopPropagation()\r\n let { isOpen } = this.state\r\n this.setState({\r\n isOpen: !isOpen\r\n })\r\n }\r\n\r\n closeMenu() {\r\n this.setState({ isOpen: false })\r\n }\r\n\r\n renderChildButtons() {\r\n const { isOpen } = this.state\r\n const { tools } = this.props\r\n const targetButtonStylesInitObject = range(tools.length).map((i) => {\r\n return isOpen\r\n ? this.finalChildButtonStylesInit(i)\r\n : this.initialChildButtonStylesInit()\r\n })\r\n\r\n //StaggeredMotion now takes an Array of object\r\n const targetButtonStylesInit = Object.keys(\r\n targetButtonStylesInitObject\r\n ).map((key) => targetButtonStylesInitObject[key])\r\n\r\n const targetButtonStyles = range(tools.length).map((i) => {\r\n return isOpen\r\n ? this.finalChildButtonStyles(i)\r\n : this.initialChildButtonStyles()\r\n })\r\n\r\n const scaleMin = this.initialChildButtonStyles().scale.val\r\n const scaleMax = this.finalChildButtonStyles(0).scale.val\r\n\r\n //This function returns target styles for each child button in current animation frame\r\n //according to actual styles in previous animation frame.\r\n //Each button could have one of two target styles\r\n // - defined in initialChildButtonStyles (for collapsed buttons)\r\n // - defined in finalChildButtonStyles (for expanded buttons)\r\n // To decide which target style should be applied function uses css 'scale' property\r\n // for previous button in previous animation frame.\r\n // When 'scale' for previous button passes some 'border' which is a simple combination one of\r\n // two 'scale' values and some OFFSET the target style for next button should be changed.\r\n //\r\n // For example let's set the OFFSET for 0.3 - it this case border's value for closed buttons will be 0.8.\r\n //\r\n // All buttons are closed\r\n // INITIAL-BUTTON-SCALE-(0.5)-----------BORDER-(0.8)------FINAL-BUTTON-SCALE-(1)\r\n // |------------------------------------------|--------------------------------|\r\n // BUTTON NO 1 o------------------------------------------|---------------------------------\r\n // BUTTON NO 2 o------------------------------------------|---------------------------------\r\n //\r\n // When user clicks on menu button no 1 changes its target style according to finalChildButtonStyles method\r\n // and starts growing up. In this frame this button doesn't pass the border so target style for button no 2\r\n // stays as it was in previous animation frame\r\n // BUTTON NO 1 -----------------------------------o-------|---------------------------------\r\n // BUTTON NO 2 o------------------------------------------|---------------------------------\r\n //\r\n //\r\n //\r\n // (...few frames later)\r\n // In previous frame button no 1 passes the border so target style for button no 2 could be changed.\r\n // BUTTON NO 1 -------------------------------------------|-o-------------------------------\r\n // BUTTON NO 2 -----o-------------------------------------|---------------------------------\r\n //\r\n //\r\n // All buttons are expanded - in this case border value is 0.7 (OFFSET = 0.3)\r\n // INITIAL-BUTTON-SCALE-(0.5)---BORDER-(0.7)--------------FINAL-BUTTON-SCALE-(1)\r\n // |------------------------------|--------------------------------------------|\r\n // BUTTON NO 1 -------------------------------|--------------------------------------------O\r\n // BUTTON NO 2 -------------------------------|--------------------------------------------O\r\n //\r\n // When user clicks on menu button no 1 changes its target style according to initialChildButtonStyles method\r\n // and starts shrinking down. In this frame this button doesn't pass the border so target style for button no 2\r\n // stays as it was defined in finalChildButtonStyles method\r\n // BUTTON NO 1 -------------------------------|------------------------------------O--------\r\n // BUTTON NO 2 -------------------------------|--------------------------------------------O\r\n //\r\n //\r\n //\r\n // (...few frames later)\r\n // In previous frame button no 1 passes the border so target style for button no 2 could be changed\r\n // and this button starts to animate to its default state.\r\n // BUTTON NO 1 -----------------------------o-|---------------------------------------------\r\n // BUTTON NO 2 -------------------------------|------------------------------------O--------\r\n let calculateStylesForNextFrame = (prevFrameStyles) => {\r\n prevFrameStyles = isOpen ? prevFrameStyles : prevFrameStyles.reverse()\r\n\r\n let nextFrameTargetStyles = prevFrameStyles.map(\r\n (buttonStyleInPreviousFrame, i) => {\r\n //animation always starts from first button\r\n if (i === 0) {\r\n return targetButtonStyles[i]\r\n }\r\n\r\n const prevButtonScale = prevFrameStyles[i - 1].scale\r\n const shouldApplyTargetStyle = () => {\r\n if (isOpen) {\r\n return prevButtonScale >= scaleMin + OFFSET\r\n } else {\r\n return prevButtonScale <= scaleMax - OFFSET\r\n }\r\n }\r\n\r\n return shouldApplyTargetStyle()\r\n ? targetButtonStyles[i]\r\n : buttonStyleInPreviousFrame\r\n }\r\n )\r\n\r\n return isOpen ? nextFrameTargetStyles : nextFrameTargetStyles.reverse()\r\n }\r\n\r\n return (\r\n \r\n {(interpolatedStyles) => (\r\n
    \r\n {interpolatedStyles.map(\r\n ({ height, left, rotate, scale, top, width }, index) => (\r\n \r\n \r\n {tools[index].icon}\r\n \r\n
    \r\n )\r\n )}\r\n \r\n )}\r\n \r\n )\r\n }\r\n\r\n setTool(e) {\r\n if (this.props.setTool) {\r\n this.props.setTool(e.target.dataset.tool)\r\n }\r\n }\r\n\r\n render() {\r\n const { activeTool, tools } = this.props\r\n const { isOpen } = this.state\r\n let tool = tools.find((t) => t.tool === activeTool)\r\n if (!tool) tool = tools[0]\r\n const mainButtonRotation = isOpen\r\n ? { rotate: spring(-135, { stiffness: 500, damping: 30 }) }\r\n : { rotate: spring(0, { stiffness: 500, damping: 30 }) }\r\n return (\r\n
    \r\n {this.renderChildButtons()}\r\n \r\n {({ rotate }) => (\r\n \r\n \r\n {tool.icon}\r\n \r\n
    \r\n )}\r\n \r\n \r\n )\r\n }\r\n}\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport assign from 'object-assign'\r\n\r\nimport './Loader.css'\r\n\r\nconst Loader = ({ color, size }) => {\r\n const style = assign({},\r\n color && { backgroundColor: color },\r\n size && { width: size, height: size },\r\n )\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nLoader.propTypes = {\r\n color: PropTypes.string,\r\n size: PropTypes.number,\r\n}\r\n\r\nexport default Loader\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport './Label.css'\r\n\r\nexport default class Label extends Component {\r\n static propTypes = {\r\n children: PropTypes.node,\r\n icon: PropTypes.node,\r\n onClick: PropTypes.func,\r\n selected: PropTypes.bool\r\n }\r\n\r\n handleLabelClick = (event) => {\r\n event.persist()\r\n if (this.props.onClick) {\r\n this.props.onClick({ ...this.props, event })\r\n }\r\n }\r\n\r\n render() {\r\n const { children, icon, selected } = this.props\r\n const className = `tree-view_label${\r\n selected ? ' tree-view_label-selected' : ''\r\n }`\r\n return (\r\n
    \r\n {icon && {icon}}\r\n {children}\r\n
    \r\n )\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Tree from 'react-treeview'\r\n\r\nimport Label from './Label'\r\n\r\nimport './Item.css'\r\n\r\nfunction getIcon(type) {\r\n switch (type) {\r\n case 'Layer':\r\n return 'layers'\r\n case 'Group':\r\n return 'folder'\r\n case 'Path':\r\n return 'timeline'\r\n case 'Circle':\r\n return 'lens'\r\n case 'Rectangle':\r\n return 'crop_square'\r\n case 'Raster':\r\n return 'photo'\r\n default:\r\n return 'insert_drive_file'\r\n }\r\n}\r\n\r\nfunction getText(type) {\r\n switch (type) {\r\n case 'Layer':\r\n return 'لایه'\r\n case 'Group':\r\n return 'گروه'\r\n case 'Path':\r\n return 'مسیر'\r\n case 'Circle':\r\n return 'lens'\r\n case 'Rectangle':\r\n return 'crop_square'\r\n case 'Raster':\r\n return 'تصویر'\r\n default:\r\n return ''\r\n }\r\n}\r\n\r\nexport default class Item extends Component {\r\n static propTypes = {\r\n id: PropTypes.any.isRequired,\r\n type: PropTypes.string.isRequired,\r\n expanded: PropTypes.object.isRequired,\r\n activeLayer: PropTypes.number,\r\n selectedItem: PropTypes.string,\r\n onArrowClick: PropTypes.func,\r\n onLabelClick: PropTypes.func,\r\n }\r\n\r\n handleArrowClick = () => {\r\n if (this.props.onArrowClick) {\r\n this.props.onArrowClick(this.props)\r\n }\r\n }\r\n\r\n render() {\r\n const {\r\n id,\r\n type,\r\n data,\r\n children,\r\n expanded,\r\n activeLayer,\r\n selectedItem,\r\n onLabelClick,\r\n onStrokeColorClick,\r\n onChangeLockClick,\r\n } = this.props\r\n const isGroup = type === 'Group' || type === 'Layer'\r\n const hasChildren = children && children.length > 0\r\n const labelProps = {\r\n id,\r\n type,\r\n icon: getIcon(type),\r\n onClick: onLabelClick,\r\n selected:\r\n id === selectedItem || (id === activeLayer && !selectedItem),\r\n }\r\n const treeProps = {\r\n collapsed: expanded[id] === false,\r\n onClick: this.handleArrowClick,\r\n nodeLabel: (\r\n \r\n ),\r\n }\r\n\r\n const strokeColors = [\r\n '#ff0000',\r\n '#00ff00',\r\n '#0000ff',\r\n '#ffff00',\r\n '#ff00ff',\r\n '#00ffff',\r\n '#000000',\r\n ]\r\n\r\n return (\r\n \r\n {hasChildren &&\r\n children.map(({ id, type }, num) => {\r\n let selectedElement = {},\r\n nextStrokeColor = '',\r\n islocked = false\r\n\r\n data.layers[0].children.forEach((element, index) => {\r\n if (element.id === this.props.selectedItem) {\r\n selectedElement = element\r\n\r\n islocked = element.locked\r\n\r\n strokeColors.forEach((color, colorIndex) => {\r\n if (color === selectedElement.strokeColor) {\r\n nextStrokeColor =\r\n strokeColors[colorIndex + 1]\r\n }\r\n })\r\n\r\n if (!nextStrokeColor) {\r\n nextStrokeColor = '#ff0000'\r\n }\r\n }\r\n })\r\n\r\n return (\r\n \r\n {`${getText(type)} شماره ${num + 1}`}\r\n\r\n {this.props.selectedItem === id && (\r\n
    \r\n {/* onChangeLockClick(this.props)}\r\n >\r\n \r\n {islocked ? 'lock' : 'lock_open'}\r\n \r\n */}\r\n \r\n onStrokeColorClick(\r\n this.props,\r\n nextStrokeColor\r\n )\r\n }\r\n >\r\n \r\n \r\n
    \r\n )}\r\n \r\n )\r\n })}\r\n {!hasChildren && isGroup && (\r\n \r\n )}\r\n
    \r\n )\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport assign from 'object-assign'\r\n\r\nimport Item from './Item'\r\n\r\nimport './Layers.css'\r\n\r\nexport default class Layers extends Component {\r\n static propTypes = {\r\n activeLayer: PropTypes.number,\r\n data: PropTypes.object.isRequired,\r\n selectedItem: PropTypes.string,\r\n selectItem: PropTypes.func\r\n }\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n expanded: {}\r\n }\r\n }\r\n\r\n handleArrowClick = ({ id }) => {\r\n const { expanded } = this.state\r\n this.setState({\r\n expanded: assign({}, expanded, {\r\n [id]: typeof expanded[id] === 'undefined' ? false : !expanded[id]\r\n })\r\n })\r\n }\r\n\r\n handleLabelClick = (item) => {\r\n if (typeof this.props.selectItem === 'function') {\r\n this.props.setTool('select')\r\n this.props.selectItem(item)\r\n }\r\n }\r\n\r\n handleStrokeColorClick = (item, color) => {\r\n if (typeof this.props.changeColorItem === 'function') {\r\n this.props.changeColorItem(item, color)\r\n }\r\n }\r\n\r\n handleLockClick = (item) => {\r\n if (typeof this.props.changeColorItem === 'function') {\r\n const data = this.props.changeLockItem(item)\r\n }\r\n }\r\n\r\n render() {\r\n const { activeLayer, data, selectedItem } = this.props\r\n const { expanded } = this.state\r\n const itemProps = {\r\n data,\r\n activeLayer,\r\n expanded,\r\n selectedItem,\r\n onArrowClick: this.handleArrowClick,\r\n onLabelClick: this.handleLabelClick,\r\n onStrokeColorClick: this.handleStrokeColorClick,\r\n onChangeLockClick: this.handleLockClick\r\n }\r\n return (\r\n
    \r\n

    \r\n layers\r\n لایه‌بندی خطوط\r\n

    \r\n
    \r\n {data.layers.map(({ id, type, children }) => (\r\n \r\n ))}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport PhotoEditor from './PhotoEditor'\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\nimport { compose } from 'recompose'\r\nimport { registerUser } from '../redux/user/actions'\r\nimport { editRoom, getRoom, getRooms } from '../redux/tools/actions'\r\nimport logo from '../assets/img/logo.svg'\r\nimport { NavLink } from 'react-router-dom'\r\nimport randomInt from 'random-int'\r\nimport { Motion, spring } from 'react-motion'\r\nimport axios from 'axios'\r\nimport assign from 'object-assign'\r\nimport pick from 'lodash.pick'\r\nimport update from 'immutability-helper'\r\n\r\nimport {\r\n Layer,\r\n Raster,\r\n Tool,\r\n View,\r\n Circle,\r\n Path,\r\n Rectangle,\r\n PointText,\r\n} from 'react-paper-bindings'\r\n\r\nimport '../assets/scss/placeDetector.scss'\r\n\r\nimport withInitial from '../components/PlaceDetector/hoc/withInitial'\r\nimport withHistory from '../components/PlaceDetector/hoc/withHistory'\r\nimport withFullscreen from '../components/PlaceDetector/hoc/withFullscreen'\r\nimport withTools from '../components/PlaceDetector/hoc/withTools'\r\nimport withMoveTool from '../components/PlaceDetector/hoc/withMoveTool'\r\nimport withSelectTool from '../components/PlaceDetector/hoc/withSelectTool'\r\nimport withPenTool from '../components/PlaceDetector/hoc/withPenTool'\r\nimport withFastPenTool from '../components/PlaceDetector/hoc/withFastPenTool'\r\nimport withCircleTool from '../components/PlaceDetector/hoc/withCircleTool'\r\nimport withRectangleTool from '../components/PlaceDetector/hoc/withRectangleTool'\r\nimport withDeleteTool from '../components/PlaceDetector/hoc/withDeleteTool'\r\nimport withPerspectiveTool from '../components/PlaceDetector/hoc/withPerspectiveTool'\r\nimport withCubeTool from '../components/PlaceDetector/hoc/withCubeTool'\r\nimport withDynamicCubeTool from '../components/PlaceDetector/hoc/withDynamicCubeTool'\r\n\r\nimport Toolbar from '../components/PlaceDetector/Toolbar/Toolbar'\r\nimport Menu from '../components/PlaceDetector/Menu/Menu'\r\nimport Loader from '../components/PlaceDetector/Loader/Loader'\r\nimport Layers from '../components/PlaceDetector/Layers/Layers'\r\nimport { saveData } from '../redux/placeDetector/actions'\r\n\r\nclass PlaceDetector extends Component {\r\n static propTypes = {\r\n image: PropTypes.any.isRequired,\r\n imageWidth: PropTypes.number.isRequired,\r\n imageHeight: PropTypes.number.isRequired,\r\n imageSize: PropTypes.number.isRequired,\r\n initialData: PropTypes.any.isRequired,\r\n width: PropTypes.number.isRequired,\r\n height: PropTypes.number.isRequired,\r\n activeTool: PropTypes.string,\r\n activeLayer: PropTypes.number,\r\n data: PropTypes.object.isRequired,\r\n selectedItem: PropTypes.string,\r\n fitImage: PropTypes.func.isRequired,\r\n setTool: PropTypes.func.isRequired,\r\n selectItem: PropTypes.func.isRequired,\r\n selectToolKeyDown: PropTypes.func.isRequired,\r\n selectToolKeyUp: PropTypes.func.isRequired,\r\n selectToolMouseDown: PropTypes.func.isRequired,\r\n selectToolMouseDrag: PropTypes.func.isRequired,\r\n selectToolMouseUp: PropTypes.func.isRequired,\r\n moveToolMouseDown: PropTypes.func.isRequired,\r\n moveToolMouseDrag: PropTypes.func.isRequired,\r\n moveToolMouseUp: PropTypes.func.isRequired,\r\n moveToolMouseWheel: PropTypes.func.isRequired,\r\n penToolMouseDown: PropTypes.func.isRequired,\r\n penToolMouseDrag: PropTypes.func.isRequired,\r\n penToolMouseUp: PropTypes.func.isRequired,\r\n circleToolMouseDown: PropTypes.func.isRequired,\r\n rectangleToolMouseDown: PropTypes.func.isRequired,\r\n deleteToolMouseDown: PropTypes.func.isRequired,\r\n perspectiveItem: PropTypes.func,\r\n }\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n imageLoaded: false,\r\n loaded: false,\r\n showLayers: true,\r\n size: [randomInt(40, 320), randomInt(40, 320)],\r\n open: false,\r\n }\r\n\r\n this._view = null\r\n }\r\n\r\n save = () => {\r\n const data = JSON.parse(window.localStorage.getItem('rooms'))\r\n const roomId = this.props.match.params.id\r\n let roomIndex\r\n data.rooms.forEach((element, index) => {\r\n if (element.id == roomId) {\r\n roomIndex = index\r\n }\r\n })\r\n const newRooms = update(data, {\r\n rooms: {\r\n [roomIndex]: { $set: this.props.data },\r\n },\r\n })\r\n\r\n window.localStorage.setItem('rooms', JSON.stringify(newRooms))\r\n\r\n this.setState({ imageLoaded: false, loaded: false })\r\n\r\n setTimeout(() => {\r\n this.setState({ imageLoaded: true, loaded: true })\r\n }, 500)\r\n this.props.saveData(roomId, this.props.data.layers)\r\n\r\n // console.log(JSON.stringify(this.props.data));\r\n // const json = this._view.scope.project.exportJSON();\r\n // const svg = this._view.scope.project.exportSVG({ embedImages: false });\r\n }\r\n\r\n toggleLayers = () => {\r\n this.setState({\r\n showLayers: !this.state.showLayers,\r\n })\r\n }\r\n\r\n imageLoaded = (image) => {\r\n this._loaded = true\r\n this.props.fitImage(image)\r\n this.setState({ imageLoaded: true, loaded: true })\r\n }\r\n\r\n updateFinalData = (data) => {\r\n this.setState({ finalData: data })\r\n }\r\n\r\n componentDidUpdate(nextProps) {\r\n const { image } = this.props\r\n if (image !== nextProps.image) {\r\n this.setState({ imageLoaded: false })\r\n }\r\n }\r\n\r\n render = () => {\r\n const {\r\n activeTool,\r\n activeLayer,\r\n image,\r\n data,\r\n selectedItem,\r\n selectedItems,\r\n setTool,\r\n width,\r\n height,\r\n } = this.props\r\n\r\n const { loaded, imageLoaded, showLayers } = this.state\r\n\r\n const toolbarProps = assign(\r\n pick(this.props, [\r\n 'data',\r\n 'activeTool',\r\n 'animate',\r\n 'fullscreen',\r\n 'imageSize',\r\n 'canUndo',\r\n 'canRedo',\r\n 'photoEditorHandler',\r\n 'stateCubeHandler',\r\n 'stateDynamicCubeHandler',\r\n 'applyCubeSkewChange',\r\n 'confirmCubeHandler',\r\n 'confirmDynamicCubeHandler',\r\n 'deleteCubeHandler',\r\n 'deleteDynamicCubeHandler',\r\n 'getInitialCubeSkewAngle',\r\n 'showCube',\r\n 'showDynamicCube',\r\n 'undo',\r\n 'redo',\r\n 'clearHistory',\r\n 'setTool',\r\n 'toggleAnimation',\r\n 'toggleFullscreen',\r\n 'selectedItem',\r\n 'isSaving',\r\n 'savingError',\r\n 'setDefaultView',\r\n 'perspectiveType',\r\n ]),\r\n {\r\n showLayers,\r\n save: this.save,\r\n toggleLayers: this.toggleLayers,\r\n }\r\n )\r\n\r\n const layerProps = {\r\n data,\r\n activeLayer,\r\n selectedItem,\r\n selectItem: this.props.selectItem,\r\n setTool: this.props.setTool,\r\n changeColorItem: this.props.changeColorItem,\r\n changeLockItem: this.props.changeLockItem,\r\n }\r\n\r\n const menuProps = {\r\n activeTool,\r\n setTool,\r\n x: width / 2,\r\n y: height - 40,\r\n tools: [\r\n { tool: 'delete', icon: 'delete', title: 'حذف مسیر (D)' },\r\n { tool: 'pen', icon: 'create', title: 'رسم مسیر (P)' },\r\n {\r\n tool: 'fastPen',\r\n icon: 'timeline',\r\n title: 'رسم سریع مسیر (P)',\r\n },\r\n { tool: 'select', icon: 'touch_app', title: 'انتخاب مسیر (A)' },\r\n { tool: 'move', icon: 'pan_tool', title: 'جابجایی (V)' },\r\n // { tool: 'circle', icon: 'add_circle', title: 'رسم دایره (C)' },\r\n // { tool: 'rectangle', icon: 'add_box', title: 'رسم مستطیل (R)' }\r\n ],\r\n }\r\n\r\n const viewProps = assign(\r\n pick(this.props, ['activeTool', 'activeLayer', 'width', 'height']),\r\n {\r\n ref: (ref) => (this._view = ref),\r\n onWheel: this.props.moveToolMouseWheel,\r\n matrix: pick(this.props, [\r\n 'sx',\r\n 'sy',\r\n 'tx',\r\n 'ty',\r\n 'x',\r\n 'y',\r\n 'zoom',\r\n ]),\r\n }\r\n )\r\n\r\n return (\r\n \r\n
    \r\n \r\n {/* {loaded && } */}\r\n {!imageLoaded && }\r\n {loaded && showLayers && }\r\n \r\n \r\n \r\n \r\n {data &&\r\n data.layers.map(\r\n ({ id: layerId, type, children, name }) => {\r\n return (\r\n \r\n {children.map(\r\n ({\r\n id: itemId,\r\n type: Item,\r\n ...props\r\n }) => {\r\n const fillColor =\r\n 'rgb(255,255,255,0.05)'\r\n return (\r\n \r\n 0\r\n ? selectedItems.includes(\r\n itemId\r\n )\r\n : itemId ===\r\n selectedItem ||\r\n layerId ===\r\n selectedItem\r\n : false\r\n }\r\n onMouseEnter={(\r\n e\r\n ) => {\r\n if (\r\n this.props\r\n .activeTool ===\r\n 'select' &&\r\n !this.props\r\n .selectedItem\r\n ) {\r\n e.target.fillColor =\r\n e.target.strokeColor._canvasStyle\r\n e.target.opacity = 0.5\r\n }\r\n }}\r\n onMouseLeave={(\r\n e\r\n ) => {\r\n if (\r\n !this.props\r\n .selectedItem\r\n ) {\r\n e.target.fillColor = fillColor\r\n e.target.opacity = 1\r\n }\r\n }}\r\n />\r\n )\r\n }\r\n )}\r\n \r\n )\r\n }\r\n )}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.showCube && this.props.cubeGenerator()}\r\n {this.props.showDynamicCube &&\r\n this.props.dynamicCubeGenerator()}\r\n
    \r\n {this.props.showPhotoEditor && (\r\n
    \r\n {\r\n const roomId = this.props.match.params.id\r\n this.props.editRoom(roomId, file)\r\n this.props.photoEditorHandler()\r\n }}\r\n image={data.image}\r\n onClose={this.props.photoEditorHandler}\r\n />\r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n loading: store.placeDetector.loading,\r\n error: store.placeDetector.error,\r\n isSaving: store.placeDetector.isSaving,\r\n savingError: store.placeDetector.savingError,\r\n room: store.tools.room,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n registerUser: (email, password, firstName, lastName, mobile, history) =>\r\n dispatch(\r\n registerUser(\r\n email,\r\n password,\r\n firstName,\r\n lastName,\r\n mobile,\r\n history\r\n )\r\n ),\r\n saveData: (roomId, data) => dispatch(saveData(roomId, data)),\r\n editRoom: (roomId, file) => dispatch(editRoom(roomId, file)),\r\n getRoom: (id) => dispatch(getRoom(id)),\r\n }\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(\r\n compose(\r\n withInitial,\r\n withHistory,\r\n withFullscreen,\r\n withTools,\r\n withMoveTool,\r\n withSelectTool,\r\n withPerspectiveTool,\r\n withDynamicCubeTool,\r\n withCubeTool,\r\n withPenTool,\r\n withFastPenTool,\r\n withCircleTool,\r\n withRectangleTool,\r\n withDeleteTool\r\n )(PlaceDetector)\r\n)\r\n","import * as types from './constants'\r\nimport apiService from '../../apiService/apiService'\r\n\r\nexport const initialData = (image) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.INITIAL_DATA,\r\n })\r\n }\r\n}\r\n\r\nexport const saveData = (roomId, newData) => {\r\n const data = {\r\n projectData: JSON.stringify({ layers: newData }),\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.SAVE_DATA_STARTED,\r\n })\r\n apiService.rooms\r\n .update(roomId, data)\r\n .then((response) => {\r\n if (response.status == '200' || response.status == '204') {\r\n dispatch({\r\n type: types.SAVE_DATA_SUCCESS,\r\n })\r\n window.location.reload()\r\n } else {\r\n dispatch({\r\n type: types.SAVE_DATA_FAILED,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.SAVE_DATA_FAILED,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n","export const INITIAL_DATA = 'INITIAL_DATA'\r\nexport const SAVE_DATA_STARTED = 'SAVE_DATA_STARTED'\r\nexport const SAVE_DATA_SUCCESS = 'SAVE_DATA_SUCCESS'\r\nexport const SAVE_DATA_FAILED = 'SAVE_DATA_FAILED'\r\n","import React, { Component } from 'react'\r\nimport INITIAL_DATA from '../../../initial-data.json'\r\n\r\nconst IMAGE_WIDTH = 1000\r\nconst IMAGE_HEIGHT = 657\r\n\r\nexport default function withInitial(WrappedComponent) {\r\n return class extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n mounted: false,\r\n }\r\n this._box = null\r\n this._request = null\r\n\r\n let initialData = JSON.parse(window.localStorage.getItem('rooms'))\r\n if (!initialData) {\r\n initialData = INITIAL_DATA\r\n window.localStorage.setItem(\r\n 'rooms',\r\n JSON.stringify(INITIAL_DATA)\r\n )\r\n }\r\n\r\n this._initialData = initialData.rooms.filter(\r\n (d) => d.id == props.match.params.id\r\n )[0]\r\n }\r\n\r\n resizeWindow = () => {\r\n if (!this._request) {\r\n this._request = requestAnimationFrame(this.resizePaper)\r\n }\r\n }\r\n\r\n resizePaper = () => {\r\n this.forceUpdate()\r\n this._request = null\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ mounted: true })\r\n window.addEventListener('resize', this.resizeWindow)\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._request) {\r\n cancelAnimationFrame(this._request)\r\n this._request = null\r\n }\r\n window.removeEventListener('resize', this.resizeWindow)\r\n }\r\n\r\n render() {\r\n const { imageSize, mounted } = this.state\r\n const box = this._box && this._box.getBoundingClientRect()\r\n const initialLocalStorage = window.localStorage.getItem('data')\r\n\r\n return (\r\n \r\n )\r\n }\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport assign from \"object-assign\";\r\nimport update from \"immutability-helper\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nfunction getInitialId() {\r\n const id = uuidv4();\r\n return id;\r\n}\r\n\r\nexport default function withHistory(WrappedComponent) {\r\n return class extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n historyIndex: 0,\r\n history: [props.initialData],\r\n showPhotoEditor: false\r\n };\r\n // this._id = getInitialId(props.initialData)\r\n this._id = getInitialId();\r\n }\r\n\r\n keyDown = (e) => {\r\n if (e.key === \"ArrowLeft\") {\r\n this.undo();\r\n } else if (e.key === \"ArrowRight\") {\r\n this.redo();\r\n }\r\n };\r\n\r\n changeLockItem = (item) => {\r\n const history = this.getPrevHistory();\r\n let itemIndex,\r\n isLocked = false;\r\n history.layers[0].children.forEach((element, index) => {\r\n if (element.id === item.selectedItem) {\r\n itemIndex = index;\r\n isLocked = element.locked;\r\n }\r\n });\r\n\r\n const nextHistory = update(history, {\r\n layers: {\r\n 0: {\r\n children: { [itemIndex]: { locked: { $set: !isLocked } } }\r\n }\r\n }\r\n });\r\n\r\n this.addHistory(nextHistory);\r\n return nextHistory;\r\n };\r\n\r\n changeColorItem = (item, color = \"#0088ff\") => {\r\n const history = this.getPrevHistory();\r\n let itemIndex;\r\n history.layers[0].children.forEach((element, index) => {\r\n if (element.id === item.selectedItem) {\r\n itemIndex = index;\r\n }\r\n });\r\n\r\n const nextHistory = update(history, {\r\n layers: {\r\n 0: {\r\n children: { [itemIndex]: { strokeColor: { $set: color } } }\r\n }\r\n }\r\n });\r\n\r\n this.addHistory(nextHistory);\r\n };\r\n\r\n groupItems = (items) => {\r\n let hasGroup = false;\r\n const history = this.getPrevHistory();\r\n history.layers[0].groups.forEach((group) => {\r\n items.forEach((item) => {\r\n if (group.children.includes(item)) {\r\n hasGroup = true;\r\n }\r\n });\r\n });\r\n if (!hasGroup) {\r\n const nextGroup = {\r\n name: \"Group\",\r\n id: uuidv4(),\r\n children: items\r\n };\r\n const nextHistory = update(history, {\r\n layers: {\r\n 0: { groups: { $push: [nextGroup] } }\r\n }\r\n });\r\n this.addHistory(nextHistory);\r\n return nextGroup;\r\n }\r\n return null;\r\n };\r\n\r\n addItem = (layer, data) => {\r\n const history = this.getPrevHistory();\r\n const layerIndex = history.layers.findIndex(\r\n (l) => l.id === layer.data.id\r\n ) < 0 ? 0 : -1;\r\n const nextItem = assign(data, { id: uuidv4() });\r\n\r\n const nextHistory = update(history, {\r\n layers: layers =>\r\n update(layers || [], {\r\n [layerIndex]: layer =>\r\n update(layer || {}, {\r\n children: children => update(children || [], { $push: [nextItem] }),\r\n id: id => update(id || '', {$set: layerIndex}),\r\n type: type => update(type || '', {$set: 'Layer'}),\r\n name: name => update(name || '', {$set: 'Masir Test'}),\r\n }),\r\n })\r\n });\r\n\r\n this.addHistory(nextHistory);\r\n return nextItem;\r\n };\r\n\r\n updateItem = (item, data) => {\r\n const history = this.getPrevHistory();\r\n let layerIndex = history.layers.findIndex(\r\n (l) => l.id === item.layer.data.id\r\n );\r\n\r\n if(layerIndex == -1) layerIndex = 0\r\n const children = history.layers[layerIndex].children;\r\n const itemIndex = children.findIndex((i) => i.id === item.data.id);\r\n const nextItem = assign({}, children[itemIndex], data);\r\n const nextHistory = update(history, {\r\n layers: {\r\n [layerIndex]: { children: { [itemIndex]: { $set: nextItem } } }\r\n }\r\n });\r\n\r\n this.addHistory(nextHistory);\r\n return nextItem;\r\n };\r\n\r\n updateItemById = (id, layerIndex, data) => {\r\n const history = this.getPrevHistory();\r\n const children = history.layers[layerIndex].children;\r\n const itemIndex = children.findIndex((i) => i.id === id);\r\n const nextItem = assign({}, children[itemIndex], data);\r\n const nextHistory = update(history, {\r\n layers: {\r\n [layerIndex]: { children: { [itemIndex]: { $set: nextItem } } }\r\n }\r\n });\r\n this.addHistory(nextHistory);\r\n \r\n return nextItem;\r\n };\r\n\r\n removeItem = (item) => {\r\n const history = this.getPrevHistory();\r\n let layerIndex = history.layers.findIndex(\r\n (l) => l.id === item.layer.data.id\r\n );\r\n if(layerIndex < 0) layerIndex = 0\r\n const children = history.layers[layerIndex].children;\r\n const itemIndex = children.findIndex((i) => i.id === item.data.id);\r\n const nextHistory = update(history, {\r\n layers: {\r\n [layerIndex]: { children: { $splice: [[itemIndex, 1]] } }\r\n }\r\n });\r\n this.addHistory(nextHistory);\r\n };\r\n\r\n addHistory = (nextHistory) => {\r\n const historyIndex = this.state.historyIndex + 1;\r\n const history = [\r\n ...this.state.history.slice(0, historyIndex),\r\n nextHistory\r\n ];\r\n this.setState({ historyIndex, history });\r\n };\r\n\r\n getPrevHistory = () => {\r\n return this.state.history[this.state.historyIndex];\r\n };\r\n\r\n clearHistory = () => {\r\n this.setState({\r\n historyIndex: 0,\r\n history: [this.props.initialData]\r\n });\r\n };\r\n\r\n undo = () => {\r\n const { historyIndex, history } = this.state;\r\n if (historyIndex <= 0) {\r\n return;\r\n }\r\n this.setState({\r\n historyIndex: historyIndex - 1,\r\n items: history[historyIndex]\r\n });\r\n };\r\n\r\n redo = () => {\r\n const { historyIndex, history } = this.state;\r\n if (historyIndex >= history.length - 1) {\r\n return;\r\n }\r\n this.setState({\r\n historyIndex: historyIndex + 1,\r\n items: history[historyIndex + 1]\r\n });\r\n };\r\n\r\n photoEditorHandler = () => {\r\n this.setState({ showPhotoEditor: !this.state.showPhotoEditor });\r\n };\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"keydown\", this.keyDown);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"keydown\", this.keyDown);\r\n }\r\n\r\n render() {\r\n const { historyIndex, history } = this.state;\r\n return (\r\n 0}\r\n canRedo={history.length > 1 && historyIndex + 1 < history.length}\r\n showPhotoEditor={this.state.showPhotoEditor}\r\n photoEditorHandler={this.photoEditorHandler}\r\n undo={this.undo}\r\n redo={this.redo}\r\n clearHistory={this.clearHistory}\r\n />\r\n );\r\n }\r\n };\r\n}\r\n","import React, { Component } from 'react'\r\n\r\nexport default function withFullscreen(WrappedComponent) {\r\n\r\n return class extends Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n fullscreen: false,\r\n }\r\n }\r\n\r\n toggleFullscreen = () => {\r\n if (!this.state.fullscreen) {\r\n if (document.documentElement.requestFullscreen) {\r\n document.documentElement.requestFullscreen()\r\n } else if (document.documentElement.msRequestFullscreen) {\r\n document.documentElement.msRequestFullscreen()\r\n } else if (document.documentElement.mozRequestFullScreen) {\r\n document.documentElement.mozRequestFullScreen()\r\n } else if (document.documentElement.webkitRequestFullscreen) {\r\n document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)\r\n }\r\n } else {\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen()\r\n } else if (document.msExitFullscreen) {\r\n document.msExitFullscreen()\r\n } else if (document.mozCancelFullScreen) {\r\n document.mozCancelFullScreen()\r\n } else if (document.webkitExitFullscreen) {\r\n document.webkitExitFullscreen()\r\n }\r\n }\r\n }\r\n\r\n fullScreenChange = () => {\r\n this.setState({ fullscreen: !this.state.fullscreen })\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener('webkitfullscreenchange', this.fullScreenChange)\r\n document.addEventListener('mozfullscreenchange', this.fullScreenChange)\r\n document.addEventListener('fullscreenchange', this.fullScreenChange)\r\n document.addEventListener('MSFullscreenChange', this.fullScreenChange)\r\n }\r\n\r\n componentWillUnmount() {\r\n document.addEventListener('webkitfullscreenchange', this.fullScreenChange)\r\n document.addEventListener('mozfullscreenchange', this.fullScreenChange)\r\n document.addEventListener('fullscreenchange', this.fullScreenChange)\r\n document.addEventListener('MSFullscreenChange', this.fullScreenChange)\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react'\r\n\r\nexport default function withTools(WrappedComponent) {\r\n return class extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n activeTool: 'move'\r\n }\r\n this._prevTool = null\r\n }\r\n\r\n setTool = (activeTool) => {\r\n this.setState({ activeTool })\r\n }\r\n\r\n keyDown = (e) => {\r\n if (e.code === 'Space' && this.state.activeTool !== 'move') {\r\n this._prevTool = this.state.activeTool\r\n this.setState({ activeTool: 'move' })\r\n } else if (e.key === 'v') {\r\n this.setState({ activeTool: 'move' })\r\n } else if (e.key === 'a') {\r\n this.setState({ activeTool: 'select' })\r\n } else if (e.key === 'p') {\r\n this.setState({ activeTool: 'pen' })\r\n } else if (e.key === 'l') {\r\n this.setState({ activeTool: 'fastPen' })\r\n } else if (e.key === 'c') {\r\n this.setState({ activeTool: 'circle' })\r\n } else if (e.key === 'r') {\r\n this.setState({ activeTool: 'rectangle' })\r\n } else if (e.key === 'd') {\r\n this.setState({ activeTool: 'delete' })\r\n }\r\n }\r\n\r\n keyUp = (e) => {\r\n if (\r\n e.code === 'Space' &&\r\n this.state.activeTool === 'move' &&\r\n this._prevTool !== 'move'\r\n ) {\r\n this.setTool(this._prevTool)\r\n this._prevTool = null\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener('keydown', this.keyDown)\r\n document.addEventListener('keyup', this.keyUp)\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener('keydown', this.keyDown)\r\n document.removeEventListener('keyup', this.keyUp)\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\n\r\nconst ZOOM_FACTOR = 1.08\r\n\r\nexport default function withMoveTool(WrappedComponent) {\r\n return class extends Component {\r\n state = {\r\n sx: 0, // scale center x\r\n sy: 0, // scale center y\r\n tx: 0, // translate x\r\n ty: 0, // translate y\r\n x: 0,\r\n y: 0,\r\n zoom: 1,\r\n }\r\n\r\n _pan = null\r\n _pinch = null\r\n _raster = null\r\n _view = null\r\n\r\n /**\r\n * Fit image into viewport\r\n *\r\n * @param {Raster} raster Paper.js Raster instance\r\n */\r\n fitImage = (raster) => {\r\n this._raster = raster\r\n this._view = raster.view\r\n const { width, height } = this.props\r\n\r\n const imageWidth = raster.image.naturalWidth\r\n const imageHeight = raster.image.naturalHeight\r\n\r\n // fit raster into original image size\r\n raster.fitBounds(0, 0, imageWidth, imageHeight)\r\n // if image is already loaded\r\n // do not attempt to fit it again\r\n if (this._imageLoaded) {\r\n return\r\n }\r\n // calculate zoom\r\n const wr = width / imageWidth\r\n const hr = height / imageHeight\r\n const zoom = wr < hr ? wr : hr\r\n // calculate new image size\r\n const iw = imageWidth * zoom\r\n const ih = imageHeight * zoom\r\n // calculate needed translation xy\r\n const tx = (width - iw) / 2 / zoom\r\n const ty = (height - ih) / 2 / zoom\r\n // calculate center xy\r\n const x = this.state.x + tx\r\n const y = this.state.y + ty\r\n // center the image in the middle\r\n this.setState({ tx, ty, x, y, zoom }, () => {\r\n // TODO: try to find a better solution\r\n // reset translation xy to prevent zoom problems\r\n this.setState({ tx: 0, ty: 0 })\r\n })\r\n // set image loaded\r\n this._imageLoaded = true\r\n\r\n const center = this._view.center\r\n this._defaultViewSettings = { center }\r\n }\r\n\r\n /**\r\n * Get pinch zoom event data\r\n *\r\n * @param {ToolEvent} e Paper.js ToolEvent\r\n * @return {Object} Object representing pinch zoom event\r\n */\r\n getPinchEventData(e) {\r\n const {\r\n event: {\r\n target: { offsetLeft, offsetTop },\r\n touches,\r\n },\r\n } = e\r\n // touch points\r\n const x0 = touches[0].pageX - offsetLeft\r\n const y0 = touches[0].pageY - offsetTop\r\n const x1 = touches[1].pageX - offsetLeft\r\n const y1 = touches[1].pageY - offsetTop\r\n // center point between fingers\r\n const center = [(x0 + x1) / 2, (y0 + y1) / 2]\r\n // distance between fingers\r\n const distance = Math.sqrt(\r\n Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2)\r\n )\r\n // return object describing touch state\r\n return { center, distance }\r\n }\r\n\r\n /**\r\n * Get pinch zoom state data\r\n *\r\n * @param {Object} prev Previous pinch zoom event data\r\n * @param {Object} next Next pinch zoom event data\r\n * @return {Object} Next pinch zoom state\r\n */\r\n getPinchEventState(e, prev, next) {\r\n const { x, y, zoom } = this.state\r\n const {\r\n tool: { view },\r\n } = e\r\n const center = view.viewToProject(next.center)\r\n const t = center.subtract(view.viewToProject(prev.center))\r\n const scale = next.distance / prev.distance\r\n return {\r\n tx: t.x,\r\n ty: t.y,\r\n sx: center.x,\r\n sy: center.y,\r\n x: x + t.x,\r\n y: y + t.y,\r\n zoom: zoom * scale,\r\n }\r\n }\r\n\r\n /**\r\n * Get pan event data\r\n *\r\n * @param {ToolEvent} e Paper.js ToolEvent\r\n * @return {Object} Object representing pan event\r\n */\r\n getPanEventData(e) {\r\n const {\r\n point,\r\n event: { touches, pageX, pageY },\r\n tool: { view },\r\n } = e\r\n return {\r\n point: view.projectToView(point),\r\n x: touches ? touches[0].pageX : pageX,\r\n y: touches ? touches[0].pageY : pageY,\r\n }\r\n }\r\n\r\n /**\r\n * Get pan event state\r\n *\r\n * @param {ToolEvent} e Paper.js ToolEvent\r\n * @param {Object} prev Previous pan event data\r\n * @param {Object} next Next pan event data\r\n * @return {Object} Next pan state data\r\n */\r\n getPanEventState(e, prev, next) {\r\n const { x, y } = this.state\r\n const {\r\n point,\r\n tool: { view },\r\n } = e\r\n const t = point.subtract(view.viewToProject(prev.point))\r\n return {\r\n tx: t.x,\r\n ty: t.y,\r\n x: x + t.x,\r\n y: y + t.y,\r\n }\r\n }\r\n\r\n /**\r\n * Mouse wheel handler\r\n *\r\n * @param {SyntheticEvent} e React's SyntheticEvent\r\n * @param {PaperScope} view Paper.js PaperScope instance\r\n */\r\n mouseWheel = (e) => {\r\n if (!this._imageLoaded) {\r\n return\r\n }\r\n const view = this._view\r\n const { clientX, clientY, nativeEvent } = e\r\n const { offsetLeft, offsetTop } = nativeEvent.target\r\n // get wheel delta\r\n const delta = -e.deltaY || e.wheelDelta\r\n // calculate new zoom from wheel event delta\r\n const newZoom = delta > 0 ? 1 * ZOOM_FACTOR : 1 / ZOOM_FACTOR\r\n // convert mouse point to project space\r\n const center = view.viewToProject(\r\n clientX - offsetLeft,\r\n clientY - offsetTop\r\n )\r\n // transform view\r\n view.scale(newZoom, center)\r\n // stop event\r\n e.preventDefault()\r\n }\r\n\r\n /**\r\n * Mouse down handler\r\n *\r\n * @param {ToolEvent} e Paper.js ToolEvent\r\n */\r\n mouseDown = (e) => {\r\n //this._pan = this.getPanEventData(e)\r\n }\r\n\r\n /**\r\n * Mouse drag handler\r\n *\r\n * @TODO: fix start pan glitch\r\n * @TODO: transforming view manually is much faster,\r\n * figure out how to do it fast with react\r\n *\r\n * @param {ToolEvent} e Paper.js ToolEvent\r\n */\r\n mouseDrag = (e) => {\r\n const {\r\n event: { touches },\r\n tool: { view },\r\n } = e\r\n if (touches && touches.length === 2) {\r\n // pinch zoom\r\n if (!this._pinch) {\r\n this._pinch = this.getPinchEventData(e)\r\n return\r\n }\r\n const prev = this._pinch\r\n const next = this.getPinchEventData(e)\r\n //this.setState(this.getPinchEventState(e, prev, next))\r\n const { sx, sy, tx, ty, zoom } = this.getPinchEventState(\r\n e,\r\n prev,\r\n next\r\n )\r\n view.scale(zoom / this.state.zoom, [sx, sy])\r\n view.translate(tx, ty)\r\n this._pinch = next\r\n } else {\r\n // pan\r\n if (!this._pan) {\r\n this._pan = this.getPanEventData(e)\r\n return\r\n }\r\n const prev = this._pan\r\n const next = this.getPanEventData(e)\r\n //this.setState(this.getPanEventState(e, prev, next))\r\n // transform view manually\r\n const { tx, ty } = this.getPanEventState(e, prev, next)\r\n view.translate(tx, ty)\r\n this._pan = next\r\n }\r\n }\r\n\r\n /**\r\n * Mouse up handler\r\n *\r\n * @param {ToolEvent} e Paper.js ToolEvent\r\n */\r\n mouseUp = (e) => {\r\n this._pan = null\r\n this._pinch = null\r\n }\r\n\r\n /**\r\n * To set the fit image to default state\r\n *\r\n */\r\n setDefaultView = () => {\r\n const { center } = this._defaultViewSettings\r\n this._view.zoom = 1\r\n this._view.center = center\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport DragTracker from '../Cube/lib/drag-tracker'\r\nimport '../Cube/cube.css'\r\nimport { createPatternFromImage } from '../../../helper/fileHelper'\r\nimport {\r\n updateCubeByNodes,\r\n updateCubeSkewAngle,\r\n warpOnCubeWithControls,\r\n} from '../../../helper/drawHelper'\r\n\r\nexport default function withDynamicCubeTool(WrappedComponent) {\r\n return class PerspectiveTool extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n _dynamicCubeState: {\r\n ...this._defaultData,\r\n },\r\n showDynamicCube: false,\r\n showMenuCube: false,\r\n type: 1,\r\n }\r\n }\r\n\r\n _defaultData = {}\r\n\r\n dynamicCubeGenerator = () => {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n stateDynamicCubeHandler = (state = null, type = 6, callback) => {\r\n this.setState(\r\n {\r\n showDynamicCube:\r\n state === null ? !this.state.showDynamicCube : state,\r\n },\r\n () => {\r\n if (state) {\r\n this.initialDynamicCube(type)\r\n\r\n if (callback) callback()\r\n } else this.clearNodes()\r\n }\r\n )\r\n }\r\n\r\n clearNodes = () => {\r\n document.querySelectorAll('.node').forEach((node) => node.remove())\r\n }\r\n\r\n initialDynamicCube = (type = 1) => {\r\n let points = []\r\n let cornerPoints = [\r\n [0, 0],\r\n [0, 0],\r\n [0, 0],\r\n [0, 0],\r\n ]\r\n let breakRatio = null\r\n let skewAngle = Math.PI / 4\r\n let isNew = true\r\n\r\n this.props.data.layers[0].children.forEach((element, index) => {\r\n if (\r\n element.id === this.props.selectedItem &&\r\n element.dimension\r\n ) {\r\n isNew = false\r\n this.pathData = element.pathData\r\n const offsetX = document.querySelector('.Paper canvas')\r\n .offsetLeft\r\n\r\n cornerPoints = element.cubeData.cornerPoints.map((q) => {\r\n return [q[0] + 0, q[1]]\r\n })\r\n breakRatio = element.cubeData.breakRatio\r\n skewAngle = element.cubeData.skewAngle\r\n\r\n points = this.getCubePoint(\r\n element.dimension,\r\n element.dimType\r\n )\r\n } else if (element.id === this.props.selectedItem) {\r\n this.pathData = element.pathData\r\n points = this.getCubePointFromPath(type)\r\n }\r\n })\r\n\r\n this.points = points\r\n this.corner_points = cornerPoints\r\n this.skewAngle = skewAngle\r\n this.setState({ type })\r\n\r\n const canvas = document.getElementById('dynamic-cube-canvas')\r\n\r\n warpOnCubeWithControls(\r\n canvas,\r\n points,\r\n type,\r\n '/images/materials/material1.jpg',\r\n this.props.width,\r\n this.props.height,\r\n this.pathData,\r\n cornerPoints,\r\n breakRatio,\r\n skewAngle,\r\n isNew,\r\n ({ points, cornerPoints, breakRatio }) => {\r\n this.points = points\r\n this.cornerPoints = cornerPoints\r\n this.breakRatio = breakRatio\r\n }\r\n )\r\n\r\n document.body.addEventListener('mousedown', this.onMouseDown)\r\n }\r\n\r\n getCubePoint = (dimension, type = 1) => {\r\n let points = []\r\n\r\n const offsetX = document.querySelector('.Paper canvas').offsetLeft\r\n\r\n dimension.forEach((dim, index) => {\r\n points[index] = [dim.x + offsetX, dim.y]\r\n })\r\n\r\n return points\r\n }\r\n\r\n getCubePointFromPath = (type) => {\r\n const paper = window.paper\r\n const canvas = document.getElementById('selection')\r\n paper.setup(canvas)\r\n paper.project.clear()\r\n const path = new paper.Path(this.pathData)\r\n\r\n const bounds = path.internalBounds\r\n let points = []\r\n if (type == 1) {\r\n points[0] = [bounds.left, bounds.top]\r\n points[1] = [bounds.right, bounds.top]\r\n points[2] = [bounds.right, bounds.bottom]\r\n points[3] = [bounds.left, bounds.bottom]\r\n points[4] = [bounds.right, bounds.bottom]\r\n points[5] = [bounds.left, bounds.bottom]\r\n } else if (type == 2) {\r\n points[0] = [\r\n bounds.centerX + (bounds.right - bounds.centerX) / 3,\r\n bounds.top,\r\n ]\r\n points[1] = [\r\n bounds.centerX - (bounds.centerX - bounds.left) / 3,\r\n bounds.top,\r\n ]\r\n points[2] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points[3] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points[4] = [(bounds.centerX + bounds.left) / 2, bounds.bottom]\r\n points[5] = [(bounds.centerX + bounds.right) / 2, bounds.bottom]\r\n } else if (type == 3) {\r\n points[0] = [bounds.left, bounds.top]\r\n points[1] = [(bounds.centerX + bounds.right) / 2, bounds.top]\r\n points[2] = [bounds.right, (bounds.top + bounds.centerY) / 2]\r\n points[3] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points[4] = [bounds.right, bounds.bottom]\r\n points[5] = [(bounds.centerX + bounds.left) / 2, bounds.bottom]\r\n } else if (type == 4) {\r\n points[0] = [(bounds.centerX + bounds.left) / 2, bounds.top]\r\n points[1] = [bounds.right, bounds.top]\r\n points[2] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points[3] = [bounds.left, (bounds.top + bounds.centerY) / 2]\r\n points[4] = [(bounds.centerX + bounds.right) / 2, bounds.bottom]\r\n points[5] = [bounds.left, bounds.bottom]\r\n } else if (type == 5) {\r\n points[0] = [bounds.left, bounds.top]\r\n points[1] = [(bounds.centerX + bounds.right) / 2, bounds.top]\r\n points[2] = [bounds.right, (bounds.top + bounds.centerY) / 2]\r\n points[3] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points[4] = [bounds.left, (bounds.bottom + bounds.centerY) / 2]\r\n points[5] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points[6] = [bounds.right, bounds.bottom]\r\n points[7] = [(bounds.centerX + bounds.left) / 2, bounds.bottom]\r\n } else if (type == 6) {\r\n points[0] = [(bounds.centerX + bounds.left) / 2, bounds.top]\r\n points[1] = [bounds.right, bounds.top]\r\n points[2] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points[3] = [bounds.left, (bounds.top + bounds.centerY) / 2]\r\n points[4] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points[5] = [bounds.right, (bounds.bottom + bounds.centerY) / 2]\r\n points[6] = [(bounds.centerX + bounds.right) / 2, bounds.bottom]\r\n points[7] = [bounds.left, bounds.bottom]\r\n } else if (type == 7) {\r\n // TODO: AMIR CHECK\r\n points[0] = [bounds.centerX, bounds.top]\r\n points[1] = [bounds.right, bounds.centerY]\r\n points[2] = [bounds.centerX, bounds.centerY]\r\n points[3] = [bounds.left, bounds.centerY]\r\n points[4] = [\r\n bounds.centerX,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points[5] = [bounds.right, (bounds.bottom + bounds.centerY) / 2]\r\n points[6] = [bounds.centerX, bounds.bottom]\r\n points[7] = [bounds.left, (bounds.bottom + bounds.centerY) / 2]\r\n }\r\n\r\n const offsetX = document.querySelector('.Paper canvas').offsetLeft\r\n for (const key in points) {\r\n points[key][0] += offsetX\r\n }\r\n\r\n return points\r\n }\r\n\r\n confirmDynamicCubeHandler = () => {\r\n const offsetX = document.querySelector('.Paper canvas').offsetLeft\r\n const offsetY = document.querySelector('.Paper canvas').offsetTop\r\n const { type } = this.state\r\n \r\n const dimension = this.points.map((point, index) => {\r\n return {\r\n x: point[0] - offsetX,\r\n y: point[1],\r\n }\r\n })\r\n const cornerPoints = this.cornerPoints.map((point, index) => {\r\n return [point[0] - 0, point[1]]\r\n })\r\n this.props.updateItemById(this.props.selectedItem, 0, {\r\n dimension: dimension.filter((node) => node != null),\r\n cubeData: {\r\n cornerPoints,\r\n breakRatio: this.breakRatio,\r\n skewAngle: this.skewAngle,\r\n },\r\n dimType: type,\r\n plan: this.getPlanOfType(type),\r\n perspective: type,\r\n })\r\n\r\n this.stateDynamicCubeHandler(false)\r\n }\r\n\r\n deleteDynamicCubeHandler = () => {\r\n this.props.updateItemById(this.props.selectedItem, 0, {\r\n dimension: null,\r\n cubeData: null,\r\n dimType: null,\r\n plan: null,\r\n perspective: null,\r\n })\r\n\r\n this.stateDynamicCubeHandler(false)\r\n }\r\n\r\n getInitialCubeSkewAngle = () => {\r\n return (this.skewAngle * 180) / Math.PI\r\n }\r\n\r\n applyCubeSkewChange = (skewAngle) => {\r\n this.skewAngle = (skewAngle / 180) * Math.PI\r\n // TODO: DRAW AGAIN\r\n updateCubeSkewAngle(\r\n this.skewAngle,\r\n ({ points, cornerPoints, breakRatio }) => {\r\n this.points = points\r\n this.cornerPoints = cornerPoints\r\n this.breakRatio = breakRatio\r\n }\r\n )\r\n }\r\n\r\n onMouseDown = (e) => {\r\n if (e.target.classList.contains('node')) {\r\n this.node = e.target\r\n\r\n document.body.addEventListener('mousemove', this.onMouseMove)\r\n\r\n document.body.onmouseup = () => {\r\n document.body.removeEventListener(\r\n 'mousemove',\r\n this.onMouseMove\r\n )\r\n }\r\n }\r\n }\r\n\r\n onMouseMove = (e) => {\r\n updateCubeByNodes(\r\n e,\r\n this.node,\r\n ({ points, cornerPoints, breakRatio }) => {\r\n this.points = points\r\n this.cornerPoints = cornerPoints\r\n this.breakRatio = breakRatio\r\n }\r\n )\r\n }\r\n\r\n getPlanOfType = (type) => {\r\n switch (type) {\r\n case 1:\r\n return '1'\r\n break\r\n case 2:\r\n case 3:\r\n case 4:\r\n return '2'\r\n break\r\n case 5:\r\n case 6:\r\n case 7:\r\n return '3'\r\n break\r\n }\r\n }\r\n\r\n getFacesOfType = (type, index) => {\r\n if (type >= 5) {\r\n let faces = null\r\n switch (type) {\r\n case 5:\r\n faces = [\r\n ['Left'], // 0\r\n ['Up', 'Left'], // 1\r\n ['Up'], // 2\r\n ['Up', 'Left', 'Right'], // 3\r\n ['Up', 'Right'], // 4\r\n ['Left', 'Right'], // 5\r\n ['Right'], //6\r\n ]\r\n break\r\n case 6:\r\n faces = [\r\n ['Up'], // 0\r\n ['Up', 'Right'], // 1\r\n ['Right'], // 2\r\n ['Up', 'Left'], // 3\r\n ['Up', 'Left', 'Right'], // 4\r\n ['Left'], // 5\r\n ['Left', 'Right'], // 6\r\n ]\r\n break\r\n case 7:\r\n faces = [\r\n ['Left'], // 0\r\n ['Up', 'Left'], // 1\r\n ['Up'], // 2\r\n ['Up', 'Left', 'Right'], // 3\r\n ['Up', 'Right'], // 4\r\n ['Left', 'Right'], // 5\r\n ['Right'], // 6\r\n ]\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n return faces[index]\r\n } else {\r\n return null\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport DragTracker from '../Cube/lib/drag-tracker'\r\nimport '../Cube/cube.css'\r\n\r\nexport default function withCubeTool(WrappedComponent) {\r\n return class PerspectiveTool extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n _svgState: {\r\n nodeRadius: 10,\r\n nodes: [],\r\n lines: [],\r\n polygons: [],\r\n selectedNode: null,\r\n },\r\n showCube: false,\r\n showMenuCube: false,\r\n type: 1,\r\n }\r\n }\r\n\r\n pointsArray = (type) => {\r\n var points = [\r\n // 1\r\n {\r\n p1: [373, 288],\r\n p2: [553, 288],\r\n p3: [553, 288], //\r\n p4: [373, 288], //\r\n p5: [373, 288], //\r\n p6: [553, 288], //\r\n p7: [553, 434],\r\n p8: [373, 434],\r\n },\r\n // 2\r\n {\r\n p1: [373, 288],\r\n p2: [553, 271],\r\n p3: [651, 314],\r\n p4: [479, 330],\r\n p5: [378, 422],\r\n p6: [562, 398],\r\n p7: [664, 434],\r\n p8: [484, 463],\r\n },\r\n // 3\r\n {\r\n p1: [373, 288],\r\n p2: [553, 271],\r\n p3: [651, 314],\r\n p4: [479, 330],\r\n p5: [479, 330], //\r\n p6: [651, 314], //\r\n p7: [664, 434],\r\n p8: [484, 463],\r\n },\r\n // 4\r\n {\r\n p1: [480, 270],\r\n p2: [651, 271],\r\n p3: [553, 315],\r\n p4: [373, 315],\r\n p5: [373, 315], //\r\n p6: [553, 315], //\r\n p7: [553, 434],\r\n p8: [373, 434],\r\n },\r\n // 5\r\n {\r\n p1: [373, 288],\r\n p2: [553, 271],\r\n p3: [651, 314],\r\n p4: [479, 330],\r\n p5: [378, 422],\r\n p6: [562, 398],\r\n p7: [664, 434],\r\n p8: [484, 463],\r\n },\r\n // 6\r\n {\r\n p1: [374, 281],\r\n p2: [502, 273],\r\n p3: [412, 311],\r\n p4: [275, 315],\r\n p5: [378, 421],\r\n p6: [504, 421],\r\n p7: [409, 467],\r\n p8: [275, 467],\r\n },\r\n // 7\r\n {\r\n p1: [515, 240],\r\n p2: [630, 270],\r\n p3: [520, 300],\r\n p4: [410, 280],\r\n p5: [520, 410],\r\n p6: [630, 430],\r\n p7: [530, 460],\r\n p8: [415, 440],\r\n },\r\n ]\r\n\r\n return points[type]\r\n }\r\n\r\n // points = this.pointsArray(1);\r\n\r\n polygons = [\r\n [1, 5, 6, 2], //back\r\n [8, 5, 6, 7], //bottom\r\n [2, 3, 7, 6], //right\r\n [1, 4, 8, 5], //left\r\n [4, 3, 7, 8], //front\r\n [1, 2, 3, 4], //top\r\n ]\r\n\r\n // lines = [\r\n // [this.points.p1, this.points.p2],\r\n // [this.points.p1, this.points.p4],\r\n // [this.points.p1, this.points.p5],\r\n // [this.points.p2, this.points.p3],\r\n // [this.points.p2, this.points.p6],\r\n // [this.points.p3, this.points.p7],\r\n // [this.points.p3, this.points.p4],\r\n // [this.points.p4, this.points.p8],\r\n // [this.points.p5, this.points.p6],\r\n // [this.points.p5, this.points.p8],\r\n // [this.points.p6, this.points.p7],\r\n // [this.points.p7, this.points.p8]\r\n // ];\r\n\r\n colors = [\r\n '#CCE6F424',\r\n '#EEDDEE24',\r\n '#FFDBB524',\r\n '#2D304724',\r\n '#E0A45824',\r\n '#419D7824',\r\n ]\r\n\r\n isInsidePolygon = (point, vs) => {\r\n var x = point[0],\r\n y = point[1]\r\n var inside = false\r\n\r\n for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {\r\n var xi = vs[i][0],\r\n yi = vs[i][1]\r\n var xj = vs[j][0],\r\n yj = vs[j][1]\r\n\r\n if ((xi == x && yi == y) || (xj == x && yj == y)) return\r\n }\r\n\r\n for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {\r\n var xi = vs[i][0],\r\n yi = vs[i][1]\r\n var xj = vs[j][0],\r\n yj = vs[j][1]\r\n\r\n var intersect =\r\n yi > y != yj > y &&\r\n x < ((xj - xi) * (y - yi)) / (yj - yi) + xi\r\n\r\n if (intersect) {\r\n inside = !inside\r\n }\r\n }\r\n return inside\r\n }\r\n\r\n hideBackPoint = () => {\r\n if (this.state._svgState.polygons.length > 0) {\r\n this.setState({\r\n _svgState: {\r\n ...this.state._svgState,\r\n lines: this.state._svgState.lines.map((l) => {\r\n l.hidden = 'visible'\r\n return l\r\n }),\r\n },\r\n })\r\n\r\n for (let index = 2; index < 6; index++) {\r\n const vertices = this.state._svgState.polygons[index].points\r\n .split(' ')\r\n .map((x) => [\r\n parseInt(x.split(',')[0]),\r\n parseInt(x.split(',')[1]),\r\n ])\r\n\r\n const back_points = []\r\n\r\n this.state._svgState.nodes.forEach((n, i) => {\r\n if (this.isInsidePolygon(n.coord, vertices))\r\n back_points.push(n.coord)\r\n })\r\n\r\n if (back_points.length != 0) {\r\n this.setState({\r\n ...this.state._svgState,\r\n lines: this.state._svgState.lines.map((l, i) => {\r\n if (l.hidden == 'visible') {\r\n const hideLine = back_points.some(\r\n (n) =>\r\n (l.start.coord[0] == n[0] &&\r\n l.start.coord[1] == n[1]) ||\r\n (l.end.coord[0] == n[0] &&\r\n l.end.coord[1] == n[1])\r\n )\r\n l.hidden = hideLine ? 'hidden' : 'visible'\r\n }\r\n return l\r\n }),\r\n })\r\n }\r\n }\r\n }\r\n }\r\n\r\n createNode = (x, y, r) => {\r\n return {\r\n coord: [x, y],\r\n\r\n radius: r || this.state._svgState.nodeRadius || 5,\r\n }\r\n }\r\n\r\n addNode = (x, y) => {\r\n this.setState({\r\n _svgState: {\r\n ...this.state._svgState,\r\n nodes: this.state._svgState.nodes.push(\r\n this.createNode(x, y)\r\n ),\r\n },\r\n })\r\n }\r\n\r\n addLine = (x1, y1, x2, y2) => {\r\n this.setState({\r\n _svgState: {\r\n ...this.state._svgState,\r\n lines: this.state._svgState.lines.push({\r\n start: this.createNode(x1, y1),\r\n end: this.createNode(x2, y2),\r\n }),\r\n },\r\n })\r\n }\r\n\r\n addPolygons = () => {\r\n let newPolygons = []\r\n\r\n this.polygons.forEach((polygon_vertices, i) => {\r\n let points = []\r\n polygon_vertices.forEach((j) =>\r\n points.push(\r\n `${this.state._svgState.nodes[j - 1].coord[0]},${this.state._svgState.nodes[j - 1].coord[1]\r\n }`\r\n )\r\n )\r\n\r\n newPolygons.push({\r\n points: points.join(' '),\r\n fill: this.colors[i],\r\n })\r\n })\r\n\r\n this.setState({\r\n _svgState: {\r\n ...this.state._svgState,\r\n polygons: [...newPolygons],\r\n },\r\n })\r\n }\r\n\r\n draggingNodeHandler = (line, pos) => {\r\n pos[0] -= 15\r\n\r\n const x = line.coord[0]\r\n const y = line.coord[1]\r\n\r\n this.state._svgState.lines\r\n .filter((l) => l.start.coord[0] == x && l.start.coord[1] == y)\r\n .map((l) => (l.start.coord = pos))\r\n\r\n this.state._svgState.lines\r\n .filter((l) => l.end.coord[0] == x && l.end.coord[1] == y)\r\n .map((l) => (l.end.coord = pos))\r\n\r\n this.state._svgState.nodes\r\n .filter((n) => n.coord[0] == x && n.coord[1] == y)\r\n .map((n) => (n.coord = pos))\r\n\r\n this.addPolygons()\r\n this.hideBackPoint()\r\n\r\n this.setState({\r\n _svgState: { ...this.state._svgState, selectedNode: line },\r\n })\r\n }\r\n\r\n stateCubeHandler = (state = null, type = 6) => {\r\n this.initialCube(type)\r\n\r\n this.setState({\r\n showCube: state === null ? !this.state.showCube : state,\r\n })\r\n }\r\n\r\n realPoints = [\r\n [0, 2, null, null, null, null, 6, 5], // 1\r\n [0, 2, 4, 3, null, null, 6, 5], // 2\r\n [0, 2, 4, 3, null, null, 6, 5], // 3\r\n [0, 2, 4, 3, null, null, 6, 5], // 4\r\n [3, 0, 1, 4, 5, null, 2, 6], // 5\r\n [0, 1, 4, 3, null, 2, 6, 5], // 6\r\n [1, 2, 4, 3, 0, null, 6, 5], // 7\r\n ]\r\n\r\n realPointsSort = [\r\n [1, 2, null, null, null, null, 3, 4], // 1\r\n [1, 2, 3, 6, null, null, 4, 5], // 2\r\n [1, 2, 3, 6, null, null, 4, 5], // 3\r\n [1, 2, 3, 6, null, null, 4, 5], // 4\r\n [5, 1, 2, 6, 4, null, 2, 3], // 5\r\n [1, 2, 7, 6, null, 3, 4, 5], // 6\r\n [2, 3, 4, 7, 1, null, 5, 6], // 7\r\n ]\r\n\r\n getPlanOfType = (type) => {\r\n switch (type) {\r\n case 1:\r\n return '1'\r\n break\r\n case 2:\r\n case 3:\r\n case 4:\r\n return '2'\r\n break\r\n case 5:\r\n case 6:\r\n case 7:\r\n return '3'\r\n break\r\n }\r\n }\r\n\r\n getFacesOfType = (type, index) => {\r\n if (type >= 5) {\r\n let faces = null\r\n switch (type) {\r\n case 5:\r\n faces = [\r\n ['Left'], // 0\r\n ['Up', 'Left'], // 1\r\n ['Up'], // 2\r\n ['Up', 'Left', 'Right'], // 3\r\n ['Up', 'Right'], // 4\r\n ['Left', 'Right'], // 5\r\n ['Right'], //6\r\n ]\r\n break\r\n case 6:\r\n faces = [\r\n ['Up'], // 0\r\n ['Up', 'Right'], // 1\r\n ['Right'], // 2\r\n ['Up', 'Left'], // 3\r\n ['Up', 'Left', 'Right'], // 4\r\n ['Left'], // 5\r\n ['Left', 'Right'], // 6\r\n ]\r\n break\r\n case 7:\r\n faces = [\r\n ['Left'], // 0\r\n ['Up', 'Left'], // 1\r\n ['Up'], // 2\r\n ['Up', 'Left', 'Right'], // 3\r\n ['Up', 'Right'], // 4\r\n ['Left', 'Right'], // 5\r\n ['Right'], // 6\r\n ]\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n return faces[index]\r\n } else {\r\n return null\r\n }\r\n }\r\n\r\n confirmCubeHandler = () => {\r\n const offsetX = document.querySelector('.Paper canvas').offsetLeft\r\n const type = this.state.type\r\n const dimension = this.state._svgState.nodes.map((node, index) => {\r\n const realIndex = this.realPoints[type - 1][index]\r\n if (\r\n this.realPoints[type - 1]\r\n .filter((x) => x !== null)\r\n .includes(realIndex)\r\n ) {\r\n return {\r\n x: node.coord[0] - offsetX,\r\n y: node.coord[1],\r\n pathIndex: this.realPointsSort[type - 1][index],\r\n index: realIndex,\r\n faces: this.getFacesOfType(type, realIndex),\r\n }\r\n }\r\n })\r\n this.props.updateItemById(this.props.selectedItem, 0, {\r\n dimension: dimension.filter((node) => node != null),\r\n dimType: type,\r\n plan: this.getPlanOfType(type),\r\n perspective: type,\r\n })\r\n\r\n this.stateCubeHandler(false)\r\n }\r\n\r\n deleteCubeHandler = () => {\r\n this.props.updateItemById(this.props.selectedItem, 0, {\r\n dimension: null,\r\n dimType: null,\r\n plan: null,\r\n perspective: null,\r\n })\r\n\r\n this.stateCubeHandler(false)\r\n }\r\n\r\n getCubePoint = (dimension, type = 1) => {\r\n let dimPoints = {},\r\n points = {}\r\n const dimPositions = [\r\n [0, 2, 2, 0, 5, 6, 6, 5], // 1\r\n [0, 2, 4, 3, 3, 4, 6, 5], // 2\r\n [0, 2, 4, 3, 3, 4, 6, 5], // 3\r\n [0, 2, 4, 3, 3, 4, 6, 5], // 4\r\n [3, 0, 1, 4, 5, 0, 2, 6], // 5 //5\r\n [0, 1, 4, 3, 0, 2, 6, 5], // 6 //4\r\n [1, 2, 4, 3, 0, null, 6, 5], // 7\r\n ]\r\n\r\n const offsetX = document.querySelector('.Paper canvas').offsetLeft\r\n\r\n dimension.forEach((dim, index) => {\r\n dimPoints[dim.index] = [dim.x + offsetX, dim.y]\r\n })\r\n\r\n for (var i = 0; i < 8; i++) {\r\n points[`p${i + 1}`] = dimPoints[dimPositions[type - 1][i]]\r\n }\r\n\r\n return points\r\n }\r\n\r\n getCubePointFromPath = (element, type) => {\r\n const paper = window.paper\r\n const canvas = document.getElementById('selection')\r\n paper.setup(canvas)\r\n paper.project.clear()\r\n const path = new paper.Path(element.pathData)\r\n\r\n const bounds = path.internalBounds\r\n \r\n let points = {}\r\n if (type == 1) {\r\n points['p1'] = [bounds.left, bounds.top]\r\n points['p2'] = [bounds.right, bounds.top]\r\n points['p3'] = [bounds.right, bounds.top]\r\n points['p4'] = [bounds.left, bounds.top]\r\n points['p5'] = [bounds.left, bounds.top]\r\n points['p6'] = [bounds.right, bounds.top]\r\n points['p7'] = [bounds.right, bounds.bottom]\r\n points['p8'] = [bounds.left, bounds.bottom]\r\n } else if (type == 2) {\r\n points['p1'] = [(bounds.centerX + bounds.left) / 2, bounds.top]\r\n points['p2'] = [(bounds.centerX + bounds.right) / 2, bounds.top]\r\n points['p3'] = [bounds.right, (bounds.top + bounds.centerY) / 2]\r\n points['p4'] = [bounds.left, (bounds.top + bounds.centerY) / 2]\r\n points['p5'] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points['p6'] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points['p7'] = [bounds.right, bounds.bottom]\r\n points['p8'] = [bounds.left, bounds.bottom]\r\n } else if (type == 3) {\r\n points['p1'] = [bounds.left, bounds.top]\r\n points['p2'] = [(bounds.centerX + bounds.right) / 2, bounds.top]\r\n points['p3'] = [bounds.right, (bounds.top + bounds.centerY) / 2]\r\n points['p4'] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points['p5'] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points['p6'] = [bounds.right, (bounds.top + bounds.centerY) / 2]\r\n points['p7'] = [bounds.right, bounds.bottom]\r\n points['p8'] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n bounds.bottom,\r\n ]\r\n } else if (type == 4) {\r\n points['p1'] = [(bounds.centerX + bounds.left) / 2, bounds.top]\r\n points['p2'] = [bounds.right, bounds.top]\r\n points['p3'] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points['p4'] = [bounds.left, (bounds.top + bounds.centerY) / 2]\r\n points['p5'] = [bounds.left, (bounds.top + bounds.centerY) / 2]\r\n points['p6'] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points['p7'] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n bounds.bottom,\r\n ]\r\n points['p8'] = [bounds.left, bounds.bottom]\r\n } else if (type == 5) {\r\n points['p1'] = [bounds.left, bounds.top]\r\n points['p2'] = [(bounds.centerX + bounds.right) / 2, bounds.top]\r\n points['p3'] = [bounds.right, (bounds.top + bounds.centerY) / 2]\r\n points['p4'] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points['p5'] = [\r\n bounds.left,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points['p6'] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points['p7'] = [bounds.right, bounds.bottom]\r\n points['p8'] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n bounds.bottom,\r\n ]\r\n } else if (type == 6) {\r\n points['p1'] = [(bounds.centerX + bounds.left) / 2, bounds.top]\r\n points['p2'] = [bounds.right, bounds.top]\r\n points['p3'] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n (bounds.top + bounds.centerY) / 2,\r\n ]\r\n points['p4'] = [bounds.left, (bounds.top + bounds.centerY) / 2]\r\n points['p5'] = [\r\n (bounds.centerX + bounds.left) / 2,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points['p6'] = [\r\n bounds.right,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points['p7'] = [\r\n (bounds.centerX + bounds.right) / 2,\r\n bounds.bottom,\r\n ]\r\n points['p8'] = [bounds.left, bounds.bottom]\r\n } else if (type == 7) {\r\n // TODO: AMIR CHECK\r\n points['p1'] = [bounds.centerX, bounds.top]\r\n points['p2'] = [bounds.right, bounds.centerY]\r\n points['p3'] = [bounds.centerX, bounds.centerY]\r\n points['p4'] = [bounds.left, bounds.centerY]\r\n points['p5'] = [\r\n bounds.centerX,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points['p6'] = [\r\n bounds.right,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n points['p7'] = [bounds.centerX, bounds.bottom]\r\n points['p8'] = [\r\n bounds.left,\r\n (bounds.bottom + bounds.centerY) / 2,\r\n ]\r\n }\r\n\r\n const offsetX = document.querySelector('.Paper canvas').offsetLeft\r\n for (const key in points) {\r\n points[key][0] += offsetX\r\n }\r\n\r\n return points\r\n }\r\n\r\n initialCube = (type = 1) => {\r\n this.setState({ type: type })\r\n\r\n let points = {}\r\n points = this.pointsArray(type - 1)\r\n if (this.props.selectedItem) {\r\n this.props.data.layers[0].children.forEach((element, index) => {\r\n if (\r\n element.id === this.props.selectedItem &&\r\n element.dimension\r\n ) {\r\n points = this.getCubePoint(\r\n element.dimension,\r\n element.dimType\r\n )\r\n } else if (element.id === this.props.selectedItem) {\r\n points = this.getCubePointFromPath(element, type)\r\n }\r\n })\r\n }\r\n\r\n const lines = [\r\n [points.p1, points.p2],\r\n [points.p1, points.p4],\r\n [points.p1, points.p5],\r\n [points.p2, points.p3],\r\n [points.p2, points.p6],\r\n [points.p3, points.p7],\r\n [points.p3, points.p4],\r\n [points.p4, points.p8],\r\n [points.p5, points.p6],\r\n [points.p5, points.p8],\r\n [points.p6, points.p7],\r\n [points.p7, points.p8],\r\n ]\r\n\r\n let newNodes = []\r\n for (let key in points) {\r\n newNodes.push(this.createNode(points[key][0], points[key][1]))\r\n }\r\n\r\n let newLines = []\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i]\r\n newLines.push({\r\n start: this.createNode(line[0][0], line[0][1]),\r\n end: this.createNode(line[1][0], line[1][1]),\r\n })\r\n }\r\n\r\n let newPolygons = []\r\n this.polygons.forEach((polygon_vertices, i) => {\r\n let points = []\r\n polygon_vertices.forEach((j) =>\r\n points.push(\r\n `${newNodes[j - 1].coord[0]},${newNodes[j - 1].coord[1]\r\n }`\r\n )\r\n )\r\n\r\n newPolygons.push({\r\n points: points.join(' '),\r\n fill: this.colors[i],\r\n })\r\n })\r\n\r\n this.setState({\r\n _svgState: {\r\n ...this.state._svgState,\r\n nodes: newNodes,\r\n lines: newLines,\r\n polygons: [...newPolygons],\r\n },\r\n })\r\n\r\n // this.hideBackPoint();\r\n\r\n DragTracker({\r\n container: document.querySelector('#cube-drawer svg'),\r\n selector: '[data-draggable]',\r\n dragOutside: false,\r\n callback: (node, pos) => {\r\n const line = {\r\n coord: [\r\n node.getAttribute('cx'),\r\n node.getAttribute('cy'),\r\n ],\r\n }\r\n this.draggingNodeHandler(line, pos)\r\n // var event = document.createEvent('CustomEvent')\r\n // event.initCustomEvent('dragging', true, false, { pos })\r\n // node.dispatchEvent(event)\r\n },\r\n callbackClick: (node, pos) => {\r\n const line = {\r\n coord: [\r\n node.getAttribute('cx'),\r\n node.getAttribute('cy'),\r\n ],\r\n }\r\n this.draggingNodeHandler(line, pos)\r\n // var event = document.createEvent('CustomEvent')\r\n // event.initCustomEvent('dragging', true, false, { pos })\r\n // node.dispatchEvent(event)\r\n },\r\n })\r\n }\r\n\r\n cubeGenerator = () => {\r\n return (\r\n \r\n
    \r\n \r\n {this.state._svgState.polygons.length > 0 &&\r\n this.state._svgState.polygons.map(\r\n (polygon, index) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n )}\r\n\r\n {this.state._svgState.lines.map((line, index) => {\r\n return (\r\n \r\n \r\n \r\n this.draggingNodeHandler(line)}\r\n onClick={() => {\r\n this.setState({\r\n _svgState: {\r\n ...this.state\r\n ._svgState,\r\n selectedNode:\r\n line.start,\r\n },\r\n })\r\n }}\r\n cx={line.start.coord[0]}\r\n cy={line.start.coord[1]}\r\n r={line.start.radius}\r\n />\r\n {\r\n this.setState({\r\n _svgState: {\r\n ...this.state\r\n ._svgState,\r\n selectedNode:\r\n line.end,\r\n },\r\n })\r\n }}\r\n cx={line.end.coord[0]}\r\n cy={line.end.coord[1]}\r\n r={line.end.radius}\r\n />\r\n \r\n \r\n )\r\n })}\r\n \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n // componentWillMount() {\r\n // if (Object.keys(this.state.points).length !== 0) {\r\n // for (let key in this.state.points) {\r\n // this.addNode(this.state.points[key][0], this.state.points[key][1]);\r\n // }\r\n\r\n // for (let i = 0; i < this.state.lines.length; i++) {\r\n // /////\r\n // const line = this.state.lines[i]; /////////\r\n // this.addLine(line[0][0], line[0][1], line[1][0], line[1][1]);\r\n // }\r\n\r\n // this.addPolygons();\r\n // this.hideBackPoint();\r\n\r\n // DragTracker({\r\n // container: document.querySelector(\"#cube-drawer svg\"),\r\n // selector: \"[data-draggable]\",\r\n // dragOutside: false,\r\n // callback: (node, pos) => {\r\n // const line = {\r\n // coord: [node.getAttribute(\"cx\"), node.getAttribute(\"cy\")]\r\n // };\r\n // this.draggingNodeHandler(line, pos);\r\n // // var event = document.createEvent('CustomEvent')\r\n // // event.initCustomEvent('dragging', true, false, { pos })\r\n // // node.dispatchEvent(event)\r\n // },\r\n // callbackClick: (node, pos) => {\r\n // const line = {\r\n // coord: [node.getAttribute(\"cx\"), node.getAttribute(\"cy\")]\r\n // };\r\n // this.draggingNodeHandler(line, pos);\r\n // // var event = document.createEvent('CustomEvent')\r\n // // event.initCustomEvent('dragging', true, false, { pos })\r\n // // node.dispatchEvent(event)\r\n // }\r\n // });\r\n // }\r\n // }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\n\r\nexport default function withPenTool(WrappedComponent) {\r\n return class extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._path = null;\r\n }\r\n\r\n keyUp = (e) => {\r\n const { key } = e;\r\n if (this._path && key === \"escape\") {\r\n this._path.remove();\r\n this._path = null;\r\n }\r\n };\r\n\r\n mouseDown = (e) => {\r\n this.props.deselectItem();\r\n };\r\n\r\n mouseDrag = (e) => {\r\n const paper = e.tool._scope;\r\n if (!this._path) {\r\n this._path = new paper.Path({\r\n segments: [e.point],\r\n strokeColor: \"red\",\r\n strokeScaling: false,\r\n strokeWidth: 2,\r\n selected: true\r\n });\r\n } else {\r\n this._path.add(e.point);\r\n }\r\n };\r\n\r\n mouseUp = (e) => {\r\n if (this._path) {\r\n this._path.simplify(4);\r\n this._path.layer.data.id = 1;\r\n const item = this.props.addItem(this._path.layer, {\r\n type: \"Path\",\r\n pathData: this._path.getPathData(),\r\n strokeColor: this._path.style.strokeColor.toCSS(true),\r\n strokeScaling: this._path.strokeScaling,\r\n strokeWidth: this._path.strokeWidth,\r\n closed: true,\r\n relatedCurvePoints: this._path.getSegments().map((seg) => {\r\n return { x: seg.point.x, y: seg.point.y };\r\n })\r\n });\r\n this.props.selectItem(item);\r\n this._path.remove();\r\n this._path = null;\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n}\r\n","import React, { Component } from \"react\";\r\nimport randomColor from \"randomcolor\";\r\nimport randomInt from \"random-int\";\r\n\r\nexport default function withCircleTool(WrappedComponent) {\r\n return class extends Component {\r\n mouseDown = (e) => {\r\n this.props.deselectItem();\r\n const paper = e.tool._scope;\r\n const circle = new paper.Path.Circle({\r\n center: e.point,\r\n fillColor: randomColor(),\r\n radius: randomInt(10, 60)\r\n });\r\n const item = this.props.addItem(circle.layer, {\r\n type: \"Circle\",\r\n pathData: circle.getPathData(),\r\n fillColor: circle.fillColor.toCSS(true)\r\n });\r\n\r\n circle.remove();\r\n this.props.selectItem(item);\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n}\r\n","import React, { Component } from \"react\";\r\nimport randomColor from \"randomcolor\";\r\nimport randomInt from \"random-int\";\r\n\r\nexport default function withRectangleTool(WrappedComponent) {\r\n return class extends Component {\r\n mouseDown = (e) => {\r\n this.props.deselectItem();\r\n const paper = e.tool._scope;\r\n const rectangle = new paper.Path.Rectangle({\r\n center: e.point,\r\n fillColor: randomColor(),\r\n size: randomInt(20, 120)\r\n });\r\n const item = this.props.addItem(rectangle.layer, {\r\n type: \"Rectangle\",\r\n pathData: rectangle.getPathData(),\r\n fillColor: rectangle.fillColor.toCSS(true)\r\n });\r\n \r\n rectangle.remove();\r\n this.props.selectItem(item);\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n}\r\n","import React from 'react'\r\nimport { Col, Container, Row } from 'reactstrap'\r\n\r\nimport Navbar from '../pages/Navbar/index/Index'\r\n\r\nconst PaymentLayout = ({ children }) => (\r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport default PaymentLayout\r\n","import React, { useState } from 'react'\r\nimport {\r\n Button,\r\n Input,\r\n Label,\r\n Modal,\r\n ModalHeader,\r\n ModalBody,\r\n ModalFooter,\r\n} from 'reactstrap'\r\nimport Price from '../../../../components/Payment/Price/Price'\r\nimport Icon from '../../../../components/Icons/Icon'\r\nimport EditIcon from '../../../../assets/img/icons/EDIT ICON.svg'\r\n\r\nimport './CartItem.css'\r\n\r\nconst CartItem = ({\r\n id,\r\n name,\r\n meterage,\r\n discount,\r\n price,\r\n imageUrl,\r\n onRemove,\r\n onEdited,\r\n}) => {\r\n const [isEditing, setIsEditing] = useState(false)\r\n const [currentMeterage, setCurrentMeterage] = useState(meterage)\r\n\r\n const onEditing = () => {\r\n if (isEditing) onEdited(id, currentMeterage)\r\n setIsEditing(!isEditing)\r\n\r\n const input = document.getElementById('meterage' + id)\r\n if (input) input.focus()\r\n }\r\n\r\n const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false)\r\n const toggle = () => setIsDeleteModalVisible(!isDeleteModalVisible)\r\n\r\n return (\r\n
    \r\n
    \r\n

    {name}

    \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n

    پارچه مورد نیاز

    \r\n setCurrentMeterage(e.target.value)}\r\n />\r\n متر\r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n\r\n \r\n حذف از سبد خرید\r\n آیا اطمینان دارید؟\r\n \r\n {\r\n toggle()\r\n onRemove(id)\r\n }}\r\n >\r\n بلی، حذف کن\r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default CartItem\r\n","import React from 'react'\r\nimport { useSelector } from \"react-redux\";\r\nimport { Label } from \"reactstrap\";\r\n\r\nimport Price from '../../../components/Payment/Price/Price'\r\n\r\nimport './PaymentSidebar.css'\r\n\r\nconst PaymentSidebar = ({ children }) => {\r\n const cartItems = useSelector(state => state.payment.cart)\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n prev + curr.price * (curr.meterage ?? 1), 0)} />\r\n
    \r\n
    \r\n \r\n prev + (curr.discount ?? 0), 0)} />\r\n
    \r\n
    \r\n \r\n prev + (curr.price * (curr.meterage ?? 1)) - (curr.discount ?? 0), 0)}\r\n size=\"lg\" color=\"secondary\" />\r\n
    \r\n {children}\r\n

    هزینه‌ی ارسال در ادامه بر اساس آدرس، زمان و نحوه‌ی ارسال انتخابی شما‌ محاسبه و به این مبلغ اضافه خواهد شد

    \r\n
    \r\n )\r\n}\r\n\r\nexport default PaymentSidebar\r\n","import { Button, Container, Col, Row } from 'reactstrap'\r\nimport React from 'react'\r\nimport { Link, useHistory } from 'react-router-dom'\r\n\r\nimport CartWhiteIcon from '../../../assets/img/icons/SHOPPING_WHITE.svg'\r\nimport CartIcon from '../../../assets/img/icons/SHOPPING.svg'\r\nimport Icon from '../../../components/Icons/Icon'\r\n\r\nimport './Cart.css'\r\n\r\nimport CartItem from './CartItem/CartItem'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport {\r\n removeFromCart,\r\n updateCartMeterage,\r\n} from '../../../redux/payment/actions'\r\nimport PaymentSidebar from '../Sidebar/PaymentSidebar'\r\nimport { isEmpty } from 'lodash'\r\n\r\nconst Cart = () => {\r\n const dispatch = useDispatch()\r\n\r\n const cartItems = useSelector((state) => state.payment.cart)\r\n\r\n const history = useHistory()\r\n\r\n const onRemoveCartItem = (id) => {\r\n dispatch(removeFromCart(id))\r\n }\r\n const onCartItemEdited = (id, newMeterage) => {\r\n dispatch(updateCartMeterage(id, newMeterage))\r\n }\r\n\r\n return (\r\n
    \r\n

    \r\n \r\n سبد خرید\r\n

    \r\n
    \r\n history.goBack()}\r\n >\r\n بازگشت\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n {isEmpty(cartItems) && (\r\n

    \r\n سبد خرید شما خالی است.\r\n

    \r\n )}\r\n\r\n {cartItems.map((cart, index) => (\r\n \r\n ))}\r\n \r\n {!isEmpty(cartItems) && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default Cart\r\n","import { isEmpty } from 'lodash'\r\nimport React, { useState } from 'react'\r\nimport { useHistory } from 'react-router-dom'\r\nimport {\r\n Button,\r\n Container,\r\n Col,\r\n Row,\r\n Label,\r\n Collapse,\r\n FormGroup,\r\n Input,\r\n} from 'reactstrap'\r\n\r\nimport CartWhiteIcon from '../../assets/img/icons/SHOPPING_WHITE.svg'\r\nimport CartIcon from '../../assets/img/icons/SHOPPING.svg'\r\nimport Icon from '../../components/Icons/Icon'\r\n\r\nimport CartItem from './Cart/CartItem/CartItem'\r\n\r\nimport './Index.css'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { getUserFullname } from '../../services/authenticationChecker'\r\nimport {\r\n buyOrder,\r\n removeFromCart,\r\n updateCartMeterage,\r\n} from '../../redux/payment/actions'\r\nimport PaymentSidebar from './Sidebar/PaymentSidebar'\r\nimport Loading from '../../components/Loading/Loading'\r\n\r\nconst Index = () => {\r\n const cartItems = useSelector((state) => state.payment.cart)\r\n const submittingOrder = useSelector(\r\n (state) => state.payment.submittingOrder\r\n )\r\n\r\n const dispatch = useDispatch()\r\n const history = useHistory()\r\n\r\n const [deliverOnStore, setDeliverOnStore] = useState(false)\r\n const [deliverOnAddress, setDeliverOnAddress] = useState(false)\r\n const addresses = useSelector((state) => state.payment.addresses)\r\n\r\n const onAddressChanged = (e) => {}\r\n const onRadioChanged = (e) => {\r\n if (e.target.id === 'deliverOnStore') {\r\n setDeliverOnAddress(false)\r\n setDeliverOnStore(true)\r\n } else if (e.target.id === 'deliverOnAddress') {\r\n setDeliverOnAddress(true)\r\n setDeliverOnStore(false)\r\n }\r\n }\r\n\r\n const onBuy = () => {\r\n dispatch(buyOrder(history))\r\n }\r\n\r\n const onRemoveCartItem = (id) => {\r\n dispatch(removeFromCart(id))\r\n }\r\n const onCartItemEdited = (id, newMeterage) => {\r\n dispatch(updateCartMeterage(id, newMeterage))\r\n }\r\n\r\n return (\r\n
    \r\n

    \r\n \r\n سبد خرید\r\n

    \r\n
    \r\n history.goBack()}\r\n >\r\n بازگشت\r\n \r\n
    \r\n {submittingOrder && }\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n

    {getUserFullname()}

    \r\n
    \r\n \r\n نوع تحویل\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n
    \r\n \r\n \r\n
    \r\n {\r\n !isEmpty(addresses) && \r\n آدرس‌ها\r\n {addresses.map(address => \r\n \r\n )}\r\n \r\n }\r\n
    */}\r\n {cartItems.map((cart) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n تائید و ثبت سفارش\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default Index\r\n","//Layouts\r\nimport AuthLayout from \"../layouts/Auth\";\r\nimport MainLayout from \"../layouts/Main\";\r\nimport PlanLayout from \"../layouts/Plan\";\r\nimport PhotoEditorLayout from \"../layouts/PhotoEditor\";\r\nimport PlaceDetectorLayout from \"../layouts/PlaceDetector\";\r\n\r\n//Pages\r\nimport Home from \"../pages/Scene/Home_New\";\r\nimport Plans from \"../pages/Plans\";\r\nimport Plan from \"../pages/Plans/plan\";\r\nimport SignUp from \"../pages/SignUp\";\r\nimport SignIn from \"../pages/SignIn\";\r\nimport ForgotPassword from \"../pages/ForgotPassword\";\r\nimport PhotoEditor from \"../pages/PhotoEditor\";\r\nimport PlaceDetector from \"../pages/PlaceDetector\";\r\nimport PaymentLayout from \"../layouts/Payment\";\r\nimport Cart from \"../pages/Payment/Cart/Cart\";\r\nimport Payment from \"../pages/Payment/Index\";\r\nimport PaymentResult from \"../pages/Payment/Result/PaymentResult\";\r\n\r\nexport const PublicRoutes = [\r\n {\r\n path: \"/signup\",\r\n name: \"SignUp\",\r\n component: SignUp,\r\n layout: AuthLayout\r\n },\r\n {\r\n path: \"/signin\",\r\n name: \"SignIn\",\r\n component: SignIn,\r\n layout: AuthLayout\r\n },\r\n {\r\n path: \"/forgotpassword\",\r\n name: \"ForgotPassword\",\r\n component: ForgotPassword,\r\n layout: AuthLayout\r\n },\r\n];\r\n\r\nexport const PrivateRoutes = [\r\n {\r\n path: \"/app\",\r\n name: \"Home\",\r\n component: Home,\r\n layout: MainLayout\r\n },\r\n {\r\n path: \"/\",\r\n name: \"Plans\",\r\n component: Plans,\r\n layout: PlanLayout\r\n },\r\n {\r\n path: \"/plan/:id\",\r\n name: \"Plan\",\r\n component: Plan,\r\n layout: PlanLayout,\r\n layoutProps: {\r\n isCustomProfile: true\r\n }\r\n },\r\n {\r\n path: \"/cart\",\r\n name: \"Cart\",\r\n component: Cart,\r\n layout: PaymentLayout,\r\n },\r\n {\r\n path: \"/payment\",\r\n name: \"Payment\",\r\n component: Payment,\r\n layout: PaymentLayout,\r\n },\r\n {\r\n path: \"/payment/result\",\r\n name: \"PaymentResult\",\r\n component: PaymentResult,\r\n layout: PaymentLayout,\r\n },\r\n {\r\n path: \"/PhotoEditor\",\r\n name: \"PhotoEditor\",\r\n component: PhotoEditor,\r\n layout: PhotoEditorLayout\r\n },\r\n {\r\n path: \"/PlaceDetector/:id\",\r\n name: \"PlaceDetector\",\r\n component: PlaceDetector,\r\n layout: PlaceDetectorLayout\r\n }\r\n];\r\n","import React, { useEffect, useState } from 'react'\r\nimport { useDispatch } from 'react-redux'\r\nimport { useLocation, Link } from 'react-router-dom'\r\nimport { Button, Container, Row, Col } from 'reactstrap'\r\n\r\nimport SmileIcon from '../../../assets/img/icons/SMILE.svg'\r\nimport Icon from '../../../components/Icons/Icon'\r\nimport { getUserFullname } from '../../../services/authenticationChecker'\r\nimport { resetCart } from '../../../redux/payment/actions'\r\n\r\nimport './PaymentResult.css'\r\n\r\nconst PaymentResult = () => {\r\n const location = useLocation()\r\n const [receiptNumber, setReceiptNumber] = useState(null)\r\n const dispatch = useDispatch()\r\n\r\n useEffect(() => {\r\n const params = new URLSearchParams(location.search)\r\n setReceiptNumber(params.get('id'))\r\n }, [location])\r\n\r\n const isSuccessful = () => receiptNumber && receiptNumber > 0\r\n\r\n const onResetCart = () => {\r\n if (isSuccessful()) dispatch(resetCart())\r\n }\r\n\r\n return (\r\n \r\n \r\n {isSuccessful() ? (\r\n \r\n

    \r\n \r\n سفارش موفق\r\n

    \r\n \r\n ) : (\r\n \r\n

    \r\n \r\n سفارش ناموفق\r\n

    \r\n \r\n )}\r\n
    \r\n \r\n \r\n \r\n

    {getUserFullname()} عزیز

    \r\n\r\n
    \r\n {isSuccessful() ? (\r\n <>\r\n

    از شما سپاسگذاریم.

    \r\n

    \r\n سفارش شما با موفقیت ثبت شد. به زودی با شما تماس\r\n گرفته خواهد شد.\r\n

    \r\n \r\n ) : (\r\n

    \r\n متاسفانه سفارش با مشکل مواجه شد، لطفا دوباره تلاش\r\n کنید\r\n

    \r\n )}\r\n
    \r\n\r\n
    \r\n

    شماره پیگیری سفارش

    \r\n

    {receiptNumber}

    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default PaymentResult\r\n","import React, { Suspense } from \"react\";\r\nimport {\r\n BrowserRouter as Router,\r\n Route,\r\n Switch,\r\n Redirect\r\n} from \"react-router-dom\";\r\nimport { PublicRoutes, PrivateRoutes } from \"./configs\";\r\nimport { isAuthenticated } from \"../services/authenticationChecker\";\r\nimport Loading from \"../components/Loading/Loading\";\r\n\r\nconst ConstructRoutes = (routes) =>\r\n routes.map(\r\n ({ path, component: Component, layout: Layout, props: Props, layoutProps }, index) => {\r\n return (\r\n {\r\n const totalProps = { ...props, ...Props };\r\n return (\r\n }>\r\n \r\n \r\n \r\n \r\n );\r\n }}\r\n />\r\n );\r\n }\r\n );\r\n\r\nconst Routes = (props) => (\r\n \r\n {ConstructRoutes(isAuthenticated() ? PrivateRoutes : PublicRoutes)}\r\n {isAuthenticated() ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n);\r\n\r\nexport default Routes;\r\n","import React from \"react\";\r\n\r\nimport \"material-design-icons/iconfont/material-icons.css\";\r\n\r\nimport Routes from \"./routes/Routes\";\r\n\r\nimport './App.css'\r\n\r\nconst App = () => ;\r\n\r\nexport default App;\r\n","import * as types from './constants'\r\n\r\nconst initialState = {\r\n waiting: false,\r\n accessToken: null,\r\n refreshToken: '',\r\n userId: null,\r\n isUserValidated: false,\r\n isForgotPasswordTokenSent: false,\r\n token: null,\r\n error: null,\r\n}\r\n\r\nconst reducer = (state = initialState, actions) => {\r\n switch (actions.type) {\r\n case types.AUTH_START:\r\n return {\r\n ...state,\r\n error: null,\r\n waiting: true,\r\n }\r\n case types.AUTH_SUCCESS:\r\n return {\r\n ...state,\r\n isUserValidated: actions.isUserValidated,\r\n token: actions.token,\r\n error: null,\r\n waiting: false,\r\n }\r\n case types.AUTH_REFRESHED:\r\n return {\r\n ...state,\r\n accessToken: actions.accessToken,\r\n refreshToken: actions.refreshToken,\r\n waiting: false,\r\n }\r\n case types.AUTH_FAIL:\r\n return {\r\n ...state,\r\n error: actions.error,\r\n waiting: false,\r\n }\r\n case types.LOG_OUT:\r\n return {\r\n ...state,\r\n accessToken: null,\r\n refreshToken: '',\r\n userId: null,\r\n error: null,\r\n waiting: false,\r\n }\r\n case types.VALIDATION_START:\r\n return {\r\n ...state,\r\n waiting: true,\r\n }\r\n case types.VALIDATION_SUCCESS:\r\n return {\r\n ...state,\r\n token: actions.payload,\r\n waiting: false,\r\n }\r\n case types.VALIDATION_FAIL:\r\n return {\r\n ...state,\r\n error: actions.error,\r\n waiting: false,\r\n }\r\n case types.FORGOT_PASSWORD_STEP_ONE_START:\r\n return {\r\n ...state,\r\n waiting: true,\r\n }\r\n case types.FORGOT_PASSWORD_STEP_ONE_SUCCESS:\r\n return {\r\n ...state,\r\n waiting: false,\r\n isForgotPasswordTokenSent: true,\r\n }\r\n case types.FORGOT_PASSWORD_STEP_ONE_FAIL:\r\n return {\r\n ...state,\r\n error: actions.error,\r\n waiting: false,\r\n }\r\n case types.FORGOT_PASSWORD_STEP_TWO_START:\r\n return {\r\n ...state,\r\n waiting: true,\r\n }\r\n case types.FORGOT_PASSWORD_STEP_TWO_SUCCESS:\r\n return {\r\n ...state,\r\n token: actions.payload,\r\n waiting: false,\r\n }\r\n case types.FORGOT_PASSWORD_STEP_TWO_FAIL:\r\n return {\r\n ...state,\r\n error: actions.error,\r\n waiting: false,\r\n }\r\n case types.SET_ERROR:\r\n return {\r\n ...state,\r\n error: actions.error,\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default reducer\r\n","import * as types from './constants'\r\n\r\nconst initialState = {\r\n waiting: false,\r\n userId: null,\r\n error: null,\r\n isRegistrationDone: false,\r\n token: null,\r\n\r\n profile: {\r\n image: '/images/user.jpg',\r\n fullName: 'در حال بارگذاری',\r\n PlanCount: 0,\r\n RegistrationDate: new Date(),\r\n rankCurrentMonth: null,\r\n rankTotal: null,\r\n },\r\n planProfile: {\r\n image: '/images/user.jpg',\r\n fullName: 'در حال بارگذاری',\r\n PlanCount: 0,\r\n RegistrationDate: new Date(),\r\n rankCurrentMonth: null,\r\n rankTotal: null,\r\n },\r\n profileLoading: false,\r\n planProfileLoading: false,\r\n profileError: null,\r\n\r\n uploading: false,\r\n uploadingError: false,\r\n}\r\n\r\nconst reducer = (state = initialState, actions) => {\r\n switch (actions.type) {\r\n case types.REGISTERATION_START:\r\n return {\r\n ...state,\r\n waiting: true,\r\n }\r\n case types.REGISTERATION_DUPLICATE:\r\n return {\r\n ...state,\r\n waiting: false,\r\n duplicateMessage: actions.payload,\r\n }\r\n case types.REGISTERATION_SUCCESS:\r\n return {\r\n ...state,\r\n isRegistrationDone: actions.isRegistrationDone,\r\n waiting: false,\r\n }\r\n case types.REGISTERATION_FAIL:\r\n return {\r\n ...state,\r\n error: actions.error,\r\n waiting: false,\r\n }\r\n case types.VALIDATION_START:\r\n return {\r\n ...state,\r\n waiting: true,\r\n }\r\n case types.VALIDATION_SUCCESS:\r\n return {\r\n ...state,\r\n token: actions.payload,\r\n waiting: false,\r\n }\r\n case types.VALIDATION_FAIL:\r\n return {\r\n ...state,\r\n error: actions.error,\r\n waiting: false,\r\n }\r\n case types.GET_PROFILE_START:\r\n return {\r\n ...state,\r\n profileLoading: true,\r\n profileError: null,\r\n }\r\n case types.GET_PROFILE_SUCCESS:\r\n return {\r\n ...state,\r\n profile: actions.payload,\r\n profileLoading: false,\r\n }\r\n case types.GET_PROFILE_FAIL:\r\n return {\r\n ...state,\r\n profileError: actions.error,\r\n profileLoading: false,\r\n }\r\n case types.GET_PLAN_PROFILE_START:\r\n return {\r\n ...state,\r\n planProfileLoading: true,\r\n profileError: null,\r\n }\r\n case types.GET_PLAN_PROFILE_SUCCESS:\r\n return {\r\n ...state,\r\n planProfile: actions.payload,\r\n planProfileLoading: false,\r\n }\r\n case types.GET_PLAN_PROFILE_FAIL:\r\n return {\r\n ...state,\r\n profileError: actions.error,\r\n planProfileLoading: false,\r\n // TODO: TEMP\r\n // planProfile: null,\r\n }\r\n case types.UPLOAD_PROFILE_START:\r\n return {\r\n ...state,\r\n uploading: true,\r\n uploadingError: null,\r\n }\r\n case types.UPLOAD_PROFILE_SUCCESS:\r\n return {\r\n ...state,\r\n uploading: false,\r\n uploadingError: null,\r\n }\r\n case types.UPLOAD_PROFILE_FAIL:\r\n return {\r\n ...state,\r\n uploading: false,\r\n uploadingError: actions.payload,\r\n }\r\n case types.UPLOAD_PLAN_START:\r\n return {\r\n ...state,\r\n uploading: true,\r\n uploadingError: null,\r\n }\r\n case types.UPLOAD_PLAN_SUCCESS:\r\n return {\r\n ...state,\r\n uploading: false,\r\n uploadingError: null,\r\n }\r\n case types.UPLOAD_PLAN_FAIL:\r\n return {\r\n ...state,\r\n uploading: false,\r\n uploadingError: actions.payload,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default reducer\r\n","import * as types from \"./constants\";\r\n\r\nconst initialState = {\r\n loading: true,\r\n mainImage: null,\r\n changedImage: null,\r\n error: null,\r\n};\r\n\r\nconst reducer = (state = initialState, actions) => {\r\n switch (actions.type) {\r\n case types.INITIAL_IMAGE_DATA:\r\n return {\r\n ...state,\r\n mainImage: actions.image,\r\n loading: actions.loading,\r\n };\r\n\r\n case types.SAVE_IMAGE_DATA:\r\n return {\r\n ...state,\r\n changedImage: actions.image,\r\n loading: actions.loading,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import * as types from './constants'\r\n\r\nconst initialState = {\r\n loading: true,\r\n mainImage: null,\r\n changedImage: null,\r\n isSaving: false,\r\n savingError: null,\r\n error: null,\r\n}\r\n\r\nconst reducer = (state = initialState, actions) => {\r\n switch (actions.type) {\r\n case types.INITIAL_DATA:\r\n return {\r\n ...state,\r\n mainImage: actions.image,\r\n loading: actions.loading,\r\n }\r\n case types.SAVE_DATA_STARTED:\r\n return {\r\n ...state,\r\n isSaving: true,\r\n savingError: null,\r\n }\r\n case types.SAVE_DATA_SUCCESS:\r\n return {\r\n ...state,\r\n isSaving: false,\r\n savingError: null,\r\n }\r\n case types.SAVE_DATA_FAILED:\r\n return {\r\n ...state,\r\n savingError: actions.error,\r\n isSaving: false,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default reducer\r\n","import * as types from '../tools/constants'\r\nimport chair from '../../assets/img/chair.png'\r\nimport sample from '../../assets/img/sample.jpg'\r\nimport sample2 from '../../assets/img/sample2.jpg'\r\nimport INITIAL_DATA from '../../initial-data.json'\r\n\r\nconst Faces = { Up: 'Up', Right: 'Right', Left: 'Left' }\r\nconst Planes = { One: '1', Two: '2', Three: '3' }\r\n\r\nlet initialData = JSON.parse(window.localStorage.getItem('rooms'))\r\nif (!initialData) {\r\n initialData = INITIAL_DATA\r\n window.localStorage.setItem('rooms', JSON.stringify(INITIAL_DATA))\r\n}\r\ninitialData = {\r\n ...initialData,\r\n error: null,\r\n loading: false,\r\n room: null,\r\n rooms: [],\r\n isDrawing: false,\r\n multiply: 0.8,\r\n brightness: -50,\r\n contrast: 20,\r\n zoom: 100,\r\n offsetH: 0,\r\n offsetV: 0,\r\n grayScaleImages: [],\r\n isPhotoEditorVisible: false,\r\n}\r\n\r\nconst reducer = (state = initialData, actions) => {\r\n switch (actions.type) {\r\n case types.SET_PHOTO_EDITOR_MATERIAL:\r\n return {\r\n ...state,\r\n photoEditorMaterial: actions.payload,\r\n isPhotoEditorVisible: true,\r\n }\r\n case types.CLOSE_PHOTO_EDITOR_MATERIAL:\r\n return {\r\n ...state,\r\n isPhotoEditorVisible: false,\r\n }\r\n case types.OPERATION_STARTED:\r\n return {\r\n ...state,\r\n loading: true,\r\n error: null,\r\n }\r\n case types.OPERATION_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: actions.payload,\r\n }\r\n case types.GET_MATERIALS_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n allMaterials: actions.payload,\r\n }\r\n case types.GET_ROOMS_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n rooms: actions.payload,\r\n }\r\n case types.GET_ROOM_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n room: actions.payload,\r\n }\r\n case types.UPLOAD_MATERIAL_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n }\r\n case types.RESET_MATERIAL_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n }\r\n case types.EDIT_MATERIAL_TITLE_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n }\r\n case types.EDIT_ROOM_TITLE_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n }\r\n case types.DELETE_MATERIAL_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n }\r\n case types.DELETE_ROOM_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n }\r\n case types.UPLOAD_ROOM_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n }\r\n case types.ACTIVE_PATH:\r\n return {\r\n ...state,\r\n hoveredPathId: actions.payload,\r\n }\r\n case types.CHOOOSE_ROOM:\r\n return {\r\n ...state,\r\n roomInDesignStage: actions.payload,\r\n multiply: 0.8,\r\n loading: false,\r\n }\r\n case types.CHOOSE_ROOM_INITIAL:\r\n var newState = { ...state, loading: true }\r\n if (state.roomInDesignStage) {\r\n delete newState.roomInDesignStage.selectedPrespectives\r\n delete newState.roomInDesignStage\r\n }\r\n return newState\r\n case types.RESET_DRAG:\r\n return {\r\n ...state,\r\n dragKey: state.dragKey + 1,\r\n roomInDesignStage: actions.payload,\r\n }\r\n case types.SELECT_CURVE:\r\n return {\r\n ...state,\r\n choosedPrespective:\r\n state.roomInDesignStage.selectedPrespectives?.find(\r\n (q) => q.id == actions.payload\r\n ) ?? null,\r\n isMiniEditorVisible: true,\r\n brightness:\r\n state.roomInDesignStage.selectedPrespectives?.find(\r\n (q) => q.id == actions.payload\r\n )?.brightness ?? 0,\r\n contrast:\r\n state.roomInDesignStage.selectedPrespectives?.find(\r\n (q) => q.id == actions.payload\r\n )?.contrast ?? 0,\r\n zoom:\r\n state.roomInDesignStage.selectedPrespectives?.find(\r\n (q) => q.id == actions.payload\r\n )?.zoom ?? 100,\r\n offsetH:\r\n state.roomInDesignStage.selectedPrespectives?.find(\r\n (q) => q.id == actions.payload\r\n )?.offsetH ?? 0,\r\n offsetV:\r\n state.roomInDesignStage.selectedPrespectives?.find(\r\n (q) => q.id == actions.payload\r\n )?.offsetV ?? 0,\r\n }\r\n case types.APPLY_CURVE_FILTER:\r\n return {\r\n ...state,\r\n brightness: actions.payload.brightness,\r\n contrast: actions.payload.contrast,\r\n roomInDesignStage: actions.payload.room,\r\n }\r\n case types.APPLY_TEXTURE_ZOOM:\r\n return {\r\n ...state,\r\n zoom: actions.payload.zoom,\r\n offsetH: actions.payload.offsetH,\r\n offsetV: actions.payload.offsetV,\r\n roomInDesignStage: actions.payload.room,\r\n }\r\n case types.CHANGE_CURVE_MULTIPLY:\r\n return {\r\n ...state,\r\n multiplyIntensity: actions.payload,\r\n }\r\n case types.DRAWING_STARTED:\r\n return {\r\n ...state,\r\n isDrawing: true,\r\n }\r\n case types.DRAWING_ENDED:\r\n return {\r\n ...state,\r\n isDrawing: false,\r\n }\r\n case types.CHANGE_MULTIPLY:\r\n return {\r\n ...state,\r\n multiply: actions.payload.value,\r\n }\r\n case types.SAVE_GRAY_SCALE_IMAGES:\r\n return {\r\n ...state,\r\n grayScaleImages: actions.payload,\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default reducer\r\n","import * as types from './constants'\r\n\r\nconst initialState = {\r\n plans: [],\r\n loadingPlans: true,\r\n plansError: null,\r\n\r\n plan: {},\r\n loadingPlan: true,\r\n planError: null,\r\n\r\n planComments: [],\r\n loadingPlanComments: false,\r\n planCommentsError: false,\r\n\r\n planFabrics: [],\r\n loadingPlanFabrics: false,\r\n planFabricsError: false,\r\n\r\n planProfile: {},\r\n planProfileLoading: false,\r\n planProfileError: null,\r\n\r\n planFilters: [],\r\n planFiltersLoading: false,\r\n planFiltersError: null,\r\n\r\n addingComment: false,\r\n}\r\n\r\nconst reducer = (state = initialState, actions) => {\r\n switch (actions.type) {\r\n case types.GET_PLANS_START:\r\n return {\r\n ...state,\r\n loadingPlans: true,\r\n plansError: null,\r\n }\r\n case types.GET_PLANS_SUCCESS:\r\n return {\r\n ...state,\r\n plans: actions.payload,\r\n loadingPlans: false,\r\n }\r\n case types.GET_PLANS_FAIL:\r\n return {\r\n ...state,\r\n plansError: actions.payload,\r\n loadingPlans: false,\r\n }\r\n case types.RESET_PLANS:\r\n return {\r\n ...state,\r\n plans: [],\r\n loadingPlans: true,\r\n plansError: null,\r\n }\r\n case types.GET_PLAN_START:\r\n return {\r\n ...state,\r\n loadingPlan: true,\r\n planError: null,\r\n }\r\n case types.GET_PLAN_SUCCESS:\r\n return {\r\n ...state,\r\n plan: actions.payload,\r\n loadingPlan: false,\r\n }\r\n case types.GET_PLAN_FAIL:\r\n return {\r\n ...state,\r\n planError: actions.error,\r\n loadingPlan: false,\r\n }\r\n\r\n case types.GET_PLAN_COMMENTS_START:\r\n return {\r\n ...state,\r\n loadingPlanComments: true,\r\n planCommentsError: null,\r\n }\r\n case types.GET_PLAN_COMMENTS_SUCCESS:\r\n return {\r\n ...state,\r\n planComments: actions.payload,\r\n loadingPlanComments: false,\r\n }\r\n case types.GET_PLAN_COMMENTS_FAIL:\r\n return {\r\n ...state,\r\n planCommentsError: actions.error,\r\n loadingPlanComments: false,\r\n }\r\n case types.GET_PLAN_FABRICS_START:\r\n return {\r\n ...state,\r\n loadingPlanFabrics: true,\r\n planFabricsError: null,\r\n }\r\n case types.GET_PLAN_FABRICS_SUCCESS:\r\n return {\r\n ...state,\r\n planFabrics: actions.payload,\r\n loadingPlanFabrics: false,\r\n }\r\n case types.GET_PLAN_FABRICS_FAIL:\r\n return {\r\n ...state,\r\n planFabricsError: actions.error,\r\n loadingPlanFabrics: false,\r\n }\r\n\r\n case types.GET_PLAN_PROFILE_START:\r\n return {\r\n ...state,\r\n planProfileLoading: true,\r\n profileError: null,\r\n }\r\n case types.GET_PLAN_PROFILE_SUCCESS:\r\n return {\r\n ...state,\r\n planProfile: actions.payload,\r\n planProfileLoading: false,\r\n }\r\n case types.GET_PLAN_PROFILE_FAIL:\r\n return {\r\n ...state,\r\n profileError: actions.error,\r\n planProfileLoading: false,\r\n // TODO: TEMP\r\n // planProfile: null,\r\n }\r\n case types.GET_PLAN_FILTERS_START:\r\n return {\r\n ...state,\r\n planFiltersLoading: true,\r\n planFiltersError: null,\r\n }\r\n case types.GET_PLAN_FILTERS_SUCCESS:\r\n return {\r\n ...state,\r\n planFilters: actions.payload,\r\n planFiltersLoading: false,\r\n }\r\n case types.GET_PLAN_FILTERS_FAIL:\r\n return {\r\n ...state,\r\n planFiltersError: actions.error,\r\n planFiltersLoading: false,\r\n }\r\n case types.UPDATE_PLAN:\r\n return {\r\n ...state,\r\n plan: actions.payload,\r\n }\r\n case types.ADD_COMMENT_START:\r\n return {\r\n ...state,\r\n addingComment: true,\r\n }\r\n case types.ADD_COMMENT_SUCCESS:\r\n return {\r\n ...state,\r\n addingComment: false,\r\n }\r\n case types.ADD_COMMENT_FAIL:\r\n return {\r\n ...state,\r\n addingComment: false,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default reducer\r\n","import * as types from './constants'\r\n\r\nconst initialState = {\r\n cart: [],\r\n addresses: [],\r\n addressIsLoading: false,\r\n\r\n submittingOrderId: null,\r\n submittingOrder: false,\r\n}\r\n\r\nconst reducer = (state = initialState, actions) => {\r\n switch (actions.type) {\r\n case types.ADD_TO_CART:\r\n return {\r\n ...state,\r\n cart: [...state.cart, actions.payload],\r\n }\r\n case types.SET_CART:\r\n return {\r\n ...state,\r\n cart: actions.payload,\r\n }\r\n case types.RESET_CART:\r\n return {\r\n ...state,\r\n cart: [],\r\n }\r\n case types.GET_ADDRESSES_START:\r\n return {\r\n ...state,\r\n addressIsLoading: true,\r\n }\r\n case types.GET_ADDRESSES_SUCCESS:\r\n return {\r\n ...state,\r\n addresses: actions.payload,\r\n addressIsLoading: false,\r\n }\r\n case types.GET_ADDRESSES_FAIL:\r\n return {\r\n ...state,\r\n addressIsLoading: false,\r\n }\r\n case types.SUBMIT_ORDER_START:\r\n return {\r\n ...state,\r\n submittingOrder: true,\r\n }\r\n case types.SUBMIT_ORDER_SUCCESS:\r\n return {\r\n ...state,\r\n submittingOrderId: actions.payload,\r\n submittingOrder: false,\r\n }\r\n case types.SUBMIT_ORDER_FAIL:\r\n return {\r\n ...state,\r\n submittingOrder: false,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default reducer\r\n","import { combineReducers } from 'redux'\r\nimport { IntlReducer as Intl } from 'react-redux-multilingual'\r\n\r\nimport auth from './auth/reducer'\r\nimport user from './user/reducer'\r\nimport photoEditor from './photoEditor/reducer'\r\nimport placeDetector from './placeDetector/reducer'\r\nimport tools from './tools/reducer'\r\nimport plan from './plan/reducer'\r\nimport payment from './payment/reducer'\r\n\r\nexport default combineReducers({\r\n tools,\r\n auth,\r\n user,\r\n photoEditor,\r\n placeDetector,\r\n plan,\r\n payment,\r\n Intl,\r\n})\r\n","import { createStore, applyMiddleware, compose } from 'redux'\r\nimport rootReducer from './rootReducer'\r\nimport refreshTokenMiddleware from './auth/refreshTokenMiddleware'\r\nimport thunk from 'redux-thunk'\r\nimport { IntlActions } from 'react-redux-multilingual'\r\nimport { persistStore, persistReducer } from 'redux-persist'\r\nimport storage from 'redux-persist/lib/storage' // defaults to localStorage for web\r\n\r\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\nconst persistConfig = {\r\n key: 'root',\r\n storage,\r\n whitelist: ['payment']\r\n}\r\nconst persistedReducer = persistReducer(persistConfig, rootReducer)\r\n\r\nexport default () => {\r\n let store = createStore(persistedReducer, composeEnhancers(applyMiddleware(thunk)))\r\n store.dispatch(IntlActions.setLocale('fa'))\r\n let persistor = persistStore(store)\r\n return { store, persistor }\r\n}","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n \r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// function eventFire(el, etype) {\r\n// if (el.fireEvent) {\r\n// el.fireEvent('on' + etype);\r\n// } else {\r\n// var evObj = document.createEvent('Events');\r\n// evObj.initEvent(etype, true, false);\r\n// el.dispatchEvent(evObj);\r\n// }\r\n// }\r\n// eventFire(document.querySelector('canvas'), 'drag');\r\n\r\n// // eventFire(document.querySelector('.pin'), 'click');\r\n// // setTimeout(() => {\r\n// // eventFire(document.querySelector('.pin'), 'click');\r\n// // setTimeout(() => {\r\n// // eventFire(document.querySelector('.request-button'), 'click');\r\n// // setTimeout(() => {\r\n// // console.log(document.querySelector('a.call').getAttribute(\"href\"))\r\n// // }, 40000)\r\n// // }, 10000)\r\n// // }, 5000)\r\n\r\n\r\n\r\n\r\n// setTimeout(() => {\r\n\r\n// var data = {\r\n// destination_lat: 35.73609319561005,\r\n// destination_lng: 51.4447093290828,\r\n// origin_lat: 35.73409098354901,\r\n// origin_lng: 51.44446726813848,\r\n// round_trip: 0,\r\n// extra_info: \"\",\r\n// is_paid_by_recipient: 0,\r\n// package_info: \"\",\r\n// recipient_cellphone: \"\",\r\n// recipient_name: \"\",\r\n// round_trip: 0,\r\n// service_type: \"1\",\r\n// }\r\n// var xhttp = new XMLHttpRequest();\r\n// xhttp.open(\"POST\", \"https://web-api.snapp.ir/api/v1/ride/request\", true);\r\n// xhttp.setRequestHeader(\"authorization\", \"c9003cb34e5b2a6c2599fa2251e104e51592224966\");\r\n// xhttp.setRequestHeader(\"accept\", \"application/json\");\r\n// xhttp.setRequestHeader(\"accept-language\", \"en-US,en;q=0.9,fa;q=0.8\");\r\n// xhttp.send(JSON.stringify(data));\r\n// setTimeout(() => {\r\n// window.location.reload();\r\n// setTimeout(() => {\r\n// console.log(window.location.href)\r\n// } , 3000)\r\n// }, 10000)\r\n// }, 1000)\r\n\r\n\r\n\r\n","import { labels } from './labels'\r\nimport { messages } from './messages'\r\n\r\nconst translations = {\r\n fa: {\r\n locale: 'fa',\r\n messages: Object.assign(labels, messages)\r\n }\r\n}\r\n\r\nexport default translations","export const labels = {\r\n login: 'وارد شوید',\r\n help: 'مشاهده راهنمای استفاده',\r\n notRegisteredYet:'هنوز ثبت نام نکرده ام',\r\n forgotYourPassword:'رمز عبور خود را فراموش کرده‌اید؟',\r\n email:'ایمیل',\r\n password:'رمزعبور'\r\n}","export const messages = {\r\n requiredField: 'فیلد الزامی است',\r\n invalidEmailFormat: 'لطفا یک ایمیل معتبر وارد کنید',\r\n invalidMobileFormat: 'لطفا یک شماره تلفن همراه معتبر وارد کنید',\r\n passwordMinLength: 'رمز عبور باید حداقل 8 حرف باشد' \r\n}","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport { HashRouter } from 'react-router-dom'\r\nimport './index.css'\r\nimport App from './App'\r\nimport { Provider } from 'react-redux'\r\nimport redux from './redux/store'\r\nimport * as serviceWorker from './serviceWorker'\r\nimport { IntlProvider } from 'react-redux-multilingual'\r\nimport translations from './i18n/fa/translations'\r\nimport { PersistGate } from 'redux-persist/integration/react'\r\nimport { ToastContainer } from 'react-toastify'\r\n\r\nimport './assets/scss/components/_toastify.scss'\r\n\r\nconst { store, persistor } = redux()\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n)\r\n\r\nserviceWorker.unregister()\r\n","import * as types from './constants'\r\nimport apiService, { setAxiosHeader } from '../../apiService/apiService'\r\nimport { toPlanProfile, toUserProfile } from '../../mapper/planMapper'\r\nimport { toast } from 'react-toastify'\r\n\r\nexport const registerUser = (\r\n password,\r\n firstName,\r\n lastName,\r\n mobile,\r\n history\r\n) => {\r\n const data = {\r\n Password: password,\r\n Mobile: mobile,\r\n FirstName: firstName,\r\n LastName: lastName,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.REGISTERATION_START,\r\n })\r\n apiService.auth\r\n .register(data)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.REGISTERATION_SUCCESS,\r\n isRegistrationDone: true,\r\n })\r\n } else {\r\n dispatch({\r\n type: types.REGISTERATION_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n if (error?.response?.status == '403') {\r\n dispatch({\r\n type: types.REGISTERATION_DUPLICATE,\r\n payload: error.response.data,\r\n })\r\n history.push('/signin')\r\n return\r\n }\r\n\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.REGISTERATION_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const validateUser = (mobile, validationKey, history) => {\r\n const data = {\r\n userName: mobile,\r\n token: validationKey,\r\n }\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.VALIDATION_START,\r\n })\r\n apiService.auth\r\n .validateUser(data)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n const { token } = response.data\r\n localStorage.setItem('token', token)\r\n setAxiosHeader(token)\r\n dispatch({\r\n type: types.VALIDATION_SUCCESS,\r\n payload: token,\r\n })\r\n window.location.href = '/app'\r\n } else {\r\n dispatch({\r\n type: types.VALIDATION_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.VALIDATION_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const getProfile = () => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.VALIDATION_START,\r\n })\r\n apiService.profile\r\n .get()\r\n .then(async (response) => {\r\n if (response.status == 200) {\r\n const profile = response.data\r\n const { data: imageUrl } =\r\n await apiService.profile.getProfilePicture()\r\n return dispatch({\r\n type: types.GET_PROFILE_SUCCESS,\r\n payload: { ...toUserProfile(profile), image: imageUrl },\r\n })\r\n } else {\r\n dispatch({\r\n type: types.GET_PROFILE_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.GET_PROFILE_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const uploadProfile = (file) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.UPLOAD_PROFILE_START,\r\n })\r\n\r\n apiService.profile\r\n .uploadProfile(file)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.UPLOAD_PROFILE_SUCCESS,\r\n })\r\n toast.success('عکس پروفایل شما با موفقیت آپلود شد')\r\n\r\n return dispatch(getProfile())\r\n } else {\r\n dispatch({\r\n type: types.UPLOAD_PROFILE_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n toast.error(\r\n 'مشکلی در آپلود عکس پروفایل بوجود آمد، لطفا دوباره تلاش کنید'\r\n )\r\n\r\n dispatch({\r\n type: types.UPLOAD_PROFILE_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const changeName = (firstName, lastName) => {\r\n return (dispatch) => {\r\n dispatch({\r\n type: types.CHANGE_NAME_START,\r\n })\r\n\r\n apiService.profile\r\n .changeName(firstName, lastName)\r\n .then((response) => {\r\n dispatch({\r\n type: types.CHANGE_NAME_SUCCESS,\r\n })\r\n toast.success('نام با موفقیت تغییر یافت')\r\n return dispatch(getProfile())\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n toast.error('تغییر نام با مشکل مواجه شد، لطفا دوباره تلاش کنید')\r\n dispatch({\r\n type: types.CHANGE_NAME_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n\r\nexport const uploadPlan = (dataUrl) => {\r\n return (dispatch, getState) => {\r\n const fabricIds =\r\n getState().tools.roomInDesignStage?.selectedPrespectives?.map(\r\n (q) => q.material.id\r\n )\r\n const roomId = getState().tools.roomInDesignStage?.id\r\n\r\n dispatch({\r\n type: types.UPLOAD_PLAN_START,\r\n })\r\n\r\n if (!fabricIds || fabricIds.length === 0) {\r\n return dispatch({\r\n type: types.UPLOAD_PLAN_FAIL,\r\n error: null,\r\n })\r\n }\r\n\r\n apiService.profile\r\n .uploadPlan(dataUrl, roomId, fabricIds)\r\n .then((response) => {\r\n if (response.status == 200) {\r\n dispatch({\r\n type: types.UPLOAD_PLAN_SUCCESS,\r\n })\r\n return dispatch(getProfile())\r\n } else {\r\n dispatch({\r\n type: types.UPLOAD_PLAN_FAIL,\r\n error:\r\n response.data.message ||\r\n response.data.errors[0].description,\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n let errorMessage = error\r\n if (error?.response?.data) errorMessage = error.response.data\r\n dispatch({\r\n type: types.UPLOAD_PLAN_FAIL,\r\n error: errorMessage,\r\n })\r\n })\r\n }\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/SHOPPING.7dc322a0.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo-white.f083a363.svg\";","module.exports = __webpack_public_path__ + \"static/media/information.a0026945.svg\";","import {\r\n createPatternFromImage,\r\n createPatternFromImageForDrawing,\r\n} from './fileHelper'\r\n\r\nconst defultimgInitialWidth = 100\r\nvar imgInitialWidth = defultimgInitialWidth\r\nconst imgFinalWidth = 800\r\nconst opacity = 0.7\r\n\r\nconst _defaultOptions = {\r\n skewSign: 1,\r\n width: null,\r\n height: null,\r\n pathData: null,\r\n points: [\r\n [97, 158],\r\n [432, 102],\r\n [875, 159],\r\n [576, 211],\r\n [879, 398],\r\n [576, 491],\r\n ],\r\n breakRatio: 1,\r\n corner_points: [\r\n [0, 0],\r\n [0, 0],\r\n [0, 0],\r\n [0, 0],\r\n ],\r\n controls: [],\r\n triangles: [],\r\n skewAngle: Math.PI / 4,\r\n showFrame: true,\r\n subs: (7 * 8) / 2,\r\n divs: (7 * 8) / 2,\r\n scaleFactor: 4,\r\n dirtyTriangles: true,\r\n canvas: null,\r\n image: null,\r\n context: null,\r\n}\r\n\r\nlet options = {\r\n ..._defaultOptions,\r\n}\r\n\r\nexport const warpOnCube = (\r\n pts,\r\n mode,\r\n imgSrc,\r\n imgWidth,\r\n imgHeight,\r\n pathData,\r\n { zoom, offsetH, offsetV },\r\n { cornerPoints, breakRatio, skewAngle }\r\n) =>\r\n new Promise((resolve, reject) => {\r\n options = { ..._defaultOptions }\r\n\r\n options.width = imgWidth\r\n options.height = imgHeight\r\n options.pathData = pathData\r\n options.corner_points = cornerPoints\r\n options.breakRatio = breakRatio\r\n\r\n imgInitialWidth = (zoom / 100) * defultimgInitialWidth\r\n\r\n options.points = pts\r\n options.mode = mode\r\n options.skewSign = mode == 4 ? -1 : 1\r\n\r\n options.skewAngle = skewAngle\r\n\r\n options.image = new Image()\r\n options.image.crossOrigin = 'Anonymous'\r\n\r\n options.image.onload = () =>\r\n draw(() => {\r\n const { canvas } = options\r\n let img = canvas.toDataURL('image/png')\r\n\r\n options.context.clip(new Path2D(options.pathData))\r\n resolve(img)\r\n })\r\n\r\n createPatternFromImageForDrawing(\r\n imgSrc,\r\n imgInitialWidth,\r\n imgFinalWidth,\r\n offsetH,\r\n offsetV\r\n ).then((imgBase64) => {\r\n options.image.setAttribute('src', imgBase64)\r\n })\r\n\r\n options.canvas = document.createElement('canvas')\r\n\r\n options.canvas.width = imgWidth\r\n options.canvas.height = imgHeight\r\n\r\n document.body.appendChild(options.canvas)\r\n options.context = options.canvas.getContext('2d')\r\n\r\n options.context.clearRect(\r\n 0,\r\n 0,\r\n options.canvas.width,\r\n options.canvas.height\r\n )\r\n })\r\n\r\nexport const warpOnCubeWithControls = (\r\n canvas,\r\n pts,\r\n mode,\r\n imgSrc,\r\n imgWidth,\r\n imgHeight,\r\n pathData,\r\n cornerPoints,\r\n breakRatio,\r\n skewAngle,\r\n isNew,\r\n callback\r\n) => {\r\n options = { ..._defaultOptions }\r\n\r\n options.width = imgWidth\r\n options.height = imgHeight\r\n options.pathData = pathData\r\n if (cornerPoints) options.corner_points = cornerPoints\r\n\r\n options.points = pts\r\n options.mode = mode\r\n options.skewSign = mode == 4 ? -1 : 1\r\n\r\n options.skewAngle = skewAngle\r\n if (mode != 1) calcLengthAndAngles(breakRatio)\r\n if (isNew) stretchPoints()\r\n\r\n options.image = new Image()\r\n options.image.crossOrigin = 'Anonymous'\r\n\r\n options.image.onload = () =>\r\n draw(() => {\r\n callback({\r\n points: options.points,\r\n cornerPoints: options.corner_points,\r\n breakRatio: options.breakRatio,\r\n })\r\n })\r\n\r\n createPatternFromImage(imgSrc, imgInitialWidth, imgFinalWidth).then(\r\n (imgBase64) => {\r\n options.image.setAttribute('src', imgBase64)\r\n }\r\n )\r\n\r\n options.canvas = canvas\r\n options.canvas.width = imgWidth\r\n options.canvas.height = imgHeight\r\n\r\n options.context = options.canvas.getContext('2d')\r\n\r\n options.context.clearRect(0, 0, options.canvas.width, options.canvas.height)\r\n options.context.clip(new Path2D(options.pathData))\r\n\r\n let { controls, points } = options\r\n\r\n controls = []\r\n for (let i = 0; i < 6; i++) {\r\n let control = document.createElement('div')\r\n control.setAttribute('data-node', i)\r\n control.innerText = i + 1\r\n control.classList.add('node')\r\n canvas.parentNode.insertBefore(control, canvas.nextSibling)\r\n controls.push(control)\r\n }\r\n\r\n controls[0].style.left = points[0][0] + 'px'\r\n controls[0].style.top = points[0][1] + 'px'\r\n\r\n controls[1].style.left = points[1][0] + 'px'\r\n controls[1].style.top = points[1][1] + 'px'\r\n\r\n controls[2].style.left = points[2][0] + 'px'\r\n controls[2].style.top = points[2][1] + 'px'\r\n\r\n controls[3].style.left = points[3][0] + 'px'\r\n controls[3].style.top = points[3][1] + 'px'\r\n\r\n if (mode == 1) {\r\n controls[2].style.display = 'none'\r\n controls[3].style.display = 'none'\r\n }\r\n\r\n controls[4].style.left = points[4][0] + 'px'\r\n controls[4].style.top = points[4][1] + 'px'\r\n\r\n controls[5].style.left = points[5][0] + 'px'\r\n controls[5].style.top = points[5][1] + 'px'\r\n\r\n options.controls = controls\r\n options.canvas = canvas\r\n options.context = options.context\r\n}\r\n\r\nexport const updateCubeByNodes = (e, node, callback) => {\r\n let { points, skewSign, mode } = options\r\n options.dirtyTriangles = true\r\n\r\n let nodeIndex = parseInt(node.getAttribute('data-node'))\r\n\r\n if (nodeIndex >= 6) return\r\n\r\n let ratio = 0\r\n\r\n switch (nodeIndex) {\r\n case 0:\r\n case 3:\r\n case 5:\r\n let l03 = lengthOf(0, 3)\r\n let l05 = lengthOf(0, 5)\r\n ratio = l03 / l05\r\n break\r\n case 1:\r\n case 2:\r\n case 4:\r\n let l12 = lengthOf(1, 2)\r\n let l14 = lengthOf(1, 4)\r\n ratio = l12 / l14\r\n break\r\n default:\r\n break\r\n }\r\n\r\n let dx = e.pageX - points[nodeIndex][0]\r\n let dy = e.pageY - points[nodeIndex][1]\r\n let x = e.pageX\r\n let y = e.pageY\r\n\r\n //#region Block Extra Y Movement\r\n if (nodeIndex == 0) {\r\n if (y >= points[5][1]) {\r\n y = points[5][1]\r\n dy = 0\r\n }\r\n }\r\n\r\n if (nodeIndex == 1) {\r\n if (y >= points[4][1]) {\r\n y = points[4][1]\r\n dy = 0\r\n }\r\n }\r\n\r\n if (nodeIndex == 5) {\r\n if (y <= points[0][1]) {\r\n y = points[0][1]\r\n dy = 0\r\n }\r\n }\r\n\r\n if (nodeIndex == 4) {\r\n if (y <= points[1][1]) {\r\n y = points[1][1]\r\n dy = 0\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Block Perspective Left Extra X Movement\r\n\r\n if (mode == 3) {\r\n if (nodeIndex == 5) {\r\n if (x <= points[0][0] + 5) {\r\n x = points[0][0] + 5\r\n dx = 0\r\n dy = 0\r\n }\r\n }\r\n\r\n if (nodeIndex == 4) {\r\n if (x <= points[1][0] + 5) {\r\n x = points[1][0] + 5\r\n dx = 0\r\n dy = 0\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Block Perspective Right Extra X Movement\r\n\r\n if (mode == 4) {\r\n if (nodeIndex == 5) {\r\n if (x >= points[0][0] - 5) {\r\n x = points[0][0] - 5\r\n dx = 0\r\n dy = 0\r\n }\r\n }\r\n\r\n if (nodeIndex == 4) {\r\n if (x >= points[1][0] - 5) {\r\n x = points[1][0] - 5\r\n dx = 0\r\n dy = 0\r\n }\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Block Perspective Front Extra X Movement\r\n\r\n if (mode == 2) {\r\n if (nodeIndex == 5) {\r\n if (x <= points[0][0] + 5) {\r\n x = points[0][0] + 5\r\n dx = 0\r\n dy = 0\r\n }\r\n }\r\n\r\n if (nodeIndex == 4) {\r\n if (x >= points[1][0] - 5) {\r\n x = points[1][0] - 5\r\n dx = 0\r\n dy = 0\r\n }\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n if (nodeIndex == 3 || nodeIndex == 2) {\r\n let alpha = 1\r\n\r\n if (nodeIndex == 3) {\r\n alpha = Math.atan2(\r\n points[5][1] - points[0][1],\r\n points[5][0] - points[0][0]\r\n )\r\n } else\r\n alpha = Math.atan2(\r\n points[4][1] - points[1][1],\r\n points[4][0] - points[1][0]\r\n )\r\n\r\n x = points[nodeIndex][0] + dx\r\n y = points[nodeIndex][1] + dx * Math.tan(alpha)\r\n\r\n if (nodeIndex == 3) {\r\n if (skewSign > 0) {\r\n if (x < points[0][0]) {\r\n x = points[0][0]\r\n }\r\n if (x > points[5][0]) {\r\n x = points[5][0]\r\n }\r\n if (y < points[0][1]) {\r\n y = points[0][1]\r\n }\r\n if (y > points[5][1]) {\r\n y = points[5][1]\r\n }\r\n } else {\r\n if (x > points[0][0]) {\r\n x = points[0][0]\r\n }\r\n if (x < points[5][0]) {\r\n x = points[5][0]\r\n }\r\n if (y < points[0][1]) {\r\n y = points[0][1]\r\n }\r\n if (y > points[5][1]) {\r\n y = points[5][1]\r\n }\r\n }\r\n }\r\n\r\n if (nodeIndex == 2) {\r\n if (skewSign > 0 && mode != 2) {\r\n if (x < points[1][0]) {\r\n x = points[1][0]\r\n }\r\n if (x > points[4][0]) {\r\n x = points[4][0]\r\n }\r\n\r\n if (y < points[1][1]) {\r\n y = points[1][1]\r\n }\r\n if (y > points[4][1]) {\r\n y = points[4][1]\r\n }\r\n } else {\r\n if (x > points[1][0]) {\r\n x = points[1][0]\r\n }\r\n if (x < points[4][0]) {\r\n x = points[4][0]\r\n }\r\n\r\n if (y < points[1][1]) {\r\n y = points[1][1]\r\n }\r\n if (y > points[4][1]) {\r\n y = points[4][1]\r\n }\r\n }\r\n }\r\n }\r\n\r\n node.style.left = x + 'px'\r\n node.style.top = y + 'px'\r\n\r\n points[nodeIndex] = [x, y]\r\n\r\n updateSameLinePoints(nodeIndex, dx, dy, ratio)\r\n\r\n updateCornerPoints(nodeIndex, dx, dy, ratio)\r\n\r\n calcBreakLine(nodeIndex)\r\n\r\n draw(() =>\r\n callback({\r\n points: options.points,\r\n cornerPoints: options.corner_points,\r\n breakRatio: options.breakRatio,\r\n })\r\n )\r\n}\r\n\r\nexport const updateCubeSkewAngle = (skewAngle, callback) => {\r\n options.skewAngle = skewAngle\r\n\r\n draw(() =>\r\n callback({\r\n points: options.points,\r\n cornerPoints: options.corner_points,\r\n breakRatio: options.breakRatio,\r\n })\r\n )\r\n}\r\n\r\nconst calcLengthAndAngles = (breakRatio = null) => {\r\n const { skewSign, points } = options\r\n\r\n let deviation = Math.abs(Math.abs(angleOf(3, 2)) - Math.abs(angleOf(1, 2)))\r\n\r\n if (skewSign < 0) {\r\n const skewAngle =\r\n Math.PI / 4 -\r\n (Math.abs(angleOf(3, 2)) > Math.PI / 2\r\n ? Math.PI - Math.abs(angleOf(3, 2))\r\n : Math.abs(angleOf(3, 2)))\r\n // options.skewAngle = skewAngle - deviation\r\n } else {\r\n const skewAngle = Math.PI / 4\r\n // Math.PI / 4 +\r\n // (Math.abs(angleOf(3, 2)) > Math.PI / 2\r\n // ? Math.PI - Math.abs(angleOf(3, 2))\r\n // : Math.abs(angleOf(3, 2)))\r\n // options.skewAngle = skewAngle + deviation\r\n }\r\n\r\n calcBreakLine(null, breakRatio)\r\n}\r\n\r\nconst calcBreakLine = (nodeIndex = 3, breakRatio) => {\r\n if (breakRatio) {\r\n options.breakRatio = breakRatio\r\n return\r\n }\r\n\r\n const { subs } = options\r\n\r\n options.breakRatio = 0\r\n\r\n if (nodeIndex == 3)\r\n options.breakRatio = lengthOf(0, 3) / (lengthOf(5, 3) + lengthOf(0, 3))\r\n else options.breakRatio = lengthOf(1, 2) / (lengthOf(4, 2) + lengthOf(1, 2))\r\n\r\n options.breakRatio = Math.round(subs * options.breakRatio)\r\n}\r\n\r\nconst stretchPoints = () => {\r\n const baseLength = 200\r\n\r\n let d0_3 = lengthOf(0, 3)\r\n let d3_5 = lengthOf(3, 5)\r\n let d0_1 = lengthOf(0, 1)\r\n let d2_3 = lengthOf(2, 3)\r\n let d2_4 = lengthOf(2, 4)\r\n let d1_2 = lengthOf(1, 2)\r\n\r\n const targetAngle1 = -(Math.PI / 2 + angleOf(0, 3))\r\n const targetAngle2 = -(Math.PI / 2 + angleOf(1, 2))\r\n\r\n // extend shape with amount of break point (cube edge) points 3, 4\r\n const { points, corner_points, skewSign, mode } = options\r\n let { scaleFactor } = options\r\n\r\n let length = lengthOf(3, 5)\r\n points[5][0] = points[3][0] + length * Math.sin(targetAngle1)\r\n points[5][1] = points[3][1] + length * Math.cos(targetAngle1)\r\n\r\n length = lengthOf(2, 4)\r\n points[4][0] = points[2][0] + length * Math.sin(targetAngle2)\r\n points[4][1] = points[2][1] + length * Math.cos(targetAngle2)\r\n\r\n if (d3_5 == 0) d3_5 = d0_3\r\n if (d2_4 == 0) d2_4 = d1_2\r\n\r\n const maxLength = Math.max(...[d0_3, d3_5, d0_1, d2_3, d2_4, d1_2])\r\n\r\n d0_3 = (d0_3 / maxLength) * baseLength\r\n d3_5 = (d3_5 / maxLength) * baseLength\r\n d0_1 = (d0_1 / maxLength) * baseLength\r\n d2_3 = (d2_3 / maxLength) * baseLength\r\n d2_4 = (d2_4 / maxLength) * baseLength\r\n d1_2 = (d1_2 / maxLength) * baseLength\r\n\r\n if (mode == 1) scaleFactor /= 2\r\n\r\n corner_points[0][0] =\r\n points[0][0] +\r\n (scaleFactor * d0_3 * Math.cos(angleOf(0, 3)) +\r\n scaleFactor * d0_1 * Math.cos(angleOf(0, 1)))\r\n corner_points[0][1] =\r\n points[0][1] +\r\n (scaleFactor * d0_3 * Math.sin(angleOf(0, 3)) +\r\n scaleFactor * d0_1 * Math.sin(angleOf(0, 1)))\r\n\r\n corner_points[3][0] =\r\n points[5][0] +\r\n (scaleFactor * d2_3 * Math.cos(angleOf(3, 2)) -\r\n scaleFactor * d3_5 * Math.cos(angleOf(0, 3)))\r\n corner_points[3][1] =\r\n points[5][1] +\r\n (scaleFactor * d2_3 * Math.sin(angleOf(3, 2)) -\r\n scaleFactor * d3_5 * Math.sin(angleOf(0, 3)))\r\n\r\n corner_points[1][0] =\r\n points[1][0] +\r\n (scaleFactor * d1_2 * Math.cos(angleOf(1, 2)) -\r\n scaleFactor * d0_1 * Math.cos(angleOf(0, 1)))\r\n corner_points[1][1] =\r\n points[1][1] +\r\n (scaleFactor * d1_2 * Math.sin(angleOf(1, 2)) -\r\n scaleFactor * d0_1 * Math.sin(angleOf(0, 1)))\r\n\r\n corner_points[2][0] =\r\n points[4][0] +\r\n (-scaleFactor * d2_4 * Math.cos(angleOf(1, 2)) -\r\n scaleFactor * d2_3 * Math.cos(angleOf(3, 2)))\r\n corner_points[2][1] =\r\n points[4][1] +\r\n (-scaleFactor * d2_4 * Math.sin(angleOf(1, 2)) -\r\n scaleFactor * d2_3 * Math.sin(angleOf(3, 2)))\r\n\r\n options.corner_points = corner_points\r\n options.points = points\r\n}\r\n\r\nconst updateCornerPoints = (nodeIndex, dx, dy, ratio) => {\r\n const { corner_points, scaleFactor } = options\r\n\r\n switch (nodeIndex) {\r\n case 0: //corner point index of 3\r\n corner_points[0][0] += dx * scaleFactor\r\n corner_points[0][1] += dy * scaleFactor\r\n break\r\n case 1: //corner point index of 3\r\n corner_points[1][0] += dx * scaleFactor\r\n corner_points[1][1] += dy * scaleFactor\r\n break\r\n case 4: //corner point index of 3\r\n corner_points[2][0] += dx * scaleFactor\r\n corner_points[2][1] += dy * scaleFactor\r\n break\r\n case 5: //corner point index of 3\r\n corner_points[3][0] += dx * scaleFactor\r\n corner_points[3][1] += dy * scaleFactor\r\n break\r\n\r\n default:\r\n break\r\n }\r\n options.corner_points = corner_points\r\n}\r\n\r\nconst updateSameLinePoints = (nodeIndex, dx, dy, ratio) => {\r\n let { points, controls } = options\r\n let deltaX, deltaY, alpha\r\n switch (nodeIndex) {\r\n case 0:\r\n case 5:\r\n deltaX = ratio * dx\r\n deltaY = ratio * dy\r\n\r\n points[3][0] += deltaX\r\n points[3][1] += deltaY\r\n\r\n controls[3].style.left = points[3][0] + 'px'\r\n controls[3].style.top = points[3][1] + 'px'\r\n break\r\n case 1:\r\n case 4:\r\n deltaX = ratio * dx\r\n deltaY = ratio * dy\r\n\r\n points[2][0] += deltaX\r\n points[2][1] += deltaY\r\n\r\n controls[2].style.left = points[2][0] + 'px'\r\n controls[2].style.top = points[2][1] + 'px'\r\n break\r\n\r\n case 2:\r\n alpha = angleOf(5, 0)\r\n points[3][0] =\r\n points[0][0] + ratio * lengthOf(0, 5) * Math.cos(alpha)\r\n points[3][1] =\r\n points[0][1] + ratio * lengthOf(0, 5) * Math.sin(alpha)\r\n controls[3].style.left = points[3][0] + 'px'\r\n controls[3].style.top = points[3][1] + 'px'\r\n break\r\n\r\n case 3:\r\n alpha = angleOf(4, 1)\r\n points[2][0] =\r\n points[1][0] + ratio * lengthOf(1, 4) * Math.cos(alpha)\r\n points[2][1] =\r\n points[1][1] + ratio * lengthOf(1, 4) * Math.sin(alpha)\r\n controls[2].style.left = points[2][0] + 'px'\r\n controls[2].style.top = points[2][1] + 'px'\r\n\r\n break\r\n default:\r\n break\r\n }\r\n\r\n options.points = points\r\n options.controls = controls\r\n}\r\n\r\nconst createPlane = (imgSrc) => {\r\n let { canvas, controls, points, mode } = options\r\n\r\n let image = new Image()\r\n image.onload = () => {\r\n draw()\r\n }\r\n\r\n createPatternFromImage(imgSrc, 200, 800).then((imgBase64) => {\r\n image.setAttribute('src', imgBase64)\r\n })\r\n\r\n canvas = document.getElementById('dynamic-cube-canvas')\r\n canvas.setAttribute('width', options.width)\r\n canvas.setAttribute('height', options.height)\r\n\r\n let context = canvas.getContext('2d')\r\n context.clearRect(0, 0, canvas.width, canvas.height)\r\n context.clip(new Path2D(options.pathData))\r\n\r\n controls = []\r\n for (let i = 0; i < 6; i++) {\r\n let control = document.createElement('div')\r\n control.setAttribute('data-node', i)\r\n control.innerText = i\r\n control.classList.add('node')\r\n canvas.parentNode.insertBefore(control, canvas.nextSibling)\r\n controls.push(control)\r\n }\r\n\r\n controls[0].style.left = points[0][0] + 'px'\r\n controls[0].style.top = points[0][1] + 'px'\r\n\r\n controls[1].style.left = points[1][0] + 'px'\r\n controls[1].style.top = points[1][1] + 'px'\r\n\r\n controls[2].style.left = points[2][0] + 'px'\r\n controls[2].style.top = points[2][1] + 'px'\r\n\r\n controls[3].style.left = points[3][0] + 'px'\r\n controls[3].style.top = points[3][1] + 'px'\r\n\r\n if (mode == 1) {\r\n controls[2].style.display = 'none'\r\n controls[3].style.display = 'none'\r\n }\r\n\r\n controls[4].style.left = points[4][0] + 'px'\r\n controls[4].style.top = points[4][1] + 'px'\r\n\r\n controls[5].style.left = points[5][0] + 'px'\r\n controls[5].style.top = points[5][1] + 'px'\r\n\r\n options.image = image\r\n options.controls = controls\r\n options.canvas = canvas\r\n options.context = context\r\n}\r\n\r\nconst renderPlane = (tri, number) => {\r\n const { context, showFrame, image } = options\r\n\r\n options.context = context\r\n\r\n if (image) {\r\n drawTriangle(\r\n context,\r\n image,\r\n tri.p0.x,\r\n tri.p0.y,\r\n tri.p1.x,\r\n tri.p1.y,\r\n tri.p2.x,\r\n tri.p2.y,\r\n tri.t0.u,\r\n tri.t0.v,\r\n tri.t1.u,\r\n tri.t1.v,\r\n tri.t2.u,\r\n tri.t2.v,\r\n number\r\n )\r\n }\r\n\r\n if (showFrame) {\r\n const left = (tri.p0.x + tri.p1.x + tri.p2.x) / 3\r\n const top = (tri.p0.y + tri.p1.y + tri.p2.y) / 3\r\n const color = context.getImageData(left, top, 1, 1)\r\n context.strokeStyle = `rgba(${color.data[0]},${color.data[1]},${color.data[2]},0.2)`\r\n // context.strokeStyle = `rgba(127,76,77,0.2)`\r\n context.beginPath()\r\n context.moveTo(tri.p0.x, tri.p0.y)\r\n context.lineTo(tri.p1.x, tri.p1.y)\r\n context.lineTo(tri.p2.x, tri.p2.y)\r\n context.lineTo(tri.p0.x, tri.p0.y)\r\n context.stroke()\r\n context.closePath()\r\n }\r\n}\r\n\r\nconst draw = (callback) => {\r\n const { canvas, context, dirtyTriangles } = options\r\n let { triangles } = options\r\n\r\n context.clearRect(0, 0, window.innerWidth, window.innerHeight)\r\n if (dirtyTriangles) {\r\n options.dirtyTriangles = false\r\n triangles = calculateGeometry()\r\n options.triangles = triangles\r\n }\r\n\r\n let k = 0\r\n for (const triangle of triangles) {\r\n k++\r\n renderPlane(triangle, k)\r\n }\r\n\r\n if (callback) callback()\r\n}\r\n\r\nconst calculateGeometry = () => {\r\n const { corner_points, points, image, subs, divs } = options\r\n // clear triangles out\r\n let triangles = []\r\n\r\n let r = 12\r\n // generate subdivision\r\n\r\n let p = corner_points\r\n\r\n let p1 = new Point(p[0][0] + r, p[0][1] + r)\r\n let p2 = new Point(p[1][0] + r, p[1][1] + r)\r\n\r\n // let p3 = new Point(p[4][0] + r, p[4][1] + r)\r\n // let p4 = new Point(p[5][0] + r, p[5][1] + r)\r\n\r\n let p3 = new Point(p[2][0] + r, p[2][1] + r)\r\n let p4 = new Point(p[3][0] + r, p[3][1] + r)\r\n\r\n let dx1 = p4.x - p1.x\r\n let dy1 = p4.y - p1.y\r\n let dx2 = p3.x - p2.x\r\n let dy2 = p3.y - p2.y\r\n\r\n let imgW = image.naturalWidth\r\n let imgH = image.naturalHeight\r\n\r\n for (let sub = 0; sub < subs; ++sub) {\r\n let curRow = sub / subs\r\n let nextRow = (sub + 1) / subs\r\n\r\n let curRowX1 = p1.x + dx1 * curRow\r\n let curRowY1 = p1.y + dy1 * curRow\r\n\r\n let curRowX2 = p2.x + dx2 * curRow\r\n let curRowY2 = p2.y + dy2 * curRow\r\n\r\n let nextRowX1 = p1.x + dx1 * nextRow\r\n let nextRowY1 = p1.y + dy1 * nextRow\r\n\r\n let nextRowX2 = p2.x + dx2 * nextRow\r\n let nextRowY2 = p2.y + dy2 * nextRow\r\n\r\n for (let div = 0; div < divs; ++div) {\r\n let curCol = div / divs\r\n let nextCol = (div + 1) / divs\r\n\r\n let dCurX = curRowX2 - curRowX1\r\n let dCurY = curRowY2 - curRowY1\r\n let dNextX = nextRowX2 - nextRowX1\r\n let dNextY = nextRowY2 - nextRowY1\r\n\r\n let p1x = curRowX1 + dCurX * curCol\r\n let p1y = curRowY1 + dCurY * curCol\r\n\r\n let p2x = curRowX1 + (curRowX2 - curRowX1) * nextCol\r\n let p2y = curRowY1 + (curRowY2 - curRowY1) * nextCol\r\n\r\n let p3x = nextRowX1 + dNextX * nextCol\r\n let p3y = nextRowY1 + dNextY * nextCol\r\n\r\n let p4x = nextRowX1 + dNextX * curCol\r\n let p4y = nextRowY1 + dNextY * curCol\r\n\r\n let u1 = curCol * imgW\r\n let u2 = nextCol * imgW\r\n let v1 = curRow * imgH\r\n let v2 = nextRow * imgH\r\n\r\n let triangle1 = new Triangle(\r\n new Point(p1x, p1y),\r\n new Point(p3x, p3y),\r\n new Point(p4x, p4y),\r\n new TextCoord(u1, v1),\r\n new TextCoord(u2, v2),\r\n new TextCoord(u1, v2)\r\n )\r\n\r\n let triangle2 = new Triangle(\r\n new Point(p1x, p1y),\r\n new Point(p2x, p2y),\r\n new Point(p3x, p3y),\r\n new TextCoord(u1, v1),\r\n new TextCoord(u2, v1),\r\n new TextCoord(u2, v2)\r\n )\r\n\r\n triangles.push(triangle1)\r\n triangles.push(triangle2)\r\n }\r\n }\r\n\r\n return triangles\r\n}\r\n\r\nconst drawTriangle = (\r\n ctx,\r\n img,\r\n x0,\r\n y0,\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n sx0,\r\n sy0,\r\n sx1,\r\n sy1,\r\n sx2,\r\n sy2,\r\n number\r\n) => {\r\n const { skewAngle, skewSign, subs, divs, breakRatio, mode } = options\r\n ctx.save()\r\n\r\n let denom = sx0 * (sy2 - sy1) - sx1 * sy2 + sx2 * sy1 + (sx1 - sx2) * sy0\r\n if (denom == 0) {\r\n return\r\n }\r\n\r\n let m11 =\r\n -(sy0 * (x2 - x1) - sy1 * x2 + sy2 * x1 + (sy1 - sy2) * x0) / denom\r\n let m12 = (sy1 * y2 + sy0 * (y1 - y2) - sy2 * y1 + (sy2 - sy1) * y0) / denom\r\n let m21 = (sx0 * (x2 - x1) - sx1 * x2 + sx2 * x1 + (sx1 - sx2) * x0) / denom\r\n let m22 =\r\n -(sx1 * y2 + sx0 * (y1 - y2) - sx2 * y1 + (sx2 - sx1) * y0) / denom\r\n let dx =\r\n (sx0 * (sy2 * x1 - sy1 * x2) +\r\n sy0 * (sx1 * x2 - sx2 * x1) +\r\n (sx2 * sy1 - sx1 * sy2) * x0) /\r\n denom\r\n let dy =\r\n (sx0 * (sy2 * y1 - sy1 * y2) +\r\n sy0 * (sx1 * y2 - sx2 * y1) +\r\n (sx2 * sy1 - sx1 * sy2) * y0) /\r\n denom\r\n\r\n ctx.beginPath()\r\n ctx.moveTo(x0, y0)\r\n ctx.lineTo(x1, y1)\r\n ctx.lineTo(x2, y2)\r\n ctx.closePath()\r\n\r\n ctx.clip()\r\n\r\n ctx.transform(m11, m12, m21, m22, dx, dy)\r\n\r\n ctx.globalAlpha = opacity\r\n\r\n if (mode == 1 || number <= subs * 2 * breakRatio) {\r\n ctx.drawImage(img, 0, 0)\r\n } else {\r\n // calc the 45 degree skew angle needed by ctx.transform\r\n // move to the bottom of the original image\r\n ctx.translate(0, (breakRatio / subs) * img.height)\r\n ctx.scale(1, -1)\r\n ctx.transform(1, 0, skewSign * Math.tan(skewAngle), 1, 0, 0)\r\n //ctx.scale(1, 1.50);\r\n\r\n // flip reflected image\r\n ctx.rotate(Math.PI)\r\n ctx.scale(-1, 1)\r\n\r\n // draw the reflected image\r\n ctx.drawImage(img, 0, -((breakRatio / subs) * img.height))\r\n }\r\n\r\n ctx.restore()\r\n}\r\n\r\nconst angleOf = (fromIndex, toIndex) => {\r\n const { points } = options\r\n return Math.atan2(\r\n points[fromIndex][1] - points[toIndex][1],\r\n points[fromIndex][0] - points[toIndex][0]\r\n )\r\n}\r\n\r\nconst lengthOf = (fromIndex, toIndex) => {\r\n const { points } = options\r\n return Math.sqrt(\r\n Math.pow(points[fromIndex][0] - points[toIndex][0], 2) +\r\n Math.pow(points[fromIndex][1] - points[toIndex][1], 2)\r\n )\r\n}\r\n\r\n// point class\r\n\r\nexport const Point = function (x, y) {\r\n this.x = x ? x : 0\r\n this.y = y ? y : 0\r\n}\r\n\r\nPoint.prototype.length = function (point) {\r\n point = point ? point : new Point()\r\n let xs = 0,\r\n ys = 0\r\n xs = point.x - this.x\r\n xs = xs * xs\r\n\r\n ys = point.y - this.y\r\n ys = ys * ys\r\n return Math.sqrt(xs + ys)\r\n}\r\n\r\nexport const TextCoord = function (u, v) {\r\n this.u = u ? u : 0\r\n this.v = v ? v : 0\r\n}\r\n\r\nexport const Triangle = function (p0, p1, p2, t0, t1, t2) {\r\n this.p0 = p0\r\n this.p1 = p1\r\n this.p2 = p2\r\n\r\n this.t0 = t0\r\n this.t1 = t1\r\n this.t2 = t2\r\n}\r\n","export const INITIAL_IMAGE_DATA = \"INITIAL_IMAGE_DATA\";\r\nexport const SAVE_IMAGE_DATA = \"SAVE_IMAGE_DATA\";\r\n"],"sourceRoot":""}