{"version":3,"sources":["models/entityBase.ts","models/order.ts","models/order.item.ts","reducers/order.slice.ts","constans/api.constants.ts","reducers/control.slice.ts","services/order.service.ts","constans/routes.constants.ts","entities/entity.base.ts","entities/category/category.ts","entities/product/product.ts","reducers/product.slice.ts","services/product.service.ts","reducers/category.slice.ts","services/category.service.ts","services/root.epics.ts","reducers/canvas.slice.ts","reducers/client.slice.ts","reducers/text.slice.ts","reducers/history.slice.ts","reducers/root.reducer.ts","components/steps/products.all.step.tsx","components/steps/categories.all.step.tsx","constans/api.icons.tsx","components/application/product/products.list.tsx","models/default.font.list.ts","components/application/text/text.view.tsx","components/application/color/color.view.tsx","components/application/product/product.info.tsx","components/steps/confirm.order.tsx","components/application/text/text.edit.view.tsx","helpers/math.helper.ts","components/application/menu/core.menu.tsx","components/application/order.list/order.new.products.tsx","components/application/order.list/order.new.tsx","components/application/order.list/order.list.tsx","components/application/menu/history.tsx","components/application/constructor.core.tsx","components/steps/confirmed.order.tsx","views/master.module.tsx","components/routing.tsx","helpers/app.init.ts","index.tsx","store/store.config.js"],"names":["EntityBase","Id","NetId","Created","Date","Updated","Deleted","Order","Number","IsOrdered","ClientId","Client","OrderItems","TotalPrice","OrderItem","Canvas","Quantity","Price","ProductId","Product","OrderId","Preview","OriginalImages","UsingImages","OrderItemTexts","OrderItemProductOptions","PrintUnitPrice","ProductUnitPrice","TotalPrintPrice","TotalProductPrice","UnitPrice","OrderState","order","selectedOrderItem","orderItemCount","optionItem","createOrderItem","isOpenCreateModal","orderSlice","createSlice","name","initialState","reducers","apiCreateOrder","state","action","apiConfirmOrder","apiGetOrderById","apiCreateOrderItem","apiGetOrderItemById","apiRemoveOrderItem","apiUpdateOrderItemById","apiUpdateCanvasOrderItemById","apiAddPreviewToOrderItemById","apiUpdateNotResponseOrderItemById","apiAddPictureToOrderItem","apiRemovePictureToOrderItem","setOrder","payload","setOrderItem","indexOfCurrentOrderItem","findIndex","s","parseInt","localStorage","getItem","copyOfOrderItems","setCanvasOrderItem","updatedOrderItem","setOrderItemCount","setOptionItem","setStateCreateModal","orderActions","actions","API","OrderIdentityEndPoints","NEW__ORDER","API_PART","SERVER_URL","GET__ORDER","CONFIRM__ORDER","CREATE__ORDER_ITEM","GET__ORDER_ITEM","ADD_PREVIEW__TO_ORDER_ITEM","ADD_PICTURE__TO_ORDER_ITEM","REMOVE_PICTURE__TO_ORDER_ITEM","UPDATE__ORDER_ITEM","UPDATE_CANVAS__ORDER_ITEM","REMOVE__ORDER_ITEM","CategoryIdentityEndPoints","GET__ALL_CATEGORIES","GET__CATEGORY_BY_ID","ProductIdentityEndPoints","GET__PRODUCT_BY_ID","GET__ALL_PRODUCTS","controlSlice","isMenuOpen","orderId","orderItemId","modalContent","modalConfirmContent","isOpenModal","isOpenConfirmModal","backgroundImgUrl","isOpenColorPicker","imgToCanvas","imgListCanvas","saveCanvas","openMenu","closeMenu","closeModal","setModalContent","setModalConfirmContent","setStorageOrderId","setItem","setStorageOrderItemId","getStorageOrderId","getStorageOrderItemId","setBackgroundImgUrl","setImgToCanvas","setImgListToCanvas","openColorPicker","closeColorPicker","saveCanvasConfirmOrder","setOrderItemIdToStore","controlActions","CreateOrder","action$","state$","pipe","ofType","type","switchMap","ajax","post","Colors","length","mergeMap","response","console","log","of","Body","CreateOrderItem","ordersCount","notification","success","message","description","duration","GetOrderItemById","getJSON","GetOrderById","AddPictureToOrderItem","formData","RemovePictureToOrderItem","RemoveOrderItem","info","_orderItemId","_orderItem","List","where","orderItem","toArray","UpdateOrderItem","UpdateOrderItemNotResponse","id","UpdateCanvasOrderItem","body","ConfirmOrder","status","clear","window","location","href","APP_URI","error","NetUid","Category","Name","ParentCategoryId","ParentCategory","Products","Categories","CategoryId","ProductOptions","Image","undefined","ImageId","Sizes","PricePrint","PriceFrames","TypeOptions","ProductState","product","selectedProductNewOrderItem","products","productsIsList","changeProduct","productSlice","apiGetProduct","apiGetChangeProduct","apiGetProductNewOrder","apiGetAllProducts","apiGetAllProductsList","setProduct","setChangeProduct","setProductNewOrderItem","setProducts","setProductsList","productActrions","GetProductsByCategoryId","GetProductsListByCategoryId","GetProductById","push","GetChangeProductById","GetProductByIdNewOrder","CategoryState","categories","subCategories","category","selectCategoryNewOrderModal","categorySlice","apiGetCategories","apiGetCategoryById","apiGetCategoryByIdNewOrderModal","setCategories","setSubCategories","setCategory","setCategoryNewOrderModal","categoryActrions","GetAllCategories","GetCategoryById","GetCategoryByIdNewOrderModal","epicsArray","Object","values","orderService","productService","categoryService","epics","combineEpics","canvasSlice","canvas","activeCanvasObject","setCanvas","props","stateful","renderAll","bind","setActiveObject","setBackgroundImg","setNewCanvas","canvasActrions","clientSlice","firstName","lastName","phoneNumber","email","setClientName","setClientNumber","setClientEmail","textSlice","textValue","textColor","fontFamily","fontSize","fontStyle","fontWeight","setTextColor","setFontFamily","setTextValue","clearTextFields","textActions","historySlice","textItem","imgItem","textList","imgList","setTextItem","setImgItem","setTextList","setImgListI","historyActrions","combineReducers","control","ControlReducer","history","HistoryReducer","ProductReducer","OrderReducer","CategoryReducer","CanvasReducer","client","ClientReducer","text","TextReducer","routing","routerReducer","ProductsAll","dispatch","useDispatch","categoryId","useParams","useSelector","useEffect","className","map","productItem","index","key","src","ImageUrl","to","image","Empty","PRESENTED_IMAGE_SIMPLE","CategoriesAll","i","sCategory","x","IconImages","xmlns","viewBox","fill","d","IconNew","IconCreateorder","width","height","IconMenuText","IconMenuItemProducts","IconMenuItemColor","cx","cy","r","IconHistoryText","IconHistoryImages","IconHistoryRemove","ProductsList","selectedProduct","useLocation","allCategories","allProductsByCategory","_changeProduct","useState","_data","_setData","filter","c","options","change","productOptionItem","selectColor","Images","onClick","alt","style","fieldNames","label","value","children","onChange","placeholder","fontFamilyList","FontName","FontTitle","fontFamilyListLat","TextView","canvasFrame","selectedOrderItemId","displayColorPicker","handleClick","handleChange","color","hex","e","target","backgroundColor","textCreator","fabric","IText","transparentCorners","add","centerObject","JSON","stringify","toJSON","toSVG","centered","defaultActiveKey","size","TabPane","tab","fontFamilyItem","ColorView","changeColor","ProductView","data","item","tira","From","To","nprinting","toFixed","price","minHeight","columns","title","dataIndex","dataSource","pagination","confirmSchema","Yup","shape","required","phone","matches","userName","oItem","dangerouslySetInnerHTML","__html","DeleteOutlined","ProductOption","Option","TypeOption","marginTop","initialValues","validationSchema","onSubmit","FirstName","LastName","PhoneNumber","Email","formik","spellCheck","autoComplete","errors","touched","htmlType","TextEditView","canvasActiveObject","set","round","num","m","Math","abs","toPrecision","sign","MenuComponent","_storeOrderId","_storeOrderItemId","changeCount","changeClass","f","ProductOptionId","Component","Size","preventDefault","reader","FileReader","file","files","FormData","append","onloadend","readAsDataURL","path","pathname","component","min","max","defaultValue","onBlur","typeOption","p","Options","destroyTooltipOnHide","placement","current","removeOption","typeOptionNetId","optionChange","allOptions","changeOptions","NewOrderModalProductsList","orderIdStorage","colors","setColors","setColor","_productItem","setProductItem","IsColor","NewOrderCategoriesModal","_category","openProductList","OrderList","h","useHistory","createOrderItemState","selection","controlsAboveOverlay","centeredScaling","allowTouchScrolling","setTimeout","selectOrderItem","storeOitemId","stopPropagation","removeOrderItem","HistoryView","historyTextList","historyImgList","selectElement","element","requestRenderAll","_activeObject","removeSelectElement","remove","picture","pictureList","cursor","content","trigger","ConstructorCore","uriParams","_urlProductId","productId","productOption","_product","_order","iconRotate","iconRemove","iconEditText","workFrame__CONTAINER","document","getElementById","setHeight","clientHeight","setWidth","clientWidth","on","handleControl","loadFromJSON","parse","getObjects","_OrderItemProductOption","fromURL","img","imgSizeW","imgSizeH","canSizeW","getWidth","canSizeH","getHeight","wCoeff","hCoeff","scale","setBackgroundImage","gg","prototype","cornerColor","cornerStyle","padding","fab","fabObProto","fabricControl","Control","fabricControls","controls","customMove","y","offsetX","cursorStyle","cornerSize","mouseUpHandler","deleteObject","actionName","render","ctx","left","top","styleOverride","fabricObject","renderIcon","customTextEdit","editTextObject","drawControls","save","setTransform","this","getRetinaScaling","strokeStyle","fillStyle","cornerStrokeColor","_setLineDash","cornerDashArray","setCoords","forEachControl","getVisibility","drawImage","oCoords","restore","eventData","translate","rotate","util","degreesToRadians","angle","addImgToCanvas","imgUrl","a","pOption","crossOrigin","targe","getActiveObjects","visible","onClose","getContainer","destroyOnClose","closable","maskClosable","maskStyle","zIndex","position","offsetWidth","ConfirmedOrder","MasterModule","exact","from","Routing","store","createBrowserHistory","initialRedusState","preloadedState","middleware","simpleRouter","routerMiddleware","epicMiddleware","createEpicMiddleware","thunkMiddleware","enhancers","applyMiddleware","composeWithDevTools","configureStore","reducer","devTools","process","run","configure","ReactDOM","onEnter","URL","indexOf"],"mappings":"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","file":"static/js/main.886efbd1.chunk.js","sourcesContent":["export abstract class EntityBase {\r\n Id: number = 0;\r\n NetId: string = '00000000-0000-0000-0000-000000000000';\r\n Created: Date = new Date();\r\n Updated: Date = new Date();\r\n Deleted: boolean = false;\r\n}","import { EntityBase } from \"./entityBase\";\r\nimport { OrderItem } from \"./order.item\";\r\nimport { OrderClient } from \"./order.client\";\r\n\r\nexport class Order extends EntityBase {\r\n public Number: string | undefined;\r\n public IsOrdered: boolean;\r\n public ClientId: number | undefined;\r\n public Client: OrderClient | undefined;\r\n public OrderItems: OrderItem[];\r\n public TotalPrice?: number;\r\n}","import { EntityBase } from \"./entityBase\";\r\nimport { Product } from \"./product\";\r\nimport { Order } from \"./order\";\r\nimport { OrderItemProductOption } from \"./order.item.product.option\";\r\nimport { OrderItemText } from \"./order.item.text\";\r\nimport { ImageDefault } from \"./image\";\r\n\r\nexport class OrderItem extends EntityBase {\r\n public Canvas: any;\r\n public Quantity: number;\r\n public Price: number;\r\n public ProductId: number;\r\n public Product: Product;\r\n public OrderId: number;\r\n public Order: Order;\r\n public Preview: string;\r\n public OriginalImages: ImageDefault[];\r\n public UsingImages: ImageDefault[];\r\n public OrderItemTexts: OrderItemText[];\r\n public OrderItemProductOptions: OrderItemProductOption[];\r\n public PrintUnitPrice: number\r\n public ProductUnitPrice: number\r\n public TotalPrintPrice: number\r\n public TotalProductPrice: number\r\n public UnitPrice: number\r\n}","import { createSlice } from '@reduxjs/toolkit'\r\nimport { Order } from '../models/order';\r\nimport { OrderItem } from '../models/order.item';\r\nimport { ProductOption } from '../models/productOption';\r\n\r\nexport type OrderTypeState = {\r\n order: Order,\r\n selectedOrderItem: OrderItem,\r\n orderItemCount: number,\r\n optionItem: ProductOption,\r\n createOrderItem: boolean,\r\n isOpenCreateModal: boolean\r\n}\r\n\r\nexport const OrderState: OrderTypeState = {\r\n order: new Order(),\r\n selectedOrderItem: new OrderItem(),\r\n orderItemCount: 1,\r\n optionItem: null,\r\n createOrderItem: false,\r\n isOpenCreateModal:false\r\n}\r\n\r\nconst orderSlice = createSlice({\r\n name: 'order',\r\n initialState: OrderState,\r\n reducers: {\r\n apiCreateOrder(state, action) { },\r\n apiConfirmOrder(state, action) { },\r\n apiGetOrderById(state, action) { },\r\n apiCreateOrderItem(state, action) { },\r\n apiGetOrderItemById(state, action) { },\r\n apiRemoveOrderItem(state, action) { },\r\n apiUpdateOrderItemById(state, action) { },\r\n apiUpdateCanvasOrderItemById(state, action) {},\r\n apiAddPreviewToOrderItemById(state, action) { },\r\n apiUpdateNotResponseOrderItemById(state, action) { },\r\n apiAddPictureToOrderItem(state, action) { },\r\n apiRemovePictureToOrderItem(state, action) { },\r\n setOrder(state, action) {\r\n state.order = action.payload\r\n },\r\n setOrderItem(state, action) {\r\n \r\n state.selectedOrderItem = action.payload\r\n \r\n if (state.order.OrderItems) {\r\n const indexOfCurrentOrderItem = state.order.OrderItems.findIndex((s) => s.Id === Number.parseInt(localStorage.getItem(\"orderItemId\")))\r\n if (indexOfCurrentOrderItem >= 0){\r\n let copyOfOrderItems = [...state.order.OrderItems]\r\n copyOfOrderItems[indexOfCurrentOrderItem] = action.payload\r\n state.order.OrderItems = copyOfOrderItems\r\n }\r\n } else {\r\n state.order = {\r\n ...state.order,\r\n OrderItems: []\r\n }\r\n }\r\n \r\n },\r\n setCanvasOrderItem(state, action) {\r\n let updatedOrderItem: OrderItem = action.payload;\r\n\r\n state.selectedOrderItem =\r\n {\r\n ...state.selectedOrderItem,\r\n Canvas: updatedOrderItem.Canvas,\r\n Preview: updatedOrderItem.Preview,\r\n }\r\n },\r\n setOrderItemCount(state, action) {\r\n state.orderItemCount = action.payload\r\n },\r\n setOptionItem(state, action) {\r\n state.optionItem = action.payload\r\n },\r\n createOrderItem(state, action) {\r\n state.createOrderItem = action.payload\r\n },\r\n setStateCreateModal(state, action) {\r\n state.isOpenCreateModal = action.payload\r\n }\r\n }\r\n})\r\n\r\nexport const orderActions = orderSlice.actions;\r\nexport default orderSlice.reducer;","//export const API_SERVER = 'http://78.152.175.67:15010/';\r\nexport const API_SERVER = 'https://server.5print.ua/';\r\n\r\n//AUTH\r\nexport const API_GET_AUTH = API_SERVER + \"authentification/token/get?\";\r\n//\r\nexport const API_GET_ALL_CATEGORIES = API_SERVER + 'categories/all/get';\r\nexport const API_POST_CHANGE_CATEGORY = API_SERVER + 'categories/manage';\r\nexport const API_GET_CATEGORY_BY_ID = API_SERVER + 'categories/products/get?id=';\r\nexport const API_GET_PRODUCT_BY_ID = API_SERVER + 'products/get?id=';\r\nexport const API_POST_CHANGE_PRODUCT = API_SERVER + 'products/manage';\r\nexport const API_POST_CHANGE_OPTIONS = API_SERVER + 'options/manage';\r\nexport const API_GET_ALL_COLORS = API_SERVER + 'options/colors/get';\r\nexport const API_GET_CHANGE_COLORS = API_SERVER + 'options/color/manage';\r\nexport const API_POST_CHANGECOLOR_TO_PRODUCT = API_SERVER + 'products/manage/with/options';\r\n\r\n \r\n// ORDERS\r\nexport const API_POST_NEW_ORDER = API_SERVER + 'orders/new';\r\nexport const API_GET_ORDER_BY_ID = API_SERVER + 'orders/get';\r\nexport const API_POST_UPDATE_ORDER = API_SERVER + 'orders/items/update';\r\nexport const API_POST_CREATE_ORDER_ITEM = API_SERVER + 'orders/items/new';\r\nexport const API_POST_UPDATE_USER_ORDER = API_SERVER + 'orders/change/status';\r\nexport const API_POST_ADD_IMG_TO_ORDER = API_SERVER + 'orders/items/images/add?id='\r\nexport const API_POST_ADD_PREVIEW_IMG_TO_ORDER = API_SERVER + 'orders/items/preview/add?id='\r\n\r\nexport class API {\r\n //public static readonly SERVER_URL = 'http://78.152.175.67:15010';\r\n public static readonly SERVER_URL = 'https://server.5print.ua';\r\n public static readonly API_PART = API.SERVER_URL + '/';\r\n \r\n public static readonly OrderIdentityEndPoints: any = {\r\n NEW__ORDER: API.API_PART + 'orders/new',\r\n GET__ORDER: API.API_PART + 'orders/get?id=',\r\n CONFIRM__ORDER: API.API_PART + 'orders/change/status',\r\n CREATE__ORDER_ITEM: API.API_PART + 'orders/items/new',\r\n GET__ORDER_ITEM: API.API_PART + 'orders/items/get?id=',\r\n ADD_PREVIEW__TO_ORDER_ITEM: API.API_PART + 'orders/items/preview/add?id=',\r\n ADD_PICTURE__TO_ORDER_ITEM: API.API_PART + 'orders/items/images/add?id=',\r\n REMOVE_PICTURE__TO_ORDER_ITEM: API.API_PART + 'orders/items/image/remove?id=',\r\n UPDATE__ORDER_ITEM: API.API_PART + 'orders/items/update',\r\n UPDATE_CANVAS__ORDER_ITEM: API.API_PART + 'orders/items/canvas/preview/update?id=',\r\n REMOVE__ORDER_ITEM: API.API_PART + 'orders/items/remove?id=',\r\n }\r\n\r\n public static readonly CategoryIdentityEndPoints: any = {\r\n GET__ALL_CATEGORIES: API.API_PART + 'categories/all/get',\r\n GET__CATEGORY_BY_ID: API.API_PART + 'categories/subcategories/get?id='\r\n }\r\n\r\n public static readonly ProductIdentityEndPoints = {\r\n GET__PRODUCT_BY_ID: API.API_PART + 'products/get?id=',\r\n GET__ALL_PRODUCTS: API.API_PART + 'categories/products/get?id='\r\n }\r\n}","import { createSlice } from \"@reduxjs/toolkit\"\r\nimport { ImageDefault } from \"../models/image\";\r\n\r\nexport type ControlTypeState = {\r\n isMenuOpen: boolean,\r\n orderId: number,\r\n orderItemId: number,\r\n modalContent: any,\r\n modalConfirmContent: any,\r\n isOpenModal: boolean,\r\n isOpenConfirmModal: boolean,\r\n backgroundImgUrl: string,\r\n isOpenColorPicker: boolean,\r\n imgToCanvas: ImageDefault,\r\n imgListCanvas: ImageDefault[],\r\n saveCanvas: boolean\r\n}\r\n\r\nexport const ControlState: ControlTypeState = {\r\n isMenuOpen: false,\r\n orderId: 0,\r\n orderItemId: 0,\r\n modalContent: null,\r\n modalConfirmContent: null,\r\n isOpenModal: false,\r\n isOpenConfirmModal: false,\r\n backgroundImgUrl: '',\r\n isOpenColorPicker: false,\r\n imgToCanvas: null,\r\n imgListCanvas: [],\r\n saveCanvas: false\r\n}\r\n\r\nconst controlSlice = createSlice({\r\n name: 'control',\r\n initialState: ControlState,\r\n reducers: {\r\n openMenu(state) {\r\n state.isMenuOpen = true\r\n },\r\n closeMenu(state) {\r\n state.isMenuOpen = false\r\n },\r\n closeModal(state) {\r\n state.isOpenModal = false\r\n state.isOpenConfirmModal = false\r\n state.modalContent = null\r\n state.modalConfirmContent = null\r\n },\r\n setModalContent(state, action) {\r\n state.modalContent = action.payload\r\n state.isOpenModal = true\r\n },\r\n setModalConfirmContent(state, action) {\r\n state.isOpenConfirmModal = true\r\n state.modalConfirmContent = action.payload\r\n },\r\n setStorageOrderId(state, action) {\r\n state.orderId = action.payload\r\n localStorage.setItem('orderId', action.payload)\r\n },\r\n setStorageOrderItemId(state, action) {\r\n if (action.payload > 0) {\r\n state.orderItemId = action.payload\r\n localStorage.setItem('orderItemId', action.payload)\r\n } else {\r\n \r\n }\r\n },\r\n getStorageOrderId(state) {\r\n state.orderId = +localStorage.getItem('orderId');\r\n },\r\n getStorageOrderItemId(state) {\r\n state.orderItemId = +localStorage.getItem('orderItemId');\r\n },\r\n setBackgroundImgUrl(state, action) {\r\n state.backgroundImgUrl = action.payload\r\n },\r\n setImgToCanvas(state, action) {\r\n state.imgToCanvas = action.payload\r\n },\r\n setImgListToCanvas(state, action) {\r\n state.imgListCanvas = action.payload\r\n },\r\n openColorPicker(state) {\r\n state.isOpenColorPicker = true\r\n },\r\n closeColorPicker(state) {\r\n state.isOpenColorPicker = false\r\n },\r\n saveCanvas(state, action) {\r\n state.saveCanvas = action.payload;\r\n },\r\n saveCanvasConfirmOrder(state, action) {\r\n state.saveCanvas = action.payload;\r\n },\r\n setOrderItemIdToStore(state, action) {\r\n localStorage.setItem('orderItemId', action.payload);\r\n }\r\n }\r\n});\r\n\r\nexport default controlSlice.reducer;\r\nexport const controlActions = controlSlice.actions;","import { ofType } from \"redux-observable\";\r\nimport { orderActions } from \"../reducers/order.slice\";\r\nimport { of } from \"rxjs\";\r\nimport { ajax } from \"rxjs/ajax\";\r\nimport { switchMap, mergeMap, catchError } from \"rxjs/operators\";\r\nimport { notification } from \"antd\";\r\nimport { API } from \"../constans/api.constants\";\r\nimport { IServiceApplicationState } from \"../reducers/application.state\";\r\nimport { controlActions } from \"../reducers/control.slice\";\r\nimport { canvasActrions } from \"../reducers/canvas.slice\";\r\nimport { fabric } from \"fabric\";\r\nimport { OrderItem } from \"../models/order.item\";\r\nimport { push } from \"react-router-redux\";\r\nimport { dispatch } from \"rxjs/internal/observable/range\";\r\nimport { productActrions } from \"../reducers/product.slice\";\r\nimport * as routes from '../constans/routes.constants';\r\nimport { List } from \"linq-typescript\";\r\n\r\n\r\nexport const CreateOrder = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(orderActions.apiCreateOrder.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.NEW__ORDER}`,\r\n {\r\n\r\n \"OrderItems\": [\r\n {\r\n \"ProductId\": action.payload.Id,\r\n \"OrderItemProductOptions\": [\r\n {\r\n \"ProductOption\": {\r\n \"Id\": action.payload.Colors.length > 0 && action.payload.Colors[0].Id\r\n }\r\n }\r\n ],\r\n \"Quantity\": 1,\r\n\r\n }\r\n ]\r\n }\r\n , { 'Content-Type': 'application/json' })\r\n .pipe(\r\n mergeMap((response: any) => {\r\n console.log('CreateOrder')\r\n return of(\r\n //orderActions.setOrder(response.response.Body),\r\n //orderActions.setOrderItem(response.response.Body.OrderItems[0]),\r\n controlActions.setStorageOrderId(response.response.Body.Id),\r\n controlActions.setStorageOrderItemId(response.response.Body.OrderItems[0].Id)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\nexport const CreateOrderItem = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(orderActions.apiCreateOrderItem.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.CREATE__ORDER_ITEM}`, action.payload, { 'Content-Type': 'application/json' })\r\n .pipe(\r\n mergeMap((response: any) => {\r\n let ordersCount = response.response.Body.OrderItems.length - 1;\r\n\r\n\r\n notification.success({\r\n message: `Макет добавлен`,\r\n description: '',\r\n duration: 2\r\n })\r\n\r\n\r\n console.log('CreateOrderItem')\r\n\r\n return of(\r\n orderActions.setOrder(response.response.Body),\r\n controlActions.setOrderItemIdToStore(response.response.Body.OrderItems[+ordersCount].Id),\r\n controlActions.setStorageOrderItemId(response.response.Body.OrderItems[+ordersCount].Id)\r\n //orderActions.setOrderItem(response.response.Body.OrderItems[+ordersCount]),\r\n //orderActions.setOrderItem(response.response.Body.OrderItems[+ordersCount]),\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\n\r\nexport const GetOrderItemById = (action$, state$: IServiceApplicationState) => action$.pipe(\r\n ofType(orderActions.apiGetOrderItemById.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .getJSON(\r\n `${API.OrderIdentityEndPoints.GET__ORDER_ITEM}${action.payload}`,\r\n { 'Content-Type': 'application/json' }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n\r\n console.log('GetOrderItemById')\r\n return of(\r\n orderActions.setOrderItem(response.Body),\r\n //controlActions.setImgListToCanvas(response.Body.UsingImages),\r\n orderActions.setOrderItemCount(response.Body.Quantity)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n })\r\n)\r\n\r\nexport const GetOrderById = (action$, state$: IServiceApplicationState) => action$.pipe(\r\n ofType(orderActions.apiGetOrderById.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .getJSON(\r\n `${API.OrderIdentityEndPoints.GET__ORDER}${action.payload}`,\r\n { 'Content-Type': 'application/json' }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n console.log('response GetOrderById')\r\n\r\n return of(\r\n orderActions.setOrder(response.Body)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n })\r\n)\r\n\r\nexport const AddPictureToOrderItem = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(orderActions.apiAddPictureToOrderItem.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.ADD_PICTURE__TO_ORDER_ITEM}${action.payload.orderItemId}&orderId=${action.payload.orderId}`, action.payload.formData)\r\n .pipe(\r\n mergeMap((response: any) => {\r\n notification.success({\r\n message: `Картинка добавлена`,\r\n description: '',\r\n duration: 2\r\n })\r\n \r\n return of(\r\n orderActions.setOrderItem(response.response.Body),\r\n controlActions.setImgToCanvas(response.response.Body.UsingImages[0]),\r\n controlActions.setStorageOrderItemId(response.response.Body.Id)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\nexport const RemovePictureToOrderItem = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(orderActions.apiRemovePictureToOrderItem.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.REMOVE_PICTURE__TO_ORDER_ITEM}${action.payload}`, {}, { 'Content-Type': 'application/json' })\r\n .pipe(\r\n mergeMap((response: any) => {\r\n\r\n notification.success({\r\n message: `Картинка удалена`,\r\n description: '',\r\n duration: 2\r\n })\r\n\r\n console.log(response.response.Body.UsingImages.length)\r\n\r\n return of(\r\n\r\n orderActions.setOrderItem(response.response.Body),\r\n controlActions.setStorageOrderItemId(response.response.Body.Id)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\nexport const RemoveOrderItem = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(orderActions.apiRemoveOrderItem.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.REMOVE__ORDER_ITEM}${action.payload}`, {}, { 'Content-Type': 'application/json' })\r\n .pipe(\r\n mergeMap((response: any) => {\r\n\r\n notification.info({\r\n message: `Макет удален`,\r\n description: '',\r\n duration: 2\r\n })\r\n let _orderItemId = +localStorage.getItem('orderItemId');\r\n let _orderItem = new List(response.response.Body.OrderItems)\r\n .where(orderItem => orderItem.Id === _orderItemId).toArray()[0];\r\n\r\n return of(\r\n orderActions.setOrder(response.response.Body),\r\n orderActions.setOrderItem(_orderItem),\r\n\r\n //controlActions.setStorageOrderItemId(response.response.Body.OrderItems[0].Id)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\nexport const UpdateOrderItem = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(orderActions.apiUpdateOrderItemById.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.UPDATE__ORDER_ITEM}`, action.payload,\r\n {\r\n 'Content-Type': 'application/json',\r\n }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n\r\n return of(\r\n controlActions.setStorageOrderItemId(response.response.Body.Id),\r\n orderActions.setOrderItem(response.response.Body),\r\n //productActrions.setProduct(response.response.Body.Quantity)\r\n orderActions.setOrderItemCount(response.response.Body.Quantity)\r\n )\r\n\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\nexport const UpdateOrderItemNotResponse = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(orderActions.apiUpdateNotResponseOrderItemById.type),\r\n switchMap((action: any) => {\r\n \r\n if (action.payload.id === 0 && action.payload.id !== +localStorage.getItem('orderItemId')) {\r\n \r\n }\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.UPDATE__ORDER_ITEM}`, action.payload,\r\n {\r\n 'Content-Type': 'application/json',\r\n }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n \r\n return of(\r\n controlActions.setStorageOrderItemId(response.response.Body.Id)\r\n\r\n //orderActions.setOrderItem(response.response.Body),\r\n //orderActions.setOrderItemCount(response.response.Body.Quantity)\r\n )\r\n\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\nexport const UpdateCanvasOrderItem = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(orderActions.apiUpdateCanvasOrderItemById.type),\r\n switchMap((action: any) => {\r\n if (action.payload.id === 0 && action.payload.id !== +localStorage.getItem('orderItemId')) {\r\n \r\n }\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.UPDATE_CANVAS__ORDER_ITEM}${action.payload.id}`, action.payload.body,\r\n {\r\n 'Content-Type': 'application/json',\r\n }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n \r\n return of(\r\n controlActions.setStorageOrderItemId(response.response.Body.Id),\r\n orderActions.setOrderItem(response.response.Body),\r\n //orderActions.apiGetOrderItemById(response.response.Body.Id),\r\n orderActions.setOrderItemCount(response.response.Body.Quantity)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\n\r\n\r\nexport const ConfirmOrder = (action$, state$: IServiceApplicationState) => action$.pipe(\r\n ofType(orderActions.apiConfirmOrder.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .post(`${API.OrderIdentityEndPoints.CONFIRM__ORDER}`, action.payload, { 'Content-Type': 'application/json' })\r\n .pipe(\r\n mergeMap((response: any) => {\r\n\r\n if (response.status === 200) {\r\n localStorage.clear();\r\n\r\n notification.success({\r\n message: `Заказ оформлен`,\r\n description: '',\r\n duration: 2\r\n })\r\n\r\n window.location.href = routes.COMFIRMED_URI;\r\n\r\n return of(\r\n controlActions.setModalContent(null),\r\n //controlActions.closeModal(),\r\n )\r\n } else {\r\n notification.error({\r\n message: `Не получилось создать заказ`,\r\n description: '',\r\n duration: 4\r\n })\r\n\r\n return of(controlActions.closeModal());\r\n }\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n })\r\n)\r\n\r\n\r\n\r\n","export const APP_URI = \"/app\";\r\n\r\n\r\nexport const CATEGORIES_URI = APP_URI + '/categories'; \r\nexport const PRODUCTS_URI = APP_URI + '/products/';\r\nexport const PRODUCT_URI = APP_URI + '/product/';\r\nexport const COMFIRMED_URI = APP_URI + '/confirmed';\r\n\r\n","export abstract class EntityBase {\r\n public Id: number = 0;\r\n public NetUid: string;\r\n public Created: Date;\r\n public Updated: Date;\r\n public Deleted: boolean;\r\n}","import { EntityBase } from \"../entity.base\";\r\nimport { Product } from \"../product/product\";\r\n\r\nexport class Category extends EntityBase {\r\n public Name: string = '';\r\n public ParentCategoryId?: number | undefined;\r\n public ParentCategory: Category | undefined;\r\n public Products: Array = [];\r\n public Categories: Array = [];\r\n}","import { EntityBase } from \"../entity.base\";\r\nimport { Category } from \"../category/category\";\r\nimport { ProductOption } from \"../../models/productOption\";\r\nimport { ImageDefault } from \"../../models/image\";\r\nimport { PriceFrame } from \"../../models/price.frame\";\r\nimport { TypeOption } from \"../../models/type.option\";\r\n\r\n\r\nexport class Product extends EntityBase {\r\n public Name: string = '';\r\n public CategoryId: number = 0;\r\n public Category: Category = new Category();\r\n public ProductOptions: Array = [];\r\n public Image: ImageDefault | undefined = undefined;\r\n public ImageId: number | undefined;\r\n public Colors: Array = [];\r\n public Sizes: Array = [];\r\n public PricePrint: number = 0;\r\n public Price: number = 0;\r\n public PriceFrames: Array = [];\r\n public TypeOptions: Array = []\r\n}","import { createSlice } from \"@reduxjs/toolkit\"\r\nimport { Product } from \"../entities/product/product\";\r\n\r\nexport type ProductTypeState = {\r\n product: Product,\r\n selectedProductNewOrderItem: Product,\r\n products: Product[],\r\n productsIsList: Product[],\r\n changeProduct: Product\r\n}\r\n\r\nexport const ProductState: ProductTypeState = {\r\n product: new Product(),\r\n selectedProductNewOrderItem: new Product(),\r\n products: [],\r\n productsIsList: [],\r\n changeProduct: new Product()\r\n}\r\n\r\nconst productSlice = createSlice({\r\n name: 'product',\r\n initialState: ProductState,\r\n reducers: {\r\n apiGetProduct(state, action) { },\r\n apiGetChangeProduct(state, action) { },\r\n apiGetProductNewOrder(state, action) { },\r\n apiGetAllProducts(state, action) { },\r\n apiGetAllProductsList(state, action) { },\r\n setProduct(state, action) { state.product = action.payload },\r\n setChangeProduct(state, action) { state.changeProduct = action.payload },\r\n setProductNewOrderItem(state, action) { state.selectedProductNewOrderItem = action.payload },\r\n setProducts(state, action) { state.products = action.payload },\r\n setProductsList(state, action) { state.productsIsList = action.payload }\r\n }\r\n})\r\n\r\nexport const productActrions = productSlice.actions;\r\nexport default productSlice.reducer;","import { ofType } from \"redux-observable\";\r\nimport { of } from \"rxjs\";\r\nimport { ajax } from \"rxjs/ajax\";\r\nimport { switchMap, mergeMap, catchError } from \"rxjs/operators\";\r\nimport { productActrions } from \"../reducers/product.slice\";\r\nimport { IServiceApplicationState } from \"../reducers/application.state\";\r\nimport { API } from \"../constans/api.constants\";\r\nimport { push } from \"react-router-redux\";\r\nimport { orderActions } from \"../reducers/order.slice\";\r\n\r\nexport const GetProductsByCategoryId = (action$, state$: IServiceApplicationState) => action$.pipe(\r\n ofType(productActrions.apiGetAllProducts.type),\r\n switchMap((action: any) => {\r\n return ajax\r\n .getJSON(\r\n `${API.ProductIdentityEndPoints.GET__ALL_PRODUCTS}${action.payload}&isVisible=true`,\r\n {\r\n 'Content-Type': 'application/json',\r\n }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n return of(\r\n productActrions.setProducts(response.Body.Products)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n })\r\n)\r\n\r\nexport const GetProductsListByCategoryId = (action$, state$: IServiceApplicationState) => action$.pipe(\r\n ofType(productActrions.apiGetAllProductsList.type),\r\n switchMap((action: any) => {\r\n \r\n return ajax\r\n .getJSON(\r\n `${API.ProductIdentityEndPoints.GET__ALL_PRODUCTS}${action.payload}&isVisible=true`,\r\n {\r\n 'Content-Type': 'application/json',\r\n }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n return of(\r\n productActrions.setProductsList(response.Body.Products)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n })\r\n)\r\n\r\nexport const GetProductById = (action$, state$: IServiceApplicationState) => action$.pipe(\r\n ofType(productActrions.apiGetProduct.type),\r\n switchMap((action: any) => {\r\n \r\n return ajax\r\n .getJSON(\r\n `${API.ProductIdentityEndPoints.GET__PRODUCT_BY_ID}${action.payload}`,\r\n {\r\n 'Content-Type': 'application/json',\r\n }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n \r\n return of(\r\n productActrions.setProduct(response.Body),\r\n //orderActions.setOptionItem(response.Body)\r\n push(`/app/product/${response.Body.Id}`)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n })\r\n)\r\n\r\nexport const GetChangeProductById = (action$, state$: IServiceApplicationState) => action$.pipe(\r\n ofType(productActrions.apiGetChangeProduct.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .getJSON(\r\n `${API.ProductIdentityEndPoints.GET__PRODUCT_BY_ID}${action.payload}`,\r\n {\r\n 'Content-Type': 'application/json',\r\n }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n\r\n return of(\r\n productActrions.setChangeProduct(response.Body),\r\n //orderActions.setOptionItem(response.Body)\r\n push(`/app/product/${response.Body.Id}`)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n })\r\n)\r\n\r\nexport const GetProductByIdNewOrder = (action$, state$: IServiceApplicationState) => action$.pipe(\r\n ofType(productActrions.apiGetProductNewOrder.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .getJSON(\r\n `${API.ProductIdentityEndPoints.GET__PRODUCT_BY_ID}${action.payload}`,\r\n {\r\n 'Content-Type': 'application/json',\r\n }\r\n )\r\n .pipe(\r\n mergeMap((response: any) => {\r\n \r\n return of(\r\n productActrions.setProductNewOrderItem(response.Body),\r\n //orderActions.setOptionItem(response.Body)\r\n push(`/app/product/${response.Body.Id}`)\r\n )\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n })\r\n)","import { createSlice } from \"@reduxjs/toolkit\"\r\nimport { Category } from \"../entities/category/category\";\r\n\r\nexport type CategoryTypeState = {\r\n categories: Category[],\r\n subCategories: Category[],\r\n category: Category,\r\n selectCategoryNewOrderModal: Category\r\n}\r\n\r\nexport const CategoryState: CategoryTypeState = {\r\n categories: [],\r\n subCategories: [],\r\n category: new Category(),\r\n selectCategoryNewOrderModal: new Category()\r\n}\r\n\r\nconst categorySlice = createSlice({\r\n name: 'category',\r\n initialState: CategoryState,\r\n reducers: {\r\n apiGetCategories() { },\r\n apiGetCategoryById(state, action) { },\r\n apiGetCategoryByIdNewOrderModal(state, action) { },\r\n setCategories(state, action) { state.categories = action.payload },\r\n setSubCategories(state, action) { state.subCategories = action.payload },\r\n setCategory(state, action) { state.category = action.payload },\r\n setCategoryNewOrderModal(state, action) { state.selectCategoryNewOrderModal = action.payload }\r\n }\r\n})\r\n\r\nexport const categoryActrions = categorySlice.actions;\r\nexport default categorySlice.reducer;","import { ofType } from \"redux-observable\";\r\nimport { of } from \"rxjs\";\r\nimport { ajax } from \"rxjs/ajax\";\r\nimport { switchMap, mergeMap, catchError } from \"rxjs/operators\";\r\nimport { IServiceApplicationState } from \"../reducers/application.state\";\r\nimport { categoryActrions } from \"../reducers/category.slice\";\r\nimport { API } from \"../constans/api.constants\";\r\n\r\nexport const GetAllCategories = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(categoryActrions.apiGetCategories.type),\r\n switchMap((action: any) => {\r\n return ajax\r\n .getJSON(`${API.CategoryIdentityEndPoints.GET__ALL_CATEGORIES}`, action.payload)\r\n .pipe(\r\n mergeMap((response: any) => {\r\n return of(categoryActrions.setCategories(response.Body))\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\nexport const GetCategoryById = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(categoryActrions.apiGetCategoryById.type),\r\n switchMap((action: any) => {\r\n \r\n return ajax\r\n .getJSON(`${API.CategoryIdentityEndPoints.GET__CATEGORY_BY_ID}${action.payload}`, {})\r\n .pipe(\r\n mergeMap((response: any) => {\r\n \r\n return of(categoryActrions.setSubCategories(response.Body))\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )\r\n\r\nexport const GetCategoryByIdNewOrderModal = (action$, state$: IServiceApplicationState) =>\r\n action$.pipe(\r\n ofType(categoryActrions.apiGetCategoryByIdNewOrderModal.type),\r\n switchMap((action: any) => {\r\n\r\n return ajax\r\n .getJSON(`${API.ProductIdentityEndPoints.GET__ALL_PRODUCTS}${action.payload}`, {})\r\n .pipe(\r\n mergeMap((response: any) => {\r\n \r\n return of(categoryActrions.setCategoryNewOrderModal(response.Body))\r\n }),\r\n //catchError((error: any) => {\r\n // return ErrorHandler(error)\r\n //})\r\n )\r\n }\r\n )\r\n )","import { combineEpics } from 'redux-observable';\r\nimport * as orderService from './order.service';\r\nimport * as productService from './product.service';\r\nimport * as categoryService from './category.service';\r\n\r\nconst epicsArray = [\r\n ...(Object as any).values(orderService),\r\n ...(Object as any).values(productService),\r\n ...(Object as any).values(categoryService)\r\n]\r\n\r\nexport const epics = combineEpics(...epicsArray);","import { createSlice } from \"@reduxjs/toolkit\"\r\nimport { fabric } from \"fabric\";\r\n\r\nexport type CanvasTypeState = {\r\n canvas: fabric.Canvas,\r\n activeCanvasObject: any\r\n}\r\n\r\nexport const CanvasState: CanvasTypeState = {\r\n canvas: null,\r\n activeCanvasObject:null\r\n}\r\n\r\nconst canvasSlice = createSlice({\r\n name: 'canvas',\r\n initialState: CanvasState,\r\n reducers: {\r\n setCanvas(state, props) {\r\n console.log('setCanvas');\r\n state.canvas = props.payload\r\n state.canvas.stateful = false;\r\n state.canvas.renderAll.bind(state.canvas)\r\n },\r\n setActiveObject(state, action) {\r\n state.activeCanvasObject = action.payload\r\n },\r\n renderAll(state) {\r\n console.log('ss')\r\n state.canvas.stateful = false;\r\n state.canvas.renderAll.bind(state.canvas)\r\n },\r\n setBackgroundImg(state, props: any) {\r\n \r\n },\r\n setNewCanvas(state, action) {\r\n state.canvas = action.payload\r\n }\r\n }\r\n})\r\n\r\nexport const canvasActrions = canvasSlice.actions;\r\nexport default canvasSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\"\r\nimport { fabric } from \"fabric\";\r\n\r\nexport type ClientTypeState = {\r\n firstName: string,\r\n lastName: string,\r\n phoneNumber: string,\r\n email: string\r\n}\r\n\r\nexport const ClientState: ClientTypeState = {\r\n firstName: '',\r\n lastName: '',\r\n phoneNumber: '',\r\n email: ''\r\n}\r\n\r\nconst clientSlice = createSlice({\r\n name: 'client',\r\n initialState: ClientState,\r\n reducers: {\r\n setClientName(state, action) {\r\n state.firstName = action.payload\r\n state.lastName = action.payload\r\n },\r\n setClientNumber(state, action) {\r\n state.phoneNumber = action.payload\r\n },\r\n setClientEmail(state, action) {\r\n state.email = action.payload\r\n },\r\n }\r\n})\r\n\r\nexport const clientActrions = clientSlice.actions;\r\nexport default clientSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\"\r\n\r\nexport type TextTypeState = {\r\n textValue: string,\r\n textColor: string,\r\n fontSize: number,\r\n fontFamily: string,\r\n fontWeight: string,\r\n fontStyle: string\r\n}\r\n\r\nexport const TextState: TextTypeState = {\r\n textValue:'',\r\n textColor: '#000',\r\n fontFamily: 'Aria',\r\n fontSize: 60,\r\n fontStyle: 'normal',\r\n fontWeight: 'normal'\r\n}\r\n\r\nconst textSlice = createSlice({\r\n name: 'control',\r\n initialState: TextState,\r\n reducers: {\r\n setTextColor(state, action) {\r\n state.textColor = action.payload\r\n },\r\n setFontFamily(state, action) {\r\n state.fontFamily = action.payload\r\n },\r\n setTextValue(state, action) {\r\n state.textValue = action.payload\r\n },\r\n clearTextFields(state) {\r\n state.textValue = ''\r\n state.textColor = '#000'\r\n }\r\n\r\n }\r\n});\r\n\r\nexport default textSlice.reducer;\r\nexport const textActions = textSlice.actions;","import { createSlice } from \"@reduxjs/toolkit\"\r\nimport { fabric } from \"fabric\";\r\n\r\nexport type HistoryTypeState = {\r\n textItem: fabric.IText,\r\n imgItem: fabric.IImageOptions,\r\n textList: fabric.IText[],\r\n imgList: fabric.IImageOptions[]\r\n}\r\n\r\nexport const HistoryState: HistoryTypeState = {\r\n textItem: null,\r\n imgItem: null,\r\n textList: [],\r\n imgList:[]\r\n}\r\n\r\nconst historySlice = createSlice({\r\n name: 'canvas',\r\n initialState: HistoryState,\r\n reducers: {\r\n setTextItem(state, action) {\r\n state.textItem = action.payload\r\n },\r\n setImgItem(state, action) {\r\n state.imgItem = action.payload\r\n },\r\n setTextList(state, action) {\r\n state.textList = action.payload\r\n },\r\n setImgListI(state, action) {\r\n state.imgList = action.payload\r\n },\r\n }\r\n})\r\n\r\nexport const historyActrions = historySlice.actions;\r\nexport default historySlice.reducer;","import { combineReducers } from \"redux\";\r\nimport { routerReducer } from 'react-router-redux';\r\nimport { default as ControlReducer } from './control.slice';\r\nimport { default as ProductReducer } from './product.slice';\r\nimport { default as OrderReducer } from './order.slice';\r\nimport { default as CategoryReducer } from './category.slice';\r\nimport { default as CanvasReducer } from './canvas.slice';\r\nimport { default as ClientReducer } from './client.slice';\r\nimport { default as TextReducer } from './text.slice';\r\nimport { default as HistoryReducer } from './history.slice';\r\n\r\nexport const reducers = combineReducers({\r\n control: ControlReducer,\r\n history: HistoryReducer,\r\n product: ProductReducer,\r\n order: OrderReducer,\r\n category: CategoryReducer,\r\n canvas: CanvasReducer,\r\n client: ClientReducer,\r\n text: TextReducer,\r\n routing: routerReducer\r\n})","import React, { useEffect } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useParams } from \"react-router\";\r\nimport { IApplicationState } from \"../../reducers/application.state\";\r\nimport { Product } from \"../../entities/product/product\";\r\nimport { productActrions } from \"../../reducers/product.slice\";\r\nimport { Empty } from \"antd\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport * as routes from './../../constans/routes.constants';\r\n\r\nexport const ProductsAll: React.FC = (props: any) => {\r\n const dispatch = useDispatch();\r\n const uriParams: { categoryId } = useParams()\r\n const categoryId: string = uriParams.categoryId;\r\n\r\n const products = useSelector((state) => state.product.products)\r\n\r\n useEffect(() => {\r\n dispatch(productActrions.apiGetAllProducts(categoryId))\r\n }, [])\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {\r\n products.length > 0 ? products.map((productItem: Product, index: number) =>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {productItem.Image && }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Наименование\r\n {productItem.Name}\r\n
\r\n
{productItem.Price} грн. / шт
\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}","import React, { useEffect } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport { IApplicationState } from \"../../reducers/application.state\";\r\nimport { categoryActrions } from \"../../reducers/category.slice\";\r\nimport { Category } from \"../../entities/category/category\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport * as routes from './../../constans/routes.constants';\r\nimport { Empty, Badge } from \"antd\";\r\n\r\nexport const CategoriesAll: React.FC = (props: any) => {\r\n const dispatch = useDispatch();\r\n\r\n const categories = useSelector(state => state.category.categories);\r\n\r\n useEffect(() => {\r\n dispatch(categoryActrions.apiGetCategories())\r\n }, [])\r\n\r\n return (\r\n
\r\n
    \r\n {categories.length > 0 ? categories.map((category: Category, i: number) => {\r\n if (category.Categories.length > 0) {\r\n return
  • \r\n
    \r\n {category.Name}\r\n
    \r\n\r\n
      \r\n {category.Categories.length > 0 ? category.Categories.map((sCategory: Category, x: number) =>\r\n
    • \r\n \r\n

      {sCategory.Name}

      \r\n
      \r\n
    • \r\n ) : null\r\n }\r\n
    \r\n
  • \r\n } else {\r\n return null;\r\n }\r\n }\r\n \r\n ) : }\r\n
\r\n
\r\n )\r\n}","import React from \"react\"\r\n\r\nexport const IconImages = () => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const IconNew = () => {\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\nexport const IconCreateorder = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const IconMenuText = () => {\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const IconMenuItemProducts = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const IconMenuItemColor = () => {\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\nexport const IconHistoryText = () => {\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\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const IconHistoryImages = () => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const IconHistoryRemove = () => {\r\n return (\r\n \r\n\r\n \r\n\r\n \r\n )\r\n}\r\n\r\nexport const CanvasIcon__Rotate = 'data:image/png;base64,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';\r\nexport const CanvasIcon__ResizeX = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABmJLR0QA/wD/AP+gvaeTAAAC9UlEQVR4nO3bPXMSQQCH8T9HkaQI4EwaorUawG9gOivRWNk4fo84NCENYz6INlYSY2WX8ROYl4m1huZmBFLEJqyNx/vB7d0OmXDPr8oE5tjwzG5u4U4CAAAAAAAAAAAAAAAAAAAAACBVdmpH9dsew6K9qn197/J4nqsD/Y+x5+p4d4WR2XUZxUmQtMYIuIySOEjaYwRcRUkUhBijXESJHYQY0yWNEisIMWZLEsU6CDGiiRvFKsh4DM/ztFks2r7m0tosFuV5g7fUyOza7s0iB5kWo1wpKV/I2bzeUssXcnpSKSubHXlb92xmSqQgYTEK+XzkwaZFLp9TpTwaxWb5mhuEGPaSRJkZhBjxxY2SCXtgWoxKuaR8YTSG7/s6P78YPuQn28HfbeZ18NPW1iNtbGyMPNppd3RyeqZerzf86/1mozr1n/3UIDYzYzJIek0LIkndTlcnp6e6uRlEyShz8Lnx/N34cyeWLJYp92yWr5EZEnWZGta9utLvX5dOBn7X3X+wqdz6eujjUZavfhBmxmLMW76yEjEWaWV1RflcXr7vyxgT/Prp4+23axfHH75liHE7wmaKZ2Sux588CIdFMjLX2Z/HH78/3H7zN6PMM0kyxsj3fa3nclpbXb3tMS6labNDUr3ZqO5nJYkoizMrhsRpr1NOT3sDL2tfdjPK9DcsnuepVC7pXkgUduoDYTt1af7MCEzs1A8bLw6MTH9L3+v1dHZ6pj/tjqNhp0/UGBIfLjqwgA8XA1GWr/EgzUZ15jGXzU7tqL9JGA9iMzMCM78PYfmKL04MKcI3hkSxFzeGFPE7daJElySGZHHVyWHjxYGk/kGDKJ12N/Jgl12n3dWPk4kY+1FjSJbXZTUb1fr4TLlstWwOsdQuW63xs6l62NlUGOsrF8eXL4SKvEwNi3VtL1HmihVDSnD1O1FCxY4hJbw/hCgTEsWQHNxBRZS+xDEkR/cYEsVNDOfSeFt0Gv9mAAAAAAAAAAAAAAAAAAAAAEDa/QODGggt+sILUgAAAABJRU5ErkJggg==';\r\nexport const CanvasIcon__ResizeY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABmJLR0QA/wD/AP+gvaeTAAADH0lEQVR4nO3dMWsUQRjG8Wc2NhIICKncpDCNpLbJNXYSSdaYJt/AT2DlJfWplV9D0EazZ1DS2ZjGOtglXtIdCAe2NzYOXGRJMre7N88bn395t8O88GNv4Q7mAKWUUrOs6Jadolt2Us/RRFnqAepWdMtO5rLPmcsOt/Y+PUw9T91c6gHqFDAALPx96TccNvZ7m19TzlUnsyAVGCHTKCZBLsEImUUx9wypwljKcyzl+eRl8/AoLT7oTd0hVRh5fhcrK/cAACenpxj8PJtcYu5OMQNyFUbIOooJkOtihCyj0IPEYoSsolCDTIsRsohCC1IXI2QNhRKkKYyQJRQ6kKYxQlZQqEDawghZQKEBaRsjxI5CATIrjBAzSnKQa3xRWNni4iJWV+9Xvnd8/APD4TB2FAqUpF8uTovRUvPwOEj9I1cyEDKMUHKUW6k2nnNuwTv/LGqRd88BrEVudQTn38QscB63I/dorGQgH18WX2LXbO0e7AA+EsQN9nub72P3SpW5H6huegIhSyBkCYQsgZAlELIEQpZAyBIIWQIhSyBkCYQsgZAlELIEQpZAyBIIWQIhSyBkCYQsgZAlELIEQpZAyBIIWQIhSyBkCYQsgZAlELIEQpZAyBIIWQIhSyBkCYQsgZAlELIEQpZAyBIIWQIhSyBkCYQsgZAlELIEQpZAyBIIWQIhSyBkJTtz8eluf927yBNJvV+O38kvb+31d2JWOI/RNGdCNlEyEDfG0GfuLYA7LW+1Bu/eRVw/Gju33to0V5TsI+vD6+J7NvaPAPxKNUNFI+/cetnbOEo1QNJnCBlKcgyA4Ox3ANh+0X8wztwhJj6+Wj2M/+QUg8GFw/gpMAASEGB2KMwYABEI0D4KOwZABgK0h2IBAyAEAZpHsYIBkIIAzaFYwgCIQYD6KNYwAHIQYHoUixiAARAgHsUqBmAEBLg+imUMwBAIcDWKdQzAGAhQ/WdiS3kOADg7P5+8dDT248f9V0++zXbCepkDAarvlH8yd2eETIIAl6KYxQAMgwCVKKYxAOMgwAWUOesYN6aiW3aKbtlJPYdSSv1n/QGlwb2MYnm4oAAAAABJRU5ErkJggg==';\r\nexport const CanvasIcon__ResizeXY = 'data:image/png;base64,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';\r\nexport const CanvasIcon__Collapse = 'data:image/png;base64,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';\r\nexport const CanvasIcon__Remove = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAEVklEQVR4nO2b3U8cVRiHn3eXAotYMcEajBE1KRqTglcqfkRM+QgtbU3pXKipiSbqvTfGCy/9IzSS0DSpqQutlq8UsIYINt4Zaz+sUrSoLaRAwbrssjvzegELS/maoZyZRue5mnPmvOf8zi9nztmZcxZCQv7XiN8N1jUefIFI5LAKNaI8PJ+rV1EZEOFob1fbd37q8c2AxkbrgYzQgui+DYqekrT9Tm/vyXE/dPliQP0+6zF1nDMgj7oM+d12orvP9BwfNioMiJhuoL7+8D3q6Fc5nbdBW3GcFyUdK5Z0rFgj8hJoy/w9AMqjEftUjWUVm9aXZ7oB3Tb7PrBrITkrDs29Pe09txUbBAbr91jHVfRLoAh4Km9WPwA+MqnP6CNgWVb+zYReB+4HQOWtvu5463oxtU2H3hTlyELyVmEk9WBHR0fClEajj8D0P7xMtvNwvq87fmS98gD9nW1HgfMLyeKkU1hrSh8YNkAji0MfEe0A1E0Y0LkYp1ppQNoiZidB1R1L1zLqNkzgavbaEcq2WNUyTK8COZOsZNyH5ZZVoxP1upU3NBwss/MktvnqtSQ7zypaWru3+XFXUWhp9lqQ7W7jViOa0dnTp09cW+v+mqtA7R7rpIi+utmG7zJO9HW1Na92Y1UDLMuK3kxoCogaleUfmZIiKYzH4/btN9YcAfVNhz5U5W2WzxOlwHaAWEGMgvyCLVe6Ho4qqs6K/HR6juRcKpucAW4sC0Na+7viH69Wp6cfQrV7mz8R5F2AuucbqKwwukKtIDmXIpG4tSL/8m8/M/TDEACKftrf1f6e2zqNvwvc7YQGBC0gaEIDghYQNKEBphuw7QxTM1OounkRnEdVmZqexHZWrvlbjdEXDVXlWPcxxifGqHriaWqr61zF9Z3t5dzlHynb8RCvNb6OiLnvNkZHQCKZYHxiDIDhP9x/3xz5cwSAa+N/kUjNGtGWxewHkdyEl+GcU9bLo7MZwkkwaAFBExoQtICgCQ0IWkDQhAYELSBoQgOCFhA0oQFBCwia0ICgBQRNaEDQAoImNCBoAUETGhC0gKAxakA053N2JOr+rEVu2ajBT+Jg2IBYYRE7yysQEXZVVLmOq9xZiYhQUV5BrLDIoEIfjsruf+UAquppc+PZqmqeqXzO6IZIFl/mgM10xI/OQzgJhgZ4MiCydJ4f21lx4swHVt8my91FztXoBk8GOCpj2esbk778o2UZaq++vzgxPbFUhsh1L3V6GwEq32avL1y5yNTMlJfwO0SZS8+tyJ35e5qR0Zyd5wgDXmr1ZMB9xQywcJY/k0nzRc/nXBq5xGzS2P8ZFkmmUsseu2QqyfDor/QMdZNZyj9XUsigl3o9rzW7m6zqiOo3gL/HRDcmKao1vd3t33sJ8rwKfN0ZP6voAcDP8b8Rk6Ky32vnYZOHoa/8cnH4kSerWvLUTotKCcK9wLbN1HUHJEAuqPCZ5ttv9He0/+Rz+yEh/wX+BYveZf/OM51FAAAAAElFTkSuQmCC';\r\nexport const CanvasIcon__EditText ='data:image/png;base64,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';\r\n\r\n","import React, { useEffect, useState } from \"react\"\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { IApplicationState } from \"../../../reducers/application.state\";\r\nimport { Product } from \"../../../entities/product/product\";\r\nimport { Category } from \"../../../entities/category/category\";\r\nimport { categoryActrions } from \"../../../reducers/category.slice\";\r\nimport { Collapse, Select, Cascader } from \"antd\";\r\nimport { useParams, useLocation, Route } from \"react-router\";\r\nimport { productActrions } from \"../../../reducers/product.slice\";\r\nimport { orderActions } from \"../../../reducers/order.slice\";\r\nimport { OrderItem } from \"../../../models/order.item\";\r\nimport { controlActions } from \"../../../reducers/control.slice\";\r\nimport { canvasActrions } from \"../../../reducers/canvas.slice\";\r\nimport { ColorView } from \"../color/color.view\";\r\nimport { ProductOption } from \"../../../models/productOption\";\r\nimport { List } from \"linq-typescript\";\r\n\r\nexport const ProductsList: React.FC = (props: any) => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const selectedProduct = useSelector(state => state.product.product)\r\n const allCategories = useSelector(state => state.category.categories)\r\n const allProductsByCategory = useSelector(state => state.product.productsIsList)\r\n const category = useSelector(state => state.category.category)\r\n const selectedOrderItem = useSelector(state => state.order.selectedOrderItem)\r\n const _changeProduct = useSelector(state => state.product.changeProduct);\r\n\r\n const [_data, _setData] = useState(new Product());\r\n\r\n useEffect(() => {\r\n return () => {\r\n dispatch(productActrions.setChangeProduct(new Product()))\r\n dispatch(categoryActrions.setCategories([]));\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (allCategories.length === 0) {\r\n dispatch(categoryActrions.apiGetCategories())\r\n }\r\n\r\n if (category.Id === 0 && allCategories.length > 0) {\r\n dispatch(categoryActrions.setCategory(allCategories[0]))\r\n\r\n } else if (selectedProduct.Id !== 0 && allCategories.length > 0) {\r\n let ss = allCategories.filter(c => c.Id === selectedProduct.CategoryId)[0]\r\n\r\n //dispatch(categoryActrions.setCategory(allCategories[0]))\r\n }\r\n\r\n }, [category, allCategories])\r\n\r\n\r\n useEffect(() => {\r\n if (_changeProduct.Id > 0) {\r\n\r\n _setData(_changeProduct);\r\n }\r\n }, [_changeProduct])\r\n\r\n const changeProductInOrder = (selectColor: ProductOption) => {\r\n\r\n if (true) {\r\n //let printPlaceOption = new List(_data.Colors)\r\n // .where(pOption => pOption.Option.TypeOption.IsPrintPlace).toArray()[0];\r\n\r\n dispatch(orderActions.setOptionItem(selectColor))\r\n\r\n dispatch(productActrions.setProduct(_data))\r\n dispatch(orderActions.setOrderItem({ ...selectedOrderItem, Product: _data }))\r\n dispatch(controlActions.setBackgroundImgUrl(selectColor.Images[0].ImageUrl))\r\n\r\n dispatch(orderActions.apiUpdateOrderItemById(\r\n {\r\n \"Id\": selectedOrderItem.Id,\r\n \"ProductId\": _data.Id,\r\n \"Product\": _data,\r\n \"OrderItemProductOptions\": [\r\n {\r\n \"ProductOption\": {\r\n \"Id\": selectColor.Id\r\n }\r\n }\r\n ],\r\n \"Quantity\": selectedOrderItem.Quantity,\r\n }\r\n ))\r\n _setData(new Product())\r\n }\r\n }\r\n \r\n const onChange = (value, label) => {\r\n if (label.length > 0) {\r\n dispatch(productActrions.apiGetAllProductsList(label[label.length - 1].Id))\r\n }\r\n };\r\n\r\n const options = [...allCategories]\r\n\r\n const change = (productOptionItem: any) => {\r\n changeProductInOrder(productOptionItem);\r\n\r\n dispatch(controlActions.closeModal())\r\n dispatch(canvasActrions.setActiveObject(null))\r\n }\r\n\r\n if (_changeProduct.Id > 0) {\r\n return (\r\n
\r\n
\r\n
\r\n\r\n {_changeProduct && _changeProduct.Colors.map((optionItem: ProductOption, index: number) =>\r\n
{ change(optionItem) }}>\r\n {optionItem.Images && {''}}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n )\r\n } else {\r\n return (\r\n
\r\n
\r\n 0 ? options : []}\r\n onChange={onChange}\r\n placeholder=\"Выберите категорию\"\r\n />\r\n
\r\n\r\n
\r\n {\r\n allProductsByCategory.length > 0 ? allProductsByCategory.map((productItem: Product, index: number) =>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {productItem.Image && }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Наименование\r\n {productItem.Name}\r\n
\r\n
{productItem.Price} грн. / шт
\r\n
dispatch(productActrions.apiGetChangeProduct(productItem.Id))}>Заменить
\r\n
\r\n
\r\n
\r\n
\r\n\r\n ) : null\r\n }\r\n\r\n
\r\n
\r\n )\r\n }\r\n\r\n\r\n}","export const fontFamilyList = [\r\n {\r\n FontName: 'Tahoma',\r\n FontTitle: 'Tahoma'\r\n },\r\n {\r\n FontName: 'Colorado',\r\n FontTitle: 'Colorado'\r\n },\r\n {\r\n FontName: 'DaVinci',\r\n FontTitle: 'DaVinci',\r\n },\r\n {\r\n FontName: 'Denistina',\r\n FontTitle: 'Denistina',\r\n },\r\n {\r\n FontName: 'Disney',\r\n FontTitle: 'Disney',\r\n },\r\n {\r\n FontName: 'Equestria',\r\n FontTitle: 'Equestria',\r\n },\r\n {\r\n FontName: 'Good_Vibes',\r\n FontTitle: 'Good_Vibes',\r\n },\r\n {\r\n FontName: 'Graffiti_Shadow',\r\n FontTitle: 'Graffiti_Shadow',\r\n },\r\n {\r\n FontName: 'Holy_Mackerel',\r\n FontTitle: 'Holy_Mackerel',\r\n },\r\n {\r\n FontName: 'Helvetica',\r\n FontTitle: 'Helvetica',\r\n },\r\n {\r\n FontName: 'Karton',\r\n FontTitle: 'Karton',\r\n },\r\n {\r\n FontName: 'Katherine',\r\n FontTitle: 'Katherine',\r\n },\r\n {\r\n FontName: 'Kobzar',\r\n FontTitle: 'Kobzar',\r\n },\r\n {\r\n FontName: 'Metropolis',\r\n FontTitle: 'Metropolis',\r\n },\r\n {\r\n FontName: 'Rosa_Marena',\r\n FontTitle: 'Rosa_Marena',\r\n },\r\n {\r\n FontName: 'Rupster_Script',\r\n FontTitle: 'Rupster_Script',\r\n },\r\n {\r\n FontName: 'Sensei',\r\n FontTitle: 'Sensei',\r\n },\r\n {\r\n FontName: 'SignPainter',\r\n FontTitle: 'SignPainter',\r\n },\r\n {\r\n FontName: 'SkipLegDay',\r\n FontTitle: 'SkipLegDay',\r\n },\r\n {\r\n FontName: 'Spite_Graffiti',\r\n FontTitle: 'Spite_Graffiti',\r\n },\r\n {\r\n FontName: 'TonkyCaps',\r\n FontTitle: 'TonkyCaps',\r\n },\r\n {\r\n FontName: 'VellgishFont',\r\n FontTitle: 'VellgishFont',\r\n },\r\n {\r\n FontName: 'Xtreem',\r\n FontTitle: 'Xtreem',\r\n }\r\n];\r\n\r\nexport const fontFamilyListLat = [\r\n {\r\n FontName: 'Expel_Wide_Bold',\r\n FontTitle: 'Expel_Wide_Bold'\r\n },\r\n {\r\n FontName: 'Amita',\r\n FontTitle: 'Amita'\r\n },\r\n {\r\n FontName: 'Bad Script',\r\n FontTitle: 'Bad Script'\r\n },\r\n {\r\n FontName: 'Comfortaa',\r\n FontTitle: 'Comfortaa'\r\n },\r\n {\r\n FontName: 'Dancing Script',\r\n FontTitle: 'Dancing Script'\r\n },\r\n {\r\n FontName: 'Homemade Apple',\r\n FontTitle: 'Homemade Apple'\r\n },\r\n {\r\n FontName: 'Indie Flower',\r\n FontTitle: 'Indie Flower'\r\n },\r\n {\r\n FontName: 'Kaushan Script',\r\n FontTitle: 'Kaushan Script'\r\n },\r\n {\r\n FontName: 'Leckerli One',\r\n FontTitle: 'Leckerli One'\r\n },\r\n {\r\n FontName: 'Lobster',\r\n FontTitle: 'Lobster'\r\n },\r\n {\r\n FontName: 'Lobster Two',\r\n FontTitle: 'Lobster Two'\r\n },\r\n {\r\n FontName: 'Marck Script',\r\n FontTitle: 'Marck Script'\r\n },\r\n {\r\n FontName: 'Montserrat',\r\n FontTitle: 'Montserrat'\r\n },\r\n {\r\n FontName: 'Nothing You Could Do',\r\n FontTitle: 'Nothing You'\r\n },\r\n {\r\n FontName: 'Pacifico',\r\n FontTitle: 'Pacifico'\r\n },\r\n {\r\n FontName: 'Poiret One',\r\n FontTitle: 'Poiret One'\r\n },\r\n {\r\n FontName: 'Quicksand',\r\n FontTitle: 'Quicksand'\r\n },\r\n];\r\n","import React, { useEffect } from \"react\"\r\nimport { SketchPicker } from 'react-color';\r\nimport { fontFamilyList, fontFamilyListLat } from \"../../../models/default.font.list\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { IApplicationState } from \"../../../reducers/application.state\";\r\nimport { textActions } from \"../../../reducers/text.slice\";\r\nimport { controlActions } from \"../../../reducers/control.slice\";\r\nimport { fabric } from \"fabric\";\r\nimport { canvasActrions } from \"../../../reducers/canvas.slice\";\r\nimport { orderActions } from \"../../../reducers/order.slice\";\r\nimport { Tabs } from \"antd\";\r\n\r\nexport const TextView: React.FC = () => {\r\n const dispatch = useDispatch();\r\n\r\n const canvasFrame = useSelector(state => state.canvas.canvas)\r\n const selectedOrderItemId = useSelector(state => state.control.orderItemId)\r\n\r\n const textValue = useSelector(state => state.text.textValue)\r\n const textColor = useSelector(state => state.text.textColor)\r\n const fontFamily = useSelector(state => state.text.fontFamily)\r\n const fontSize = useSelector(state => state.text.fontSize)\r\n const fontWeight = useSelector(state => state.text.fontWeight)\r\n\r\n const displayColorPicker = useSelector(state => state.control.isOpenColorPicker)\r\n\r\n useEffect(() => {\r\n dispatch(textActions.clearTextFields())\r\n }, [])\r\n\r\n const handleClick = () => {\r\n dispatch(controlActions.openColorPicker())\r\n };\r\n\r\n const handleClose = () => {\r\n dispatch(controlActions.closeColorPicker())\r\n };\r\n\r\n const handleChange = (color) => {\r\n dispatch(textActions.setTextColor(color.hex));\r\n };\r\n\r\n const changeTextValue = (e) => {\r\n dispatch(textActions.setTextValue(e.target.value))\r\n }\r\n\r\n const createTextItem = () => {\r\n let textCreator = new fabric.IText(textValue, {\r\n fontFamily: fontFamily,\r\n fontSize: fontSize,\r\n fontWeight: fontWeight,\r\n fill: textColor,\r\n transparentCorners: false\r\n });\r\n\r\n canvasFrame.setActiveObject(textCreator).add(textCreator);\r\n canvasFrame.centerObject(textCreator);\r\n\r\n //canvasFrame.renderCanvas.bind(canvasFrame);\r\n // dispatch(canvasActrions.renderAll())\r\n\r\n dispatch(orderActions.apiUpdateCanvasOrderItemById({\r\n id: selectedOrderItemId,\r\n body: {\r\n 'Canvas': JSON.stringify(canvasFrame.toJSON()),\r\n 'Preview': canvasFrame.toSVG(),\r\n }\r\n }))\r\n\r\n dispatch(textActions.clearTextFields())\r\n dispatch(controlActions.closeModal())\r\n }\r\n\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 {textColor}\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 {fontFamilyListLat.map((fontFamilyItem: any, index: number) =>\r\n
dispatch(textActions.setFontFamily(fontFamilyItem.FontName))}>\r\n
\r\n
Aa
\r\n
{fontFamilyItem.FontTitle}
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n \r\n
\r\n {fontFamilyList.map((fontFamilyItem: any, index: number) =>\r\n
dispatch(textActions.setFontFamily(fontFamilyItem.FontName))}>\r\n
\r\n
Aa
\r\n
{fontFamilyItem.FontTitle}
\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.state.textCanvasList && this.state.textCanvasList.map((textItem: any, index: number) =>\r\n
  • \r\n
    this.selectedTextItemAndRemove(textItem)} >\r\n \r\n
    \r\n\r\n {textItem.text}\r\n
  • \r\n\r\n )*/}\r\n\r\n
\r\n
\r\n\r\n {\r\n displayColorPicker &&\r\n <>\r\n
\r\n
\r\n \r\n
\r\n \r\n }\r\n\r\n
\r\n )\r\n}","import React, { useEffect } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { Product } from \"../../../entities/product/product\";\r\nimport { IApplicationState } from \"../../../reducers/application.state\";\r\nimport { ProductOption } from \"../../../models/productOption\";\r\nimport { controlActions } from \"../../../reducers/control.slice\";\r\nimport { orderActions } from \"../../../reducers/order.slice\";\r\nimport { OrderItem } from \"../../../models/order.item\";\r\nimport { canvasActrions } from \"../../../reducers/canvas.slice\";\r\n\r\nexport const ColorView: React.FC = () => {\r\n const dispatch = useDispatch();\r\n\r\n const selectedProduct = useSelector(state => state.product.product)\r\n const selectedOrderItemId = useSelector(state => state.control.orderItemId)\r\n\r\n const changeColor = (optionItem: ProductOption) => {\r\n\r\n if (selectedOrderItemId) {\r\n dispatch(orderActions.setOptionItem(optionItem))\r\n dispatch(controlActions.setBackgroundImgUrl(optionItem.Images[0].ImageUrl));\r\n\r\n dispatch(controlActions.closeModal())\r\n dispatch(canvasActrions.setActiveObject(null))\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n\r\n {selectedProduct && selectedProduct.Colors.map((optionItem: ProductOption, index: number) =>\r\n
{ changeColor(optionItem) }}>\r\n {optionItem.Images && {''}}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n )\r\n}","import React from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { IApplicationState } from \"../../../reducers/application.state\";\r\nimport { Product } from \"../../../entities/product/product\";\r\nimport { Avatar, Table } from \"antd\";\r\nimport { PriceFrame } from \"../../../models/price.frame\";\r\nimport { ProductOption } from \"../../../models/productOption\";\r\n\r\nexport const ProductView: React.FC = (props: any) => {\r\n const dispatch = useDispatch();\r\n\r\n const selectedProduct = useSelector(state => state.product.product)\r\n\r\n const columns = [\r\n {\r\n title: 'Тираж, шт',\r\n dataIndex: 'tira',\r\n \r\n },\r\n {\r\n title: 'Цена товара без печати, грн/шт ',\r\n dataIndex: 'nprinting',\r\n },\r\n {\r\n title: 'Полноцветная печать в 1 месте (без цены товара), грн/шт ',\r\n dataIndex: 'price',\r\n },\r\n ];\r\n\r\n const data = selectedProduct.PriceFrames.map((item: PriceFrame, index: number) => {\r\n return {\r\n key: index,\r\n tira: `${item.From} - ${item.To}`,\r\n nprinting: +item.Price.toFixed(2),\r\n price: +item.PricePrint.toFixed(2),\r\n }\r\n });\r\n\r\n return (\r\n
\r\n
{selectedProduct.Category.Name} - {selectedProduct.Name}
\r\n
\r\n
\r\n {\r\n selectedProduct.Image.ImageUrl &&\r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}","import React, { useEffect } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { IApplicationState } from \"../../reducers/application.state\";\r\nimport { Order } from \"../../models/order\";\r\nimport { OrderItem } from \"../../models/order.item\";\r\nimport { orderActions } from \"../../reducers/order.slice\";\r\nimport { Button, Input } from \"antd\";\r\nimport { clientActrions } from \"../../reducers/client.slice\";\r\nimport { controlActions } from \"../../reducers/control.slice\";\r\nimport { IconHistoryRemove } from \"../../constans/api.icons\";\r\nimport { DeleteOutlined } from '@ant-design/icons';\r\nimport * as routes from './../../constans/routes.constants';\r\nimport { Formik, Form, Field } from \"formik\";\r\nimport * as Yup from 'yup';\r\n\r\nexport const ConfirmOrder: React.FC = () => {\r\n const dispatch = useDispatch();\r\n const order = useSelector(state => state.order.order);\r\n\r\n console.log(order)\r\n\r\n const clientFName = useSelector(state => state.client.firstName)\r\n const clientLName = useSelector(state => state.client.lastName)\r\n const clientEmail = useSelector(state => state.client.email)\r\n const clientPhone = useSelector(state => state.client.phoneNumber)\r\n\r\n useEffect(() => {\r\n let id = localStorage.getItem('orderId');\r\n if (id) {\r\n dispatch(orderActions.apiGetOrderById(id))\r\n }\r\n }, [])\r\n\r\n const pushOrder = () => {\r\n dispatch(orderActions.apiConfirmOrder({\r\n \"Id\": order.Id,\r\n \"Client\": {\r\n FirstName: clientFName,\r\n LastName: clientLName,\r\n PhoneNumber: clientPhone,\r\n Email: clientEmail,\r\n }\r\n }))\r\n localStorage.clear();\r\n window.location.href = routes.COMFIRMED_URI;\r\n //push(`/app/product/${response.Body.Id}\r\n\r\n //dispatch(controlActions.closeModal())\r\n }\r\n\r\n const changeName = (e) => {\r\n dispatch(clientActrions.setClientName(e.target.value))\r\n }\r\n\r\n const changeEmail = (e) => {\r\n dispatch(clientActrions.setClientEmail(e.target.value))\r\n }\r\n\r\n const changePhone = (e) => {\r\n dispatch(clientActrions.setClientNumber(e.target.value))\r\n }\r\n\r\n const removeOrderItem = (orderItem: OrderItem) => {\r\n dispatch(orderActions.apiRemoveOrderItem(orderItem.Id))\r\n }\r\n\r\n const phoneRegExp = /^(\\+?\\d{0,4})?\\s?-?\\s?(\\(?\\d{3}\\)?)\\s?-?\\s?(\\(?\\d{3}\\)?)\\s?-?\\s?(\\(?\\d{4}\\)?)?$/;\r\n\r\n const confirmSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .email(() => 'Email некорректный')\r\n .required(() => 'Email обязательный'),\r\n phone: Yup.string()\r\n .matches(phoneRegExp, 'Номер телефона некорректный')\r\n .required(() => 'Номер телефона обязательный'),\r\n userName: Yup.string()\r\n .required(() => 'ФИО обязательный'),\r\n })\r\n\r\n return (\r\n
\r\n
\r\n Готово, остался всего один шаг\r\n
\r\n
\r\n
\r\n {\r\n order && order.OrderItems.length > 0 ? order.OrderItems.map((oItem: OrderItem, index: number) =>\r\n
\r\n
\r\n
\r\n
\r\n {\r\n order && order.OrderItems.length > 1 ?\r\n
removeOrderItem(oItem)}>\r\n \r\n
: null\r\n }\r\n
\r\n\r\n
\r\n
Товар: {oItem.Product.Name}
\r\n
\r\n Тираж: {oItem.Quantity}шт\r\n
\r\n\r\n {oItem.OrderItemProductOptions.map((item: any, index: number) => {\r\n return
\r\n {item.ProductOption.Option.TypeOption.Name === 'Color' ? 'Цвет: ' : `${item.ProductOption.Option.TypeOption.Name}: `}\r\n {item.ProductOption.Option.Name}\r\n
\r\n })}\r\n\r\n\r\n
\r\n Цена за 1шт: {oItem.UnitPrice.toFixed(2)} грн/шт\r\n
\r\n
\r\n Цена за тираж: {(oItem.UnitPrice * oItem.Quantity).toFixed(2)} грн\r\n
\r\n
\r\n
\r\n
\r\n ) : null\r\n }\r\n
\r\n
\r\n
\r\n\r\n
\r\n
Загрузить оригиналы
\r\n
\r\n
\r\n {\r\n const data: any = {\r\n FirstName: values.userName,\r\n LastName: values.userName,\r\n PhoneNumber: values.phone,\r\n Email: values.email,\r\n }\r\n\r\n dispatch(orderActions.apiConfirmOrder({\r\n \"Id\": order.Id,\r\n \"Client\": data\r\n }))\r\n\r\n }}\r\n >\r\n {(formik) => (\r\n
\r\n
\r\n
ФИО
\r\n \r\n {formik.errors.userName && formik.touched.userName ? (\r\n \r\n {formik.errors.userName}\r\n \r\n ) : null}\r\n
\r\n\r\n
\r\n
Эл. почта
\r\n \r\n {formik.errors.email && formik.touched.email ? (\r\n \r\n {formik.errors.email}\r\n \r\n ) : null}\r\n
\r\n\r\n
\r\n
Телефон
\r\n \r\n {formik.errors.phone && formik.touched.phone ? (\r\n \r\n {formik.errors.phone}\r\n \r\n ) : null}\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n
\r\n
\r\n Всего: {order.TotalPrice && order.TotalPrice.toFixed(2)} грн\r\n
\r\n
\r\n\r\n
\r\n
\r\n )\r\n}","import React, { useEffect } from \"react\"\r\nimport { SketchPicker } from 'react-color';\r\nimport { fontFamilyList, fontFamilyListLat } from \"../../../models/default.font.list\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { IApplicationState } from \"../../../reducers/application.state\";\r\nimport { textActions } from \"../../../reducers/text.slice\";\r\nimport { controlActions } from \"../../../reducers/control.slice\";\r\nimport { fabric } from \"fabric\";\r\nimport { canvasActrions } from \"../../../reducers/canvas.slice\";\r\nimport { IText } from \"fabric/fabric-impl\";\r\nimport { Tabs } from \"antd\";\r\n\r\nexport const TextEditView: React.FC = () => {\r\n const dispatch = useDispatch();\r\n\r\n const canvasActiveObject = useSelector(state => state.canvas.activeCanvasObject)\r\n\r\n\r\n \r\n const canvasFrame = useSelector(state => state.canvas.canvas)\r\n const selectedOrderItemId = useSelector(state => state.control.orderItemId)\r\n\r\n const textValue = useSelector(state => state.text.textValue)\r\n const textColor = useSelector(state => state.text.textColor)\r\n const fontFamily = useSelector(state => state.text.fontFamily)\r\n const fontSize = useSelector(state => state.text.fontSize)\r\n const fontWeight = useSelector(state => state.text.fontWeight)\r\n\r\n const displayColorPicker = useSelector(state => state.control.isOpenColorPicker)\r\n\r\n const handleClick = () => {\r\n dispatch(controlActions.openColorPicker())\r\n };\r\n\r\n const handleClose = () => {\r\n dispatch(controlActions.closeColorPicker())\r\n };\r\n\r\n const handleChange = (color) => {\r\n dispatch(textActions.setTextColor(color.hex));\r\n };\r\n\r\n const changeTextValue = (e) => {\r\n dispatch(textActions.setTextValue(e.target.value))\r\n }\r\n\r\n useEffect(() => {\r\n if (canvasActiveObject !== null) {\r\n \r\n dispatch(textActions.setTextValue(canvasActiveObject.text))\r\n dispatch(textActions.setTextColor(canvasActiveObject.fill))\r\n dispatch(textActions.setFontFamily(canvasActiveObject.fontFamily))\r\n }\r\n\r\n }, [canvasActiveObject])\r\n\r\n const editTextItem = () => {\r\n canvasActiveObject.set({\r\n 'text': textValue,\r\n 'fill': textColor,\r\n 'fontFamily': fontFamily\r\n });\r\n canvasFrame.renderAll();\r\n\r\n //let textCreator = new fabric.IText(textValue, {\r\n // fontFamily: fontFamily,\r\n // fontSize: fontSize,\r\n // fontWeight: fontWeight,\r\n // fill: textColor,\r\n // transparentCorners: false\r\n //});\r\n\r\n //canvasFrame.setActiveObject(textCreator).add(textCreator);\r\n //canvasFrame.centerObject(textCreator);\r\n\r\n //dispatch(canvasActrions.renderAll())\r\n //canvasFrame.renderCanvas.bind(canvasFrame);\r\n\r\n\r\n //dispatch(textActions.clearTextFields())\r\n //dispatch(controlActions.closeModal())\r\n }\r\n\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 {textColor}\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 {fontFamilyListLat.map((fontFamilyItem: any, index: number) =>\r\n
dispatch(textActions.setFontFamily(fontFamilyItem.FontName))}>\r\n
\r\n
Aa
\r\n
{fontFamilyItem.FontTitle}
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n \r\n
\r\n {fontFamilyList.map((fontFamilyItem: any, index: number) =>\r\n
dispatch(textActions.setFontFamily(fontFamilyItem.FontName))}>\r\n
\r\n
Aa
\r\n
{fontFamilyItem.FontTitle}
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
    \r\n {/*this.state.textCanvasList && this.state.textCanvasList.map((textItem: any, index: number) =>\r\n
  • \r\n
    this.selectedTextItemAndRemove(textItem)} >\r\n \r\n
    \r\n\r\n {textItem.text}\r\n
  • \r\n\r\n )*/}\r\n\r\n
\r\n
\r\n\r\n {\r\n displayColorPicker &&\r\n <>\r\n
\r\n
\r\n \r\n
\r\n \r\n }\r\n\r\n
\r\n )\r\n}","export function round(num) {\r\n var m = Number((Math.abs(num) * 100).toPrecision(15));\r\n return Math.round(m) / 100 * Math.sign(num);\r\n}","import React, { useEffect } from \"react\"\r\nimport { IconMenuItemColor, IconMenuText, IconImages, IconMenuItemProducts, IconCreateorder } from \"../../../constans/api.icons\"\r\nimport { Tooltip, InputNumber } from \"antd\"\r\nimport { useSelector, useDispatch } from \"react-redux\"\r\nimport { IApplicationState } from \"../../../reducers/application.state\"\r\nimport { Product } from \"../../../entities/product/product\"\r\nimport { TypeOption } from \"../../../models/type.option\"\r\nimport { ProductOption } from \"../../../models/productOption\"\r\nimport { OrderItem } from \"../../../models/order.item\"\r\nimport { Order } from \"../../../models/order\"\r\nimport { controlActions } from \"../../../reducers/control.slice\"\r\nimport { ProductsList } from \"../product/products.list\"\r\nimport { TextView } from \"../text/text.view\"\r\nimport { ColorView } from \"../color/color.view\"\r\nimport { ProductView } from \"../product/product.info\"\r\nimport { orderActions } from \"../../../reducers/order.slice\"\r\nimport { ConfirmOrder } from \"../../steps/confirm.order\"\r\nimport { TextEditView } from \"../text/text.edit.view\"\r\nimport { useHistory, useParams, Route, useLocation } from \"react-router\";\r\nimport { canvasActrions } from \"../../../reducers/canvas.slice\"\r\nimport { round } from \"../../../helpers/math.helper\"\r\n\r\nexport const MenuComponent: React.FC = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const selectedProduct = useSelector(state => state.product.product)\r\n const selectedOrderItem = useSelector(state => state.order.selectedOrderItem)\r\n\r\n const orderItemCount = useSelector(state => state.order.orderItemCount)\r\n const selectedOrderItemId = useSelector(state => state.control.orderItemId)\r\n const orderId = useSelector(state => state.control.orderId)\r\n const canvasActiveObject = useSelector(state => state.canvas.activeCanvasObject)\r\n\r\n const _storeOrderId = useSelector(state => state.control.orderId);\r\n const _storeOrderItemId = useSelector(state => state.control.orderItemId);\r\n\r\n useEffect(() => {\r\n console.log(selectedOrderItem);\r\n }, [_storeOrderItemId])\r\n\r\n //useEffect(() => {\r\n // if (selectedOrderItem && selectedOrderItem.Id !== 0) {\r\n // dispatch(orderActions.setOrderItemCount(selectedOrderItem.Quantity))\r\n // }\r\n //}, [selectedOrderItem])\r\n\r\n //useEffect(() => {\r\n // if (selectedOrderItem && selectedOrderItem.Id !== 0) {\r\n // if (selectedOrderItem.Price === 0) {\r\n // dispatch(orderActions.apiGetOrderItemById(selectedOrderItem.Id))\r\n // }\r\n // }\r\n //}, [selectedOrderItem])\r\n\r\n\r\n const uploadImage = (e) => {\r\n e.preventDefault();\r\n\r\n let reader = new FileReader();\r\n let file = e.target.files[0];\r\n\r\n var f = new FormData();\r\n f.append(\"usingImages\", file);\r\n\r\n reader.onloadend = () => {\r\n dispatch(controlActions.setImgToCanvas(file))\r\n\r\n dispatch(orderActions.apiAddPictureToOrderItem({\r\n orderItemId: _storeOrderItemId,\r\n orderId: _storeOrderId,\r\n formData: f\r\n }))\r\n //dispatch(projectActions.setImageToPreview({ file: file, imagePreviewUrl: reader.result }))\r\n }\r\n\r\n reader.readAsDataURL(file)\r\n\r\n }\r\n\r\n const changeOptions = (optionChange: any) => {\r\n \r\n\r\n if (selectedOrderItem.OrderItemProductOptions.filter(i => i.ProductOptionId === optionChange.productOptionItem.Id).length === 0) {\r\n\r\n const allOptions = selectedOrderItem.OrderItemProductOptions.filter(c => c.ProductOption.Option.TypeOption.Id !== optionChange.typeOptionNetId);\r\n\r\n dispatch(orderActions.apiUpdateOrderItemById(\r\n {\r\n \"Id\": _storeOrderItemId,\r\n \"ProductId\": selectedProduct.Id,\r\n \"Quantity\": selectedOrderItem.Quantity,\r\n \"OrderItemProductOptions\": [\r\n ...allOptions,\r\n {\r\n \"ProductOption\": {\r\n \"Id\": optionChange.productOptionItem.Id\r\n }\r\n }\r\n ]\r\n }\r\n ))\r\n }\r\n }\r\n\r\n const changeCount = (e) => {\r\n // dispatch(orderActions.setOrderItemCount(+e.target.value))\r\n\r\n dispatch(orderActions.apiUpdateOrderItemById(\r\n {\r\n \"Id\": _storeOrderItemId,\r\n \"ProductId\": selectedProduct.Id,\r\n \"Quantity\": +e.target.value,\r\n \"OrderItemProductOptions\": [\r\n ...selectedOrderItem.OrderItemProductOptions,\r\n ]\r\n }\r\n ))\r\n }\r\n\r\n const changeClass = (optionItem: any) => {\r\n if (selectedOrderItem.Id !== 0) {\r\n if (selectedOrderItem.OrderItemProductOptions.filter(f => f.ProductOptionId === optionItem.ProductOptions[0].Id).length !== 0) {\r\n return 'isSelected'\r\n }\r\n }\r\n }\r\n\r\n const removeOption = (optionItem: any) => {\r\n let current = selectedOrderItem.OrderItemProductOptions.filter(i => i.ProductOption.Id !== optionItem.productOptionItem.Id);\r\n dispatch(orderActions.apiUpdateOrderItemById(\r\n {\r\n \"Id\": _storeOrderItemId,\r\n \"ProductId\": selectedProduct.Id,\r\n \"Quantity\": selectedOrderItem.Quantity,\r\n \"OrderItemProductOptions\": [\r\n ...current\r\n ]\r\n }\r\n ))\r\n\r\n\r\n }\r\n\r\n return (\r\n
\r\n
{ dispatch(controlActions.setModalContent({ Component: , Size: 'xxl' })) }}>\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 {canvasActiveObject !== null ?\r\n
{ dispatch(controlActions.setModalContent({ Component: , Size: 'xxl' })) }}>\r\n
\r\n
\r\n \r\n
\r\n
\r\n Изменить текст\r\n Написать свой текст\r\n
\r\n
\r\n
:\r\n
{ dispatch(controlActions.setModalContent({ Component: , Size: 'xxl' })) }}>\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
{ dispatch(controlActions.setModalContent({ Component: , Size: 'xxl' })) }}>\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
{ dispatch(controlActions.setModalContent({ Component: , Size: 'xxl' })) }}>\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 {selectedOrderItem.Id !== 0 ?\r\n \r\n }\r\n\r\n />: 'Выберите макет'}\r\n
\r\n
\r\n\r\n {selectedOrderItem.Id !== 0 && selectedProduct.TypeOptions.map((typeOption: TypeOption, index: number) =>\r\n
\r\n
\r\n {typeOption.Name}:
\r\n {selectedProduct.ProductOptions.filter(p => p.Option.Name)[0]}\r\n
\r\n\r\n {typeOption.Options.map((optionItem: any, x: number) =>\r\n \r\n )}\r\n\r\n
\r\n )}\r\n
\r\n\r\n
\r\n\r\n {selectedOrderItem && selectedOrderItem.Id !== 0 ?
\r\n
\r\n
Цена за заготовку:
\r\n
\r\n {round(selectedOrderItem.TotalProductPrice)}грн\r\n ({round(selectedOrderItem.ProductUnitPrice)}грн/шт)\r\n
\r\n
\r\n
\r\n
Цена на печать:
\r\n
\r\n {round(selectedOrderItem.TotalPrintPrice)}грн\r\n ({round(selectedOrderItem.PrintUnitPrice)}грн/шт)\r\n
\r\n
\r\n
\r\n
Цена за изделие:
\r\n
\r\n {round(selectedOrderItem.Price)}грн\r\n ({round(selectedOrderItem.UnitPrice)}грн/шт)\r\n
\r\n
\r\n
: null}\r\n\r\n\r\n
{\r\n dispatch(controlActions.saveCanvas(true))\r\n dispatch(controlActions.setModalConfirmContent({ Component: , Size: 'full' }))\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}","import React, { useEffect, useState } from \"react\"\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { IApplicationState } from \"../../../reducers/application.state\";\r\nimport { Product } from \"../../../entities/product/product\";\r\nimport { Category } from \"../../../entities/category/category\";\r\nimport { categoryActrions } from \"../../../reducers/category.slice\";\r\nimport { useParams, useLocation, Route } from \"react-router\";\r\nimport { productActrions } from \"../../../reducers/product.slice\";\r\nimport { orderActions } from \"../../../reducers/order.slice\";\r\nimport { controlActions } from \"../../../reducers/control.slice\";\r\nimport { List } from \"linq-typescript\";\r\nimport { ProductOption } from \"../../../models/productOption\";\r\nimport { canvasActrions } from \"../../../reducers/canvas.slice\";\r\nimport { fabric } from \"fabric\";\r\nimport { Order } from \"../../../models/order\";\r\n\r\nexport const NewOrderModalProductsList: React.FC = (props: any) => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const category = useSelector(state => state.category.selectCategoryNewOrderModal)\r\n const orderIdStorage = useSelector(state => state.control.orderId)\r\n\r\n const [colors, setColors] = useState([]);\r\n const [color, setColor] = useState();\r\n const [_productItem, setProductItem] = useState();\r\n\r\n useEffect(() => {\r\n dispatch(controlActions.getStorageOrderId())\r\n }, [orderIdStorage])\r\n\r\n\r\n const setProduct = (productItem: any) => {\r\n dispatch(canvasActrions.setCanvas(new fabric.Canvas('canvas__ID', {\r\n selection: false,\r\n controlsAboveOverlay: true,\r\n centeredScaling: true,\r\n allowTouchScrolling: true\r\n })))\r\n\r\n setTimeout(() => {\r\n change(productItem)\r\n }, 600);\r\n }\r\n\r\n const getColorsList = (productItem) => {\r\n setProductItem(productItem)\r\n }\r\n\r\n useEffect(() => {\r\n if (color) {\r\n change(_productItem)\r\n }\r\n }, [color])\r\n\r\n useEffect(() => {\r\n if (_productItem) {\r\n setColors(new List(_productItem.ProductOptions).where(item => item.Option.TypeOption.IsColor === true).toArray())\r\n }\r\n }, [_productItem])\r\n\r\n const change = (productItem: any) => {\r\n dispatch(productActrions.apiGetProductNewOrder(productItem.Id))\r\n\r\n //dispatch(orderActions.setOrder({ ...order, OrderItems:[]}))\r\n //let _productOption = new List(productItem.ProductOptions).where(item => item.Option.TypeOption.IsColor === true).toArray();\r\n dispatch(productActrions.setProductNewOrderItem({ ...productItem, Colors: colors }))\r\n // Create New Order\r\n\r\n let data = {\r\n \"OrderId\": orderIdStorage,\r\n \"ProductId\": productItem.Id,\r\n \"UsingImages\": [],\r\n \"OrderItemProductOptions\": [\r\n {\r\n \"ProductOption\": {\r\n \"Id\": color.Id\r\n }\r\n }\r\n ],\r\n \"Quantity\": 1,\r\n }\r\n \r\n dispatch(orderActions.apiCreateOrderItem(data))\r\n dispatch(orderActions.createOrderItem(false))\r\n }\r\n\r\n if (colors.length > 0) {\r\n return (\r\n
\r\n
\r\n
\r\n\r\n {colors && colors.map((optionItem: ProductOption, index: number) =>\r\n
{ setColor(optionItem) }}>\r\n {optionItem.Images && {''}}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n )\r\n } else {\r\n return (\r\n
\r\n
\r\n {\r\n category.Products.length > 0 ? category.Products.map((productItem: Product, index: number) =>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {productItem.Image && }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Наименование\r\n {productItem.Name}\r\n
\r\n
{productItem.Price} грн. / шт
\r\n
setProductItem(productItem)}>Создать
\r\n
\r\n
\r\n
\r\n
\r\n\r\n ) : null\r\n }\r\n\r\n
\r\n
\r\n )\r\n }\r\n}","import { Empty } from \"antd\";\r\nimport React, { useEffect } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { Category } from \"../../../entities/category/category\";\r\nimport { IApplicationState } from \"../../../reducers/application.state\";\r\nimport { categoryActrions } from \"../../../reducers/category.slice\";\r\nimport { controlActions } from \"../../../reducers/control.slice\";\r\nimport { NewOrderModalProductsList } from './order.new.products';\r\n\r\nexport const NewOrderCategoriesModal: React.FC = () => {\r\n const dispatch = useDispatch();\r\n\r\n const categories = useSelector(state => state.category.categories);\r\n\r\n useEffect(() => {\r\n dispatch(categoryActrions.apiGetCategories())\r\n }, [])\r\n\r\n const openProductList = (_category: Category) => {\r\n let id: any = _category;\r\n dispatch(categoryActrions.apiGetCategoryByIdNewOrderModal(id.Id))\r\n dispatch(controlActions.setModalContent({ Component: , Size: 'xxl' }))\r\n }\r\n\r\n return (\r\n
\r\n
    \r\n {categories.length > 0 ? categories.map((category: Category, i: number) => {\r\n if (category.Categories.length > 0) {\r\n return
  • \r\n
    \r\n {category.Name}\r\n
    \r\n\r\n
      \r\n {category.Categories.length > 0 ? category.Categories.map((sCategory: Category, x: number) =>\r\n
    • openProductList(sCategory)}>\r\n

      {sCategory.Name}

      \r\n
    • \r\n ) : null\r\n }\r\n
    \r\n
  • \r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n ) : }\r\n
\r\n
\r\n )\r\n}","import React, { useEffect } from \"react\"\r\nimport { IconNew, IconHistoryRemove } from \"../../../constans/api.icons\"\r\nimport { OrderItem } from \"../../../models/order.item\"\r\nimport { useSelector, useDispatch } from \"react-redux\"\r\nimport { IApplicationState } from \"../../../reducers/application.state\"\r\nimport { Order } from \"../../../models/order\"\r\nimport { Product } from \"../../../entities/product/product\"\r\nimport { orderActions } from \"../../../reducers/order.slice\"\r\nimport { controlActions } from \"../../../reducers/control.slice\"\r\nimport { canvasActrions } from \"../../../reducers/canvas.slice\"\r\nimport { fabric } from \"fabric\";\r\nimport { NewOrderCategoriesModal } from \"./order.new\"\r\nimport { List } from \"linq-typescript\"\r\nimport Item from \"antd/lib/list/Item\"\r\nimport { productActrions } from \"../../../reducers/product.slice\"\r\n\r\nimport * as routes from './../../../constans/routes.constants';\r\nimport { useHistory } from \"react-router\"\r\n\r\nexport const OrderList: React.FC = (props: any) => {\r\n const dispatch = useDispatch();\r\n const h = useHistory();\r\n const canvasFrame = useSelector(state => state.canvas.canvas)\r\n\r\n const order = useSelector(state => state.order.order)\r\n const orderItem = useSelector(state => state.order.selectedOrderItem)\r\n const selectedProduct = useSelector(state => state.product.product)\r\n const orderIdStorage = useSelector(state => state.control.orderId)\r\n const orderItemIdStorage = useSelector(state => state.control.orderItemId)\r\n const createOrderItemState = useSelector(state => state.order.createOrderItem)\r\n\r\n useEffect(() => {\r\n if (createOrderItemState) {\r\n //let newCanva = canvasFrame;\r\n //newCanva._objects = []\r\n\r\n dispatch(canvasActrions.setCanvas(new fabric.Canvas('canvas__ID', {\r\n selection: false,\r\n controlsAboveOverlay: true,\r\n centeredScaling: true,\r\n allowTouchScrolling: true\r\n })))\r\n\r\n setTimeout(() => {\r\n createOrderItem()\r\n }, 1000);\r\n }\r\n\r\n }, [createOrderItemState])\r\n\r\n const createOrderItem = () => {\r\n \r\n /*dispatch(orderActions.createOrderItem(true))*/\r\n\r\n if (order.OrderItems.length < 10) {\r\n dispatch(controlActions.setModalContent({ Component: , Size: 'xxl' }))\r\n\r\n //canvasFrame.clear();\r\n //dispatch(orderActions.setOptionItem(optionItem))\r\n\r\n //dispatch(controlActions.setBackgroundImgUrl(selectedProduct.Colors[0].Images[0].ImageUrl))\r\n //dispatch(orderActions.setOptionItem(selectedProduct.Colors[0]))\r\n\r\n // Create New Order\r\n //dispatch(orderActions.apiCreateOrderItem(\r\n // {\r\n // \"OrderId\": orderIdStorage,\r\n // \"ProductId\": selectedProduct.Id,\r\n // \"UsingImages\": [],\r\n // \"OrderItemProductOptions\": [\r\n // {\r\n // \"ProductOption\": {\r\n // \"Id\": selectedProduct.Colors[0].Id\r\n // }\r\n // }\r\n // ],\r\n // \"Quantity\": 1,\r\n // }\r\n //))\r\n\r\n //dispatch(orderActions.createOrderItem(false))\r\n }\r\n }\r\n\r\n const selectOrderItem = (oItem: OrderItem) => {\r\n let storeOitemId = Number.parseInt(localStorage.getItem('orderItemId'));\r\n\r\n h.push(`${routes.PRODUCT_URI}${oItem.ProductId}`);\r\n \r\n if ((oItem.Id !== orderItem.Id) || (oItem.Id !== storeOitemId)) {\r\n canvasFrame.clear();\r\n //dispatch(orderActions.setOrderItemCount(oItem.Quantity))\r\n dispatch(controlActions.setStorageOrderItemId(oItem.Id))\r\n dispatch(orderActions.apiGetOrderItemById(oItem.Id))\r\n //dispatch(productActrions.apiGetProduct(oItem.Product.Id))\r\n }\r\n }\r\n\r\n const removeOrderItem = (orderItem: OrderItem, e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n //let _newOrder = new List(order.OrderItems)\r\n // .where(item => item.OrderId !== orderItem.OrderId).toArray();\r\n //dispatch(orderActions.setOrder({ ...order, OrderItems: _newOrder }))\r\n\r\n //let _productOption = new List(productItem.ProductOptions).where(item => item.Option.TypeOption.IsColor === true).toArray();\r\n\r\n canvasFrame.clear();\r\n dispatch(orderActions.apiRemoveOrderItem(orderItem.Id))\r\n }\r\n\r\n return (\r\n
\r\n
createOrderItem()}>\r\n
\r\n \r\n
\r\n
\r\n
Добавить продукт
\r\n
создано {order && order.OrderItems ? order.OrderItems.length : null} с 10
\r\n
\r\n
\r\n\r\n
\r\n {\r\n order.OrderItems ? order.OrderItems.map((orderItem: OrderItem, index: number) =>\r\n
{ selectOrderItem(orderItem) }}>\r\n
\r\n
\r\n макет \r\n {index + 1}\r\n
\r\n
{orderItem.Product.Name}
\r\n
\r\n\r\n {\r\n order.OrderItems.length > 1 && orderItem.Id !== Number.parseInt(localStorage.getItem('orderItemId')) ?\r\n
{ removeOrderItem(orderItem, e) }}>\r\n \r\n
: null\r\n }\r\n
\r\n ) : null\r\n }\r\n
\r\n
\r\n )\r\n}","import React, { useEffect } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { Product } from \"../../../entities/product/product\";\r\nimport { IApplicationState } from \"../../../reducers/application.state\";\r\nimport { IconHistoryText, IconHistoryImages, IconHistoryRemove } from \"../../../constans/api.icons\";\r\nimport { Popover, Avatar } from \"antd\";\r\nimport { fabric } from 'fabric';\r\nimport { canvasActrions } from \"../../../reducers/canvas.slice\";\r\nimport { orderActions } from \"../../../reducers/order.slice\";\r\nimport { OrderItem } from \"../../../models/order.item\";\r\nimport { ImageDefault } from \"../../../models/image\";\r\nimport { historyActrions } from \"../../../reducers/history.slice\";\r\nimport { DeleteOutlined } from '@ant-design/icons';\r\n\r\nexport const HistoryView: React.FC = () => {\r\n const dispatch = useDispatch();\r\n\r\n const canvasFrame = useSelector(state => state.canvas.canvas)\r\n const historyTextList = useSelector(state => state.history.textList)\r\n const historyImgList = useSelector(state => state.history.imgList)\r\n const selectedOrderItemId = useSelector(state => state.control.orderItemId)\r\n const selectedOrderItem = useSelector(state => state.order.selectedOrderItem)\r\n\r\n const imgListToCanvas = useSelector(state => state.control.imgListCanvas)\r\n\r\n const selectElement = (element: any) => {\r\n canvasFrame.setActiveObject(element);\r\n canvasFrame.requestRenderAll();\r\n if (canvasFrame._activeObject && element.type === 'i-text') {\r\n dispatch(canvasActrions.setActiveObject(element))\r\n }\r\n }\r\n\r\n const removeSelectElement = (element: any) => {\r\n if (element.type === 'i-text') {\r\n canvasFrame.setActiveObject(element);\r\n canvasFrame.remove(canvasFrame._activeObject);\r\n canvasFrame.requestRenderAll();\r\n } else if (element.type === 'image') {\r\n element.set({\r\n width: 0,\r\n height: 0\r\n })\r\n canvasFrame.remove(element);\r\n\r\n canvasFrame.requestRenderAll();\r\n dispatch(canvasActrions.renderAll())\r\n\r\n let picture = selectedOrderItem.UsingImages.filter(imgItem => imgItem.ImageUrl === element.src)[0]\r\n if (picture) {\r\n dispatch(orderActions.apiRemovePictureToOrderItem(picture.Id))\r\n }\r\n }\r\n\r\n if (selectedOrderItem.Id === selectedOrderItemId) {\r\n\r\n dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n {\r\n id: selectedOrderItemId,\r\n body: {\r\n 'Canvas': JSON.stringify(canvasFrame.toJSON()),\r\n 'Preview': canvasFrame.toSVG(),\r\n }\r\n }\r\n ))\r\n }\r\n }\r\n\r\n const pictureList = (\r\n
\r\n {historyImgList.map((item: any, index: number) =>\r\n
\r\n
selectElement(item)}>\r\n \r\n
\r\n
\r\n
removeSelectElement(item)}>\r\n \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n )\r\n\r\n const textList = (\r\n
\r\n {historyTextList.map((item: fabric.IText, index: number) =>\r\n
\r\n
\r\n
selectElement(item)}>\r\n {item.text}\r\n
\r\n
\r\n
removeSelectElement(item)}>\r\n \r\n
\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n )\r\n\r\n return (\r\n
\r\n \r\n
0 && 'isSelected'}`}>\r\n \r\n
\r\n {historyTextList.length}\r\n
\r\n
\r\n
\r\n\r\n \r\n
0 && 'isSelected'}`}>\r\n \r\n
\r\n {historyImgList.length}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}","import React, { useEffect, useRef, useState } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useParams, useLocation, Route } from \"react-router\";\r\nimport { productActrions } from \"../../reducers/product.slice\";\r\nimport { IApplicationState } from \"../../reducers/application.state\";\r\nimport { Product } from \"../../entities/product/product\";\r\nimport { fabric } from \"fabric\";\r\nimport { canvasActrions } from \"../../reducers/canvas.slice\";\r\nimport { MenuComponent } from \"./menu/core.menu\";\r\nimport { Order } from \"../../models/order\";\r\nimport { orderActions } from \"../../reducers/order.slice\";\r\nimport { controlActions } from \"../../reducers/control.slice\";\r\nimport { OrderList } from \"./order.list/order.list\";\r\nimport { OrderItem } from \"../../models/order.item\";\r\nimport { Drawer } from \"antd\";\r\nimport { HistoryView } from \"./menu/history\";\r\nimport { historyActrions } from \"../../reducers/history.slice\";\r\nimport { ProductOption } from \"../../models/productOption\";\r\nimport { ImageDefault } from \"../../models/image\";\r\nimport { ConfirmOrder } from \"../steps/confirm.order\";\r\nimport { CanvasIcon__Collapse, CanvasIcon__EditText, CanvasIcon__Remove, CanvasIcon__ResizeX, CanvasIcon__ResizeXY, CanvasIcon__ResizeY, CanvasIcon__Rotate, IconHistoryText } from \"../../constans/api.icons\";\r\nimport { debug } from \"console\";\r\nimport { TextEditView } from \"./text/text.edit.view\";\r\nimport { List } from \"linq-typescript\";\r\nimport { JsxEmit } from \"typescript\";\r\nimport { OrderItemProductOption } from \"../../models/order.item.product.option\";\r\n\r\nexport const ConstructorCore: React.FC = (props: any) => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n const uriParams: { productId } = useParams()\r\n const productId: number = uriParams.productId;\r\n const _urlProductId: number = uriParams.productId;\r\n\r\n const canvasFrame = useSelector(state => state.canvas.canvas)\r\n const selectedProduct = useSelector(state => state.product.product)\r\n const newOrderItemProduct = useSelector(state => state.product.selectedProductNewOrderItem)\r\n const order = useSelector(state => state.order.order)\r\n const selectedOrderItem = useSelector(state => state.order.selectedOrderItem)\r\n const selectedOrderItemId = useSelector(state => state.control.orderItemId)\r\n const orderIdStorage = useSelector(state => state.control.orderId)\r\n\r\n const modalContent = useSelector(state => state.control.modalContent)\r\n const modalConfirmContent = useSelector(state => state.control.modalConfirmContent)\r\n\r\n const isOpenModal = useSelector(state => state.control.isOpenModal)\r\n const isOpenConfirmModal = useSelector(state => state.control.isOpenConfirmModal)\r\n\r\n const backgroundImgUrl = useSelector(state => state.control.backgroundImgUrl)\r\n const productOption = useSelector(state => state.order.optionItem)\r\n\r\n const imgToCanvas = useSelector(state => state.control.imgToCanvas)\r\n\r\n const inSaveCanvas = useSelector(state => state.control.saveCanvas)\r\n\r\n // new 26 07 2021\r\n const _storeOrderId = useSelector(state => state.control.orderId);\r\n const _storeOrderItemId = useSelector(state => state.control.orderItemId);\r\n const _product = useSelector(state => state.product.product);\r\n const _order = useSelector(state => state.order.order);\r\n const _orderItem = useSelector(state => state.order.selectedOrderItem);\r\n\r\n //ICON\r\n const iconRotate = new Image();\r\n iconRotate.src = CanvasIcon__Rotate;\r\n\r\n const iconResizeX = new Image();\r\n iconResizeX.src = CanvasIcon__ResizeX;\r\n\r\n const iconResizeY = new Image();\r\n iconResizeY.src = CanvasIcon__ResizeY;\r\n\r\n const iconResizeXY = new Image();\r\n iconResizeXY.src = CanvasIcon__ResizeXY;\r\n\r\n const iconResizeCollapse = new Image();\r\n iconResizeCollapse.src = CanvasIcon__Collapse;\r\n\r\n const iconRemove = new Image();\r\n iconRemove.src = CanvasIcon__Remove;\r\n\r\n const iconEditText = new Image();\r\n iconEditText.src = CanvasIcon__EditText;\r\n\r\n // Create canvas frame + get Product\r\n useEffect(() => {\r\n dispatch(controlActions.getStorageOrderId());\r\n dispatch(controlActions.getStorageOrderItemId());\r\n dispatch(productActrions.apiGetProduct(_urlProductId))\r\n\r\n console.log('Start')\r\n\r\n dispatch(canvasActrions.setCanvas(new fabric.Canvas('canvas__ID', {\r\n selection: false,\r\n controlsAboveOverlay: true,\r\n centeredScaling: true,\r\n allowTouchScrolling: true\r\n })));\r\n\r\n return () => {\r\n dispatch(orderActions.setOrder(new Order))\r\n dispatch(orderActions.setOptionItem(new OrderItem()))\r\n }\r\n }, []);\r\n\r\n // Create ORDER\r\n useEffect(() => {\r\n if ((_storeOrderId === 0 && _product.Id > 0)) {\r\n\r\n dispatch(orderActions.apiCreateOrder(_product))\r\n }\r\n }, [_product]);\r\n\r\n // Get Order\r\n useEffect(() => {\r\n if (_storeOrderId > 0) {\r\n console.log('U _storeOrderId')\r\n\r\n dispatch(orderActions.apiGetOrderById(_storeOrderId))\r\n\r\n if (_storeOrderItemId > 0) {\r\n console.log('U _storeOrderItemId')\r\n\r\n dispatch(orderActions.apiGetOrderItemById(_storeOrderItemId));\r\n //[_storeOrderItemId]\r\n }\r\n } else if ((_storeOrderId === 0 && _product.Id > 0) && (_order && _order.OrderItems.length === 0)) {\r\n console.log('U _storeOrderId')\r\n\r\n\r\n dispatch(orderActions.apiCreateOrder(_product))\r\n }\r\n }, [_storeOrderId]);\r\n\r\n // Get Order Item\r\n useEffect(() => {\r\n if (_storeOrderItemId > 0) {\r\n console.log('U _storeOrderItemId')\r\n\r\n dispatch(orderActions.apiGetOrderItemById(_storeOrderItemId));\r\n //[_storeOrderItemId]\r\n } else {\r\n\r\n }\r\n }, [_storeOrderItemId]);\r\n\r\n useEffect(() => {\r\n if (_orderItem.Id > 0) {\r\n // console.log('U _orderItem')\r\n }\r\n }, [_orderItem])\r\n\r\n //set Background Img\r\n useEffect(() => {\r\n if (backgroundImgUrl !== '') {\r\n console.log('U backgroundImgUrl')\r\n setBackgroundImg(backgroundImgUrl)\r\n }\r\n }, [backgroundImgUrl])\r\n\r\n useEffect(() => {\r\n if (_urlProductId !== _product.Id) {\r\n dispatch(productActrions.apiGetProduct(_urlProductId))\r\n }\r\n }, [_urlProductId])\r\n\r\n // Canvas Handler\r\n useEffect(() => {\r\n\r\n if (canvasFrame) {\r\n console.log('U canvasFrame')\r\n let workFrame__CONTAINER: HTMLElement = document.getElementById('workFrame__CONTAINER__ID');\r\n if (workFrame__CONTAINER) {\r\n canvasFrame.setHeight(workFrame__CONTAINER.clientHeight);\r\n canvasFrame.setWidth(workFrame__CONTAINER.clientWidth);\r\n }\r\n\r\n canvasFrame.on(\r\n 'mouse:up:before', handleControl,\r\n )\r\n }\r\n }, [canvasFrame])\r\n\r\n useEffect(() => {\r\n if (_orderItem.Id > 0) {\r\n\r\n if (canvasFrame && _orderItem.Canvas && _orderItem.Canvas !== '{\"version\":\"4.2.0\",\"objects\":[]}' && _orderItem.Canvas !== null) {\r\n orderActions.setOrderItemCount(_orderItem.Quantity)\r\n // dispatch(canvasActrions.renderAll())\r\n\r\n //canvasFrame.renderAll();\r\n canvasFrame.clear().loadFromJSON(JSON.parse(_orderItem.Canvas), function () {\r\n canvasFrame.renderAll();\r\n dispatch(historyActrions.setTextList(canvasFrame.getObjects('i-text')))\r\n dispatch(historyActrions.setImgListI(canvasFrame.getObjects('image')))\r\n })\r\n\r\n } else {\r\n if (_orderItem.Canvas === null && _product && _product.Colors.length > 0 && _orderItem.Id) {\r\n setTimeout(function () {\r\n }, 400);\r\n let optionItem: ProductOption;\r\n\r\n //let optionItem: ProductOption = _product.Colors[0]\r\n let _OrderItemProductOption = new List(_orderItem.OrderItemProductOptions).where(item => item.ProductOption.Option.TypeOption.IsColor === true).toArray();\r\n\r\n if (_OrderItemProductOption.length) {\r\n optionItem = _OrderItemProductOption[0].ProductOption;\r\n } else {\r\n optionItem = _product.Colors[0];\r\n }\r\n\r\n dispatch(orderActions.setOptionItem(optionItem))\r\n\r\n fabric.Image.fromURL(optionItem.Images[0].ImageUrl, (img) => {\r\n let imgSizeW = img.width;\r\n let imgSizeH = img.height;\r\n let canSizeW = canvasFrame.getWidth();\r\n let canSizeH = canvasFrame.getHeight();\r\n let imgCoeff = imgSizeH / imgSizeW;\r\n\r\n if (canSizeH < imgSizeH) {\r\n if (canSizeW < imgSizeW) {\r\n let wCoeff = canSizeW / imgSizeW;\r\n let hCoeff = canSizeH / imgSizeH;\r\n if (wCoeff < hCoeff) {\r\n img.scale(wCoeff);\r\n } else {\r\n img.scale(hCoeff);\r\n }\r\n } else {\r\n img.scale(canSizeH / imgSizeH);\r\n }\r\n } else if (canSizeW < imgSizeW) {\r\n img.scale(canSizeW / imgSizeW);\r\n }\r\n\r\n canvasFrame.centerObject(img);\r\n canvasFrame.setBackgroundImage(img, canvasFrame.renderAll.bind(canvasFrame));\r\n //dispatch(canvasActrions.renderAll())\r\n\r\n dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n {\r\n id: _storeOrderItemId,\r\n body: {\r\n 'Canvas': JSON.stringify(canvasFrame.toJSON()),\r\n 'Preview': canvasFrame.toSVG(),\r\n }\r\n }\r\n ))\r\n\r\n let gg = {\r\n \"Id\": _storeOrderItemId,\r\n \"ProductId\": _product.Id,\r\n \"Quantity\": _orderItem.Quantity,\r\n \"OrderItemProductOptions\": [\r\n ..._orderItem.OrderItemProductOptions,\r\n {\r\n \"ProductOption\": {\r\n \"Id\": optionItem.Id\r\n }\r\n }\r\n ]\r\n }\r\n \r\n dispatch(orderActions.apiUpdateOrderItemById(gg))\r\n })\r\n }\r\n }\r\n\r\n fabric.Object.prototype.transparentCorners = false;\r\n fabric.Object.prototype.cornerColor = 'blue';\r\n fabric.Object.prototype.cornerStyle = 'circle';\r\n fabric.Object.prototype.padding = 10;\r\n\r\n const fab: any = fabric;\r\n const fabObProto: any = fabric.Object.prototype;\r\n\r\n const fabricControl: any = fab.Control;\r\n const fabricControls: any = fabObProto.controls;\r\n\r\n fabricControls.customMove = new fabricControl({\r\n x: 0.5,\r\n y: -0.5,\r\n offsetX: 22,\r\n //actionHandler: move?,\r\n cursorStyle: 'pointer',\r\n cornerSize: 24,\r\n mouseUpHandler: deleteObject,\r\n actionName: 'drag',\r\n render: (ctx, left, top, styleOverride, fabricObject,) => renderIcon(ctx, left, top, styleOverride, fabricObject, iconRemove, '')\r\n });\r\n\r\n fabricControls.customTextEdit = new fabricControl({\r\n x: -0.5,\r\n y: -0.5,\r\n offsetX: -22,\r\n //actionHandler: move?,\r\n cursorStyle: 'pointer',\r\n cornerSize: 24,\r\n mouseUpHandler: editTextObject,\r\n actionName: 'editText',\r\n render: (ctx, left, top, styleOverride, fabricObject) => renderIcon(ctx, left, top, styleOverride, fabricObject, iconEditText, 'editText')\r\n });\r\n\r\n fabric.Object.prototype.drawControls = function (ctx, styleOverride) {\r\n styleOverride = styleOverride || {};\r\n ctx.save();\r\n ctx.setTransform(this.canvas.getRetinaScaling(), 0, 0, this.canvas.getRetinaScaling(), 0, 0);\r\n ctx.strokeStyle = ctx.fillStyle = styleOverride.cornerColor || this.cornerColor;\r\n if (!this.transparentCorners) {\r\n ctx.strokeStyle = styleOverride.cornerStrokeColor || this.cornerStrokeColor;\r\n }\r\n this._setLineDash(ctx, styleOverride.cornerDashArray || this.cornerDashArray, null);\r\n this.setCoords();\r\n this.forEachControl(function (control, key, fabricObject) {\r\n\r\n if (control.getVisibility(fabricObject, key)) {\r\n switch (key) {\r\n case 'mtr':\r\n ctx.drawImage(\r\n iconRotate,\r\n fabricObject.oCoords[key].x - 16,\r\n fabricObject.oCoords[key].y - 16,\r\n 32,\r\n 32\r\n )\r\n break;\r\n case 'customMove':\r\n // \r\n //control.render(\r\n // ctx,\r\n // fabricObject.oCoords[key].x,\r\n // fabricObject.oCoords[key].y,\r\n // styleOverride,\r\n // fabricObject\r\n //);\r\n break;\r\n //case 'ml':\r\n // ctx.drawImage(\r\n // iconResizeX,\r\n // fabricObject.oCoords[key].x - 16,\r\n // fabricObject.oCoords[key].y - 16,\r\n // 32,\r\n // 32\r\n // )\r\n // break;\r\n //case 'mb':\r\n // ctx.drawImage(\r\n // iconResizeY,\r\n // fabricObject.oCoords[key].x - 16,\r\n // fabricObject.oCoords[key].y - 16,\r\n // 32,\r\n // 32\r\n // )\r\n // break;\r\n\r\n //case 'bl':\r\n // ctx.drawImage(\r\n // iconResizeXY,\r\n // fabricObject.oCoords[key].x - 14,\r\n // fabricObject.oCoords[key].y - 14,\r\n // 28,\r\n // 28\r\n // )\r\n // break;\r\n default:\r\n break;\r\n }\r\n\r\n control.render(\r\n ctx,\r\n fabricObject.oCoords[key].x,\r\n fabricObject.oCoords[key].y,\r\n styleOverride,\r\n fabricObject\r\n );\r\n }\r\n });\r\n\r\n ctx.restore();\r\n return this;\r\n }\r\n }\r\n\r\n }, [_orderItem])\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 //useEffect(() => {\r\n // dispatch(controlActions.getStorageOrderId())\r\n\r\n // if (productId !== null) {\r\n // if (+productId !== selectedOrderItem.ProductId && selectedOrderItem.Id !== 0) {\r\n // dispatch(productActrions.apiGetProduct(selectedOrderItem.ProductId))\r\n // } else {\r\n // dispatch(productActrions.apiGetProduct(+productId))\r\n // }\r\n // }\r\n\r\n // dispatch(canvasActrions.setCanvas(new fabric.Canvas('canvas__ID', {\r\n // selection: false,\r\n // controlsAboveOverlay: true,\r\n // centeredScaling: true,\r\n // allowTouchScrolling: true\r\n // })))\r\n\r\n\r\n // if (!!orderIdStorage) {\r\n // dispatch(orderActions.apiGetOrderById(orderIdStorage))\r\n // }\r\n\r\n // return () => {\r\n // dispatch(orderActions.setOrderItem(new OrderItem))\r\n // }\r\n\r\n //}, [])\r\n\r\n const deleteObject = (eventData, element) => {\r\n\r\n let canvas = element.canvas;\r\n\r\n if (element.type === 'i-text') {\r\n canvas.setActiveObject(element);\r\n canvas.remove(canvas._activeObject);\r\n canvas.requestRenderAll();\r\n } else if (element.type === 'image') {\r\n element.set({\r\n width: 0,\r\n height: 0\r\n })\r\n canvas.setActiveObject(element);\r\n canvas.remove(element);\r\n\r\n canvas.requestRenderAll();\r\n dispatch(canvasActrions.renderAll())\r\n\r\n let picture = selectedOrderItem.UsingImages.filter(imgItem => imgItem.ImageUrl === element.src)[0];\r\n\r\n if (picture) {\r\n dispatch(orderActions.apiRemovePictureToOrderItem(picture.Id))\r\n }\r\n\r\n dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n {\r\n id: _storeOrderItemId,\r\n body: {\r\n 'Canvas': JSON.stringify(canvas.toJSON()),\r\n 'Preview': canvas.toSVG(),\r\n }\r\n }\r\n ))\r\n\r\n }\r\n\r\n //let target = eventData.target;\r\n //canvasFrame.remove(target);\r\n //canvasFrame.requestRenderAll();\r\n }\r\n\r\n const editTextObject = (eventData, element) => {\r\n let canvas = element.canvas;\r\n\r\n canvas.setActiveObject(element);\r\n canvas.requestRenderAll();\r\n if (canvas._activeObject && element.type === 'i-text') {\r\n dispatch(canvasActrions.setActiveObject(element));\r\n dispatch(controlActions.setModalContent({ Component: , Size: 'xxl' }))\r\n }\r\n }\r\n\r\n const renderIcon = (ctx, left, top, styleOverride, fabricObject, img, actionName?: string) => {\r\n if (actionName === 'editText' && fabricObject.type !== 'i-text') {\r\n return;\r\n }\r\n\r\n let size = 30;\r\n ctx.save();\r\n ctx.translate(left, top);\r\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\r\n ctx.drawImage(img, -size / 2, -size / 2, size, size);\r\n\r\n ctx.restore();\r\n }\r\n\r\n //useEffect(() => {\r\n // if ((+localStorage.getItem('orderItemId') !== selectedOrderItem.Id) && (order.OrderItems && order.OrderItems.length > 0)) {\r\n // let _selected = new List(order.OrderItems)\r\n // .where(item => item.Id === +localStorage.getItem('orderItemId')).toArray()[0];\r\n // \r\n // if (_selected) {\r\n // console.log(_selected)\r\n // \r\n // if ((_selected.Canvas === null || _selected.Preview === null)) {\r\n // let _productOption = new List(_selected.Product.ProductOptions).where(item => item.Option.TypeOption.IsColor === true).toArray();\r\n // \r\n\r\n // if (newOrderItemProduct.Id === _selected.Product.Id) {\r\n // \r\n // setTimeout(() => {\r\n // setBackgroundImg(newOrderItemProduct.Colors[0].Images ? newOrderItemProduct.Colors[0].Images[0].ImageUrl : _productOption[0].Images[0].ImageUrl);\r\n // }, 500)\r\n // }\r\n // }\r\n // }\r\n // }\r\n //}, [order.OrderItems, newOrderItemProduct])\r\n\r\n //useEffect(() => {\r\n // if (selectedProduct.Id !== 0 && foo.current === false) {\r\n // foo.current = true;\r\n // let id = +localStorage.getItem('orderItemId');\r\n // console.log('======');\r\n // if (order.Id === 0 && selectedProduct.Id !== 0 && orderIdStorage === 0) {\r\n // dispatch(orderActions.apiCreateOrder(selectedProduct))\r\n // }\r\n\r\n // if (selectedOrderItem.Canvas && selectedProduct && selectedProduct.Colors.length > 0 && selectedOrderItem.Id === id) {\r\n // //let json: fabric.Canvas = JSON.parse(selectedOrderItem.Canvas);\r\n // //let optionItem: ProductOption = selectedProduct.Colors[0];\r\n // //let backgroundImage: any = json.backgroundImage;\r\n // } else {\r\n // if (selectedOrderItem.Canvas === null && selectedProduct && selectedProduct.Colors.length > 0 && selectedOrderItem.Id === id) {\r\n // setTimeout(function () {\r\n // let optionItem: ProductOption = selectedProduct.Colors[0]\r\n // dispatch(orderActions.setOptionItem(optionItem))\r\n\r\n // fabric.Image.fromURL(optionItem.Images[0].ImageUrl, (img) => {\r\n // let imgSizeW = img.width;\r\n // let imgSizeH = img.height;\r\n // let canSizeW = canvasFrame.getWidth();\r\n // let canSizeH = canvasFrame.getHeight();\r\n // let imgCoeff = imgSizeH / imgSizeW;\r\n\r\n // if (canSizeH < imgSizeH) {\r\n // if (canSizeW < imgSizeW) {\r\n // let wCoeff = canSizeW / imgSizeW;\r\n // let hCoeff = canSizeH / imgSizeH;\r\n // if (wCoeff < hCoeff) {\r\n // img.scale(wCoeff);\r\n // } else {\r\n // img.scale(hCoeff);\r\n // }\r\n // } else {\r\n // img.scale(canSizeH / imgSizeH);\r\n // }\r\n // } else if (canSizeW < imgSizeW) {\r\n // img.scale(canSizeW / imgSizeW);\r\n // }\r\n\r\n // canvasFrame.centerObject(img);\r\n // canvasFrame.setBackgroundImage(img, canvasFrame.renderAll.bind(canvasFrame));\r\n // dispatch(canvasActrions.renderAll())\r\n\r\n // dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n // {\r\n // id: selectedOrderItem.Id,\r\n // body: {\r\n // 'Canvas': JSON.stringify(canvasFrame.toJSON()),\r\n // 'Preview': canvasFrame.toSVG(),\r\n // }\r\n // }\r\n // ))\r\n\r\n // dispatch(orderActions.apiUpdateOrderItemById(\r\n // {\r\n // \"Id\": selectedOrderItem.Id,\r\n // \"ProductId\": selectedProduct.Id,\r\n // \"Quantity\": selectedOrderItem.Quantity,\r\n // \"OrderItemProductOptions\": [\r\n // ...selectedOrderItem.OrderItemProductOptions,\r\n // {\r\n // \"ProductOption\": {\r\n // \"Id\": optionItem.Id\r\n // }\r\n // }\r\n // ]\r\n // }\r\n // ))\r\n\r\n // })\r\n\r\n\r\n // }, 400);\r\n // }\r\n // }\r\n\r\n\r\n // }\r\n //}, [selectedProduct])\r\n\r\n //useEffect(() => {\r\n // if (order.Id !== 0 && isOpenConfirmModal === true) {\r\n // let id = +localStorage.getItem('orderItemId');\r\n // let canvas = canvasFrame;\r\n // dispatch(canvasActrions.setActiveObject(null))\r\n // dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n // {\r\n // id: id,\r\n // body: {\r\n // 'Canvas': JSON.stringify(canvas.toJSON()),\r\n // 'Preview': canvas.toSVG(),\r\n // }\r\n // }\r\n // ))\r\n // }\r\n //}, [isOpenConfirmModal])\r\n\r\n //useEffect(() => {\r\n // if (order.Id !== 0 && inSaveCanvas) {\r\n\r\n // let id = +localStorage.getItem('orderItemId');\r\n // let canvas = canvasFrame;\r\n // dispatch(canvasActrions.setActiveObject(null))\r\n // dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n // {\r\n // id: id,\r\n // body: {\r\n // 'Canvas': JSON.stringify(canvas.toJSON()),\r\n // 'Preview': canvas.toSVG(),\r\n // }\r\n // }\r\n // ))\r\n // dispatch(controlActions.setModalConfirmContent({ Component: , Size: 'full' }))\r\n // }\r\n\r\n //}, [inSaveCanvas])\r\n\r\n //useEffect(() => {\r\n // let id = +localStorage.getItem('orderItemId');\r\n // if (selectedOrderItem.Id === 0) {\r\n // if (id && id > 0) {\r\n // dispatch(orderActions.apiGetOrderItemById(id))\r\n // }\r\n\r\n // } else {\r\n // if (productId !== null) {\r\n // if (+productId !== selectedOrderItem.ProductId) {\r\n // dispatch(productActrions.apiGetProduct(selectedOrderItem.ProductId))\r\n // } else {\r\n // dispatch(productActrions.apiGetProduct(+productId))\r\n // }\r\n // }\r\n\r\n // if (canvasFrame && selectedOrderItem.Canvas && selectedOrderItem.Canvas !== '{\"version\":\"4.2.0\",\"objects\":[]}' && selectedOrderItem.Canvas !== null) {\r\n // orderActions.setOrderItemCount(selectedOrderItem.Quantity)\r\n // dispatch(canvasActrions.renderAll())\r\n\r\n // canvasFrame.renderAll();\r\n // canvasFrame.clear().loadFromJSON(JSON.parse(selectedOrderItem.Canvas), function () {\r\n // canvasFrame.renderAll();\r\n // dispatch(historyActrions.setTextList(canvasFrame.getObjects('i-text')))\r\n // dispatch(historyActrions.setImgListI(canvasFrame.getObjects('image')))\r\n // })\r\n\r\n // } else {\r\n // if (selectedOrderItem.Canvas === null && selectedProduct && selectedProduct.Colors.length > 0 && selectedOrderItem.Id === id) {\r\n // setTimeout(function () {\r\n // let optionItem: ProductOption = selectedProduct.Colors[0]\r\n // dispatch(orderActions.setOptionItem(optionItem))\r\n\r\n // fabric.Image.fromURL(optionItem.Images[0].ImageUrl, (img) => {\r\n // let imgSizeW = img.width;\r\n // let imgSizeH = img.height;\r\n // let canSizeW = canvasFrame.getWidth();\r\n // let canSizeH = canvasFrame.getHeight();\r\n // let imgCoeff = imgSizeH / imgSizeW;\r\n\r\n // if (canSizeH < imgSizeH) {\r\n // if (canSizeW < imgSizeW) {\r\n // let wCoeff = canSizeW / imgSizeW;\r\n // let hCoeff = canSizeH / imgSizeH;\r\n // if (wCoeff < hCoeff) {\r\n // img.scale(wCoeff);\r\n // } else {\r\n // img.scale(hCoeff);\r\n // }\r\n // } else {\r\n // img.scale(canSizeH / imgSizeH);\r\n // }\r\n // } else if (canSizeW < imgSizeW) {\r\n // img.scale(canSizeW / imgSizeW);\r\n // }\r\n\r\n // canvasFrame.centerObject(img);\r\n // canvasFrame.setBackgroundImage(img, canvasFrame.renderAll.bind(canvasFrame));\r\n // dispatch(canvasActrions.renderAll())\r\n\r\n // dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n // {\r\n // id: selectedOrderItem.Id,\r\n // body: {\r\n // 'Canvas': JSON.stringify(canvasFrame.toJSON()),\r\n // 'Preview': canvasFrame.toSVG(),\r\n // }\r\n // }\r\n // ))\r\n\r\n // dispatch(orderActions.apiUpdateOrderItemById(\r\n // {\r\n // \"Id\": +selectedOrderItemId,\r\n // \"ProductId\": selectedProduct.Id,\r\n // \"Quantity\": selectedOrderItem.Quantity,\r\n // \"OrderItemProductOptions\": [\r\n // ...selectedOrderItem.OrderItemProductOptions,\r\n // {\r\n // \"ProductOption\": {\r\n // \"Id\": optionItem.Id\r\n // }\r\n // }\r\n // ]\r\n // }\r\n // ))\r\n // })\r\n\r\n\r\n // }, 400);\r\n // }\r\n // }\r\n // }\r\n\r\n // if (selectedOrderItem.Id > 0) {\r\n // fabric.Object.prototype.transparentCorners = false;\r\n // fabric.Object.prototype.cornerColor = 'blue';\r\n // fabric.Object.prototype.cornerStyle = 'circle';\r\n // fabric.Object.prototype.padding = 10;\r\n\r\n // const fab: any = fabric;\r\n // const fabObProto: any = fabric.Object.prototype;\r\n\r\n // const fabricControl: any = fab.Control;\r\n // const fabricControls: any = fabObProto.controls;\r\n\r\n // fabricControls.customMove = new fabricControl({\r\n // x: 0.5,\r\n // y: -0.5,\r\n // offsetX: 22,\r\n // //actionHandler: move?,\r\n // cursorStyle: 'pointer',\r\n // cornerSize: 24,\r\n // mouseUpHandler: deleteObject,\r\n // actionName: 'drag',\r\n // render: (ctx, left, top, styleOverride, fabricObject,) => renderIcon(ctx, left, top, styleOverride, fabricObject, iconRemove, '')\r\n // });\r\n\r\n // fabricControls.customTextEdit = new fabricControl({\r\n // x: -0.5,\r\n // y: -0.5,\r\n // offsetX: -22,\r\n // //actionHandler: move?,\r\n // cursorStyle: 'pointer',\r\n // cornerSize: 24,\r\n // mouseUpHandler: editTextObject,\r\n // actionName: 'editText',\r\n // render: (ctx, left, top, styleOverride, fabricObject) => renderIcon(ctx, left, top, styleOverride, fabricObject, iconEditText, 'editText')\r\n // });\r\n // \r\n // fabric.Object.prototype.drawControls = function (ctx, styleOverride) {\r\n // styleOverride = styleOverride || {};\r\n // ctx.save();\r\n // ctx.setTransform(this.canvas.getRetinaScaling(), 0, 0, this.canvas.getRetinaScaling(), 0, 0);\r\n // ctx.strokeStyle = ctx.fillStyle = styleOverride.cornerColor || this.cornerColor;\r\n // if (!this.transparentCorners) {\r\n // ctx.strokeStyle = styleOverride.cornerStrokeColor || this.cornerStrokeColor;\r\n // }\r\n // this._setLineDash(ctx, styleOverride.cornerDashArray || this.cornerDashArray, null);\r\n // this.setCoords();\r\n // this.forEachControl(function (control, key, fabricObject) {\r\n\r\n // if (control.getVisibility(fabricObject, key)) {\r\n // switch (key) {\r\n // case 'mtr':\r\n // ctx.drawImage(\r\n // iconRotate,\r\n // fabricObject.oCoords[key].x - 16,\r\n // fabricObject.oCoords[key].y - 16,\r\n // 32,\r\n // 32\r\n // )\r\n // break;\r\n // case 'customMove':\r\n // // \r\n // //control.render(\r\n // // ctx,\r\n // // fabricObject.oCoords[key].x,\r\n // // fabricObject.oCoords[key].y,\r\n // // styleOverride,\r\n // // fabricObject\r\n // //);\r\n // break;\r\n // //case 'ml':\r\n // // ctx.drawImage(\r\n // // iconResizeX,\r\n // // fabricObject.oCoords[key].x - 16,\r\n // // fabricObject.oCoords[key].y - 16,\r\n // // 32,\r\n // // 32\r\n // // )\r\n // // break;\r\n // //case 'mb':\r\n // // ctx.drawImage(\r\n // // iconResizeY,\r\n // // fabricObject.oCoords[key].x - 16,\r\n // // fabricObject.oCoords[key].y - 16,\r\n // // 32,\r\n // // 32\r\n // // )\r\n // // break;\r\n\r\n // //case 'bl':\r\n // // ctx.drawImage(\r\n // // iconResizeXY,\r\n // // fabricObject.oCoords[key].x - 14,\r\n // // fabricObject.oCoords[key].y - 14,\r\n // // 28,\r\n // // 28\r\n // // )\r\n // // break;\r\n // default:\r\n // break;\r\n // }\r\n\r\n // control.render(\r\n // ctx,\r\n // fabricObject.oCoords[key].x,\r\n // fabricObject.oCoords[key].y,\r\n // styleOverride,\r\n // fabricObject\r\n // );\r\n // }\r\n // });\r\n\r\n // ctx.restore();\r\n // return this;\r\n // }\r\n // }\r\n\r\n //}, [selectedOrderItem])\r\n\r\n //useEffect(() => {\r\n // if (order.Id === 0) {\r\n // let id = localStorage.getItem('orderId');\r\n // if (id) {\r\n // dispatch(orderActions.apiGetOrderById(id))\r\n // }\r\n // }\r\n //}, [order])\r\n\r\n\r\n useEffect(() => {\r\n\r\n if (imgToCanvas !== '' && imgToCanvas !== null && !imgToCanvas.type) {\r\n addImgToCanvas(imgToCanvas)\r\n }\r\n }, [imgToCanvas])\r\n\r\n const setBackgroundImg = async (imgUrl: string) => {\r\n\r\n fabric.Image.fromURL(imgUrl, (img) => {\r\n let imgSizeW = img.width;\r\n let imgSizeH = img.height;\r\n let canSizeW = canvasFrame.getWidth();\r\n let canSizeH = canvasFrame.getHeight();\r\n let imgCoeff = imgSizeH / imgSizeW;\r\n\r\n if (canSizeH < imgSizeH) {\r\n if (canSizeW < imgSizeW) {\r\n let wCoeff = canSizeW / imgSizeW;\r\n let hCoeff = canSizeH / imgSizeH;\r\n if (wCoeff < hCoeff) {\r\n img.scale(wCoeff);\r\n } else {\r\n img.scale(hCoeff);\r\n }\r\n } else {\r\n img.scale(canSizeH / imgSizeH);\r\n }\r\n } else if (canSizeW < imgSizeW) {\r\n img.scale(canSizeW / imgSizeW);\r\n }\r\n\r\n canvasFrame.centerObject(img);\r\n canvasFrame.setBackgroundImage(img, canvasFrame.renderAll.bind(canvasFrame));\r\n canvasFrame.renderAll()\r\n //dispatch(canvasActrions.renderAll())\r\n\r\n dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n {\r\n id: _storeOrderItemId,\r\n body: {\r\n 'Canvas': JSON.stringify(canvasFrame.toJSON()),\r\n 'Preview': canvasFrame.toSVG(),\r\n }\r\n }\r\n ))\r\n\r\n })\r\n\r\n\r\n let pOption;\r\n if (!productOption) {\r\n pOption = _product.Colors[0]\r\n } else {\r\n pOption = productOption;\r\n }\r\n\r\n //let _selectedOrderItemId = (selectedOrderItemId && selectedOrderItem.Id === 0) ? _storeOrderItemId : selectedOrderItem.Id;\r\n\r\n let _data = {\r\n \"Id\": _storeOrderItemId,\r\n \"ProductId\": _product.Id,\r\n \"Quantity\": _orderItem.Quantity,\r\n \"OrderItemProductOptions\": [\r\n ..._orderItem.OrderItemProductOptions,\r\n {\r\n \"ProductOption\": {\r\n \"Id\": pOption.Id\r\n }\r\n }\r\n ]\r\n }\r\n \r\n await dispatch(orderActions.apiUpdateNotResponseOrderItemById(_data))\r\n }\r\n\r\n const addImgToCanvas = (img: ImageDefault) => {\r\n dispatch(controlActions.getStorageOrderItemId());\r\n\r\n if (img !== null) {\r\n fabric.Image.fromURL(img.ImageUrl, (img) => {\r\n\r\n img.crossOrigin = \"\"\r\n\r\n if (img.width > canvasFrame.width) {\r\n let scale = (canvasFrame.width - 200) / img.width;\r\n img.scale(scale).set({\r\n transparentCorners: false,\r\n });\r\n } else {\r\n img.scale(0.5).set({\r\n transparentCorners: false,\r\n });\r\n }\r\n\r\n canvasFrame.centerObject(img);\r\n canvasFrame.setActiveObject(img).add(img);\r\n\r\n dispatch(canvasActrions.renderAll())\r\n\r\n dispatch(orderActions.apiUpdateCanvasOrderItemById(\r\n {\r\n id: _storeOrderItemId,\r\n body: {\r\n 'Canvas': JSON.stringify(canvasFrame.toJSON()),\r\n 'Preview': canvasFrame.toSVG(),\r\n }\r\n }\r\n ))\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n const handleControl = (e) => {\r\n dispatch(controlActions.getStorageOrderItemId());\r\n console.log('handleControl');\r\n\r\n if (e.targe === null) {\r\n dispatch(canvasActrions.setActiveObject(null))\r\n } else {\r\n // SELECTED TEXT & EDIT VIEW\r\n //if (e.target.type === 'i-text' && e.target) {\r\n // dispatch(canvasActrions.setActiveObject(e.target))\r\n //} else {\r\n // \r\n //}\r\n }\r\n\r\n if (canvasFrame.getActiveObjects().length === 0) {\r\n let canvas = canvasFrame;\r\n\r\n let gg: any = {\r\n id: +localStorage.getItem('orderItemId'),\r\n body: {\r\n 'Canvas': JSON.stringify(canvas.toJSON()),\r\n 'Preview': canvas.toSVG(),\r\n }\r\n }\r\n\r\n\r\n dispatch(canvasActrions.setActiveObject(null))\r\n dispatch(orderActions.apiUpdateCanvasOrderItemById(gg))\r\n }\r\n }\r\n\r\n\r\n\r\n //useEffect(() => {\r\n // if (selectedOrderItem.Id > 0) {\r\n // if (selectedOrderItem.Canvas === null || selectedOrderItem.Preview === null) {\r\n // let _productOption = new List(selectedOrderItem.Product.ProductOptions).where(item => item.Option.TypeOption.IsColor === true).toArray();\r\n // let _productOptions = new List(newOrderItemProduct.ProductOptions).where(item => item.Option.TypeOption.IsColor === true).toArray();\r\n\r\n // setTimeout(() => {\r\n // setBackgroundImg((selectedProduct.Colors[0].Images && selectedProduct.Colors) ? selectedProduct.Colors[0].Images[0].ImageUrl : _productOption[0].Images[0].ImageUrl);\r\n // }, 500)\r\n // }\r\n // }\r\n //}, [selectedOrderItem])\r\n\r\n //useEffect(() => {\r\n\r\n // if (order.Id === 0 && selectedProduct.Id !== 0 && orderIdStorage !== 0) {\r\n\r\n // dispatch(orderActions.apiGetOrderById(orderIdStorage))\r\n // }\r\n //}, [orderIdStorage])\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\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 dispatch(controlActions.closeModal())\r\n dispatch(canvasActrions.setActiveObject(null))\r\n }}\r\n getContainer={false}\r\n destroyOnClose={true}\r\n closable={true}\r\n maskClosable={true}\r\n width={680}\r\n maskStyle={{ zIndex: 10, backgroundColor: 'rgba(255,255,255,0)' }}\r\n style={{ position: 'absolute' }}\r\n >\r\n {modalContent && modalContent.Component}\r\n \r\n
\r\n\r\n
\r\n {\r\n dispatch(controlActions.saveCanvas(false))\r\n dispatch(controlActions.closeModal())\r\n dispatch(canvasActrions.setActiveObject(null))\r\n }}\r\n getContainer={false}\r\n destroyOnClose={true}\r\n closable={true}\r\n maskClosable={true}\r\n width={document.body.offsetWidth}\r\n maskStyle={{ backgroundColor: 'rgba(255,255,255,0.8)' }}\r\n >\r\n {modalConfirmContent && modalConfirmContent.Component}\r\n \r\n
\r\n\r\n {/*\r\n * (modalContent && modalContent.Size !== 'full') &&\r\n className={(modalContent && modalContent.Size === 'full') && 'drawer__fullSize'}\r\n */}\r\n
\r\n )\r\n}","import React, { useEffect } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport * as routes from './../../constans/routes.constants';\r\n\r\nexport const ConfirmedOrder: React.FC = () => {\r\n const dispatch = useDispatch();\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}","import React from 'react';\r\nimport { Switch, Redirect, Route } from 'react-router';\r\nimport * as routes from './../constans/routes.constants'\r\nimport { ProductsAll } from '../components/steps/products.all.step';\r\nimport { CategoriesAll } from '../components/steps/categories.all.step';\r\nimport { ConstructorCore } from '../components/application/constructor.core';\r\nimport { ConfirmedOrder } from '../components/steps/confirmed.order';\r\n\r\nconst MasterModule: React.FC = () => {\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\nexport default MasterModule;","import * as React from 'react';\r\nimport * as routes from './../constans/routes.constants';\r\nimport { Switch, Redirect, Route } from 'react-router';\r\nimport MasterModule from '../views/master.module';\r\n\r\ninterface IRouting {\r\n onEnter: void;\r\n path: string\r\n}\r\n\r\nconst Routing: React.FC = (props) => {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default Routing;","import { Store } from 'redux'\r\nimport * as routes from \"./../constans/routes.constants\";\r\nimport { push } from 'react-router-redux';\r\n\r\nexport function AppInit(store: Store) {\r\n if (document.URL.indexOf(routes.APP_URI) === -1) {\r\n store.dispatch(push(routes.APP_URI));\r\n }\r\n}","import React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\n\nimport { Router, Switch, Route } from 'react-router-dom';\r\nimport { createBrowserHistory } from \"history\";\r\n\r\nimport configure from './store/store.config';\r\nimport Routing from './components/routing';\r\nimport { AppInit } from './helpers/app.init'\r\n\r\n//CSS\r\nimport './assets/scss/main.scss';\nimport 'antd/dist/antd.css';\r\n\nconst history = createBrowserHistory();\nconst initialState = (window as any).initialRedusState;\nconst store = configure(history, initialState);\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n)\n\n\n//const App = () => {\r\n// return (\r\n// \r\n// \r\n// \r\n// \r\n// \r\n// )\r\n//}\n\n{ /*\n const App = () => {\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}\n */}\n\n//render(, document.getElementById('root'))\n\n//serviceWorker.unregister();\n","import { applyMiddleware } from 'redux'\r\nimport { composeWithDevTools } from 'redux-devtools-extension'\r\nimport thunkMiddleware from 'redux-thunk'\r\nimport { createLogger } from 'redux-logger';\r\nimport { routerMiddleware } from 'react-router-redux';\r\nimport { createEpicMiddleware } from 'redux-observable';\r\nimport { epics } from '../services/root.epics';\r\nimport { reducers } from \"../reducers/root.reducer\";\r\nimport { configureStore } from \"@reduxjs/toolkit\";\r\n\r\nexport default function configure(history, preloadedState) {\r\n const simpleRouter = routerMiddleware(history);\r\n const epicMiddleware = createEpicMiddleware();\r\n\r\n let middleware;\r\n if (process.env.NODE_ENV !== 'production') {\r\n const logger = createLogger({\r\n collapsed: true,\r\n });\r\n\r\n middleware = [thunkMiddleware, simpleRouter , logger, epicMiddleware];\r\n } else {\r\n middleware = [thunkMiddleware, simpleRouter, epicMiddleware];\r\n }\r\n\r\n const middlewareEnhancer = applyMiddleware(...middleware);\r\n\r\n const enhancers = [middlewareEnhancer];\r\n const composedEnhancers = composeWithDevTools(...enhancers);\r\n\r\n const store = configureStore({\r\n reducer: reducers,\r\n middleware,\r\n devTools: process.env.NODE_ENV !== 'production',\r\n });\r\n\r\n if (module.hot) {\r\n\r\n module.hot.accept('../reducers/root.reducer', () => {\r\n const nextRootEpic = require('../services/root.epics').epics;\r\n const nextRootReducer = require('../reducers/root.reducer').reducers;\r\n\r\n epicMiddleware.replaceEpic(epics);\r\n store.replaceReducer(nextRootReducer);\r\n })\r\n }\r\n\r\n epicMiddleware.run(epics);\r\n\r\n return store\r\n}\r\n"],"sourceRoot":""}