{"version":3,"sources":["utils.ts","store/admin/messages.ts","store/products.ts","store/admin/diamondManagement.ts","store/ringSettings.ts","store/genericDiamonds.ts","store/admin/meleeManagement.ts","store/UIState.ts","services/cart.ts","store/cart.ts","store/admin/userManagement.ts","store/admin/siteSettings.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/products.ts","services/apiUtils.ts","services/contact.ts","services/emails.ts","registerServiceWorker.ts","components/loading.tsx","components/public-route.tsx","components/idleTimer.tsx","router.tsx","index.tsx","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","constants.ts","services/shows.ts","services/melee.ts","services/orders.ts","services/ringSettings.ts","services/wishList.ts","store/wishList.ts","services/genericDiamonds.ts","models/products.ts","store/admin/withErrorDispatch.ts","store/data.ts","store/orders.ts","components/private-route.tsx","store/domain.ts","store/pushNotifications.ts","store/diamonds.ts","services/auth.ts","models/orders.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","filterOvertoneOrIntensity","data","filter","colors","filterValue","overtones","BROWN","find","color","name","id","ORANG","GRAY","PURPL","YELLOW","BLU","GREEN","PINK","RED","VIOLET","diamond","some","findOvertoneColor","overtone","search","colorId","checkForOvertone","intensities","Faint","Very_Light","Light","Fancy_Light","Fancy","Fancy_Intense","Fancy_Vivid","Fancy_Deep","Fancy_Dark","findIntensity","toUpperCase","fancyIntensity","toLowerCase","checkForIntensities","acknowledge","assign","dispatch","success","createActionCreator","resolve","commit","message","severity","reducer","createReducer","handleAction","state","action","produce","draft","splice","findIndex","item","payload","push","uuid","actions","fetchAll","async","result","productService","oneOfAKind","product","status","subType","type","classic","studs","tennisNecklaces","tennisBracelets","watches","pendants","bridal","necklaces","eternityBand","fetchSingleProduct","stockNumber","singleProduct","addDiamond","image","content","withErrorDispatch","diamondsService","changeActiveStatus","diamondId","isActive","newStatus","changeStatus","fetchAllDiamonds","diamonds","highlight","importCsv","file","messageActions","setTimeout","window","location","reload","updateDiamond","concat","d","products","p","isHighlighted","highlightedProduct","newDiamond","fetchRingSettings","getState","ringSettings","all","ringService","setInterval","REFETCH_DATA_INTERVAL","fetchGenericDiamonds","genericDiamondsService","genericDiamonds","addMelee","model","meleeService","melee","changeMeleeStatus","editMelee","fetchMelees","melees","i","itemIndex","newItem","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","admin_name_diamond","white","fancy","fancyShapeLines","memo","labGrown","saltnpepper","matchingPairs","black","admin_melee","admin_diamonds","newFilters","f","console","log","el","checkedItemsNew","diamondIds","routes","addDiamondToCart","itemId","wishedItemId","Axios","post","headers","authorizationHeader","sideCartView","sideCartOpen","fetchCartItems","get","cartService","store","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","removeFromCart","productId","wishList","w","setName","delete","itemsToRemove","isArray","orderActions","createOrder","authActions","logout","wihsListActions","bulkRemoveDiamondsFromBasket","removeFromWishList","deleteDiamondsSetFromBasket","remainingDiamonds","changeUserBlockStatus","userId","blocked","blockedUntil","authService","blockUser","changeUserRole","newRole","role","changeRole","changeUserStatus","approved","approveUser","createUser","request","user","editAccount","addressId","address","fetchUsers","users","upsertAgentLogo","url","updatePrimaryColor","updateUserDomain","domain","addUserMarkup","caratMin","caratMax","percent","priceMin","priceMax","markup","addUserAccess","access","deleteUserMarkup","markupId","markupUser","deleteUserAccess","accessId","accessUser","deleteUser","userIdResponse","u","addresses","email","businessType","businessTypeId","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","e1Video","e2Video","e3Video","updateAboutUsConfiguration","image1","image2","updateContactInformation","information","fetchSupportInformation","updateSupportInformation","homepage","aboutUs","contactInformation","maintenance","maintenanceMessage","support","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","importDiamondsCsv","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","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","getBaseUrl","origin","business_types","countries","clarities","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","getDiamond","getHighlightedDiamond","formData","FormData","append","export","Diamondsimport","getAll","getSingleProduct","Error","edit","delProduct","onExportCsv","responseType","blob","Blob","URL","createObjectURL","link","createElement","href","setAttribute","appendChild","click","removeChild","revokeObjectURL","bearer","Authorization","getContactInformation","sendContactUsMail","getSupportInfo","updateSupportInfo","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","singleDiamond","authDate","isMaintenance","fetchIsMaintenance","dataActions","fetchMaintenanceState","fetchDomainLayout","pushNotificationsActions","router","useHistory","useEffect","pageview","fallback","exact","path","roles","startsWith","to","require","initialize","ReactDOM","utils","MomentUtils","getElementById","process","addEventListener","fetch","contentType","indexOf","ready","unregister","checkValidServiceWorker","registerServiceWorker","fetchCountries","dataService","items","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","USER_PRIMARY_COLOR_REGEX","RegExp","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","DiamondStatusEnum","ProductType","actionPromise","successCallback","successMessage","fetchHomepage","fetchAboutUs","fetchBusinessTypes","fetchDiamondsRelatedEntities","Promise","itemType","values","fetchEmailChannels","fetchSupportInfo","supportServices","businessTypes","fetchAllOrders","orderServices","redirectUrl","mathingPairs","snP","fancyShape","fancyColor","newUpdatedNotification","serviceWorkerStatus","newNotificationState","fetchSingleDiamond","clearSingleDiamond","fetchHighlightedDiamond","resetDiamonds","highlighted","holdUserId","wishListActions","Array","Suspended","addAddress","getAllUsers","logo","resentConfirmationEmail","updateDomain","changeUserBlockedStatus","isBlocked","isApproved","getUser","userPrimaryColor","registerRequest","channelIds"],"mappings":"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","file":"static/js/main.4b8ec744.chunk.js","sourcesContent":["// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\n\nimport { Filter } from \"./hooks/useDiamondsFilters\";\nimport { Diamonds as DiamondType } from \"./models/products\";\nimport { Color } from \"./models/misc\";\n\n\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\n\ntype Overtones = {\n [key: string]: number;\n};\n\nconst filterOvertoneOrIntensity = (data: unknown, filter: Filter, colors: Color[]): boolean => {\n const filterValue = filter.value as number[];\n\n // Diamonds filtering by overtone\n if (filter.key === \"colorId\") {\n let overtones: Overtones = {\n BROWN: colors.find(color => color.name === \"Brown\")!.id,\n ORANG: colors.find(color => color.name === \"Orange\")!.id,\n GRAY: colors.find(color => color.name === \"Gray\")!.id,\n PURPL: colors.find(color => color.name === \"Purple\")!.id,\n YELLOW: colors.find(color => color.name === \"Yellow\")!.id,\n BLU: colors.find(color => color.name === \"Blue\")!.id,\n GREEN: colors.find(color => color.name === \"Green\")!.id,\n PINK: colors.find(color => color.name === \"Pink\")!.id,\n RED: colors.find(color => color.name === \"Red\")!.id,\n VIOLET: colors.find(color => color.name === \"Violet\")!.id,\n };\n\n const checkForOvertone = (filterValue: number[], diamond: DiamondType) => {\n return filterValue.some(value => {\n const findOvertoneColor = Object.keys(overtones).find(key => overtones[key] === value) as string;\n const checkWord = diamond.overtone && findOvertoneColor ? diamond.overtone.search(findOvertoneColor) : -1;\n const ifTrue = checkWord !== -1 || diamond.colorId === value ? true : false;\n return ifTrue;\n });\n };\n return checkForOvertone(filterValue, data as DiamondType);\n }\n // Diamonds filtering by fancyIntensity\n if (filter.key === \"fancyIntensity\") {\n let intensities: Overtones = {\n Faint: colors.find(color => color.name === \"Faint\")!.id,\n Very_Light: colors.find(color => color.name === \"Very Light\")!.id,\n Light: colors.find(color => color.name === \"Light\")!.id,\n Fancy_Light: colors.find(color => color.name === \"Fancy Light\")!.id,\n Fancy: colors.find(color => color.name === \"Fancy\")!.id,\n Fancy_Intense: colors.find(color => color.name === \"Fancy Intense\")!.id,\n Fancy_Vivid: colors.find(color => color.name === \"Fancy Vivid\")!.id,\n Fancy_Deep: colors.find(color => color.name === \"Fancy Deep\")!.id,\n Fancy_Dark: colors.find(color => color.name === \"Fancy Dark\")!.id,\n };\n const checkForIntensities = (filterValue: number[], diamond: DiamondType) => {\n return filterValue.some(value => {\n const findIntensity = Object.keys(intensities)\n .find(key => intensities[key] === value)\n ?.toUpperCase()\n .replace(\"_\", \" \") as string;\n const checkWord =\n diamond.fancyIntensity && diamond.fancyIntensity.toLowerCase() === findIntensity.toLowerCase() ? true : false;\n return checkWord;\n });\n };\n return checkForIntensities(filterValue, data as DiamondType);\n }\n return false;\n};\n\nexport { dataUrlToBase64, pipe, removeEmptyStrings, convertToLocale, truncateText, filterOvertoneOrIntensity };\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 productService from \"../services/products\";\nimport {\n Ring,\n Bracelet,\n Pendant,\n Necklace,\n Earring,\n OneOfAKindProduct,\n Stud,\n TennisNecklace,\n Watch,\n Bridal,\n TennisBracelet,\n Band\n} from \"../models/products\";\n\nexport type State = {\n singleProduct: Ring | Bracelet | Pendant | Necklace | Earring | Stud | Watch | TennisNecklace | Bridal | Band | null;\n oneOfAKind: OneOfAKindProduct[] | null;\n studs: OneOfAKindProduct[] | null;\n tennisNecklaces: OneOfAKindProduct[] | null;\n tennisBracelets: OneOfAKindProduct[] | null;\n watches: OneOfAKindProduct[] | null;\n bridal: OneOfAKindProduct[] | null;\n pendants: OneOfAKindProduct[] | null;\n classic: OneOfAKindProduct[] | null;\n necklaces: OneOfAKindProduct[] | null;\n eternityBand: OneOfAKindProduct[] | null;\n};\n\nconst defaultState: State = {\n singleProduct: null,\n oneOfAKind: null,\n studs: null,\n tennisNecklaces: null,\n tennisBracelets: null,\n watches: null,\n bridal: null,\n pendants: null,\n classic: null,\n necklaces: null,\n eternityBand: 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 );\n\n const classic = data.filter(\n product =>\n product.status === \"Available\" &&\n (product.type === \"Studs\" ||\n product.type === \"Necklaces\" && product.subType === \"Tennis\" ||\n product.type === \"Pendants\" ||\n product.type === \"Bracelets\" && product.subType === \"Tennis\" ||\n product.type === \"Eternity Band\"\n )\n );\n\n const studs = data.filter(product => product.type === \"Studs\" && product.status === \"Available\");\n const tennisNecklaces = data.filter(product => product.type === \"Necklaces\" && product.subType === \"Tennis\" && product.status === \"Available\");\n const tennisBracelets = data.filter(product => product.type === \"Bracelets\" && product.subType === \"Tennis\" && product.status === \"Available\");\n const watches = data.filter(product => product.type === \"Rolex\" && product.status === \"Available\");\n const pendants = data.filter(product => product.type === \"Pendants\" && product.status === \"Available\");\n const bridal = data.filter(product => product.type === \"Bridal\" && product.status === \"Available\");\n const necklaces = data.filter(product => product.type === \"Necklaces\" && product.status === \"Available\");\n const eternityBand = data.filter(product => product.type === \"Eternity Band\" && product.status === \"Available\");\n\n return resolve({ oneOfAKind, studs, tennisNecklaces, watches, bridal, tennisBracelets, pendants, classic, necklaces, eternityBand});\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 | Watch | Bridal | TennisBracelet) => 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 { 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 { 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 { 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 | \"admin_diamonds\"\n | \"userWishlistBox\"\n | \"admin_melee\"\n | \"admin_basket_items\"\n | \"white\"\n | \"fancyShapeLines\"\n | \"fancy\"\n | \"black\"\n | \"memo\"\n | \"admin_name_diamond\"\n | \"labGrown\"\n | \"saltnpepper\"\n | \"matchingPairs\"\n | \"studs\";\n \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 remove: createActionCreator(\"@@CHECK/REMOVE\", resolve => (data: { diamondId: number; pageId: PageId }) =>\n resolve(data)\n ),\n checkAll: createActionCreator(\"@@CHECK/CHECK_ALL\", resolve => (data: { diamondIds: number[]; pageId: PageId }) =>\n resolve(data)\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 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 admin_name_diamond: defaultPageState,\n studs: defaultPageState,\n white: defaultPageState,\n fancy: defaultPageState,\n fancyShapeLines: defaultPageState,\n memo: defaultPageState,\n labGrown: defaultPageState,\n saltnpepper: defaultPageState,\n matchingPairs: defaultPageState,\n black: defaultPageState,\n admin_melee: defaultPageState,\n admin_diamonds: 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 draft[action.payload.pageId].filters = newFilters;\n console.log(`ADD Filter: PageId=${action.payload.pageId}, Filters=`, newFilters); // Debug log\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 draft[action.payload.pageId].filters = newFilters;\n console.log(`REMOVE Filter: PageId=${action.payload.pageId}, Filters=`, newFilters); // Debug log\n })\n ),\n handleAction(changeFilters.reset, (state, action) =>\n produce(state, draft => {\n draft[action.payload].filters = [];\n console.log(`RESET Filters: PageId=${action.payload}`); // Debug log\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 console.log(`CHECK Product: PageId=${action.payload.pageId}, CheckedItems=`, checkedItems); // Debug log\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 console.log(`REMOVE Product: PageId=${action.payload.pageId}, CheckedItems=`, checkedItems); // Debug log\n })\n ),\n handleAction(checkProduct.checkAll, (state, action) =>\n produce(state, draft => {\n const checkedItemsNew = [...action.payload.diamondIds];\n draft[action.payload.pageId].checkedItems = checkedItemsNew;\n console.log(`CHECK ALL Products: PageId=${action.payload.pageId}, CheckedItems=`, checkedItemsNew); // Debug log\n })\n ),\n handleAction(checkProduct.removeAll, (state, action) =>\n produce(state, draft => {\n draft[action.payload].checkedItems = [];\n console.log(`REMOVE ALL Products: PageId=${action.payload}`); // Debug log\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 console.log(`SET ORDER: PageId=${action.payload.pageId}, Sort=`, draft[action.payload.pageId].sort); // Debug log\n })\n ),\n handleAction(pagination.setPage, (state, action) =>\n produce(state, draft => {\n draft[action.payload.pageId].pagination.pageNumber = action.payload.pageNumber;\n console.log(`SET PAGE: PageId=${action.payload.pageId}, PageNumber=${action.payload.pageNumber}`); // Debug log\n })\n ),\n handleAction(pagination.setRowsPerPage, (state, action) =>\n produce(state, draft => {\n draft[action.payload.pageId].pagination.rowsPerPage = action.payload.rowsPerPage;\n console.log(`SET ROWS PER PAGE: PageId=${action.payload.pageId}, RowsPerPage=${action.payload.rowsPerPage}`); // Debug log\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 { 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 settings.e1Video?.content && (settings.e1Video.content = dataUrlToBase64(settings.e1Video.content));\n settings.e2Video?.content && (settings.e2Video.content = dataUrlToBase64(settings.e2Video.content));\n settings.e3Video?.content && (settings.e3Video.content = dataUrlToBase64(settings.e3Video.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 { 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 importDiamondsCsv = Object.assign(\n (file: File) => async (dispatch: Dispatch) => {\n try {\n await productsService.importDiamondsCsv(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 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 importDiamondsCsv\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\";\nimport { url } from \"inspector\";\n\nconst getBaseUrl = (): string => {\n return window.location.origin; \n};\n\n\nconst routes = {\n business_types: \"/api/data/business_types\",\n countries: \"/api/data/countries\",\n diamonds: {\n clarities: `${getBaseUrl()}/api/data/diamonds/clarities`, \n colors: `${getBaseUrl()}/api/data/diamonds/colors`,\n cuts: `${getBaseUrl()}/api/data/diamonds/cuts`,\n fluors: `${getBaseUrl()}/api/data/diamonds/fluors`,\n labs: `${getBaseUrl()}/api/data/diamonds/labs`,\n polishes: `${getBaseUrl()}/api/data/diamonds/polishes`,\n shapes: `${getBaseUrl()}/api/data/diamonds/shapes`,\n symmetries: `${getBaseUrl()}/api/data/diamonds/symmetries`,\n fancyIntensities: `${getBaseUrl()}/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, Diamonds as DiamondsType, Product, UpsertDiamondModel } from \"../models/products\";\nimport { removeEmptyStrings } from \"../utils\";\nimport { authorizationHeader } from \"./apiUtils\";\n\nconst routes = {\n diamonds: \"/api/diamonds\",\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 = `${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: string): Promise> => {\n const route = routes.diamond.replace(\"{id}\", id);\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","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 Watch,\n Bridal,\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 Diamondsimport: \"/api/diamonds/import\",\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 = 'Available' \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\nconst importDiamondsCsv = async (file: File): Promise => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n await Axios.post(routes.Diamondsimport, formData, {\n headers: authorizationHeader(),\n });\n};\n\nexport { getAll, getSingleProduct, addProduct, edit, delProduct, importCsv, onExportCsv, importDiamondsCsv };\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 { 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 ? \"| Whitley\" : \"\"}`}\n \n \n \n \n \n \n ) : (\n <>\n \n {`${pageTitle} ${!logoUrl ? \"| Whitley\" : \"\"}`}\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 classic = lazy(() => import(\"./pages/classic\"));\nconst tennisNecklaces = lazy(() => import(\"./pages/tennis-necklaces\"));\nconst tennisBracelets = lazy(() => import(\"./pages/tennis-bracelets\"));\nconst eternityBand = lazy(() => import(\"./pages/eternityBand\"));\nconst studs = lazy(() => import(\"./pages/studs\"));\nconst watches = lazy(() => import(\"./pages/watches\"));\nconst bridal = lazy(() => import(\"./pages/bridal\"));\nconst pendants = lazy(() => import(\"./pages/pendants\"));\nconst diamond = lazy(() => import(\"./pages/diamonds\"));\nconst singleDiamond = lazy(() => import(\"./pages/singleDiamond\"));\nconst necklaces = lazy(() => import(\"./pages/necklaces\"))\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 \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","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 singleDiamond: 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 singleDiamond: 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","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 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 { 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 TennisBracelet {\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 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 type Diamonds = {\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 isNameDiamond?: boolean;\n letter?: string;\n size?: number;\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 vendor?: 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}\n\nexport interface Watch {\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 Bridal {\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}\n\nexport interface Band {\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 metal: string;\n goldKarats: string;\n mainStoneColor: string;\n mainStoneClarity: string;\n diamondWeight: number;\n metalWeight: number;\n unitPrice2: 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 { 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 { 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 ? \"| Whitley\" : \"\"}`}\n \n \n \n \n \n \n ) : (\n <>\n \n {`${pageTitle} ${!logoUrl ? \"| Whitley\" : \"\"}`}\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 { AxiosResponse } from \"axios\";\nimport { createActionCreator, createReducer } from \"deox\";\nimport { produce } from \"immer\";\nimport { Dispatch } from \"redux\";\nimport { REFETCH_DATA_INTERVAL } from \"../constants\";\nimport { DiamondStatusEnum, Diamonds as 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 singleDiamond: 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\nexport const fetchSingleDiamond = Object.assign(\n (stockNumber: string) => async (dispatch: Dispatch) => {\n try {\n const result = await diamondsService.getDiamond(stockNumber);\n dispatch(fetchSingleDiamond.success(result));\n } catch (error) {\n console.error(\"Failed to fetch single diamond\", error);\n // Handle error if needed\n }\n },\n {\n success: createActionCreator(\n \"@@PRODUCTS/SINGLE_DIAMOND/FETCH\",\n resolve => (data: Product) => resolve(data)\n ),\n }\n);\n\nexport const clearSingleDiamond = createActionCreator(\"@@PRODUCTS/SINGLE_DIAMOND/CLEAR\", resolve => () => resolve());\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 singleDiamond: 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, () => ({ highlighted: null, all: null, singleDiamond: null })),\n handleAction(fetchAllDiamonds.success, (state, action) => ({ ...state, all: action.payload })),\n handleAction(fetchHighlightedDiamond.success, (state, action) => ({ ...state, highlighted: action.payload })),\n handleAction(clearSingleDiamond, (state) => ({ ...state, singleDiamond: null })),\n handleAction(fetchSingleDiamond.success, (state, action) => ({ ...state, singleDiamond: 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 fetchSingleDiamond,\n clearSingleDiamond\n};\n\nexport { actions, reducer };\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 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","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"],"sourceRoot":""}