{"version":3,"sources":["utils.ts","store/products.ts","store/UIState.ts","services/cart.ts","store/cart.ts","store/admin/diamondManagement.ts","store/ringSettings.ts","store/admin/messages.ts","store/genericDiamonds.ts","store/admin/meleeManagement.ts","store/admin/userManagement.ts","store/admin/siteSettings.ts","store/diamonds.ts","store/admin/showManagement.ts","store/misc.ts","store/admin/productManagement.ts","history.ts","services/siteSettings.ts","services/errorResponse.ts","store/auth.ts","store/admin/orders.ts","store/contact.ts","store/shows.ts","css/styles.module.scss","services/data.ts","services/diamonds.ts","services/apiUtils.ts","services/contact.ts","services/products.ts","services/emails.ts","registerServiceWorker.ts","components/loading.tsx","components/public-route.tsx","components/idleTimer.tsx","router.tsx","index.tsx","constants.ts","store/admin/data.ts","store/admin/emailsManagement.ts","services/basket.ts","store/admin/basketItems.ts","store/admin/ringSettingManagement.ts","store/admin/genericDiamondsManagement.ts","services/eternityRings.ts","store/admin/eternityRingsManagement.ts","store/admin/index.ts","store/errors.ts","store/melee.ts","services/engagementRingConfig.ts","store/engagementRing.ts","store/completedRing.ts","store/eternityRings.ts","store/store.ts","services/shows.ts","services/melee.ts","services/orders.ts","services/ringSettings.ts","services/wishList.ts","store/wishList.ts","services/genericDiamonds.ts","store/admin/withErrorDispatch.ts","models/products.ts","store/data.ts","store/orders.ts","components/private-route.tsx","store/domain.ts","store/pushNotifications.ts","models/orders.ts","services/auth.ts"],"names":["pipe","fn1","fns","reduce","prevFn","nextFn","value","dataUrlToBase64","dataUrl","replace","removeEmptyStrings","input","inputIndexable","Object","keys","obj","key","property","convertToLocale","price","toLocaleString","undefined","maximumFractionDigits","minimumFractionDigits","fetchAll","assign","async","result","productService","dispatch","success","createActionCreator","resolve","data","oneOfAKind","filter","product","status","subType","type","studs","tennisNecklaces","fetchSingleProduct","stockNumber","reducer","createReducer","singleProduct","handleAction","state","action","payload","actions","changeFilters","add","remove","reset","pageId","checkProduct","check","checkAll","removeAll","sortProduct","setOrder","pagination","setPage","setRowsPerPage","defaultPageState","filters","checkedItems","sort","direction","orderBy","pageNumber","rowsPerPage","defaultState","admin_users","admin_products","admin_orders","cart","userWishlistBox","admin_basket_items","produce","draft","newFilters","f","el","diamondId","checkedItemsNew","diamondIds","routes","addDiamondToCart","itemId","wishedItemId","Axios","post","headers","authorizationHeader","sideCartView","sideCartOpen","fetchCartItems","getState","get","cartService","store","diamonds","all","find","d","id","lineSet","cartItem","addMeleeToCart","numberOfStones","carats","addCompleteRingToCart","totalPrice","completedRingId","addProductToCart","body","addEngagementRingToCart","engagementRingId","addEternityRingToCart","eternityRingId","addBraceletToCart","braceletId","bulkAddDiamondsToCart","itemIds","map","cartItemIds","ci","newItems","includes","cartItems","bulkRemoveDiamondsFromCart","console","log","removeFromCart","productId","wishList","w","setName","delete","itemsToRemove","concat","isArray","i","orderActions","createOrder","authActions","logout","wihsListActions","bulkRemoveDiamondsFromBasket","removeFromWishList","deleteDiamondsSetFromBasket","remainingDiamonds","addDiamond","diamond","image","content","withErrorDispatch","diamondsService","changeActiveStatus","isActive","newStatus","changeStatus","fetchAllDiamonds","highlight","importCsv","file","messageActions","commit","setTimeout","window","location","reload","updateDiamond","products","p","isHighlighted","highlightedProduct","newDiamond","fetchRingSettings","ringSettings","ringService","setInterval","REFETCH_DATA_INTERVAL","acknowledge","message","severity","splice","findIndex","item","push","uuid","fetchGenericDiamonds","genericDiamondsService","genericDiamonds","addMelee","model","meleeService","melee","changeMeleeStatus","editMelee","fetchMelees","melees","itemIndex","newItem","changeUserBlockStatus","userId","blocked","blockedUntil","authService","blockUser","changeUserRole","newRole","role","changeRole","changeUserStatus","approved","approveUser","createUser","request","user","editAccount","addressId","address","fetchUsers","users","upsertAgentLogo","url","updatePrimaryColor","color","updateUserDomain","domain","addUserMarkup","caratMin","caratMax","percent","priceMin","priceMax","markup","addUserAccess","access","deleteUserMarkup","markupId","markupUser","deleteUserAccess","accessId","accessUser","deleteUser","userIdResponse","u","addresses","email","businessType","businessTypeId","name","logoUrl","primaryColor","markups","accesses","m","fetchHomepageConfiguration","siteSettingsService","fetchAboutUsConfiguration","fetchContactInformation","contactService","fetchMaintenance","fetchMaintenanceMessage","setMaintenance","isEnabled","setMaintenanceMessage","updateHomepageConfiguration","settings","homepageImage","cardRings","cardBracelets","cardNecklaces","cardEarrings","aboutImage","slider1Image","slider2Image","slider3Image","updateAboutUsConfiguration","image1","image2","updateContactInformation","information","fetchSupportInformation","updateSupportInformation","homepage","aboutUs","contactInformation","maintenance","maintenanceMessage","support","fetchHighlightedDiamond","resetDiamonds","highlighted","holdUserId","wishListActions","Array","some","DiamondStatusEnum","Suspended","changeIsActive","showId","showsService","show","changeActiveAd","activeAd","createShow","editShow","deleteShow","fetchAllShows","shows","s","changeView","mode","setShowSelected","toggleHamburger","setWishListForSets","viewMode","showSelected","isHamburgerOpen","wishListForSets","length","fetchProducts","productsService","addProduct","error","editProduct","deleteProduct","exportCsv","baseUrl","document","getElementsByTagName","getAttribute","createBrowserHistory","basename","getHomepageConfiguration","getAboutUsConfiguration","getLastCsvUpdateTime","getMaintenance","put","getMaintenanceMessage","patch","configuration","setSiteMainColor","setDefaultColor","documentElement","style","cssText","SITE_DEFAULT_PRIMARY_COLOR","localStorage","getItem","LOCAL_STORAGE_PRIMARY_COLOR","getDomainLayout","sendInvitation","ErrorCode","phrases","ACCOUNT_NOT_APPROVED","ADDRESS_NOT_FOUND","DIAMOND_NOT_FOUND","EMAIL_ALREADY_EXISTS","EMAIL_NOT_VERIFIED","EMAIL_TEMPLATE_NOT_FOUND","FORBIDDEN","INTERNAL_ERROR","INVALID_RECAPTCHA","INVALID_REQUEST","ITEM_NOT_FOUND","WRONG_PASSWORD","ORDER_NOT_FOUND","SHOW_NOT_FOUND","USER_BLOCKED","USER_NOT_FOUND","VERIFICATION_FAILED","getErrorPhrase","_timeout","refreshToken","token","tokenPayload","jwt","decode","json","timeLeft","Date","now","newToken","setItem","login","changePassword","currentPassword","newPassword","err","history","changePasswordByToken","password","query","search","URLSearchParams","common","updateAddress","confirmEmail","decodeURIComponent","firstName","lastName","setPassword","auth","city","country","isBilling","phone","company","federation","rest","newAddress","countryId","federationId","initUserState","noUser","ReactGa","set","from","pathname","rememberMe","returnUrl","removeItem","accessToken","response","errorCode","clearTimeout","register","shouldApprove","resendConfirmationEmail","resetPassword","noRedirect","updateSubscriptions","ids","channels","emailChannels","c","subscriptions","upsertAddress","updateSuccess","createSuccess","retrieved","restAddrs","a","orderId","ordersService","order","editOrder","deleteOrder","fetchOrders","o","completedDate","OrderStatus","Cancelled","Completed","moment","utc","toDate","sendMail","module","exports","clarities","colors","cuts","fluors","labs","polishes","shapes","symmetries","fancyIntensities","getBusinessTypes","getCountries","getClarities","getColors","getCuts","getFluors","getLabs","getPolishes","getShapes","getSymmetries","getFancyIntensities","diamondActiveStatus","diamondStatus","getHighlighted","import","route","toString","then","resp","getAllDiamonds","availableOnly","getHighlightedDiamond","formData","FormData","append","bearer","Authorization","getContactInformation","sendContactUsMail","getSupportInfo","updateSupportInfo","export","getAll","getSingleProduct","inStockQty","Error","edit","delProduct","onExportCsv","responseType","blob","Blob","URL","createObjectURL","link","createElement","href","setAttribute","appendChild","click","removeChild","revokeObjectURL","channel","sendEmail","template","templates","memoConfirm","createChannel","createTemplate","deleteTemplate","templateId","editTemplate","getChannels","getTemplates","isLocalhost","Boolean","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","registration","onupdatefound","installingWorker","installing","onstatechange","controller","caches","isGone","catch","spinnerContainerStyle","height","display","justifyContent","alignItems","Loading","Spinner","size","connector","connect","currentUser","component","Component","layout","Layout","withLogos","pageTitle","render","props","Helmet","IdleTimerComponent","timeout","onIdle","lazy","home","welcome","contact","admin","account","authDate","isMaintenance","fetchIsMaintenance","dataActions","fetchMaintenanceState","fetchDomainLayout","pushNotificationsActions","router","useHistory","useEffect","pageview","fallback","exact","path","roles","startsWith","to","require","initialize","ReactDOM","utils","MomentUtils","getElementById","process","origin","addEventListener","fetch","contentType","indexOf","ready","unregister","checkValidServiceWorker","registerServiceWorker","USER_PRIMARY_COLOR_REGEX","RegExp","fetchCountries","dataService","items","countries","emailsService","fetchChannels","fetchTemplates","t","fetchBasketItems","r","creationDate","basketServices","addRingSetting","ringSettingService","ringSetting","editRingSetting","deleteRingSetting","ringId","imageUrl","editGenericDiamond","addGenericDiamond","getAllEternityRings","fetchEternityRings","eternityRingService","combineReducers","diamondsManagement","emails","emailsManagement","meleeManagement","messages","showManagement","site","siteSettings","orders","userManagement","basketItems","eternityRings","productManagement","getEngagementRingConfig","engagementRingService","modifiedData","addRingSettingToEngagementConfig","addDiamondToEngagementConfig","stockId","singlePageView","singlePage","selectRingSetting","selectGenericDiamond","genericDiamond","eternityRingsService","rootReducer","errors","UIState","misc","connectRouter","pushNotifications","engagementRing","completedRing","middlewares","thunk","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","trace","traceLimit","compose","createStore","applyMiddleware","updateShow","ActiveAd","activeOnly","getAllActive","MeleeColor","k","adminOrders","adminOrder","orderStatus","ordersUser","orderCompleted","createOrderAdmin","editOrderAdmin","getAllUserOrders","getAllRingSettings","fetchWishListItems","wishListService","addProductToWishList","wishListItem","addEngagementRingToWishList","addCompletedRingToWishList","addEternityRingToWishList","addBraceletToWishList","addDiamondsFromSetToWishList","bulkAddDiamondsToWishList","wishListItemId","wishListItems","wishedIds","wishListItemIds","allDiamonds","findAllDiamondsFromSetIds","e","info","removeDiamondFromBasketPage","getAllGenericDiamonds","actionPromise","successCallback","successMessage","ProductType","fetchHomepage","fetchAboutUs","fetchBusinessTypes","fetchDiamondsRelatedEntities","Promise","itemType","values","fetchEmailChannels","fetchSupportInfo","supportServices","businessTypes","fetchAllOrders","orderServices","redirectUrl","labGrown","white","black","mathingPairs","snP","fancyShape","fancyColor","newUpdatedNotification","serviceWorkerStatus","newNotificationState","addAddress","getAllUsers","logo","resentConfirmationEmail","updateDomain","changeUserBlockedStatus","isBlocked","isApproved","getUser","userPrimaryColor","registerRequest","channelIds"],"mappings":"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","file":"static/js/main.f4125356.chunk.js","sourcesContent":["// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nconst pipe = (fn1: (a: R) => R, ...fns: Array<(a: R) => R>) =>\n fns.reduce((prevFn, nextFn) => value => nextFn(prevFn(value)), fn1);\n\nconst dataUrlToBase64 = (dataUrl: string): string => dataUrl.replace(/^data:image\\/(\\w*);base64,/, \"\");\n\nconst removeEmptyStrings = (input: unknown): unknown => {\n const inputIndexable = input as { [index: string]: any };\n\n const result = Object.keys(inputIndexable).reduce((obj, key) => {\n const property = inputIndexable[key];\n if (typeof property === \"object\") {\n obj[key] = removeEmptyStrings(property);\n }\n\n obj[key] = property === \"\" ? null : property;\n return obj;\n }, {} as { [index: string]: unknown });\n\n return result;\n};\n\nconst convertToLocale = (price: number | undefined): string | undefined => {\n if (!price) {\n return;\n }\n\n return price.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });\n};\n\nconst truncateText = (text: string, windowsWidth?: number) => {\n if (text.length > 10 && windowsWidth && windowsWidth < 1600) {\n return `${text.substring(0, 9)}...`;\n }\n if (text.length > 14 && !windowsWidth) {\n return `${text.substring(0, 13)}...`;\n }\n\n return text;\n};\n\nexport { dataUrlToBase64, pipe, removeEmptyStrings, convertToLocale, truncateText };\n","import { Dispatch } from \"redux\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport * as productService from \"../services/products\";\nimport {\n Ring,\n Bracelet,\n Pendant,\n Necklace,\n Earring,\n OneOfAKindProduct,\n Stud,\n TennisNecklace,\n} from \"../models/products\";\n\nexport type State = {\n singleProduct: Ring | Bracelet | Pendant | Necklace | Earring | Stud | TennisNecklace | null;\n oneOfAKind: OneOfAKindProduct[] | null;\n studs: OneOfAKindProduct[] | null;\n tennisNecklaces: OneOfAKindProduct[] | null;\n};\n\nconst defaultState: State = {\n singleProduct: null,\n oneOfAKind: null,\n studs: null,\n tennisNecklaces: null,\n};\n\nconst fetchAll = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await productService.getAll();\n dispatch(fetchAll.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@PRODUCTS/ALL/FETCH\", resolve => (data: OneOfAKindProduct[]) => {\n const oneOfAKind = data.filter(\n product =>\n product.status === \"Available\" &&\n !product.subType &&\n (product.type === \"Rings\" ||\n product.type === \"Necklaces\" ||\n product.type === \"Pendants\" ||\n product.type === \"Earrings\" ||\n product.type === \"Bracelets\")\n );\n const studs = data.filter(product => product.type === \"Studs\" && product.status === \"Available\");\n const tennisNecklaces = data.filter(product => product.subType === \"Tennis\" && product.status === \"Available\");\n\n return resolve({ oneOfAKind, studs, tennisNecklaces });\n }),\n }\n);\n\nconst fetchSingleProduct = Object.assign(\n (stockNumber: string) => async (dispatch: Dispatch) => {\n try {\n const result = await productService.getSingleProduct(stockNumber);\n dispatch(fetchSingleProduct.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\n \"@@PRODUCTS/SINGLE_PRODUCT/FETCH\",\n resolve => (data: Ring | Bracelet | Pendant | Necklace | Earring) => resolve(data)\n ),\n }\n);\n\n// Create a reducer to handle the fetch actions\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchAll.success, (state, action) => ({ ...state, ...action.payload })),\n handleAction(fetchSingleProduct.success, (state, action) => ({ ...state, singleProduct: action.payload })),\n]);\n\n// Export fetch actions and reducer\nconst actions = {\n fetchAll,\n\n fetchSingleProduct,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Filter } from \"../hooks/useFilters\";\nimport { Order } from \"../hooks/useSorting\";\n\nexport type State = {\n [index in PageId]: PageUIState;\n};\n\nexport type PageUIState = {\n filters: Filter[];\n checkedItems: number[];\n sort: Sort;\n pagination: PaginationType;\n};\n\nexport type Sort = {\n direction: Order;\n orderBy: string;\n};\n\nexport type PaginationType = {\n pageNumber: number;\n rowsPerPage: number;\n};\n\nexport type PageId =\n | \"admin_products\"\n | \"admin_users\"\n | \"admin_orders\"\n | \"cart\"\n | \"userWishlistBox\"\n | \"admin_basket_items\"\n | \"studs\";\n\nconst changeFilters = Object.assign(\n {},\n {\n add: createActionCreator(\"@@FILTERS/ADD\", resolve => (data: { pageId: PageId; filter: Filter }) =>\n resolve(data)\n ),\n remove: createActionCreator(\"@@FILTERS/REMOVE\", resolve => (data: { pageId: PageId; filter: Filter }) =>\n resolve(data)\n ),\n reset: createActionCreator(\"@@FILTERS/RESET\", resolve => (pageId: PageId) => resolve(pageId)),\n }\n);\n\nconst checkProduct = Object.assign(\n {},\n {\n check: createActionCreator(\"@@CHECK/CHECK\", resolve => (data: { diamondId: number; pageId: PageId }) =>\n resolve(data)\n ),\n\n remove: createActionCreator(\"@@CHECK/REMOVE\", resolve => (data: { diamondId: number; pageId: PageId }) =>\n resolve(data)\n ),\n\n checkAll: createActionCreator(\"@@CHECK/CHECK_ALL\", resolve => (data: { diamondIds: number[]; pageId: PageId }) =>\n resolve(data)\n ),\n\n removeAll: createActionCreator(\"@@CHECK/REMOVE_ALL\", resolve => (pageId: PageId) => resolve(pageId)),\n }\n);\n\nconst sortProduct = Object.assign(\n {},\n {\n setOrder: createActionCreator(\n \"@@SORT/SET_ORDER\",\n resolve => (data: { pageId: PageId; direction: Order; orderBy: string }) => resolve(data)\n ),\n }\n);\n\nconst pagination = Object.assign(\n {},\n {\n setPage: createActionCreator(\"@@PAGINATION/SET_PAGE\", resolve => (data: { pageId: PageId; pageNumber: number }) =>\n resolve(data)\n ),\n\n setRowsPerPage: createActionCreator(\n \"@@PAGINATION/SET_ROWS_PER_PAGE\",\n resolve => (data: { pageId: PageId; rowsPerPage: number }) => resolve(data)\n ),\n }\n);\n\nconst defaultPageState: PageUIState = {\n filters: [],\n checkedItems: [],\n sort: { direction: \"asc\", orderBy: \"carats\" },\n pagination: { pageNumber: 0, rowsPerPage: 36 },\n};\n\nconst defaultState: State = {\n admin_users: defaultPageState,\n admin_products: defaultPageState,\n admin_orders: defaultPageState,\n cart: defaultPageState,\n userWishlistBox: defaultPageState,\n admin_basket_items: defaultPageState,\n studs: defaultPageState,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(changeFilters.add, (state, action) =>\n produce(state, draft => {\n const filters = state[action.payload.pageId].filters || [];\n const newFilters = [\n ...filters.filter(f => !(f.key === action.payload.filter.key && f.type === action.payload.filter.type)),\n action.payload.filter,\n ];\n\n draft[action.payload.pageId].filters = newFilters;\n })\n ),\n handleAction(changeFilters.remove, (state, action) =>\n produce(state, draft => {\n const filters = state[action.payload.pageId].filters || [];\n const newFilters = [\n ...filters.filter(f => !(f.key === action.payload.filter.key && f.type === action.payload.filter.type)),\n ];\n\n draft[action.payload.pageId].filters = newFilters;\n })\n ),\n handleAction(changeFilters.reset, (state, action) => ({\n ...state,\n [action.payload]: { ...state[action.payload], filters: [] },\n })),\n\n handleAction(checkProduct.check, (state, action) =>\n produce(state, draft => {\n const checkedItems = [\n ...state[action.payload.pageId].checkedItems.filter(el => el !== action.payload.diamondId),\n action.payload.diamondId,\n ];\n draft[action.payload.pageId].checkedItems = checkedItems;\n })\n ),\n\n handleAction(checkProduct.remove, (state, action) =>\n produce(state, draft => {\n const checkedItems = [...state[action.payload.pageId].checkedItems.filter(el => el !== action.payload.diamondId)];\n draft[action.payload.pageId].checkedItems = checkedItems;\n })\n ),\n\n handleAction(checkProduct.checkAll, (state, action) =>\n produce(state, draft => {\n const checkedItemsNew = [...action.payload.diamondIds];\n // const checkedItemsCurrent = state[action.payload.pageId].checkedItems;\n draft[action.payload.pageId].checkedItems = checkedItemsNew;\n })\n ),\n\n handleAction(checkProduct.removeAll, (state, action) =>\n produce(state, draft => {\n draft[action.payload].checkedItems = [];\n })\n ),\n\n handleAction(sortProduct.setOrder, (state, action) =>\n produce(state, draft => {\n draft[action.payload.pageId].sort = {\n direction: action.payload.direction,\n orderBy: action.payload.orderBy,\n };\n })\n ),\n\n handleAction(pagination.setPage, (state, action) =>\n produce(state, draft => {\n draft[action.payload.pageId].pagination.pageNumber = action.payload.pageNumber;\n })\n ),\n\n handleAction(pagination.setRowsPerPage, (state, action) =>\n produce(state, draft => {\n draft[action.payload.pageId].pagination.rowsPerPage = action.payload.rowsPerPage;\n })\n ),\n]);\n\nconst actions = {\n changeFilters,\n checkProduct,\n sortProduct,\n pagination,\n};\n\nexport { actions, reducer };\n","import Axios from \"axios\";\nimport { CartItem } from \"../models/cart\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n addDiamond: \"/api/cart/diamond\",\n addCompletedRing: \"/api/cart/completedRing\",\n addEngagementRing: \"/api/cart/engagementRing\",\n addEternityRing: \"/api/cart/eternityRing\",\n addBracelet: \"/api/cart/bracelet\",\n addSet: \"/api/cart/add-set\",\n addProduct: \"/api/cart/add\",\n addMelee: \"/api/cart/melee\",\n bulkAddDiamonds: \"/api/cart/diamond-bulk\",\n bulkRemoveDiamonds: \"/api/cart/diamond-bulk-remove\",\n bulkAddBasket: \"/api/cart/basket-bulk-add\",\n cart: \"/api/cart\",\n deleteSet: \"/api/cart/remove-set\",\n};\n\nconst getCartItems = async (): Promise => {\n const result = await Axios.get(routes.cart, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst addDiamondToCart = async (itemId: number, wishedItemId?: number): Promise => {\n if (wishedItemId) {\n const result = await Axios.post(\n routes.addDiamond,\n { itemId, wishedItemId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n }\n const result = await Axios.post(\n routes.addDiamond,\n { itemId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addEngagementRingToCart = async (\n totalPrice: number,\n wishedItemId: number,\n engagementRingId: number\n): Promise => {\n const result = await Axios.post(\n routes.addEngagementRing,\n { totalPrice, wishedItemId, engagementRingId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addEternityRingToCart = async (wishedItemId: number, eternityRingId: number): Promise => {\n const result = await Axios.post(\n routes.addEternityRing,\n { wishedItemId, eternityRingId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addBraceletToCart = async (wishedItemId: number, braceletId: number): Promise => {\n const result = await Axios.post(\n routes.addBracelet,\n { wishedItemId, braceletId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addCompletedRingToCart = async (\n totalPrice: number,\n wishedItemId: number,\n completedRingId: number\n): Promise => {\n const result = await Axios.post(\n routes.addCompletedRing,\n { totalPrice, wishedItemId, completedRingId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addSetToCart = async (itemId: number, wishedItemId?: number): Promise => {\n const result = await Axios.post(\n routes.addSet,\n { itemId, wishedItemId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addMeleeToCart = async (\n itemId: number,\n numberOfStones?: number,\n carats?: number,\n wishedItemId?: number\n): Promise => {\n const result = await Axios.post(\n routes.addMelee,\n { itemId, numberOfStones, carats, wishedItemId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst bulkAddDiamondsToCart = async (itemIds: number[]): Promise => {\n const result = await Axios.post(\n routes.bulkAddDiamonds,\n itemIds.map(id => ({ itemId: id })),\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\nconst bulkRemoveDiamondsFromCart = async (itemIds: number[]): Promise => {\n const result = await Axios.post(\n routes.bulkRemoveDiamonds,\n itemIds.map(id => ({ itemId: id })),\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addProductToCart = async (itemId: number): Promise => {\n const body = {\n itemId,\n };\n const result = await Axios.post(`${routes.addProduct}`, body, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst deleteCartItem = async (itemId: number): Promise =>\n await Axios.delete(`${routes.cart}/${itemId}`, {\n headers: authorizationHeader(),\n });\nconst deleteSet = async (itemId: number): Promise =>\n await Axios.delete(`${routes.deleteSet}/${itemId}`, {\n headers: authorizationHeader(),\n });\n\nexport {\n addDiamondToCart,\n addCompletedRingToCart,\n addEngagementRingToCart,\n addEternityRingToCart,\n addBraceletToCart,\n addSetToCart,\n addMeleeToCart,\n bulkAddDiamondsToCart,\n deleteCartItem,\n getCartItems,\n bulkRemoveDiamondsFromCart,\n addProductToCart,\n deleteSet,\n};\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { CartItem } from \"../models/cart\";\nimport * as cartService from \"../services/cart\";\nimport { actions as orderActions } from \"./orders\";\nimport { actions as authActions } from \"./auth\";\nimport { ApplicationState, store } from \"./store\";\nimport { actions as wihsListActions } from \"./wishList\";\nimport { isArray } from \"lodash\";\n\nexport type State = {\n data: CartItem[] | null;\n sideCartOpen: boolean;\n};\n\nconst sideCartView = Object.assign(\n {},\n {\n success: createActionCreator(\"@@CART/SIDE_CART_OPEN\", resolve => (sideCartOpen: boolean) => resolve(sideCartOpen)),\n }\n);\n\nconst fetchCartItems = Object.assign(\n () => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const { cart } = getState();\n\n if (cart.data) {\n return;\n }\n\n try {\n const data = await cartService.getCartItems();\n dispatch(fetchCartItems.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/SUCCESS\", resolve => (cart: CartItem[]) => resolve(cart)),\n }\n);\n\nconst addDiamondToCart = Object.assign(\n (itemId: number, wishedItemId?: number) => async (dispatch: Dispatch) => {\n try {\n const setName = store.getState().diamonds.all?.find(d => d.id === itemId)?.product.lineSet;\n if (!!setName) {\n const data = await cartService.addSetToCart(itemId, wishedItemId);\n dispatch(addDiamondToCart.success(data));\n return;\n }\n if (wishedItemId) {\n const data = await cartService.addDiamondToCart(itemId, wishedItemId);\n dispatch(addDiamondToCart.success(data));\n } else {\n const data = await cartService.addDiamondToCart(itemId);\n dispatch(addDiamondToCart.success(data));\n }\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/ADD_DIAMOND/SUCCESS\", resolve => (cartItem: CartItem | CartItem[]) =>\n resolve(cartItem)\n ),\n }\n);\n\nconst addMeleeToCart = Object.assign(\n (itemId: number, numberOfStones?: number, carats?: number, wishedItemId?: number) => async (dispatch: Dispatch) => {\n try {\n const data = await cartService.addMeleeToCart(itemId, numberOfStones, carats, wishedItemId);\n dispatch(addMeleeToCart.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/ADD_MELEE/SUCCESS\", resolve => (cartItem: CartItem) => resolve(cartItem)),\n }\n);\n\nconst addCompleteRingToCart = Object.assign(\n (totalPrice: number, wishedItemId: number, completedRingId: number) => async (dispatch: Dispatch) => {\n try {\n const data = await cartService.addCompletedRingToCart(totalPrice, wishedItemId, completedRingId);\n dispatch(addCompleteRingToCart.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/ADD_COMPLETEDRING/SUCCESS\", resolve => (cartItem: CartItem) =>\n resolve(cartItem)\n ),\n }\n);\n\nconst addProductToCart = Object.assign(\n (itemId: number) => async (dispatch: Dispatch) => {\n try {\n const data = await cartService.addProductToCart(itemId);\n dispatch(addProductToCart.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/ADD_PRODUCT/SUCCESS\", resolve => (cartItem: CartItem) => resolve(cartItem)),\n }\n);\n\nconst addEngagementRingToCart = Object.assign(\n (totalPrice: number, wishedItemId: number, engagementRingId: number) => async (dispatch: Dispatch) => {\n try {\n const data = await cartService.addEngagementRingToCart(totalPrice, wishedItemId, engagementRingId);\n dispatch(addEngagementRingToCart.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/ADD_COMPLETEDRING/SUCCESS\", resolve => (cartItem: CartItem) =>\n resolve(cartItem)\n ),\n }\n);\n\nconst addEternityRingToCart = Object.assign(\n (wishedItemId: number, eternityRingId: number) => async (dispatch: Dispatch) => {\n try {\n const data = await cartService.addEternityRingToCart(wishedItemId, eternityRingId);\n dispatch(addEternityRingToCart.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/ADD_ETERNITY_RING/SUCCESS\", resolve => (cartItem: CartItem) =>\n resolve(cartItem)\n ),\n }\n);\n\nconst addBraceletToCart = Object.assign(\n (wishedItemId: number, braceletId: number) => async (dispatch: Dispatch) => {\n try {\n const data = await cartService.addBraceletToCart(wishedItemId, braceletId);\n dispatch(addBraceletToCart.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/ADD_BRACELET/SUCCESS\", resolve => (cartItem: CartItem) => resolve(cartItem)),\n }\n);\n\nconst bulkAddDiamondsToCart = Object.assign(\n (itemIds: number[]) => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n try {\n const data = await cartService.bulkAddDiamondsToCart(itemIds);\n const { cart } = getState();\n const cartItemIds = (cart.data || []).map(ci => ci.itemId);\n const newItems = data.filter(ci => !cartItemIds.includes(ci.itemId));\n dispatch(bulkAddDiamondsToCart.success(newItems));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/BULK_ADD_DIAMOND/SUCCESS\", resolve => (cartItems: CartItem[]) =>\n resolve(cartItems)\n ),\n }\n);\n\nconst bulkRemoveDiamondsFromCart = Object.assign(\n (itemIds: number[]) => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n try {\n const data = await cartService.bulkRemoveDiamondsFromCart(itemIds);\n const newItems = data;\n dispatch(bulkRemoveDiamondsFromCart.success(newItems));\n } catch {\n console.log(\"catch\");\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/BULK_REMOVE_DIAMOND/SUCCESS\", resolve => (cartItems: CartItem[]) =>\n resolve(cartItems)\n ),\n }\n);\n// const bulkAddBasketToCart = Object.assign(\n// (diamonds: BulkMeleeType[]) => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n// try {\n// const data = await cartService.bulkAddBasketToCart(diamonds);\n// const newItems = data;\n// dispatch(bulkRemoveDiamondsFromCart.success(newItems));\n// } catch {\n// return;\n// }\n// },\n// {\n// success: createActionCreator(\"@@CART/BULK_REMOVE_DIAMOND/SUCCESS\", resolve => (cartItems: CartItem[]) =>\n// resolve(cartItems)\n// ),\n// }\n// );\n\nconst removeFromCart = Object.assign(\n (itemId: number) => async (dispatch: Dispatch) => {\n try {\n //Logic for removing sets from cart\n const productId = store.getState().wishList.data?.find(w => w.id === itemId)?.itemId;\n const setName = store.getState().diamonds.all?.find(d => d.id === (productId as number))?.product.lineSet;\n if (!!setName) {\n await cartService.deleteSet(itemId);\n const itemsToRemove = store\n .getState()\n .diamonds.all?.filter(d => d.product.lineSet === setName)\n .map(d => d.id);\n dispatch(removeFromCart.success(itemsToRemove as number[]));\n return;\n }\n await cartService.deleteCartItem(itemId);\n dispatch(removeFromCart.success(itemId));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@CART/REMOVE/SUCCESS\", resolve => (itemId: number | number[]) => resolve(itemId)),\n }\n);\n\nconst defaultState: State = {\n data: null,\n sideCartOpen: false,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(sideCartView.success, (state, action) =>\n produce(state, draft => {\n draft.sideCartOpen = action.payload;\n })\n ),\n handleAction(fetchCartItems.success, (state, action) =>\n produce(state, draft => {\n draft.data = action.payload;\n })\n ),\n handleAction([addProductToCart.success], (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).concat(action.payload);\n })\n ),\n handleAction(removeFromCart.success, (state, action) =>\n produce(state, draft => {\n if (isArray(action.payload)) {\n draft.data = (state.data || []).filter(i => !(action.payload as number[]).includes(i.itemId));\n return;\n }\n draft.data = (state.data || []).filter(i => i.itemId !== action.payload);\n })\n ),\n handleAction(bulkRemoveDiamondsFromCart.success, (state, action) =>\n produce(state, draft => {\n draft.data = action.payload;\n })\n ),\n\n handleAction(orderActions.createOrder.success, (state, action) =>\n produce(state, draft => {\n draft.data = [];\n })\n ),\n handleAction(authActions.logout.success, (state, action) =>\n produce(state, draft => {\n draft.data = [];\n })\n ),\n handleAction(wihsListActions.bulkRemoveDiamondsFromBasket.success, (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).filter(i => !action.payload.includes(i.wishedItemId as number));\n })\n ),\n handleAction(wihsListActions.removeFromWishList.success, (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).filter(i => action.payload !== i.itemId);\n })\n ),\n handleAction(wihsListActions.deleteDiamondsSetFromBasket.success, (state, action) =>\n produce(state, draft => {\n const remainingDiamonds = (state.data || []).filter(i => !action.payload.includes(i.itemId));\n draft.data = remainingDiamonds;\n })\n ),\n]);\n\nconst actions = {\n addDiamondToCart,\n addProductToCart,\n addMeleeToCart,\n addCompleteRingToCart,\n addEngagementRingToCart,\n addEternityRingToCart,\n bulkAddDiamondsToCart,\n bulkRemoveDiamondsFromCart,\n fetchCartItems,\n removeFromCart,\n // bulkAddBasketToCart,\n addBraceletToCart,\n sideCartView,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { DiamondStatusEnum, DiamondsType, Product, UpsertDiamondModel } from \"../../models/products\";\nimport * as diamondsService from \"../../services/diamonds\";\nimport { dataUrlToBase64 } from \"../../utils\";\nimport { actions as messageActions } from \"./messages\";\nimport { withErrorDispatch } from \"./withErrorDispatch\";\n\nexport type State = Product[];\n\nconst addDiamond = Object.assign(\n (diamond: UpsertDiamondModel) => {\n diamond.image?.content && (diamond.image.content = dataUrlToBase64(diamond.image.content));\n\n return withErrorDispatch(\n diamondsService.addDiamond(diamond),\n result => addDiamond.success(result),\n \"Error adding a diamond\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/DIAMONDS/ADD\", resolve => (diamond: Product) =>\n resolve(diamond)\n ),\n }\n);\n\nconst changeActiveStatus = Object.assign(\n (diamondId: number, isActive: boolean) =>\n withErrorDispatch(\n diamondsService.changeActiveStatus(diamondId, isActive),\n () => changeActiveStatus.success({ diamondId, isActive }),\n \"Error changing diamond status\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/DIAMONDS/CHANGE_ACTIVE_STATUS\",\n resolve => (newStatus: { diamondId: number; isActive: boolean }) => resolve(newStatus)\n ),\n }\n);\n\nconst changeStatus = Object.assign(\n (diamondId: number, status: DiamondStatusEnum) =>\n withErrorDispatch(\n diamondsService.changeStatus(diamondId, status),\n () => changeStatus.success({ diamondId, status }),\n \"Error changing diamond status\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/DIAMONDS/CHANGE_STATUS\",\n resolve => (newStatus: { diamondId: number; status: DiamondStatusEnum }) => resolve(newStatus)\n ),\n }\n);\n\nconst fetchAllDiamonds = Object.assign(\n () =>\n withErrorDispatch(\n diamondsService.getAllDiamonds(false),\n data => fetchAllDiamonds.success(data),\n \"Error fetching diamonds\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/DIAMONDS/FETCH\", resolve => (diamonds: Product[]) =>\n resolve(diamonds)\n ),\n }\n);\n\nconst highlight = Object.assign(\n (diamondId: number) =>\n withErrorDispatch(\n diamondsService.highlight(diamondId),\n () => highlight.success(diamondId),\n \"Error highlighting diamond\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/DIAMONDS/HIGHTLIGHT\", resolve => (diamondId: number) => resolve(diamondId)),\n }\n);\n\nconst importCsv = Object.assign(\n (file: File) => async (dispatch: Dispatch) => {\n try {\n await diamondsService.importCsv(file);\n\n messageActions.commit(\"Import successul. The page will reload to show the updated data\", \"info\")(dispatch);\n\n setTimeout(() => window.location.reload(), 2000);\n } catch {\n messageActions.commit(\"Error importing file\", \"error\")(dispatch);\n }\n },\n {}\n);\n\nconst updateDiamond = Object.assign(\n (diamondId: number, diamond: UpsertDiamondModel) => {\n diamond.image?.content && (diamond.image.content = dataUrlToBase64(diamond.image.content));\n\n return withErrorDispatch(\n diamondsService.updateDiamond(diamondId, diamond),\n result => updateDiamond.success(result),\n \"Error updating diamond\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/DIAMONDS/UPDATE\", resolve => (diamond: Product) =>\n resolve(diamond)\n ),\n }\n);\n\nconst defaultState: State = [];\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchAllDiamonds.success, (state, action) => action.payload),\n handleAction(addDiamond.success, (state, action) => {\n return state.concat(action.payload);\n }),\n handleAction(changeActiveStatus.success, (state, action) =>\n produce(state, draft => {\n const product = draft.find(d => d.id === action.payload.diamondId);\n product && (product.isActive = action.payload.isActive);\n })\n ),\n handleAction(changeStatus.success, (state, action) =>\n produce(state, draft => {\n const product = draft.find(d => d.id === action.payload.diamondId);\n product && (product.product.status = action.payload.status);\n })\n ),\n handleAction(highlight.success, (state, action) =>\n produce(state, draft => {\n const products = draft.filter(p => p.id === action.payload || !!p.product.isHighlighted);\n\n const highlightedProduct = products.find(p => !!p.product.isHighlighted);\n highlightedProduct && (highlightedProduct.product.isHighlighted = false);\n\n const newDiamond = products.find(p => p.id === action.payload);\n newDiamond && newDiamond.id !== highlightedProduct?.id && (newDiamond.product.isHighlighted = true);\n })\n ),\n handleAction(updateDiamond.success, (state, action) => [\n ...state.filter(d => d.id !== action.payload.id),\n action.payload,\n ]),\n]);\n\nconst actions = {\n addDiamond,\n changeActiveStatus,\n changeStatus,\n fetchAllDiamonds,\n highlight,\n importCsv,\n updateDiamond,\n};\n\nexport { actions, reducer };\n","import { createReducer, createActionCreator } from \"deox\";\nimport { Dispatch } from \"redux\";\nimport { Product, RingSetting } from \"../models/products\";\nimport { ApplicationState } from \"./store\";\nimport { REFETCH_DATA_INTERVAL } from \"../constants\";\nimport * as ringService from \"../services/ringSettings\";\n\nexport type State = {\n all: Product[] | null;\n};\n\nexport const fetchRingSettings = Object.assign(\n () => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const { ringSettings } = getState();\n\n if (!!ringSettings.all) {\n return;\n }\n\n try {\n const data = await ringService.getAllRingSettings();\n dispatch(fetchRingSettings.success(data));\n\n setInterval(async () => {\n const data = await ringService.getAllRingSettings();\n dispatch(fetchRingSettings.success(data));\n }, REFETCH_DATA_INTERVAL);\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\n \"@@RINGSETTINGS/FETCH_ENGAGEMENT_RINGS\",\n resolve => (data: Product[] | null) => resolve(data)\n ),\n }\n);\n\nconst defaultState: State = {\n all: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchRingSettings.success, (state, action) => ({ ...state, all: action.payload })),\n]);\n\nconst actions = {\n fetchRingSettings,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { v4 as uuid } from \"uuid\";\n\ntype MessageSeverity = \"error\" | \"info\";\ntype AdminMessage = {\n id: string;\n message: string;\n severity: MessageSeverity;\n};\n\nexport type State = AdminMessage[];\n\nconst defaultState: State = [];\n\nconst acknowledge = Object.assign(\n (id: string) => (dispatch: Dispatch) => {\n dispatch(acknowledge.success(id));\n },\n {\n success: createActionCreator(\"@@ADMIN/ERRORS/ACKNOWLEDGE\", resolve => (id: string) => resolve(id)),\n }\n);\n\nconst commit = Object.assign(\n (message: string, severity: MessageSeverity) => (dispatch: Dispatch) => {\n dispatch(commit.success({ message, severity }));\n },\n {\n success: createActionCreator(\n \"@@ADMIN/ERRORS/DISPATCH\",\n resolve => (message: { message: string; severity: MessageSeverity }) => resolve(message)\n ),\n }\n);\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(acknowledge.success, (state, action) =>\n produce(state, draft => {\n draft.splice(\n draft.findIndex(item => item.id === action.payload),\n 1\n );\n })\n ),\n handleAction(commit.success, (state, action) =>\n produce(state, draft => {\n draft.push({ message: action.payload.message, id: uuid(), severity: action.payload.severity });\n })\n ),\n]);\n\nconst actions = {\n acknowledge,\n commit,\n};\n\nexport { actions, reducer };\n","import { Dispatch } from \"redux\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport * as genericDiamondsService from \"../services/genericDiamonds\";\nimport { GenericDiamond } from \"../models/genericDiamond\";\n\nexport type State = GenericDiamond[];\n\nconst defaultState: State = [];\n\nconst fetchGenericDiamonds = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await genericDiamondsService.getAllGenericDiamonds();\n dispatch(fetchGenericDiamonds.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@GENERIC_DIAMOND/FETCH\", resolve => (genericDiamonds: GenericDiamond[]) =>\n resolve(genericDiamonds)\n ),\n }\n);\n \nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchGenericDiamonds.success, (state, action) => action.payload),\n]);\n\nconst actions = {\n fetchGenericDiamonds,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { MeleeStone, Product, UpsertMeleeStone } from \"../../models/products\";\nimport * as meleeService from \"../../services/melee\";\nimport { actions as messageActions } from \"./messages\";\n\n\nexport type State = Product[];\n\n\n\nconst defaultState: State = [];\n\nconst addMelee = Object.assign(\n (model: UpsertMeleeStone) => async (dispatch: Dispatch) => {\n try {\n const result = await meleeService.addMelee(model);\n dispatch(addMelee.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@MELEE/ADD\", resolve => (melee: Product) => resolve(melee)),\n }\n);\n\nconst changeMeleeStatus = Object.assign(\n (id: number, isActive: boolean) => async (dispatch: Dispatch) => {\n try {\n await meleeService.changeActiveStatus(id, isActive);\n dispatch(changeMeleeStatus.success({ id, isActive }));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@MELEE/CHANGE_STATUS\", resolve => (data: { id: number; isActive: boolean }) =>\n resolve(data)\n ),\n }\n);\n\nconst editMelee = Object.assign(\n (id: number, model: UpsertMeleeStone) => async (dispatch: Dispatch) => {\n try {\n await meleeService.edit(id, model);\n dispatch(editMelee.success({ id, item: model }));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@MELEE/EDIT\", resolve => (data: { id: number; item: UpsertMeleeStone }) =>\n resolve(data)\n ),\n }\n);\n\nconst fetchMelees = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await meleeService.getAll(false);\n dispatch(fetchMelees.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@MELEE/FETCH\", resolve => (melees: Product[]) => resolve(melees)),\n }\n);\n\nconst importCsv = Object.assign(\n (file: File) => async (dispatch: Dispatch) => {\n try {\n await meleeService.importCsv(file);\n\n messageActions.commit(\"Import successul. The page will reload to show the updated data\", \"info\")(dispatch);\n\n setTimeout(() => window.location.reload(), 2000);\n } catch {\n messageActions.commit(\"Error importing file\", \"error\")(dispatch);\n }\n },\n {}\n);\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(addMelee.success, (state, action) => state.concat(action.payload)),\n handleAction(changeMeleeStatus.success, (state, action) =>\n produce(state, draft => {\n const item = draft.find(i => i.id === action.payload.id);\n item && (item.isActive = action.payload.isActive);\n })\n ),\n handleAction(editMelee.success, (state, action) =>\n produce(state, draft => {\n const item = state.find(i => i.id === action.payload.id);\n if (!item) {\n return;\n }\n const itemIndex = draft.findIndex(i => i.id === action.payload.id);\n const newItem = { id: item.id, isActive: item.isActive, product: {...action.payload.item, id: item.id, isActive: item.isActive}, ...action.payload.item };\n draft[itemIndex] = newItem\n return draft\n })\n ),\n handleAction(fetchMelees.success, (state, action) => action.payload),\n]);\n\nconst actions = {\n addMelee,\n changeMeleeStatus,\n editMelee,\n fetchMelees,\n importCsv,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { access } from \"fs\";\nimport { produce } from \"immer\";\nimport { UploadFile } from \"../../models/misc\";\nimport {\n IAccessUser,\n IMarkupUser,\n IRegisterRequest,\n IUpsertAddressRequest,\n IUserAccess,\n IUserAddressWithEmail,\n IUserMarkup,\n IUserProfile,\n UserRole,\n} from \"../../models/users\";\nimport * as authService from \"../../services/auth\";\nimport { dataUrlToBase64 } from \"../../utils\";\nimport { withErrorDispatch } from \"./withErrorDispatch\";\n\nexport type State = IUserProfile[];\n\nconst changeUserBlockStatus = Object.assign(\n (userId: string, blocked: boolean, blockedUntil?: Date) =>\n withErrorDispatch(\n authService.changeUserBlockedStatus(userId, blocked, blockedUntil),\n () => changeUserBlockStatus.success({ userId, blocked, blockedUntil }),\n \"Error changing user block status\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/USERS/CHANGE_USER_BLOCK_STATUS\",\n resolve => (blockUser: { userId: string; blocked: boolean; blockedUntil?: Date }) => resolve(blockUser)\n ),\n }\n);\n\nconst changeUserRole = Object.assign(\n (userId: string, newRole: UserRole | null) =>\n withErrorDispatch(\n authService.changeUserRole(userId, newRole),\n () => changeUserRole.success({ userId, role: newRole || undefined }),\n \"Error changing user role\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/USERS/CHANGE_ROLE\",\n resolve => (changeRole: { userId: string; role: UserRole | undefined }) => resolve(changeRole)\n ),\n }\n);\n\nconst changeUserStatus = Object.assign(\n (userId: string, approved: boolean) =>\n withErrorDispatch(\n authService.changeUserStatus(userId, approved),\n () => changeUserStatus.success({ userId, approved }),\n \"Error changing user status\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/USERS/CHANGE_USER_STATUS\",\n resolve => (approveUser: { userId: string; approved: boolean }) => resolve(approveUser)\n ),\n }\n);\n\nconst createUser = Object.assign(\n (request: IRegisterRequest) =>\n withErrorDispatch(authService.register(request), result => createUser.success(result), \"Error creating user\"),\n {\n success: createActionCreator(\"@@ADMIN/USERS/CREATE_SUCCESS\", resolve => (user: IUserProfile) => resolve(user)),\n }\n);\n\nconst editAccount = Object.assign(\n (userId: string, addressId: number, address: IUpsertAddressRequest) =>\n withErrorDispatch(\n authService.updateAddress(addressId, address, userId),\n result => editAccount.success({ userId, address: result }),\n \"Error editing user details\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/USERS/EDIT/BASE_SUCCESS\",\n resolve => (result: { userId: string; address: IUserAddressWithEmail }) => resolve(result)\n ),\n }\n);\n\nconst fetchUsers = Object.assign(\n () => withErrorDispatch(authService.getAllUsers(), result => fetchUsers.success(result), \"Error fetching users\"),\n {\n success: createActionCreator(\"@@ADMIN/USERS/FETCH_SUCCESS\", resolve => (users: IUserProfile[]) => resolve(users)),\n }\n);\n\nconst upsertAgentLogo = Object.assign(\n (userId: string, image: UploadFile) => {\n image.content = dataUrlToBase64(image.content);\n\n return withErrorDispatch(\n authService.upsertAgentLogo(userId, image),\n url => upsertAgentLogo.success({ userId, url }),\n \"Error updating agent logo\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/USERS/UPSER_LOGO\", resolve => (result: { userId: string; url: string }) =>\n resolve(result)\n ),\n }\n);\n\nconst updatePrimaryColor = Object.assign(\n (userId: string, color: string) => {\n return withErrorDispatch(\n authService.updatePrimaryColor(userId, color),\n color => updatePrimaryColor.success({ userId, color }),\n \"Error updating agent primary color\"\n );\n },\n {\n success: createActionCreator(\n \"@@ADMIN/USERS/UPDATE_PRIMARY_COLOR\",\n resolve => (result: { userId: string; color: string }) => resolve(result)\n ),\n }\n);\n\nconst updateUserDomain = Object.assign(\n (userId: string, domain: string) => {\n return withErrorDispatch(\n authService.updateUserDomain(userId, domain),\n domain => updateUserDomain.success({ userId, domain }),\n \"Error updating agent domain\"\n );\n },\n {\n success: createActionCreator(\n \"@@ADMIN/USERS/UPDATE_DOMAIN\",\n resolve => (result: { userId: string; domain: string }) => resolve(result)\n ),\n }\n);\n\nconst addUserMarkup = Object.assign(\n (\n userId: string,\n caratMin: number | null | undefined,\n caratMax: number | null | undefined,\n percent: number | null | undefined,\n priceMin: number | null | undefined,\n priceMax: number | null | undefined\n ) => {\n return withErrorDispatch(\n authService.addUserMarkup(userId, caratMin, caratMax, priceMin, priceMax, percent),\n markup => addUserMarkup.success({ markup }),\n \"Error adding user markup\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/USERS/ADD_USER_MARKUP\", resolve => (result: { markup: IUserMarkup }) =>\n resolve(result)\n ),\n }\n);\n\nconst addUserAccess = Object.assign(\n (userId: string, pageId: string[]) => {\n return withErrorDispatch(\n authService.addUserAccess(userId, pageId),\n access => addUserAccess.success({ access }),\n \"Error adding user access\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/USERS/ADD_USER_ACCESS\", resolve => (result: { access: IUserAccess }) => {\n return resolve(result);\n }),\n }\n);\n\nconst deleteUserMarkup = Object.assign(\n (markupId: number, userId: string) => {\n return withErrorDispatch(\n authService.deleteUserMarkup(markupId, userId),\n markupUser => deleteUserMarkup.success({ markupUser }),\n \"Error deleting user markup\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/USERS/DELETE_USER_MARKUP\", resolve => (result: { markupUser: IMarkupUser }) =>\n resolve(result)\n ),\n }\n);\n\nconst deleteUserAccess = Object.assign(\n (accessId: number, userId: string) => {\n return withErrorDispatch(\n authService.deleteUserAccess(accessId, userId),\n accessUser => deleteUserAccess.success({ accessUser }),\n \"Error deleting user markup\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/USERS/DELETE_USER_ACCESS\", resolve => (result: { accessUser: IAccessUser }) =>\n resolve(result)\n ),\n }\n);\n\nconst deleteUser = Object.assign(\n (userId: string) => {\n return withErrorDispatch(\n authService.deleteUser(userId),\n userIdResponse => deleteUser.success({ userIdResponse }),\n \"Error deleting user\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/USERS/DELETE_USER\", resolve => (result: { userIdResponse: string }) =>\n resolve(result)\n ),\n }\n);\n\nconst defaultState: State = [];\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchUsers.success, (state, action) => action.payload),\n handleAction(changeUserStatus.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.userId);\n user && (user.approved = action.payload.approved);\n })\n ),\n handleAction(changeUserBlockStatus.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.userId);\n if (user) {\n user.blocked = action.payload.blocked;\n user.blockedUntil = action.payload.blockedUntil;\n }\n })\n ),\n handleAction(editAccount.success, (state, action) =>\n produce(state, draft => {\n const businessTypes = [\"Diamonds Wholesaler\", \"Retailer\", \"Jewelry Designer\", \"Private Investor\", \"Customer\"];\n const user = draft.find(u => u.id === action.payload.userId);\n user && (user.addresses[0] = action.payload.address);\n user && (user.email = action.payload.address.email);\n user && (user.businessType.id = action.payload.address.businessTypeId);\n user && (user.businessType.name = businessTypes[action.payload.address.businessTypeId - 1]);\n })\n ),\n handleAction(createUser.success, (state, action) =>\n produce(state, draft => {\n draft.push(action.payload);\n })\n ),\n handleAction(changeUserRole.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.userId);\n user && (user.role = action.payload.role);\n })\n ),\n handleAction(upsertAgentLogo.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.userId);\n user && (user.logoUrl = action.payload.url);\n })\n ),\n handleAction(updatePrimaryColor.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.userId);\n user && (user.primaryColor = action.payload.color);\n })\n ),\n handleAction(updateUserDomain.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.userId);\n user && (user.domain = action.payload.domain);\n })\n ),\n handleAction(addUserMarkup.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.markup.userId);\n user && (user.markups = [...user.markups, action.payload.markup]);\n })\n ),\n handleAction(addUserAccess.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.access.userId);\n user && (user.accesses = [...user.accesses, action.payload.access]);\n })\n ),\n handleAction(deleteUserMarkup.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.markupUser.userId);\n user && (user.markups = user.markups.filter(m => m.id !== action.payload.markupUser.markupId));\n })\n ),\n handleAction(deleteUserAccess.success, (state, action) =>\n produce(state, draft => {\n const user = draft.find(u => u.id === action.payload.accessUser.userId);\n user && (user.accesses = user.accesses.filter(m => m.id !== action.payload.accessUser.accessId));\n })\n ),\n handleAction(deleteUser.success, (state, action) =>\n produce(state, draft => {\n const newUserArray = state.filter(d => d.id !== action.payload.userIdResponse);\n draft = newUserArray;\n return draft;\n })\n ),\n]);\n\nconst actions = {\n createUser,\n changeUserBlockStatus,\n changeUserRole,\n changeUserStatus,\n editAccount,\n fetchUsers,\n // fetchAccesses,\n upsertAgentLogo,\n updatePrimaryColor,\n updateUserDomain,\n addUserMarkup,\n addUserAccess,\n deleteUserMarkup,\n deleteUserAccess,\n deleteUser,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport {\n AboutUsConfiguration,\n ContactInformation,\n DefaultGenericDiamondConfiguration,\n HomepageConfiguration,\n Support,\n UpsertAboutUsConfiguration,\n UpsertImagesConfiguration,\n} from \"../../models/misc\";\nimport * as contactService from \"../../services/contact\";\nimport * as siteSettingsService from \"../../services/siteSettings\";\nimport { dataUrlToBase64 } from \"../../utils\";\nimport { withErrorDispatch } from \"./withErrorDispatch\";\n\nexport type State = {\n homepage: HomepageConfiguration | null;\n aboutUs: AboutUsConfiguration | null;\n contactInformation: ContactInformation | null;\n maintenance: boolean | null;\n maintenanceMessage: string | null;\n support: Support | null;\n};\n\nconst fetchHomepageConfiguration = Object.assign(\n () =>\n withErrorDispatch(\n siteSettingsService.getHomepageConfiguration(),\n result => fetchHomepageConfiguration.success(result),\n \"Error fetching homepage configuration\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/HOMEPAGE/FETCH\", resolve => (item: HomepageConfiguration) => resolve(item)),\n }\n);\n\nconst fetchAboutUsConfiguration = Object.assign(\n () =>\n withErrorDispatch(\n siteSettingsService.getAboutUsConfiguration(),\n result => fetchAboutUsConfiguration.success(result),\n \"Error fetching about us configuration\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/ABOUT_US/FETCH\", resolve => (item: AboutUsConfiguration) => resolve(item)),\n }\n);\n\nconst fetchContactInformation = Object.assign(\n () =>\n withErrorDispatch(\n contactService.getContactInformation(),\n result => fetchContactInformation.success(result),\n \"Error fetching contact information\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/CONTACT/FETCH\", resolve => (item: ContactInformation) => resolve(item)),\n }\n);\n\nconst fetchMaintenance = Object.assign(\n () =>\n withErrorDispatch(\n siteSettingsService.getMaintenance(),\n result => fetchMaintenance.success(result),\n \"Error fetching maintenanance information\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/MAINTENANCE/FETCH\", resolve => (item: boolean) => resolve(item)),\n }\n);\n\nconst fetchMaintenanceMessage = Object.assign(\n () =>\n withErrorDispatch(\n siteSettingsService.getMaintenanceMessage(),\n result => fetchMaintenanceMessage.success(result),\n \"Error fetching maintenanance information\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/MAINTENANCE_MESSAGE/FETCH\", resolve => (item: string) => resolve(item)),\n }\n);\n\nconst setMaintenance = Object.assign(\n (isEnabled: boolean) =>\n withErrorDispatch(\n siteSettingsService.setMaintenance(isEnabled),\n () => setMaintenance.success(isEnabled),\n \"Error updating maintenance information\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/MAINTENANCE/SET\", resolve => (item: boolean) => resolve(item)),\n }\n);\n\nconst setMaintenanceMessage = Object.assign(\n (message: string) =>\n withErrorDispatch(\n siteSettingsService.setMaintenanceMessage(message),\n () => setMaintenanceMessage.success(message),\n \"Error updating maintenance information\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/MAINTENANCE_MESSAGE/SET\", resolve => (item: string) => resolve(item)),\n }\n);\n\nconst updateHomepageConfiguration = Object.assign(\n (settings: UpsertImagesConfiguration) => {\n settings.homepageImage?.content && (settings.homepageImage.content = dataUrlToBase64(settings.homepageImage.content));\n settings.cardRings?.content && (settings.cardRings.content = dataUrlToBase64(settings.cardRings.content));\n settings.cardBracelets?.content &&\n (settings.cardBracelets.content = dataUrlToBase64(settings.cardBracelets.content));\n settings.cardNecklaces?.content &&\n (settings.cardNecklaces.content = dataUrlToBase64(settings.cardNecklaces.content));\n settings.cardEarrings?.content && (settings.cardEarrings.content = dataUrlToBase64(settings.cardEarrings.content));\n\n settings.aboutImage?.content && (settings.aboutImage.content = dataUrlToBase64(settings.aboutImage.content));\n settings.slider1Image?.content && (settings.slider1Image.content = dataUrlToBase64(settings.slider1Image.content));\n settings.slider2Image?.content && (settings.slider2Image.content = dataUrlToBase64(settings.slider2Image.content));\n settings.slider3Image?.content && (settings.slider3Image.content = dataUrlToBase64(settings.slider3Image.content));\n\n\n\n\n return withErrorDispatch(\n siteSettingsService.updateHomepageConfiguration(settings),\n result => updateHomepageConfiguration.success(result),\n \"Error saving homepage configuration\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/HOMEPAGE/UPDATE\", resolve => (item: HomepageConfiguration) => resolve(item)),\n }\n);\n\nconst updateAboutUsConfiguration = Object.assign(\n (settings: UpsertAboutUsConfiguration) => {\n settings.image1?.content && (settings.image1.content = dataUrlToBase64(settings.image1.content));\n settings.image2?.content && (settings.image2.content = dataUrlToBase64(settings.image2.content));\n\n return withErrorDispatch(\n siteSettingsService.updateAboutUsConfiguration(settings),\n result => updateAboutUsConfiguration.success(result),\n \"Error saving about us configuration\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/ABOUT_US/UPDATE\", resolve => (item: AboutUsConfiguration) => resolve(item)),\n }\n);\n\nconst updateContactInformation = Object.assign(\n (information: ContactInformation) =>\n withErrorDispatch(\n contactService.updateContactInformation(information),\n () => updateContactInformation.success(information),\n \"Error updating contact information\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/CONTACT/UPDATE\", resolve => (item: ContactInformation) => resolve(item)),\n }\n);\n\nconst fetchSupportInformation = Object.assign(\n () =>\n withErrorDispatch(\n contactService.getSupportInfo(),\n result => fetchSupportInformation.success(result),\n \"Error fetching support contacts\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/SUPPORT/FETCH\", resolve => (item: Support) => resolve(item)),\n }\n);\n\nconst updateSupportInformation = Object.assign(\n (information: Support) =>\n withErrorDispatch(\n contactService.updateSupportInfo(information),\n () => updateSupportInformation.success(information),\n \"Error updating support contacts\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/SUPPORT/UPDATE\", resolve => (information: Support) => resolve(information)),\n }\n);\n\nconst defaultState: State = {\n homepage: null,\n aboutUs: null,\n contactInformation: null,\n maintenance: false,\n maintenanceMessage: null,\n support: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction([fetchHomepageConfiguration.success, updateHomepageConfiguration.success], (state, action) => ({\n ...state,\n homepage: action.payload,\n })),\n handleAction([fetchAboutUsConfiguration.success, updateAboutUsConfiguration.success], (state, action) => ({\n ...state,\n aboutUs: action.payload,\n })),\n handleAction([fetchContactInformation.success, updateContactInformation.success], (state, action) => ({\n ...state,\n contactInformation: action.payload,\n })),\n handleAction([fetchMaintenance.success, setMaintenance.success], (state, action) => ({\n ...state,\n maintenance: action.payload,\n })),\n handleAction([fetchMaintenanceMessage.success, setMaintenanceMessage.success], (state, action) => ({\n ...state,\n maintenanceMessage: action.payload,\n })),\n handleAction([fetchSupportInformation.success, updateSupportInformation.success], (state, action) => ({\n ...state,\n support: action.payload,\n })),\n]);\n\nconst actions = {\n fetchHomepageConfiguration,\n fetchAboutUsConfiguration,\n fetchContactInformation,\n fetchMaintenance,\n fetchMaintenanceMessage,\n setMaintenance,\n setMaintenanceMessage,\n updateHomepageConfiguration,\n updateAboutUsConfiguration,\n updateContactInformation,\n updateSupportInformation,\n fetchSupportInformation,\n};\n\nexport { actions, reducer };\n","import { AxiosResponse } from \"axios\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { REFETCH_DATA_INTERVAL } from \"../constants\";\nimport { DiamondStatusEnum, DiamondsType, Product } from \"../models/products\";\nimport * as diamondsService from \"../services/diamonds\";\nimport { ApplicationState } from \"./store\";\nimport { actions as wishListActions } from \"./wishList\";\n\nexport type State = {\n all: Product[] | null;\n highlighted: Product | null;\n};\n\nexport const fetchAllDiamonds = Object.assign(\n () => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const { diamonds } = getState();\n\n if (!!diamonds.all) {\n return;\n }\n\n try {\n const data = await diamondsService.getAllDiamonds(true);\n dispatch(fetchAllDiamonds.success(data));\n\n setInterval(async () => {\n const data = await diamondsService.getAllDiamonds(true);\n dispatch(fetchAllDiamonds.success(data));\n }, REFETCH_DATA_INTERVAL);\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DIAMONDS/FETCH_ALL\", resolve => (diamonds: Product[] | null) =>\n resolve(diamonds)\n ),\n }\n);\n\nconst fetchHighlightedDiamond = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const data = await diamondsService.getHighlightedDiamond();\n dispatch(fetchHighlightedDiamond.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DIAMONDS/FETCH_HIGHLIGHTED\", resolve => (diamond: Product) =>\n resolve(diamond)\n ),\n }\n);\n\nconst changeStatus = Object.assign(\n (diamondId: number, status: DiamondStatusEnum, userId: string = \"\") => async (dispatch: Dispatch) => {\n try {\n const response: AxiosResponse = await diamondsService.changeStatus(diamondId, status);\n if (response.status === 200) {\n dispatch(changeStatus.success({ diamondId, status, userId }));\n }\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\n \"@@DIAMONDS/CHANGE_STATUS\",\n resolve => (result: { diamondId: number; status: DiamondStatusEnum; userId: string }) => resolve(result)\n ),\n }\n);\n\nconst resetDiamonds = Object.assign(\n () => (dispatch: Dispatch) => {\n dispatch(resetDiamonds.success());\n },\n {\n success: createActionCreator(\"@@DIAMONDS/RESET\", resolve => () => resolve()),\n }\n);\n\nconst defaultState: State = {\n all: null,\n highlighted: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(changeStatus.success, (state, action) =>\n produce(state, draft => {\n const diamond = (draft.all || []).find(d => d.id === action.payload.diamondId);\n diamond && (diamond.product.holdUserId = action.payload.userId);\n diamond && (diamond.product.status = action.payload.status);\n draft.highlighted &&\n draft.highlighted.id === action.payload.diamondId &&\n (draft.highlighted.product.status = action.payload.status);\n })\n ),\n handleAction(resetDiamonds.success, (state, action) => ({ highlighted: null, all: null })),\n handleAction(fetchAllDiamonds.success, (state, action) => ({ ...state, all: action.payload })),\n handleAction(fetchHighlightedDiamond.success, (state, action) => ({ ...state, highlighted: action.payload })),\n handleAction(wishListActions.removeFromWishList.success, (state, action) =>\n produce(state, draft => {\n if (Array.isArray(action.payload)) {\n const diamondIds = action.payload as number[];\n draft.all = draft.all!.map(d => {\n if (diamondIds.some(id => id === d.id)) {\n d.product.status = DiamondStatusEnum.Suspended;\n return d;\n }\n return d;\n });\n }\n })\n ),\n]);\n\nconst actions = {\n changeStatus,\n fetchAllDiamonds,\n fetchHighlightedDiamond,\n resetDiamonds,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Show, UpsertShow } from \"../../models/misc\";\nimport * as showsService from \"../../services/shows\";\nimport { dataUrlToBase64 } from \"../../utils\";\nimport { withErrorDispatch } from \"./withErrorDispatch\";\n\nexport type State = Show[];\n\nconst changeIsActive = Object.assign(\n (showId: number, isActive: boolean) =>\n withErrorDispatch(\n showsService.changeIsActive(showId, isActive),\n () => changeIsActive.success({ id: showId, isActive }),\n \"Error changing is active status\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/SHOWS/CHANGE_IS_ACTIVE\",\n resolve => (show: { id: number; isActive: boolean }) => resolve(show)\n ),\n }\n);\n\nconst changeActiveAd = Object.assign(\n (showId: number, activeAd: boolean) =>\n withErrorDispatch(\n showsService.changeActiveAd(showId, activeAd),\n () => changeActiveAd.success({ id: showId, activeAd }),\n \"Error changing ad status\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/SHOWS/CHANGE_ACTIVE_Ad\",\n resolve => (show: { id: number; activeAd: boolean }) => resolve(show)\n )\n }\n)\n\nconst createShow = Object.assign(\n (show: UpsertShow) => {\n if (show.image && show.image.content) {\n show.image.content = dataUrlToBase64(show.image.content);\n }\n\n return withErrorDispatch(showsService.createShow(show), show => createShow.success(show), \"Error creating show\");\n },\n {\n success: createActionCreator(\"@@ADMIN/SHOWS/CREATE\", resolve => (show: Show) => resolve(show)),\n }\n);\n\nconst editShow = Object.assign(\n (showId: number, show: UpsertShow) => {\n if (show.image && show.image.content) {\n show.image.content = dataUrlToBase64(show.image.content);\n }\n\n return withErrorDispatch(showsService.editShow(showId, show), show => editShow.success(show), \"Error editing show\");\n },\n {\n success: createActionCreator(\"@@ADMIN/SHOWS/EDIT\", resolve => (show: Show) => resolve(show)),\n }\n);\n\nconst deleteShow = Object.assign(\n (showId: number) => {\n return withErrorDispatch(\n showsService.deleteShow(showId),\n () => deleteShow.success(showId),\n \"Error deleting show\"\n );\n },\n {\n success: createActionCreator(\"@@ADMIN/SHOWS/DELETE\", resolve => (showId: number) => resolve(showId)),\n }\n);\n\n\nconst fetchAllShows = Object.assign(\n () =>\n withErrorDispatch(showsService.getAll(false), result => fetchAllShows.success(result), \"Error fetching all shows\"),\n {\n success: createActionCreator(\"@@ADMIN/SHOWS/GET_ALL\", resolve => (shows: Show[]) => resolve(shows)),\n }\n);\n\nconst defaultState: State = [];\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(changeIsActive.success, (state, action) =>\n produce(state, draft => {\n const show = draft.find(s => s.id === action.payload.id);\n show && (show.isActive = action.payload.isActive);\n })\n ),\n handleAction(fetchAllShows.success, (state, action) => action.payload),\n handleAction(createShow.success, (state, action) =>\n produce(state, draft => {\n draft.push(action.payload);\n })\n ),\n handleAction(editShow.success, (state, action) => [...state.filter(s => s.id !== action.payload.id), action.payload]),\n handleAction(changeActiveAd.success, (state, action) =>\n produce(state, draft => {\n const show = draft.find(s => s.id === action.payload.id);\n if (show) {\n show.activeAd = action.payload.activeAd;\n }\n })\n ),\n]);\n\nconst actions = {\n changeIsActive,\n createShow,\n editShow,\n fetchAllShows,\n changeActiveAd,\n deleteShow,\n};\n\nexport { actions, reducer };\n","import { createReducer, createActionCreator } from \"deox\";\nimport { iteratorSymbol } from \"immer/dist/internal\";\nimport { iteratee } from \"lodash\";\nimport { Dispatch } from \"redux\";\nimport { diamonds } from \"../services/data\";\nimport { ApplicationState, store } from \"./store\";\n\nexport type ViewMode = \"grid\" \n// | \"list\";\n\nexport type State = {\n viewMode: ViewMode;\n showSelected: boolean;\n isHamburgerOpen: boolean;\n wishListForSets: number[] | null;\n};\n\nconst changeView = Object.assign(\n {},\n {\n success: createActionCreator(\"@@MISC/CHANGE_VIEW_MODE\", resolve => (mode: ViewMode) => resolve(mode)),\n }\n);\n\nconst setShowSelected = Object.assign(\n {},\n {\n success: createActionCreator(\"@@MISC/SET_SHOW_SELECTED\", resolve => (value: boolean) => resolve(value)),\n }\n);\n\nconst toggleHamburger = Object.assign(\n {},\n {\n success: createActionCreator(\"@@MISC/TOGGLE_HAMBURGER\", resolve => () => resolve()),\n }\n);\n\nconst setWishListForSets = Object.assign(\n (itemId: number) => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n // const diamondIds = getState().diamonds.all?.filter(d => itemIds.includes(d.id))\n dispatch(setWishListForSets.success(itemId));\n },\n {\n success: createActionCreator(\"@@MISC/SET_WISHLIST_FOR_SETS\", resolve => (data: number) => resolve(data)),\n }\n);\n\nconst defaultState: State = {\n viewMode: \"grid\",\n showSelected: false,\n isHamburgerOpen: false,\n wishListForSets: [],\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(changeView.success, (state, action) => ({\n ...state,\n viewMode: action.payload,\n })),\n handleAction(setShowSelected.success, (state, action) => ({\n ...state,\n showSelected: action.payload,\n })),\n handleAction(toggleHamburger.success, (state, action) => ({\n ...state,\n isHamburgerOpen: !state.isHamburgerOpen,\n })),\n handleAction(setWishListForSets.success, (state, action) => {\n return {\n ...state,\n wishListForSets:\n !!state.wishListForSets && !state.wishListForSets.includes(action.payload)\n ? [...(state.wishListForSets || []), action.payload]\n : state.wishListForSets?.length === 0\n ? [action.payload]\n : (state.wishListForSets || []).filter(id => id !== action.payload),\n };\n }),\n]);\n\nconst actions = {\n changeView,\n setShowSelected,\n toggleHamburger,\n setWishListForSets,\n};\n\nexport { actions, reducer };\n","import { AnyAction, Dispatch } from \"redux\";\nimport { OneOfAKindProduct, UpsertProduct } from \"../../models/products\";\nimport { actions as messageActions } from \"./messages\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport * as productsService from \"../../services/products\";\nimport { produce } from \"immer\";\nimport { ThunkDispatch } from \"redux-thunk\";\n\nexport type State = OneOfAKindProduct[];\n\nconst defaultState: State = [];\n\nconst fetchProducts = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await productsService.getAll();\n dispatch(fetchProducts.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ADMIN_PRODUCTS_FETCH\", resolve => (data: OneOfAKindProduct[]) => resolve(data)),\n }\n);\n\nconst addProduct = (model: UpsertProduct) => async (dispatch: Dispatch) => {\n try {\n const result = await productsService.addProduct(model);\n\n dispatch(addProduct.success(result));\n } catch (error) {\n console.error(\"Error adding product:\", error);\n }\n};\n\naddProduct.success = createActionCreator(\"@@ADMIN_PRODUCTS/ADD\", resolve => (product: OneOfAKindProduct) =>\n resolve(product)\n);\n\nconst editProduct = Object.assign(\n (stockNumber: string, model: UpsertProduct) => async (dispatch: Dispatch) => {\n try {\n const result: OneOfAKindProduct = await productsService.edit(stockNumber, model);\n dispatch(editProduct.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ADMIN_PRODUCTS_EDIT\", resolve => (data: UpsertProduct) => resolve(data)),\n }\n);\n\nconst deleteProduct = Object.assign(\n (stockNumber: string) => async (dispatch: Dispatch) => {\n try {\n await productsService.delProduct(stockNumber);\n dispatch(deleteProduct.success(stockNumber));\n } catch (error) {\n console.error('Error deleting the product:', error)\n return;\n }\n },\n \n);\n\nconst importCsv = Object.assign(\n (file: File) => async (dispatch: Dispatch) => {\n try {\n await productsService.importCsv(file);\n messageActions.commit(\"Import successul. The page will reload to show the updated data\", \"info\")(dispatch);\n setTimeout(() => window.location.reload(), 2000);\n } catch {\n messageActions.commit(\"Error importing file\", \"error\")(dispatch);\n }\n },\n {}\n);\n\nconst exportCsv = () => {\n return async (dispatch: ThunkDispatch) => {\n try {\n await productsService.onExportCsv();\n } catch {\n dispatch({ type: 'EXPORT_CSV_ERROR' });\n }\n };\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchProducts.success, (state, action) => action.payload),\n handleAction(addProduct.success, (state, action) => state.concat(action.payload)),\n handleAction(editProduct.success, (state, action) =>\n produce(state, draft => {\n const item = state.find(i => i.stockNumber === action.payload.stockNumber);\n\n if (!item) {\n return;\n }\n\n const itemIndex = draft.findIndex(i => i.stockNumber === action.payload.stockNumber);\n const newItem = {\n ...action.payload\n };\n\n draft[itemIndex] = newItem as OneOfAKindProduct;\n return draft;\n })\n ),\n]);\n\nconst actions = {\n fetchProducts,\n editProduct,\n addProduct,\n deleteProduct,\n importCsv,\n exportCsv\n};\n\nexport { actions, reducer };\n","import { createBrowserHistory } from \"history\";\n\nconst baseUrl = document.getElementsByTagName(\"base\")[0].getAttribute(\"href\") as string;\n\nexport default createBrowserHistory({ basename: baseUrl });\n","import Axios from \"axios\";\nimport { LOCAL_STORAGE_PRIMARY_COLOR, SITE_DEFAULT_PRIMARY_COLOR } from \"../constants\";\nimport {\n AboutUsConfiguration,\n DefaultGenericDiamondConfiguration,\n ExcelDataType,\n HomepageConfiguration,\n UpsertAboutUsConfiguration,\n UpsertImagesConfiguration,\n} from \"../models/misc\";\nimport { PageId } from \"../store/UIState\";\nimport { authorizationHeader } from \"./apiUtils\";\nimport { DomainLayout } from \"../store/domain\";\n\nconst routes = {\n homepage: \"/api/site/homepage\",\n aboutUs: \"/api/site/aboutus\",\n maintenance: \"/api/site/maintenance\",\n maintenanceMessage: \"/api/site/maintenance/message\",\n pdf: \"/api/site/pdfcheck\",\n pdfDownload: \"/api/site/pdfdownload\",\n excel: \"/api/site/exportExcel\",\n lastUpdate: \"/api/site/lastupdate\",\n domainLayout: \"/api/site/domainLayout\",\n sendInvitation: \"/api/site/sendInvitation\",\n};\n\nconst getHomepageConfiguration = async (): Promise => {\n const result = await Axios.get(routes.homepage);\n return result.data;\n};\n\nconst getAboutUsConfiguration = async (): Promise => {\n const result = await Axios.get(routes.aboutUs);\n return result.data;\n};\n\nconst getLastCsvUpdateTime = async (): Promise => {\n const result = await Axios.get(routes.lastUpdate);\n return result.data;\n};\n\nconst getMaintenance = async (): Promise => {\n const result = await Axios.get(routes.maintenance);\n return result.data;\n};\n\nconst setMaintenance = async (isEnabled: boolean): Promise => {\n await Axios.put(`${routes.maintenance}?isenabled=${isEnabled}`, null, {\n headers: authorizationHeader(),\n });\n};\n\nconst setMaintenanceMessage = async (message: string): Promise => {\n await Axios.put(\n routes.maintenanceMessage,\n { message },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst getMaintenanceMessage = async (): Promise => {\n const result = await Axios.get(routes.maintenanceMessage);\n return result.data;\n};\n\nconst updateHomepageConfiguration = async (configuration: UpsertImagesConfiguration): Promise => {\n const result = await Axios.patch(routes.homepage, configuration, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst updateAboutUsConfiguration = async (configuration: UpsertAboutUsConfiguration): Promise => {\n const result = await Axios.patch(routes.aboutUs, configuration, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst setSiteMainColor = (setDefaultColor?: boolean): void => {\n if (setDefaultColor) {\n document.documentElement.style.cssText = `--bright-color: ${SITE_DEFAULT_PRIMARY_COLOR}`;\n return;\n }\n\n const color = localStorage.getItem(LOCAL_STORAGE_PRIMARY_COLOR);\n if (!color) {\n return;\n }\n document.documentElement.style.cssText = `--bright-color: ${color}`;\n};\n\nconst checkPdfStatus = async (url: string): Promise => {\n const response = await Axios.post(routes.pdf, { url }, { headers: { \"Content-Type\": \"application/json\" } });\n return response.data as number;\n};\nconst exportExcel = async (\n data: ExcelDataType[],\n totalPrice: number,\n totalCarats: number,\n pageId: PageId\n): Promise => {\n await Axios.post(\n routes.excel,\n { data, totalCarats, totalPrice, pageId },\n {\n headers: authorizationHeader(),\n responseType: \"blob\",\n }\n ).then(response => {\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", \"AlonAvinoam.xlsx\");\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n });\n};\nconst pdfDownload = async (url: string, diamondId: string): Promise => {\n await Axios.post(\n routes.pdfDownload,\n { url },\n {\n headers: authorizationHeader(),\n responseType: \"blob\",\n }\n ).then(response => {\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", `${diamondId}.pdf`);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n });\n};\n\nconst getDomainLayout = async (): Promise => {\n const response = await Axios.get(routes.domainLayout);\n return response.data;\n};\n\nconst sendInvitation = async (url: string): Promise => {\n await Axios.post(routes.sendInvitation, { url }, { headers: authorizationHeader() });\n};\n\nexport {\n getHomepageConfiguration,\n getAboutUsConfiguration,\n getMaintenance,\n getMaintenanceMessage,\n setMaintenance,\n setMaintenanceMessage,\n updateHomepageConfiguration,\n updateAboutUsConfiguration,\n setSiteMainColor,\n checkPdfStatus,\n exportExcel,\n getLastCsvUpdateTime,\n pdfDownload,\n getDomainLayout,\n sendInvitation,\n};\n","export enum ErrorCode {\n ACCOUNT_NOT_APPROVED = 10,\n ADDRESS_NOT_FOUND = 20,\n DIAMOND_NOT_FOUND = 30,\n EMAIL_ALREADY_EXISTS = 40,\n EMAIL_NOT_VERIFIED = 50,\n EMAIL_TEMPLATE_NOT_FOUND = 60,\n FORBIDDEN = 70,\n INTERNAL_ERROR = 80,\n INVALID_RECAPTCHA = 85,\n INVALID_REQUEST = 90,\n ITEM_NOT_FOUND = 95,\n WRONG_PASSWORD = 100,\n ORDER_NOT_FOUND = 110,\n SHOW_NOT_FOUND = 120,\n USER_BLOCKED = 130,\n USER_NOT_FOUND = 140,\n VERIFICATION_FAILED = 150,\n}\n\nexport interface ErrorResponse {\n errorCode: ErrorCode;\n}\n\nconst phrases: { [index in ErrorCode]: string } = {\n [ErrorCode.ACCOUNT_NOT_APPROVED]: \"Your account is not approved by an Administrator\",\n [ErrorCode.ADDRESS_NOT_FOUND]: \"\",\n [ErrorCode.DIAMOND_NOT_FOUND]: \"\",\n [ErrorCode.EMAIL_ALREADY_EXISTS]: \"This email is already registered in the system\",\n [ErrorCode.EMAIL_NOT_VERIFIED]: \"Your email is not verified\",\n [ErrorCode.EMAIL_TEMPLATE_NOT_FOUND]: \"\",\n [ErrorCode.FORBIDDEN]: \"\",\n [ErrorCode.INTERNAL_ERROR]: \"\",\n [ErrorCode.INVALID_RECAPTCHA]: \"Invalid ReCAPTCHA\",\n [ErrorCode.INVALID_REQUEST]: \"\",\n [ErrorCode.ITEM_NOT_FOUND]: \"The selectred item was not found\",\n [ErrorCode.WRONG_PASSWORD]: \"The provided password does not match this email\",\n [ErrorCode.ORDER_NOT_FOUND]: \"\",\n [ErrorCode.SHOW_NOT_FOUND]: \"\",\n [ErrorCode.USER_BLOCKED]: \"Your account has been blocked\",\n [ErrorCode.USER_NOT_FOUND]: \"Your email does not exist in our system\",\n [ErrorCode.VERIFICATION_FAILED]: \"\",\n};\n\nconst getErrorPhrase = (error: ErrorCode): string => phrases[error] || \"General Error\";\n\nexport { getErrorPhrase };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport jwt from \"jsonwebtoken\";\nimport { Dispatch } from \"redux\";\nimport history from \"../history\";\nimport { IdNameModel } from \"../models/misc\";\nimport {\n ILoginResponse,\n IRegisterRequestFromEmail,\n IUpsertAddressRequest,\n IUserAddress,\n IUserProfile,\n} from \"../models/users\";\nimport * as authService from \"../services/auth\";\nimport { ErrorResponse, getErrorPhrase } from \"../services/errorResponse\";\nimport { ApplicationState } from \"./store\";\nimport ReactGa from \"react-ga\";\nimport { withErrorDispatch } from \"./admin/withErrorDispatch\";\nexport type State = {\n email: string | null;\n retrieved: boolean;\n token: string | null;\n user: IUserProfile | null;\n};\n\nlet _timeout: NodeJS.Timeout | null = null;\n\nconst _changePassword = (currentPassword: string, newPassword: string) => async () => {\n try {\n await authService.changePassword(currentPassword, newPassword);\n } catch (err) {\n return;\n }\n\n history.push(\"/account\");\n};\n\nconst _changePasswordByToken = (password: string) => async () => {\n const query = history.location.search;\n const search = new URLSearchParams(query);\n\n const email = search.get(\"email\");\n const token = search.get(\"token\");\n\n if (!email || !token || !password) {\n return;\n }\n\n try {\n await authService.changePasswordByToken(email, token, password);\n } catch {\n return;\n }\n\n history.push(\"/login\");\n};\n\nconst _confirmEmail = () => async () => {\n const query = history.location.search;\n const search = new URLSearchParams(query);\n\n const email = search.get(\"email\");\n const token = search.get(\"token\");\n\n if (!email || !token) {\n return;\n }\n\n try {\n await authService.confirmEmail(email, decodeURIComponent(token));\n } catch {\n return;\n }\n\n history.push(\"/login\");\n};\n\nconst _editAccount = (\n firstName: string,\n lastName: string,\n setPassword: boolean,\n currentPassword?: string,\n newPassword?: string\n) => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const { auth } = getState();\n const { address, city, country, isBilling, phone, company, federation, ...rest } = auth.user!.addresses[0];\n const email = auth.user!.email;\n\n let newAddress: IUserAddress | null = null;\n try {\n if (firstName !== rest.firstName || lastName !== rest.lastName) {\n newAddress = await authService.updateAddress(rest.id, {\n address,\n city,\n countryId: country.id,\n isBilling,\n phone,\n company,\n federationId: federation?.id || undefined,\n firstName,\n lastName,\n email,\n });\n }\n\n if (setPassword && currentPassword && newPassword) {\n await authService.changePassword(currentPassword, newPassword);\n }\n } catch {\n return;\n }\n\n dispatch(common.updateAddress(newAddress!));\n\n history.push(\"/account\");\n};\n\nconst _handleLogin = (email: string, password: string, rememberMe: boolean, returnUrl?: string) => async (\n dispatch: Dispatch\n) => {\n try {\n const result = await authService.login(email, password);\n localStorage.removeItem(\"rememberMe\");\n if (rememberMe) {\n localStorage.setItem(\"rememberMe\", email);\n }\n\n localStorage.setItem(\"access-token\", result.accessToken);\n refreshToken(result.accessToken, dispatch);\n dispatch(login.success(result));\n\n history.push(returnUrl ? returnUrl : \"/\");\n } catch (err) {\n const error = err.response?.data as ErrorResponse;\n dispatch(login.error(getErrorPhrase(error.errorCode)));\n }\n};\n\nconst _initUserState = () => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const token = localStorage.getItem(\"access-token\");\n const { auth } = getState();\n if (auth.user) {\n return;\n }\n if (!token) {\n dispatch(login.noUser());\n return;\n }\n\n const payload = jwt.decode(token, { json: true });\n\n if (!payload || payload[\"exp\"] * 1000 < Date.now()) {\n dispatch(login.noUser());\n return;\n }\n\n let result: ILoginResponse;\n\n try {\n result = await authService.getUser(token);\n ReactGa.set({ userId: result.user.id });\n } catch {\n dispatch(login.noUser());\n history.push(\"/login\", { from: history.location.pathname });\n return;\n }\n\n refreshToken(token, dispatch);\n dispatch(login.success(result));\n};\n\nconst _logout = () => async (dispatch: Dispatch) => {\n dispatch(logout.success());\n localStorage.removeItem(\"access-token\");\n clearTimeout(_timeout!);\n history.push(\"/\");\n};\n\nconst _register = (request: IRegisterRequestFromEmail) => async (dispatch: Dispatch) => {\n try {\n await authService.register(request);\n } catch (err) {\n const error = err.response?.data as ErrorResponse;\n dispatch(register.error(getErrorPhrase(error.errorCode)));\n return;\n }\n\n dispatch(register.success(request.email));\n history.push(\"/welcome\", { shouldApprove: request.shouldApprove });\n};\n\nconst _resendConfirmationEmail = (email: string) => async () => {\n if (!email) {\n return;\n }\n\n try {\n await authService.resendConfirmationEmail(email);\n } catch {\n return;\n }\n};\n\nconst _resetPassword = (email: string, noRedirect?: boolean) => async () => {\n try {\n await authService.resetPassword(email);\n } catch (err) {\n return;\n }\n\n if (!noRedirect) {\n history.push(\"/\");\n }\n};\n\nconst _updateSubscriptions = (ids: number[]) => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const { data } = getState();\n\n try {\n await authService.updateSubscriptions(ids);\n\n const channels = data.emailChannels.filter(c => ids.includes(c.id));\n\n dispatch(updateSubscriptions.success(channels));\n } catch {\n return;\n }\n};\n\nconst _upsertAddress = (id: number | undefined, address: IUpsertAddressRequest, noRedirect?: boolean) => async (\n dispatch: Dispatch\n) => {\n try {\n const result = id ? await authService.updateAddress(id, address) : await authService.addAddress(address);\n\n dispatch(id ? upsertAddress.updateSuccess(result) : upsertAddress.createSuccess(result));\n\n if (!noRedirect) {\n history.push(\"/account/addressbook\");\n }\n } catch {\n return;\n }\n};\n\nconst refreshToken = async (token: string, dispatch: Dispatch) => {\n const tokenPayload = jwt.decode(token, { json: true });\n\n if (!tokenPayload) {\n return;\n }\n\n const timeLeft = (tokenPayload[\"exp\"] * 1000 - Date.now()) * 0.9;\n\n _timeout = setTimeout(async () => {\n const newToken = await authService.refreshToken(token);\n localStorage.setItem(\"access-token\", newToken);\n dispatch(login.refreshToken(newToken));\n refreshToken(newToken, dispatch);\n }, timeLeft);\n};\n\nconst changePassword = Object.assign(_changePassword, {});\n\nconst changePasswordByToken = Object.assign(_changePasswordByToken, {});\n\nconst common = Object.assign(\n {},\n {\n updateAddress: createActionCreator(\"@@AUTH/UPDATE_USER\", resolve => (address: IUserAddress) => resolve(address)),\n }\n);\n\nconst confirmEmail = Object.assign(_confirmEmail, {});\n\nconst editAccount = Object.assign(_editAccount, {});\n\nconst initUserState = Object.assign(_initUserState, {});\n\nconst login = Object.assign(_handleLogin, {\n success: createActionCreator(\"@@AUTH/LOGIN/SUCCESS\", resolve => (response: ILoginResponse) => resolve(response)),\n noUser: createActionCreator(\"@@AUTH/LOGIN/NO_USER\"),\n error: createActionCreator(\"@@AUTH/LOGIN/ERROR\", resolve => (error: string) => resolve(error)),\n refreshToken: createActionCreator(\"@@AUTH/LOGIN/REFRESH_TOKEN\", resolve => (token: string) => resolve(token)),\n});\n\nconst logout = Object.assign(_logout, {\n success: createActionCreator(\"@@AUTH/LOGOUT\"),\n});\n\nconst register = Object.assign(_register, {\n success: createActionCreator(\"@@AUTH/REGISTER/SUCCESS\", resolve => (email: string) => resolve(email)),\n error: createActionCreator(\"@@AUTH/REGISTER/ERROR\", resolve => (error: string) => resolve(error)),\n});\n\nconst resendConfirmationEmail = Object.assign(_resendConfirmationEmail, {});\n\nconst resetPassword = Object.assign(_resetPassword, {});\n\nconst updateSubscriptions = Object.assign(_updateSubscriptions, {\n success: createActionCreator(\"@AUTH/SUBSCRIPTIONS\", resolve => (subscriptions: IdNameModel[]) =>\n resolve(subscriptions)\n ),\n});\n\nconst upsertAddress = Object.assign(_upsertAddress, {\n createSuccess: createActionCreator(\"@AUTH/ADDRESS/CREATE\", resolve => (address: IUserAddress) => resolve(address)),\n updateSuccess: createActionCreator(\"@AUTH/ADDRESS/UPDATE\", resolve => (address: IUserAddress) => resolve(address)),\n});\n\nconst defaultState: State = {\n email: null,\n retrieved: false,\n user: null,\n token: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(login.success, (state, action) => ({\n ...state,\n user: action.payload.user,\n token: action.payload.accessToken,\n retrieved: true,\n })),\n handleAction(login.noUser, () => ({ ...defaultState, retrieved: true })),\n handleAction(login.refreshToken, (state, action) => ({ ...state, token: action.payload })),\n handleAction(logout.success, state => ({ ...state, user: null, token: null })),\n handleAction(register.success, (state, action) => ({ ...state, email: action.payload })),\n handleAction(common.updateAddress, (state, action) =>\n produce(state, draft => {\n draft.user && (draft.user.addresses[0] = action.payload);\n })\n ),\n handleAction(upsertAddress.createSuccess, (state, action) =>\n produce(state, draft => {\n draft.user?.addresses?.push(action.payload);\n })\n ),\n handleAction(updateSubscriptions.success, (state, action) =>\n produce(state, draft => {\n draft.user && (draft.user.emailChannels = action.payload);\n })\n ),\n handleAction(upsertAddress.updateSuccess, (state, action) =>\n produce(state, draft => {\n const restAddrs: IUserAddress[] = draft.user?.addresses.filter(a => a.id !== action.payload.id) || [];\n draft.user?.addresses && (draft.user.addresses = [...restAddrs, action.payload]);\n })\n ),\n]);\n\nconst actions = {\n changePassword,\n changePasswordByToken,\n confirmEmail,\n editAccount,\n initUserState,\n login,\n logout,\n register,\n resendConfirmationEmail,\n resetPassword,\n updateSubscriptions,\n upsertAddress,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport moment from \"moment\";\nimport { Order, OrderStatus, UpsertOrder } from \"../../models/orders\";\nimport * as ordersService from \"../../services/orders\";\nimport { withErrorDispatch } from \"./withErrorDispatch\";\n\nexport type State = Order[];\n\nconst changeStatus = Object.assign(\n (orderId: number, newStatus: OrderStatus) =>\n withErrorDispatch(\n ordersService.changeStatus(orderId, newStatus),\n () => changeStatus.success({ orderId, newStatus }),\n \"Error changing order status\"\n ),\n {\n success: createActionCreator(\n \"@@ADMIN/ORDERS/CHANGE_STATUS\",\n resolve => (result: { orderId: number; newStatus: OrderStatus }) => resolve(result)\n ),\n }\n);\n\nconst createOrder = Object.assign(\n (order: UpsertOrder) =>\n withErrorDispatch(\n ordersService.createOrderAdmin(order),\n result => createOrder.success(result),\n \"Error creating order\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/ORDERS/CREATE\", resolve => (result: Order) => resolve(result)),\n }\n);\n\nconst editOrder = Object.assign(\n (id: number, order: UpsertOrder) =>\n withErrorDispatch(\n ordersService.editOrderAdmin(id, order),\n order => editOrder.success(order),\n \"Error updating order\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/ORDERS/EDIT\", resolve => (result: Order) => resolve(result)),\n }\n);\n\nconst deleteOrder = Object.assign(\n (id: number) =>\n withErrorDispatch(ordersService.deleteOrder(id), order => deleteOrder.success(id), \"Error deleting order\"),\n {\n success: createActionCreator(\"@@ADMIN/ORDERS/DELETE\", resolve => (orderId: number) => resolve(orderId)),\n }\n);\n\nconst fetchOrders = Object.assign(\n () => withErrorDispatch(ordersService.getAll(), result => fetchOrders.success(result), \"Error fetching orders\"),\n {\n success: createActionCreator(\"@@ADMIN/ORDERS\", resolve => (result: Order[]) => resolve(result)),\n }\n);\n\nconst defaultState: State = [];\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(changeStatus.success, (state, action) =>\n produce(state, draft => {\n const order = draft.find(o => o.id === action.payload.orderId);\n if (order) {\n order.status = action.payload.newStatus;\n order.completedDate =\n action.payload.newStatus === OrderStatus.Cancelled || action.payload.newStatus === OrderStatus.Completed\n ? moment().utc().toDate()\n : null;\n }\n })\n ),\n handleAction(createOrder.success, (state, action) => [...state, action.payload]),\n handleAction(editOrder.success, (state, action) => {\n return [...state.filter(o => o.id !== action.payload.id), action.payload];\n }),\n handleAction(fetchOrders.success, (state, action) => action.payload),\n handleAction(deleteOrder.success, (state, action) => [...state.filter(o => o.id !== action.payload)]),\n]);\n\nconst actions = {\n changeStatus,\n createOrder,\n deleteOrder,\n editOrder,\n fetchOrders,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { Dispatch } from \"redux\";\nimport { ContactInformation, ContactUsRequest } from \"../models/misc\";\nimport * as contactService from \"../services/contact\";\n\nexport type State = {\n information: ContactInformation | null;\n};\n\nconst fetchContactInformation = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await contactService.getContactInformation();\n dispatch(fetchContactInformation.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATA/CONTACT_INFORMATION/FETCH\", resolve => (data: ContactInformation) =>\n resolve(data)\n ),\n }\n);\n\nconst sendMail = Object.assign(\n (request: ContactUsRequest) => async (dispatch: Dispatch) => {\n try {\n const response = await contactService.sendContactUsMail(request);\n return response\n } catch {\n return;\n }\n },\n {}\n);\n\nconst defaultState: State = {\n information: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchContactInformation.success, (state, action) => ({ ...state, information: action.payload })),\n]);\n\nconst actions = {\n fetchContactInformation,\n sendMail,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { Show } from \"../models/misc\";\nimport * as showsService from \"../services/shows\";\nimport { withErrorDispatch } from \"./admin/withErrorDispatch\";\n\nexport type State = Show[];\n\nconst fetchAllShows = Object.assign(\n () =>\n withErrorDispatch(showsService.getAll(true), result => fetchAllShows.success(result), \"Error fetching all shows\"),\n {\n success: createActionCreator(\"@@ADMIN/SHOWS/GET_ALL\", resolve => (shows: Show[]) => resolve(shows)),\n }\n);\n\nconst defaultState: State = [];\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchAllShows.success, (state, action) => action.payload),\n]);\n\nconst actions = {\n fetchAllShows,\n};\n\nexport { actions, reducer };\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"styles_container__Jg8mH\",\"column\":\"styles_column__2gAD8\",\"row\":\"styles_row__1OqG4\",\"btn\":\"styles_btn__2lM-Q\"};","import Axios from \"axios\";\nimport { authorizationHeader } from \"./apiUtils\";\nimport { Color, Country, IdNameModel, Shape } from \"../models/misc\";\n\nconst routes = {\n business_types: \"/api/data/business_types\",\n countries: \"/api/data/countries\",\n diamonds: {\n clarities: \"https://www.alonavinoam.com/api/data/diamonds/clarities\",\n colors: \"https://www.alonavinoam.com/api/data/diamonds/colors\",\n cuts: \"https://www.alonavinoam.com/api/data/diamonds/cuts\",\n fluors: \"https://www.alonavinoam.com/api/data/diamonds/fluors\",\n labs: \"https://www.alonavinoam.com/api/data/diamonds/labs\",\n polishes: \"https://www.alonavinoam.com/api/data/diamonds/polishes\",\n shapes: \"https://www.alonavinoam.com/api/data/diamonds/shapes\",\n symmetries: \"https://www.alonavinoam.com/api/data/diamonds/symmetries\",\n fancyIntensities: \"https://www.alonavinoam.com/api/data/diamonds/fancyIntensities\",\n },\n};\n\nconst getBusinessTypes = async (): Promise =>\n (await Axios.get(routes.business_types)).data;\n\nconst getCountries = async (): Promise => (await Axios.get(routes.countries)).data;\n\nconst getClarities = async (): Promise =>\n (\n await Axios.get(routes.diamonds.clarities, {\n headers: authorizationHeader(),\n })\n ).data;\n\nconst getColors = async (): Promise =>\n (\n await Axios.get(routes.diamonds.colors, {\n headers: authorizationHeader(),\n })\n ).data;\n\nconst getCuts = async (): Promise =>\n (\n await Axios.get(routes.diamonds.cuts, {\n headers: authorizationHeader(),\n })\n ).data;\n\nconst getFluors = async (): Promise =>\n (\n await Axios.get(routes.diamonds.fluors, {\n headers: authorizationHeader(),\n })\n ).data;\n\nconst getLabs = async (): Promise =>\n (\n await Axios.get(routes.diamonds.labs, {\n headers: authorizationHeader(),\n })\n ).data;\n\nconst getPolishes = async (): Promise =>\n (\n await Axios.get(routes.diamonds.polishes, {\n headers: authorizationHeader(),\n })\n ).data;\n\nconst getShapes = async (): Promise =>\n (\n await Axios.get(routes.diamonds.shapes, {\n headers: authorizationHeader(),\n })\n ).data;\n\nconst getSymmetries = async (): Promise =>\n (\n await Axios.get(routes.diamonds.symmetries, {\n headers: authorizationHeader(),\n })\n ).data;\n\nconst getFancyIntensities = async (): Promise =>\n (\n await Axios.get(routes.diamonds.fancyIntensities,{\n headers: authorizationHeader()\n })\n ).data;\n\nconst diamonds = {\n getClarities,\n getColors,\n getCuts,\n getFluors,\n getLabs,\n getPolishes,\n getShapes,\n getSymmetries,\n getFancyIntensities,\n};\n\nexport { diamonds, getBusinessTypes, getCountries };\n","import Axios, { AxiosResponse } from \"axios\";\nimport { DiamondStatusEnum, DiamondsType, Product, UpsertDiamondModel } from \"../models/products\";\nimport { removeEmptyStrings } from \"../utils\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n diamonds: \"/api/aglam\",\n diamond: \"/api/diamonds/{id}\",\n diamondActiveStatus: \"/api/diamonds/{id}/active\",\n diamondStatus: \"/api/diamonds/{id}/status\",\n getHighlighted: \"/api/diamonds/highlighted\",\n highlight: \"/api/diamonds/{id}/highlight\",\n import: \"/api/diamonds/import\",\n};\n\nconst addDiamond = async (diamond: UpsertDiamondModel): Promise> => {\n const data = removeEmptyStrings(diamond);\n\n const result = await Axios.post>(routes.diamonds, data, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst changeActiveStatus = async (diamondId: number, isActive: boolean): Promise => {\n const route = routes.diamondActiveStatus.replace(\"{id}\", diamondId.toString());\n await Axios.patch(\n route,\n { isActive },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst changeStatus = async (diamondId: number, status: DiamondStatusEnum): Promise => {\n const route = routes.diamondStatus.replace(\"{id}\", diamondId.toString());\n const response = await Axios.patch(\n route,\n { status },\n {\n headers: authorizationHeader(),\n }\n ).then(resp => resp);\n return response;\n};\n\nconst getAllDiamonds = async (availableOnly: boolean): Promise[]> => {\n const route = `https://www.alonavinoam.com${routes.diamonds}?availableonly=${availableOnly}`;\n\n const result = await Axios.get[]>(route, {\n headers: authorizationHeader(),\n });\n\n // console.log(result, \"result\");\n return result.data;\n};\n\nconst getDiamond = async (id: number): Promise> => {\n const route = routes.diamond.replace(\"{id}\", id.toString());\n const result = await Axios.get>(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst getHighlightedDiamond = async (): Promise> => {\n const result = await Axios.get>(routes.getHighlighted, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst highlight = async (id: number): Promise => {\n const route = routes.highlight.replace(\"{id}\", id.toString());\n await Axios.patch(route, null, {\n headers: authorizationHeader(),\n });\n};\n\nconst importCsv = async (file: File): Promise => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n await Axios.post(routes.import, formData, {\n headers: authorizationHeader(),\n });\n};\n\nconst updateDiamond = async (diamondId: number, request: UpsertDiamondModel): Promise> => {\n const data = removeEmptyStrings(request);\n const route = routes.diamond.replace(\"{id}\", diamondId.toString());\n const result = await Axios.put>(route, data, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nexport {\n addDiamond,\n changeActiveStatus,\n changeStatus,\n getAllDiamonds,\n getDiamond,\n highlight,\n getHighlightedDiamond,\n importCsv,\n updateDiamond,\n};\n","const authorizationHeader = (token?: string): { Authorization: string } => {\n const bearer = token || localStorage.getItem(\"access-token\");\n\n return {\n Authorization: `Bearer ${bearer}`,\n };\n};\n\nexport { authorizationHeader };\n","import Axios from \"axios\";\nimport { ContactInformation, ContactUsRequest, Support } from \"../models/misc\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n contactInformation: \"/api/contact\",\n contactUs: \"/api/contact/send\",\n support: \"/api/contact/support\",\n};\n\nconst getContactInformation = async (): Promise => {\n const result = await Axios.get(routes.contactInformation);\n return result.data;\n};\n\nconst sendContactUsMail = async (request: ContactUsRequest): Promise => {\n const response = await Axios.post(routes.contactUs, request);\n return response.status\n};\n\nconst updateContactInformation = async (information: ContactInformation): Promise =>\n await Axios.put(routes.contactInformation, information, {\n headers: authorizationHeader(),\n });\n\nconst getSupportInfo = async (): Promise => {\n const result = await Axios.get(routes.support);\n return result.data;\n};\n\nconst updateSupportInfo = async (information: Support): Promise =>\n await Axios.put(routes.support, information, {\n headers: authorizationHeader(),\n });\n\nexport { getContactInformation, sendContactUsMail, updateContactInformation, getSupportInfo, updateSupportInfo };\n","import Axios from \"axios\";\nimport { authorizationHeader } from \"./apiUtils\";\nimport {\n OneOfAKindProduct,\n Bracelet,\n Earring,\n Necklace,\n Pendant,\n Ring,\n TennisNecklace,\n Stud,\n UpsertProduct,\n Product,\n} from \"../models/products\";\n\nconst routes = {\n products: \"/api/products\",\n product: \"/api/products/{stockNumber}\",\n import: \"/api/products/import\",\n export: \"/api/products/export\",\n};\n\nconst getAll = async (): Promise => {\n const route = `${routes.products}?type=all`;\n const result = await Axios.get(route, {\n headers: authorizationHeader(),\n });\n return result.data;\n};\n\nconst getSingleProduct = async (stockNumber: string): Promise => {\n const route = `${routes.products}/${stockNumber}`;\n const result = await Axios.get(route, {\n headers: authorizationHeader(),\n });\n return result.data;\n};\n\nconst addProduct = async (product: UpsertProduct) => {\n try {\n product.status = product.inStockQty > 0 ? 'Available' : 'Unavailable';\n\n const result = await Axios.post(routes.products, product, {\n headers: authorizationHeader()\n });\n return result.data;\n } catch (error) {\n const err: any = error;\n throw new Error('Error posting the data: ' + err.message);\n\n }\n};\n\nconst edit = async (stockNumber: string, model: UpsertProduct): Promise => {\n const route = routes.product.replace(\"{stockNumber}\", stockNumber);\n const result = await Axios.patch(route, model, {\n headers: authorizationHeader(),\n });\n return result.data;\n};\n\nconst delProduct = async (stockNumber: string) => {\n try {\n await Axios.delete(`${routes.products}/${stockNumber}`, {\n headers: authorizationHeader(),\n });\n return { success: true };\n } catch (error) {\n return { success: false, error };\n }\n};\n\nconst onExportCsv = async () => {\n try {\n const response = await Axios.get(routes.export, {\n headers: authorizationHeader(),\n responseType: 'blob',\n });\n\n const blob = new Blob([response.data], { type: 'text/csv' });\n\n const url = window.URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = url;\n link.setAttribute('download', 'products.csv');\n\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n } catch (error) {\n throw new Error(\"Error downloading file\");\n }\n};\n\n\nconst importCsv = async (file: File): Promise => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n await Axios.post(routes.import, formData, {\n headers: authorizationHeader(),\n });\n};\n\nexport { getAll, getSingleProduct, addProduct, edit, delProduct, importCsv, onExportCsv };\n","import Axios from \"axios\";\nimport { EmailChannel, EmailTemplate, MemoConfirmEmail, SubscriptionEmail, UpsertEmailTemplate } from \"../models/misc\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n channel: \"/api/emails/channels/{id}\",\n channels: \"/api/emails/channels\",\n sendEmail: \"/api/emails/send\",\n template: \"/api/emails/templates/{id}\",\n templates: \"/api/emails/templates\",\n memoConfirm: \"/api/emails/confirmMemo\"\n};\n\nconst createChannel = async (name: string): Promise => {\n const result = await Axios.post(\n routes.channels,\n { name },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst createTemplate = async (template: UpsertEmailTemplate): Promise => {\n const result = await Axios.post(routes.templates, template, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst deleteTemplate = async (templateId: number): Promise => {\n const route = routes.template.replace(\"{id}\", templateId.toString());\n await Axios.delete(route, {\n headers: authorizationHeader(),\n });\n};\n\nconst editTemplate = async (templateId: number, template: UpsertEmailTemplate): Promise => {\n const route = routes.template.replace(\"{id}\", templateId.toString());\n await Axios.put(route, template, {\n headers: authorizationHeader(),\n });\n};\n\nconst getChannels = async (): Promise => {\n const result = await Axios.get(routes.channels, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst getTemplates = async (): Promise => {\n const result = await Axios.get(routes.templates, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst sendEmail = async (email: SubscriptionEmail): Promise => {\n await Axios.post(routes.sendEmail, email, {\n headers: authorizationHeader(),\n });\n};\n\nconst sendMemoConfirmEmail = async (message : MemoConfirmEmail): Promise =>{\n await Axios.post(routes.memoConfirm, message,{\n headers: authorizationHeader(),\n })\n}\n\nexport { createChannel, createTemplate, deleteTemplate, editTemplate, getChannels, getTemplates, sendEmail, sendMemoConfirmEmail };\n","// In production, we register a service worker to serve assets from local cache.\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const url = process.env.PUBLIC_URL as string;\n const publicUrl = new URL(url, window.location.toString());\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won\"t work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing as ServiceWorker;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It\"s the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log(\"New content is available; please refresh.\");\n caches\n .delete(\"workbox-precache-v2-https://alonavinoam.com/\")\n .then(isGone => console.log(\"Is Cache Gone:\", isGone));\n } else {\n // At this point, everything has been precached.\n // It\"s the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n }\n }\n };\n };\n })\n .catch(error => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string) {\n // Check if the service worker can be found. If it can\"t reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (response.status === 404 || (contentType && contentType.indexOf(\"javascript\") === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\"No internet connection found. App is running in offline mode.\");\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from \"react\";\nimport { Spinner } from \"reactstrap\";\n\nconst spinnerContainerStyle: React.CSSProperties = {\n height: \"100vh\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n};\n\nconst Loading = (): JSX.Element => {\n return (\n
\n \n
\n );\n};\n\nexport default Loading;\n","import React from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { Route, RouteProps } from \"react-router-dom\";\nimport { ApplicationState } from \"../store/store\";\n\ntype TProps = ConnectedProps &\n RouteProps & {\n component: React.LazyExoticComponent>;\n pageTitle: string;\n layout?: React.LazyExoticComponent>;\n withLogos?: boolean;\n };\n\nconst PublicRoute = ({\n component: Component,\n layout: Layout,\n withLogos,\n pageTitle,\n logoUrl,\n currentUser,\n ...rest\n}: TProps): JSX.Element => (\n {\n return Layout ? (\n <>\n \n {`${pageTitle} ${!logoUrl ? \"| Aglam\" : \"\"}`}\n \n \n \n \n \n \n ) : (\n <>\n \n {`${pageTitle} ${!logoUrl ? \"| Aglam\" : \"\"}`}\n \n \n \n \n );\n }}\n />\n);\n\nconst connector = connect(({ domain, auth }: ApplicationState) => ({\n logoUrl: domain.data && domain.data.logoUrl,\n currentUser: auth.user,\n}));\n\nexport default connector(PublicRoute);\n","import React, { useRef } from \"react\";\nimport IdleTimer from \"react-idle-timer\";\n\nconst IdleTimerComponent = () => {\n const onIdle = () => {\n window.location.reload();\n };\n return (\n
\n \n
\n );\n};\n\nexport default IdleTimerComponent;\n","import React, { lazy, Suspense, useEffect } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { Redirect, useHistory } from \"react-router-dom\";\nimport Loading from \"./components/loading\";\nimport PrivateRoute from \"./components/private-route\";\nimport PublicRoute from \"./components/public-route\";\nimport history from \"./history\";\nimport * as auth from \"./store/auth\";\nimport * as domain from \"./store/domain\";\nimport { actions as dataActions } from \"./store/data\";\nimport { actions as pushNotificationsActions } from \"../src/store/pushNotifications\";\nimport { ApplicationState } from \"./store/store\";\nimport ReactGa from \"react-ga\";\nimport IdleTimerComponent from \"./components/idleTimer\";\n\nconst layout = lazy(async () => import(\"./components/layout\"));\n\nconst cart = lazy(() => import(\"./pages/cart/index\"));\nconst shows = lazy(() => import(\"./pages/shows\"));\nconst home = lazy(() => import(\"./pages/home/index\"));\nconst welcome = lazy(() => import(\"./pages/welcome\"));\nconst contact = lazy(() => import(\"./pages/contact\"));\nconst aboutUs = lazy(() => import(\"./pages/about-us\"));\nconst login = lazy(() => import(\"./pages/login/login\"));\nconst admin = lazy(() => import(\"./pages/admin/admin-home\"));\nconst account = lazy(() => import(\"./pages/account/account\"));\nconst maintenance = lazy(() => import(\"./pages/maintenance\"));\nconst registration = lazy(() => import(\"./pages/registration\"));\nconst confirmEmail = lazy(() => import(\"./pages/confirm-email\"));\nconst resetPassword = lazy(() => import(\"./pages/reset-password\"));\nconst changePassword = lazy(() => import(\"./pages/change-password\"));\nconst singleProduct = lazy(() => import(\"./pages/singleProduct\"));\nconst oneOfAKind = lazy(() => import(\"./pages/one-of-a-kind\"));\nconst tennisNecklaces = lazy(() => import(\"./pages/tennis-necklaces\"));\nconst studs = lazy(() => import(\"./pages/studs\"));\n\nconst Router = (props: TProps) => {\n const { fetchIsMaintenance, initUserState, fetchDomainLayout, user } = props;\n // const isServiceWorkerUpdated = useSelector(state => state.pushNotifications.data);\n\n const router = useHistory();\n useEffect(() => {\n ReactGa.pageview(window.location.pathname + window.location.search);\n fetchIsMaintenance();\n initUserState();\n }, [fetchIsMaintenance, initUserState, router.location.pathname]);\n useEffect(() => {\n fetchDomainLayout();\n }, [fetchDomainLayout]);\n\n return props.retrieved ? (\n }>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {props.isMaintenance && !history.location.pathname.startsWith(\"/admin\") && }\n \n ) : null;\n};\n\nconst connector = connect(\n ({ auth: authDate, data }: ApplicationState) => ({\n retrieved: authDate.retrieved,\n isMaintenance: data.maintenance.isEnabled,\n user: authDate?.user,\n }),\n {\n fetchIsMaintenance: dataActions.fetchMaintenanceState,\n initUserState: auth.actions.initUserState,\n fetchDomainLayout: domain.actions.fetchDomainLayout,\n ...pushNotificationsActions,\n }\n);\n\ntype TProps = ConnectedProps;\n\nexport default connector(Router);\n","import MomentUtils from \"@date-io/moment\";\nimport { MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport { ConnectedRouter } from \"connected-react-router\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport history from \"./history\";\nimport registerServiceWorker from \"./registerServiceWorker\";\nimport Router from \"./router\";\nimport { store } from \"./store/store\";\nimport ReactGa from \"react-ga\";\n\nimport \"../src/css/styles.module.scss\"\n\n// workaround for having the style.css after bootstrap as the auto sorting messes it up\nrequire(\"./css/style.css\");\n//for production\nReactGa.initialize(\"UA-61571979-3\");\n//for dev testing\n// ReactGa.initialize(\"UA-193626086-1\")\nReactDOM.render(\n \n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\nregisterServiceWorker();\n","export const USER_PRIMARY_COLOR_REGEX = new RegExp(\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\");\n\nexport const LOCAL_STORAGE_PRIMARY_COLOR = \"primaryColor\";\n\nexport const SITE_DEFAULT_PRIMARY_COLOR = \"#5f8eb1\";\n\nexport const REFETCH_DATA_INTERVAL = 15 * 60 * 1000;\n","import { createActionCreator, createReducer } from \"deox\";\nimport { IdNameModel } from \"../../models/misc\";\nimport * as dataService from \"../../services/data\";\nimport { withErrorDispatch } from \"./withErrorDispatch\";\n\nexport type State = {\n countries: IdNameModel[];\n};\n\nconst fetchCountries = Object.assign(\n () =>\n withErrorDispatch(dataService.getCountries(), result => fetchCountries.success(result), \"Error fetching countries\"),\n {\n success: createActionCreator(\"@@ADMIN/DATA/COUNTRIES\", resolve => (items: IdNameModel[]) => resolve(items)),\n }\n);\n\nconst defaultState: State = {\n countries: [],\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchCountries.success, (state, action) => ({ ...state, countries: action.payload })),\n]);\n\nconst actions = {\n fetchCountries,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { EmailChannel, EmailTemplate, SubscriptionEmail, UpsertEmailTemplate } from \"../../models/misc\";\nimport * as emailsService from \"../../services/emails\";\nimport { withErrorDispatch } from \"./withErrorDispatch\";\n\nexport type State = {\n channels: EmailChannel[];\n templates: EmailTemplate[];\n};\n\nconst createChannel = Object.assign(\n (channel: string) =>\n withErrorDispatch(\n emailsService.createChannel(channel),\n result => createChannel.success(result),\n \"Error creating a channel\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/EMAILS/CHANNELS/CREATE\", resolve => (channel: EmailChannel) =>\n resolve(channel)\n ),\n }\n);\n\nconst createTemplate = Object.assign(\n (template: UpsertEmailTemplate) =>\n withErrorDispatch(\n emailsService.createTemplate(template),\n templateId => createTemplate.success({ ...template, id: templateId }),\n \"Error creating template\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/EMAILS/TEMPLATES/CREATE\", resolve => (template: EmailTemplate) =>\n resolve(template)\n ),\n }\n);\n\nconst deleteTemplate = Object.assign(\n (templateId: number) =>\n withErrorDispatch(\n emailsService.deleteTemplate(templateId),\n () => deleteTemplate.success(templateId),\n \"Error deleting template\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/EMAILS/TEMPLATES/DELETE\", resolve => (templateId: number) =>\n resolve(templateId)\n ),\n }\n);\n\nconst editTemplate = Object.assign(\n (templateId: number, template: UpsertEmailTemplate) =>\n withErrorDispatch(\n emailsService.editTemplate(templateId, template),\n () => editTemplate.success({ ...template, id: templateId }),\n \"Error editing template\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/EMAILS/TEMPLATES/EDIT\", resolve => (template: EmailTemplate) =>\n resolve(template)\n ),\n }\n);\n\nconst fetchChannels = Object.assign(\n () =>\n withErrorDispatch(\n emailsService.getChannels(),\n channels => fetchChannels.success(channels),\n \"Error fetching email channels\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/EMAILS/CHANNELS\", resolve => (channels: EmailChannel[]) => resolve(channels)),\n }\n);\n\nconst fetchTemplates = Object.assign(\n () =>\n withErrorDispatch(\n emailsService.getTemplates(),\n templates => fetchTemplates.success(templates),\n \"Error fetching email templates\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/EMAILS/TEMPLATES\", resolve => (templates: EmailTemplate[]) =>\n resolve(templates)\n ),\n }\n);\n\nconst sendEmail = Object.assign(\n (email: SubscriptionEmail) =>\n withErrorDispatch(emailsService.sendEmail(email), null, \"Error sending email\", \"Email scheduled for sending\"),\n {}\n);\n\nconst defaultState: State = {\n channels: [],\n templates: [],\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(createChannel.success, (state, action) =>\n produce(state, draft => {\n draft.channels.push(action.payload);\n })\n ),\n handleAction(createTemplate.success, (state, action) =>\n produce(state, draft => {\n draft.templates.push(action.payload);\n })\n ),\n handleAction(deleteTemplate.success, (state, action) =>\n produce(state, draft => {\n draft.templates = draft.templates.filter(t => t.id !== action.payload);\n })\n ),\n handleAction(editTemplate.success, (state, action) =>\n produce(state, draft => {\n draft.templates = [...draft.templates.filter(t => t.id !== action.payload.id), action.payload];\n })\n ),\n handleAction(fetchChannels.success, (state, action) => ({ ...state, channels: action.payload })),\n handleAction(fetchTemplates.success, (state, action) => ({ ...state, templates: action.payload })),\n]);\n\nconst actions = {\n createChannel,\n createTemplate,\n deleteTemplate,\n editTemplate,\n fetchChannels,\n fetchTemplates,\n sendEmail,\n};\n\nexport { actions, reducer };\n","import Axios from \"axios\"\nimport {Basket} from \"../models/basket\"\nimport { authorizationHeader } from \"./apiUtils\"\nconst routes ={\n fetchAll: \"/api/wishlist/fetch-all\"\n}\n\nconst getAll = async () : Promise =>{\n const result = await Axios.get(routes.fetchAll,{\n headers: authorizationHeader(),\n })\n const data = result.data.map(r =>({\n ...r,\n creationDate: new Date(r.creationDate)\n })\n )\n return data\n}\n\nexport {getAll}","import { withErrorDispatch } from \"./withErrorDispatch\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport * as basketServices from \"../../services/basket\"\nimport { Basket } from \"../../models/basket\";\n\nexport type State = Basket[];\n\nconst fetchBasketItems = Object.assign(\n () =>\n withErrorDispatch(basketServices.getAll(), result => fetchBasketItems.success(result), \"Error fetching basket items\"),\n {\n success: createActionCreator(\"@@ADMIN/BASKET_ITEMS\", resolve => (result: Basket[]) => resolve(result))\n }\n);\n\nconst defaultState: State = [];\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchBasketItems.success, (state, action) => action.payload)\n])\n\nconst actions = {\n fetchBasketItems\n}\n\nexport {actions, reducer}","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { Product, RingSetting, UpsertRingSetting } from \"../../models/products\";\nimport * as ringSettingService from \"../../services/ringSettings\";\nimport { actions as messageActions } from \"./messages\";\nimport { withErrorDispatch } from \"./withErrorDispatch\";\n\nexport type State = Product[];\n\nconst defaultState: State = [];\n\nconst addRingSetting = Object.assign(\n (model: UpsertRingSetting) => async (dispatch: Dispatch) => {\n try {\n const result = await ringSettingService.addRingSetting(model);\n dispatch(addRingSetting.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@RINGSETTING/ADD\", resolve => (ringSetting: Product) =>\n resolve(ringSetting)\n ),\n }\n);\n\nconst fetchRingSettings = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await ringSettingService.getAllRingSettings();\n dispatch(fetchRingSettings.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@RINGSETTING/FETCH\", resolve => (ringSettings: Product[]) =>\n resolve(ringSettings)\n ),\n }\n);\n\nconst editRingSetting = Object.assign(\n (id: number, model: UpsertRingSetting) => async (dispatch: Dispatch) => {\n try {\n await ringSettingService.edit(id, model);\n dispatch(editRingSetting.success({ id, item: model }));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@RINGSETTING/EDIT\", resolve => (data: { id: number; item: UpsertRingSetting }) =>\n resolve(data)\n ),\n }\n);\n\nconst deleteRingSetting = Object.assign(\n (ringId: number) =>\n withErrorDispatch(\n ringSettingService.deleteRingSetting(ringId),\n () => deleteRingSetting.success(ringId),\n \"Error deleting ring setting\"\n ),\n {\n success: createActionCreator(\"@@ADMIN/RINGSETTING/DELETE\", resolve => (ringId: number) => resolve(ringId)),\n }\n);\n\nconst importCsv = Object.assign(\n (file: File) => async (dispatch: Dispatch) => {\n try {\n await ringSettingService.importCsv(file);\n\n messageActions.commit(\"Import successul. The page will reload to show the updated data\", \"info\")(dispatch);\n\n setTimeout(() => window.location.reload(), 2000);\n } catch {\n messageActions.commit(\"Error importing file\", \"error\")(dispatch);\n }\n },\n {}\n);\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(addRingSetting.success, (state, action) => state.concat(action.payload)),\n // handleAction(changeMeleeStatus.success, (state, action) =>\n // produce(state, draft => {\n // const item = draft.find(i => i.id === action.payload.id);\n // item && (item.isActive = action.payload.isActive);\n // })\n // ),\n handleAction(editRingSetting.success, (state, action) =>\n produce(state, draft => {\n const item = state.find(i => i.id === action.payload.id);\n if (!item) {\n return;\n }\n const itemIndex = draft.findIndex(i => i.id === action.payload.id);\n const newItem = {\n id: item.id,\n isActive: item.isActive,\n product: { ...action.payload.item, id: item.product.id, imageUrl: item.product.imageUrl },\n };\n draft[itemIndex] = newItem;\n return draft;\n })\n ),\n handleAction(fetchRingSettings.success, (state, action) => action.payload),\n\n handleAction(deleteRingSetting.success, (state, action) =>\n produce(state, draft => {\n const newRingArray = state.filter(r => r.product.id !== action.payload);\n draft = newRingArray;\n return draft;\n })\n ),\n]);\n\nconst actions = {\n addRingSetting,\n editRingSetting,\n fetchRingSettings,\n deleteRingSetting,\n importCsv,\n};\n\nexport { actions, reducer };\n","import { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { actions as messageActions } from \"./messages\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport * as genericDiamondsService from \"../../services/genericDiamonds\";\nimport { GenericDiamond, UpsertGenericDiamond } from \"../../models/genericDiamond\";\n\nexport type State = GenericDiamond[];\n\nconst defaultState: State = [];\n\nconst fetchGenericDiamonds = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await genericDiamondsService.getAllGenericDiamonds();\n dispatch(fetchGenericDiamonds.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ADMIN/GENERIC_DIAMOND/FETCH\", resolve => (genericDiamonds: GenericDiamond[]) =>\n resolve(genericDiamonds)\n ),\n }\n);\n\nconst editGenericDiamond = Object.assign(\n (id: number | undefined, model: GenericDiamond) => async (dispatch: Dispatch) => {\n try {\n await genericDiamondsService.editGenericDiamond(id ? id : 0, model);\n dispatch(editGenericDiamond.success({ ...model, id: id }));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ADMIN/GENERIC_DIAMOND/EDIT\", resolve => (data: GenericDiamond) => resolve(data)),\n }\n);\n\nconst addGenericDiamond = Object.assign(\n (model: GenericDiamond) => async (dispatch: Dispatch) => {\n try {\n const result = await genericDiamondsService.addGenericDiamond(model);\n dispatch(addGenericDiamond.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ADMIN/GENERIC_DIAMOND/ADD\", resolve => (data: GenericDiamond) => resolve(data)),\n }\n);\n\nconst importCsv = Object.assign(\n (file: File) => async (dispatch: Dispatch) => {\n try {\n await genericDiamondsService.importCsv(file);\n\n messageActions.commit(\"Import successul. The page will reload to show the updated data\", \"info\")(dispatch);\n\n setTimeout(() => window.location.reload(), 2000);\n } catch {\n messageActions.commit(\"Error importing file\", \"error\")(dispatch);\n }\n },\n {}\n);\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchGenericDiamonds.success, (state, action) => action.payload),\n\n handleAction(addGenericDiamond.success, (state, action) => state.concat(action.payload)),\n\n handleAction(editGenericDiamond.success, (state, action) =>\n produce(state, draft => {\n const item = state.find(i => i.id === action.payload.id);\n if (!item) {\n return;\n }\n const itemIndex = draft.findIndex(i => i.id === action.payload.id);\n const newItem = {\n id: item.id,\n ...action.payload,\n };\n draft[itemIndex] = newItem;\n return draft;\n })\n ),\n]);\n\nconst actions = {\n fetchGenericDiamonds,\n editGenericDiamond,\n addGenericDiamond,\n importCsv,\n};\n\nexport { actions, reducer };\n","import Axios from \"axios\";\nimport { authorizationHeader } from \"./apiUtils\";\nimport { EternityRing } from \"../models/products\";\n\nconst routes = {\n eternityRings: \"/api/eternity_rings\",\n // genericDiamond: \"/api/generic_diamonds/{id}\",\n import: \"/api/eternity_rings/import\",\n};\n\nconst getAllEternityRings = async (): Promise => {\n const route = `${routes.eternityRings}`;\n\n const result = await Axios.get(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst deleteAllEternityRings = async () => {\n const route = `${routes.eternityRings}`;\n\n const result = await Axios.delete(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\n// const addGenericDiamond = async (diamond: UpsertGenericDiamond): Promise => {\n// const result = await Axios.post(routes.genericDiamonds, diamond, {\n// headers: authorizationHeader(),\n// });\n\n// return result.data;\n// };\n\n// const editGenericDiamond = async (id: number, model: UpsertGenericDiamond): Promise => {\n// const route = routes.genericDiamond.replace(\"{id}\", id.toString());\n// await Axios.patch(route, model, {\n// headers: authorizationHeader(),\n// });\n// };\n\nconst importCsv = async (file: File): Promise => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n await Axios.post(routes.import, formData, {\n headers: authorizationHeader(),\n });\n};\n\nexport { getAllEternityRings, deleteAllEternityRings, importCsv };\n","import { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { actions as messageActions } from \"./messages\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport * as eternityRingService from \"../../services/eternityRings\";\nimport { EternityRing } from \"../../models/products\";\n// import { GenericDiamond, UpsertGenericDiamond, } from \"../../models/genericDiamond\";\n\nexport type State = EternityRing[];\n\nconst defaultState: State = [];\n\nconst fetchEternityRings = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await eternityRingService.getAllEternityRings();\n dispatch(fetchEternityRings.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ADMIN/ETERNITY_RINGS/FETCH\", resolve => (data: EternityRing[]) =>\n resolve(data)\n ),\n }\n);\n\n// const editGenericDiamond = Object.assign(\n// (id: number | undefined, model: GenericDiamond) => async (dispatch: Dispatch) => {\n// try {\n// await genericDiamondsService.editGenericDiamond(id ? id : 0, model);\n// dispatch(editGenericDiamond.success({ ...model, id: id }));\n// } catch {\n// return;\n// }\n// },\n// {\n// success: createActionCreator(\"@@ADMIN/GENERIC_DIAMOND/EDIT\", resolve => (data: GenericDiamond) => resolve(data)),\n// }\n// );\n\n// const addGenericDiamond = Object.assign(\n// (model: GenericDiamond) => async (dispatch: Dispatch) => {\n// try {\n// const result = await genericDiamondsService.addGenericDiamond(model);\n// dispatch(addGenericDiamond.success(result));\n// } catch {\n// return;\n// }\n// },\n// {\n// success: createActionCreator(\"@@ADMIN/GENERIC_DIAMOND/ADD\", resolve => (data: GenericDiamond) => resolve(data)),\n// }\n// );\n\nconst deleteAllEternityRings = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n await eternityRingService.deleteAllEternityRings()\n\n messageActions.commit(\"Delete successul. The page will reload to show the updated data\", \"info\")(dispatch);\n\n setTimeout(() => window.location.reload(), 2000);\n } catch {\n messageActions.commit(\"Error Deleting\", \"error\")(dispatch);\n }\n },\n {}\n);\n\nconst importCsv = Object.assign(\n (file: File) => async (dispatch: Dispatch) => {\n try {\n await eternityRingService.importCsv(file);\n\n messageActions.commit(\"Import successul. The page will reload to show the updated data\", \"info\")(dispatch);\n\n setTimeout(() => window.location.reload(), 2000);\n } catch {\n messageActions.commit(\"Error importing file\", \"error\")(dispatch);\n }\n },\n {}\n);\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchEternityRings.success, (state, action) => action.payload),\n\n // handleAction(addGenericDiamond.success, (state, action) => state.concat(action.payload)),\n\n // handleAction(editGenericDiamond.success, (state, action) =>\n // produce(state, draft => {\n // const item = state.find(i => i.id === action.payload.id);\n // if (!item) {\n // return;\n // }\n // const itemIndex = draft.findIndex(i => i.id === action.payload.id);\n // const newItem = {\n // id: item.id,\n // ...action.payload,\n // };\n // draft[itemIndex] = newItem;\n // return draft;\n // })\n // ),\n]);\n\nconst actions = {\n fetchEternityRings,\n deleteAllEternityRings,\n // editGenericDiamond,\n // addGenericDiamond,\n importCsv,\n};\n\nexport { actions, reducer };\n","import { combineReducers } from \"redux\";\nimport * as data from \"./data\";\nimport * as diamondsManagement from \"./diamondManagement\";\nimport * as emailsManagement from \"./emailsManagement\";\nimport * as meleeManagement from \"./meleeManagement\";\nimport * as messages from \"./messages\";\nimport * as orders from \"./orders\";\nimport * as showManagement from \"./showManagement\";\nimport * as siteSettings from \"./siteSettings\";\nimport * as userManagement from \"./userManagement\";\nimport * as basketItems from \"./basketItems\";\nimport * as ringSettings from \"./ringSettingManagement\";\nimport * as genericDiamonds from \"./genericDiamondsManagement\";\nimport * as eternityRings from \"./eternityRingsManagement\";\nimport * as productManagement from \"./productManagement\";\n\nexport type State = {\n data: data.State;\n diamonds: diamondsManagement.State;\n emails: emailsManagement.State;\n melee: meleeManagement.State;\n messages: messages.State;\n orders: orders.State;\n shows: showManagement.State;\n site: siteSettings.State;\n users: userManagement.State;\n basketItems: basketItems.State;\n ringSettings: ringSettings.State;\n genericDiamonds: genericDiamonds.State;\n eternityRings: eternityRings.State;\n productManagement: productManagement.State;\n};\n\nconst reducer = combineReducers({\n data: data.reducer,\n diamonds: diamondsManagement.reducer,\n emails: emailsManagement.reducer,\n melee: meleeManagement.reducer,\n messages: messages.reducer,\n shows: showManagement.reducer,\n site: siteSettings.reducer,\n orders: orders.reducer,\n users: userManagement.reducer,\n basketItems: basketItems.reducer,\n ringSettings: ringSettings.reducer,\n genericDiamonds: genericDiamonds.reducer,\n eternityRings: eternityRings.reducer,\n productManagement: productManagement.reducer,\n});\n\nexport { reducer };\n","import { createReducer } from \"deox\";\nimport * as auth from \"../store/auth\";\n\nexport type State = {\n login: string | null;\n register: string | null;\n};\n\nconst defaultState: State = {\n login: null,\n register: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(auth.actions.register.error, (state, action) => ({ ...state, register: action.payload })),\n handleAction(auth.actions.register.success, state => ({ ...state, register: null })),\n handleAction(auth.actions.login.error, (state, action) => ({ ...state, login: action.payload })),\n handleAction(auth.actions.login.success, state => ({ ...state, login: null })),\n]);\n\nexport { reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { Dispatch } from \"redux\";\nimport { REFETCH_DATA_INTERVAL } from \"../constants\";\nimport { MeleeStone, Product } from \"../models/products\";\nimport * as meleeService from \"../services/melee\";\nimport { store } from \"./store\";\n\nexport type State = Product[];\n\nconst fetchMelees = Object.assign(\n () => async (dispatch: Dispatch) => {\n const { melee } = store.getState()\n try {\n if(melee.length === 0){\n const data = await meleeService.getAll(true);\n dispatch(fetchMelees.success(data));\n\n }\n\n setInterval(async () => {\n const data = await meleeService.getAll(true);\n dispatch(fetchMelees.success(data));\n }, REFETCH_DATA_INTERVAL);\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@MELEES/FETCH\", resolve => (melees: Product[]) => resolve(melees)),\n }\n);\n\nconst defaultState: State = [];\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchMelees.success, (state, action) => action.payload),\n]);\n\nconst actions = {\n fetchMelees,\n};\n\nexport { actions, reducer };\n","import Axios from \"axios\";\nimport { EngagementRingConfig } from \"../models/engagementRingConfig\";\nimport { authorizationHeader } from \"./apiUtils\";\n\ntype EngagementRing = {\n diamond?: {\n stockId: string | null;\n };\n ringSetting?: {\n id: number | null;\n };\n};\n\nconst routes = {\n getSingle: \"/api/ring_config/single\",\n updateRing: \"/api/ring_config/update_ring\",\n updateDiamond: \"/api/ring_config/update_diamond\",\n};\n\nconst getUserEngagementRingConfig = async (): Promise => {\n const route = `${routes.getSingle}`;\n\n const result = await Axios.get(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst updateUserRingConfig = async (model: EngagementRing): Promise => {\n const route = routes.updateRing;\n await Axios.post(route, model, {\n headers: authorizationHeader(),\n });\n};\n\nconst updateUserDiamondConfig = async (model: EngagementRing): Promise => {\n const route = routes.updateDiamond;\n await Axios.post(route, model, {\n headers: authorizationHeader(),\n });\n};\n\n// const addRingSetting = async (ringSetting: UpsertRingSetting): Promise> => {\n// const result = await Axios.post>(routes.ringSettings, ringSetting, {\n// headers: authorizationHeader(),\n// });\n\n// return result.data;\n// };\n\nexport { getUserEngagementRingConfig, updateUserRingConfig, updateUserDiamondConfig };\n","import { Dispatch } from \"redux\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport { Diamond, RingSetting } from \"../models/products\";\nimport * as engagementRingService from \"../services/engagementRingConfig\";\n\nexport type State = {\n ringSetting: RingSetting | null;\n diamond: Diamond | null;\n};\n\nconst getEngagementRingConfig = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const data = await engagementRingService.getUserEngagementRingConfig();\n\n const modifiedData = {\n ringSetting: data.ringSetting,\n diamond: data.diamond,\n };\n dispatch(getEngagementRingConfig.success(modifiedData));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ENGAGEMENT_RING/GET_ENGAGEMENT_SETTING\", resolve => (data: State) => resolve(data)),\n }\n);\n\nconst addRingSettingToEngagementConfig = Object.assign(\n (itemId: number | null) => async (dispatch: Dispatch) => {\n try {\n const data = await engagementRingService.updateUserRingConfig({\n ringSetting: {\n id: itemId,\n },\n });\n dispatch(addRingSettingToEngagementConfig.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ENGAGEMENT_RING/ADD_RING_SETTING\", resolve => (data: void) => resolve(data)),\n }\n);\n\nconst addDiamondToEngagementConfig = Object.assign(\n (stockId: string | null) => async (dispatch: Dispatch) => {\n try {\n const data = await engagementRingService.updateUserDiamondConfig({\n diamond: {\n stockId,\n },\n });\n dispatch(addDiamondToEngagementConfig.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ENGAGEMENT_RING/ADD_DIAMOND\", resolve => (data: void) => resolve(data)),\n }\n);\n\n// const addDiamondToEngagementConfig = Object.assign(\n// (itemId: number) => async (dispatch: Dispatch) => {\n// try {\n// console.log(itemId);\n// } catch {\n// return;\n// }\n// },\n// {\n// success: createActionCreator(\"@@ENGAGEMENT_RING/ADD_DIAMOND\", resolve => (diamond: Diamond) => resolve(diamond)),\n// }\n// );\n\nconst defaultState: State = {\n ringSetting: null,\n diamond: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(getEngagementRingConfig.success, (state, action) => ({\n ...state,\n ringSetting: action.payload.ringSetting,\n diamond: action.payload.diamond,\n })),\n]);\n\nconst actions = {\n getEngagementRingConfig,\n addRingSettingToEngagementConfig,\n addDiamondToEngagementConfig,\n};\n\nexport { actions, reducer };\n","import { createReducer, createActionCreator } from \"deox\";\nimport { GenericDiamond } from \"../models/genericDiamond\";\nimport { RingSetting } from \"../models/products\";\n\nexport type State = {\n singlePage: boolean;\n ringSetting: RingSetting | null;\n genericDiamond: GenericDiamond | null;\n};\n\nconst singlePageView = Object.assign(\n {},\n {\n success: createActionCreator(\"@@COMPLETED_RING/SINGLE_PAGE_VIEW\", resolve => (singlePage: boolean) =>\n resolve(singlePage)\n ),\n }\n);\n\nconst selectRingSetting = Object.assign(\n {},\n {\n success: createActionCreator(\"@@COMPLETED_RING/SELECT_RING_SETTING\", resolve => (ringSetting: RingSetting | null) =>\n resolve(ringSetting)\n ),\n }\n);\n\nconst selectGenericDiamond = Object.assign(\n {},\n {\n success: createActionCreator(\n \"@@COMPLETED_RING/SELECT_GENERIC_DIAMOND\",\n resolve => (genericDiamond: GenericDiamond | null) => resolve(genericDiamond)\n ),\n }\n);\n\nconst defaultState: State = {\n singlePage: false,\n ringSetting: null,\n genericDiamond: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(singlePageView.success, (state, action) => ({\n ...state,\n singlePage: action.payload,\n })),\n handleAction(selectRingSetting.success, (state, action) => ({\n ...state,\n ringSetting: action.payload,\n })),\n handleAction(selectGenericDiamond.success, (state, action) => ({\n ...state,\n genericDiamond: action.payload,\n })),\n]);\n\nconst actions = {\n singlePageView,\n selectRingSetting,\n selectGenericDiamond,\n};\n\nexport { actions, reducer };\n","import { Dispatch } from \"redux\";\nimport { EternityRing } from \"../models/products\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport * as eternityRingsService from \"../services/eternityRings\";\n\nexport type State = {\n data: EternityRing[] | null;\n};\n\nconst defaultState: State = {\n data: null,\n};\n\nconst fetchEternityRings = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await eternityRingsService.getAllEternityRings();\n dispatch(fetchEternityRings.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@ETERNITY_RINGS/FETCH\", resolve => (data: EternityRing[]) => resolve(data)),\n }\n);\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchEternityRings.success, (state, action) => ({ ...state, data: action.payload })),\n]);\n\nconst actions = {\n fetchEternityRings,\n};\n\nexport { actions, reducer };\n","import { connectRouter, RouterRootState, RouterState } from \"connected-react-router\";\nimport { applyMiddleware, combineReducers, compose, createStore } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport history from \"../history\";\nimport * as admin from \"./admin\";\nimport * as auth from \"./auth\";\nimport * as cart from \"./cart\";\nimport * as contact from \"./contact\";\nimport * as data from \"./data\";\nimport * as diamonds from \"./diamonds\";\nimport * as errors from \"./errors\";\nimport * as melee from \"./melee\";\nimport * as misc from \"./misc\";\nimport * as orders from \"./orders\";\nimport * as shows from \"./shows\";\nimport * as UIState from \"./UIState\";\nimport * as wishList from \"./wishList\";\nimport * as domain from \"./domain\";\nimport * as pushNotifications from \"./pushNotifications\";\nimport * as ringSettings from \"./ringSettings\";\nimport * as engagementRing from \"./engagementRing\";\nimport * as completedRing from \"./completedRing\";\nimport * as genericDiamonds from \"./genericDiamonds\";\nimport * as eternityRings from \"./eternityRings\";\nimport * as products from \"./products\";\n\nexport interface ApplicationState extends RouterRootState {\n admin: admin.State;\n auth: auth.State;\n cart: cart.State;\n contact: contact.State;\n data: data.State;\n diamonds: diamonds.State;\n errors: errors.State;\n UIState: UIState.State;\n melee: melee.State;\n misc: misc.State;\n router: RouterState;\n shows: shows.State;\n wishList: wishList.State;\n orders: orders.State;\n domain: domain.State;\n pushNotifications: pushNotifications.State;\n ringSettings: ringSettings.State;\n engagementRing: engagementRing.State;\n completedRing: completedRing.State;\n genericDiamonds: genericDiamonds.State;\n eternityRings: eternityRings.State;\n products: products.State;\n}\n\n\n\nconst rootReducer = combineReducers({\n admin: admin.reducer,\n auth: auth.reducer,\n cart: cart.reducer,\n contact: contact.reducer,\n data: data.reducer,\n diamonds: diamonds.reducer,\n errors: errors.reducer,\n UIState: UIState.reducer,\n melee: melee.reducer,\n misc: misc.reducer,\n router: connectRouter(history),\n shows: shows.reducer,\n wishList: wishList.reducer,\n orders: orders.reducer,\n domain: domain.reducer,\n pushNotifications: pushNotifications.reducer,\n ringSettings: ringSettings.reducer,\n engagementRing: engagementRing.reducer,\n completedRing: completedRing.reducer,\n genericDiamonds: genericDiamonds.reducer,\n \n eternityRings: eternityRings.reducer,\n \n products: products.reducer,\n});\n\nconst middlewares = [thunk];\nconst composeEnhancers =\n ((window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ &&\n (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n trace: true,\n traceLimit: 25,\n })) ||\n compose;\nconst store = createStore(rootReducer, {}, composeEnhancers(applyMiddleware(...middlewares)));\n\nexport { store };\nexport default (state: ApplicationState, action: any) => {\n rootReducer(action.type === \"LOGOUT\" ? undefined : state, action);\n};\n","import Axios from \"axios\";\nimport { Show, UpsertShow } from \"../models/misc\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n changeActiveAd: \"/api/shows/{id}/activeAd\",\n changeIsActive: \"/api/shows/{id}/active\",\n shows: \"/api/shows\",\n updateShow: \"/api/shows/{id}\",\n};\n\nconst changeIsActive = async (showId: number, isActive: boolean): Promise => {\n const route = routes.changeIsActive.replace(\"{id}\", showId.toString());\n await Axios.patch(\n route,\n { isActive },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst changeActiveAd = async (showId: number, ActiveAd: boolean): Promise => {\n const route = routes.changeActiveAd.replace(\"{id}\", showId.toString());\n await Axios.patch(\n route,\n { ActiveAd },\n {\n headers: authorizationHeader()\n }\n );\n}\n\nconst createShow = async (show: UpsertShow): Promise => {\n const result = await Axios.post(routes.shows, show, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst editShow = async (showId: number, show: UpsertShow): Promise => {\n const route = routes.updateShow.replace(\"{id}\", showId.toString());\n const result = await Axios.put(route, show, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst deleteShow = async (showId: number): Promise => {\n const route = routes.updateShow.replace(\"{id}\", showId.toString());\n await Axios.delete(route, {\n headers: authorizationHeader(),\n });\n};\n\nconst getAll = async (activeOnly = false): Promise => {\n const route = `${routes.shows}?activeonly=${activeOnly}`;\n\n const result = await Axios.get(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst getAllActive = async (activeOnly = true): Promise => {\n const route = `${routes.shows}?activeonly=${activeOnly}`;\n\n const result = await Axios.get(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nexport { changeIsActive, createShow, editShow, deleteShow, getAll, changeActiveAd, getAllActive, };\n","import Axios from \"axios\";\nimport { MeleeColor, MeleeStone, Product, UpsertMeleeStone } from \"../models/products\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst colors = Object.keys(MeleeColor).filter(k => typeof MeleeColor[k as any] === \"number\");\n\nconst routes = {\n changeStatus: \"/api/melee/{id}/status\",\n melees: \"/api/melee\",\n import: \"/api/melee/import\",\n melee: \"/api/melee/{id}\",\n};\n\nconst addMelee = async (melee: UpsertMeleeStone): Promise> => {\n const result = await Axios.post>(routes.melees, melee, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst changeActiveStatus = async (id: number, isActive: boolean): Promise => {\n const route = routes.changeStatus.replace(\"{id}\", id.toString());\n\n await Axios.patch(\n route,\n { isActive },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst edit = async (id: number, model: UpsertMeleeStone): Promise => {\n const route = routes.melee.replace(\"{id}\", id.toString());\n await Axios.patch(route, model, {\n headers: authorizationHeader(),\n });\n};\n\nconst getAll = async (activeOnly: boolean): Promise[]> => {\n const route = `${routes.melees}?activeonly=${activeOnly}`;\n\n const result = await Axios.get[]>(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst importCsv = async (file: File): Promise => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n await Axios.post(routes.import, formData, {\n headers: authorizationHeader(),\n });\n};\n\nexport { addMelee, changeActiveStatus, edit, getAll, importCsv, colors };\n","import Axios from \"axios\";\nimport { Order, OrderEmailModel, OrderStatus, UpsertOrder } from \"../models/orders\";\nimport { UpsertOrderInvoiceModel } from \"../models/products\";\nimport { removeEmptyStrings } from \"../utils\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n adminOrders: \"/api/orders/admin\",\n adminOrder: \"/api/orders/admin/{id}\",\n order: \"/api/orders/{id}\",\n orders: \"/api/orders\",\n orderStatus: \"/api/orders/{id}/status\",\n ordersUser: \"/api/orders/currentuser\",\n orderCompleted: \"/api/orders/orderCompleted\",\n};\n\nconst sentEmail = async (dataObj: UpsertOrderInvoiceModel): Promise => {\n const result = await Axios.post(routes.orderCompleted, dataObj, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst changeStatus = async (orderId: number, newStatus: OrderStatus): Promise => {\n const route = routes.orderStatus.replace(\"{id}\", orderId.toString());\n await Axios.patch(\n route,\n { newStatus },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst createOrder = async (): Promise => {\n const result = await Axios.post(routes.orders, null, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst createOrderAdmin = async (order: UpsertOrder): Promise => {\n const data = removeEmptyStrings(order);\n\n const result = await Axios.post(routes.adminOrders, data, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst editOrderAdmin = async (id: number, order: UpsertOrder): Promise => {\n const data = removeEmptyStrings(order);\n\n const route = routes.adminOrder.replace(\"{id}\", id.toString());\n const result = await Axios.put(route, data, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst deleteOrder = async (id: number): Promise => {\n const route = routes.adminOrder.replace(\"{id}\", id.toString());\n await Axios.delete(route, {\n headers: authorizationHeader(),\n });\n};\n\nconst getAll = async (): Promise => {\n const result = await Axios.get(routes.orders, {\n headers: authorizationHeader(),\n });\n\n const data = result.data.map(order => ({\n ...order,\n creationDate: new Date(order.creationDate),\n completedDate: order.completedDate ? new Date(order.completedDate) : null,\n }));\n\n return data;\n};\n\nconst getAllUserOrders = async (): Promise => {\n const result = await Axios.get(routes.ordersUser, {\n headers: authorizationHeader(),\n });\n\n const data = result.data.map(order => ({\n ...order,\n creationDate: new Date(order.creationDate),\n completedDate: order.completedDate ? new Date(order.completedDate) : null,\n }));\n\n return data;\n};\n\nexport {\n changeStatus,\n createOrder,\n createOrderAdmin,\n deleteOrder,\n editOrderAdmin,\n getAll,\n getAllUserOrders,\n sentEmail,\n};\n","import Axios from \"axios\";\nimport { authorizationHeader } from \"./apiUtils\";\nimport { Product, RingSetting, UpsertRingSetting } from \"../models/products\";\n\nconst routes = {\n ringSettings: \"/api/ring_settings\",\n ringSetting: \"/api/ring_settings/{id}\",\n import: \"/api/ring_settings/import\",\n delete: \"/api/ring_settings\",\n};\n\nconst getAllRingSettings = async (): Promise[]> => {\n const route = `${routes.ringSettings}`;\n\n const result = await Axios.get[]>(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst addRingSetting = async (ringSetting: UpsertRingSetting): Promise> => {\n const result = await Axios.post>(routes.ringSettings, ringSetting, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst deleteRingSetting = async (ringId: number): Promise =>\n await Axios.delete(`${routes.delete}/${ringId}`, {\n headers: authorizationHeader(),\n });\n\nconst importCsv = async (file: File): Promise => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n await Axios.post(routes.import, formData, {\n headers: authorizationHeader(),\n });\n};\n\nconst edit = async (id: number, model: UpsertRingSetting): Promise => {\n const route = routes.ringSetting.replace(\"{id}\", id.toString());\n await Axios.patch(route, model, {\n headers: authorizationHeader(),\n });\n};\n\nexport { getAllRingSettings, addRingSetting, deleteRingSetting, edit, importCsv };\n","import Axios from \"axios\";\nimport { NumberFormat } from \"xlsx/types\";\nimport { WishListItem } from \"../models/cart\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n wishList: \"/api/wishlist\",\n addMelee: \"/api/wishlist/melee\",\n addParcel: \"/api/wishlist/parcel\",\n addDiamond: \"/api/wishlist/diamond\",\n bulkAddDiamonds: \"/api/wishlist/diamond-bulk\",\n addDiamondsFromSet: \"/api/wishlist/diamond-set\",\n addCompletedRing: \"/api/wishlist/completed-ring\",\n addEngagementRing: \"/api/wishlist/engagement-ring\",\n addEternityRing: \"/api/wishlist/eternity-ring\",\n addBracelet: \"/api/wishlist/bracelet\",\n bulkRemoveDiamonds: \"/api/wishlist/bulk-remove-basket-item\",\n deleteDiamondFromBasketPage: \"/api/wishlist/remove-basket-item\",\n deleteDiamondsSetFromBasket: \"/api/wishlist/remove-diamonds-set\",\n};\n\nconst getWishListItems = async (): Promise => {\n const result = await Axios.get(routes.wishList, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst addProductToWishList = async (itemId: number): Promise => {\n const result = await Axios.post(\n routes.wishList,\n { itemId },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addEngagementRingToWishList = async (body: any): Promise => {\n const result = await Axios.post(routes.addEngagementRing, body, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst addCompletedRingToWishList = async (body: any): Promise => {\n const result = await Axios.post(routes.addCompletedRing, body, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst addEternityRingToWishList = async (id: NumberFormat): Promise => {\n const result = await Axios.post(\n routes.addEternityRing,\n { eternityRingId: id },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addBraceletToWishList = async (id: number): Promise => {\n const result = await Axios.post(\n routes.addBracelet,\n { braceletId: id },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addDiamondsFromSetToWishList = async (itemIds: number[]): Promise => {\n const result = await Axios.post(\n routes.addDiamondsFromSet,\n itemIds.map(id => ({ itemId: id })),\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst addMeleeToWishList = async (itemId: number, numberOfStones?: number, carats?: number): Promise => {\n const result = await Axios.post(\n routes.addMelee,\n { itemId, numberOfStones, carats },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\nconst addParcelToWishList = async (\n itemId: number,\n numberOfStones?: number,\n ringSize?: number\n): Promise => {\n const result = await Axios.post(\n routes.addParcel,\n { itemId, numberOfStones, ringSize },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst bulkAddDiamondsToCart = async (itemIds: number[]): Promise => {\n const result = await Axios.post(\n routes.bulkAddDiamonds,\n itemIds.map(id => ({ itemId: id })),\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\nconst bulkRemoveDiamondsFromBasket = async (wishedIds: number[]): Promise => {\n const result = await Axios.post(\n routes.bulkRemoveDiamonds,\n wishedIds.map(id => ({ wishedItemId: id })),\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst deleteWishListItem = async (itemId: number): Promise =>\n await Axios.delete(`${routes.wishList}/${itemId}`, {\n headers: authorizationHeader(),\n });\n \nconst deleteWishListItemFromBasket = async (wishedItemId: number): Promise => {\n await Axios.post(\n routes.deleteDiamondFromBasketPage,\n { wishedItemId },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst deleteDiamondsSetFromBasket = async (itemId: number): Promise =>\n await Axios.delete(`${routes.deleteDiamondsSetFromBasket}/${itemId}`, {\n headers: authorizationHeader(),\n });\n\nexport {\n getWishListItems,\n addMeleeToWishList,\n deleteWishListItem,\n addParcelToWishList,\n addProductToWishList,\n bulkAddDiamondsToCart,\n addCompletedRingToWishList,\n addEternityRingToWishList,\n addEngagementRingToWishList,\n addBraceletToWishList,\n deleteDiamondsSetFromBasket,\n deleteWishListItemFromBasket,\n bulkRemoveDiamondsFromBasket,\n addDiamondsFromSetToWishList,\n};\nexport function bulkRemoveDiamondsToWishList(wishedIds: number[]) {\n throw new Error(\"Function not implemented.\");\n}\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { WishListItem } from \"../models/cart\";\nimport * as wishListService from \"../services/wishList\";\nimport { ApplicationState, store } from \"./store\";\nimport { actions as authActions } from \"./auth\";\n\nexport type State = {\n data: WishListItem[] | null;\n};\n\nconst fetchWishListItems = Object.assign(\n () => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const { wishList } = getState();\n\n if (wishList.data && wishList.data.length > 0) {\n return;\n }\n\n try {\n const data = await wishListService.getWishListItems();\n dispatch(fetchWishListItems.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/SUCCESS\", resolve => (wishList: WishListItem[]) => resolve(wishList)),\n }\n);\n\nconst addProductToWishList = Object.assign(\n (productId: number) => async (dispatch: Dispatch) => {\n try {\n const data = await wishListService.addProductToWishList(productId);\n dispatch(addProductToWishList.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/ADD_PRODUCT/SUCCESS\", resolve => (wishListItem: WishListItem) =>\n resolve(wishListItem)\n ),\n }\n);\n\nconst removeFromWishList = Object.assign(\n (itemId: number | number[]) => async (dispatch: Dispatch) => {\n try {\n await wishListService.deleteWishListItem(itemId as number);\n \n dispatch(removeFromWishList.success(itemId));\n } catch (error) {\n console.error(\"Error removing product from wishlist:\", error);\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/REMOVE/SUCCESS\", resolve => (itemId: number | number[]) =>\n resolve(itemId)\n ),\n }\n);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst addEngagementRingToWishList = Object.assign(\n (body: any) => async (dispatch: Dispatch) => {\n try {\n const data = await wishListService.addEngagementRingToWishList(body);\n dispatch(addEngagementRingToWishList.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/ADD_ENGAGEMENT_RING/SUCCESS\", resolve => (wishListItem: WishListItem) =>\n resolve(wishListItem)\n ),\n }\n);\n\nconst addCompletedRingToWishList = Object.assign(\n (body: any) => async (dispatch: Dispatch) => {\n try {\n const data = await wishListService.addCompletedRingToWishList(body);\n dispatch(addCompletedRingToWishList.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/ADD_COMPLETED_RING/SUCCESS\", resolve => (wishListItem: WishListItem) =>\n resolve(wishListItem)\n ),\n }\n);\n\nconst addEternityRingToWishList = Object.assign(\n (id: number) => async (dispatch: Dispatch) => {\n try {\n const data = await wishListService.addEternityRingToWishList(id);\n dispatch(addEternityRingToWishList.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/ADD_ETERNITY_RING/SUCCESS\", resolve => (wishListItem: WishListItem) =>\n resolve(wishListItem)\n ),\n }\n);\n\nconst addBraceletToWishList = Object.assign(\n (id: number) => async (dispatch: Dispatch) => {\n try {\n const data = await wishListService.addBraceletToWishList(id);\n dispatch(addEternityRingToWishList.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/ADD_BRACELET/SUCCESS\", resolve => (wishListItem: WishListItem) =>\n resolve(wishListItem)\n ),\n }\n);\n\nconst addDiamondsFromSetToWishList = Object.assign(\n (itemIds: number[]) => async (dispatch: Dispatch) => {\n try {\n const data = await wishListService.addDiamondsFromSetToWishList(itemIds);\n dispatch(addDiamondsFromSetToWishList.success(data));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/ADD_DIAMONDS_SET/SUCCESS\", resolve => (wishListItem: WishListItem[]) =>\n resolve(wishListItem)\n ),\n }\n);\n\nconst bulkAddDiamondsToWishList = Object.assign(\n (itemIds: number[]) => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n try {\n const data = await wishListService.bulkAddDiamondsToCart(itemIds);\n const { wishList } = getState();\n const wishListItemId = (wishList.data || []).map(ci => ci.itemId);\n const newItems = data.filter(ci => !wishListItemId.includes(ci.itemId));\n\n dispatch(bulkAddDiamondsToWishList.success(newItems));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/BULK_ADD_DIAMOND/SUCCESS\", resolve => (wishListItems: WishListItem[]) =>\n resolve(wishListItems)\n ),\n }\n);\nconst bulkRemoveDiamondsFromBasket = Object.assign(\n (wishedIds: number[]) => async (dispatch: Dispatch) => {\n try {\n await wishListService.bulkRemoveDiamondsFromBasket(wishedIds);\n dispatch(bulkRemoveDiamondsFromBasket.success(wishedIds));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/BULK_REMOVE_DIAMONDS/SUCCESS\", resolve => (wishListItemIds: number[]) =>\n resolve(wishListItemIds)\n ),\n }\n);\n\n\n\nconst deleteDiamondsSetFromBasket = Object.assign(\n (itemId: number | number[]) => async (dispatch: Dispatch) => {\n try {\n await wishListService.deleteDiamondsSetFromBasket(itemId as number);\n const allDiamonds = store.getState().diamonds.all;\n if (!allDiamonds) return;\n const setName = allDiamonds.find(diamond => diamond.id === itemId)?.product.lineSet;\n const findAllDiamondsFromSetIds = allDiamonds\n .filter(diamond => diamond.product.lineSet === setName)\n .map(d => d.id);\n dispatch(deleteDiamondsSetFromBasket.success(findAllDiamondsFromSetIds as number[]));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.info(\"Could not delete the set: \", e);\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/REMOVEDIAMONDSSET/SUCCESS\", resolve => (itemId: number[]) =>\n resolve(itemId)\n ),\n }\n);\nconst removeDiamondFromBasketPage = Object.assign(\n (wishedItemId: number) => async (dispatch: Dispatch) => {\n try {\n await wishListService.deleteWishListItemFromBasket(wishedItemId as number);\n dispatch(removeDiamondFromBasketPage.success(wishedItemId as number));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.info(\"Could not remove: \", e);\n }\n },\n {\n success: createActionCreator(\"@@WISHLIST/REMOVE_FROM_BASKET/SUCCESS\", resolve => (itemId: number | number[]) =>\n resolve(itemId)\n ),\n }\n);\n\nconst defaultState: State = { data: null };\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchWishListItems.success, (state, action) =>\n produce(state, draft => {\n draft.data = action.payload;\n })\n ),\n handleAction(\n [\n addProductToWishList.success,\n bulkAddDiamondsToWishList.success,\n addCompletedRingToWishList.success,\n addEngagementRingToWishList.success,\n addEternityRingToWishList.success,\n addBraceletToWishList.success,\n ],\n (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).concat(action.payload);\n })\n ),\n handleAction(addDiamondsFromSetToWishList.success, (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).concat(action.payload);\n })\n ),\n handleAction(removeFromWishList.success, (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).filter(i => i.itemId !== action.payload);\n })\n ),\n handleAction(removeDiamondFromBasketPage.success, (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).filter(i => i.id !== action.payload);\n })\n ),\n handleAction(bulkRemoveDiamondsFromBasket.success, (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).filter(i => !action.payload.includes(i.id));\n })\n ),\n handleAction(deleteDiamondsSetFromBasket.success, (state, action) =>\n produce(state, draft => {\n const remainingDiamonds = (state.data || []).filter(i => !action.payload.includes(i.itemId));\n draft.data = remainingDiamonds;\n })\n ),\n\n handleAction(authActions.logout.success, (state, action) =>\n produce(state, draft => {\n draft.data = [];\n })\n ),\n]);\n\nconst actions = {\n addProductToWishList,\n addCompletedRingToWishList,\n addDiamondsFromSetToWishList,\n addEngagementRingToWishList,\n addEternityRingToWishList,\n addBraceletToWishList,\n bulkAddDiamondsToWishList,\n bulkRemoveDiamondsFromBasket,\n fetchWishListItems,\n removeFromWishList,\n removeDiamondFromBasketPage,\n deleteDiamondsSetFromBasket,\n};\n\nexport { actions, reducer };\n","import Axios from \"axios\";\nimport { authorizationHeader } from \"./apiUtils\";\nimport { GenericDiamond, UpsertGenericDiamond } from \"../models/genericDiamond\";\n\nconst routes = {\n genericDiamonds: \"/api/generic_diamonds\",\n genericDiamond: \"/api/generic_diamonds/{id}\",\n import: \"/api/generic_diamonds/import\",\n};\n\nconst getAllGenericDiamonds = async (): Promise => {\n const route = `${routes.genericDiamonds}`;\n\n const result = await Axios.get(route, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst addGenericDiamond = async (diamond: UpsertGenericDiamond): Promise => {\n const result = await Axios.post(routes.genericDiamonds, diamond, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst editGenericDiamond = async (id: number, model: UpsertGenericDiamond): Promise => {\n const route = routes.genericDiamond.replace(\"{id}\", id.toString());\n await Axios.patch(route, model, {\n headers: authorizationHeader(),\n });\n};\n\nconst importCsv = async (file: File): Promise => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n await Axios.post(routes.import, formData, {\n headers: authorizationHeader(),\n });\n};\n\n\nexport { getAllGenericDiamonds, addGenericDiamond, editGenericDiamond, importCsv };\n","import { AnyAction } from \"deox\";\nimport { Dispatch } from \"redux\";\nimport { actions as messageActions } from \"./messages\";\n\nconst withErrorDispatch = (\n actionPromise: Promise,\n successCallback: ((result: T) => AnyAction) | null,\n error: string,\n successMessage?: string\n) => async (dispatch: Dispatch): Promise => {\n try {\n const result = await actionPromise;\n successCallback && dispatch(successCallback(result));\n } catch (err) {\n messageActions.commit(error, \"error\")(dispatch);\n }\n\n successMessage && messageActions.commit(successMessage, \"info\")(dispatch);\n};\n\nexport { withErrorDispatch };\n","import { GenericDiamond } from \"./genericDiamond\";\nimport { UploadFile } from \"./misc\";\n\nexport interface Product {\n id: number;\n product: TProductType;\n isActive: boolean;\n}\n\nenum DiamondStatusEnum {\n Available = 1,\n Hold = 2,\n Suspended = 3,\n Memo = 4,\n}\n\nenum MeleeColor {\n Black = 1,\n TTLB = 2,\n White = 3,\n}\n\nenum ProductType {\n Diamond = 1,\n Melee = 2,\n RingSetting = 3,\n}\n\nexport interface TennisNecklace {\n id: number;\n stockNumber: string;\n status: string;\n type: string;\n subType: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n photo1: string;\n photo2: string;\n photo3: string;\n photo4: string;\n video: string;\n}\n\nexport interface Stud {\n id: number;\n stockNumber: string;\n status: string;\n type: string;\n subType: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n photo1: string;\n photo2: string;\n photo3: string;\n photo4: string;\n video: string;\n}\n\nexport interface OneOfAKindProduct {\n id: number;\n stockNumber: string;\n status: string;\n type: string;\n subType: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n photo1?: string;\n photo2?: string;\n photo3?: string;\n photo4?: string;\n video: string;\n}\nexport interface Ring {\n id: number;\n stockNumber: string;\n type: string;\n status: string;\n subType: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n photo1: string;\n photo2: string;\n photo3: string;\n photo4: string;\n video: string;\n}\nexport interface Bracelet {\n id: number;\n stockNumber: string;\n type: string;\n status: string;\n subType: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n photo1: string;\n photo2: string;\n photo3: string;\n photo4: string;\n video: string;\n}\nexport interface Pendant {\n id: number;\n stockNumber: string;\n type: string;\n status: string;\n subType: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n photo1: string;\n photo2: string;\n photo3: string;\n photo4: string;\n video: string;\n}\n\nexport interface Necklace {\n id: number;\n stockNumber: string;\n status: string;\n subType: string;\n type: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n photo1: string;\n photo2: string;\n photo3: string;\n photo4: string;\n video: string;\n}\nexport interface Earring {\n id: number;\n stockNumber: string;\n status: string;\n subType: string;\n type: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n photo1: string;\n photo2: string;\n photo3: string;\n photo4: string;\n video: string;\n}\n\nexport interface MeleeStone {\n id: number;\n carats: number;\n color: MeleeColor;\n isActive: boolean;\n pricePerCarat: number;\n sizeFrom: number;\n sizeTo: number;\n quantity?: number;\n}\n\nexport type UpsertMeleeStone = Omit;\nexport interface RingSetting {\n id: number;\n name: string;\n sku: string;\n width: number;\n carat: number;\n origin: string;\n clarity: string;\n color: string;\n imageUrl?: string;\n price: number;\n goldType: string;\n style: string;\n shape: string;\n metalType: string;\n metalWeight: number;\n sideStones: number;\n quantity: number;\n threeStonesSideCt: number;\n hiddenDiamondBasket: string;\n image2?: string;\n image3?: string;\n image4?: string;\n image5?: string;\n image6?: string;\n video?: string;\n description?: string;\n active: boolean;\n}\n\n// export type UpsertRingSetting = Omit;\n\nexport interface EternityRing {\n id: number;\n sku: string;\n shape: string;\n ringSize: number;\n numberOfStones: number;\n weightPerStone: number;\n approxTotalCt: number;\n totalPrice: number;\n full: boolean;\n ringModel: string;\n goldColor: string;\n color: string;\n clarity: string;\n quantity: number;\n picture1: string;\n picture2: string;\n picture3: string;\n video: string;\n description?: string;\n active: boolean;\n [key: string]: string | number | boolean | undefined;\n}\n\nexport type DiamondForBasket = {\n stockId: string;\n qty: number;\n shape: string;\n carats: number;\n colorName: string;\n clarityName: string;\n cutName: string;\n polName: string;\n symName: string;\n depth: number;\n table: number;\n measurement: string;\n pricePerCarat: number;\n discount: string;\n totalPrice: number;\n lab: string;\n certificate: string;\n image: string;\n image3d: string;\n};\n\nexport type DiamondsType = {\n id: number;\n stockId: string;\n carats: number;\n certificateNo?: string;\n certificateUrl?: string;\n clarityId?: number;\n colorId: number | MeleeColor;\n colorShade?: string;\n comment?: string;\n crownAngle?: number;\n crownHeight?: number;\n culetSize?: number;\n cutId?: number;\n depthPercent?: number;\n discount?: number;\n eyeClean?: string;\n fancyIntensity?: string;\n fluorId?: number;\n fluorescence?: string;\n fluorescenceColor?: string;\n girdle?: number;\n height: number;\n image3d?: string;\n set3D?: string;\n setImage?: string;\n imageUrl?: string;\n pic2?: string;\n pic3?: string;\n pic4?: string;\n isHighlighted?: boolean;\n labId: number;\n length: number;\n milky?: string;\n overtone?: string;\n parcelStones?: number;\n pavilionAngle?: number;\n pavilionDepth?: number;\n polishId?: number;\n pricePerCarat: number;\n rapPrice?: number;\n shapeId: number;\n status: DiamondStatusEnum;\n symmetryId?: number;\n tablePercent?: number;\n totalPrice: number;\n width: number;\n isMatchingPair: boolean;\n memoAccount?: string;\n memoPricePerCarat?: number;\n memoTotalPrice?: number;\n hold?: string;\n holdUserId?: string;\n memoNo?: number;\n memoDate?: string;\n memoRap?: number;\n isLine?: boolean;\n isLabGrown?: boolean;\n isSnP?: boolean;\n lineSet?: string;\n isPair?: boolean;\n wishListId?: number;\n tradeShow?: string;\n ringSize?: number;\n treatment?: string;\n showToAll?: string;\n lineSetColor?: string;\n lineSetClarity?: string;\n imageArray?: string[];\n};\n\nexport type Diamond = {\n id: number;\n stockId: string;\n carats: number;\n color: string | MeleeColor;\n colorId: number;\n height: number;\n isActive: boolean;\n lab: string;\n labId: number;\n length: number;\n pricePerCarat: number;\n shape: string;\n shapeId: number;\n status: DiamondStatusEnum;\n totalPrice: number;\n width: number;\n isFancy: boolean;\n isMatchingPair: boolean;\n isMelee?: boolean;\n certificateNumber?: string;\n certificateUrl?: string;\n clarity?: string;\n clarityId?: number;\n colorShade?: string;\n colorVariation?: string;\n comment?: string;\n crownAngle?: number;\n crownHeight?: number;\n culetSize?: number;\n cut?: string;\n cutId?: number;\n depthPercent?: number;\n discount?: number;\n eyeClean?: string;\n fancyIntensity?: string;\n fluor?: string;\n fluorId?: number;\n fluorescence?: string;\n fluorescenceColor?: string;\n girdle?: number;\n image3d?: string;\n set3D?: string;\n setImage?: string;\n imageUrl?: string;\n pic2?: string;\n pic3?: string;\n pic4?: string;\n isHighlighted?: boolean;\n milky?: string;\n overtone?: string;\n parcelStones?: number;\n pavilionAngle?: number;\n pavilionDepth?: number;\n polish?: string;\n polishId?: number;\n rapPrice: number;\n symmetry?: string;\n symmetryId?: number;\n tablePercent?: number;\n memoAccount?: string;\n memoPricePerCarat?: number;\n memoTotalPrice?: number;\n hold?: string;\n holdUserId?: string;\n memoNo?: number;\n memoDate?: string;\n memoRap?: number;\n isLine?: boolean;\n isSnP?: boolean;\n isLabGrown?: boolean;\n lineSet?: string;\n isPair?: boolean;\n wishListId?: number;\n tradeShow?: string;\n ringSize?: number;\n treatment?: string;\n showToAll?: string;\n lineSetColor?: string;\n lineSetClarity?: string;\n imageArray?: string[];\n};\n\n//FIX ID ENGAGEMENT\nexport interface DiamondAndRing {\n id: number;\n type?: string;\n wishListId: number;\n completedRingId?: number;\n engagementRingId?: number;\n diamond?: Diamond;\n ringSetting?: RingSetting;\n genericDiamond?: GenericDiamond;\n ring?: EternityRing;\n}\n\nexport type ExcludeProps =\n | \"id\"\n | \"imageUrl\"\n | \"clarity\"\n | \"color\"\n | \"cut\"\n | \"fluor\"\n | \"lab\"\n | \"polish\"\n | \"shape\"\n | \"symmetry\"\n | \"isActive\"\n | \"status\"\n | \"totalPrice\";\n\nexport type ExcludeRingProps = \"isActive\" | \"id\" | \"imageUrl\";\n\nexport type UpsertDiamondModel = Omit & {\n image?: UploadFile;\n};\nexport type UpsertRingSetting = Omit & {\n image?: UploadFile;\n};\n\nexport type UpsertProduct = {\n stockNumber: string;\n status: string;\n type: string;\n subType: string;\n style: string;\n sizeCategory: string;\n metal: string;\n goldKarats: string;\n gemstone: string;\n secondaryGemstone: string;\n mainStoneShape: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n mainStoneCut: string;\n certified: string;\n reference: string;\n location: string;\n diamondQty: number;\n diamondWeight: number;\n gemstoneQty: number;\n gemstoneWeight: number;\n metalWeight: number;\n grossWeight: number;\n vendor: string;\n vendorStockNum: string;\n brand: string;\n remarks: string;\n inStockQty: number;\n onMemoQty: number;\n onHandQty: number;\n cost: number;\n unitPrice1: number;\n unitPrice2: number;\n unitPrice3: number;\n cash: number;\n headlineDescription: string;\n image1?: UploadFile | string;\n image2?: UploadFile | string;\n image3?: UploadFile | string;\n image4?: UploadFile | string;\n videoFile?: UploadFile | string;\n};\n\nexport type UpsertOrderInvoiceModel = {\n invoice?: UploadFile;\n orderId: number;\n userEmail: string | undefined;\n ccEmail?: string;\n title: string;\n description?: string;\n};\n\nexport { DiamondStatusEnum, MeleeColor, ProductType };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport {\n AboutUsConfiguration,\n Color,\n Country,\n HomepageConfiguration,\n IdNameModel,\n Shape,\n Support,\n} from \"../models/misc\";\nimport * as supportServices from \"../services/contact\";\nimport * as dataService from \"../services/data\";\nimport * as emailsService from \"../services/emails\";\nimport * as siteSettingsService from \"../services/siteSettings\";\nimport { ApplicationState } from \"./store\";\n\ntype Maintenance = {\n isEnabled: boolean;\n message: string | null;\n};\n\nexport type State = {\n [index: string]: any;\n aboutUs: AboutUsConfiguration | null;\n businessTypes: IdNameModel[];\n clarities: IdNameModel[];\n colors: Color[];\n countries: Country[];\n cuts: IdNameModel[];\n emailChannels: IdNameModel[];\n fluors: IdNameModel[];\n labs: IdNameModel[];\n maintenance: Maintenance;\n polishes: IdNameModel[];\n shapes: Shape[];\n symmetries: IdNameModel[];\n support: Support | null;\n fancyIntensities: IdNameModel[];\n};\n\nconst fetchHomepage = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await siteSettingsService.getHomepageConfiguration();\n dispatch(fetchHomepage.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATA/HOMEPAGE/FETCH\", resolve => (homepage: HomepageConfiguration) =>\n resolve(homepage)\n ),\n }\n);\n\nconst fetchAboutUs = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await siteSettingsService.getAboutUsConfiguration();\n dispatch(fetchAboutUs.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATA/ABOUT_US/FETCH\", resolve => (aboutUs: AboutUsConfiguration) =>\n resolve(aboutUs)\n ),\n }\n);\n\nconst fetchBusinessTypes = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await dataService.getBusinessTypes();\n dispatch(fetchBusinessTypes.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATA/BUSINESS_TYPES/SUCCESS\", resolve => (items: IdNameModel[]) => resolve(items)),\n }\n);\n\nconst fetchCountries = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await dataService.getCountries();\n dispatch(fetchCountries.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATA/COUNTRIES/SUCCESS\", resolve => (items: Country[]) => resolve(items)),\n }\n);\n\nconst fetchDiamondsRelatedEntities = Object.assign(\n () => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const { data } = getState();\n const { clarities, colors, cuts, fluors, labs, polishes, shapes, symmetries, fancyIntensities } = data;\n\n if (\n clarities.length &&\n colors.length &&\n cuts.length &&\n fluors.length &&\n labs.length &&\n polishes.length &&\n shapes.length &&\n symmetries.length &&\n fancyIntensities.length\n ) {\n return;\n }\n\n try {\n const [clarities, colors, cuts, fluors, labs, polishes, shapes, symmetries, fancyIntensities] = await Promise.all<\n IdNameModel[]\n >([\n dataService.diamonds.getClarities(),\n dataService.diamonds.getColors(),\n dataService.diamonds.getCuts(),\n dataService.diamonds.getFluors(),\n dataService.diamonds.getLabs(),\n dataService.diamonds.getPolishes(),\n dataService.diamonds.getShapes(),\n dataService.diamonds.getSymmetries(),\n dataService.diamonds.getFancyIntensities(),\n ]);\n\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"clarities\", values: clarities }));\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"colors\", values: colors }));\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"cuts\", values: cuts }));\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"fluors\", values: fluors }));\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"labs\", values: labs }));\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"polishes\", values: polishes }));\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"shapes\", values: shapes }));\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"symmetries\", values: symmetries }));\n dispatch(fetchDiamondsRelatedEntities.success({ itemType: \"fancyIntensities\", values: fancyIntensities }));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\n \"@@DATA/DIAMONDS_ENTITIES/SUCCESS\",\n resolve => (item: { itemType: string; values: IdNameModel[] }) => resolve(item)\n ),\n }\n);\n\nconst fetchEmailChannels = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await emailsService.getChannels();\n dispatch(fetchEmailChannels.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATE/EMAILS/CHANNELS\", resolve => (channels: IdNameModel[]) => resolve(channels)),\n }\n);\n\nconst fetchMaintenanceMessage = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await siteSettingsService.getMaintenanceMessage();\n dispatch(fetchMaintenanceMessage.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATA/MAINTENANCE_MESSAGE/FETCH\", resolve => (message: string) => resolve(message)),\n }\n);\n\nconst fetchMaintenanceState = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await siteSettingsService.getMaintenance();\n dispatch(fetchMaintenanceState.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATA/MAINTENANCE/FETCH\", resolve => (state: boolean) => resolve(state)),\n }\n);\n\nconst fetchSupportInfo = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const result = await supportServices.getSupportInfo();\n dispatch(fetchSupportInfo.success(result));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@DATA/SUPPORT/FETCH\", resolve => (support: Support) => resolve(support)),\n }\n);\n\nconst defaultState: State = {\n homepage: null,\n aboutUs: null,\n businessTypes: [],\n clarities: [],\n colors: [],\n countries: [],\n cuts: [],\n emailChannels: [],\n fancyIntensities: [],\n fluors: [],\n maintenance: {\n isEnabled: false,\n message: null,\n },\n labs: [],\n polishes: [],\n shapes: [],\n symmetries: [],\n support: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchAboutUs.success, (state, action) => ({ ...state, aboutUs: action.payload })),\n handleAction(fetchHomepage.success, (state, action) => ({ ...state, homepage: action.payload })),\n handleAction(fetchBusinessTypes.success, (state, action) => ({ ...state, businessTypes: action.payload })),\n handleAction(fetchCountries.success, (state, action) => ({ ...state, countries: action.payload })),\n handleAction(fetchDiamondsRelatedEntities.success, (state, action) =>\n produce(state, draft => {\n draft[action.payload.itemType] = action.payload.values;\n })\n ),\n handleAction(fetchEmailChannels.success, (state, action) => ({ ...state, emailChannels: action.payload })),\n handleAction(fetchMaintenanceMessage.success, (state, action) => ({\n ...state,\n maintenance: { ...state.maintenance, message: action.payload },\n })),\n handleAction(fetchMaintenanceState.success, (state, action) => ({\n ...state,\n maintenance: { ...state.maintenance, isEnabled: action.payload },\n })),\n handleAction(fetchSupportInfo.success, (state, action) => ({ ...state, support: action.payload })),\n]);\n\nconst actions = {\n fetchHomepage,\n fetchAboutUs,\n fetchBusinessTypes,\n fetchCountries,\n fetchDiamondsRelatedEntities,\n fetchEmailChannels,\n fetchMaintenanceMessage,\n fetchMaintenanceState,\n fetchSupportInfo,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport history from \"../history\";\nimport { Order } from \"../models/orders\";\nimport * as orderServices from \"../services/orders\";\nimport { ApplicationState } from \"./store\";\nimport { actions as authActions } from \"./auth\"\n\nexport type State = {\n data: Order[] | null;\n};\n\nconst _fetchAllOrders = () => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n const { orders } = getState();\n\n if (orders.data) {\n return;\n }\n\n try {\n const data = await orderServices.getAllUserOrders();\n dispatch(fetchAllOrders.success(data));\n } catch {\n return;\n }\n};\n\nconst _createOrder = (redirectUrl?: string) => async (dispatch: Dispatch) => {\n try {\n const data = await orderServices.createOrder();\n dispatch(createOrder.success(data));\n history.push(redirectUrl ? `${redirectUrl}/${data.id}` : \"/\");\n } catch {\n return;\n }\n};\n\nconst fetchAllOrders = Object.assign(_fetchAllOrders, {\n success: createActionCreator(\"@@ORDER/SUCCESS\", resolve => (orders: Order[]) => resolve(orders)),\n});\n\nconst createOrder = Object.assign(_createOrder, {\n success: createActionCreator(\"@@ORDER/ADD/SUCCESS\", resolve => (order: Order) => resolve(order)),\n});\n\nconst defaultState: State = { data: null };\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchAllOrders.success, (state, action) =>\n produce(state, draft => {\n draft.data = action.payload;\n })\n ),\n handleAction(createOrder.success, (state, action) =>\n produce(state, draft => {\n draft.data = (state.data || []).concat(action.payload);\n })\n ),\n handleAction(authActions.logout.success, (state, action) =>\n produce(state, draft => {\n draft.data = [];\n }))\n]);\n\nconst actions = {\n createOrder,\n fetchAllOrders,\n};\n\nexport { actions, reducer };\n","import React from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { Redirect, Route, RouteProps } from \"react-router-dom\";\nimport { ApplicationState } from \"../store/store\";\n\ntype TProps = ConnectedProps &\n RouteProps & {\n component: React.LazyExoticComponent>;\n layout?: React.LazyExoticComponent>;\n roles?: [\"Access\"] | [\"Administrator\"] | [\"Access\", \"Administrator\"];\n pageTitle: string;\n withLogos?: boolean;\n };\n\nconst PrivateRoute = ({\n component: Component,\n currentUser,\n layout: Layout,\n roles,\n withLogos,\n pageTitle,\n logoUrl,\n ...rest\n}: TProps) => {\n // add condiotionals bellow\n return (\n {\n return currentUser &&\n (!roles || roles.some(r => currentUser?.role === r)) &&\n !currentUser?.accesses[0]?.labGrown &&\n !currentUser?.accesses[0]?.white &&\n !currentUser?.accesses[0]?.black &&\n !currentUser?.accesses[0]?.mathingPairs &&\n !currentUser?.accesses[0]?.melee &&\n !currentUser?.accesses[0]?.snP &&\n !currentUser?.accesses[0]?.fancyShape &&\n !currentUser?.accesses[0]?.fancyColor &&\n currentUser?.accesses?.length === 0 ? (\n Layout ? (\n <>\n \n {`${pageTitle} ${!logoUrl ? \"| Aglam\" : \"\"}`}\n \n \n \n \n \n \n ) : (\n <>\n \n {`${pageTitle} ${!logoUrl ? \"| Aglam\" : \"\"}`}\n \n \n \n \n )\n ) : (\n \n );\n }}\n />\n );\n};\n\nconst connector = connect(({ auth, domain }: ApplicationState) => ({\n currentUser: auth.user!,\n logoUrl: domain.data && domain.data.logoUrl,\n}));\n\nexport default connector(PrivateRoute);\n","import { createReducer, createActionCreator } from \"deox\";\nimport { Dispatch } from \"redux\";\nimport { getDomainLayout } from \"../services/siteSettings\";\n\nexport type DomainLayout = {\n logoUrl: string;\n domainColor: string;\n address: string;\n phone: string;\n email: string;\n company: string;\n name: string;\n};\n\nexport type State = {\n data: DomainLayout | null;\n};\n\nconst fetchDomainLayout = Object.assign(\n () => async (dispatch: Dispatch) => {\n try {\n const data = await getDomainLayout();\n dispatch(fetchDomainLayout.success(data));\n } catch (e) {\n console.log(e);\n }\n },\n {\n success: createActionCreator(\"@@MISC/FETCH_DOMAIN_LAYOUT\", resolve => (data: DomainLayout) => resolve(data)),\n }\n);\n\nconst defaultState: State = {\n data: null,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(fetchDomainLayout.success, (state, action) => ({\n ...state,\n data: action.payload ? action.payload : null,\n })),\n]);\n\nconst actions = {\n fetchDomainLayout,\n};\n\nexport { actions, reducer };\n","import { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { ApplicationState, store } from \"./store\";\n\nexport type State = {\n data: boolean;\n};\n\nconst newUpdatedNotification = Object.assign(\n (serviceWorkerStatus: boolean) => async (dispatch: Dispatch, getState: () => ApplicationState) => {\n try {\n const newNotificationState = serviceWorkerStatus;\n\n dispatch(newUpdatedNotification.success(newNotificationState));\n } catch {\n return;\n }\n },\n {\n success: createActionCreator(\"@@PUSHNOTIFICATION/UPDATED/SUCCESS\", resolve => (data: boolean) => resolve(data)),\n }\n);\n\nconst defaultState: State = {\n data: false,\n};\n\nconst reducer = createReducer(defaultState, handleAction => [\n handleAction(newUpdatedNotification.success, (state, action) =>\n produce(state, draft => {\n draft.data = action.payload;\n })\n ),\n]);\n\nconst actions = {\n newUpdatedNotification,\n};\n\nexport { actions, reducer };\n","import { UploadFile } from \"./misc\";\nimport { Bracelet, Diamond, DiamondAndRing, EternityRing, MeleeStone, ProductType } from \"./products\";\nimport { IUserProfile } from \"./users\";\n\nenum OrderStatus {\n Processing,\n Cancelled,\n Payment,\n Delivery,\n Completed,\n}\n\nexport interface OrderItem {\n productType: ProductType;\n productId: number;\n totalPrice: number;\n description?: string;\n completedRing?: DiamondAndRing;\n engagementRing?: DiamondAndRing;\n eternityRing?: EternityRing;\n completedRingId?: number;\n engagementRingId?: number;\n eternityRingId?: number;\n}\n\nexport interface Order {\n id: number;\n completedDate: Date | string | null;\n creationDate: Date | string;\n discount?: number;\n status: OrderStatus;\n items: OrderItem[];\n totalPrice: number;\n userId: string;\n description: string;\n}\n\nexport interface OrderItemViewModel {\n id: number;\n description?: string;\n type: ProductType;\n item: MeleeStone | Diamond | DiamondAndRing | null | undefined;\n totalPrice: number;\n completedRing?: DiamondAndRing;\n engagementRing?: DiamondAndRing;\n eternityRing?: EternityRing;\n bracelet?: Bracelet;\n completedRingId?: number;\n engagementRingId?: number;\n eternityRingId?: number;\n braceletId?: number;\n}\n\nexport interface OrderViewModel {\n id: number;\n completedDate: Date | string | null;\n creationDate: Date | string;\n discount?: number;\n status: OrderStatus;\n items: OrderItemViewModel[];\n totalPrice: number;\n user: IUserProfile | null;\n description: string | null;\n invoice?: UploadFile | string | undefined | any;\n pdf?: UploadFile | string | undefined | any;\n}\n\nexport interface MeleeOrderItem {\n itemId: number;\n numberOfStones?: number;\n carats?: number;\n}\n\nexport interface UpsertOrder {\n discount?: number;\n newDiamondIds: number[];\n newMelees: MeleeOrderItem[];\n removedItems: number[];\n userId?: string;\n}\n\nexport interface OrderEmailModel {\n emailTo: string;\n emailCc: string[];\n title: string;\n description: string;\n invoiceUrl: string;\n}\nexport { OrderStatus };\n","import Axios from \"axios\";\nimport { UploadFile } from \"../models/misc\";\nimport ReactGa from \"react-ga\";\nimport {\n IAccessUser,\n ILoginAccessResponse,\n ILoginResponse,\n IMarkupUser,\n IRegisterRequest,\n IRegisterRequestFromEmail,\n IUpsertAddressRequest,\n IUserAccess,\n IUserAddress,\n IUserAddressWithEmail,\n IUserMarkup,\n IUserProfile,\n} from \"../models/users\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n addAddress: \"/api/users/current/addresses\",\n changePassword: \"/api/users/change-password\",\n changePasswordByToken: \"/api/auth/change-password\",\n changeUserBlockStatus: \"/api/users/{id}/blocked\",\n changeUserRole: \"/api/users/{id}/role\",\n changeUserStatus: \"/api/users/{id}/status\",\n confirmEmail: \"/api/auth/confirm-email\",\n currentUser: \"/api/users/current\",\n editAccount: \"/api/users\",\n getAllUsers: \"/api/users\",\n login: \"/api/auth/login\",\n logo: \"/api/users/{id}/logo\",\n refreshToken: \"/api/users/current/refresh-token\",\n register: \"/api/auth/register\",\n resentConfirmationEmail: \"/api/auth/resend-confirm-email\",\n resetPassword: \"/api/auth/reset-password\",\n updateAddress: \"/api/users/{userId}/addresses/{id}\",\n updateSubscriptions: \"/api/users/current/newsletter/subscriptions\",\n updatePrimaryColor: \"/api/users/{userId}/primaryColor\",\n updateDomain: \"/api/users/{userId}/domain\",\n addUserMarkup: \"/api/users/{userId}/markup\",\n addUserAccess: \"/api/users/{userId}/access\",\n deleteUserMarkup: \"/api/users/markup/{markupId}\",\n deleteUserAccess: \"/api/users/access/{accessId}\",\n deleteUser: \"/api/users/{userId}\",\n};\n\nconst addAddress = async (address: IUpsertAddressRequest): Promise => {\n const result = await Axios.post(routes.addAddress, address, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst changePassword = async (currentPassword: string, newPassword: string): Promise =>\n await Axios.post(\n routes.changePassword,\n { currentPassword, newPassword },\n {\n headers: authorizationHeader(),\n }\n );\n\nconst changePasswordByToken = async (email: string, token: string, newPassword: string): Promise =>\n await Axios.post(routes.changePasswordByToken, {\n email,\n token,\n password: newPassword,\n });\n\nconst changeUserBlockedStatus = async (userId: string, blocked: boolean, blockedUntil?: Date): Promise => {\n const route = routes.changeUserBlockStatus.replace(\"{id}\", userId);\n await Axios.patch(\n route,\n { isBlocked: blocked, blockedUntil },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst changeUserRole = async (userId: string, newRole: string | null): Promise => {\n const route = routes.changeUserRole.replace(\"{id}\", userId);\n await Axios.patch(\n route,\n { newRole },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst changeUserStatus = async (userId: string, approved: boolean): Promise => {\n const route = routes.changeUserStatus.replace(\"{id}\", userId);\n await Axios.patch(\n route,\n { isApproved: approved },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst confirmEmail = async (email: string, token: string): Promise =>\n await Axios.post(routes.confirmEmail, { email, token });\n\nconst editAccount = async (\n firstName: string,\n lastName: string,\n businessTypeId: number | null,\n userId?: string\n): Promise => {\n const route = userId ? `${routes.editAccount}/${userId}` : routes.editAccount;\n\n return await Axios.patch(\n route,\n { firstName, lastName, businessTypeId },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst getAllUsers = async (): Promise => {\n const result = await Axios.get(routes.getAllUsers, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst getUser = async (token: string): Promise => {\n const result = await Axios.get(routes.currentUser, {\n headers: authorizationHeader(token),\n });\n\n return {\n user: result.data,\n accessToken: token,\n };\n};\n\nconst login = async (email: string, password: string): Promise => {\n const result = await Axios.post(routes.login, {\n email,\n password,\n });\n\n const userPrimaryColor = result.data.primaryColor;\n if (userPrimaryColor !== null) {\n document.documentElement.style.cssText = `--bright-color: ${userPrimaryColor}`;\n localStorage.setItem(\"primaryColor\", userPrimaryColor);\n }\n ReactGa.set({ userId: result.data.id });\n return {\n user: result.data,\n accessToken: result.headers[\"x-access-token\"],\n };\n};\n\nconst refreshToken = async (token: string): Promise => {\n const result = await Axios.get(routes.refreshToken, {\n headers: authorizationHeader(token),\n });\n\n return result.data;\n};\n\nconst register = async

(\n registerRequest: P\n): Promise => {\n const result = await Axios.post(routes.register, registerRequest, {\n headers: authorizationHeader(),\n });\n\n return result.data;\n};\n\nconst resendConfirmationEmail = async (email: string): Promise =>\n await Axios.post(routes.resentConfirmationEmail, { email });\n\nconst resetPassword = async (email: string): Promise => await Axios.post(routes.resetPassword, { email });\n\nconst updateAddress = async (\n id: number,\n address: IUpsertAddressRequest,\n userId = \"current\"\n): Promise => {\n const route = routes.updateAddress.replace(\"{id}\", id.toString()).replace(\"{userId}\", userId);\n const result = await Axios.put(route, address, {\n headers: authorizationHeader(),\n });\n return result.data;\n};\n\nconst updateSubscriptions = async (ids: number[]): Promise => {\n await Axios.patch(\n routes.updateSubscriptions,\n { channelIds: ids },\n {\n headers: authorizationHeader(),\n }\n );\n};\n\nconst upsertAgentLogo = async (userId: string, image: UploadFile): Promise => {\n const route = routes.logo.replace(\"{id}\", userId);\n const result = await Axios.put(\n route,\n { image },\n {\n headers: authorizationHeader(),\n }\n );\n\n return result.data;\n};\n\nconst updatePrimaryColor = async (userId: string, color: string): Promise => {\n const route = routes.updatePrimaryColor.replace(\"{userId}\", userId);\n const result = await Axios.patch(route, { color }, { headers: authorizationHeader() });\n\n return result.data;\n};\n\nconst updateUserDomain = async (userId: string, domain: string): Promise => {\n const route = routes.updateDomain.replace(\"{userId}\", userId);\n const result = await Axios.patch(route, { domain }, { headers: authorizationHeader() });\n\n return result.data;\n};\n\nconst addUserMarkup = async (\n userId: string,\n caratMin: number | null | undefined,\n caratMax: number | null | undefined,\n priceMin: number | null | undefined,\n priceMax: number | null | undefined,\n percent: number | null | undefined\n): Promise => {\n const route = routes.addUserMarkup.replace(\"{userId}\", userId);\n const result = await Axios.post(\n route,\n { caratMin: caratMin, caratMax: caratMax, priceMin: priceMin, priceMax: priceMax, percent: percent },\n { headers: authorizationHeader() }\n );\n\n console.log(result);\n\n return result.data;\n};\n\nconst addUserAccess = async (userId: string, pageId: string[]): Promise => {\n const route = routes.addUserAccess.replace(\"{userId}\", userId);\n\n const result = await Axios.post(route, { pageId }, { headers: authorizationHeader() });\n\n return result.data;\n};\n\nconst deleteUserMarkup = async (markupId: number, userId: string): Promise => {\n const route = routes.deleteUserMarkup.replace(\"{markupId}\", markupId.toString());\n await Axios.delete(route, { headers: authorizationHeader() });\n\n return {\n markupId,\n userId,\n };\n};\n\nconst deleteUserAccess = async (accessId: number, userId: string): Promise => {\n const route = routes.deleteUserAccess.replace(\"{accessId}\", accessId.toString());\n await Axios.delete(route, { headers: authorizationHeader() });\n\n return {\n accessId,\n userId,\n };\n};\n\nconst deleteUser = async (userId: string): Promise => {\n const route = routes.deleteUser.replace(\"{userId}\", userId);\n const response = await Axios.delete(route, { headers: authorizationHeader() });\n return response.data;\n};\n\nexport {\n addAddress,\n changePassword,\n changePasswordByToken,\n changeUserBlockedStatus,\n changeUserRole,\n changeUserStatus,\n confirmEmail,\n editAccount,\n getAllUsers,\n getUser,\n login,\n refreshToken,\n register,\n resendConfirmationEmail,\n resetPassword,\n updateAddress,\n updateSubscriptions,\n upsertAgentLogo,\n updatePrimaryColor,\n updateUserDomain,\n addUserMarkup,\n deleteUserMarkup,\n deleteUserAccess,\n addUserAccess,\n deleteUser,\n};\n"],"sourceRoot":""}