{"version":3,"mappings":"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,MAAO,gFACT,EACA,CACE,MAAO,aACP,MAAO,0DACT,EACA,CACE,MAAO,aACP,MAAO,0DACT,EACA,CACE,MAAO,aACP,MAAO,0EACT,EACA,CACE,MAAO,aACP,MAAO,0EACT,EACA,CACE,MAAO,aACP,MAAO,qGACT,EACA,CACE,MAAO,aACP,MAAO,sEACT,EACA,CACE,MAAO,aACP,MAAO,0FACT,EACA,CACE,MAAO,aACP,MAAO,8BACT,EACA,CACE,MAAO,aACP,MAAO,sBACT,EACA,CACE,MAAO,aACP,MAAO,sBACT,EACA,CACE,MAAO,aACP,MAAO,0BACT,EACA,CACE,MAAO,aACP,MAAO,+BACT,CACF,EAEaC,GAAuB,GAAiC,CACnE,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aACP,MAAO,EAAE,8CAA8C,CACzD,EACA,CACE,MAAO,aAC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","names":["useAppDispatch","useDispatch","useAppSelector","useSelector","initialDrawerOptions","initialState","drawerSlice","createSlice","state","action","isOpen","type","options","openDrawer","closeDrawer","drawerReducer","StyledSvgIcon","styled","IcoMoonReact","props","SvgIcon","color","size","icon","className","layout","iconSet","device","getMediaQuery","deviceCondition","printStyle","css","StyledDrawer","StyledDrawerHeader","StyledDrawerBody","StyledPreventOverlay","Drawer","rest","dispatch","location","useLocation","_a","isPreventClose","_c","_b","drawerTitle","drawerWidth","user","bodyRef","useRef","drawerRef","handleCloseDrawer","isUserOnboarding","isDashboard","isOnboardingUncompleted","handleClickOutsidePortal","event","isOnboardingInProgress","handleEscKey","useEffect","useDrawerElements","InnerComponent","innerComponentProps","jsx","Fragment","jsxs","classNames","mapStateToProps","drawer","mapDispatchToProps","connect","StyledToastContainer","ToastContainer","getIconByType","contextClass","Toastify","portalSlice","component","title","buttons","openPortal","closePortal","portalSlice$1","StyledPortal","StyledPortalOverlay","StyledPortalModal","StyledModalHeader","StyledModalBody","StyledButtonWrapper","buttonLength","ButtonWrapper","children","React","ButtonType","switchColorByType","StyledButton","spinAnimation","keyframes","StyledSpinner","GlobalStyles","createGlobalStyle","StyledInnerDrawerContent","StyledGrayFormBox","StyledGrayFormRow","StyledErrorMessage","StyledFileErrorMessage","StyledFormStepWrapper","StyledEditCell","getStyledBorder","StyledCircle","StyledShadedBox","StyledSeparator","getIndicatorColor","StyledStatusIndicator","StyledRoundIconWrapper","StyledPasswordCondition","StyledHiddenFileInput","StyledInlineWrapper","StyledRoundBox","StyledAdminSettingsWrapper","StyledCustomsContentWrapper","StyledUnassignAdminBox","StyledDefaultCheckbox","StyledWarningBox","StyledLandingH1","StyledLandingH2","StyledLandingH3","StyledLandingContainer","StyledParagraph","StyledMarketingSiteWrapper","StyledMarketingSection","StyledInnerSection","StyledCenteredLayout","StyledSpinnerInputContainer","StyledSubtitle","StyledPasswordLabelBox","Button","loader","Portal","portalRef","Content","handleCloseModal","button","i","Routes","__vitePreload","n","App","defaultNamespace","defaultLanguage","resources","enTranslation","frTranslation","srTranslation","ruTranslation","i18n","Backend","LanguageDetector","initReactI18next","API_URL","AUTH_BASE_API_URL","USER_BASE_API_URL","SHIPPING_ADDRESS","BUYER","SELLER","NOTIFICATION_BASE_API_URL","BLACKLIST_BASE_API_URL","REGISTRATION_BASE_API_URL","VIN_BASE_API_URL","CERTIFICATE_BASE_API_URL","PURCHASE_BASE_API_URL","USER_STORAGE_PLACE","USER_CUSTOMS_CROSSING","CONTACT_BASE_API_URL","CUSTOM_TRANSACTION_STATUS_BASE_API_URL","AUTH_API","USER_API","BUYER_API","SELLER_API","REGISTRATION_API","VIN_API","CERTIFICATE_API","NOTIFICATION_API","DOWNLOAD_API","DHL_API","PAYMENT_API","USER_TYPE","USER_ROLES","ADMIN_ROLES","CUSTOMS_ROLES","MAX_UPLOAD_FILE","MAX_CHARACTERS","MIN_CHARACTERS","MIN_REQUIRED_SEARCH_CHARACTERS","CertificateState","PurchaseSubjectState","PaymentState","PurchaseState","mapAdminRoleName","PAYMENT_TYPE_MAP","getBuyerOptions","getPaymentTypeMapTranslation","getUserTypesTranslate","NOMENCLATURE_OPTIONS","nomenclatureOptions","getLanguageList","isAdmin","HOME_PAGE_ROUTE","EXPORTATION_COUNTRIES","setAccessToken","token","days","Cookies","getAccessToken","isAuthenticated","getUserRole","decodeToken","jwtDecode","removeAccessToken","setTempAccessToken","getTempAccessToken","removeTempAccessToken","getAxiosConfig","getAxiosBlobConfig","getAxiosMultipartFormConfig","REDIRECT_ERRORS","getErrorMessage","errorType","handleError","error","isNotify","isLoginDrawerOpen","axios","responseData","errorMessage","toast","_d","_f","_e","translatedErrorMessage","networkErrorMessage","getUser","createAsyncThunk","url","config","data","updateUser","updateUserPassword","finishOnboarding","setUserPrimaryShippingAddress","shippingAddressId","sendContactMail","userSlice","builder","removeUser","userReducer","getHeaders","NOTIFICATION_TYPES","getNotifications","pageIndex","pageSize","readAll","markAsRead","id","getUnreadCount","notificationsSlice","notification","actions","setNotificationPageIndex","notificationReducer","getFormattedShippingAddressList","input","address","mutableCountry","addShippingAddress","getShippingAddress","getPrimaryShippingAddress","updateShippingAddress","payload","removeShippingAddress","shippingAddressSlice","setShippingAddressPageSize","resetShippingAddressState","shippingAddress","getBuyer","loadBuyerList","param","queryParams","queryString","addBuyer","updateBuyer","removeBuyer","searchBuyer","keyword","charLength","buyerSlice","buyer","mutableBuyers","_isEmpty","setBuyerPageSize","buyerSlice$1","getConfig","getSeller","loadSellerList","addSeller","searchSeller","getEori","eoriNumber","getSellerByEoriNumber","rejectWithValue","addSellerToUserList","sellerId","sellerSlice","_isNull","setSellerPageSize","sellerSlice$1","createCertificate","searchCertificates","getFile","filePath","resolve","reject","certificatesSlice","setCertificatePageIndex","setParam","certificatesSlice$1","getPurchases","createPurchase","uploadSwift","formData","getSwiftFiles","purchaseId","group","purchaseSlice","purchase","setPurchasePageIndex","purchaseSlice$1","getDhl","orderDhl","dhlListSlice","setDhlPageIndex","dhlSlice","ADMIN_API_ROOT","CUSTOMS_API_ROOT","ADMIN_API_URL","getTranslateMonthNames","getVehicleTypeOptions","getTranslate_default_reserved_names","mapCustomsTransactionStatuses","customsTransactionStatusOptions","vehicleFields","paymentStatusOptions","setUserToken","decoded","exp","iat","now","differenceInMs","getAdminList","deleted","getAdmin","signUpAdmin","body","signInAdmin","validateOtp","otpToken","updateAdmin","removeAdmin","adminListSlice","mutableAdminList","admin","setAdminListPageSize","resetAdmin","adminListSlice$1","formatArrayToObject","arrList","results","obj","extractInvoiceBillingInformation","t","companyName","firstName","lastName","country","city","phone","postalCode","streetName","streetNumber","formatCommandId","command","extractMinMaxDateFromMonth","year","month","fullYear","ordinalMonthNumber","minDate","maxDate","getMonthName","monthNumber","date","generateYearOptions","limit","currentYear","yearRange","generateAppYearOptions","generateMonthOptions","monthName","index","formatCompactNumber","number","formatAbbreviateCurrency","isDateExpired","dateString","currentDate","formatDateToInputMask","isoDate","day","formatInputMaskToIsoString","formatInputMaskToDotIsoString","isMaskValid","inputValue","convertDateStringToISOString","workingStatusOptions","activeStatusOptions","formatDateToISOString","formatTo","format","getFriendlyDateFormat","desiredFormat","parsedDate","parseISO","getDiffValues","values","initialValues","diff","key","_isEqual","convertArrayToSelectFormatForAsync","items","item","label","result","value","dateToApi","getFormDataWithExpiredDate","formattedValues","dataTypes","formDataText","formDataBlob","_forEach","_includes","mutableValue","mergedData","getFormData","dateValue","isFieldsFilled","fields","fieldName","isAnyFieldsFilled","getAdminPurchases","sort","order","customsStatus","workingStatus","formattedMinDate","formattedMaxDate","getAdminPurchaseDetails","uploadPurchaseProform","uploadPurchaseCarProform","uploadPurchaseVehicleLicence","assignAdminToPurchase","adminId","assignReviewerToPurchase","uploadCustomFile","updateCustomFile","getCustomFiles","downloadCustomFile","file","updatePurchaseState","updatePurchasePaymentState","updatePurchaseDetails","updatePurchaseEur1Id","updatePurchasePrintDate","uploadUserDocument","uploadEoEur1Document","uploadPurchaseCooDocument","uploadCarDocument","uploadPurchaseSwift","removeAdminPurchase","postComment","removePurchaseComment","commentId","getComments","_reverse","updateAuctionHouse","updatePurchaseUserInformation","sendPurchaseEmail","getPurchaseInvoice","generatePurchaseEur1","generateCessionDate","generateAttestationDate","setUserToPurchase","userId","setExportationCountry","exportationCountry","getPurchaseListByUser","exportPurchasePaymentInformation","getCustomerList","onlyForwarders","getCustomerListIncludingExternal","getExternalCustomerList","searchAllCustomerList","updateExternalCustomer","addExternalCustomer","uploadCustomerDocument","toggleBlockingCustomer","updateCustomer","searchCustomers","searchForwarders","removeCustomer","getCustomerCustomFiles","uploadCustomerCustomFile","updateCustomerPaymentType","getPaymentHistoryList","updateCustomerStatus","customerId","status","updateCustomerType","downloadInvoice","getInvoicesByMonth","updateInvoicePaymentStatus","createCustomFacture","toggleFactureText","factureId","checkboxText","cancelFacture","entityType","getMonthlyFacture","regenerateMonthlyFacture","getAdminAuctionHouse","searchAdminAuctionHouse","addAdminAuctionHouse","updateAdminAuctionHouse","auctionHouseId","setAdminAuctionHouseToPurchase","adminPurchasesSlice","customFile","updateFiles","files","comment","setSort","setOrder","setMinDate","setMaxDate","resetPurchaseDetailsState","setCommentsPageIndex","setCustomsStatus","resetPurchaseList","setWorkingStatus","setPurchaseWorkingState","adminPurchasesSlice$1","customerListSlice","customer","setOnboardingStatus","setParamExternalCustomerList","setExternalCustomerListOrder","setExternalCustomerListSort","adminCustomersSlice","assignAdminToOrder","orderId","assignReviewerToOrder","removeAdminOrder","getOrderListByUser","getOrderList","getOrderMonthlyStatistics","getOrderGeneralStatistics","getAdminOrderDetails","updateOrderDetails","certificateId","sendOrderEmail","getOrderComments","postOrderComment","removeOrderComment","uploadOrderCooDocument","uploadOrderCarDocument","getOrderCustomFiles","uploadOrderCustomFile","updateOrderPaymentState","updateOrderState","updateOrderEur1Id","updateOrderPrintDate","getOrderInvoice","exportOrderPaymentInformation","exportOrderMonthly","exportOrdersByDateRange","generateOrderEur1","updateBuyerByOrderId","setBuyer","buyerId","getAdminSellers","searchAdminSellers","setSellerToOrder","requestPayload","updateAdminSeller","addAdminSeller","updateAdminSellerStatus","getAdminEori","changeSellerStatus","updateAdminBuyer","updateAdminBuyerByUserId","searchAdminBuyers","updateAdminBuyerStatus","updateAdminBuyerType","getAdminBuyerCustomFiles","uploadAdminBuyersCustomFile","orderListSlice","resetOrderDetailsState","resetOrderList","setOrderWorkingState","adminOrdersSlice","getStoragePlacesList","searchStoragePlaces","updateStoragePlace","addStoragePlace","removeStoragePlace","storagePlacesListSlice","storagePlace","adminStoragePlacesSlice","getCustomsCrossingList","updateCustomsCrossing","addCustomsCrossing","removeCustomsCrossing","searchCustomsCrossingList","customsCrossingSlice","customsCrossing","adminCustomsCrossingSlice","getCustomsVariableList","updateCustomsVariable","customsVariableSlice","variable","mutableCustomsVariableList","customsVariable","setCustomsVariables","adminCustomsVariableSlice","adminSellersSlice","seller","adminSellersSlice$1","adminForwardersSlice","adminForwardersSlice$1","getEur1CounterList","getReusableEur1List","createEur1Counter","removeEur1Counter","adminEur1CounterSlice","counter","setEur1CounterPageIndex","adminEur1CounterSlice$1","getBlackList","createBlacklist","updateBlacklist","removeBlacklist","adminBlacklistSlice","blacklist","adminBlacklistSlice$1","getMonthlyIncome","getYearlyIncome","getDiagramDataset","dataType","getCarValueByMonth","getCarValueByYear","currentTime","statisticSlice","setYear","setMonth","resetStatistic","statisticSlice$1","getDhlList","updateDhlState","updateDhlPaymentState","orderAdminDhl","removeDhl","dhlId","adminDhlSlice","dhl","adminDhlSlice$1","languageList","languageSlice","setLanguage","languageSlice$1","adminDashboardSlice","setDashboardDataType","resetDashboardDataType","adminDashboardSlice$1","createPrice","updateFactureArticlePrice","getDefaultPrices","priceFor","getCountryPrices","getUserPrices","getUserRange","createUserRange","updateUserRange","priceId","removeUserRange","updateCustomPrice","removeCustomPrice","pricesSlice","countryName","adminPricesSlice","searchAuctionHouseList","getAuctionHouseList","addAuctionHouse","params","auctionHouseSlice","addAuctionHouseToList","auctionHouseSlice$1","adminAuctionHouseSlice","auctionHouse","adminAuctionHouseSlice$1","getCustomsOfficerList","addCustomsOfficer","updateCustomsOfficer","removeCustomsOfficer","customsOfficerListSlice","officer","mutableList","adminCustomsOfficersSlice","getCustomsSellers","customsSellersSlice","customsSellersSlice$1","searchCustomsPurchases","getCustomsPurchase","getCustomsPurchaseCustomFiles","entityId","customsPurchasesSlice","customsPurchasesSlice$1","searchCustomsOrders","getCustomsOrder","getCustomsOrderCustomFiles","customsOrdersSlice","customsOrdersSlice$1","signInCustoms","getCustomsOfficer","customsOfficerSlice","resetCustomsOfficer","customsOfficerSlice$1","customsOrderDetailsSlice","resetCustomsOrderDetailsState","customsOrderDetailsSlice$1","customsPurchaseDetailsSlice","resetCustomsPurchaseDetailsState","customsPurchaseDetailsSlice$1","adminBuyerSlice","resetBuyerList","adminBuyerSlice$1","getDeblocageList","createDeblocage","adminDeblocageSlice","adminDeblocageSlice$1","adminReusableEur1ListSlice","setReusableEur1PageIndex","adminReusableEur1ListSlice$1","carValueStatisticSlice","adminCarValueStatisticSlice","store","configureStore","getDefaultMiddleware","theme","ReactDOM","Suspense","Provider","ThemeProvider"],"sources":["../../src/stores/hooks.ts","../../src/stores/drawer/drawer.slice.ts","../../src/components/common/SvgIcon/SvgIcon.styled.ts","../../src/components/common/SvgIcon/SvgIcon.component.tsx","../../src/styles/Breakpoints.ts","../../src/components/common/Drawer/Drawer.styled.ts","../../src/components/common/Drawer/Drawer.component.tsx","../../src/components/common/Drawer/Drawer.connect.ts","../../src/components/common/Toastify/Toastify.styled.ts","../../src/components/common/Toastify/Toastify.config.tsx","../../src/components/common/Toastify/Toastify.component.tsx","../../src/stores/portal/portal.slice.ts","../../src/components/common/Portal/Portal.styled.ts","../../src/components/common/ButtonWrapper/ButtonWrapper.styled.ts","../../src/components/common/ButtonWrapper/ButtonWrapper.component.tsx","../../src/types/button.types.ts","../../src/components/common/Button/Button.styled.ts","../../src/styles/Global.ts","../../src/components/common/Button/Button.component.tsx","../../src/components/common/Portal/Portal.component.tsx","../../src/App.tsx","../../src/i18n.ts","../../src/constants/Global.constants.ts","../../src/utils/auth.util.ts","../../src/helpers/errors.helper.ts","../../src/api/user.service.ts","../../src/stores/user/user.slice.ts","../../src/api/notification.service.ts","../../src/stores/notifications/notifications.slice.ts","../../src/api/shipping-address.service.ts","../../src/stores/shippingAddress/shippingAddress.slice.ts","../../src/api/buyer.service.ts","../../src/stores/buyer/buyer.slice.ts","../../src/api/seller.service.ts","../../src/stores/seller/seller.slice.ts","../../src/api/certificate.service.ts","../../src/stores/certificates/certificates.slice.ts","../../src/api/purchase.service.ts","../../src/stores/purchase/purchase.slice.ts","../../src/api/dhl.service.ts","../../src/stores/dhl/dhl.slice.ts","../../src/constants/Global.admin.constants.ts","../../src/helpers/auth.helpers.ts","../../src/api/admin/admin.auth.service.ts","../../src/stores/adminList/adminList.slice.ts","../../src/utils/common.util.ts","../../src/utils/form.util.ts","../../src/api/admin/admin.purchases.service.ts","../../src/api/admin/admin.customers.service.ts","../../src/api/admin/admin.invoices.service.ts","../../src/api/admin/admin.auction.service.ts","../../src/stores/adminPurchases/adminPurchases.slice.ts","../../src/stores/adminCustomers/adminCustomers.slice.ts","../../src/api/admin/admin.orders.service.ts","../../src/api/admin/admin.seller.service.ts","../../src/api/admin/admin.buyer.service.ts","../../src/stores/adminOrders/adminOrders.slice.ts","../../src/api/admin/admin.storageplaces.service.ts","../../src/stores/adminStoragePlaces/adminStoragePlaces.slice.ts","../../src/api/admin/admin.customscrossing.service.ts","../../src/stores/adminCustomsCrossing/adminCustomsCrossing.slice.ts","../../src/api/admin/admin.customsVariables.service.ts","../../src/stores/adminCustomsVariable/adminCustomsVariable.slice.ts","../../src/stores/adminSellers/adminSellers.slice.ts","../../src/stores/adminForwarders/adminForwarders.slice.ts","../../src/api/admin/admin.eur1Counter.service.ts","../../src/stores/adminEur1Counter/adminEur1Counter.slice.ts","../../src/api/admin/admin.blackList.service.ts","../../src/stores/adminBlacklist/adminBlacklist.slice.ts","../../src/api/admin/admin.statistic.service.ts","../../src/stores/adminStatistic/adminStatistic.slice.ts","../../src/api/admin/admin.dhl.service.ts","../../src/stores/adminDhl/adminDhl.slice.ts","../../src/stores/language/languageSlice.ts","../../src/stores/adminDashboard/adminDashboard.slice.ts","../../src/api/admin/admin.pricing.service.ts","../../src/stores/adminPrices/adminPrices.slice.ts","../../src/api/auction.service.ts","../../src/stores/auctionHouse/auctionHouse.slice.ts","../../src/stores/adminAuctionHouse/adminAuctionHouse.slice.ts","../../src/api/admin/admin.customsOfficer.service.ts","../../src/stores/adminCustomsOfficers/adminCustomsOfficers.slice.ts","../../src/api/customs/customs.sellers.service.ts","../../src/stores/customsSellers/customsSellers.slice.ts","../../src/api/customs/customs.purchases.service.ts","../../src/stores/customsPurchases/customsPurchases.slice.ts","../../src/api/customs/customs.orders.service.ts","../../src/stores/customsOrders/customsOrders.slice.ts","../../src/api/customs/customs.auth.service.ts","../../src/stores/customsOfficer/customsOfficer.slice.ts","../../src/stores/customsOrderDetails/customsOrderDetails.slice.ts","../../src/stores/customsPurchaseDetails/customsPurchaseDetails.slice.ts","../../src/stores/adminBuyer/adminBuyer.slice.ts","../../src/api/admin/admin.deblocage.service.ts","../../src/stores/adminDeblocage/adminDeblocage.slice.ts","../../src/stores/adminReusableEur1List/adminReusableEur1List.slice.ts","../../src/stores/adminCarValueStatistic/adminCarValueStatistic.slice.ts","../../src/stores/store.ts","../../src/styles/Theme.ts","../../src/main.tsx"],"sourcesContent":["import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\n\nimport type { RootState, AppDispatch } from './store.ts'\n\nexport const useAppDispatch: () => AppDispatch = useDispatch\nexport const useAppSelector: TypedUseSelectorHook = useSelector\n","import React from 'react'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { DrawerOptionProps, DrawerProps } from 'Components/common/Drawer/Drawer.types.ts'\n\nconst initialDrawerOptions: DrawerOptionProps = {\n drawerTitle: '',\n activeStep: undefined,\n}\n\nconst initialState: DrawerProps = {\n isOpen: false,\n type: null,\n options: initialDrawerOptions,\n}\n\nexport const drawerSlice = createSlice({\n name: 'drawer',\n initialState,\n reducers: {\n openDrawer: (state, action: PayloadAction<[boolean, React.ComponentType?, DrawerOptionProps?]>) => {\n const [isOpen, type, options] = action.payload\n state.isOpen = isOpen\n\n if (type) {\n state.type = type\n }\n\n if (options) {\n state.options = options\n }\n },\n closeDrawer: (state) => {\n state.isOpen = false\n state.type = null\n state.options = initialDrawerOptions\n },\n },\n})\n\nexport const { openDrawer, closeDrawer } = drawerSlice.actions\nexport default drawerSlice.reducer\n","import styled from 'styled-components'\nimport IcoMoonReact from 'icomoon-react'\n\nexport const StyledSvgIcon = styled(IcoMoonReact)`\n ${(props) => {\n if (props.layout) {\n return `\n border: 1px solid #D4D4D4;\n padding: 15px;\n background: #ffffff;\n border-radius: 8px;\n `\n }\n }}\n`\n","import iconSet from 'Assets/svg-icons.json'\n\nimport { StyledSvgIcon } from './SvgIcon.styled.ts'\n\ntype SvgIconProps = {\n color?: string\n size?: string | number\n icon: string\n className?: string\n layout?: boolean\n}\n\nconst SvgIcon = ({ color = '#000000', size = 20, icon, className = 'StyledSvgIcon', layout }: SvgIconProps): JSX.Element => (\n \n)\n\nexport default SvgIcon\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\n\nconst size = {\n xs: '400px', // for small screen mobile\n sm: '640px', // for mobile screen\n md: '768px', // for tablets\n lg: '1024px', // for laptops\n xl: '1280px', // for desktop / monitors\n xxl: '1600px', // for big screens\n xxxl: '1920px', // for big screens\n}\n\ntype DeviceSizes = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'\n\ntype DeviceProps = {\n [key in DeviceSizes]: string\n}\n\nexport const device: DeviceProps = {\n xs: `(max-width: ${size.xs})`,\n sm: `(max-width: ${size.sm})`,\n md: `(max-width: ${size.md})`,\n lg: `(max-width: ${size.lg})`,\n xl: `(max-width: ${size.xl})`,\n xxl: `(max-width: ${size.xxl})`,\n}\n\nexport const getMediaQuery = (deviceCondition: string, printStyle: () => FlattenSimpleInterpolation) => css`\n @media only screen and ${deviceCondition} {\n ${printStyle()}\n }\n`\n","import styled from 'styled-components'\nimport { getMediaQuery, device } from 'Styles/Breakpoints.ts'\n\nexport const StyledDrawer = styled.div<{ drawerWidth: number }>`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n position: fixed;\n top: 1.2rem;\n bottom: 1.2rem;\n right: 0;\n border-radius: 0.4rem;\n background-color: ${(props) => props.theme.colors.grays.white};\n width: ${(props) => (props.drawerWidth ? `${props.drawerWidth}rem` : '25rem')};\n height: auto;\n overflow: auto;\n transition: transform 0.3s ease-in-out;\n transform: translateX(100%);\n padding: 30px 45px;\n z-index: 1000;\n\n &.open {\n border: 1px solid ${(props) => props.theme.colors.grays.gray300};\n box-shadow: -12px 3px 20px rgba(0, 0, 0, 0.07);\n transform: translateX(0);\n right: 1.2rem;\n\n ${getMediaQuery(\n device.sm,\n () => `\n inset: 1rem;\n width: auto;\n `\n )}\n }\n`\n\nexport const StyledDrawerHeader = styled.div`\n display: flex;\n margin-bottom: 2rem;\n gap: 1rem;\n align-items: center;\n justify-content: flex-start;\n width: 100%;\n\n .drawer-close-btn {\n display: flex;\n cursor: pointer;\n }\n\n .drawer-subtitle {\n font-size: 14px;\n color: ${(props) => props.theme.colors.grays.gray800};\n }\n`\n\nexport const StyledDrawerBody = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n width: 100%;\n //position: relative;\n`\n\nexport const StyledPreventOverlay = styled.div`\n background-color: transparent;\n position: fixed;\n inset: 0;\n z-index: 1;\n`\n","import { useEffect, useRef, MutableRefObject } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport classNames from 'classnames'\n\nimport { DrawerComponentProps } from './Drawer.types.ts'\nimport { useAppDispatch, useAppSelector } from 'Stores/hooks.ts'\nimport { closeDrawer } from 'Stores/drawer/drawer.slice.ts'\n\nimport SvgIcon from '../SvgIcon'\n\nimport { StyledDrawer, StyledDrawerHeader, StyledDrawerBody, StyledPreventOverlay } from './Drawer.styled.ts'\n\nconst Drawer = ({ className, ...rest }: DrawerComponentProps): JSX.Element => {\n const dispatch = useAppDispatch()\n const location = useLocation()\n const isOpen = rest?.drawer?.isOpen\n const isPreventClose = rest?.drawer?.options?.preventClose\n const { drawerTitle = '', drawerWidth } = rest.drawer.options || {}\n const { user } = useAppSelector((state) => state.user)\n\n const bodyRef: MutableRefObject = useRef(document.querySelector('body'))\n const drawerRef = useRef(null)\n\n const handleCloseDrawer = () => {\n dispatch(closeDrawer())\n }\n\n const isUserOnboarding = () => {\n const isDashboard = location.pathname === '/dashboard'\n const isOnboardingUncompleted = user && !user.finishedOnboarding\n return isDashboard && isOnboardingUncompleted\n }\n\n const handleClickOutsidePortal = (event: MouseEvent) => {\n const isOnboardingInProgress = isUserOnboarding()\n\n if (drawerRef.current && !drawerRef.current.contains(event.target as Node) && !isOnboardingInProgress) {\n handleCloseDrawer()\n }\n }\n\n const handleEscKey = (event: KeyboardEvent) => {\n const isOnboardingInProgress = isUserOnboarding()\n\n if (event.key === 'Escape' && !isOnboardingInProgress) {\n dispatch(closeDrawer())\n }\n }\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener('keydown', handleEscKey)\n document.addEventListener('mousedown', handleClickOutsidePortal)\n } else {\n document.removeEventListener('mousedown', handleClickOutsidePortal)\n }\n\n return () => {\n window.removeEventListener('keydown', handleEscKey)\n document.removeEventListener('mousedown', handleClickOutsidePortal)\n }\n }, [isOpen])\n\n useEffect(() => {\n const updatePageScroll = () => {\n if (isOpen && bodyRef.current) {\n bodyRef.current.style.overflow = 'hidden'\n } else if (bodyRef.current) {\n bodyRef.current.style.overflow = ''\n }\n }\n\n updatePageScroll()\n }, [isOpen])\n\n const useDrawerElements = () => {\n const InnerComponent = rest?.drawer?.type\n\n const innerComponentProps = {\n drawerOptions: {\n ...rest.drawer.options,\n },\n }\n\n if (InnerComponent) {\n return \n }\n return <>\n }\n\n return (\n <>\n \n \n {!isPreventClose && (\n
\n \n
\n )}\n
{drawerTitle}
\n
\n\n {useDrawerElements()}\n \n {isOpen && }\n \n )\n}\n\nexport default Drawer\n","import { connect } from 'react-redux'\n\nimport Drawer from './Drawer.component.tsx'\nimport { RootState } from 'Stores/store.ts'\n\nconst mapStateToProps = ({ drawer }: RootState) => ({ drawer })\n\nconst mapDispatchToProps = {}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Drawer)\n","import styled from 'styled-components'\nimport { ToastContainer } from 'react-toastify'\n\nexport const StyledToastContainer = styled(ToastContainer).attrs({\n className: 'toast-container',\n bodyClassName: 'toast-body',\n progressClassName: 'progress',\n})`\n .toast-item {\n background-color: white;\n display: flex;\n color: black;\n padding: 10px;\n border-radius: 6px;\n }\n .success-message {\n border: 1px solid #80c570;\n }\n .error-message {\n border: 1px solid #e24840;\n }\n .info-message {\n border: 1px solid #5352ed;\n }\n .warning-message {\n border: 1px solid #f5ba5c;\n }\n`\n","import SvgIcon from 'Components/common/SvgIcon'\n\nexport const getIconByType = (type: string) => {\n switch (type) {\n case 'success': {\n return \n }\n case 'error': {\n return \n }\n case 'warning': {\n return \n }\n case 'info': {\n return \n }\n default: {\n return \n }\n }\n}\n\nexport const contextClass = {\n success: 'success-message',\n error: 'error-message ',\n info: 'info-message toast-item',\n warning: 'warning-message toast-item',\n default: 'info-message toast-item',\n}\n","import { StyledToastContainer } from './Toastify.styled.ts'\nimport { contextClass, getIconByType } from 'Components/common/Toastify/Toastify.config.tsx'\n\nconst Toastify = () => (\n getIconByType(type)}\n position=\"top-right\"\n toastClassName={({ type }) => contextClass[type || 'default'] + ' toast-item'}\n hideProgressBar={true}\n closeOnClick\n pauseOnFocusLoss\n draggable\n pauseOnHover\n theme=\"light\"\n />\n)\n\nexport default Toastify\n","import { ReactElement } from 'react'\n\nimport { ButtonTypeNames } from 'Types/button.types.ts'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\ntype InitialPortalStateProps = {\n isOpen: boolean\n component: ReactElement\n title: string\n buttons?: { type: ButtonTypeNames; label: string; handler: () => void }[]\n}\n\nconst initialState: InitialPortalStateProps = {\n isOpen: false,\n component: null,\n title: '',\n buttons: [],\n}\n\nexport const portalSlice = createSlice({\n name: 'portal',\n initialState,\n reducers: {\n openPortal: (\n state,\n action: PayloadAction<{\n component: JSX.Element\n title: string\n buttons: { type: ButtonTypeNames; label: string; handler: () => void }[]\n }>\n ) => {\n if (action.payload) {\n const { component, title, buttons } = action.payload\n state.isOpen = true\n state.title = title\n state.component = component\n if (buttons) {\n state.buttons = buttons\n }\n }\n },\n closePortal: (state) => {\n state.isOpen = false\n state.component = null\n },\n },\n})\n\nexport const { openPortal, closePortal } = portalSlice.actions\nexport default portalSlice.reducer\n","import styled from 'styled-components'\nimport { getMediaQuery, device } from 'Styles/Breakpoints.ts'\n\nexport const StyledPortal = styled.div`\n display: flex;\n position: fixed;\n inset: 0;\n align-items: center;\n justify-content: center;\n z-index: 1001;\n`\n\nexport const StyledPortalOverlay = styled.div`\n display: flex;\n position: absolute;\n inset: 0;\n background: white;\n filter: blur(5px);\n -webkit-filter: blur(5px);\n opacity: 0.5;\n transition: all 0.3s linear;\n z-index: 1002;\n`\n\nexport const StyledPortalModal = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n background: white;\n width: 30rem;\n border: 1px solid #d4d4d4;\n border-radius: 3px;\n padding: 2rem;\n box-shadow: -12px 7px 20px 0 rgba(0, 0, 0, 0.07);\n gap: 2rem;\n z-index: 1003;\n\n ${getMediaQuery(\n device.sm,\n () => `\n width: auto;\n margin: 1rem;\n `\n )}\n`\n\nexport const StyledModalHeader = styled.div`\n display: flex;\n flex-direction: row;\n gap: 2rem;\n\n .close-icon {\n cursor: pointer;\n }\n`\n\nexport const StyledModalBody = styled.div`\n display: flex;\n flex-direction: column;\n`\n","import styled from 'styled-components'\n\ninterface ButtonWrapperProps {\n buttonLength: number\n}\n\nexport const StyledButtonWrapper = styled.div`\n display: flex;\n justify-content: ${({ buttonLength }) => (buttonLength > 1 ? 'space-between' : 'flex-end')};\n width: 100%;\n`\n","import React, { ReactNode } from 'react'\nimport { StyledButtonWrapper } from 'Components/common/ButtonWrapper/ButtonWrapper.styled.ts'\n\ntype ButtonWrapper = {\n children: ReactNode\n}\n\nconst ButtonWrapper: React.FC = ({ children }: ButtonWrapper): JSX.Element => {\n const buttonLength = React.Children.count(children)\n return (\n \n {children}\n \n )\n}\n\nexport default ButtonWrapper\n","import React from 'react'\n\nexport enum ButtonType {\n Primary = 'primary',\n PrimaryMinimal = 'primaryMinimal',\n Secondary = 'secondary',\n SecondaryTransparent = 'secondaryTransparent',\n Error = 'error',\n Disabled = 'disabled',\n Transparent = 'transparent',\n TransparentMinimal = 'transparentMinimal',\n Link = 'link',\n Square = 'square',\n Download = 'download',\n MarketingPrimary = 'marketingPrimary',\n MarketingSecondary = 'marketingSecondary',\n MarketingTransparent = 'marketingTransparent',\n MarketingTransparentMinimal = 'marketingTransparentMinimal',\n successMinimal = 'successMinimal',\n}\n\nexport type ButtonTypeNames =\n | 'primary'\n | 'primaryMinimal'\n | 'secondary'\n | 'secondaryTransparent'\n | 'error'\n | 'disabled'\n | 'transparent'\n | 'transparentMinimal'\n | 'link'\n | 'square'\n | 'download'\n | 'marketingPrimary'\n | 'marketingSecondary'\n | 'marketingTransparent'\n | 'marketingTransparentMinimal'\n | 'successMinimal'\n | undefined\n\nexport interface ButtonProps {\n type?: 'button' | 'submit' | 'reset'\n children?: React.ReactNode\n buttonType?: ButtonTypeNames\n loader?: boolean\n disabled?: boolean\n onClick?: (event: React.MouseEvent) => void\n}\n","import styled, { DefaultTheme, keyframes } from 'styled-components'\nimport { ButtonProps, ButtonType, ButtonTypeNames } from 'Types/button.types.ts'\n\ninterface ButtonThemeProps {\n theme: DefaultTheme\n buttonType?: ButtonTypeNames\n}\n\nconst switchColorByType = (props: ButtonThemeProps) => {\n switch (props.buttonType) {\n case ButtonType.Primary:\n return `\n background-color: ${props.theme.colors.primary.default};\n color: ${props.theme.colors.grays.white};\n &:hover {\n background-color: ${props.theme.colors.primary.dark};\n }\n `\n case ButtonType.PrimaryMinimal:\n return `\n background-color: ${props.theme.colors.primary.default};\n color: ${props.theme.colors.grays.white};\n padding: 3px 18px;\n min-height: 22px;\n font-size: 12px;\n &:hover {\n background-color: ${props.theme.colors.primary.dark};\n }\n `\n case ButtonType.Secondary:\n return `\n background-color: ${props.theme.colors.grays.gray100};\n color: ${props.theme.colors.grays.gray900};\n &:hover {\n background-color: ${props.theme.colors.grays.gray200};\n }\n `\n case ButtonType.SecondaryTransparent:\n return `\n background-color: transparent;\n color: ${props.theme.colors.grays.gray900};\n border: 1px solid ${props.theme.colors.grays.gray300};\n &:hover {\n background-color: transparent;\n }\n `\n case ButtonType.Error:\n return `\n background-color: ${props.theme.colors.secondary.dark};\n color: ${props.theme.colors.grays.white};\n &:hover {\n background-color: ${props.theme.colors.secondary.extraDark};\n }\n `\n case ButtonType.Disabled:\n return `\n background-color: ${props.theme.colors.grays.gray200};\n color: ${props.theme.colors.grays.gray400};\n `\n case ButtonType.Transparent:\n return `\n border: 1px solid ${props.theme.colors.primary.default};\n background-color: transparent;\n color: ${props.theme.colors.primary.default};\n &:hover {\n border: 1px solid ${props.theme.colors.primary.dark};\n color: ${props.theme.colors.primary.dark};\n }\n `\n case ButtonType.TransparentMinimal:\n return `\n border: 1px solid ${props.theme.colors.primary.default};\n background-color: transparent;\n color: ${props.theme.colors.primary.default};\n padding: 3px 18px;\n min-height: 22px;\n font-size: 12px;\n &:hover {\n border: 1px solid ${props.theme.colors.primary.dark};\n color: ${props.theme.colors.primary.dark};\n }\n `\n case ButtonType.successMinimal:\n return `\n border: 1px solid ${props.theme.colors.state.success};\n background-color: ${props.theme.colors.state.successLight};\n color: ${props.theme.colors.grays.gray900};\n padding: 3px 18px;\n min-height: 22px;\n font-size: 12px;\n &:hover {\n background-color: ${props.theme.colors.state.success};\n }\n `\n case ButtonType.Link:\n return `\n border: none;\n color: ${props.theme.colors.primary.default};\n background: transparent;\n padding: 0;\n margin: 0;\n width: auto;\n `\n case ButtonType.Square:\n return `\n background-color: ${props.theme.colors.primary.default};\n padding: 0;\n width: 2.5rem;\n height: 2.5rem;\n `\n case ButtonType.Download:\n return `\n border-radius: 3px;\n background-color: #F5F5F9;\n justify-content: space-between;\n padding: 0.875rem;\n `\n case ButtonType.MarketingPrimary:\n return `\n background-color: ${props.theme.colors.primary.default};\n color: ${props.theme.colors.grays.white};\n border-radius: 8px;\n &:hover {\n background-color: ${props.theme.colors.primary.dark};\n }\n `\n case ButtonType.MarketingSecondary:\n return `\n min-width: 305px;\n padding: 15px 32px;\n flex-shrink: 0;\n border-radius: 16px;\n color: ${props.theme.colors.primary.default};\n font-size: 20px;\n line-height: 22px;\n font-weight: 600;\n `\n case ButtonType.MarketingTransparent:\n return `\n padding: 8px 28px;\n border-radius: 8px;\n color: ${props.theme.colors.primary.default};\n background: transparent;\n border: 1px solid var(--primary-main, #5352ED);\n font-weight: 500;\n width: 100%;\n `\n case ButtonType.MarketingTransparentMinimal:\n return `\n border: 1px solid ${props.theme.colors.primary.default};\n background-color: transparent;\n color: ${props.theme.colors.primary.default};\n padding: 8px 28px;\n border-radius: 8px;\n font-size: 14px;\n &:hover {\n border: 1px solid ${props.theme.colors.primary.dark};\n color: ${props.theme.colors.primary.dark};\n } \n `\n default:\n return `\n color: ${props.theme.colors.grays.white};\n background-color: ${props.theme.colors.primary.default};\n &:hover {\n background-color: ${props.theme.colors.primary.dark};\n }\n `\n }\n}\n\nexport const StyledButton = styled.button`\n box-sizing: border-box;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 3px;\n font-size: 14px;\n border: none;\n padding: 8px 28px;\n min-height: 38px;\n cursor: pointer;\n transition: background-color 0.5s ease;\n font-family: Inter, sans-serif;\n ${switchColorByType}\n\n &:disabled {\n background-color: ${(props) => (props.buttonType === 'link' ? 'transparent' : props.theme.colors.grays.gray200)};\n color: ${(props) => props.theme.colors.grays.gray400};\n cursor: default;\n border-color: transparent;\n }\n\n .children-content {\n flex: 1;\n }\n`\n\nconst spinAnimation = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n`\n\nexport const StyledSpinner = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n animation: ${spinAnimation} 2s infinite linear;\n`\n","import styled, { createGlobalStyle, DefaultTheme, keyframes } from 'styled-components'\nimport { getMediaQuery, device } from 'Styles/Breakpoints.ts'\n\nexport const GlobalStyles = createGlobalStyle`\n :root {\n font-family: Inter, sans-serif;\n font-weight: 400;\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-text-size-adjust: 100%;\n }\n\n body {\n margin: 0;\n background-color: ${(props) => props.theme.colors.grays.gray100};\n min-width: 100vw;\n height: 100vh;\n font-size: 14px;\n color: ${(props) => props.theme.colors.grays.gray800};\n padding-top: 6rem;\n line-height: 1.5rem;\n font-family: Inter, sans-serif;\n \n @media ${device.md} {\n padding-top: 8rem;\n }\n }\n \n //* {\n // box-sizing: border-box;\n //}\n \n h1 {\n font-size: 4.5rem;\n line-height: 4.8rem;\n }\n h2 {\n font-size: 3.5rem;\n line-height: 3.75rem;\n }\n h3 {\n font-size: 2.62rem;\n line-height: 2.8rem;\n margin: 0.75rem 0;\n }\n h4 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n h5 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n margin: 0.75rem 0;\n }\n h6 {\n font-size: 1.25rem;\n line-height: 1.75rem;\n margin: 0.75rem 0;\n font-weight: 600;\n }\n \n p {\n font-size: 0.875rem;\n line-height: 1.375rem;\n }\n \n a {\n color: ${(props) => props.theme.colors.primary.default};\n text-decoration: none\n }\n \n ul {\n margin: 0;\n padding-inline-start: 25px;\n }\n \n /* Colors */\n .primary-default {\n color: #5352ED;\n }\n .primary-light {\n color: #EEEEFD;\n }\n .primary-medium {\n color: #CBCBFA;\n }\n .primary-strong {\n color: #9897F4;\n }\n .primary-dark {\n color: #3837B4;\n }\n \n .color-medium {\n color: #4C5363;\n }\n \n .success {\n color: ${(props) => props.theme.colors.situational.success};\n }\n .warning {\n color: ${(props) => props.theme.colors.situational.warning};\n }\n .error {\n color: ${(props) => props.theme.colors.situational.error};\n }\n\n .gray-100 {\n color: ${(props) => props.theme.colors.grays.gray100};\n }\n .gray-200 {\n color: ${(props) => props.theme.colors.grays.gray200};\n }\n .gray-300 {\n color: ${(props) => props.theme.colors.grays.gray300};\n }\n .gray-400 {\n color: ${(props) => props.theme.colors.grays.gray400};\n }\n .gray-500 {\n color: ${(props) => props.theme.colors.grays.gray500};\n }\n .gray-600 {\n color: ${(props) => props.theme.colors.grays.gray600};\n }\n .gray-700 {\n color: ${(props) => props.theme.colors.grays.gray700};\n }\n .gray-800 {\n color: ${(props) => props.theme.colors.grays.gray800};\n }\n .gray-900 {\n color: ${(props) => props.theme.colors.grays.gray900};\n }\n \n .link-color {\n color: ${(props) => props.theme.colors.primary.default};\n line-height: 1rem;\n cursor: pointer;\n }\n \n .underline {\n text-decoration: underline;\n }\n \n /* Font sizes */\n .text-size-10 {\n font-size: 0.625rem;\n line-height: 1.5rem;\n }\n .text-size-12 {\n font-size: 0.75rem;\n line-height: 1.5rem;\n }\n .text-size-14 {\n font-size: 0.875rem;\n line-height: 1.5rem;\n }\n .text-size-16 {\n font-size: 1rem;\n line-height: 1.5rem;\n }\n .text-size-18 {\n font-size: 1.125rem;\n line-height: 1.5rem;\n }\n .text-size-20 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n }\n .text-size-24 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n }\n .text-size-26 {\n font-size: 1.625rem;\n line-height: 1.938rem;\n }\n \n /* Text style */\n .text-weight-300 {\n font-weight: 300;\n }\n .text-weight-400 {\n font-weight: 400;\n }\n .text-weight-500 {\n font-weight: 500;\n }\n .text-weight-600 {\n font-weight: 600;\n }\n .text-weight-700 {\n font-weight: 700;\n }\n .text-weight-800 {\n font-weight: 800;\n }\n .text-weight-900 {\n font-weight: 900;\n }\n \n .cursor-pointer {\n cursor: pointer;\n }\n\n .cursor-default {\n cursor: default;\n }\n \n .strikethrough {\n text-decoration: line-through;\n }\n \n .center-align {\n text-align: center;\n }\n \n .flex-column {\n display: flex;\n flex-direction: column;\n }\n \n .flex-inline {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n }\n \n .flex-center {\n display: flex;\n align-items: center;\n }\n \n .flex-space-between {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n \n .no-wrap {\n white-space: nowrap;\n }\n \n /* Flex helpers classes */\n .flex-gap-025 {\n gap: 0.25rem;\n }\n\n .flex-gap-05 {\n gap: 0.5rem;\n }\n\n .flex-gap-1 {\n gap: 1rem;\n }\n\n .flex-gap-1-5 {\n gap: 1.5rem;\n }\n \n .flex-gap-2 {\n gap: 2rem;\n }\n \n .mb-1 {\n margin-bottom: 1rem;\n }\n\n .mb-1_5 {\n margin-bottom: 1.5rem;\n }\n\n .mb-2 {\n margin-bottom: 2rem;\n }\n\n .mb-2_5 {\n margin-bottom: 2.5rem;\n }\n\n .mb-3 {\n margin-bottom: 3rem;\n }\n\n .mt-1 {\n margin-top: 1rem;\n }\n\n .mt-1_5 {\n margin-top: 1.5rem;\n }\n\n .mt-2 {\n margin-top: 2rem;\n }\n\n .mt-2_5 {\n margin-top: 2.5rem;\n }\n\n .mt-3 {\n margin-top: 3rem;\n }\n\n .w-full {\n width: 100%;\n }\n \n table {\n width: 100%;\n }\n\n .ellipsis-200 {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 200px;\n }\n \n /* Element structure */\n .half-children {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: start;\n gap: 1rem;\n\n > div {\n width: 50%;\n }\n }\n \n /* Datepicker */\n .datepicker-container {\n .react-datepicker,\n .react-datepicker__header {\n background-color: white;\n border: none;\n }\n .react-datepicker__current-month {\n margin: 1rem 0;\n font-weight: 400;\n font-size: 12px;\n }\n\n .react-datepicker {\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);\n border-radius: 4px;\n }\n\n .react-datepicker__day,\n .react-datepicker__day-name {\n font-size: 11px;\n font-weight: 400;\n }\n\n .react-datepicker__month-select,\n .react-datepicker__year-select {\n border: none;\n outline: none;\n cursor: pointer;\n\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n text-indent: 1px;\n text-overflow: '';\n\n background-color: transparent;\n background-image: url(\"data:image/svg+xml;utf8,\");\n background-repeat: no-repeat;\n background-position-x: 100%;\n background-position-y: 10px;\n border-radius: 2px;\n margin-right: 2rem;\n padding: 1rem 2rem 1rem 1rem;\n font-size: 12px;\n }\n\n .react-datepicker__navigation {\n top: 20px;\n\n > span:before {\n border-color: ${(props) => props.theme.colors.primary.default};\n }\n }\n\n .react-datepicker__day--selected {\n border-radius: 2px;\n background-color: ${(props) => props.theme.colors.primary.default};\n &:hover {\n background-color: ${(props) => props.theme.colors.primary.default};\n }\n }\n\n .react-datepicker__current-month--hasYearDropdown,\n .react-datepicker__header__dropdown.react-datepicker__header__dropdown--scroll {\n width: 50%;\n display: inline-block;\n }\n }\n`\n\nexport const StyledBox = styled.div`\n display: flex;\n gap: 1rem;\n flex-direction: row;\n align-items: center;\n`\n\nexport const StyledInnerDrawerContent = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 100%;\n height: 100%;\n\n form {\n margin: auto;\n }\n`\n\n/* FORM Styled Components */\nexport const StyledGrayFormBox = styled.div`\n background-color: #f5f5f9;\n display: flex;\n flex-direction: column;\n padding: 1rem 1.25rem;\n border-radius: 0.188rem;\n margin: 0.45rem 0;\n gap: 0.75rem;\n`\n\nexport const StyledGrayFormRow = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n gap: 1rem;\n\n ${getMediaQuery(\n device.md,\n () => `\n flex-direction: column;\n `\n )}\n\n > div {\n width: 50%;\n\n @media ${device.md} {\n width: auto;\n }\n }\n`\n\nexport const StyledErrorMessage = styled.div`\n color: ${(props) => props.theme.colors.secondary.dark};\n font-size: 14px;\n font-weight: 400;\n margin-bottom: 0.75rem;\n`\n\nexport const StyledFileErrorMessage = styled.div`\n color: ${(props) => props.theme.colors.secondary.dark};\n font-size: 14px;\n font-weight: 400;\n`\n\nexport const StyledFormStepWrapper = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n`\n\nexport const StyledEditCell = styled.div`\n display: inline-flex;\n justify-content: right;\n width: 100%;\n`\n\ninterface StyledCircleProps {\n size?: number\n background?: string\n fontSize?: number\n hideBorder?: boolean\n borderColor?: string\n pointer?: boolean\n borderWeight?: number | string\n isClickable?: boolean\n}\n\ninterface StyledBorderProps {\n hideBorder: boolean\n borderColor: string\n borderWeight: string\n}\n\nconst getStyledBorder = (props: StyledBorderProps & { theme: DefaultTheme }): string => {\n if (props.hideBorder) {\n return `none`\n }\n\n if (props.borderColor) {\n return `${props.borderWeight || 1}px solid ${props.borderColor}`\n }\n\n return `1px solid ${props.theme.colors.grays.gray300}`\n}\n\nexport const StyledCircle = styled.div`\n border: ${getStyledBorder};\n background: ${(props) => `${props.background}` || 'white'};\n width: ${(props) => (props.size ? `${props.size}px` : '47px')};\n height: ${(props) => (props.size ? `${props.size}px` : '47px')};\n font-size: ${(props) => (props.fontSize ? `${props.fontSize}px` : '18px')};\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n font-weight: 500;\n cursor: ${(props) => (props.pointer ? 'pointer' : 'default')};\n`\n\nexport const StyledShadedBox = styled.div<{ padding?: string }>`\n display: flex;\n flex-direction: column;\n background: #ffffff;\n border: 1px solid ${(props) => props.theme.colors.grays.gray300};\n box-shadow: -12px 7px 20px rgba(0, 0, 0, 0.07);\n border-radius: 0.75rem;\n padding: ${(props) => props.padding ?? '1.25rem 1.5rem'};\n`\n\nexport const StyledButtonWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\nexport const StyledSeparator = styled.div<{ marginTop?: number; marginBottom?: number }>`\n width: 100%;\n height: 1px;\n background: ${(props) => props.theme.colors.grays.gray300};\n margin-top: ${(props) => `${props.marginTop}px` ?? ''};\n margin-bottom: ${(props) => `${props.marginBottom}px` ?? ''};\n`\n\nconst getIndicatorColor = (props: { color: string; theme: DefaultTheme }) => {\n switch (props.color) {\n case 'red': {\n return `\n background: ${props.theme.colors.secondary.dark};\n `\n }\n case 'yellow': {\n return `\n background: ${props.theme.colors.situational.warning};\n `\n }\n case 'rebeccapurple': {\n return `\n background: ${props.theme.colors.primary.strong};\n `\n }\n case 'blue': {\n return `\n background: ${props.theme.colors.primary.default};\n `\n }\n case 'green': {\n return `\n background: ${props.theme.colors.situational.success};\n `\n }\n default: {\n return `\n background: ${props.color};\n `\n }\n }\n}\n\n/**\n * Status indicator\n */\nexport const StyledStatusIndicator = styled.div<{ color: 'red' | 'yellow' | 'green' | string }>`\n display: flex;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n ${getIndicatorColor}\n`\n\nexport const StyledRoundIconWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid #d4d4d4;\n padding: 0.5rem;\n border-radius: 6px;\n`\n\nexport const StyledReviewDataItem = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid ${(props) => props.theme.colors.grays.gray300};\n padding: 0.5rem 0;\n\n &:last-child {\n border-bottom: none;\n }\n`\n\nexport const StyledPasswordCondition = styled.div`\n display: flex;\n align-items: center;\n gap: 0.3rem;\n margin-bottom: 1.5rem;\n`\n\nexport const StyledHiddenFileInput = styled.input`\n display: none;\n`\n\nexport const StyledInlineWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n white-space: nowrap;\n gap: 1rem;\n`\n\nexport const StyledRoundBox = styled.div`\n display: flex;\n flex-direction: column;\n border-radius: 6px;\n background-color: #ffffff;\n box-shadow: -1px 7px 21px 0 rgba(0, 0, 0, 0.04);\n padding: 1rem 0.75rem;\n gap: 1rem;\n`\n\nexport const StyledAdminSettingsWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n`\n\nexport const StyledCustomsContentWrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 1.5rem;\n\n * {\n box-sizing: border-box;\n }\n`\n\nexport const StyledUnassignAdminBox = styled.div<{ top?: number; right?: number; bottom?: number; left?: number }>`\n display: flex;\n gap: 10px;\n justify-content: space-between;\n align-items: center;\n border-radius: 4px;\n border: 1px solid ${(props) => props.theme.colors.grays.gray300};\n background: white;\n box-shadow: -12px 7px 20px 0px rgba(0, 0, 0, 0.07);\n padding: 6px 10px;\n position: absolute;\n z-index: 10;\n top: ${(props) => (props.top ? `${props.top}px` : 'initial')};\n right: ${(props) => (props.right ? `${props.right}px` : 'initial')};\n bottom: ${(props) => (props.bottom ? `${props.bottom}px` : 'initial')};\n left: ${(props) => (props.left ? `${props.left}px` : 'initial')};\n\n .unassign-admin-box-text {\n font-weight: 400;\n font-size: 12px;\n line-height: 20px;\n color: ${(props) => props.theme.colors.grays.gray700};\n }\n`\n\nexport const StyledActionBox = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n white-space: nowrap;\n flex: 1;\n border-right: 1px solid ${(props) => props.theme.colors.grays.gray300};\n color: ${(props) => props.theme.colors.grays.gray600};\n padding: 0 1rem;\n font-size: 12px;\n position: relative;\n\n &:last-child {\n border-right: none;\n }\n`\n\nexport const StyledDefaultCheckbox = styled.div`\n border: 1px solid ${(props) => props.theme.colors.grays.gray400};\n border-radius: 3px;\n width: 16px;\n height: 16px;\n margin-right: 0.3rem;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n\n &.primary {\n background-color: ${(props) => props.theme.colors.primary.default};\n }\n`\n\nexport const StyledWarningBox = styled.div<{\n top?: string\n right?: string\n bottom?: string\n left?: string\n}>`\n position: absolute;\n z-index: 10;\n top: ${(props) => (props.top ? `${props.top}` : 'initial')};\n right: ${(props) => (props.right ? `${props.right}` : 'initial')};\n bottom: ${(props) => (props.bottom ? `${props.bottom}` : 'initial')};\n left: ${(props) => (props.left ? `${props.left}` : 'initial')};\n border-radius: 4px;\n border: 1px solid ${(props) => props.theme.colors.situational.warning};\n background: white;\n box-shadow: -12px 7px 20px 0px rgba(0, 0, 0, 0.07);\n padding: 10px 16px;\n line-height: 20px;\n color: ${(props) => props.theme.colors.grays.gray700};\n`\n\nexport const StyledLandingH1 = styled.h1<{ margin?: string; color?: string }>`\n font-size: 2rem;\n font-weight: 600;\n color: ${(props) => props.color || props.theme.colors.tertiary.medium};\n line-height: 2rem;\n margin: ${(props) => props.margin || '0'};\n`\n\nexport const StyledLandingH2 = styled.h2<{ margin?: string; color?: string }>`\n font-size: 2.62rem;\n font-weight: 600;\n color: ${(props) => props.color || props.theme.colors.tertiary.medium};\n line-height: 2.8rem;\n margin: ${(props) => props.margin || '0'};\n`\n\nexport const StyledLandingH3 = styled.h3<{ margin?: string; color?: string }>`\n font-size: 2rem;\n font-weight: 600;\n color: ${(props) => props.color || props.theme.colors.tertiary.medium};\n margin: ${(props) => props.margin || '0'};\n`\n\nexport const StyledLandingContainer = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: start;\n align-items: center;\n gap: 3rem;\n padding: 5rem 0;\n border-bottom: 1px solid ${(props) => props.theme.colors.primary.default};\n\n @media ${device.md} {\n padding: 2rem;\n width: auto;\n }\n`\n\nexport const StyledParagraph = styled.p<{ size?: string }>`\n font-size: ${(props) => props.size || '0.875rem'};\n color: ${(props) => props.theme.colors.grays.gray600};\n line-height: 1.5rem;\n font-weight: 400;\n margin: initial;\n`\n\nexport const StyledMarketingSiteWrapper = styled.div`\n display: flex;\n justify-content: center;\n flex-direction: column;\n background-color: #ffffff;\n border-top: 1px solid ${(props) => props.theme.colors.primary.medium};\n`\n\nexport const StyledMarketingSection = styled.div<{ separator?: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 5rem;\n justify-content: center;\n width: 100%;\n padding-bottom: 5rem;\n margin-top: 5rem;\n border-bottom: ${(props) => (props.separator ? `1px solid ${props.theme.colors.primary.medium}` : 'transparent')};\n position: relative;\n`\n\nexport const StyledInnerSection = styled.section`\n width: 980px;\n display: flex;\n //margin: 0 auto 3rem auto;\n flex-direction: column;\n align-items: start;\n justify-content: start;\n z-index: 9;\n\n @media ${device.lg} {\n width: 100%;\n }\n\n @media ${device.md} {\n width: auto;\n padding: 0 2rem;\n }\n`\n\nexport const StyledCenteredLayout = styled.div`\n display: flex;\n flex-direction: column;\n height: 100vh;\n margin: -6rem 0 0;\n padding: 0;\n align-items: center;\n justify-content: center;\n background-color: #eeeefd;\n gap: 2rem;\n`\n\nconst spinAnimation = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n`\n\nexport const StyledSpinnerInputContainer = styled.div`\n position: absolute;\n right: 15px;\n top: 15px;\n display: flex;\n justify-content: center;\n align-items: center;\n animation: ${spinAnimation} 2s infinite linear;\n`\n\nexport const StyledSubtitle = styled.span`\n color: ${(props) => props.theme.colors.grays.gray600};\n font-size: 12px;\n`\n\nexport const StyledPasswordLabelBox = styled.div`\n display: flex;\n align-items: center;\n gap: 0.3rem;\n margin-bottom: 1.5rem;\n`\n","import { StyledButton, StyledSpinner } from './Button.styled.ts'\n\nimport { ButtonProps, ButtonType } from 'Types/button.types.ts'\nimport SvgIcon from 'Components/common/SvgIcon'\nimport { StyledCircle } from 'Styles/Global.ts'\n\nconst Button = ({ children, loader, type, ...rest }: ButtonProps): JSX.Element => (\n \n {loader ? (\n <>\n \n \n \n \n ) : (\n
{children}
\n )}\n {rest.buttonType === ButtonType.Download && (\n <>\n \n \n \n \n )}\n
\n)\n\nexport default Button\n","import { closePortal } from 'Stores/portal/portal.slice.ts'\nimport { useAppDispatch, useAppSelector } from 'Stores/hooks.ts'\n\nimport SvgIcon from 'Components/common/SvgIcon'\n\nimport {\n StyledPortalModal,\n StyledPortalOverlay,\n StyledPortal,\n StyledModalHeader,\n StyledModalBody,\n} from 'Components/common/Portal/Portal.styled.ts'\n\nimport ButtonWrapper from 'Components/common/ButtonWrapper'\nimport Button from 'Components/common/Button'\nimport { useEffect, useRef } from 'react'\n\nconst Portal = () => {\n const dispatch = useAppDispatch()\n const portalRef = useRef(null)\n const { isOpen, title, buttons, component: Content } = useAppSelector((state) => state.portalSlice)\n\n const handleCloseModal = () => {\n dispatch(closePortal())\n }\n\n const handleClickOutsidePortal = (event: MouseEvent) => {\n if (portalRef.current && !portalRef.current.contains(event.target as Node)) {\n dispatch(closePortal())\n }\n }\n\n useEffect(() => {\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutsidePortal)\n } else {\n document.removeEventListener('mousedown', handleClickOutsidePortal)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutsidePortal)\n }\n }, [isOpen])\n\n return (\n isOpen &&\n Content && (\n \n \n \n \n
\n \n
\n
{title}
\n
\n \n {/* @ts-ignore */}\n \n \n {buttons && (\n \n {buttons.map((button, i) => (\n \n ))}\n \n )}\n
\n
\n )\n )\n}\n\nexport default Portal\n","import React from 'react'\nimport 'react-toastify/dist/ReactToastify.css'\n\nconst Routes = React.lazy(() => import('./routes/routes.tsx'))\n\nimport Drawer from 'Components/common/Drawer'\nimport Toastify from 'Components/common/Toastify'\nimport Portal from 'Components/common/Portal'\n\nfunction App() {\n return (\n <>\n \n \n \n \n \n \n )\n}\n\nexport default App\n","import i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\n\nimport Backend from 'i18next-http-backend'\nimport LanguageDetector from 'i18next-browser-languagedetector'\n\nimport enTranslation from '../src/locales/en/translation.json'\nimport frTranslation from '../src/locales/fr/translation.json'\nimport srTranslation from '../src/locales/sr/translation.json'\nimport ruTranslation from '../src/locales/ru/translation.json'\n\nexport const defaultNamespace = 'translation'\n\nconst defaultLanguage = 'en'\n\nexport const resources = {\n en: {\n [defaultNamespace]: enTranslation,\n },\n fr: {\n [defaultNamespace]: frTranslation,\n },\n sr: {\n [defaultNamespace]: srTranslation,\n },\n ru: {\n [defaultNamespace]: ruTranslation,\n },\n}\n\nvoid i18n\n .use(Backend)\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources,\n // lng: defaultLanguage,\n fallbackLng: defaultLanguage,\n debug: true,\n returnEmptyString: false,\n ns: ['translation'],\n interpolation: {\n escapeValue: false,\n },\n })\n\nexport default i18n\n","import { AuctionHouseListProps, SelectOption } from 'Types/global.types.ts'\nimport { TFunction } from 'i18next'\n// import { Country } from 'country-state-city'\n\nexport const API_URL: string = import.meta.env.VITE_API_URL as string\nexport const AUTH_BASE_API_URL = `${API_URL}/auth`\nexport const USER_BASE_API_URL = `${API_URL}/user`\nexport const SHIPPING_ADDRESS = `${API_URL}/shipping-address`\nexport const BUYER = `${API_URL}/buyer`\nexport const SELLER = `${API_URL}/seller`\nexport const NOTIFICATION_BASE_API_URL = `${API_URL}/notifications`\nexport const BLACKLIST_BASE_API_URL = `${API_URL}/blacklist`\nexport const REGISTRATION_BASE_API_URL = `${API_URL}/registration`\nexport const VIN_BASE_API_URL = `${API_URL}/vin`\nexport const CERTIFICATE_BASE_API_URL = `${API_URL}/certificate`\nexport const PURCHASE_BASE_API_URL = `${API_URL}/purchase`\nexport const USER_STORAGE_PLACE = `${API_URL}/storage-place`\nexport const USER_CUSTOMS_CROSSING = `${API_URL}/customs-crossing`\nexport const CONTACT_BASE_API_URL = `${API_URL}/contact`\nexport const CUSTOM_TRANSACTION_STATUS_BASE_API_URL = `${API_URL}/customs-transaction`\n\n/**\n * Auth API\n */\nexport const AUTH_API: {\n SIGN_IN_URL: string\n SIGN_UP_URL: string\n VERIFY_URL: string\n FORGOT_PASSWORD: string\n UPDATE_PASSWORD: string\n RESEND_EMAIL: string\n} = {\n SIGN_IN_URL: `${AUTH_BASE_API_URL}/signin`,\n SIGN_UP_URL: `${AUTH_BASE_API_URL}/signup`,\n VERIFY_URL: `${AUTH_BASE_API_URL}/verify`,\n FORGOT_PASSWORD: `${AUTH_BASE_API_URL}/forgot-password`,\n UPDATE_PASSWORD: `${AUTH_BASE_API_URL}/update-password`,\n RESEND_EMAIL: `${AUTH_BASE_API_URL}/resend-email`,\n}\n\nexport const AUTH_ERRORS: { UNEXPECTED: string; AXIOS: string } = {\n UNEXPECTED: 'An unexpected error occurred',\n AXIOS: 'Axios error: ',\n}\n\n/**\n * User API\n */\nexport const USER_API: {\n PROFILE_URL: string\n ONBOARDING_URL: string\n UPDATE_USER_PASSWORD: string\n SET_PRIMARY_SHIPPING_ADDRESS: string\n} = {\n PROFILE_URL: `${USER_BASE_API_URL}/profile`,\n ONBOARDING_URL: `${USER_BASE_API_URL}/finish-onboarding`,\n UPDATE_USER_PASSWORD: `${USER_BASE_API_URL}/update-password`,\n SET_PRIMARY_SHIPPING_ADDRESS: `${USER_BASE_API_URL}/shipping-address`,\n}\n\nexport const BUYER_API = {\n BUYER_SEARCH: `${BUYER}/search`,\n}\n\nexport const SELLER_API = {\n SELLER_SEARCH: `${SELLER}/search`,\n SELLER_EORI: `${SELLER}/eori`,\n SELLER_BY_EORI: `${SELLER}/by-eori`,\n}\n\nexport const REGISTRATION_API = {\n REGISTRATION_SEARCH: `${REGISTRATION_BASE_API_URL}/search`,\n}\n\nexport const VIN_API = {\n VIN_SEARCH: `${VIN_BASE_API_URL}/search`,\n}\n\nexport const CERTIFICATE_API = {\n CERTIFICATE_SEARCH: `${CERTIFICATE_BASE_API_URL}/search`,\n}\n\n/**\n * Notification API\n */\nexport const NOTIFICATION_API = {\n ROOT: NOTIFICATION_BASE_API_URL,\n UNREAD_COUNT: `${NOTIFICATION_BASE_API_URL}/unread-count`,\n READ_ALL: `${NOTIFICATION_BASE_API_URL}/read-all`,\n CREATE_EXPIRED: `${NOTIFICATION_BASE_API_URL}/create-expired`,\n}\n\n/**\n * Download API\n */\nexport const DOWNLOAD_API = {\n GET_FILE: `${API_URL}/download`,\n}\n\nexport const DHL_API = {\n LIST: `${API_URL}/dhl`,\n}\n\nexport const PAYMENT_API = {\n CERTIFICATE: `${API_URL}/certificate`,\n PURCHASE: `${API_URL}/purchase`,\n DHL: `${API_URL}/dhl`,\n}\n\nexport const USER_TYPE = {\n physical: 'PHYSICAL',\n legal: 'LEGAL',\n forwarder: 'FORWARDER',\n super: 'SUPER',\n regular: 'REGULAR',\n}\n\nexport const USER_ROLES = ['PHYSICAL', 'LEGAL', 'FORWARDER']\n\nexport const ADMIN_ROLES = ['SUPER', 'REGULAR']\n\nexport const CUSTOMS_ROLES = ['CUSTOMS_OFFICER']\n\nexport const MAX_UPLOAD_FILE = 50\n\nexport const MAX_CHARACTERS = 50\nexport const MIN_CHARACTERS = 8\nexport const MIN_REQUIRED_SEARCH_CHARACTERS = 3\n\nexport const AUCTION_HOUSE_LIST: Array = [\n {\n id: 'alcopa-auction-house',\n auctionHouseName: 'Alcopa',\n auctionHousePhone: '+33970719752',\n auctionHouseEmail: 'contact@alcopa-auction.fr',\n\n auctionHouseEori: '111222333444',\n auctionHouseAddress: 'test',\n auctionHouseStreet: 'test',\n auctionHousePostalCode: '21000',\n auctionHouseCity: 'test',\n auctionHouseCountry: 'test',\n\n description: 'Alcopa auction house',\n imageUrl: '/auction-houses/auction-house-alcopa.png',\n },\n {\n id: 'vpauto-auction-house',\n auctionHouseName: 'Vpauto',\n auctionHousePhone: '+38163111111',\n auctionHouseEmail: 'vpauto@gmail.com',\n\n auctionHouseEori: '111222333444',\n auctionHouseAddress: 'test',\n auctionHouseStreet: 'test',\n auctionHousePostalCode: '21000',\n auctionHouseCity: 'test',\n auctionHouseCountry: 'test',\n\n description: 'VPauto auction house',\n imageUrl: '/auction-houses/auction-house-vpcar.png',\n },\n]\n\n/**\n * Payment statuses\n */\nexport const CertificateState = {\n NotProcessed: 'NOT_PROCESSED',\n InProgress: 'IN_PROGRESS',\n Processed: 'PROCESSED',\n Reviewed: 'REVIEWED',\n}\n\nexport const PurchaseSubjectState = {\n NotProcessed: 'NOT_PROCESSED',\n InProgress: 'IN_PROGRESS',\n Processed: 'PROCESSED',\n Reviewed: 'REVIEWED',\n Finalized: 'FINALIZED',\n}\n\nexport const PaymentState = {\n NotPaid: 'NOT_PAID',\n Failed: 'FAILED',\n Paid: 'PAID',\n Monthly: 'MONTHLY',\n Monthly_generated: 'MONTHLY_GENERATED',\n}\n\nexport const PurchaseState = {\n Active: 'ACTIVE',\n Finished: 'FINISHED',\n}\n\nexport const AdminPurchaseState = {\n Active: 'ACTIVE',\n Finished: 'FINISHED',\n Failed: 'FAILED',\n}\n\nexport const AdminOrderState = {\n NotAssigned: 'NOT ASSIGNED',\n InProgress: 'IN PROGRESS',\n InReview: 'IN REVIEW',\n Completed: 'COMPLETED',\n}\n\nexport const WorkStatus = {\n Pending: 'PENDING',\n ReadyForReview: 'READY FOR REVIEW',\n InProgress: 'IN PROGRESS',\n InReview: 'IN REVIEW',\n Completed: 'COMPLETED',\n}\n\nexport const mapAdminRoleName: { [key: string]: string } = {\n SUPER: 'Super admin',\n REGULAR: 'Admin',\n}\n\nexport const PAYMENT_TYPE = {\n prepaid: 'PREPAID',\n postpaid: 'POSTPAID',\n card: 'CARD',\n}\n\nexport const PAYMENT_TYPE_MAP = [\n {\n label: 'Prepaid',\n value: 'PREPAID',\n },\n {\n label: 'Postpaid',\n value: 'POSTPAID',\n },\n {\n label: 'Credit card',\n value: 'CARD',\n },\n]\n\nexport const getBuyerOptions = (t: TFunction) => [\n {\n label: t('translation:common.label.physical'),\n value: 'PHYSICAL',\n },\n {\n label: t('translation:common.label.legal'),\n value: 'LEGAL',\n },\n]\n\nexport const getPaymentTypeMapTranslation = (t: TFunction) => [\n {\n label: t('translation:common.label.prepaid'),\n value: 'PREPAID',\n },\n {\n label: t('translation:common.label.postpaid'),\n value: 'POSTPAID',\n },\n {\n label: t('translation:common.label.credit_card'),\n value: 'CARD',\n },\n]\n\nexport const mapUserTypes = {\n PHYSICAL: 'Physical',\n LEGAL: 'Legal',\n FORWARDER: 'Forwarder',\n}\n\nexport const getUserTypesTranslate = (t: TFunction) => ({\n PHYSICAL: t('translation:common.label.physical'),\n LEGAL: t('translation:common.label.legal'),\n FORWARDER: t('translation:common.label.forwarder'),\n})\n\nexport const NOMENCLATURE_OPTIONS = [\n {\n value: '8703319000',\n label: \"Cylindrée n'excédant pas 1500 cm³ en diesel - 8703319000\",\n },\n {\n value: '8703329000',\n label: \"Cylindrée excédant 1500 cm³ mais n'excédant pas 2 500 cm³ diesel - 8703329000\",\n },\n {\n value: '8703229000',\n label: \"Cylindrée excédant 1000 cm³ mais n'excédant pas 1500 cm³ essence - 8703229000\",\n },\n {\n value: '8703239000',\n label: \"Cylindrée excédant 1500 cm³ mais n'excédant pas 3 000 cm³ essence - 8703239000\",\n },\n {\n value: '8703809000',\n label: 'Véhicules électriques - 8703809000',\n },\n {\n value: '8702101900',\n label:\n 'Véhicules automobiles pour le transport de 10 personnes ou plus, diesel and semi-diesel excédant 2500 cm³ - 8702101900',\n },\n {\n value: '8701219000',\n label: 'Tracteurs routiers pour semi-remorques - 8701219000',\n },\n {\n value: '8701931000',\n label: 'Tracteurs agricoles occasion - 8701931000',\n },\n {\n value: '8716400000',\n label: 'Remorques and semi-remorques pour le transport des marchandises - 8716400000',\n },\n {\n value: '8711100000',\n label: \"Moteur à piston alternatif, d'une cylindrée n'excédant pas 50 cm³ - 8711100000\",\n },\n {\n value: '8711209200',\n label: \"Excédant 50 cm³ mais n'excédant pas 125 cm³ - 8711209200\",\n },\n {\n value: '8711209800',\n label: \"Excédant 125 cm³ but n'excédant pas 250 cm³ - 8711209800\",\n },\n {\n value: '8711301000',\n label: \"D'une cylindrée excédant 250 cm³ but n'excédant pas 380 cm³ - 8711301000\",\n },\n {\n value: '8711309000',\n label: \"D'une cylindrée excédant 380 cm³ but n'excédant pas 500 cm³ - 8711309000\",\n },\n {\n value: '8711400000',\n label: \"Moteur à piston alternatif d'une cylindrée excédant 500 cm³ but n'excédant pas 800 cm³ - 8711400000\",\n },\n {\n value: '8704211000',\n label: \"Véhicule pour transport de marchandise jusqu'à 5 tonnes - 8704211000\",\n },\n {\n value: '8704213900',\n label: 'Véhicules automobiles pour le transport de marchandises excédant 2|500|cm$3 - 8704213900',\n },\n {\n value: '8703241000',\n label: 'Véhicules neufs - 8703241000',\n },\n {\n value: '8427101000',\n label: 'Fenwick - 8427101000',\n },\n {\n value: '8702901900',\n label: 'AUTOBUS - 8702901900',\n },\n {\n value: '8479100000',\n label: 'MACHINE BTP - 8479100000',\n },\n {\n value: '8436809000',\n label: 'MACHINE AGRICOLE - 8436809000',\n },\n]\n\nexport const nomenclatureOptions = (t: TFunction): SelectOption[] => [\n {\n value: '8703319000',\n label: t('translation:common.nomenclature.n_8703319000'), // Cylindrée n'excédant pas 1500 cm³ en diesel - 8703319000\n },\n {\n value: '8703329000',\n label: t('translation:common.nomenclature.n_8703329000'), //\"Cylindrée excédant 1500 cm³ mais n'excédant pas 2 500 cm³ diesel - 8703329000\",\n },\n {\n value: '8703229000',\n label: t('translation:common.nomenclature.n_8703229000'), // \"Cylindrée excédant 1000 cm³ mais n'excédant pas 1500 cm³ essence - 8703229000\",\n },\n {\n value: '8703239000',\n label: t('translation:common.nomenclature.n_8703239000'), // \"Cylindrée excédant 1500 cm³ mais n'excédant pas 3 000 cm³ essence - 8703239000\",\n },\n {\n value: '8703809000',\n label: t('translation:common.nomenclature.n_8703809000'), // 'Véhicules électriques - 8703809000',\n },\n {\n value: '8702101900',\n label: t('translation:common.nomenclature.n_8702101900'), // 'Véhicules automobiles pour le transport de 10 personnes ou plus, diesel and semi-diesel excédant 2500 cm³ - 8702101900',\n },\n {\n value: '8701219000',\n label: t('translation:common.nomenclature.n_8701219000'), //'Tracteurs routiers pour semi-remorques - 8701219000',\n },\n {\n value: '8701931000',\n label: t('translation:common.nomenclature.n_8701931000'), //'Tracteurs agricoles occasion - 8701931000',\n },\n {\n value: '8716400000',\n label: t('translation:common.nomenclature.n_8716400000'), //'Remorques and semi-remorques pour le transport des marchandises - 8716400000',\n },\n {\n value: '8711100000',\n label: t('translation:common.nomenclature.n_8711100000'), // \"Moteur à piston alternatif, d'une cylindrée n'excédant pas 50 cm³ - 8711100000\",\n },\n {\n value: '8711209200',\n label: t('translation:common.nomenclature.n_8711209200'), // \"Excédant 50 cm³ mais n'excédant pas 125 cm³ - 8711209200\",\n },\n {\n value: '8711209800',\n label: t('translation:common.nomenclature.n_8711209800'), // \"Excédant 125 cm³ but n'excédant pas 250 cm³ - 8711209800\",\n },\n {\n value: '8711301000',\n label: t('translation:common.nomenclature.n_8711301000'), // \"D'une cylindrée excédant 250 cm³ but n'excédant pas 380 cm³ - 8711301000\",\n },\n {\n value: '8711309000',\n label: t('translation:common.nomenclature.n_8711309000'), // \"D'une cylindrée excédant 380 cm³ but n'excédant pas 500 cm³ - 8711309000\",\n },\n {\n value: '8711400000',\n label: t('translation:common.nomenclature.n_8711400000'), // \"Moteur à piston alternatif d'une cylindrée excédant 500 cm³ but n'excédant pas 800 cm³ - 8711400000\",\n },\n {\n value: '8704211000',\n label: t('translation:common.nomenclature.n_8704211000'), // \"Véhicule pour transport de marchandise jusqu'à 5 tonnes - 8704211000\",\n },\n {\n value: '8704213900',\n label: t('translation:common.nomenclature.n_8704213900'), // 'Véhicules automobiles pour le transport de marchandises excédant 2|500|cm$3 - 8704213900',\n },\n {\n value: '8703241000',\n label: t('translation:common.nomenclature.n_8703241000'), // 'Véhicules neufs - 8703241000',\n },\n {\n value: '8427101000',\n label: t('translation:common.nomenclature.n_8427101000'), // 'Fenwick - 8427101000',\n },\n {\n value: '8702901900',\n label: t('translation:common.nomenclature.n_8702901900'), // 'AUTOBUS - 8702901900',\n },\n {\n value: '8479100000',\n label: t('translation:common.nomenclature.n_8479100000'), // 'MACHINE BTP - 8479100000',\n },\n {\n value: '8436809000',\n label: t('translation:common.nomenclature.n_8436809000'), // 'MACHINE AGRICOLE - 8436809000',\n },\n]\n\nexport const getLanguageList = (isAdmin: boolean) => [\n {\n label: 'EN',\n value: 'en',\n },\n {\n label: 'FR',\n value: 'fr',\n },\n ...(!isAdmin\n ? [\n {\n label: 'SR',\n value: 'sr',\n },\n {\n label: 'RU',\n value: 'ru',\n },\n ]\n : []),\n]\n\n// const countries = Country.getAllCountries()\n// export const countryList = countries.map((country) => ({\n// value: country.isoCode,\n// label: country.name,\n// }))\n\nexport const HOME_PAGE_ROUTE = '/landing/home-page'\n\nexport const EXPORTATION_COUNTRIES = [\n {\n label: 'Serbia',\n value: 'RS',\n },\n {\n label: 'Bosnia and Herzegovina',\n value: 'BA',\n },\n {\n label: 'Kosovo',\n value: 'XK',\n },\n {\n label: 'North Macedonia',\n value: 'MK',\n },\n {\n label: 'Montenegro',\n value: 'ME',\n },\n {\n label: 'Tunisia',\n value: 'TN',\n },\n {\n label: 'Algeria',\n value: 'DZ',\n },\n {\n label: 'Morocco',\n value: 'MA',\n },\n {\n label: 'Moldova, Republic of',\n value: 'MD',\n },\n {\n label: `Ukraine`,\n value: `UA`,\n },\n]\n","import Cookies from 'js-cookie'\nimport jwtDecode from 'jwt-decode'\n// import jwtDecode from 'jwt-decode'\n\ninterface JwtTokenPayload {\n exp: string\n iat: string\n id: string\n type: 'PHYSICAL' | 'LEGAL' | 'FORWARDER' | 'SUPER' | 'REGULAR'\n}\n\nexport const setAccessToken = (token: string, days: number): void => {\n Cookies.set('eot', token, { expires: days })\n}\n\nexport const getAccessToken = (): string | undefined => Cookies.get('eot')\n\nexport const isAuthenticated = (): boolean => !!getAccessToken()\n\nexport const getUserRole = () => {\n const isToken = !!getAccessToken()\n if (isToken) {\n const token = getAccessToken()\n const decodeToken: JwtTokenPayload = jwtDecode(token)\n const { type } = decodeToken\n return type || ''\n }\n return ''\n}\n\nexport const removeAccessToken = () => Cookies.remove('eot')\n\nexport const setTempAccessToken = (token: string) => {\n Cookies.set('tempEot', token, { expires: 1 })\n}\n\nexport const getTempAccessToken = () => Cookies.get('tempEot')\n\nexport const removeTempAccessToken = () => Cookies.remove('tempEot')\n\nexport const getAxiosConfig = () => {\n const token = getAccessToken()\n return {\n headers: {\n Authorization: token,\n },\n }\n}\n\nexport const getAxiosBlobConfig = () => {\n const token = getAccessToken()\n return {\n responseType: 'blob',\n headers: {\n Authorization: token,\n },\n }\n}\n\nexport const getAxiosMultipartFormConfig = () => {\n const token = getAccessToken()\n return {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n}\n","import axios, { AxiosError } from 'axios'\nimport { toast } from 'react-toastify'\nimport i18n from 'i18next'\n\ninterface ErrorResponse {\n error?: {\n type?: string\n message?: string\n }\n}\n\nconst REDIRECT_ERRORS: Record = {\n ADMIN_DOES_NOT_EXIST: '/admin/logout',\n}\n\nconst getErrorMessage = (errorType: string) => {\n switch (errorType) {\n case 'FACTURE_PAID':\n return i18n.t('translation:common.error_types.FACTURE_PAID')\n case 'SOMETHING_WENT_WRONG':\n return i18n.t('translation:common.error_types.SOMETHING_WENT_WRONG')\n case 'INVALID_DATA':\n return i18n.t('translation:common.error_types.INVALID_DATA')\n case 'EMAIL_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.EMAIL_ALREADY_EXISTS')\n case 'BUYER_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.BUYER_ALREADY_EXISTS')\n case 'SELLER_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.SELLER_ALREADY_EXISTS')\n case 'USERNAME_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.USERNAME_ALREADY_EXISTS')\n case 'USER_CUSTOM_FILE_NAME_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.USER_CUSTOM_FILE_NAME_ALREADY_EXISTS')\n case 'VIN_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.VIN_ALREADY_EXISTS')\n case 'PURCHASE_CUSTOM_FILE_NAME_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.PURCHASE_CUSTOM_FILE_NAME_ALREADY_EXISTS')\n case 'STORAGE_PLACE_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.STORAGE_PLACE_ALREADY_EXISTS')\n case 'CUSTOMS_CROSSING_ALREADY_EXISTS':\n return i18n.t('translation:common.error_types.CUSTOMS_CROSSING_ALREADY_EXISTS')\n case 'SHIPPING_ADDRESS_DOES_NOT_EXISTS':\n return i18n.t('translation:common.error_types.SHIPPING_ADDRESS_DOES_NOT_EXISTS')\n case 'USER_DOES_NOT_EXISTS':\n return i18n.t('translation:common.error_types.USER_DOES_NOT_EXISTS')\n case 'SELLER_DOES_NOT_EXISTS':\n return i18n.t('translation:common.error_types.SELLER_DOES_NOT_EXISTS')\n case 'BUYER_DOES_NOT_EXISTS':\n return i18n.t('translation:common.error_types.BUYER_DOES_NOT_EXISTS')\n case 'INVALID_VERIFICATION_TOKEN':\n return i18n.t('translation:common.error_types.INVALID_VERIFICATION_TOKEN')\n case 'NOT_FOUND':\n return i18n.t('translation:common.error_types.NOT_FOUND')\n case 'INVALID_EORI_NUMBER':\n return i18n.t('translation:common.error_types.INVALID_EORI_NUMBER')\n case 'PAYMENT_SERVICE_ISSUE':\n return i18n.t('translation:common.error_types.PAYMENT_SERVICE_ISSUE')\n case 'FORBIDDEN':\n return i18n.t('translation:common.error_types.FORBIDDEN')\n case 'INVALID_DATA_SENT':\n return i18n.t('translation:common.error_types.INVALID_DATA_SENT')\n case 'USER_ALREADY_VERIFIED':\n return i18n.t('translation:common.error_types.USER_ALREADY_VERIFIED')\n case 'CERTIFICATE_ALREADY_PAID':\n return i18n.t('translation:common.error_types.CERTIFICATE_ALREADY_PAID')\n case 'EUR1_NOT_AVAILABLE':\n return i18n.t('translation:common.error_types.EUR1_NOT_AVAILABLE')\n default:\n return ''\n }\n}\n\n/**\n * Handle errors from API requests\n * @param {unknown} error - The error object from the API request.\n * @param {boolean} [isNotify] - Whether to show a toast notification for the error.\n * @param {boolean} [isLoginDrawerOpen] - Whether the login drawer is open.\n * @throws {Error} Throws an error with a message based on the error type.\n */\nexport const handleError = (error: unknown, isNotify?: boolean, isLoginDrawerOpen?: boolean) => {\n if (!axios.isAxiosError(error)) {\n throw new Error(error instanceof Error ? error.message : 'Unknown error occurred')\n }\n\n if (error.response) {\n const responseData = (error.response?.data as ErrorResponse)?.error\n const errorType = responseData?.type ?? ''\n const errorMessage = responseData?.message ?? i18n.t(`translation:common.description.something_went_wrong`)\n\n if (errorType in REDIRECT_ERRORS && window.location.pathname !== REDIRECT_ERRORS[errorType]) {\n window.location.href = REDIRECT_ERRORS[errorType]\n return\n }\n\n if (errorType === 'USER_BLOCKED') {\n if (isLoginDrawerOpen) {\n if (isNotify) toast.error(errorMessage)\n throw (error as AxiosError)?.response?.data?.error\n } else {\n window.location.href = '/logout'\n }\n } else if (errorType === 'USER_NOT_VERIFIED') {\n if (isNotify) toast.error(errorMessage)\n throw (error as AxiosError)?.response?.data?.error\n } else {\n const translatedErrorMessage = getErrorMessage(errorType) || errorMessage\n if (isNotify) toast.error(translatedErrorMessage)\n if (error instanceof Error) {\n throw error\n } else {\n throw new Error(i18n.t(`translation:common.description.something_went_wrong`))\n }\n }\n } else if (error.request) {\n const networkErrorMessage = 'Network error, please try again.'\n if (isNotify) toast.error(networkErrorMessage)\n throw new Error(networkErrorMessage)\n } else {\n if (isNotify) toast.error(error?.message || i18n.t(`translation:common.description.something_went_wrong`))\n if (error instanceof Error) {\n throw error\n } else {\n throw new Error(i18n.t(`translation:common.description.something_went_wrong`))\n }\n }\n}\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { CONTACT_BASE_API_URL, USER_API, USER_BASE_API_URL } from '../constants/Global.constants.ts'\n\nimport { UserResponse, UserTypes } from '../types/user.types.ts'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { FormikValues } from 'formik'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\nexport const getUser = createAsyncThunk('user/fetchUser', async () => {\n const url = USER_API.PROFILE_URL\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return data.data\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n\nexport const updateUser = createAsyncThunk('user/updateUser', async (options: FormikValues) => {\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(USER_BASE_API_URL, options, config)\n return data.data\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n\nexport const updateUserPassword = async (options: { password: string }) => {\n const token = getAccessToken()\n const url = USER_API.UPDATE_USER_PASSWORD\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: { updated: boolean } }> = await axios.patch(url, options, config)\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const finishOnboarding = createAsyncThunk('user/finishOnboarding', async (options: FormData) => {\n const url = USER_API.ONBOARDING_URL\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return data.data\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n\nexport const setUserPrimaryShippingAddress = createAsyncThunk(\n 'user/setShippingAddress',\n async (shippingAddressId: string) => {\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n const options = {\n shippingAddressId,\n }\n\n try {\n const { data }: AxiosResponse<{ data: boolean }> = await axios.patch(\n USER_API.SET_PRIMARY_SHIPPING_ADDRESS,\n options,\n config\n )\n\n return { user: data.data, shippingAddressId }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n }\n)\n\ninterface ContactProps {\n name: string\n email: string\n phoneNumber: string\n subject: string\n comment: string\n}\n\nexport const sendContactMail = async (options: ContactProps) => {\n try {\n const { data }: AxiosResponse<{ data: { sent: boolean } }> = await axios.post(CONTACT_BASE_API_URL, options)\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n}\n","import { createSlice } from '@reduxjs/toolkit'\nimport { UserTypes } from 'Types/user.types.ts'\nimport { finishOnboarding, getUser, updateUser } from 'Api/user.service.ts'\n\ninterface UserState {\n user: UserTypes | null\n userLoaded: boolean\n userLoading: boolean\n}\n\nconst initialState: UserState = {\n user: null,\n userLoaded: false,\n userLoading: false,\n}\n\nexport const userSlice = createSlice({\n name: 'user',\n initialState,\n reducers: {\n removeUser: (state) => {\n state.user = null\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getUser.fulfilled, (state, action) => {\n state.user = action.payload\n })\n .addCase(updateUser.fulfilled, (state, action) => {\n state.user = action.payload\n })\n .addCase(finishOnboarding.fulfilled, (state, action) => {\n if (action.payload) {\n state.user = action.payload\n }\n })\n },\n})\n\nexport const { removeUser } = userSlice.actions\nexport default userSlice.reducer\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\nimport { NOTIFICATION_API, NOTIFICATION_BASE_API_URL } from 'Constants/Global.constants.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport {\n GetNotificationsResponse,\n MarkAsReadResponse,\n NotificationProps,\n ReadAllNotificationsResponse,\n UnreadCountNotificationsResponse,\n} from 'Types/notifications.types.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\nimport { PaginationProps } from 'Types/global.types.ts'\n\nconst getHeaders = () => {\n const token = getAccessToken()\n return {\n headers: {\n Authorization: token,\n },\n }\n}\n\nconst NOTIFICATION_TYPES = {\n GET_NOTIFICATIONS: 'notifications/getNotifications',\n READ_ALL: 'notifications/readAll',\n MARK_AS_READ: 'notifications/markAsRead',\n UNREAD_COUNT: 'notifications/unreadCount',\n}\n\nexport const getNotifications = createAsyncThunk(\n NOTIFICATION_TYPES.GET_NOTIFICATIONS,\n async ({ pageIndex, pageSize }: PaginationProps) => {\n const config = getHeaders()\n const url = `${NOTIFICATION_BASE_API_URL}?page=${pageIndex}&limit=${pageSize}&only-unread=true`\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n notifications: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const readAll = createAsyncThunk(NOTIFICATION_TYPES.READ_ALL, async (options) => {\n const url = NOTIFICATION_API.READ_ALL\n const config = getHeaders()\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return data.data\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n\nexport const markAsRead = createAsyncThunk(NOTIFICATION_TYPES.MARK_AS_READ, async ({ id }: NotificationProps) => {\n const url = `${NOTIFICATION_API.ROOT}/${id}/read`\n const config = getHeaders()\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, null, config)\n return data.data\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n\nexport const getUnreadCount = createAsyncThunk(NOTIFICATION_TYPES.UNREAD_COUNT, async () => {\n const url = NOTIFICATION_API.UNREAD_COUNT\n const config = getHeaders()\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return data.data\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { remove as _remove } from 'lodash'\n\nimport { NotificationProps } from 'Types/notifications.types.ts'\nimport { getNotifications, getUnreadCount, markAsRead, readAll } from 'Api/notification.service.ts'\nimport { PaginationProps } from 'Types/global.types.ts'\n\ninterface NotificationState {\n notificationList: Array\n unreadCount: number\n total: number\n pageIndex: number\n pageSize: number\n loading: boolean\n}\n\nconst initialState: NotificationState = {\n notificationList: [],\n unreadCount: 0,\n total: 0,\n pageIndex: 0,\n pageSize: 5,\n loading: false,\n}\n\nconst notificationsSlice = createSlice({\n name: 'notifications',\n initialState,\n reducers: {\n setNotificationPageIndex: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getNotifications.fulfilled, (state, action) => {\n if (action.payload) {\n state.notificationList = action.payload.notifications\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getNotifications.pending, (state) => {\n state.loading = true\n })\n .addCase(getNotifications.rejected, (state) => {\n state.loading = false\n })\n .addCase(readAll.fulfilled, (state, action) => {\n if (action.payload) {\n state.unreadCount = 0\n state.notificationList = []\n }\n })\n .addCase(markAsRead.fulfilled, (state, action) => {\n if (action.payload) {\n state.notificationList = state.notificationList.filter(notification => notification.id !== action.payload.id)\n if (state.unreadCount > 0) {\n state.unreadCount -= 1\n }\n }\n })\n .addCase(getUnreadCount.fulfilled, (state, action) => {\n if (action.payload) {\n state.unreadCount = action.payload.unread\n }\n })\n },\n})\n\nconst { actions } = notificationsSlice\nexport const { setNotificationPageIndex } = actions\n\nexport default notificationsSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\nimport { FormikValues } from 'formik'\n\nimport { SHIPPING_ADDRESS } from 'Constants/Global.constants.ts'\nimport { PaginationProps, ShippingAddressResponse, ShippingAddressType } from 'Types/global.types.ts'\n\nimport { handleError } from 'Helpers/errors.helper.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\n\ntype ShippingAddressApiType = {\n id?: string\n userId?: string\n firstName: string\n lastName: string\n country: string\n city: string\n address: string\n postalCode: string\n phone: string\n isPrimary?: boolean\n updatedAt?: string\n createdAt?: string\n}\n\ntype ShippingAddressApiResponseType = {\n data: ShippingAddressApiType[]\n total: number\n}\n\nconst getFormattedShippingAddressList = (input: ShippingAddressApiType[]): ShippingAddressType[] =>\n input.map((address) => {\n const mutableCountry = {\n label: address?.country,\n value: address?.country,\n }\n\n return {\n ...address,\n country: mutableCountry,\n }\n })\n\nexport const addShippingAddress = createAsyncThunk('shippingAddress/add', async (options: FormikValues) => {\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: ShippingAddressApiType }> = await axios.post(\n SHIPPING_ADDRESS,\n options,\n config\n )\n const mutableShippingAddress: ShippingAddressType = {\n ...data.data,\n country: {\n label: data.data?.country,\n value: data.data?.country,\n },\n }\n return {\n shippingAddress: mutableShippingAddress,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const getShippingAddress = createAsyncThunk(\n 'shippingAddress/get',\n async ({ pageIndex, pageSize }: PaginationProps) => {\n const token = getAccessToken()\n const url = `${SHIPPING_ADDRESS}?page=${pageIndex}&limit=${pageSize}`\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n const mutableShippingAddressList: ShippingAddressType[] = getFormattedShippingAddressList(data.data)\n\n return {\n shippingAddressList: mutableShippingAddressList,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Get primary address\n */\nexport const getPrimaryShippingAddress = createAsyncThunk('shippingAddress/getPrimaryShippingAddress', async () => {\n const token = getAccessToken()\n const url = `${SHIPPING_ADDRESS}/primary`\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: ShippingAddressApiType }> = await axios.get(url, config)\n const mutableShippingAddress: ShippingAddressType = {\n ...data.data,\n country: {\n label: data.data?.country,\n value: data.data?.country,\n },\n }\n return {\n primaryShippingAddress: mutableShippingAddress,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Update shipping address\n */\nexport const updateShippingAddress = createAsyncThunk(\n 'shippingAddress/update',\n async (payload: { id: string; options: ShippingAddressType }) => {\n const { id, options } = payload\n const url = `${SHIPPING_ADDRESS}/${id}`\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: ShippingAddressApiType }> = await axios.patch(url, options, config)\n const mutableShippingAddress: ShippingAddressType = {\n ...data.data,\n country: {\n label: data.data?.country,\n value: data.data?.country,\n },\n }\n return {\n shippingAddress: mutableShippingAddress,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const removeShippingAddress = createAsyncThunk('shippingAddress/remove', async (id: string) => {\n const url = `${SHIPPING_ADDRESS}/${id}`\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, config)\n return { ...data.data, id }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { PaginationProps, ShippingAddressSliceProps } from 'Types/global.types.ts'\n\nimport { setUserPrimaryShippingAddress } from 'Api/user.service.ts'\nimport {\n addShippingAddress,\n getPrimaryShippingAddress,\n getShippingAddress,\n removeShippingAddress,\n updateShippingAddress,\n} from 'Api/shipping-address.service.ts'\n\nconst initialState: ShippingAddressSliceProps = {\n addressList: [],\n primaryShippingAddress: null,\n total: 0,\n loading: false,\n pageIndex: 0,\n pageSize: 5,\n}\n\nconst shippingAddressSlice = createSlice({\n name: 'shippingAddress',\n initialState,\n reducers: {\n setShippingAddressPageSize: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n resetShippingAddressState: () => {\n return initialState\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getShippingAddress.fulfilled, (state, action) => {\n if (action.payload) {\n state.addressList = action.payload.shippingAddressList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getPrimaryShippingAddress.fulfilled, (state, action) => {\n if (action.payload) {\n state.primaryShippingAddress = action.payload.primaryShippingAddress\n }\n })\n .addCase(getShippingAddress.pending, (state) => {\n state.loading = true\n })\n .addCase(getShippingAddress.rejected, (state) => {\n state.loading = false\n })\n .addCase(addShippingAddress.fulfilled, (state, action) => {\n if (action.payload) {\n state.addressList.unshift(action.payload.shippingAddress)\n }\n })\n .addCase(updateShippingAddress.fulfilled, (state, action) => {\n if (action.payload) {\n state.addressList = state.addressList.map((address) => {\n if (address.id === action.payload.shippingAddress.id) {\n return action.payload.shippingAddress\n }\n return address\n })\n }\n })\n .addCase(removeShippingAddress.fulfilled, (state, action) => {\n if (action.payload) {\n state.addressList = state.addressList.filter((address) => address.id !== action.payload.id)\n }\n })\n .addCase(setUserPrimaryShippingAddress.fulfilled, (state, action) => {\n if (action.payload) {\n state.addressList = state.addressList.map((address) => {\n if (address.id === action.payload.shippingAddressId) {\n return {\n ...address,\n isPrimary: true,\n }\n }\n return {\n ...address,\n isPrimary: false,\n }\n })\n }\n })\n },\n})\n\nconst { actions } = shippingAddressSlice\nexport const { setShippingAddressPageSize, resetShippingAddressState } = actions\nexport default shippingAddressSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\nimport { FormikValues } from 'formik'\n\nimport { BUYER, BUYER_API, MIN_REQUIRED_SEARCH_CHARACTERS } from 'Constants/Global.constants.ts'\nimport { BuyerRequestOptions, BuyerResponse, BuyerType, PaginationProps } from 'Types/global.types.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get buyer list\n */\nexport const getBuyer = createAsyncThunk('buyer/get', async ({ pageIndex, pageSize }: PaginationProps) => {\n const token = getAccessToken()\n const url = `${BUYER}?page=${pageIndex}&limit=${pageSize}`\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n buyers: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const loadBuyerList = async ({\n pageIndex,\n pageSize,\n param,\n}: {\n pageIndex: number\n pageSize: number\n param?: string\n}) => {\n const token = getAccessToken()\n let url = BUYER\n\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: BuyerType[]; total: number }> = await axios.get(url, config)\n return {\n list: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Add a new buyer\n */\nexport const addBuyer = createAsyncThunk('buyer/add', async (options: FormikValues) => {\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(BUYER, options, config)\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Update existing buyer\n */\nexport const updateBuyer = createAsyncThunk('buyer/update', async (payload: BuyerRequestOptions) => {\n const { id, options } = payload\n const token = getAccessToken()\n\n const url = `${BUYER}/${id}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n id,\n ...data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Remove buyer\n */\nexport const removeBuyer = createAsyncThunk('buyer/remove', async (id: string) => {\n const url = `${BUYER}/${id}`\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, config)\n return {\n id,\n ...data.data,\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n\n/**\n * Search buyer by keyword\n */\nexport const searchBuyer = createAsyncThunk('buyer/search', async (keyword: string) => {\n const url = `${BUYER_API.BUYER_SEARCH}?param=${keyword}`\n const token = getAccessToken()\n const charLength = keyword.length\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n if (charLength >= MIN_REQUIRED_SEARCH_CHARACTERS) {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n buyers: data.data,\n }\n } else {\n return []\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { isEmpty as _isEmpty } from 'lodash'\n\nimport { BuyerSliceProps, BuyerType, PaginationProps } from 'Types/global.types.ts'\nimport { addBuyer, getBuyer, removeBuyer, searchBuyer, updateBuyer } from 'Api/buyer.service.ts'\n\nconst initialState: BuyerSliceProps = {\n initialBuyers: [],\n buyers: [],\n loading: false,\n total: 0,\n pageIndex: 0,\n pageSize: 10,\n}\n\nconst buyerSlice = createSlice({\n name: 'buyer',\n initialState,\n reducers: {\n setBuyerPageSize: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(addBuyer.fulfilled, (state, action: PayloadAction) => {\n if (action.payload) {\n state.buyers.unshift(action.payload)\n state.initialBuyers.unshift(action.payload)\n state.total += 1\n }\n })\n .addCase(getBuyer.fulfilled, (state, action) => {\n if (action.payload) {\n // @ts-ignore\n state.buyers = action.payload.buyers\n state.total = action.payload.total\n // @ts-ignore\n state.initialBuyers = action.payload.buyers\n }\n state.loading = false\n })\n .addCase(getBuyer.pending, (state) => {\n state.loading = true\n })\n .addCase(getBuyer.rejected, (state) => {\n state.loading = false\n })\n .addCase(removeBuyer.fulfilled, (state, action) => {\n if (action.payload) {\n state.buyers = state.buyers.filter((buyer) => buyer.id !== action.payload.id)\n state.total -= 1\n }\n })\n .addCase(updateBuyer.fulfilled, (state, action) => {\n if (action.payload) {\n const mutableBuyers = state.buyers.map((buyer) => {\n if (buyer.id === action.payload.id) {\n return action.payload\n }\n return buyer\n })\n state.buyers = mutableBuyers\n state.initialBuyers = mutableBuyers\n }\n })\n .addCase(searchBuyer.fulfilled, (state, action) => {\n if (!_isEmpty(action.payload)) {\n // @ts-ignore\n state.buyers = action.payload.buyers\n } else {\n state.buyers = [...state.initialBuyers]\n }\n state.loading = false\n })\n .addCase(searchBuyer.pending, (state) => {\n state.loading = true\n })\n .addCase(searchBuyer.rejected, (state) => {\n state.loading = false\n })\n },\n})\n\nconst { actions } = buyerSlice\nexport const { setBuyerPageSize } = actions\nexport default buyerSlice.reducer\n","import { FormikValues } from 'formik'\nimport axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\n\nimport {\n CustomError,\n PaginationProps,\n SellerEoriResponse,\n SellerListResponse,\n SellerResponse,\n} from 'Types/global.types.ts'\nimport { MIN_REQUIRED_SEARCH_CHARACTERS, SELLER, SELLER_API } from 'Constants/Global.constants.ts'\nimport { toast } from 'react-toastify'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\nconst getConfig = () => {\n const token = getAccessToken()\n return {\n headers: {\n Authorization: token,\n },\n }\n}\n\n/**\n * Get all sellers\n */\nexport const getSeller = createAsyncThunk('seller/getSeller', async ({ pageSize, pageIndex }: PaginationProps) => {\n const token = getAccessToken()\n const url = `${SELLER}?page=${pageIndex}&limit=${pageSize}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n sellers: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Async load of seller list for Async select dropdown\n * @param pageIndex\n * @param pageSize\n * @param param\n */\nexport const loadSellerList = async ({\n pageIndex,\n pageSize,\n param,\n}: {\n pageIndex: number\n pageSize: number\n param: string\n}) => {\n const token = getAccessToken()\n let url = SELLER\n\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n list: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Create a new seller\n */\nexport const addSeller = createAsyncThunk('seller/add', async (options: FormikValues) => {\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(SELLER, options, config)\n return data.data\n } catch (error: unknown) {\n if (axios.isAxiosError(error)) {\n if (error.response) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const errorMessage: string = error.response.data?.error.message\n toast.error(errorMessage)\n throw error\n } else if (error.request) {\n console.error('REQUEST ERROR', error.request)\n } else {\n throw error.message\n }\n } else {\n throw error\n }\n }\n})\n\n/**\n * Search sellers by keyword\n */\nexport const searchSeller = createAsyncThunk('seller/search', async (keyword: string) => {\n const url = `${SELLER_API.SELLER_SEARCH}?param=${keyword}`\n const token = getAccessToken()\n const charLength = keyword.length\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n if (charLength >= MIN_REQUIRED_SEARCH_CHARACTERS) {\n const { data }: AxiosResponse = await axios.get(url, config)\n return data.data\n } else {\n return null\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n})\n\n/**\n * Get EORI in order to fetch seller data\n * @param eoriNumber\n */\nexport const getEori = async (eoriNumber: string) => {\n const url = `${SELLER_API.SELLER_EORI}?eoriNumber=${eoriNumber}`\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n const { data }: AxiosResponse = await axios.get(url, config)\n return data.data\n}\n\n/**\n * Get seller by EORI number\n * eoriNumber - query param\n * returns Not found if there is no seller\n */\nexport const getSellerByEoriNumber = createAsyncThunk(\n 'seller/getSellerByEoriNumber',\n async (eoriNumber: string, { rejectWithValue }) => {\n const url = `${SELLER_API.SELLER_BY_EORI}?eoriNumber=${eoriNumber}`\n const config = getConfig()\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n seller: data.data,\n }\n } catch (error: any) {\n if (axios.isAxiosError(error)) {\n return rejectWithValue({\n status: error.response?.status,\n data: error.response?.data,\n } as CustomError)\n }\n }\n }\n)\n\n/**\n * Adding a seller to the list of user's sellers\n */\nexport const addSellerToUserList = createAsyncThunk('seller/addSellerToUserList', async (sellerId: string) => {\n const url = `${SELLER}/${sellerId}/user`\n const config = getConfig()\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n seller: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { isNull as _isNull } from 'lodash'\n\nimport { PaginationProps, SellerSliceProps, SellerType } from 'Types/global.types.ts'\nimport { getSeller, addSeller, searchSeller, addSellerToUserList } from 'Api/seller.service.ts'\n\nconst initialState = {\n initialSellers: [],\n sellers: [],\n loading: false,\n pageIndex: 0,\n pageSize: 10,\n} as SellerSliceProps\n\nconst sellerSlice = createSlice({\n name: 'seller',\n initialState,\n reducers: {\n setSellerPageSize: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getSeller.fulfilled, (state, action) => {\n if (action.payload) {\n // @ts-ignore\n state.sellers = action.payload.sellers\n state.total = action.payload.total\n // @ts-ignore\n state.initialSellers = action.payload.sellers\n }\n state.loading = false\n })\n .addCase(getSeller.pending, (state) => {\n state.loading = true\n })\n .addCase(getSeller.rejected, (state) => {\n state.loading = false\n })\n .addCase(addSeller.fulfilled, (state, action) => {\n if (action.payload) {\n state.sellers.unshift(action.payload)\n state.initialSellers.unshift(action.payload)\n state.total += 1\n }\n })\n .addCase(searchSeller.fulfilled, (state, action: PayloadAction) => {\n if (!_isNull(action.payload)) {\n // @ts-ignore\n state.sellers = action.payload\n } else {\n state.sellers = [...state.initialSellers]\n }\n })\n .addCase(addSellerToUserList.fulfilled, (state, action) => {\n if (action.payload) {\n state.sellers.push(action.payload.seller)\n state.initialSellers.push(action.payload.seller)\n state.total += 1\n }\n })\n },\n})\n\nconst { actions } = sellerSlice\nexport const { setSellerPageSize } = actions\nexport default sellerSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\nimport { FormikValues } from 'formik'\n\nimport { CertificateResponseType, CertificateType } from 'Types/global.types.ts'\nimport { CERTIFICATE_API, CERTIFICATE_BASE_API_URL, DOWNLOAD_API } from 'Constants/Global.constants.ts'\nimport { getAxiosBlobConfig, getAxiosConfig, getAxiosMultipartFormConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Create a new certificate\n */\nexport const createCertificate = createAsyncThunk('certificates/createCertificate', async (options: FormikValues) => {\n try {\n const { data }: AxiosResponse = await axios.post(\n CERTIFICATE_BASE_API_URL,\n options,\n getAxiosMultipartFormConfig()\n )\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Search certificates by:\n * - vin, registration (non-forwarder)\n * - buyer, company name (additional for forwarder)\n */\nexport const searchCertificates = createAsyncThunk(\n 'certificates/search',\n async ({ param, pageIndex, pageSize }: { param: string; pageIndex: number; pageSize: number }) => {\n const url = `${CERTIFICATE_API.CERTIFICATE_SEARCH}?page=${pageIndex}&limit=${pageSize}¶m=${param}`\n\n try {\n const { data }: AxiosResponse<{ data: { data: CertificateType[]; total: number } }> = await axios.get(\n url,\n getAxiosConfig()\n )\n return {\n certificates: data.data.data,\n total: data.data.total,\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(error.message)\n } else {\n throw new Error('An unexpected error occurred')\n }\n }\n }\n)\n\nexport const getFile = (filePath: string) =>\n new Promise((resolve, reject) => {\n const url = `${DOWNLOAD_API.GET_FILE}${filePath}`\n\n axios\n // @ts-ignore\n .get(url, getAxiosBlobConfig())\n .then((data) => {\n resolve(data)\n })\n .catch((error) => {\n reject(error)\n })\n })\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { createCertificate, searchCertificates } from 'Api/certificate.service.ts'\nimport { CertificateType, PaginationProps } from 'Types/global.types.ts'\n\ntype CertificateSliceProps = {\n certificates: CertificateType[]\n loading: boolean\n total: number\n pageIndex: number\n pageSize: number\n param: string\n}\n\nconst initialState = {\n certificates: [],\n loading: false,\n total: 0,\n pageIndex: 0,\n pageSize: 20,\n param: '',\n} as CertificateSliceProps\n\nconst certificatesSlice = createSlice({\n name: 'certificates',\n initialState,\n reducers: {\n setCertificatePageIndex: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n setParam: (state, action) => {\n state.param = action.payload\n state.pageIndex = 0\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(searchCertificates.fulfilled, (state, action) => {\n if (action.payload) {\n state.certificates = action.payload.certificates\n state.total = action.payload.total\n state.loading = false\n }\n })\n .addCase(searchCertificates.pending, (state) => {\n state.loading = true\n })\n .addCase(searchCertificates.rejected, (state) => {\n state.loading = false\n })\n .addCase(createCertificate.fulfilled, (state, action) => {\n if (action.payload) {\n state.certificates.unshift(action.payload)\n state.loading = false\n state.total += 1\n state.pageIndex = 0\n }\n })\n .addCase(createCertificate.pending, (state) => {\n state.loading = true\n })\n .addCase(createCertificate.rejected, (state) => {\n state.loading = false\n })\n },\n})\n\nconst { actions } = certificatesSlice\n\nexport const { setCertificatePageIndex, setParam } = actions\nexport default certificatesSlice.reducer\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\nimport { FormikValues } from 'formik'\n\nimport { PURCHASE_BASE_API_URL } from 'Constants/Global.constants.ts'\n\nimport { PaginationProps, PurchaseResponseType } from 'Types/global.types.ts'\nimport { CustomFileType } from 'Definitions/CustomFile.type.ts'\n\nimport { getAccessToken, getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get a list of purchases\n */\nexport const getPurchases = createAsyncThunk(\n 'purchase/getPurchases',\n async ({ pageIndex, pageSize, param }: PaginationProps) => {\n const token = getAccessToken()\n const url = `${PURCHASE_BASE_API_URL}?page=${pageIndex}&limit=${pageSize}¶m=${param}`\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n purchases: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Create a new Purchase item\n */\nexport const createPurchase = createAsyncThunk('purchase/createPurchase', async (options: FormikValues) => {\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n const { data }: AxiosResponse = await axios.post(PURCHASE_BASE_API_URL, options, config)\n return data.data\n})\n\n/**\n * Upload a new Swift document\n */\nexport const uploadSwift = createAsyncThunk(\n 'purchase/uploadSwift',\n async ({ id, formData }: { id: string; formData: FormData }) => {\n const url = `${PURCHASE_BASE_API_URL}/${id}/swift`\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.put(url, formData, config)\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getSwiftFiles = async ({ purchaseId, group }: { purchaseId: string; group: 'SWIFT_DOCS' }) => {\n const url = `${PURCHASE_BASE_API_URL}/${purchaseId}/custom-file?group=${group}`\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType[]; total: number }> = await axios.get(url, getAxiosConfig())\n return {\n customFiles: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { PaginationProps, PurchaseWithoutVatProps } from 'Types/global.types.ts'\nimport { createPurchase, getPurchases, uploadSwift } from 'Api/purchase.service.ts'\n\ntype PurchaseSliceProps = {\n purchaseList: PurchaseWithoutVatProps[]\n loading: boolean\n total: number\n pageIndex: number\n pageSize: number\n param: string\n}\n\nconst initialState = {\n purchaseList: [],\n total: 0,\n loading: false,\n pageIndex: 0,\n pageSize: 20,\n param: '',\n} as PurchaseSliceProps\n\nconst purchaseSlice = createSlice({\n name: 'purchase',\n initialState,\n reducers: {\n setPurchasePageIndex: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n setParam: (state, action) => {\n state.param = action.payload\n state.pageIndex = 0\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(createPurchase.fulfilled, (state, action: PayloadAction) => {\n if (action.payload) {\n state.purchaseList.unshift(action.payload)\n state.total += 1\n state.pageIndex = 0\n }\n state.loading = false\n })\n .addCase(createPurchase.pending, (state) => {\n state.loading = true\n })\n .addCase(createPurchase.rejected, (state) => {\n state.loading = false\n })\n .addCase(getPurchases.fulfilled, (state, action) => {\n if (action.payload) {\n // @ts-ignore\n state.purchaseList = action.payload.purchases\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getPurchases.pending, (state) => {\n state.loading = true\n })\n .addCase(getPurchases.rejected, (state) => {\n state.loading = false\n })\n .addCase(uploadSwift.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseList = state.purchaseList.map((purchase) => {\n if (purchase.id === action.payload.id) {\n return action.payload\n }\n return purchase\n })\n }\n })\n },\n})\n\nconst { actions } = purchaseSlice\nexport const { setPurchasePageIndex, setParam } = actions\nexport default purchaseSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { DHL_API } from 'Constants/Global.constants.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { DhlListResponseProps, PaginationProps } from 'Types/global.types.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get DHL list\n */\nexport const getDhl = createAsyncThunk('dhl/list', async ({ pageIndex, pageSize }: PaginationProps) => {\n const token = getAccessToken()\n const url = `${DHL_API.LIST}?page=${pageIndex}&limit=${pageSize}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n dhlList: data?.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Create a new DHL\n */\nexport const orderDhl = createAsyncThunk('dhl/order', async () => {\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: { url: string } }> = await axios.post(DHL_API.LIST, null, config)\n return data?.data\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { PaginationProps } from 'Types/global.types.ts'\nimport { getDhl, orderDhl } from 'Api/dhl.service.ts'\n\ntype DhlSliceProps = {\n dhlList: Array<{ [key: string]: any }>\n total: number\n pageIndex: number\n pageSize: number\n loading: boolean\n}\n\nconst initialState = {\n dhlList: [],\n total: 0,\n pageIndex: 0,\n pageSize: 20,\n loading: false,\n} as DhlSliceProps\n\nconst dhlListSlice = createSlice({\n name: 'dhl',\n initialState,\n reducers: {\n setDhlPageIndex: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getDhl.fulfilled, (state, action) => {\n if (action.payload) {\n // @ts-ignore\n state.dhlList = action.payload.dhlList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getDhl.pending, (state) => {\n state.loading = true\n })\n .addCase(getDhl.rejected, (state) => {\n state.loading = false\n })\n .addCase(orderDhl.fulfilled, (state, action) => {\n if (action.payload) {\n state.dhlList.unshift(action.payload)\n state.total += 1\n state.pageIndex = 0\n }\n state.loading = false\n })\n .addCase(orderDhl.pending, (state) => {\n state.loading = true\n })\n .addCase(orderDhl.rejected, (state) => {\n state.loading = false\n })\n },\n})\n\nconst { actions } = dhlListSlice\nexport const { setDhlPageIndex } = actions\n\nexport default dhlListSlice.reducer\n","import { TFunction } from 'i18next'\n\nconst API_URL: string = import.meta.env.VITE_API_URL as string\n\nexport const ADMIN_API_ROOT = `${API_URL}/admin`\nexport const CUSTOMS_API_ROOT = `${API_URL}/customs-officer`\n\nexport const ADMIN_API_URL = {\n DOWNLOAD: `${ADMIN_API_ROOT}/download`,\n AUTH: {\n SIGNIN: `${ADMIN_API_ROOT}/auth/signin`,\n SIGNUP: `${ADMIN_API_ROOT}/auth/signup`,\n VALIDATE_OTP: `${ADMIN_API_ROOT}/auth/validate-otp`,\n },\n PURCHASE: {\n ROOT: `${ADMIN_API_ROOT}/purchase`,\n LIST: `${ADMIN_API_ROOT}/purchase/search`,\n },\n ORDER: {\n ROOT: `${ADMIN_API_ROOT}/certificate`,\n },\n CUSTOMER: {\n ROOT: `${ADMIN_API_ROOT}/user`,\n },\n CUSTOMS_CROSSING: {\n ROOT: `${ADMIN_API_ROOT}/customs-crossing`,\n },\n CUSTOMS_VARIABLE: {\n ROOT: `${ADMIN_API_ROOT}/customs-variable`,\n },\n BUYER: {\n ROOT: `${ADMIN_API_ROOT}/buyer`,\n },\n SELLER: {\n ROOT: `${ADMIN_API_ROOT}/seller`,\n SEARCH: `${ADMIN_API_ROOT}/seller/search`,\n EORI: `${ADMIN_API_ROOT}/seller/eori`,\n },\n EUR1_COUNTER: {\n ROOT: `${ADMIN_API_ROOT}/eur1Counter`,\n },\n BLACKLIST: {\n ROOT: `${ADMIN_API_ROOT}/blacklist`,\n },\n FACTURE: {\n ROOT: `${ADMIN_API_ROOT}/facture`,\n SEARCH: `${ADMIN_API_ROOT}/facture/search`,\n MONTHLY_DOWNLOAD: `${ADMIN_API_ROOT}/facture/monthly-download`,\n },\n INCOME: {\n ROOT: `${ADMIN_API_ROOT}/income`,\n },\n INCOME_STATISTICS: {\n ROOT: `${ADMIN_API_ROOT}/income/statistics`,\n },\n STORAGE_PLACE: {\n ROOT: `${ADMIN_API_ROOT}/storage-place`,\n },\n DHL: {\n ROOT: `${ADMIN_API_ROOT}/dhl`,\n },\n USER: {\n ROOT: `${ADMIN_API_ROOT}/user`,\n },\n CUSTOMS: {\n CUSTOMS_TRANSACTION: `${ADMIN_API_ROOT}/customs-transaction`,\n },\n PRICE: {\n ROOT: `${ADMIN_API_ROOT}/price`,\n },\n DEBLOCAGE: {\n ROOT: `${ADMIN_API_ROOT}/deblocage`,\n },\n LOG: {\n ROOT: `${ADMIN_API_ROOT}/log`,\n CERTIFICATE: `${ADMIN_API_ROOT}/log/certificate`,\n PURCHASE: `${ADMIN_API_ROOT}/log/purchase`,\n SELLER: `${ADMIN_API_ROOT}/log/seller`,\n BUYER: `${ADMIN_API_ROOT}/log/buyer`,\n USER: `${ADMIN_API_ROOT}/log/user`,\n },\n EXTERNAL_USER: {\n ROOT: `${ADMIN_API_ROOT}/external-user`,\n },\n}\n\nexport const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n]\n\nexport const getTranslateMonthNames = (t: TFunction) => [\n t('translation:common.months.january'),\n t('translation:common.months.february'),\n t('translation:common.months.march'),\n t('translation:common.months.april'),\n t('translation:common.months.may'),\n t('translation:common.months.June'),\n t('translation:common.months.july'),\n t('translation:common.months.august'),\n t('translation:common.months.september'),\n t('translation:common.months.october'),\n t('translation:common.months.november'),\n t('translation:common.months.december'),\n]\n\nexport const getVehicleTypeOptions = (t: TFunction) => [\n { value: 'TRUCK', label: t('translation:common.label.truck') },\n { value: 'VEHICLE', label: t('translation:common.label.vehicle') },\n]\n\nexport const getTranslate_default_reserved_names = (t: TFunction) => [\n t('translation:common.label.gray_card'),\n t('translation:common.label.invoice'),\n t('translation:form.placeholder.delivery_note'),\n t('translation:form.placeholder.driving_licence'),\n t('translation:form.placeholder.business_registry'),\n t('translation:common.label.swift'),\n]\n\nexport const customsTransactionStatuses = {\n creationDauValide: 'CREATION_DAU_VALIDE',\n ValidationDauEnAttente: 'VALIDATION_DAT_EN_ATTENTE',\n AnnulationDau: 'ANNULATION_DAU',\n InvalidationDau: 'INVALIDATION_DAU',\n ValidationDauAnticipe: 'VALIDATION_DAT_ANTICIPE',\n}\n\nexport const mapCustomsTransactionStatuses = {\n CREATION_DAU_VALIDE: 'Creation DAU Valide',\n VALIDATION_DAU_EN_ATTENTE: 'Validation DAU en Attente',\n ANNULATION_DAU: 'Annulation DAU',\n INVALIDATION_DAU: 'Invalidation DAU',\n RECTIFICATION_DAU: 'Rectification DAU',\n VALID_RECTIFICATION: 'Valid Rectification',\n ANNUAL_RECTIFICATION: 'Annual Rectification',\n VALIDATION_DAT_ANTICIPE: 'Validation DAU Anticipe',\n MODIFICATION_PAIEMENT_DAU: 'Modification Paiement DAU',\n CREATION_DAU_SECOURS: 'Creation DAU Secours',\n CREATION_DAU_ANTICIPE: 'Creation DAU Anticipe',\n MODIFICATION_DAU: 'Modification DAU',\n}\n\nexport const customsTransactionStatusOptions = [\n {\n label: 'Creation Dau Valide',\n value: 'CREATION_DAU_VALIDE',\n },\n {\n label: 'Validation Dau En Attente',\n value: 'VALIDATION_DAU_EN_ATTENTE',\n },\n {\n label: 'Annulation Dau',\n value: 'ANNULATION_DAU',\n },\n {\n label: 'Invalidation Dau',\n value: 'INVALIDATION_DAU',\n },\n {\n label: 'Rectification dau',\n value: 'RECTIFICATION_DAU',\n },\n {\n label: 'Valid rectification',\n value: 'VALID_RECTIFICATION',\n },\n {\n label: 'Annual rectification',\n value: 'ANNUAL_RECTIFICATION',\n },\n {\n label: 'Creation dau anticipe',\n value: 'CREATION_DAU_ANTICIPE',\n },\n {\n label: 'Validation Dau Anticipe',\n value: 'VALIDATION_DAT_ANTICIPE',\n },\n {\n label: 'Modification paiement dau',\n value: 'MODIFICATION_PAIEMENT_DAU',\n },\n {\n label: 'Creation dau secours',\n value: 'CREATION_DAU_SECOURS',\n },\n {\n label: 'Modification dau',\n value: 'MODIFICATION_DAU',\n },\n]\n\nexport const getWorkingStatusTranslation = (t: TFunction) => ({\n NOT_PROCESSED: t('translation:common.status.not_processed'),\n IN_PROGRESS: t('translation:common.status.in_progress'),\n IN_REVIEW: t('translation:common.status.in_review'),\n REVIEWED: t('translation:common.status.reviewed'),\n PROCESSED: t('translation:common.status.processed'),\n})\n\nexport const vehicleFields = [\n 'brand',\n 'model',\n 'firstRegistrationAt',\n 'year',\n 'registration',\n 'vin',\n 'weight',\n 'numberOfKm',\n 'invoiceNumber',\n 'price',\n 'nomenclature',\n 'meansOfTransport',\n 'storagePlace',\n 'euExitPlace',\n 'vehicleLicenceNumber',\n]\n\nexport const paymentStatusOptions = (t: TFunction) => [\n {\n value: 'PAID',\n label: t('translation:common.status.paid'),\n },\n {\n value: 'NOT_PAID',\n label: t('translation:common.status.not_paid'),\n },\n {\n value: 'FAILED',\n label: t('translation:common.status.failed'),\n },\n]\n","import axios, { AxiosError } from 'axios'\nimport jwtDecode, { JwtPayload } from 'jwt-decode'\n\nimport { setAccessToken } from 'Utils/auth.util.ts'\n\nimport { AUTH_ERRORS } from 'Constants/Global.constants.ts'\n\nexport const decodeToken = (token: string) => jwtDecode(token)\n\nexport const setUserToken = (token: string): void => {\n const decoded = jwtDecode(token)\n const { exp, iat } = decoded\n const now: Date = new Date(iat * 1000)\n const expires: Date = new Date(exp * 1000)\n\n const differenceInMs: number = expires.getTime() - now.getTime()\n const days: number = Math.floor(differenceInMs / (1000 * 60 * 60 * 24))\n\n setAccessToken(token, days)\n}\n\nexport const handleException = (error: AxiosError | Error) => {\n if (axios.isAxiosError(error)) {\n console.error(AUTH_ERRORS.AXIOS, error.message)\n return error.message\n } else {\n console.error(error)\n return AUTH_ERRORS.UNEXPECTED\n }\n}\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { AdminListResponse, AdminResponse, AdminSignInResponse, AdminType } from 'Types/admin/admin'\nimport { AuthUserProps } from 'Types/onboarding.types.ts'\n\nimport { ADMIN_API_ROOT, ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { handleError } from 'Helpers/errors.helper.ts'\nimport { getAccessToken, getTempAccessToken, removeTempAccessToken, setTempAccessToken } from 'Utils/auth.util.ts'\nimport { setUserToken } from 'Helpers/auth.helpers.ts'\n\n/**\n * Get Admin list\n */\nexport const getAdminList = createAsyncThunk(\n 'admin/adminList',\n async ({ deleted, pageIndex, pageSize }: { deleted?: boolean; pageIndex?: number; pageSize?: number }) => {\n let url = `${ADMIN_API_ROOT}?deleted=${deleted}`\n const queryParams = []\n\n if (pageIndex) {\n queryParams.push(`page=${encodeURIComponent(pageIndex)}`)\n }\n\n if (pageSize) {\n queryParams.push(`limit=${encodeURIComponent(pageSize)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}&${queryString}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n adminList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Get current admin\n */\nexport const getAdmin = createAsyncThunk('admin/getAdmin', async () => {\n const url = `${ADMIN_API_ROOT}/profile`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n admin: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Admin SignUp\n * @param body\n */\nexport const signUpAdmin = createAsyncThunk('admin/signUp', async (body: AdminType) => {\n const url = ADMIN_API_URL.AUTH.SIGNUP\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, body, config)\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Admin SignIn\n * @param options\n */\nexport const signInAdmin = async (options: AuthUserProps) => {\n const url = ADMIN_API_URL.AUTH.SIGNIN\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options)\n const { token } = data.data\n setTempAccessToken(token)\n return token\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const validateOtp = async (otpToken: string) => {\n const url = `${ADMIN_API_URL.AUTH.VALIDATE_OTP}?otp=${otpToken}`\n const token = getTempAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: string }> = await axios.get(url, config)\n const token: string = data.data\n removeTempAccessToken()\n setUserToken(token)\n return token\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Update Admin\n * @param body\n */\nexport const updateAdmin = createAsyncThunk('admin/updateAdmin', async (body: { [key: string]: any }) => {\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(ADMIN_API_ROOT, body, config)\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Remove admin\n * @param id\n */\nexport const removeAdmin = createAsyncThunk('admin/deleteAdmin', async (id: string) => {\n const url = `${ADMIN_API_ROOT}/${id}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, config)\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { AdminType } from 'Types/admin/admin'\nimport { PaginationProps } from 'Types/global.types.ts'\nimport { getAdmin, getAdminList, removeAdmin, signUpAdmin, updateAdmin } from 'Api/admin/admin.auth.service.ts'\n\ninterface InitialStateProps {\n admin: AdminType | null\n initialAdminList: AdminType[]\n adminList: AdminType[]\n loading: boolean\n total: number\n pageIndex: number\n pageSize: number\n}\n\nconst initialState: InitialStateProps = {\n admin: null,\n initialAdminList: [],\n adminList: [],\n loading: false,\n total: 0,\n pageIndex: 0,\n pageSize: 20,\n}\n\nconst adminListSlice = createSlice({\n name: 'adminList',\n initialState,\n reducers: {\n setAdminListPageSize: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n resetAdmin: (state) => {\n state.admin = null\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getAdmin.fulfilled, (state, action) => {\n if (action.payload) {\n state.admin = action.payload.admin\n }\n })\n .addCase(signUpAdmin.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminList.unshift(action.payload)\n state.initialAdminList.unshift(action.payload)\n state.total += 1\n state.pageIndex = 0\n }\n })\n .addCase(getAdminList.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminList = action.payload.adminList\n state.initialAdminList = action.payload.adminList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getAdminList.pending, (state) => {\n state.loading = true\n })\n .addCase(getAdminList.rejected, (state) => {\n state.loading = false\n })\n .addCase(updateAdmin.fulfilled, (state, action) => {\n if (action.payload) {\n const mutableAdminList: AdminType[] = state.adminList.map((admin) => {\n if (admin.id === action.payload.id) {\n return action.payload\n }\n return admin\n })\n\n state.adminList = mutableAdminList\n state.initialAdminList = mutableAdminList\n }\n })\n .addCase(removeAdmin.fulfilled, (state, action) => {\n if (action.payload) {\n const mutableAdminList: AdminType[] = state.adminList.map((admin) => {\n if (admin.id === action.payload.id) {\n return action.payload\n }\n return admin\n })\n\n state.adminList = mutableAdminList\n state.initialAdminList = mutableAdminList\n }\n })\n },\n})\n\nconst { actions } = adminListSlice\nexport const { setAdminListPageSize, resetAdmin } = actions\nexport default adminListSlice.reducer\n","import { isNull as _isNull } from 'lodash'\nimport { TFunction } from 'i18next'\n\nimport { UserTypes } from 'Types/user.types.ts'\n\nimport { getTranslateMonthNames } from 'Constants/Global.admin.constants.ts'\n\n/**\n * Convert Array list into Object list\n * @param arrList\n */\nexport const formatArrayToObject = (arrList: Array<{ id: string; value: string }>) => {\n const results: { [key: string]: string } = {}\n\n for (const obj of arrList) {\n results[obj.id] = obj.value\n }\n\n return results\n}\n\nexport const extractInvoiceBillingInformation = (user: UserTypes, t: TFunction) => {\n const { companyName, firstName, lastName, country, city, phone, postalCode, streetName, streetNumber } = user || {}\n\n return [\n {\n label: t('translation:common.label.company_name'),\n value: companyName,\n },\n {\n label: t('translation:common.label.first_name'),\n value: firstName,\n },\n {\n label: t('translation:common.label.last_name'),\n value: lastName,\n },\n {\n label: t('translation:form.placeholder.address'),\n value: `${streetName}, ${streetNumber}`,\n },\n {\n label: t('translation:form.placeholder.city'),\n value: city,\n },\n {\n label: t('translation:form.placeholder.postal_code'),\n value: postalCode,\n },\n {\n label: t('translation:form.placeholder.country'),\n value: country,\n },\n {\n label: t('translation:form.placeholder.phone'),\n value: phone,\n },\n ]\n}\n\nexport const formatCommandId = (command: string) => {\n if (_isNull(command) || typeof command !== 'string') {\n return '-'\n }\n\n return `${command?.slice(0, 3)}...${command?.slice(-6)}`\n}\n\nexport const extractMinMaxDateFromMonth = (year: string, month: string) => {\n if (typeof year === 'string' && typeof month === 'string') {\n const fullYear = parseInt(year)\n const ordinalMonthNumber = parseInt(month)\n\n const minDate = new Date(fullYear, ordinalMonthNumber - 1, 1)\n const maxDate = new Date(fullYear, ordinalMonthNumber, 0)\n\n return {\n minDate,\n maxDate,\n }\n }\n\n return {\n minDate: null,\n maxDate: null,\n }\n}\n\nexport const getMonthName = (monthNumber: number) => {\n if (typeof monthNumber === 'number') {\n const date = new Date()\n date.setMonth(monthNumber - 1)\n\n return date.toLocaleString('en-US', {\n month: 'long',\n })\n }\n\n console.error('monthNumber must be a number')\n}\n\nexport const generateYearOptions = (limit: number) => {\n const currentYear = new Date().getFullYear()\n const yearRange = []\n\n for (let i = currentYear - limit; i <= currentYear; i++) {\n yearRange.unshift({ label: i.toString(), value: i.toString() })\n }\n\n return yearRange\n}\n\nexport const generateAppYearOptions = () => {\n const currentYear = new Date().getFullYear()\n const yearRange = []\n\n for (let i = 2023; i <= currentYear; i++) {\n yearRange.unshift({ label: i.toString(), value: i.toString() })\n }\n\n return yearRange\n}\n\nexport const generateMonthOptions = (t: TFunction) => {\n const monthNames = getTranslateMonthNames(t)\n return monthNames.map((monthName, index) => ({\n label: monthName,\n value: `${index + 1}`,\n }))\n}\n\nexport const formatCompactNumber = (number: number) => {\n if (number < 1000) {\n return number\n } else if (number >= 1000 && number < 1_000_000) {\n return (number / 1000).toFixed(1).replace(/\\.0$/, '') + 'K'\n } else if (number >= 1_000_000 && number < 1_000_000_000) {\n return (number / 1_000_000).toFixed(1).replace(/\\.0$/, '') + 'M'\n } else if (number >= 1_000_000_000 && number < 1_000_000_000_000) {\n return (number / 1_000_000_000).toFixed(1).replace(/\\.0$/, '') + 'B'\n } else if (number >= 1_000_000_000_000 && number < 1_000_000_000_000_000) {\n return (number / 1_000_000_000_000).toFixed(1).replace(/\\.0$/, '') + 'T'\n }\n}\n\nexport const formatAbbreviateCurrency = (number: number) => {\n const value = formatCompactNumber(number)\n return `€${value}`\n}\n\nexport const isDateExpired = (dateString: string): boolean => {\n const currentDate = new Date()\n const targetDate = new Date(dateString)\n return targetDate < currentDate\n}\n\nexport const formatDateToInputMask = (isoDate: string) => {\n if (!isoDate) return ''\n\n const date = new Date(isoDate)\n const day = String(date.getDate()).padStart(2, '0')\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const year = date.getFullYear()\n\n return `${day}/${month}/${year}`\n}\n\nexport const formatInputMaskToIsoString = (dateString: string) => {\n if (!dateString) return ''\n\n const [day, month, year] = dateString.split('/')\n\n return `${year}-${month}-${day}`\n}\n\nexport const formatInputMaskToDotIsoString = (dateString: string) => {\n if (!dateString) return ''\n const [day, month, year] = dateString.split('/')\n return `${year}.${month}.${day}`\n}\n\nexport const isMaskValid = (inputValue: string) => {\n return !inputValue.includes('_')\n}\n\nexport const convertDateStringToISOString = (dateString: string): string => {\n const [day, month, year] = dateString.split('/').map(Number)\n const date = new Date(year, month - 1, day)\n return date.toISOString()\n}\n\nexport const workingStatusOptions = (t: TFunction) => [\n {\n value: 'APPROVED',\n label: t('translation:common.label.approved'),\n },\n {\n value: 'DECLINED',\n label: t('translation:common.label.declined'),\n },\n]\n\nexport const checkedStatusOptions = (t: TFunction) => [\n {\n value: 'CHECK',\n label: t('translation:common.label.checked'),\n },\n {\n value: 'UNCHECK',\n label: t('translation:common.label.unchecked'),\n },\n]\n\nexport const activeStatusOptions = (t: TFunction) => [\n {\n value: 'ENABLE',\n label: t('translation:common.status.enabled'),\n },\n {\n value: 'DISABLE',\n label: t('translation:common.status.disabled'),\n },\n]\n","import { format, parseISO } from 'date-fns'\nimport { Country } from 'country-state-city'\nimport { forEach as _forEach, includes as _includes, isEqual as _isEqual } from 'lodash'\nimport { FormikValues } from 'formik'\n\nimport { formatInputMaskToIsoString } from 'Utils/common.util.ts'\n\nexport const formatDateToISOString = (date: Date | number | undefined, formatTo?: string) => {\n const dateFormat = formatTo || 'yyyy-MM-dd'\n return format(date, dateFormat)\n}\n\nexport const getFriendlyDateFormat = (date: string, formatTo?: string) => {\n const desiredFormat = formatTo || 'dd.MM.yyyy'\n const parsedDate = parseISO(date)\n return formatDateToISOString(parsedDate, desiredFormat)\n}\n\nexport const formatDateToIso = (date: string | undefined) => {\n if (date) {\n const parsedDate = parseISO(date)\n return format(parsedDate, 'yyyy-MM-dd')\n }\n}\n\ntype ValuesType = Record\nexport const getDiffValues = (values: ValuesType, initialValues: ValuesType): ValuesType => {\n return Object.keys(values).reduce((diff: ValuesType, key: string) => {\n if (!_isEqual(values[key], initialValues[key])) {\n diff[key] = values[key]\n }\n return diff\n }, {})\n}\n\nexport const convertArrayToSelectFormat = (\n items: T[],\n options: { value: K; label: K }\n): { value: T[K]; label: T[K] }[] => {\n return items.map((item) => {\n const value = item[options.value]\n const label = item[options.label]\n\n return {\n value,\n label,\n }\n })\n}\n\nexport const convertArrayToSelectFormatForAsync = (\n items: Array,\n options: { label: string | Array; value: string }\n) => {\n return items.map((item: { [key: string]: any }) => {\n if (Array.isArray(options.label)) {\n const label = options.label\n .map((key) => {\n const result: string = item[key]\n if (result) {\n return result\n } else {\n return null\n }\n })\n .join(' ')\n\n const value = item[options.value]\n\n return {\n value,\n label,\n item,\n }\n } else {\n const value = item[options.value]\n const label = item[options.label]\n\n return {\n value,\n label,\n item,\n }\n }\n })\n}\n\nexport const convertBuyersArrayToSelectFormat = (\n items: Array<{ [key: string]: any }>,\n options: { value: string; label: string }\n): { value: string; label: string }[] => {\n return items.map((item) => {\n const value = item[options.value]\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const label = item.type === 'PHYSICAL' ? `${item['firstName']} ${item['lastName']}` : item['companyName']\n\n return {\n value,\n label,\n }\n })\n}\n\n/**\n * Get country list\n */\nexport const getCountryList = () => {\n const allCountries = Country.getAllCountries()\n return allCountries.map((country) => ({\n value: country.isoCode,\n label: country.name,\n }))\n}\n\nexport const dateToDatepickerFormat = (date: Date) => {\n const desiredFormat = 'dd.MM.yyyy'\n const parsedDate = parseISO(date.toString())\n return formatDateToISOString(parsedDate, desiredFormat)\n}\n\n/**\n * Convert Date to ISO string\n * @param date\n */\nexport const dateToApi = (date: Date): string => {\n if (date) {\n return format(date, 'yyyy-MM-dd')\n }\n return null\n}\n\ntype FormattedValues = Record\n\ntype DataTypeProps = {\n dates?: Array\n files?: Array\n}\nexport const getFormDataWithExpiredDate = (formattedValues: FormattedValues, dataTypes: DataTypeProps) => {\n const formDataText = new FormData()\n const formDataBlob = new FormData()\n\n _forEach(formattedValues, (value, key) => {\n if (_includes(dataTypes.files, key)) {\n const mutableValue: File = value\n formDataBlob.append(key, mutableValue)\n } else if (_includes(dataTypes.dates, key)) {\n formDataText.append(key, formatInputMaskToIsoString(value as string))\n } else {\n const mutableValue: string = value\n formDataText.append(key, mutableValue)\n }\n })\n\n const mergedData = new FormData()\n for (const [key, value] of formDataText.entries()) {\n mergedData.append(key, value)\n }\n\n for (const [key, value] of formDataBlob.entries()) {\n mergedData.append(key, value)\n }\n\n return mergedData\n}\n\nexport const getFormData = (formattedValues: FormattedValues, dataTypes: DataTypeProps) => {\n const formDataText = new FormData()\n const formDataBlob = new FormData()\n\n _forEach(formattedValues, (value, key) => {\n if (_includes(dataTypes.files, key)) {\n const mutableValue: File = value\n formDataBlob.append(key, mutableValue)\n } else if (_includes(dataTypes.dates, key)) {\n const dateValue: Date = value\n formDataText.append(key, dateToApi(dateValue))\n } else {\n const mutableValue: string = value\n formDataText.append(key, mutableValue)\n }\n })\n\n const mergedData = new FormData()\n for (const [key, value] of formDataText.entries()) {\n mergedData.append(key, value)\n }\n\n for (const [key, value] of formDataBlob.entries()) {\n mergedData.append(key, value)\n }\n\n return mergedData\n}\n\nexport const isFieldsFilled = (fields: string[], values: FormikValues): boolean => {\n // return fields.every((fieldName: string) => !!values[fieldName])\n return fields.every(\n (fieldName: string) => values[fieldName] !== null && values[fieldName] !== undefined && values[fieldName] !== ''\n )\n}\n\nexport const isAnyFieldsFilled = (fields: string[], values: FormikValues): boolean => {\n return fields.every((fieldName: string) => !!values[fieldName] || values[fieldName] === 0)\n}\n\nexport const clearFormFields = (fields: string[], setFieldFn: (name: string, value: string) => void) => {\n fields.map((field) => setFieldFn(field, ''))\n}\n\nexport const logFormDataEntries = (formData: FormData) => {\n for (const pair of formData.entries()) {\n const [key, value] = pair\n console.warn(`${key} - ${value as string}`)\n }\n}\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\nimport { reverse as _reverse } from 'lodash'\n\nimport { ADMIN_API_ROOT, ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { UserTypes } from 'Types/user.types.ts'\nimport {\n AdminEur1IdPayloadProps,\n AdminPurchaseResponse,\n AdminPurchaseResponseProps,\n CommentListResponse,\n CommentResponse,\n CustomFilesResponse,\n CustomFileType,\n PurchaseParamsPayloadProps,\n AdminPrintDatePayloadProps,\n InvoiceResponseType,\n} from 'Types/admin/admin'\nimport { PurchaseAuctionHousePayload, WorkStatusType } from 'Types/global.types'\nimport { PurchaseType } from 'Definitions/Purchase.type.ts'\n\nimport { getAccessToken, getAxiosBlobConfig, getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\nimport { dateToApi } from 'Utils/form.util.ts'\n\ninterface UploadPurchasePayloadProps {\n options: FormData\n purchaseId: string\n}\n\ninterface PurchaseAssignAdminProps {\n purchaseId: string\n adminId: string\n}\n\ninterface PurchaseProformProps {\n options: FormData // eoProform: File\n purchaseId: string\n}\n\ninterface PurchaseVehicleLicenceProps {\n options: FormData // vehicleLicence: File\n purchaseId: string\n}\n\n/**\n * Get list of purchases\n */\nexport const getAdminPurchases = createAsyncThunk(\n 'admin/getPurchases',\n async ({\n param,\n sort = 'CREATED_AT',\n order,\n minDate,\n maxDate,\n pageIndex,\n pageSize,\n customsStatus,\n workingStatus,\n }: PurchaseParamsPayloadProps) => {\n let url = `${ADMIN_API_URL.PURCHASE.LIST}`\n const queryParams = []\n\n const formattedMinDate = dateToApi(minDate)\n const formattedMaxDate = dateToApi(maxDate)\n\n if (param) {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (minDate) {\n queryParams.push(`minDate=${encodeURIComponent(formattedMinDate)}`)\n }\n\n if (maxDate) {\n queryParams.push(`maxDate=${encodeURIComponent(formattedMaxDate)}`)\n }\n\n if (customsStatus) {\n queryParams.push(`status=${encodeURIComponent(customsStatus)}`)\n }\n\n if (workingStatus) {\n queryParams.push(`state=${encodeURIComponent(workingStatus)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n adminPurchaseList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Get admin purchase details\n */\nexport const getAdminPurchaseDetails = createAsyncThunk('admin/getPurchaseDetails', async (purchaseId: string) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Upload purchase proform\n */\nexport const uploadPurchaseProform = createAsyncThunk(\n 'admin/uploadProform',\n async ({ purchaseId, options }: PurchaseProformProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/eo-proform`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n adminPurchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload purchase car proform\n */\nexport const uploadPurchaseCarProform = createAsyncThunk(\n 'admin/uploadCarProform',\n async ({ purchaseId, options }: PurchaseProformProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/proform`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n adminPurchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload purchase vehicleLicence\n */\nexport const uploadPurchaseVehicleLicence = createAsyncThunk(\n 'admin/uploadPurchaseVehicleLicence',\n async ({ purchaseId, options }: PurchaseVehicleLicenceProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/vehicleLicence`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n adminPurchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Assign admin user to purchase\n */\nexport const assignAdminToPurchase = createAsyncThunk(\n 'admin/assignAdmin',\n async ({ adminId, purchaseId }: PurchaseAssignAdminProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/assignee`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n const body = {\n adminId,\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, body, config)\n return {\n adminPurchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const assignReviewerToPurchase = createAsyncThunk(\n 'admin/assignReviewer',\n async ({ adminId, purchaseId }: PurchaseAssignAdminProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/reviewer`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n const body = {\n adminId,\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, body, config)\n return {\n adminPurchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload custom file\n */\nexport const uploadCustomFile = createAsyncThunk(\n 'admin/uploadCustomFile',\n async ({ purchaseId, options }: UploadPurchasePayloadProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/custom-file`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType }> = await axios.post(url, options, config)\n return {\n customFile: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateCustomFile = createAsyncThunk(\n 'admin/updateCustomFile',\n async ({ purchaseId, options }: UploadPurchasePayloadProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/custom-file`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType }> = await axios.post(url, options, config)\n return {\n customFile: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Get custom files by purchase ID\n * group: 'PURCHASE_DOCS' | 'USER_DOCS' | 'CAR_DOCS'\n */\nexport const getCustomFiles = createAsyncThunk(\n 'admin/getCustomFiles',\n async ({ purchaseId, group }: { purchaseId: string; group: string }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/custom-file?group=${group}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n customFiles: data.data,\n group,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Download custom file by ID\n * @param file\n */\nexport const downloadCustomFile = async (file: string) => {\n const url = `${ADMIN_API_URL.DOWNLOAD}${file}`\n const token = getAccessToken()\n const config = {\n responseType: 'blob',\n headers: {\n Authorization: token,\n },\n }\n\n try {\n // @ts-ignore\n const data: AxiosResponse = await axios.get(url, config)\n return data\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Update purchase state\n */\nexport const updatePurchaseState = createAsyncThunk(\n 'admin/updatePurchaseState',\n async ({ options, purchaseId }: { options: { state: WorkStatusType }; purchaseId: string }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/state`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n purchaseState: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update purchase payment state\n */\nexport const updatePurchasePaymentState = createAsyncThunk(\n 'admin/updatePurchasePaymentState',\n async ({\n options,\n purchaseId,\n }: {\n options: { paymentState: 'PAID' | 'NOT_PAID' | 'FAILED' }\n purchaseId: string\n }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/payment-state`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n purchasePaymentState: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update purchase details\n */\nexport const updatePurchaseDetails = createAsyncThunk(\n 'admin/updatePurchaseDetails',\n async ({ purchaseId, options }: { purchaseId: string; options: PurchaseType }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/details`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update purchase EUR-1 id\n */\nexport const updatePurchaseEur1Id = createAsyncThunk(\n 'admin/updatePurchaseEur1Id',\n async ({ options, purchaseId }: { purchaseId: string; options: AdminEur1IdPayloadProps }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/eur1`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update purchase print date\n */\nexport const updatePurchasePrintDate = createAsyncThunk(\n 'admin/updatePurchasePrintDate',\n async ({ options, purchaseId }: { purchaseId: string; options: AdminPrintDatePayloadProps }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/print-date`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Handle upload document\n */\nexport const uploadUserDocument = createAsyncThunk(\n 'admin/uploadUserDocument',\n async ({ purchaseId, options }: UploadPurchasePayloadProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/user-documents`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload EO EUR-1 document\n */\nexport const uploadEoEur1Document = createAsyncThunk(\n 'admin/uploadEoEur1',\n async ({ purchaseId, options }: UploadPurchasePayloadProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/eo-eur1`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload COO document\n * @path param: purchaseId: string\n * @body param: coo: file\n */\nexport const uploadPurchaseCooDocument = createAsyncThunk(\n 'admin/uploadPurchaseCooDocument',\n async ({ purchaseId, options }: { purchaseId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/coo`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload car document\n * body options: vehicleLicence, invoice, deliveryNote\n */\nexport const uploadCarDocument = createAsyncThunk(\n 'admin/uploadCarDocument',\n async ({ purchaseId, options }: UploadPurchasePayloadProps) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/car-documents`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const uploadPurchaseSwift = createAsyncThunk(\n 'admin/uploadPurchaseSwift',\n async ({ purchaseId, options }: { purchaseId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/swift`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.put(url, options, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Remove purchase\n */\nexport const removeAdminPurchase = createAsyncThunk('admin/removePurchase', async (purchaseId: string) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: { deleted: boolean } }> = await axios.delete(url, config)\n return {\n purchaseId,\n deleted: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Post new comment\n * @param purchaseId\n * @param options\n */\nexport const postComment = createAsyncThunk(\n 'admin/postPurchaseComment',\n async ({ purchaseId, options }: { purchaseId: string; options: { content: string } }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/comment`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n comment: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const removePurchaseComment = createAsyncThunk('admin/removePurchaseComment', async (commentId: string) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/comment/${commentId}`\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, getAxiosConfig())\n return {\n comment: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Get comments by purchase\n * @param purchaseId\n */\nexport const getComments = createAsyncThunk(\n 'admin/getPurchaseComments',\n async ({ purchaseId, pageIndex, pageSize }: { purchaseId: string; pageIndex: number; pageSize: number }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/comment?page=${pageIndex}&limit=${pageSize}&order=DESC`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n const reverseData = _reverse(data.data)\n return {\n comments: reverseData,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateAuctionHouse = createAsyncThunk(\n 'admin/updateAuctionHouse',\n async ({ purchaseId, options }: { purchaseId: string; options: PurchaseAuctionHousePayload }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/auction-house`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updatePurchaseUserInformation = createAsyncThunk(\n 'admin/updatePurchaseUserInformation',\n async ({ purchaseId, options }: { purchaseId: string; options: UserTypes }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/user`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Send purchase email\n * @param purchaseId\n * @param options\n */\nexport const sendPurchaseEmail = async ({\n purchaseId,\n options,\n}: {\n purchaseId: string\n options: { email: string }\n}) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/send-email`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: boolean }> = await axios.post(url, options, config)\n return {\n sent: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const getPurchaseInvoice = async (purchaseId: string) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/invoice`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n purchaseInvoice: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Generate purchase eur1\n * @param purchaseId\n */\nexport const generatePurchaseEur1 = createAsyncThunk('admin/generatePurchaseEur1', async (purchaseId: string) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/generate-eur1`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, null, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Generate purchase EUR1\n */\nexport const generateCessionDate = createAsyncThunk(\n 'admin/generateCessionDate',\n async ({ purchaseId, options }: { purchaseId: string; options: { cessionDate: string } }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/cession-date`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Generate attestation date\n */\nexport const generateAttestationDate = createAsyncThunk(\n 'admin/generateAttestationDate',\n async ({ purchaseId, options }: { purchaseId: string; options: { attestationDate: string } }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/attestation-date`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Create a new purchase\n */\nexport const createPurchase = createAsyncThunk('admin/createPurchase', async () => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.post(url, null, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Set existing user to a purchase\n */\nexport const setUserToPurchase = createAsyncThunk(\n 'admin/setUserToPurchase',\n async ({ purchaseId, userId }: { purchaseId: string; userId: string }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/user-id`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n const options = {\n userId,\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const setExportationCountry = createAsyncThunk(\n 'admin/setExportationCountry',\n async ({ purchaseId, exportationCountry }: { purchaseId: string; exportationCountry: string }) => {\n const url = `${ADMIN_API_URL.PURCHASE.ROOT}/${purchaseId}/exportation-country`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n const options = {\n exportationCountry,\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, options, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getPurchaseListByUser = createAsyncThunk(\n 'admin/getPurchaseListByUser',\n async ({ param, userId }: { param: string; userId: string }) => {\n let url = `${ADMIN_API_URL.PURCHASE.ROOT}/search-by-user`\n const queryParams = []\n\n if (userId) {\n queryParams.push(`userId=${encodeURIComponent(userId)}`)\n }\n\n if (param) {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType[]; total: number }> = await axios.get(url, config)\n return {\n purchaseList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\ninterface IOrderPaymentInformation {\n userId: string\n minDate: string\n maxDate: string\n}\n\nexport const exportPurchasePaymentInformation = async ({ userId, minDate, maxDate }: IOrderPaymentInformation) => {\n const url = `${ADMIN_API_ROOT}/export/purchase/${userId}?minDate=${minDate}&maxDate=${maxDate}`\n\n try {\n // @ts-ignore\n const data: AxiosResponse = await axios.get(url, getAxiosBlobConfig())\n return data\n } catch (error) {\n handleError(error, true)\n }\n}\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\n\nimport { UserResponse, UserResponseList, UserTypes } from 'Types/user.types.ts'\nimport {\n AdminPaymentResponseType,\n CustomersParamsPayloadProps,\n CustomFilesResponse,\n CustomFileType,\n PaymentType,\n} from 'Types/admin/admin'\nimport { UserApiType } from 'Schemas/user.types.ts'\nimport { UserType } from 'Definitions/User.type.ts'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { getAccessToken, getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get customer list\n */\nexport const getCustomerList = createAsyncThunk(\n 'admin/getCustomerList',\n async ({ onlyForwarders = false }: { onlyForwarders: boolean }) => {\n let url = `${ADMIN_API_URL.CUSTOMER.ROOT}`\n const queryParams = []\n\n if (onlyForwarders) {\n queryParams.push(`onlyForwarders=${encodeURIComponent(onlyForwarders)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n customerList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getCustomerListIncludingExternal = createAsyncThunk(\n 'admin/getCustomerListIncludingExternal',\n async ({ param, sort = 'CREATED_AT', order = 'DESC', pageIndex, pageSize }: CustomersParamsPayloadProps) => {\n let url = `${ADMIN_API_URL.CUSTOMER.ROOT}/search/include-external`\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const config = getAxiosConfig()\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n customerListIncludingExternal: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getExternalCustomerList = createAsyncThunk(\n 'admin/getExternalCustomerList',\n async ({ param, sort = 'CREATED_AT', order = 'DESC', pageIndex, pageSize }: CustomersParamsPayloadProps) => {\n let url = `${ADMIN_API_URL.EXTERNAL_USER.ROOT}`\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const config = getAxiosConfig()\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n externalCustomerList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const searchAllCustomerList = async ({\n param,\n sort = 'CREATED_AT',\n order = 'DESC',\n pageIndex,\n pageSize,\n}: CustomersParamsPayloadProps) => {\n let url = `${ADMIN_API_URL.CUSTOMER.ROOT}/search/include-external`\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const config = getAxiosConfig()\n\n try {\n const { data }: AxiosResponse<{ data: UserType[]; total: number }> = await axios.get(url, config)\n return {\n list: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const updateExternalCustomer = createAsyncThunk(\n 'admin/updateExternalCustomer',\n async ({ userId, options }: { userId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.EXTERNAL_USER.ROOT}/${userId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n externalCustomer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const addExternalCustomer = createAsyncThunk('admin/addExternalCustomer', async (options: FormData) => {\n const url = ADMIN_API_URL.EXTERNAL_USER.ROOT\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n externalCustomer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Upload customer's document\n * options: FormDate (\"businessRegistry\", \"passportOrIdCard\", \"drivingLicence\")\n */\nexport const uploadCustomerDocument = createAsyncThunk(\n 'admin/uploadCustomerDocument',\n async ({ userId, options }: { userId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${userId}/documents`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: UserType }> = await axios.patch(url, options, config)\n return {\n customer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Block/Unblock the customer\n */\nexport const toggleBlockingCustomer = createAsyncThunk(\n 'admin/toggleBlockingCustomer',\n async ({ userId, type }: { userId: string; type: 'block' | 'unblock' }) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${userId}/${type}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, null, config)\n return {\n customer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Edit customer data\n * - options: FormDate\n * {\n * firstName (string),\n * lastName (string),\n * country (string),\n * city (string),\n * streetName (string),\n * streetNumber (string),\n * postalCode (string),\n * phone (string),\n * companyName (string),\n * drivingLicenceExpireAt (Date),\n * passportOrIdCardExpireAt (Date),\n * businessRegistryConfirm (true),\n * businessRegistry (File),\n * passportOrIdCard (File),\n * drivingLicence (File)\n * }\n */\nexport const updateCustomer = createAsyncThunk(\n 'admin/updateCustomerData',\n async ({ userId, options }: { userId: string; options: UserTypes }) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${userId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: UserType }> = await axios.patch(url, options, config)\n return {\n customer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Search customers by params\n */\nexport const searchCustomers = createAsyncThunk(\n 'admin/searchCustomers',\n async ({ param, sort = 'CREATED_AT', order = 'DESC', pageIndex, pageSize, type }: CustomersParamsPayloadProps) => {\n let url = `${ADMIN_API_URL.CUSTOMER.ROOT}/search`\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (type) {\n queryParams.push(`type=${encodeURIComponent(type)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n customerList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const searchForwarders = createAsyncThunk(\n 'admin/searchForwarders',\n async ({ pageIndex, pageSize, param }: CustomersParamsPayloadProps) => {\n let url = `${ADMIN_API_URL.CUSTOMER.ROOT}/search`\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&onlyForwarders=true&page=${pageIndex}&limit=${pageSize}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: UserApiType[]; total: number }> = await axios.get(url, config)\n return {\n customerList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Remove customer\n */\nexport const removeCustomer = createAsyncThunk('admin/removeCustomer', async (userId: string) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${userId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, config)\n return {\n customerId: userId,\n deleted: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Get customer's custom files\n */\nexport const getCustomerCustomFiles = createAsyncThunk('admin/getCustomerCustomFiles', async (userId: string) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${userId}/custom-file`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n customerList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Upload customer's custom file\n *\n * options: {\n * userId: string\n * options: {\n * name: string\n * customFile: File\n * }\n * }\n */\nexport const uploadCustomerCustomFile = createAsyncThunk(\n 'admin/uploadCustomerCustomFile',\n async ({ userId, options }: { userId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${userId}/custom-file`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n 'Content-Type': 'multipart/form-data',\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType }> = await axios.post(url, options, config)\n return {\n customFile: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateCustomerPaymentType = createAsyncThunk(\n 'admin/updateCustomerPaymentType',\n async ({ userId, options }: { userId: string; options: { paymentType: PaymentType } }) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${userId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n customer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\ntype PaymentQueryProps = {\n userId: string\n param?: string\n sort?: 'CREATED_AT' | 'PAID'\n order?: 'ASC' | 'DESC'\n minDate?: string\n maxDate?: string\n}\n\n/**\n * Payment history list\n */\nexport const getPaymentHistoryList = createAsyncThunk(\n 'admin/getPaymentHistory',\n async ({ userId, param, sort = 'CREATED_AT', order = 'DESC', minDate, maxDate }: PaymentQueryProps) => {\n let url = ADMIN_API_URL.FACTURE.SEARCH\n const queryParams = []\n\n if (userId) {\n queryParams.push(`userId=${encodeURIComponent(userId)}`)\n }\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (minDate) {\n queryParams.push(`minDate=${encodeURIComponent(maxDate)}`)\n }\n\n if (maxDate) {\n queryParams.push(`maxDate=${encodeURIComponent(maxDate)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n paymentHistory: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateCustomerStatus = createAsyncThunk(\n 'admin/updateCustomerStatus',\n async ({ customerId, status }: { customerId: string; status: 'approve' | 'decline' }) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${customerId}/${status}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: UserTypes }> = await axios.patch(url, null, config)\n return {\n customer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateCustomerType = createAsyncThunk(\n 'admin/updateCustomerType',\n async ({ customerId, type }: { customerId: string; type: 'FORWARDER' | 'LEGAL' | 'PHYSICAL' }) => {\n const url = `${ADMIN_API_URL.CUSTOMER.ROOT}/${customerId}/type`\n\n try {\n const { data }: AxiosResponse<{ data: UserTypes }> = await axios.patch(url, { type }, getAxiosConfig())\n return {\n customer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { AdminPaymentResponseType, AdminPaymentType } from 'Types/admin/admin'\nimport { CancelFacturePayloadProps } from 'Types/global.types.ts'\nimport { FactureType } from 'Definitions/Facture.type.ts'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { getAxiosBlobConfig, getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get invoices by month\n */\nexport const downloadInvoice = createAsyncThunk(\n 'admin/downloadInvoice',\n async ({ month = '', year = '1' }: { month: string; year?: string }) => {\n let url = ADMIN_API_URL.FACTURE.MONTHLY_DOWNLOAD\n const queryParams = []\n\n if (month) {\n queryParams.push(`month=${encodeURIComponent(month)}`)\n }\n\n if (year) {\n queryParams.push(`year=${encodeURIComponent(year)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n try {\n // @ts-ignore\n const data: AxiosResponse = await axios.get(url, getAxiosBlobConfig())\n return data\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\ntype InvoicesRequestProps = {\n userId?: string\n param?: string\n sort?: 'CREATED_AT' | 'PAID'\n order?: 'ASC' | 'DESC'\n minDate?: string\n maxDate?: string\n pageIndex: number\n pageSize: number\n}\n\nexport const getInvoicesByMonth = createAsyncThunk(\n 'admin/getInvoicesByMonth',\n async ({\n userId,\n param,\n sort = 'CREATED_AT',\n order = 'DESC',\n minDate,\n maxDate,\n pageIndex,\n pageSize,\n }: InvoicesRequestProps) => {\n let url = ADMIN_API_URL.FACTURE.SEARCH\n const queryParams = []\n\n if (userId) {\n queryParams.push(`userId=${encodeURIComponent(userId)}`)\n }\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (minDate) {\n queryParams.push(`minDate=${encodeURIComponent(minDate)}`)\n }\n\n if (maxDate) {\n queryParams.push(`maxDate=${encodeURIComponent(maxDate)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, getAxiosConfig())\n return {\n invoices: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateInvoicePaymentStatus = createAsyncThunk('admin/updateInvoicePaymentStatus', async (id: string) => {\n const url = `${ADMIN_API_URL.FACTURE.ROOT}/${id}/paid`\n\n try {\n const { data }: AxiosResponse<{ data: AdminPaymentType }> = await axios.patch(url, null, getAxiosConfig())\n return {\n invoice: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\ntype ProductProps = {\n reference: string\n title: string\n unitPrice: number\n quantity: number\n}\n\ninterface CustomFactureProps {\n customer: {\n userId?: string\n externalUserId?: string\n paymentMethod: string\n shippingCost: number\n delivery: string\n }\n products: ProductProps[]\n}\n\n/**\n * Create a custom facture\n */\nexport const createCustomFacture = createAsyncThunk('admin/addCustomFacture', async (options: CustomFactureProps) => {\n const url = `${ADMIN_API_URL.FACTURE.ROOT}/custom`\n\n try {\n const { data }: AxiosResponse<{ data: AdminPaymentType }> = await axios.post(url, options, getAxiosConfig())\n return {\n invoice: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const toggleFactureText = createAsyncThunk(\n 'admin/toggleFactureText',\n async ({\n factureId,\n checkboxText,\n type,\n }: {\n factureId: string\n checkboxText: string\n type: string // 'ORDER' | 'PURCHASE'\n }) => {\n const url = `${ADMIN_API_URL.FACTURE.ROOT}/${factureId}/checkboxText`\n\n try {\n const { data }: AxiosResponse<{ data: FactureType }> = await axios.patch(url, { checkboxText }, getAxiosConfig())\n return {\n facture: data.data,\n type,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const cancelFacture = createAsyncThunk(\n 'admin/cancelFacture',\n async ({ factureId, entityType }: CancelFacturePayloadProps) => {\n const url = `${ADMIN_API_URL.FACTURE.ROOT}/${factureId}/cancel`\n\n try {\n const { data }: AxiosResponse<{ data: FactureType }> = await axios.patch(url, null, getAxiosConfig())\n return {\n facture: data.data,\n entityType,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getMonthlyFacture = async ({ month, year }: { month: string; year: string }) => {\n const url = `${ADMIN_API_URL.FACTURE.ROOT}/monthly-facture-download?month=${month}&year=${year}`\n\n try {\n // @ts-ignore\n const data: AxiosResponse = await axios.get(url, getAxiosBlobConfig())\n return data\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const regenerateMonthlyFacture = async (id: string) => {\n const url = `${ADMIN_API_URL.FACTURE.ROOT}/${id}/regenerate-monthly`\n\n try {\n const { data }: AxiosResponse<{ data: AdminPaymentType }> = await axios.put(url, null, getAxiosConfig())\n return {\n facture: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { AuctionHouseApiType } from 'Schemas/auctionHouse.types.ts'\nimport { AuctionHouseType } from 'Types/auctionHouse'\n\nimport { ADMIN_API_ROOT } from 'Constants/Global.admin.constants.ts'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\nimport { PurchaseType } from 'Definitions/Purchase.type.ts'\n\nexport const getAdminAuctionHouse = createAsyncThunk(\n 'admin/getAdminAuctionHouse',\n async ({ pageIndex, pageSize }: { pageIndex: number; pageSize: number }) => {\n const url = `${ADMIN_API_ROOT}/auction-house?page=${pageIndex}&limit=${pageSize}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseType[]; total: number }> = await axios.get(url, config)\n return {\n adminAuctionHouseList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const searchAdminAuctionHouse = createAsyncThunk(\n 'admin/searchAdminAuctionHouse',\n async ({ param, pageIndex, pageSize }: { param: string; pageIndex: number; pageSize: number }) => {\n const url = `${ADMIN_API_ROOT}/auction-house/search?param=${param}&page=${pageIndex}&limit=${pageSize}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseType[]; total: number }> = await axios.get(url, config)\n return {\n adminAuctionHouseList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const addAdminAuctionHouse = createAsyncThunk(\n 'admin/addAdminAuctionHouse',\n async (options: AuctionHouseApiType) => {\n const url = `${ADMIN_API_ROOT}/auction-house`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseApiType }> = await axios.post(url, options, config)\n return {\n adminAuctionHouse: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateAdminAuctionHouse = createAsyncThunk(\n 'admin/updateAdminAuctionHouse',\n async ({ auctionHouseId, options }: { auctionHouseId: string; options: AuctionHouseApiType }) => {\n const url = `${ADMIN_API_ROOT}/auction-house/${auctionHouseId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseApiType }> = await axios.patch(url, options, config)\n return {\n adminAuctionHouse: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const setAdminAuctionHouseToPurchase = createAsyncThunk(\n 'admin/setAdminAuctionHouseToPurchase',\n async ({ purchaseId, auctionHouseId }: { purchaseId: string; auctionHouseId: string }) => {\n const url = `${ADMIN_API_ROOT}/purchase/${purchaseId}/auction-house`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.patch(url, { auctionHouseId }, config)\n return {\n purchase: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { CommentType, CustomFileType, DocumentGroup } from 'Types/admin/admin'\nimport { WorkingStatusType } from 'Types/global.types.ts'\nimport { PurchaseType } from 'Definitions/Purchase.type.ts'\n\nimport {\n assignAdminToPurchase,\n assignReviewerToPurchase,\n getAdminPurchaseDetails,\n getAdminPurchases,\n getCustomFiles,\n removeAdminPurchase,\n updatePurchaseDetails,\n updatePurchasePaymentState,\n updatePurchaseState,\n uploadCustomFile,\n uploadPurchaseVehicleLicence,\n uploadPurchaseProform,\n uploadPurchaseSwift,\n updatePurchaseEur1Id,\n updatePurchasePrintDate,\n uploadCarDocument,\n uploadUserDocument,\n uploadPurchaseCarProform,\n getComments,\n postComment,\n updateAuctionHouse,\n updatePurchaseUserInformation,\n generatePurchaseEur1,\n uploadEoEur1Document,\n generateAttestationDate,\n generateCessionDate,\n setUserToPurchase,\n setExportationCountry,\n uploadPurchaseCooDocument,\n getPurchaseListByUser,\n updateCustomFile,\n removePurchaseComment,\n} from 'Api/admin/admin.purchases.service.ts'\nimport { updateCustomer, uploadCustomerDocument } from 'Api/admin/admin.customers.service.ts'\nimport { cancelFacture, toggleFactureText } from 'Api/admin/admin.invoices.service.ts'\nimport { setAdminAuctionHouseToPurchase } from 'Api/admin/admin.auction.service.ts'\n\ninterface InitialStateProps {\n adminPurchasesList: PurchaseType[]\n initialAdminPurchasesList: PurchaseType[]\n purchaseDetails: PurchaseType\n loading: boolean\n total: number\n pageIndex: number\n pageSize: number\n order: 'ASC' | 'DESC' | null\n sort: 'ORDER_NUMBER' | 'CREATED_AT'\n param: string\n maxDate: Date | null\n minDate: Date | null\n customFiles: CustomFileType[]\n carCustomFiles: CustomFileType[]\n userCustomFiles: CustomFileType[]\n swiftCustomFiles: CustomFileType[]\n comments: CommentType[]\n totalComments: number\n pageIndexComments: number\n pageSizeComments: number\n commentPagesNumber: number\n customsStatus: string\n purchaseListByUser: PurchaseType[]\n initialPurchaseListByUser: PurchaseType[]\n workingStatus: WorkingStatusType\n}\n\nconst initialState: InitialStateProps = {\n adminPurchasesList: [],\n initialAdminPurchasesList: [],\n purchaseDetails: null,\n loading: false,\n total: 0,\n pageIndex: 0,\n pageSize: 20,\n order: null,\n sort: 'CREATED_AT',\n param: '',\n maxDate: null,\n minDate: null,\n customsStatus: '',\n customFiles: [],\n carCustomFiles: [],\n userCustomFiles: [],\n swiftCustomFiles: [],\n comments: [],\n totalComments: 0,\n pageIndexComments: 0,\n pageSizeComments: 10,\n commentPagesNumber: 0,\n purchaseListByUser: [],\n initialPurchaseListByUser: [],\n workingStatus: 'ALL',\n}\n\nconst adminPurchasesSlice = createSlice({\n name: 'adminPurchases',\n initialState,\n reducers: {\n setCommentsPageIndex: (state) => {\n const nextPageIndex = state.pageIndexComments + 1\n if (nextPageIndex < state.commentPagesNumber) {\n state.pageIndexComments += 1\n }\n },\n setParam: (state, action: PayloadAction) => {\n state.param = action.payload\n },\n setOrder: (state, action: PayloadAction<'ASC' | 'DESC'>) => {\n if (action.payload) {\n state.order = action.payload\n }\n },\n setSort: (state, action: PayloadAction<'ORDER_NUMBER' | 'CREATED_AT'>) => {\n if (action.payload) {\n state.sort = action.payload\n }\n },\n setMinDate: (state, action: PayloadAction) => {\n if (action.payload) {\n state.minDate = action.payload\n }\n },\n setMaxDate: (state, action: PayloadAction) => {\n if (action.payload) {\n state.maxDate = action.payload\n }\n },\n setCustomsStatus: (state, action) => {\n if (action.payload) {\n state.customsStatus = action.payload\n }\n },\n setWorkingStatus: (state, action) => {\n if (action.payload) {\n state.workingStatus = action.payload\n }\n },\n setPurchaseWorkingState: (state, action) => {\n state.purchaseDetails.state = action.payload\n },\n resetPurchaseDetailsState: (state) => {\n state.purchaseDetails = null\n state.comments = []\n state.totalComments = 0\n state.pageIndexComments = 0\n state.pageSizeComments = 10\n },\n resetPurchaseList: () => {\n return initialState\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getAdminPurchases.fulfilled, (state, action) => {\n state.adminPurchasesList = action.payload.adminPurchaseList\n state.initialAdminPurchasesList = action.payload.adminPurchaseList\n state.total = action.payload.total\n state.loading = false\n })\n .addCase(getAdminPurchases.pending, (state) => {\n state.loading = true\n })\n .addCase(getAdminPurchases.rejected, (state) => {\n state.loading = false\n })\n .addCase(getAdminPurchaseDetails.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchaseDetails\n }\n state.loading = false\n })\n .addCase(getAdminPurchaseDetails.pending, (state) => {\n state.loading = true\n })\n .addCase(getAdminPurchaseDetails.rejected, (state) => {\n state.loading = false\n })\n .addCase(uploadPurchaseCarProform.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.adminPurchase.id) {\n return action.payload.adminPurchase\n }\n return purchase\n })\n state.purchaseDetails = action.payload.adminPurchase\n }\n state.loading = false\n })\n .addCase(uploadPurchaseProform.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.adminPurchase.id) {\n return action.payload.adminPurchase\n }\n return purchase\n })\n state.purchaseDetails = action.payload.adminPurchase\n }\n state.loading = false\n })\n .addCase(uploadPurchaseProform.pending, (state) => {\n state.loading = true\n })\n .addCase(uploadPurchaseProform.rejected, (state) => {\n state.loading = false\n })\n .addCase(uploadPurchaseVehicleLicence.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.adminPurchase.id) {\n return action.payload.adminPurchase\n }\n return purchase\n })\n }\n state.loading = false\n })\n .addCase(uploadPurchaseVehicleLicence.pending, (state) => {\n state.loading = true\n })\n .addCase(uploadPurchaseVehicleLicence.rejected, (state) => {\n state.loading = false\n })\n .addCase(assignAdminToPurchase.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.adminPurchase.id) {\n return action.payload.adminPurchase\n }\n return purchase\n })\n\n if (state.purchaseDetails && state.purchaseDetails?.id === action.payload.adminPurchase.id) {\n state.purchaseDetails = action.payload.adminPurchase\n }\n }\n })\n .addCase(assignReviewerToPurchase.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.adminPurchase.id) {\n return action.payload.adminPurchase\n }\n return purchase\n })\n\n if (state.purchaseDetails && state.purchaseDetails?.id === action.payload.adminPurchase.id) {\n state.purchaseDetails = action.payload.adminPurchase\n }\n }\n })\n .addCase(updatePurchaseState.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.purchaseState.id) {\n return {\n ...purchase,\n state: action.payload.purchaseState.state,\n }\n } else {\n return purchase\n }\n })\n\n if (state.purchaseDetails && state.purchaseDetails?.id === action.payload.purchaseState.id) {\n state.purchaseDetails = {\n ...state.purchaseDetails,\n state: action.payload.purchaseState.state,\n }\n }\n }\n })\n .addCase(updatePurchasePaymentState.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchasePaymentState\n }\n })\n .addCase(getCustomFiles.fulfilled, (state, action) => {\n if (action.payload) {\n const { group } = action.payload\n switch (group as DocumentGroup) {\n case 'PURCHASE_DOCS': {\n state.customFiles = action.payload.customFiles\n break\n }\n case 'USER_DOCS': {\n state.userCustomFiles = action.payload.customFiles\n break\n }\n case 'CAR_DOCS': {\n state.carCustomFiles = action.payload.customFiles\n break\n }\n case 'SWIFT_DOCS': {\n state.swiftCustomFiles = action.payload.customFiles\n break\n }\n }\n }\n })\n .addCase(uploadUserDocument.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchase\n }\n })\n .addCase(uploadEoEur1Document.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchase\n }\n })\n .addCase(uploadPurchaseCooDocument.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchase\n }\n })\n .addCase(uploadCarDocument.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchase\n }\n })\n .addCase(toggleFactureText.fulfilled, (state, action) => {\n if (action.payload && action.payload.type === 'PURCHASE') {\n state.purchaseDetails.facture = action.payload.facture\n }\n })\n .addCase(uploadCustomFile.fulfilled, (state, action) => {\n if (action.payload?.customFile) {\n const group: DocumentGroup = action.payload.customFile.group\n\n switch (group) {\n case 'PURCHASE_DOCS': {\n state.customFiles.unshift(action.payload.customFile)\n break\n }\n case 'CAR_DOCS': {\n state.carCustomFiles.unshift(action.payload.customFile)\n break\n }\n case 'USER_DOCS': {\n state.userCustomFiles.unshift(action.payload.customFile)\n break\n }\n case 'SWIFT_DOCS': {\n state.swiftCustomFiles.unshift(action.payload.customFile)\n }\n }\n }\n })\n .addCase(updateCustomFile.fulfilled, (state, action) => {\n if (action.payload?.customFile) {\n const { customFile } = action.payload\n const updateFiles = (files: CustomFileType[]) =>\n files.map((file) => (file.id === customFile.id ? customFile : file))\n\n const group: DocumentGroup = action.payload.customFile.group\n switch (group) {\n case 'SWIFT_DOCS': {\n state.swiftCustomFiles = updateFiles(state.swiftCustomFiles)\n break\n }\n case 'PURCHASE_DOCS': {\n state.customFiles = updateFiles(state.customFiles)\n break\n }\n case 'CAR_DOCS': {\n state.carCustomFiles = updateFiles(state.carCustomFiles)\n break\n }\n case 'USER_DOCS': {\n state.userCustomFiles = updateFiles(state.userCustomFiles)\n break\n }\n }\n }\n })\n .addCase(updatePurchaseDetails.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchaseDetails\n\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.purchaseDetails.id) {\n return action.payload.purchaseDetails\n } else {\n return purchase\n }\n })\n }\n })\n .addCase(uploadPurchaseSwift.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchaseDetails\n }\n })\n .addCase(removeAdminPurchase.fulfilled, (state, action) => {\n if (action.payload.deleted) {\n state.adminPurchasesList = state.adminPurchasesList.filter(\n (purchase) => purchase.id !== action.payload.purchaseId\n )\n }\n })\n .addCase(updatePurchaseEur1Id.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.purchase.id) {\n return action.payload.purchase\n } else {\n return purchase\n }\n })\n\n if (state.purchaseDetails && state.purchaseDetails?.id === action.payload.purchase.id) {\n state.purchaseDetails = action.payload.purchase\n }\n }\n })\n .addCase(updatePurchasePrintDate.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminPurchasesList = state.adminPurchasesList.map((purchase) => {\n if (purchase.id === action.payload.purchase.id) {\n return action.payload.purchase\n } else {\n return purchase\n }\n })\n\n if (state.purchaseDetails && state.purchaseDetails?.id === action.payload.purchase.id) {\n state.purchaseDetails = action.payload.purchase\n }\n }\n })\n .addCase(getComments.fulfilled, (state, action) => {\n if (action.payload) {\n state.commentPagesNumber = action.payload.total / state.pageSizeComments\n state.comments.unshift(...action.payload.comments)\n state.totalComments += action.payload.total\n }\n })\n .addCase(postComment.fulfilled, (state, action) => {\n if (action.payload) {\n state.comments.push(action.payload.comment)\n }\n })\n .addCase(removePurchaseComment.fulfilled, (state, action) => {\n if (action.payload) {\n state.comments = state.comments.filter((comment) => comment.id !== action.payload.comment.id)\n state.totalComments -= 1\n }\n })\n .addCase(updateAuctionHouse.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchaseDetails\n }\n })\n .addCase(updatePurchaseUserInformation.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchaseDetails\n }\n })\n .addCase(updateCustomer.fulfilled, (state, action) => {\n if (action.payload && state.purchaseDetails?.user?.id === action.payload.customer?.id) {\n state.purchaseDetails.user = action.payload.customer\n }\n })\n //@NOTE this should be remove. Check it it's used\n .addCase(uploadCustomerDocument.fulfilled, (state, action) => {\n if (action.payload && state.purchaseDetails?.user?.id === action.payload.customer.id) {\n state.purchaseDetails.user = action.payload.customer\n }\n })\n .addCase(generatePurchaseEur1.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchaseDetails\n }\n })\n .addCase(generateAttestationDate.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchaseDetails\n }\n })\n .addCase(generateCessionDate.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchaseDetails\n }\n })\n .addCase(cancelFacture.fulfilled, (state, action) => {\n if (action.payload && action.payload.entityType === 'PURCHASE') {\n state.purchaseDetails.facture = action.payload.facture\n state.purchaseDetails.paymentState = 'CANCELED'\n }\n })\n .addCase(setAdminAuctionHouseToPurchase.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchase\n }\n })\n .addCase(setUserToPurchase.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchase\n }\n })\n .addCase(setExportationCountry.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseDetails = action.payload.purchase\n }\n })\n .addCase(getPurchaseListByUser.fulfilled, (state, action) => {\n if (action.payload) {\n state.purchaseListByUser = action.payload.purchaseList\n state.initialPurchaseListByUser = action.payload.purchaseList\n state.total = action.payload.total\n state.loading = false\n }\n })\n .addCase(getPurchaseListByUser.rejected, (state) => {\n state.loading = false\n })\n .addCase(getPurchaseListByUser.pending, (state) => {\n state.loading = false\n })\n },\n})\n\nconst { actions } = adminPurchasesSlice\n\nexport const {\n setParam,\n setSort,\n setOrder,\n setMinDate,\n setMaxDate,\n resetPurchaseDetailsState,\n setCommentsPageIndex,\n setCustomsStatus,\n resetPurchaseList,\n setWorkingStatus,\n setPurchaseWorkingState,\n} = actions\n\nexport default adminPurchasesSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { Order } from 'Types/global.types.ts'\nimport { UserTypes } from 'Types/user.types.ts'\nimport { AdminPaymentType, CustomersSortType, CustomFileType } from 'Types/admin/admin'\n\nimport {\n addExternalCustomer,\n getCustomerCustomFiles,\n getCustomerList,\n getCustomerListIncludingExternal,\n getExternalCustomerList,\n getPaymentHistoryList,\n removeCustomer,\n searchCustomers,\n toggleBlockingCustomer,\n updateCustomer,\n updateCustomerPaymentType,\n updateCustomerStatus,\n updateCustomerType,\n updateExternalCustomer,\n uploadCustomerCustomFile,\n uploadCustomerDocument,\n} from 'Api/admin/admin.customers.service.ts'\n\ninterface InitialStateProps {\n customerList: UserTypes[]\n initialCustomerList: UserTypes[]\n loading: boolean\n total: number\n pageSize: number\n customerCustomFiles: CustomFileType[]\n customFilesTotal: number\n sort: CustomersSortType\n onboardingStatus: 'ALL' | 'FINISHED' | 'UNFINISHED'\n order: 'ASC' | 'DESC'\n param: string\n paymentHistory: AdminPaymentType[]\n paymentHistoryTotal: number\n customerListIncludingExternal: UserTypes[]\n customerListIncludingExternalTotal: number\n customerListIncludingExternalPageSize: number\n customerListIncludingExternalPageIndex: number\n customerListIncludingExternalPageLoading: boolean\n customerListIncludingExternalPageParam: string\n externalCustomerList: UserTypes[]\n externalCustomerListTotal: number\n externalCustomerListPageSize: number\n externalCustomerListPageIndex: number\n externalCustomerListLoading: boolean\n externalCustomerListParam: string\n externalCustomerListSort: CustomersSortType\n externalCustomerListOrder: 'ASC' | 'DESC'\n}\n\nconst initialState: InitialStateProps = {\n customerList: [],\n initialCustomerList: [],\n loading: false,\n total: 0,\n pageSize: 20,\n customerCustomFiles: [],\n customFilesTotal: 0,\n sort: 'CREATED_AT',\n onboardingStatus: 'ALL',\n order: 'DESC',\n param: '',\n paymentHistory: [],\n paymentHistoryTotal: 0,\n customerListIncludingExternal: [],\n customerListIncludingExternalTotal: 0,\n customerListIncludingExternalPageSize: 20,\n customerListIncludingExternalPageIndex: 0,\n customerListIncludingExternalPageLoading: false,\n customerListIncludingExternalPageParam: '',\n externalCustomerList: [],\n externalCustomerListTotal: 0,\n externalCustomerListPageSize: 20,\n externalCustomerListPageIndex: 0,\n externalCustomerListLoading: false,\n externalCustomerListParam: '',\n externalCustomerListSort: 'CREATED_AT',\n externalCustomerListOrder: 'DESC',\n}\n\nconst customerListSlice = createSlice({\n name: 'customerList',\n initialState,\n reducers: {\n setParam: (state, action: PayloadAction) => {\n state.param = action.payload\n },\n setParamExternalCustomerList: (state, action: PayloadAction) => {\n state.externalCustomerListParam = action.payload\n },\n setOrder: (state, action: PayloadAction) => {\n if (action.payload) {\n state.order = action.payload\n }\n },\n setSort: (state, action: PayloadAction) => {\n if (action.payload) {\n state.sort = action.payload\n }\n },\n setExternalCustomerListSort: (state, action: PayloadAction) => {\n if (action.payload) {\n state.externalCustomerListSort = action.payload\n }\n },\n setExternalCustomerListOrder: (state, action: PayloadAction) => {\n if (action.payload) {\n state.externalCustomerListOrder = action.payload\n }\n },\n setOnboardingStatus: (state, action) => {\n if (action.payload) {\n state.onboardingStatus = action.payload\n }\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCustomerList.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerList = action.payload.customerList\n state.initialCustomerList = action.payload.customerList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getCustomerList.pending, (state) => {\n state.loading = true\n })\n .addCase(getCustomerList.rejected, (state) => {\n state.loading = false\n })\n .addCase(uploadCustomerDocument.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerList = state.customerList.map((customer) => {\n if (customer.id === action.payload.customer.id) {\n return action.payload.customer\n } else {\n return customer\n }\n })\n }\n })\n .addCase(toggleBlockingCustomer.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerList = state.customerList.map((customer) => {\n if (customer.id === action.payload.customer.id) {\n return action.payload.customer\n }\n return customer\n })\n }\n })\n .addCase(searchCustomers.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerList = action.payload.customerList\n state.initialCustomerList = action.payload.customerList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(searchCustomers.pending, (state) => {\n state.loading = true\n })\n .addCase(searchCustomers.rejected, (state) => {\n state.loading = false\n })\n .addCase(removeCustomer.fulfilled, (state, action) => {\n if (action.payload.deleted) {\n state.customerList = state.customerList.filter((customer) => customer.id !== action.payload.customerId)\n }\n })\n .addCase(getCustomerCustomFiles.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerCustomFiles = action.payload.customerList\n state.customFilesTotal = action.payload.total\n }\n })\n .addCase(uploadCustomerCustomFile.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerCustomFiles.unshift(action.payload.customFile)\n state.customFilesTotal += 1\n }\n })\n .addCase(updateCustomerPaymentType.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerList = state.customerList.map((customer) => {\n if (customer.id === action.payload.customer.id) {\n return action.payload.customer\n }\n return customer\n })\n }\n })\n .addCase(updateCustomer.fulfilled, (state, action) => {\n state.customerList = state.customerList.map((customer) => {\n if (customer.id === action.payload.customer.id) {\n return action.payload.customer\n }\n return customer\n })\n })\n .addCase(getPaymentHistoryList.fulfilled, (state, action) => {\n if (action.payload) {\n state.paymentHistory = action.payload.paymentHistory\n state.paymentHistoryTotal = action.payload.total\n }\n })\n .addCase(updateCustomerStatus.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerList = state.customerList.map((customer) => {\n if (customer.id === action.payload.customer.id) {\n return action.payload.customer\n }\n return customer\n })\n }\n })\n .addCase(getCustomerListIncludingExternal.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerListIncludingExternal = action.payload.customerListIncludingExternal\n state.customerListIncludingExternalTotal = action.payload.total\n }\n state.customerListIncludingExternalPageLoading = false\n })\n .addCase(getCustomerListIncludingExternal.pending, (state) => {\n state.customerListIncludingExternalPageLoading = true\n })\n .addCase(getCustomerListIncludingExternal.rejected, (state) => {\n state.customerListIncludingExternalPageLoading = false\n })\n .addCase(getExternalCustomerList.fulfilled, (state, action) => {\n if (action.payload) {\n state.externalCustomerList = action.payload.externalCustomerList\n state.externalCustomerListTotal = action.payload.total\n }\n state.externalCustomerListLoading = false\n })\n .addCase(getExternalCustomerList.pending, (state) => {\n state.externalCustomerListLoading = true\n })\n .addCase(getExternalCustomerList.rejected, (state) => {\n state.externalCustomerListLoading = false\n })\n .addCase(addExternalCustomer.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerListIncludingExternal.unshift(action.payload.externalCustomer)\n state.customerListIncludingExternalTotal += 1\n state.externalCustomerList.unshift(action.payload.externalCustomer)\n state.externalCustomerListTotal += 1\n }\n })\n .addCase(updateCustomerType.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerList = state.customerList.map((customer) => {\n if (customer.id === action.payload.customer.id) {\n return action.payload.customer\n }\n return customer\n })\n state.externalCustomerList = state.externalCustomerList.map((customer) => {\n if (customer.id === action.payload.customer.id) {\n return action.payload.customer\n }\n return customer\n })\n state.customerListIncludingExternal = state.customerListIncludingExternal.map((customer) => {\n if (customer.id === action.payload.customer.id) {\n return action.payload.customer\n }\n return customer\n })\n }\n })\n .addCase(updateExternalCustomer.fulfilled, (state, action) => {\n if (action.payload) {\n state.customerListIncludingExternal = state.customerListIncludingExternal.map((customer) => {\n if (customer.id === action.payload.externalCustomer.id) {\n return action.payload.externalCustomer\n }\n return customer\n })\n state.externalCustomerList = state.externalCustomerList.map((customer) => {\n if (customer.id === action.payload.externalCustomer.id) {\n return action.payload.externalCustomer\n }\n return customer\n })\n }\n })\n },\n})\n\nconst { actions } = customerListSlice\nexport const {\n setSort,\n setOrder,\n setParam,\n setOnboardingStatus,\n setParamExternalCustomerList,\n setExternalCustomerListOrder,\n setExternalCustomerListSort,\n} = actions\nexport default customerListSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\nimport { reverse as _reverse } from 'lodash'\n\nimport { OrderType } from 'Definitions/Order.type.ts'\nimport { WorkStatusType } from 'Types/global.types.ts'\nimport {\n AdminEur1IdPayloadProps,\n AdminPrintDatePayloadProps,\n AdminVehicleType,\n CommentListResponse,\n CommentResponse,\n CustomFilesResponse,\n CustomFileType,\n InvoiceResponseType,\n OrderGeneralStatisticsResponse,\n OrderMonthlyStatisticsResponse,\n OrderParamsPayloadProps,\n} from 'Types/admin/admin'\n\nimport { ADMIN_API_ROOT, ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { getAxiosBlobConfig, getAxiosConfig, getAxiosMultipartFormConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\ninterface OrderAssignAdminProps {\n orderId: string\n adminId: string\n}\n\n/**\n * Assign admin user to order\n */\nexport const assignAdminToOrder = createAsyncThunk(\n 'admin/assignAdminOrder',\n async ({ adminId, orderId }: OrderAssignAdminProps) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${orderId}/assignee`\n\n const body = {\n adminId,\n }\n\n try {\n const { data }: AxiosResponse<{ data: OrderType; total: number }> = await axios.patch(url, body, getAxiosConfig())\n return {\n adminOrder: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Assign reviewer to order\n */\nexport const assignReviewerToOrder = createAsyncThunk(\n 'admin/assignOrderReviewer',\n async ({ adminId, orderId }: OrderAssignAdminProps) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${orderId}/reviewer`\n\n const body = {\n adminId,\n }\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, body, getAxiosConfig())\n return {\n adminOrder: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Remove order\n */\nexport const removeAdminOrder = createAsyncThunk('admin/removeOrder', async (orderId: string) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${orderId}`\n\n try {\n const { data }: AxiosResponse<{ data: { deleted: boolean } }> = await axios.delete(url, getAxiosConfig())\n return {\n orderId: orderId,\n deleted: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Get list of users orders\n */\nexport const getOrderListByUser = createAsyncThunk(\n 'admin/getOrderListByUser',\n async ({ param, userId }: { param: string; userId: string }) => {\n let url = `${ADMIN_API_URL.ORDER.ROOT}/search`\n const queryParams = []\n\n if (userId) {\n queryParams.push(`userId=${encodeURIComponent(userId)}`)\n }\n\n if (param) {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n try {\n const { data }: AxiosResponse<{ data: OrderType[]; total: number }> = await axios.get(url, getAxiosConfig())\n return {\n orderList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Get list of all orders\n */\nexport const getOrderList = createAsyncThunk(\n 'admin/getOrderList',\n async ({ param, sort, order, pageIndex, pageSize, customsStatus }: OrderParamsPayloadProps) => {\n let url = ADMIN_API_URL.ORDER.ROOT\n const queryParams = []\n\n if (param) {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (customsStatus) {\n queryParams.push(`status=${encodeURIComponent(customsStatus)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n try {\n const { data }: AxiosResponse<{ data: OrderType[]; total: number }> = await axios.get(url, getAxiosConfig())\n return {\n orderList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Get order monthly statistics\n */\nexport const getOrderMonthlyStatistics = createAsyncThunk('admin/getOrderMonthlyStatistics', async () => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/monthly-statistics`\n\n try {\n const { data }: AxiosResponse = await axios.get(url, getAxiosConfig())\n return {\n monthlyStatistics: data.data.monthly,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Get order general statistics\n */\nexport const getOrderGeneralStatistics = createAsyncThunk('admin/getOrderGeneralStatistics', async () => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/general-statistics`\n\n try {\n const { data }: AxiosResponse = await axios.get(url, getAxiosConfig())\n return {\n generalStatistics: data.data.number,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Get admin order details\n */\nexport const getAdminOrderDetails = createAsyncThunk('admin/getOrderDetails', async (orderId: string) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${orderId}`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.get(url, getAxiosConfig())\n return {\n orderDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Update Order's vehicle data\n */\nexport const updateOrderDetails = createAsyncThunk(\n 'admin/updateOrderDetails',\n async ({ certificateId, options }: { certificateId: string; options: AdminVehicleType }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, options, getAxiosConfig())\n return {\n certificate: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Send Order email\n * @param certificateId\n * @param options\n */\nexport const sendOrderEmail = async ({\n certificateId,\n options,\n}: {\n certificateId: string\n options: { email: string }\n}) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/send-email`\n\n try {\n const { data }: AxiosResponse<{ data: boolean }> = await axios.post(url, options, getAxiosConfig())\n return {\n sent: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Get list of Order's comments\n */\nexport const getOrderComments = createAsyncThunk(\n 'admin/getOrderComments',\n async ({ certificateId, pageIndex, pageSize }: { certificateId: string; pageIndex: number; pageSize: number }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/comment?page=${pageIndex}&limit=${pageSize}&order=DESC`\n\n try {\n const { data }: AxiosResponse = await axios.get(url, getAxiosConfig())\n const reverseData = _reverse(data.data)\n return {\n comments: reverseData,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Post Order comment\n */\nexport const postOrderComment = createAsyncThunk(\n 'admin/postOrderComment',\n async ({ certificateId, options }: { certificateId: string; options: { content: string } }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/comment`\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, getAxiosConfig())\n return {\n comment: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const removeOrderComment = createAsyncThunk('admin/removeOrderComment', async (commentId: string) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/comment/${commentId}`\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, getAxiosConfig())\n return {\n comment: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Upload EO EUR-1 document\n */\nexport const uploadEoEur1Document = createAsyncThunk(\n 'admin/uploadEoEur1',\n async ({ certificateId, options }: { certificateId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/eo-eur1`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(\n url,\n options,\n getAxiosMultipartFormConfig()\n )\n return {\n certificate: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload COO document\n * @path param: certificateId: string\n * @body param: coo: file\n */\nexport const uploadOrderCooDocument = createAsyncThunk(\n 'admin/uploadOrderCooDocument',\n async ({ certificateId, options }: { certificateId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/coo`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(\n url,\n options,\n getAxiosMultipartFormConfig()\n )\n return {\n certificate: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload Order's car document\n */\nexport const uploadOrderCarDocument = createAsyncThunk(\n 'admin/uploadOrderCarDocument',\n async ({ certificateId, options }: { certificateId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/car-documents`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(\n url,\n options,\n getAxiosMultipartFormConfig()\n )\n return {\n certificate: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Get list of Order's custom files\n */\nexport const getOrderCustomFiles = createAsyncThunk(\n 'admin/getOrderCustomFiles',\n async ({ certificateId, group }: { certificateId: string; group: string }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/custom-file?group=${group}`\n\n try {\n const { data }: AxiosResponse = await axios.get(url, getAxiosConfig())\n return {\n customFiles: data.data,\n group,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Upload Order's custom file\n */\nexport const uploadOrderCustomFile = createAsyncThunk(\n 'admin/uploadCustomFile',\n async ({ certificateId, options }: { certificateId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/custom-file`\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType }> = await axios.post(\n url,\n options,\n getAxiosMultipartFormConfig()\n )\n return {\n customFile: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update Order's payment state\n */\nexport const updateOrderPaymentState = createAsyncThunk(\n 'admin/updateOrderPaymentState',\n async ({\n options,\n certificateId,\n }: {\n options: { paymentState: 'PAID' | 'NOT_PAID' | 'FAILED' | 'CANCELED' }\n certificateId: string\n }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/payment-state`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, options, getAxiosConfig())\n return {\n order: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update Order's working state\n */\nexport const updateOrderState = createAsyncThunk(\n 'admin/updateOrderState',\n async ({ certificateId, options }: { options: { state: WorkStatusType }; certificateId: string }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/state`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, options, getAxiosConfig())\n return {\n certificate: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update Order EUR-1 id\n */\nexport const updateOrderEur1Id = createAsyncThunk(\n 'admin/updateOrderEur1Id',\n async ({ options, certificateId }: { certificateId: string; options: AdminEur1IdPayloadProps }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/eur1`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, options, getAxiosConfig())\n return {\n order: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update Order print date\n */\nexport const updateOrderPrintDate = createAsyncThunk(\n 'admin/updateOrderPrintDate',\n async ({ options, certificateId }: { certificateId: string; options: AdminPrintDatePayloadProps }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/print-date`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, options, getAxiosConfig())\n return {\n order: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getOrderInvoice = async (certificateId: string) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/invoice`\n\n try {\n const { data }: AxiosResponse = await axios.get(url, getAxiosConfig())\n return {\n certificateInvoice: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\ninterface IOrderPaymentInformation {\n userId: string\n minDate: string\n maxDate: string\n}\n\nexport const exportOrderPaymentInformation = async ({ userId, minDate, maxDate }: IOrderPaymentInformation) => {\n const url = `${ADMIN_API_ROOT}/export/certificate/${userId}?minDate=${minDate}&maxDate=${maxDate}`\n\n try {\n // @ts-ignore\n const data: AxiosResponse = await axios.get(url, getAxiosBlobConfig())\n return data\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const exportOrderMonthly = async ({ month, year }: { month: string; year: string }) => {\n const url = `${ADMIN_API_ROOT}/export/monthly?month=${month}&year=${year}`\n\n try {\n // @ts-ignore\n const data: AxiosResponse = await axios.get(url, getAxiosBlobConfig())\n return data\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const exportOrdersByDateRange = async ({ minDate, maxDate }: { minDate: string; maxDate: string }) => {\n const url = `${ADMIN_API_ROOT}/export/range?minDate=${minDate}&maxDate=${maxDate}`\n\n try {\n // @ts-ignore\n const data: AxiosResponse = await axios.get(url, getAxiosBlobConfig())\n return data\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Generate certificate EUR1\n * @param certificateId\n */\nexport const generateOrderEur1 = createAsyncThunk('admin/generateOrderEur1', async (certificateId: string) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${certificateId}/generate-eur1`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, null, getAxiosConfig())\n return {\n order: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const updateBuyerByOrderId = createAsyncThunk(\n 'admin/updateBuyerByOrderId',\n async ({ orderId, options }: { orderId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${orderId}/buyer`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, options, getAxiosConfig())\n return {\n order: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const setBuyer = createAsyncThunk(\n 'admin/setBuyer',\n async ({ orderId, buyerId }: { orderId: string; buyerId: string }) => {\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${orderId}/buyer`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.put(url, { buyerId }, getAxiosConfig())\n return {\n order: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\n\nimport { SellerEoriResponse } from 'Types/global.types.ts'\nimport { SellerType } from 'Definitions/Seller.type.ts'\nimport { OrderType } from 'Definitions/Order.type.ts'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get all admin sellers\n */\nexport const getAdminSellers = createAsyncThunk(\n 'admin/getAdminSellers',\n async ({ pageIndex, pageSize, param }: { pageIndex: number; pageSize: number; param: string }) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.SELLER.ROOT}?page=${pageIndex}&limit=${pageSize}¶m=${param}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: SellerType[]; total: number }> = await axios.get(url, config)\n return {\n adminSellers: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const searchAdminSellers = createAsyncThunk('admin/searchAdminSellers', async (keyword: string) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.SELLER.SEARCH}?param=${keyword}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: SellerType[]; total: number }> = await axios.get(url, config)\n return {\n adminSellers: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const setSellerToOrder = createAsyncThunk(\n 'admin/setSellerToOrder',\n async ({ sellerId, orderId }: { sellerId: string; orderId: string }) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.ORDER.ROOT}/${orderId}/seller`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n const requestPayload = {\n sellerId,\n }\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.patch(url, requestPayload, config)\n return {\n order: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update admin seller\n */\nexport const updateAdminSeller = createAsyncThunk(\n 'admin/updateAdminSeller',\n async (payload: { id: string; options: FormData }) => {\n const { id, options } = payload\n const token = getAccessToken()\n\n const url = `${ADMIN_API_URL.SELLER.ROOT}/${id}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: SellerType }> = await axios.patch(url, options, config)\n return {\n id,\n seller: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const addAdminSeller = createAsyncThunk('admin/addAdminSeller', async (options: FormData) => {\n const url = ADMIN_API_URL.SELLER.ROOT\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: SellerType }> = await axios.post(url, options, config)\n return {\n seller: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Update status of admin seller\n */\nexport const updateAdminSellerStatus = createAsyncThunk(\n 'admin/updateAdminSellerStatus',\n async ({ sellerId, status }: { sellerId: string; status: 'approve' | 'decline' }) => {\n const url = `${ADMIN_API_URL.SELLER.ROOT}/${sellerId}/${status}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: SellerType }> = await axios.patch(url, null, config)\n return {\n seller: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getAdminEori = async (eoriNumber: string) => {\n const url = `${ADMIN_API_URL.SELLER.EORI}?eoriNumber=${eoriNumber}`\n const token = getAccessToken()\n\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n const { data }: AxiosResponse = await axios.get(url, config)\n return data.data\n}\n\nexport const changeSellerStatus = createAsyncThunk(\n 'admin/changeSellerStatus',\n async ({ sellerId, status }: { sellerId: string; status: 'enable' | 'disable' }) => {\n const url = `${ADMIN_API_URL.SELLER.ROOT}/${sellerId}/${status}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: SellerType }> = await axios.patch(url, null, config)\n return {\n seller: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\n\nimport { BuyerApiType } from 'Schemas/buyer.types.ts'\nimport { CustomFileType } from 'Types/admin/admin'\nimport { BuyerType } from 'Definitions/Buyer.type.ts'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { getAccessToken, getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Update Admin buyer\n */\nexport const updateAdminBuyer = createAsyncThunk(\n 'admin/updateAdminBuyer',\n async (payload: { id: string; options: FormData }) => {\n const { id, options } = payload\n const token = getAccessToken()\n\n const url = `${ADMIN_API_URL.BUYER.ROOT}/${id}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: BuyerType }> = await axios.patch(url, options, config)\n return {\n id,\n buyer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateAdminBuyerByUserId = createAsyncThunk(\n 'admin/updateAdminBuyerByUserId',\n async (payload: { id: string; options: FormData }) => {\n const { id, options } = payload\n const token = getAccessToken()\n\n const url = `${ADMIN_API_URL.BUYER.ROOT}/${id}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: BuyerApiType }> = await axios.patch(url, options, config)\n return {\n id,\n buyer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const searchAdminBuyers = createAsyncThunk(\n 'admin/searchAdminBuyers',\n async ({\n pageIndex,\n pageSize,\n userId,\n param = '',\n }: {\n pageIndex: number\n pageSize: number\n userId: string\n param: string\n }) => {\n const url = `${ADMIN_API_URL.BUYER.ROOT}?userId=${userId}&page=${pageIndex}&limit=${pageSize}¶m=${param}`\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: BuyerApiType[]; total: number }> = await axios.get(url, config)\n\n return {\n adminBuyerList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateAdminBuyerStatus = createAsyncThunk(\n 'admin/updateAdminBuyerStatus',\n async ({ buyerId, status }: { buyerId: string; status: 'approve' | 'decline' }) => {\n const url = `${ADMIN_API_URL.BUYER.ROOT}/${buyerId}/${status}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: BuyerApiType }> = await axios.patch(url, null, config)\n return {\n buyer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateAdminBuyerType = createAsyncThunk(\n 'admin/updateAdminBuyerType',\n async ({ buyerId, type }: { buyerId: string; type: 'LEGAL' | 'PHYSICAL' }) => {\n const url = `${ADMIN_API_URL.BUYER.ROOT}/${buyerId}/type?type=${type}`\n\n try {\n const { data }: AxiosResponse<{ data: BuyerApiType }> = await axios.patch(url, null, getAxiosConfig())\n return {\n buyer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getAdminBuyerCustomFiles = createAsyncThunk('admin/getBuyerCustomFiles', async (buyerId: string) => {\n const url = `${ADMIN_API_URL.BUYER.ROOT}/${buyerId}/custom-file`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType[] }> = await axios.get(url, config)\n return {\n customFiles: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const uploadAdminBuyersCustomFile = createAsyncThunk(\n 'admin/uploadAdminBuyersCustomFile',\n async ({ buyerId, options }: { buyerId: string; options: FormData }) => {\n const url = `${ADMIN_API_URL.BUYER.ROOT}/${buyerId}/custom-file`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType }> = await axios.post(url, options, config)\n return {\n customFile: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { CommentType, CustomFileType, DocumentGroup } from 'Types/admin/admin'\nimport { OrderType } from 'Definitions/Order.type.ts'\n\nimport {\n getOrderListByUser,\n getOrderMonthlyStatistics,\n getOrderGeneralStatistics,\n assignAdminToOrder,\n assignReviewerToOrder,\n getOrderList,\n getAdminOrderDetails,\n getOrderCustomFiles,\n uploadOrderCarDocument,\n uploadOrderCustomFile,\n getOrderComments,\n postOrderComment,\n updateOrderState,\n updateOrderPrintDate,\n updateOrderEur1Id,\n updateOrderPaymentState,\n updateOrderDetails,\n generateOrderEur1,\n uploadEoEur1Document,\n uploadOrderCooDocument,\n removeOrderComment,\n updateBuyerByOrderId,\n setBuyer,\n} from 'Api/admin/admin.orders.service.ts'\nimport { uploadCustomerDocument } from 'Api/admin/admin.customers.service.ts'\nimport { setSellerToOrder, updateAdminSeller } from 'Api/admin/admin.seller.service.ts'\nimport { cancelFacture, toggleFactureText } from 'Api/admin/admin.invoices.service.ts'\nimport { updateAdminBuyer } from 'Api/admin/admin.buyer.service.ts'\n\ninterface InitialStateProps {\n orderList: OrderType[]\n initialOrderList: OrderType[]\n orderListTotal: number\n orderListLoading: boolean\n customFiles: CustomFileType[]\n carCustomFiles: CustomFileType[]\n userCustomFiles: CustomFileType[]\n comments: CommentType[]\n totalComments: number\n pageIndexComments: number\n pageSizeComments: number\n commentPagesNumber: number\n orderListByUser: OrderType[]\n initialOrderListByUser: OrderType[]\n statistics: {\n monthly: number\n general: number\n }\n loading: boolean\n total: number\n pageSize: number\n sort: 'COMMAND' | 'CREATED_AT'\n order: 'ASC' | 'DESC'\n param: string\n orderDetails: OrderType\n customsStatus: string\n}\n\nconst initialState: InitialStateProps = {\n orderList: [],\n initialOrderList: [],\n orderListTotal: 0,\n orderListLoading: false,\n customFiles: [],\n carCustomFiles: [],\n userCustomFiles: [],\n comments: [],\n totalComments: 0,\n pageIndexComments: 0,\n pageSizeComments: 10,\n commentPagesNumber: 0,\n orderListByUser: [],\n initialOrderListByUser: [],\n statistics: {\n monthly: 0,\n general: 0,\n },\n loading: false,\n total: 0,\n pageSize: 20,\n sort: 'CREATED_AT',\n order: 'DESC',\n param: '',\n orderDetails: null,\n customsStatus: '',\n}\n\nconst orderListSlice = createSlice({\n name: 'ordersSlice',\n initialState,\n reducers: {\n setCommentsPageIndex: (state) => {\n const nextPageIndex = state.pageIndexComments + 1\n if (nextPageIndex < state.commentPagesNumber) {\n state.pageIndexComments += 1\n }\n },\n setParam: (state, action: PayloadAction) => {\n state.param = action.payload\n },\n setOrder: (state, action: PayloadAction<'ASC' | 'DESC'>) => {\n if (action.payload) {\n state.order = action.payload\n }\n },\n setSort: (state, action: PayloadAction<'COMMAND' | 'CREATED_AT'>) => {\n if (action.payload) {\n state.sort = action.payload\n }\n },\n setOrderWorkingState: (state, action) => {\n state.orderDetails.state = action.payload\n },\n resetOrderDetailsState: (state) => {\n state.orderDetails = null\n state.comments = []\n state.totalComments = 0\n state.pageIndexComments = 0\n state.pageSizeComments = 0\n },\n resetOrderList: () => {\n return initialState\n },\n setCustomsStatus: (state, action) => {\n if (action.payload) {\n state.customsStatus = action.payload\n }\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getOrderListByUser.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderListByUser = action.payload.orderList\n state.initialOrderListByUser = action.payload.orderList\n state.total = action.payload.total\n state.loading = false\n }\n })\n .addCase(getOrderListByUser.pending, (state) => {\n state.loading = true\n })\n .addCase(getOrderListByUser.rejected, (state) => {\n state.loading = false\n })\n .addCase(getOrderList.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderList = action.payload.orderList\n state.orderListTotal = action.payload.total\n }\n state.orderListLoading = false\n })\n .addCase(getOrderList.pending, (state) => {\n state.orderListLoading = true\n })\n .addCase(getOrderList.rejected, (state) => {\n state.orderListLoading = false\n })\n .addCase(getOrderMonthlyStatistics.fulfilled, (state, action) => {\n state.statistics.monthly = action.payload.monthlyStatistics\n state.loading = false\n })\n .addCase(getOrderMonthlyStatistics.pending, (state) => {\n state.loading = true\n })\n .addCase(getOrderMonthlyStatistics.rejected, (state) => {\n state.loading = false\n })\n .addCase(getOrderGeneralStatistics.fulfilled, (state, action) => {\n if (action.payload) {\n state.statistics.general = action.payload.generalStatistics\n state.loading = false\n }\n })\n .addCase(getOrderGeneralStatistics.pending, (state) => {\n state.loading = true\n })\n .addCase(toggleFactureText.fulfilled, (state, action) => {\n if (action.payload && action.payload.type === 'ORDER') {\n state.orderDetails.facture = action.payload.facture\n }\n })\n .addCase(getOrderGeneralStatistics.rejected, (state) => {\n state.loading = false\n })\n .addCase(assignAdminToOrder.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderList = state.orderList.map((order) => {\n if (order.id === action.payload.adminOrder.id) {\n return action.payload.adminOrder\n } else {\n return order\n }\n })\n\n if (state.orderDetails && state.orderDetails?.id === action.payload.adminOrder.id) {\n state.orderDetails = action.payload.adminOrder\n }\n }\n })\n .addCase(assignReviewerToOrder.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderList = state.orderList.map((order) => {\n if (order.id === action.payload.adminOrder.id) {\n return action.payload.adminOrder\n } else {\n return order\n }\n })\n\n if (state.orderDetails && state.orderDetails?.id === action.payload.adminOrder.id) {\n state.orderDetails = action.payload.adminOrder\n }\n }\n })\n .addCase(getAdminOrderDetails.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.orderDetails\n }\n })\n .addCase(getOrderCustomFiles.fulfilled, (state, action) => {\n if (action.payload) {\n const { group } = action.payload\n switch (group as DocumentGroup) {\n case 'CERTIFICATE_DOCS': {\n state.customFiles = action.payload.customFiles\n break\n }\n case 'USER_DOCS': {\n state.userCustomFiles = action.payload.customFiles\n break\n }\n case 'CAR_DOCS': {\n state.carCustomFiles = action.payload.customFiles\n break\n }\n }\n }\n })\n .addCase(uploadEoEur1Document.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.certificate\n }\n })\n .addCase(uploadOrderCooDocument.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.certificate\n }\n })\n .addCase(uploadOrderCarDocument.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.certificate\n }\n })\n .addCase(uploadOrderCustomFile.fulfilled, (state, action) => {\n if (action.payload?.customFile.group) {\n const group: DocumentGroup = action.payload.customFile.group\n\n switch (group) {\n case 'CERTIFICATE_DOCS': {\n state.customFiles.unshift(action.payload.customFile)\n break\n }\n case 'CAR_DOCS': {\n state.carCustomFiles.unshift(action.payload.customFile)\n break\n }\n case 'USER_DOCS': {\n state.userCustomFiles.unshift(action.payload.customFile)\n break\n }\n }\n }\n })\n .addCase(uploadCustomerDocument.fulfilled, (state, action) => {\n if (action.payload && state.orderDetails?.user?.id === action.payload.customer.id) {\n state.orderDetails.user = action.payload.customer\n }\n })\n .addCase(getOrderComments.fulfilled, (state, action) => {\n if (action.payload) {\n state.commentPagesNumber = action.payload.total / state.pageSizeComments\n state.comments.unshift(...action.payload.comments)\n state.totalComments += action.payload.total\n }\n })\n .addCase(postOrderComment.fulfilled, (state, action) => {\n if (action.payload) {\n state.comments.push(action.payload.comment)\n }\n })\n .addCase(removeOrderComment.fulfilled, (state, action) => {\n if (action.payload) {\n state.comments = state.comments.filter((comment) => comment.id !== action.payload.comment.id)\n state.totalComments -= 1\n }\n })\n .addCase(updateOrderState.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderList = state.orderList.map((order) => {\n if (order.id === action.payload.certificate?.id) {\n return {\n ...order,\n state: action.payload.certificate.state,\n }\n } else {\n return order\n }\n })\n\n if (state.orderDetails && state.orderDetails?.id === action.payload.certificate?.id) {\n state.orderDetails = {\n ...state.orderDetails,\n state: action.payload.certificate.state,\n }\n }\n }\n })\n .addCase(updateBuyerByOrderId.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.order\n }\n })\n // NOTE user-profile remove this\n .addCase(updateAdminBuyer.fulfilled, (state, action) => {\n if (action.payload) {\n if (state.orderDetails.buyer.id === action.payload.buyer.id) {\n state.orderDetails.buyer = action.payload.buyer\n }\n }\n })\n .addCase(setBuyer.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.order\n }\n })\n .addCase(updateAdminSeller.fulfilled, (state, action) => {\n if (action.payload) {\n if (state.orderDetails?.seller?.id === action.payload.seller.id) {\n state.orderDetails.seller = action.payload.seller\n }\n }\n })\n .addCase(updateOrderEur1Id.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderList = state.orderList.map((order) => {\n if (order.id === action.payload.order.id) {\n return action.payload.order\n } else {\n return order\n }\n })\n\n if (state.orderDetails && state.orderDetails?.id === action.payload.order.id) {\n state.orderDetails = action.payload.order\n }\n }\n })\n .addCase(updateOrderPrintDate.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderList = state.orderList.map((order) => {\n if (order.id === action.payload.order.id) {\n return action.payload.order\n } else {\n return order\n }\n })\n\n if (state.orderDetails && state.orderDetails?.id === action.payload.order.id) {\n state.orderDetails = action.payload.order\n }\n }\n })\n .addCase(updateOrderPaymentState.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.order\n }\n })\n .addCase(updateOrderDetails.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.certificate\n\n state.orderList = state.orderList.map((order) => {\n if (order.id === action.payload.certificate.id) {\n return action.payload.certificate\n } else {\n return order\n }\n })\n }\n })\n .addCase(generateOrderEur1.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.order\n }\n })\n .addCase(setSellerToOrder.fulfilled, (state, action) => {\n if (action.payload) {\n state.orderDetails = action.payload.order\n }\n })\n .addCase(cancelFacture.fulfilled, (state, action) => {\n if (action.payload && action.payload.entityType === 'CERTIFICATE') {\n state.orderDetails.facture = action.payload.facture\n state.orderDetails.paymentState = 'CANCELED'\n }\n })\n },\n})\n\nconst { actions } = orderListSlice\nexport const {\n setSort,\n setOrder,\n setParam,\n resetOrderDetailsState,\n setCustomsStatus,\n resetOrderList,\n setCommentsPageIndex,\n setOrderWorkingState,\n} = actions\nexport default orderListSlice.reducer\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\n\nimport { StoragePlace, StorageResponseList, StorageResponse } from 'Types/global.types'\n\nimport { ADMIN_API_ROOT, ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\ninterface RequestPayload {\n pageIndex: number\n pageSize: number\n}\n\n/**\n * Get storage place list\n */\nexport const getStoragePlacesList = createAsyncThunk(\n 'admin/getStoragePlacesList',\n async ({ pageIndex, pageSize }: RequestPayload) => {\n const url = `${ADMIN_API_URL.STORAGE_PLACE.ROOT}?page=${pageIndex}&limit=${pageSize}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n storagePlacesList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const searchStoragePlaces = async ({\n param,\n pageIndex,\n pageSize,\n}: {\n param: string\n pageIndex: number\n pageSize: number\n}) => {\n const url = `${ADMIN_API_URL.STORAGE_PLACE.ROOT}/search?param=${param}&page=${pageIndex}&limit=${pageSize}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n list: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Update storage place\n */\nexport const updateStoragePlace = createAsyncThunk(\n 'admin/updateStoragePlace',\n async ({ id, options }: { id: number; options: StoragePlace }) => {\n const url = `${ADMIN_API_ROOT}/storage-place/${id}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n storagePlace: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Add storage place\n */\nexport const addStoragePlace = createAsyncThunk(\n 'admin/addStoragePlace',\n async ({ options }: { options: StoragePlace }) => {\n const url = `${ADMIN_API_ROOT}/storage-place`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n storagePlace: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Remove storage place\n */\nexport const removeStoragePlace = createAsyncThunk('admin/removeStoragePlace', async (id: number) => {\n const url = `${ADMIN_API_ROOT}/storage-place/${id}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, config)\n return {\n storagePlaceId: id,\n deleted: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { StoragePlace } from 'Types/global.types'\n\nimport {\n addStoragePlace,\n getStoragePlacesList,\n removeStoragePlace,\n updateStoragePlace,\n} from 'Api/admin/admin.storageplaces.service.ts'\n\ninterface InitialStateProps {\n storagePlacesList: StoragePlace[]\n total: number\n loading: boolean\n pageSize: number\n}\n\nconst initialState: InitialStateProps = {\n storagePlacesList: [],\n total: 0,\n loading: false,\n pageSize: 50,\n}\n\nconst storagePlacesListSlice = createSlice({\n name: 'storagePlacesList',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(getStoragePlacesList.fulfilled, (state, action) => {\n if (action.payload) {\n state.storagePlacesList = action.payload.storagePlacesList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getStoragePlacesList.pending, (state) => {\n state.loading = true\n })\n .addCase(getStoragePlacesList.rejected, (state) => {\n state.loading = false\n })\n .addCase(removeStoragePlace.fulfilled, (state, action) => {\n if (action.payload.deleted) {\n state.storagePlacesList = state.storagePlacesList.filter(\n (storagePlace) => storagePlace.id !== action.payload.storagePlaceId\n )\n }\n })\n .addCase(addStoragePlace.fulfilled, (state, action) => {\n if (action.payload) {\n state.storagePlacesList.unshift(action.payload.storagePlace)\n }\n })\n .addCase(updateStoragePlace.fulfilled, (state, action) => {\n state.storagePlacesList = state.storagePlacesList.map((storagePlace) => {\n if (storagePlace.id === action.payload.storagePlace.id) {\n return action.payload.storagePlace\n }\n return storagePlace\n })\n })\n },\n})\n\nexport default storagePlacesListSlice.reducer\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\n\nimport { CustomsCrossing, CustomsResponse, CustomsResponseList } from 'Types/global.types'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\ninterface RequestPayload {\n pageIndex: number\n pageSize: number\n param?: string\n}\n\nexport const getCustomsCrossingList = createAsyncThunk(\n 'admin/getCustomsCrossingList',\n async ({ pageIndex, pageSize, param }: RequestPayload) => {\n let url = `${ADMIN_API_URL.CUSTOMS_CROSSING.ROOT}/search`\n\n const queryParams = []\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n customsCrossingList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const updateCustomsCrossing = createAsyncThunk(\n 'admin/updateCustomsCrossing',\n async ({ id, options }: { id: number; options: CustomsCrossing }) => {\n const url = `${ADMIN_API_URL.CUSTOMS_CROSSING.ROOT}/${id}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n customsCrossing: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const addCustomsCrossing = createAsyncThunk(\n 'admin/addCustomsCrossing',\n async ({ options }: { options: CustomsCrossing }) => {\n const url = `${ADMIN_API_URL.CUSTOMS_CROSSING.ROOT}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n customsCrossing: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const removeCustomsCrossing = createAsyncThunk('admin/removeCustomsCrossing', async (id: number) => {\n const url = `${ADMIN_API_URL.CUSTOMS_CROSSING.ROOT}/${id}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, config)\n return {\n customsCrossingId: id,\n deleted: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Search Customs Crossing for admin\n * @param param\n * @param pageIndex\n * @param pageSize\n */\nexport const searchCustomsCrossingList = async ({ param, pageIndex, pageSize }: RequestPayload) => {\n const url = `${ADMIN_API_URL.CUSTOMS_CROSSING.ROOT}/search?param=${param}&page=${pageIndex}&limit=${pageSize}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n list: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { CustomsCrossing } from 'Types/global.types.ts'\n\nimport {\n getCustomsCrossingList,\n updateCustomsCrossing,\n addCustomsCrossing,\n removeCustomsCrossing,\n} from 'Api/admin/admin.customscrossing.service'\n\ninterface InitialStateProps {\n customsCrossingList: CustomsCrossing[]\n total: number\n loading: boolean\n pageSize: number\n param: string\n}\n\nconst initialState: InitialStateProps = {\n customsCrossingList: [],\n total: 0,\n loading: false,\n pageSize: 50,\n param: '',\n}\n\nconst customsCrossingSlice = createSlice({\n name: 'customsCrossingList',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCustomsCrossingList.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsCrossingList = action.payload.customsCrossingList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getCustomsCrossingList.pending, (state) => {\n state.loading = true\n })\n .addCase(getCustomsCrossingList.rejected, (state) => {\n state.loading = false\n })\n .addCase(removeCustomsCrossing.fulfilled, (state, action) => {\n if (action.payload.deleted) {\n state.customsCrossingList = state.customsCrossingList.filter(\n (customsCrossing) => customsCrossing.id !== action.payload.customsCrossingId\n )\n }\n })\n .addCase(addCustomsCrossing.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsCrossingList.unshift(action.payload.customsCrossing)\n }\n })\n .addCase(updateCustomsCrossing.fulfilled, (state, action) => {\n state.customsCrossingList = state.customsCrossingList.map((customsCrossing) => {\n if (customsCrossing.id === action.payload.customsCrossing.id) {\n return action.payload.customsCrossing\n }\n return customsCrossing\n })\n })\n },\n})\n\nconst { actions } = customsCrossingSlice\nexport const { setParam } = actions\nexport default customsCrossingSlice.reducer\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\n\nimport { CustomsVariableResponse, CustomsVariableResponseList } from 'Types/global.types'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\ninterface RequestPayload {\n pageIndex: number\n pageSize: number\n}\n\n/**\n * Get list of customs variables\n */\nexport const getCustomsVariableList = createAsyncThunk(\n 'admin/getCustomsVariableList',\n async ({ pageIndex, pageSize }: RequestPayload) => {\n const url = `${ADMIN_API_URL.CUSTOMS_VARIABLE.ROOT}?page=${pageIndex}&limit=${pageSize}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n customsVariableList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update customs variables\n */\nexport const updateCustomsVariable = createAsyncThunk(\n 'admin/updateCustomsVariable',\n async (options: Array<{ id: string; value: string }>) => {\n const url = `${ADMIN_API_URL.CUSTOMS_VARIABLE.ROOT}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n customsVariable: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { CustomsVariable } from 'Types/global.types.ts'\n\nimport { getCustomsVariableList, updateCustomsVariable } from 'Api/admin/admin.customsVariables.service.ts'\nimport { formatArrayToObject } from 'Utils/common.util.ts'\n\ninterface InitialStateProps {\n customsVariableList: CustomsVariable[]\n initialCustomsVariableList: { [key: string]: string }\n diff: { [key: string]: string }\n total: number\n loading: boolean\n pageSize: number\n}\n\nconst initialState: InitialStateProps = {\n customsVariableList: [],\n initialCustomsVariableList: {},\n diff: {},\n total: 0,\n loading: false,\n pageSize: 50,\n}\n\nconst customsVariableSlice = createSlice({\n name: 'customsVariableList',\n initialState,\n reducers: {\n setCustomsVariables: (state, action: { payload: { id: string; value: string } }) => {\n if (action.payload) {\n state.customsVariableList = state.customsVariableList.map((variable) => {\n if (variable.id === action.payload.id) {\n return {\n ...variable,\n value: action.payload.value,\n }\n } else {\n return variable\n }\n })\n\n state.diff[action.payload.id] = action.payload.value\n }\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCustomsVariableList.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsVariableList = action.payload.customsVariableList\n state.initialCustomsVariableList = formatArrayToObject(action.payload.customsVariableList)\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getCustomsVariableList.pending, (state) => {\n state.loading = true\n })\n .addCase(getCustomsVariableList.rejected, (state) => {\n state.loading = false\n })\n .addCase(updateCustomsVariable.fulfilled, (state, action) => {\n if (action.payload) {\n const mutableCustomsVariableList = state.customsVariableList.map((customsVariable) => {\n if (customsVariable.id === action.payload.customsVariable.id) {\n return action.payload.customsVariable\n } else {\n return customsVariable\n }\n })\n state.customsVariableList = mutableCustomsVariableList\n state.initialCustomsVariableList = formatArrayToObject(mutableCustomsVariableList)\n state.diff = {}\n }\n })\n },\n})\n\nconst { actions } = customsVariableSlice\nexport const { setCustomsVariables } = actions\nexport default customsVariableSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { SellerType } from 'Definitions/Seller.type.ts'\n\nimport {\n addAdminSeller,\n changeSellerStatus,\n getAdminSellers,\n updateAdminSeller,\n updateAdminSellerStatus,\n} from 'Api/admin/admin.seller.service.ts'\n\ninterface InitialStateProps {\n adminSellers: SellerType[]\n loading: boolean\n total: number\n pageSize: number\n param: string\n}\n\nconst initialState: InitialStateProps = {\n adminSellers: [],\n loading: false,\n total: 0,\n pageSize: 20,\n param: '',\n}\n\nconst adminSellersSlice = createSlice({\n name: 'adminSellers',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getAdminSellers.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminSellers = action.payload.adminSellers\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getAdminSellers.pending, (state) => {\n state.loading = true\n })\n .addCase(getAdminSellers.rejected, (state) => {\n state.loading = false\n })\n .addCase(updateAdminSeller.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminSellers = state.adminSellers.map((seller) => {\n if (seller.id === action.payload.seller.id) {\n return action.payload.seller\n } else {\n return seller\n }\n })\n }\n })\n .addCase(addAdminSeller.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminSellers.unshift(action.payload.seller)\n state.total += 1\n }\n })\n .addCase(updateAdminSellerStatus.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminSellers = state.adminSellers.map((seller) => {\n if (seller.id === action.payload.seller.id) {\n return action.payload.seller\n } else {\n return seller\n }\n })\n }\n })\n .addCase(changeSellerStatus.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminSellers = state.adminSellers.map((seller) => {\n if (seller.id === action.payload.seller.id) {\n return action.payload.seller\n } else {\n return seller\n }\n })\n }\n })\n },\n})\n\nconst { actions } = adminSellersSlice\n\nexport const { setParam } = actions\n\nexport default adminSellersSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { searchForwarders } from 'Api/admin/admin.customers.service.ts'\nimport { UserApiType } from 'Schemas/user.types.ts'\n\ninterface InitialStateProps {\n adminForwarderList: UserApiType[]\n loading: boolean\n loaded: boolean\n total: number\n pageSize: number\n param: string\n}\n\nconst initialState: InitialStateProps = {\n adminForwarderList: [],\n loading: false,\n loaded: false,\n total: 0,\n pageSize: 20,\n param: '',\n}\n\nconst adminForwardersSlice = createSlice({\n name: 'adminForwarders',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(searchForwarders.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminForwarderList = action.payload.customerList\n state.total = action.payload.total\n state.loaded = true\n state.loading = false\n }\n })\n .addCase(searchForwarders.pending, (state) => {\n state.loaded = false\n state.loading = true\n })\n .addCase(searchForwarders.rejected, (state) => {\n state.loaded = false\n state.loading = false\n })\n },\n})\n\nexport default adminForwardersSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { Eur1CounterListResponse, Eur1CounterResponse } from 'Types/admin/admin'\n\nimport { getAccessToken, getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get list of EUR-1 counters\n */\nexport const getEur1CounterList = createAsyncThunk(\n 'admin/getEur1CounterList',\n async ({ pageIndex, pageSize }: { pageIndex: number; pageSize: number }) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.EUR1_COUNTER.ROOT}?page=${pageIndex}&limit=${pageSize}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n eur1CounterList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getReusableEur1List = createAsyncThunk(\n 'admin/getReusableEur1CounterList',\n async ({ pageIndex, pageSize }: { pageIndex: number; pageSize: number }) => {\n const url = `${ADMIN_API_URL.EUR1_COUNTER.ROOT}/reusable?page=${pageIndex}&limit=${pageSize}`\n\n try {\n const { data }: AxiosResponse = await axios.get(url, getAxiosConfig())\n return {\n reusableEur1CounterList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Create EUR-1 counter\n */\nexport const createEur1Counter = createAsyncThunk(\n 'admin/createEur1Counter',\n async (options: { from: number; to: number; prefix: string }) => {\n const token = getAccessToken()\n const url = ADMIN_API_URL.EUR1_COUNTER.ROOT\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n eur1Counter: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Remove EUR-1 counter\n */\nexport const removeEur1Counter = createAsyncThunk('admin/removeEur1Counter', async (id: string) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.EUR1_COUNTER.ROOT}/${id}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: boolean }> = await axios.delete(url, config)\n return {\n id,\n deleted: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { Eur1CounterType } from 'Types/admin/admin'\nimport { PaginationProps } from 'Types/global.types.ts'\n\nimport { createEur1Counter, getEur1CounterList, removeEur1Counter } from 'Api/admin/admin.eur1Counter.service.ts'\n\ninterface InitialStateProps {\n eur1CounterList: Eur1CounterType[]\n loading: boolean\n total: number\n pageIndex: number\n pageSize: number\n}\n\nconst initialState: InitialStateProps = {\n eur1CounterList: [],\n loading: false,\n total: 0,\n pageIndex: 0,\n pageSize: 20,\n}\n\nconst adminEur1CounterSlice = createSlice({\n name: 'adminEur1Counter',\n initialState,\n reducers: {\n setEur1CounterPageIndex: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getEur1CounterList.fulfilled, (state, action) => {\n if (action.payload) {\n state.eur1CounterList = action.payload.eur1CounterList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getEur1CounterList.pending, (state) => {\n state.loading = true\n })\n .addCase(getEur1CounterList.rejected, (state) => {\n state.loading = false\n })\n .addCase(removeEur1Counter.fulfilled, (state, action) => {\n if (action.payload.deleted) {\n state.eur1CounterList = state.eur1CounterList.filter((counter) => counter.id !== action.payload.id)\n }\n })\n .addCase(createEur1Counter.fulfilled, (state, action) => {\n if (action.payload) {\n state.eur1CounterList.unshift(action.payload.eur1Counter)\n }\n })\n },\n})\n\nconst { actions } = adminEur1CounterSlice\n\nexport const { setEur1CounterPageIndex } = actions\n\nexport default adminEur1CounterSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { BlacklistAllResponseType, BlacklistResponseType, BlacklistType } from 'Types/admin/admin'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get blacklist items\n */\nexport const getBlackList = createAsyncThunk(\n 'admin/getBlackList',\n async ({ pageIndex, pageSize, param }: { pageIndex: number; pageSize: number; param: string }) => {\n let url = `${ADMIN_API_URL.BLACKLIST.ROOT}`\n\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n blacklistAll: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Create a new Blacklist item\n */\nexport const createBlacklist = createAsyncThunk('admin/createBlacklist', async (options: BlacklistType) => {\n const token = getAccessToken()\n const url = ADMIN_API_URL.BLACKLIST.ROOT\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n blacklist: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Update Blacklist item\n */\nexport const updateBlacklist = createAsyncThunk(\n 'admin/updateBlacklist',\n async ({ id, options }: { id: string; options: BlacklistType }) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.BLACKLIST.ROOT}/${id}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n blacklist: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Remove blacklist item\n */\nexport const removeBlacklist = createAsyncThunk('admin/removeBlacklist', async (id: string) => {\n const url = `${ADMIN_API_URL.BLACKLIST.ROOT}/${id}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: boolean }> = await axios.delete(url, config)\n return {\n id,\n deleted: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { BlacklistType } from 'Types/admin/admin'\n\nimport { createBlacklist, getBlackList, removeBlacklist, updateBlacklist } from 'Api/admin/admin.blackList.service.ts'\n\ninterface InitialStateProps {\n blacklist: BlacklistType[]\n loading: boolean\n total: number\n pageSize: number\n param: string\n}\n\nconst initialState: InitialStateProps = {\n blacklist: [],\n loading: false,\n total: 0,\n pageSize: 20,\n param: '',\n}\n\nconst adminBlacklistSlice = createSlice({\n name: 'blacklistSlice',\n initialState,\n reducers: {\n setParam: (state, action: PayloadAction) => {\n state.param = action.payload\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getBlackList.fulfilled, (state, action) => {\n if (action.payload) {\n state.blacklist = action.payload.blacklistAll\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getBlackList.pending, (state) => {\n state.loading = true\n })\n .addCase(getBlackList.rejected, (state) => {\n state.loading = false\n })\n .addCase(createBlacklist.fulfilled, (state, action) => {\n if (action.payload) {\n state.blacklist.unshift(action.payload.blacklist)\n state.total += 1\n }\n })\n .addCase(updateBlacklist.fulfilled, (state, action) => {\n if (action.payload) {\n state.blacklist = state.blacklist.map((blacklist) => {\n if (blacklist.id === action.payload.blacklist.id) {\n return action.payload.blacklist\n } else {\n return blacklist\n }\n })\n }\n })\n .addCase(removeBlacklist.fulfilled, (state, action) => {\n if (action.payload.deleted) {\n state.blacklist = state.blacklist.filter((blacklist) => blacklist.id !== action.payload.id)\n state.total -= 1\n }\n })\n },\n})\n\nconst { actions } = adminBlacklistSlice\n\nexport const { setParam } = actions\n\nexport default adminBlacklistSlice.reducer\n","import { createAsyncThunk } from '@reduxjs/toolkit'\nimport axios, { AxiosResponse } from 'axios'\n\nimport { ChartOption, DashboardDataType, DiagramOptions } from 'Types/admin/admin'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Get monthly income\n */\nexport const getMonthlyIncome = createAsyncThunk(\n 'admin/getMonthlyIncome',\n async ({ month, year, type }: { month: number; year: number; type: DashboardDataType }) => {\n const url = `${ADMIN_API_URL.INCOME.ROOT}/monthly?month=${month}&year=${year}&type=${type}`\n\n try {\n const { data }: AxiosResponse<{ data: ChartOption }> = await axios.get(url, getAxiosConfig())\n return {\n income: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Get yearly income\n */\nexport const getYearlyIncome = createAsyncThunk(\n 'admin/getYearlyIncome',\n async ({ year, type }: { year: number; type: DashboardDataType }) => {\n const url = `${ADMIN_API_URL.INCOME.ROOT}/yearly?year=${year}&type=${type}`\n\n try {\n const { data }: AxiosResponse<{ data: ChartOption }> = await axios.get(url, getAxiosConfig())\n return {\n income: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getDiagramDataset = createAsyncThunk(\n 'admin/getDiagramDataset',\n async ({ type, dataType, year, month }: DiagramOptions) => {\n const url = `${ADMIN_API_URL.INCOME.ROOT}/diagram?type=${type}&dataType=${dataType}&year=${year}&month=${month}`\n\n try {\n const { data }: AxiosResponse<{ data: { data: ChartOption[] } }> = await axios.get(url, getAxiosConfig())\n return {\n diagram: data.data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getCarValueByMonth = createAsyncThunk(\n 'admin/getCarValueByMonth',\n async ({ year, month }: { year: number; month: number }) => {\n const url = `${ADMIN_API_URL.INCOME_STATISTICS.ROOT}/monthly?year=${year}&month=${month}`\n\n try {\n const { data }: AxiosResponse<{ data: { totalValueFrance: number; totalValueOutOfFrance: number } }> =\n await axios.get(url, getAxiosConfig())\n return {\n ...data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getCarValueByYear = createAsyncThunk('admin/getCarValueByYear', async ({ year }: { year: number }) => {\n const url = `${ADMIN_API_URL.INCOME_STATISTICS.ROOT}/yearly?year=${year}`\n\n try {\n const { data }: AxiosResponse<{ data: { totalValueFrance: number; totalValueOutOfFrance: number } }> =\n await axios.get(url, getAxiosConfig())\n return {\n ...data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { ChartOption } from 'Types/admin/admin'\n\nimport { getDiagramDataset, getMonthlyIncome, getYearlyIncome } from 'Api/admin/admin.statistic.service.ts'\n\ntype InitialPortalStateProps = {\n monthlyIncome: ChartOption\n yearlyIncome: ChartOption\n diagram: ChartOption[]\n month: number\n year: number\n}\n\nconst currentTime = new Date()\nconst month = currentTime?.getMonth() + 1\nconst year = currentTime?.getFullYear()\n\nconst initialState: InitialPortalStateProps = {\n monthlyIncome: null,\n yearlyIncome: null,\n diagram: [],\n month,\n year,\n}\n\nexport const statisticSlice = createSlice({\n name: 'statisticSlice',\n initialState,\n reducers: {\n setYear: (state, action) => {\n state.year = action.payload\n },\n setMonth: (state, action) => {\n state.month = action.payload\n },\n resetStatistic: (state) => {\n state.monthlyIncome = null\n state.yearlyIncome = null\n state.diagram = []\n state.month = month\n state.year = year\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getMonthlyIncome.fulfilled, (state, action) => {\n state.monthlyIncome = action.payload.income\n })\n .addCase(getYearlyIncome.fulfilled, (state, action) => {\n state.yearlyIncome = action.payload.income\n })\n .addCase(getDiagramDataset.fulfilled, (state, action) => {\n state.diagram = action.payload.diagram\n })\n },\n})\n\nexport const { setYear, setMonth, resetStatistic } = statisticSlice.actions\nexport default statisticSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { DhlListResponse, DhlType, DhlTypeResponse, PaymentStateType, StateType } from 'Types/admin/admin'\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { getAccessToken, getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\ntype RequestOption = {\n pageIndex: number\n pageSize: number\n param: string\n sort: 'PAID' | 'CREATED_AT' | 'NOT_PAID'\n}\n\n/**\n * Get DHL list\n */\nexport const getDhlList = createAsyncThunk(\n 'admin/getDhl',\n async ({ pageIndex, pageSize, param, sort }: RequestOption) => {\n let url = ADMIN_API_URL.DHL.ROOT\n\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, getAxiosConfig())\n return {\n dhlList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update DHL state\n */\nexport const updateDhlState = createAsyncThunk(\n 'admin/updateDhlState',\n async ({ id, options }: { id: string; options: { state: StateType } }) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.DHL.ROOT}/${id}/state`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n dhl: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Update DHL payment state\n */\nexport const updateDhlPaymentState = createAsyncThunk(\n 'admin/updateDhlPaymentState',\n async ({ id, options }: { id: string; options: { paymentState: PaymentStateType } }) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.DHL.ROOT}/${id}/payment-state`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n dhl: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const orderAdminDhl = createAsyncThunk(\n 'admin/orderAdminDhl',\n async (options: { externalUserId?: string; userId?: string }) => {\n const token = getAccessToken()\n const url = ADMIN_API_URL.DHL.ROOT\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n dhl: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const removeDhl = createAsyncThunk('admin/removeDhl', async (dhlId: string) => {\n const url = `${ADMIN_API_URL.DHL.ROOT}/${dhlId}`\n\n try {\n const { data }: AxiosResponse<{ data: DhlType }> = await axios.delete(url, getAxiosConfig())\n return {\n dhl: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { DhlType } from 'Types/admin/admin'\n\nimport {\n getDhlList,\n orderAdminDhl,\n removeDhl,\n updateDhlPaymentState,\n updateDhlState,\n} from 'Api/admin/admin.dhl.service.ts'\nimport { cancelFacture } from 'Api/admin/admin.invoices.service.ts'\n\ninterface InitialStateProps {\n dhlList: DhlType[]\n loading: boolean\n total: number\n pageSize: number\n param: string\n sort: 'PAID' | 'CREATED_AT' | 'NOT_PAID'\n}\n\nconst initialState: InitialStateProps = {\n dhlList: [],\n loading: false,\n total: 0,\n pageSize: 20,\n param: '',\n sort: 'CREATED_AT',\n}\n\nconst adminDhlSlice = createSlice({\n name: 'adminDhlSlice',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n setSort: (state, action) => {\n state.sort = action.payload\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getDhlList.fulfilled, (state, action) => {\n if (action.payload) {\n state.dhlList = action.payload.dhlList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getDhlList.pending, (state) => {\n state.loading = true\n })\n .addCase(getDhlList.rejected, (state) => {\n state.loading = false\n })\n .addCase(updateDhlState.fulfilled, (state, action) => {\n if (action.payload) {\n state.dhlList = state.dhlList.map((dhl) => {\n if (dhl.id === action.payload.dhl.id) {\n return action.payload.dhl\n } else {\n return dhl\n }\n })\n }\n })\n .addCase(updateDhlPaymentState.fulfilled, (state, action) => {\n if (action.payload) {\n state.dhlList = state.dhlList.map((dhl) => {\n if (dhl.id === action.payload.dhl.id) {\n return action.payload.dhl\n } else {\n return dhl\n }\n })\n }\n })\n .addCase(orderAdminDhl.fulfilled, (state, action) => {\n if (action.payload) {\n state.dhlList.unshift(action.payload.dhl)\n }\n })\n .addCase(cancelFacture.fulfilled, (state, action) => {\n if (action.payload && action.payload.entityType === 'DHL') {\n // @ts-ignore\n state.dhlList = state.dhlList.map((dhl) => {\n if (dhl.facture.id === action.payload.facture.id) {\n return {\n ...dhl,\n paymentState: 'CANCELED',\n facture: action.payload.facture,\n }\n }\n return dhl\n })\n }\n })\n .addCase(removeDhl.fulfilled, (state, action) => {\n if (action.payload) {\n state.dhlList = state.dhlList.filter((dhl) => dhl.id !== action.payload.dhl.id)\n }\n })\n },\n})\n\nexport const { setParam, setSort } = adminDhlSlice.actions\nexport default adminDhlSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\nimport { getLanguageList } from 'Constants/Global.constants.ts'\n\nconst languageList = getLanguageList(true)\nconst defaultLanguage = languageList[0]\n\nconst initialState = {\n defaultLanguage: defaultLanguage,\n}\n\nexport const languageSlice = createSlice({\n name: 'language',\n initialState,\n reducers: {\n setLanguage: (state, action) => {\n state.defaultLanguage = action.payload\n },\n },\n})\n\nexport const { setLanguage } = languageSlice.actions\nexport default languageSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { DashboardDataType } from 'Types/admin/admin'\n\ninterface InitialStateProps {\n dashboardDataType: DashboardDataType\n}\n\nconst initialState: InitialStateProps = {\n dashboardDataType: 'SERVICE_INCOME',\n}\n\nconst adminDashboardSlice = createSlice({\n name: 'adminDashboardSlice',\n initialState,\n reducers: {\n setDashboardDataType: (state, action: PayloadAction) => {\n state.dashboardDataType = action.payload\n },\n resetDashboardDataType: (state) => {\n state.dashboardDataType = 'SERVICE_INCOME'\n },\n },\n})\n\nconst { actions } = adminDashboardSlice\nexport const { setDashboardDataType, resetDashboardDataType } = actions\nexport default adminDashboardSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { CustomerResponseType, PriceForTypeEnum, PriceType, RequestPayloadProps } from 'Types/admin/admin'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\nimport { FactureType } from 'Types/global.types.ts'\nimport { DefaultPriceProps } from 'Pages/AdminPricing/AdminPricing'\n\ninterface PriceProps {\n certificate: { [key: string]: PriceType[] }\n purchase: { [key: string]: PriceType[] }\n}\n\ninterface CreatePriceResponse {\n data: PriceType\n}\n\ninterface PriceResponseType {\n data: PriceProps\n}\n\nexport interface DefaultPriceResponseType {\n data: DefaultPriceProps\n}\n\ninterface CountryRequestPayloadProps {\n country?: string\n priceFor?: PriceForTypeEnum\n}\n\ninterface DefaultRequestPayloadProps {\n priceFor?: PriceForTypeEnum\n}\n\ninterface UserRequestPayloadProps {\n priceFor?: PriceForTypeEnum\n userId?: string\n}\n\ninterface CustomRequestPayloadProps {\n priceId: string\n options: {\n price: number\n minRange: number\n maxRange: number\n }\n}\n\nexport const createPrice = createAsyncThunk('admin/createPrice', async (options: RequestPayloadProps) => {\n const url = ADMIN_API_URL.PRICE.ROOT\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n price: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const updateFactureArticlePrice = createAsyncThunk(\n 'admin/createArticlePrice',\n async ({ factureId, options }: { factureId: string; options: { price: number } }) => {\n const url = `${ADMIN_API_URL.FACTURE.ROOT}/${factureId}/price`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: FactureType }> = await axios.patch(url, options, config)\n return {\n facture: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getDefaultPrices = createAsyncThunk(\n 'admin/getDefaultPrices',\n async ({ priceFor }: DefaultRequestPayloadProps) => {\n let url = `${ADMIN_API_URL.PRICE.ROOT}/default`\n const queryParams = []\n\n if (priceFor) {\n queryParams.push(`for=${encodeURIComponent(priceFor)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n prices: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getCountryPrices = createAsyncThunk(\n 'admin/getCountryPrices',\n async (event?: CountryRequestPayloadProps) => {\n const { priceFor, country } = event || {}\n let url = `${ADMIN_API_URL.PRICE.ROOT}/country`\n const queryParams = []\n\n if (priceFor) {\n queryParams.push(`for=${encodeURIComponent(priceFor)}`)\n }\n\n if (country) {\n queryParams.push(`country=${encodeURIComponent(country)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n prices: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getUserPrices = createAsyncThunk(\n 'admin/getUserPrices',\n async ({ priceFor, userId }: UserRequestPayloadProps) => {\n let url = `${ADMIN_API_URL.PRICE.ROOT}/user`\n const queryParams = []\n\n if (priceFor) {\n queryParams.push(`for=${encodeURIComponent(priceFor)}`)\n }\n\n if (userId) {\n queryParams.push(`userId=${encodeURIComponent(userId)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n prices: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getUserRange = async ({ userId, priceFor }: { userId: string; priceFor?: 'CERTIFICATE' | 'PURCHASE' }) => {\n let url = `${ADMIN_API_URL.PRICE.ROOT}/user-range`\n const queryParams = []\n\n if (userId) {\n queryParams.push(`userId=${encodeURIComponent(userId)}`)\n }\n\n if (priceFor) {\n queryParams.push(`for=${encodeURIComponent(priceFor)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n prices: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const createUserRange = async (options: {\n for?: 'CERTIFICATE' | 'PURCHASE'\n minRange: number\n maxRange: number\n price: number\n userId: string\n}) => {\n const url = `${ADMIN_API_URL.PRICE.ROOT}/user-range`\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options, config)\n return {\n prices: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * This endpoint is used only for CUSTOMER\n * @param priceId\n * @param options\n */\nexport const updateUserRange = async ({\n priceId,\n options,\n}: {\n priceId: string\n options: {\n minRange: number\n maxRange: number\n price: number\n }\n}) => {\n const url = `${ADMIN_API_URL.PRICE.ROOT}/user-range/${priceId}`\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n prices: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const removeUserRange = async (priceId: string) => {\n const url = `${ADMIN_API_URL.PRICE.ROOT}/user-range/${priceId}`\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, config)\n return {\n prices: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\nexport const getCustomPrice = createAsyncThunk('admin/getCustomPrice', async (priceId: string) => {\n const url = `${ADMIN_API_URL.PRICE.ROOT}/${priceId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n price: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const updateCustomPrice = createAsyncThunk(\n 'admin/updateCustomPrice',\n async ({ priceId, options }: CustomRequestPayloadProps) => {\n const url = `${ADMIN_API_URL.PRICE.ROOT}/${priceId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.patch(url, options, config)\n return {\n price: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const removeCustomPrice = createAsyncThunk('admin/removeCustomPrice', async (priceId: string) => {\n const url = `${ADMIN_API_URL.PRICE.ROOT}/${priceId}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.delete(url, config)\n return {\n price: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice } from '@reduxjs/toolkit'\nimport { createPrice, getCountryPrices, getDefaultPrices, getUserPrices } from 'Api/admin/admin.pricing.service.ts'\nimport { PriceType } from 'Types/admin/admin'\nimport { DefaultPriceProps } from 'Pages/AdminPricing/AdminPricing'\n\ninterface PriceProps {\n certificate: { [key: string]: PriceType[] }\n purchase: { [key: string]: PriceType[] }\n}\n\ninterface CustomerPriceProps {\n certificate: PriceType[]\n purchase: PriceType[]\n}\n\ninterface PricesState {\n defaultPrice: DefaultPriceProps\n countryPrices: PriceProps\n userPrices: CustomerPriceProps\n}\n\nconst initialState: PricesState = {\n defaultPrice: null,\n countryPrices: null,\n userPrices: null,\n}\n\nexport const pricesSlice = createSlice({\n name: 'pricesSlice',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(createPrice.fulfilled, (state, action) => {\n if (action.payload) {\n switch (action.payload.price.type) {\n case 'DEFAULT': {\n if (action.payload.price.for === 'CERTIFICATE') {\n state.defaultPrice.certificate.push(action.payload.price)\n } else if (action.payload.price.for === 'PURCHASE') {\n state.defaultPrice.purchase.push(action.payload.price)\n }\n break\n }\n case 'COUNTRY': {\n const countryName = action.payload.price.country\n if (action.payload.price.for === 'CERTIFICATE') {\n if (state.countryPrices.certificate[countryName]) {\n state.countryPrices.certificate[countryName].push(action.payload.price)\n } else {\n state.countryPrices.certificate[countryName] = [action.payload.price]\n }\n } else if (action.payload.price.for === 'PURCHASE') {\n if (state.countryPrices.purchase[countryName]) {\n state.countryPrices.purchase[countryName].push(action.payload.price)\n } else {\n state.countryPrices.purchase[countryName] = [action.payload.price]\n }\n }\n break\n }\n }\n }\n })\n .addCase(getDefaultPrices.fulfilled, (state, action) => {\n if (action.payload) {\n state.defaultPrice = action.payload.prices\n }\n })\n .addCase(getCountryPrices.fulfilled, (state, action) => {\n state.countryPrices = action.payload.prices\n })\n .addCase(getUserPrices.fulfilled, (state, action) => {\n if (action.payload) {\n // FIX ESLINT\n // @ts-ignore\n state.userPrices = action.payload.prices\n }\n })\n },\n})\n\nexport default pricesSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { AuctionHouseProps } from 'Types/global.types.ts'\nimport { API_URL } from 'Constants/Global.constants.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\nimport { AuctionHouseType } from 'Types/auctionHouse'\nimport { AuctionHouseApiType } from 'Schemas/auctionHouse.types.ts'\n\ntype AuctionHouseRequestProps = {\n param?: string\n}\n\nexport const loadAsyncAuctionHouseList = async () => {\n const url = `${API_URL}/auction-house`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseType[]; total: number }> = await axios.get(url, config)\n return {\n list: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Fetch auction house list\n */\nexport const searchAuctionHouseList = async ({ param }: AuctionHouseRequestProps) => {\n if (param.length >= 3) {\n const url = `${API_URL}/auction-house/search?param=${param}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseType[]; total: number }> = await axios.get(url, config)\n\n return {\n list: data?.data || [],\n total: data?.total || 0,\n }\n } catch (error) {\n handleError(error, true)\n }\n } else {\n return {\n list: [],\n total: 0,\n }\n }\n}\n\n/**\n * Load auction house list\n */\nexport const getAuctionHouseList = createAsyncThunk('admin/getAuctionHouse', async () => {\n const url = `${API_URL}/auction-house`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseType[]; total: number }> = await axios.get(url, config)\n return {\n auctionHouseList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const searchAuctionHouse = createAsyncThunk('admin/searchAuctionHouse', async (param: string) => {\n const url = `${API_URL}/auction-house/search?param=${param}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseProps[] }> = await axios.get(url, config)\n return {\n auctionHouseList: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const addAuctionHouse = createAsyncThunk('admin/addAuctionHouse', async (params: AuctionHouseApiType) => {\n const url = `${API_URL}/auction-house`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: AuctionHouseApiType }> = await axios.post(url, params, config)\n return {\n auctionHouse: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { getAuctionHouseList } from 'Api/auction.service.ts'\nimport { AuctionHouseType } from 'Types/auctionHouse'\n\ninterface InitialState {\n auctionHouseList: AuctionHouseType[]\n total: number\n pageIndex: number\n loading: boolean\n loaded: boolean\n}\n\nconst initialState: InitialState = {\n auctionHouseList: [],\n total: 0,\n loading: false,\n loaded: false,\n pageIndex: 0,\n}\n\nconst auctionHouseSlice = createSlice({\n name: 'auctionHouse',\n initialState,\n reducers: {\n addAuctionHouseToList: (state, action: PayloadAction) => {\n if (action.payload) {\n state.auctionHouseList.unshift(action.payload)\n }\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getAuctionHouseList.fulfilled, (state, action) => {\n if (action.payload) {\n state.auctionHouseList = action.payload.auctionHouseList\n state.total = action.payload.total\n state.pageIndex = 0\n state.loaded = true\n }\n state.loading = false\n })\n .addCase(getAuctionHouseList.pending, (state) => {\n state.loading = true\n state.loaded = false\n })\n .addCase(getAuctionHouseList.rejected, (state) => {\n state.loading = false\n state.loaded = false\n })\n },\n})\n\nconst { actions } = auctionHouseSlice\nexport const { addAuctionHouseToList } = actions\nexport default auctionHouseSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\nimport { AuctionHouseType } from 'Types/auctionHouse'\nimport {\n addAdminAuctionHouse,\n getAdminAuctionHouse,\n searchAdminAuctionHouse,\n updateAdminAuctionHouse,\n} from 'Api/admin/admin.auction.service.ts'\n\ninterface InitialState {\n auctionHouseList: AuctionHouseType[]\n total: number\n loading: boolean\n loaded: boolean\n pageSize: number\n param: string\n}\n\nconst initialState: InitialState = {\n auctionHouseList: [],\n total: 0,\n loading: false,\n loaded: false,\n pageSize: 20,\n param: '',\n}\n\nconst adminAuctionHouseSlice = createSlice({\n name: 'adminAuctionHouse',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getAdminAuctionHouse.fulfilled, (state, action) => {\n if (action.payload) {\n state.auctionHouseList = action.payload.adminAuctionHouseList\n state.total = action.payload.total\n state.loaded = true\n }\n state.loading = false\n })\n .addCase(getAdminAuctionHouse.pending, (state) => {\n state.loading = true\n state.loaded = false\n })\n .addCase(getAdminAuctionHouse.rejected, (state) => {\n state.loading = false\n state.loaded = false\n })\n .addCase(searchAdminAuctionHouse.fulfilled, (state, action) => {\n if (action.payload) {\n state.auctionHouseList = action.payload.adminAuctionHouseList\n state.total = action.payload.total\n state.loaded = true\n }\n state.loading = false\n })\n .addCase(searchAdminAuctionHouse.pending, (state) => {\n state.loading = true\n state.loaded = false\n })\n .addCase(searchAdminAuctionHouse.rejected, (state) => {\n state.loading = false\n state.loaded = false\n })\n .addCase(updateAdminAuctionHouse.fulfilled, (state, action) => {\n if (action.payload) {\n state.auctionHouseList = state.auctionHouseList.map((auctionHouse) => {\n if (auctionHouse.id === action.payload.adminAuctionHouse.id) {\n return action.payload.adminAuctionHouse\n }\n return auctionHouse\n })\n }\n })\n .addCase(addAdminAuctionHouse.fulfilled, (state, action) => {\n if (action.payload) {\n state.auctionHouseList.unshift(action.payload.adminAuctionHouse)\n state.total += 1\n }\n })\n },\n})\n\nconst { actions } = adminAuctionHouseSlice\nexport const { setParam } = actions\nexport default adminAuctionHouseSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { ADMIN_API_ROOT } from 'Constants/Global.admin.constants.ts'\n\nimport { CustomsOfficerType } from 'Schemas/customs.types.ts'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\ntype CustomsOfficerParams = {\n param: string\n pageSize: number\n pageIndex: number\n}\n\n/**\n * Get list of custom officers\n */\nexport const getCustomsOfficerList = createAsyncThunk(\n 'admin/customsOfficerList',\n async ({ param, pageIndex, pageSize }: CustomsOfficerParams) => {\n let url = `${ADMIN_API_ROOT}/customs-officer`\n\n const queryParams = []\n\n if (param || param === '') {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomsOfficerType[]; total: number }> = await axios.get(url, config)\n return {\n customsOfficerList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * Add new customs officer\n */\nexport const addCustomsOfficer = createAsyncThunk('admin/addCustomsOfficer', async (options) => {\n const url = `${ADMIN_API_ROOT}/customs-officer/signup`\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomsOfficerType }> = await axios.post(url, options, config)\n return {\n customsOfficer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const updateCustomsOfficer = createAsyncThunk('admin/updateCustomsOfficer', async (options) => {\n const url = `${ADMIN_API_ROOT}/customs-officer`\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomsOfficerType }> = await axios.patch(url, options, config)\n return {\n customsOfficer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Remove customs officer\n */\nexport const removeCustomsOfficer = createAsyncThunk('admin/removeCustomsOfficer', async (id: string) => {\n const url = `${ADMIN_API_ROOT}/customs-officer/${id}`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomsOfficerType }> = await axios.delete(url, config)\n return data.data\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice } from '@reduxjs/toolkit'\nimport { CustomsOfficerType } from 'Schemas/customs.types.ts'\nimport {\n addCustomsOfficer,\n getCustomsOfficerList,\n removeCustomsOfficer,\n updateCustomsOfficer,\n} from 'Api/admin/admin.customsOfficer.service.ts'\n\ninterface InitialStateProps {\n customsOfficer: CustomsOfficerType | null\n initialCustomsOfficerList: CustomsOfficerType[]\n customsOfficerList: CustomsOfficerType[]\n loading: boolean\n total: number\n pageSize: number\n param: string\n}\n\nconst initialState: InitialStateProps = {\n customsOfficer: null,\n initialCustomsOfficerList: [],\n customsOfficerList: [],\n loading: false,\n total: 0,\n pageSize: 20,\n param: '',\n}\n\nconst customsOfficerListSlice = createSlice({\n name: 'customsOfficerList',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCustomsOfficerList.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsOfficerList = action.payload.customsOfficerList\n state.initialCustomsOfficerList = action.payload.customsOfficerList\n state.total = action.payload.total\n state.loading = false\n }\n })\n .addCase(getCustomsOfficerList.pending, (state) => {\n state.loading = true\n })\n .addCase(getCustomsOfficerList.rejected, (state) => {\n state.loading = false\n })\n .addCase(addCustomsOfficer.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsOfficerList.unshift(action.payload.customsOfficer)\n state.initialCustomsOfficerList.unshift(action.payload.customsOfficer)\n }\n })\n .addCase(updateCustomsOfficer.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsOfficerList = state.customsOfficerList.map((officer) => {\n if (officer.id === action.payload.customsOfficer.id) {\n return action.payload.customsOfficer\n }\n return officer\n })\n }\n })\n .addCase(removeCustomsOfficer.fulfilled, (state, action) => {\n if (action.payload) {\n const mutableList = state.customsOfficerList.filter((buyer) => buyer.id !== action.payload.id)\n\n state.customsOfficerList = mutableList as CustomsOfficerType[]\n state.initialCustomsOfficerList = mutableList as CustomsOfficerType[]\n state.total -= 1\n }\n })\n },\n})\n\nconst { actions } = customsOfficerListSlice\nexport const { setParam } = actions\nexport default customsOfficerListSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { CUSTOMS_API_ROOT } from 'Constants/Global.admin.constants.ts'\n\nimport { SellerType } from 'Types/global.types.ts'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\ninterface RequestOptionProps {\n param: string\n pageIndex: number\n pageSize: number\n}\n\nexport const getCustomsSellers = createAsyncThunk(\n 'customs/getCustomsSellers',\n async ({ param = '', pageIndex, pageSize }: RequestOptionProps) => {\n const url = `${CUSTOMS_API_ROOT}/seller?param=${param}&page=${pageIndex}&limit=${pageSize}`\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: SellerType[]; total: number }> = await axios.get(url, config)\n return {\n sellers: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const downloadCustomsDocument = async (filePath: string) => {\n const url = `${CUSTOMS_API_ROOT}/download${filePath}`\n const token = getAccessToken()\n const config = {\n responseType: 'blob',\n headers: {\n Authorization: token,\n },\n }\n\n try {\n // @ts-ignore\n const data: AxiosResponse = await axios.get(url, config)\n return data\n } catch (error) {\n handleError(error, true)\n }\n}\n","import { createSlice } from '@reduxjs/toolkit'\nimport { SellerType } from 'Types/global.types.ts'\nimport { getCustomsSellers } from 'Api/customs/customs.sellers.service.ts'\n\ninterface InitialStateProps {\n customsSellerList: SellerType[]\n loading: boolean\n total: number\n pageSize: number\n param: string\n}\n\nconst initialState: InitialStateProps = {\n customsSellerList: [],\n loading: false,\n total: 0,\n pageSize: 20,\n param: '',\n}\n\nconst customsSellersSlice = createSlice({\n name: 'customsSellers',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCustomsSellers.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsSellerList = action.payload.sellers\n state.loading = false\n }\n })\n .addCase(getCustomsSellers.rejected, (state) => {\n state.loading = false\n })\n .addCase(getCustomsSellers.pending, (state) => {\n state.loading = true\n })\n },\n})\n\nconst { actions } = customsSellersSlice\nexport const { setParam } = actions\nexport default customsSellersSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { PurchaseType } from 'Definitions/Purchase.type.ts'\nimport { GroupType } from 'Types/global.types.ts'\nimport { CustomFileType } from 'Definitions/CustomFile.type.ts'\n\nimport { CUSTOMS_API_ROOT } from 'Constants/Global.admin.constants.ts'\n\nimport { getAccessToken, getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\nexport const searchCustomsPurchases = createAsyncThunk(\n 'customs/searchCustomsPurchases',\n async ({\n param = '',\n pageIndex,\n pageSize,\n sort,\n }: {\n param: string\n pageIndex: number\n pageSize: number\n sort: 'ORDER_NUMBER' | 'CREATED_AT'\n }) => {\n let url = `${CUSTOMS_API_ROOT}/purchase/search`\n const queryParams = []\n\n if (param) {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType[]; total: number }> = await axios.get(url, config)\n return {\n purchases: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const getCustomsPurchase = createAsyncThunk('customs/getCustomsPurchase', async (purchaseId: string) => {\n const url = `${CUSTOMS_API_ROOT}/purchase/${purchaseId}`\n\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: PurchaseType }> = await axios.get(url, config)\n return {\n purchaseDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\nexport const getCustomsPurchaseCustomFiles = createAsyncThunk(\n 'customs/getCustomsPurchaseCustomFiles',\n async ({ entityId, group }: { entityId: string; group: GroupType }) => {\n const url = `${CUSTOMS_API_ROOT}/purchase/${entityId}/custom-file?group=${group}`\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType[] }> = await axios.get(url, getAxiosConfig())\n return {\n customFiles: data.data,\n group,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { PurchaseType } from 'Definitions/Purchase.type.ts'\n\nimport { searchCustomsPurchases } from 'Api/customs/customs.purchases.service.ts'\n\ninterface InitialStateProps {\n customsPurchaseList: PurchaseType[]\n loading: boolean\n total: number\n pageSize: number\n param: string\n sort: 'ORDER_NUMBER' | 'CREATED_AT'\n order: 'ASC' | 'DESC'\n}\n\nconst initialState: InitialStateProps = {\n customsPurchaseList: [],\n loading: false,\n total: 0,\n pageSize: 20,\n param: '',\n sort: 'CREATED_AT',\n order: 'DESC',\n}\n\nconst customsPurchasesSlice = createSlice({\n name: 'customsPurchases',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n setOrder: (state, action: PayloadAction<'ASC' | 'DESC'>) => {\n if (action.payload) {\n state.order = action.payload\n }\n },\n setSort: (state, action: PayloadAction<'ORDER_NUMBER' | 'CREATED_AT'>) => {\n if (action.payload) {\n state.sort = action.payload\n }\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(searchCustomsPurchases.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsPurchaseList = action.payload.purchases\n state.total = action.payload.total\n state.loading = false\n }\n })\n .addCase(searchCustomsPurchases.rejected, (state) => {\n state.loading = false\n })\n .addCase(searchCustomsPurchases.pending, (state) => {\n state.loading = true\n })\n },\n})\n\nconst { actions } = customsPurchasesSlice\nexport const { setParam, setOrder, setSort } = actions\nexport default customsPurchasesSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { GroupType } from 'Types/global.types.ts'\nimport { OrderType } from 'Definitions/Order.type.ts'\nimport { CustomFileType } from 'Definitions/CustomFile.type.ts'\n\nimport { CUSTOMS_API_ROOT } from 'Constants/Global.admin.constants.ts'\n\nimport { getAxiosConfig } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\n/**\n * Asynchronous action to fetch a list of customs orders from the customs API.\n *\n * This action utilizes `createAsyncThunk` to handle asynchronous requests for retrieving customs orders\n * with support for query filtering, pagination, and error handling.\n *\n * @constant\n * @type {ThunkAction}\n * @param {Object} args - An object containing the query parameters.\n * @param {string} args.param - The filter parameter for searching customs orders.\n * @param {number} args.pageIndex - The current page index for pagination.\n * @param {number} args.pageSize - The number of items per page for pagination.\n * @returns {Promise} A Promise resolving to an object containing the orders and the total count of orders.\n * @throws Will handle errors encountered during the API request.\n */\nexport const searchCustomsOrders = createAsyncThunk(\n 'customs/getCustomsOrders',\n async ({\n param = '',\n pageIndex,\n pageSize,\n sort,\n order,\n }: {\n param: string\n pageIndex: number\n pageSize: number\n sort: 'COMMAND' | 'CREATED_AT'\n order: 'ASC' | 'DESC'\n }) => {\n let url = `${CUSTOMS_API_ROOT}/certificate`\n\n const queryParams = []\n\n if (param) {\n queryParams.push(`param=${encodeURIComponent(param)}`)\n }\n\n if (sort) {\n queryParams.push(`sort=${encodeURIComponent(sort)}`)\n }\n\n if (order) {\n queryParams.push(`order=${encodeURIComponent(order)}`)\n }\n\n if (queryParams.length > 0) {\n const queryString = queryParams.join('&')\n url = `${url}?${queryString}&page=${pageIndex}&limit=${pageSize}`\n }\n\n try {\n const { data }: AxiosResponse<{ data: OrderType[]; total: number }> = await axios.get(url, getAxiosConfig())\n return {\n orders: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\n/**\n * An asynchronous function created using createAsyncThunk to fetch a customs order based on the provided certificate ID.\n *\n * This function sends a GET request to the CUSTOMS_API_ROOT, retrieves the specific customs order details\n * associated with the provided certificate ID, and returns the data in a structured format.\n *\n * In the event of an error during the API call, the error is handled and logged using the handleError function.\n *\n * @param {string} certificateId - The unique identifier of the certificate for which the customs order details are retrieved.\n * @returns {Promise<{orderDetails: CertificateType}>} A promise that resolves with the customs order details encapsulated within an object.\n */\nexport const getCustomsOrder = createAsyncThunk('customs/getCustomsOrder', async (certificateId: string) => {\n const url = `${CUSTOMS_API_ROOT}/certificate/${certificateId}`\n\n try {\n const { data }: AxiosResponse<{ data: OrderType }> = await axios.get(url, getAxiosConfig())\n return {\n orderDetails: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n\n/**\n * Redux thunk action for fetching custom files associated with a specific certificate.\n *\n * This function makes an asynchronous API call to retrieve the custom files\n * for a given certificate ID and group type. Upon successful response, it\n * returns an object containing the retrieved custom files and the group\n * information. If an error occurs during the request, the error is handled\n * appropriately.\n *\n * @constant\n * @type {AsyncThunk<{\n * customFiles: CustomFilesResponse,\n * group: GroupType\n * }, { certificateId: string, group: GroupType }, {}>}\n *\n * @param {Object} params - The parameters for the API request.\n * @param {string} params.certificateId - The unique identifier for the certificate.\n * @param {GroupType} params.group - The group type associated with the custom files.\n * @returns {Promise<{ customFiles: CustomFilesResponse, group: GroupType }>} The response object containing the custom files and group.\n */\nexport const getCustomsOrderCustomFiles = createAsyncThunk(\n 'customs/getCustomsOrderCustomFiles',\n async ({ entityId, group }: { entityId: string; group: GroupType }) => {\n const url = `${CUSTOMS_API_ROOT}/certificate/${entityId}/custom-file?group=${group}`\n\n try {\n const { data }: AxiosResponse<{ data: CustomFileType[] }> = await axios.get(url, getAxiosConfig())\n return {\n customFiles: data.data,\n group,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { OrderType } from 'Definitions/Order.type.ts'\n\nimport { searchCustomsOrders } from 'Api/customs/customs.orders.service.ts'\n\ninterface InitialStateProps {\n customsOrderList: OrderType[]\n loading: boolean\n total: number\n pageSize: number\n param: string\n sort: 'COMMAND' | 'CREATED_AT'\n order: 'ASC' | 'DESC'\n}\n\nconst initialState: InitialStateProps = {\n customsOrderList: [],\n loading: false,\n total: 0,\n pageSize: 20,\n param: '',\n sort: 'CREATED_AT',\n order: 'DESC',\n}\n\nconst customsOrdersSlice = createSlice({\n name: 'customsOrders',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n setOrder: (state, action: PayloadAction<'ASC' | 'DESC'>) => {\n if (action.payload) {\n state.order = action.payload\n }\n },\n setSort: (state, action: PayloadAction<'COMMAND' | 'CREATED_AT'>) => {\n if (action.payload) {\n state.sort = action.payload\n }\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(searchCustomsOrders.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsOrderList = action.payload.orders\n state.total = action.payload.total\n state.loading = false\n }\n })\n .addCase(searchCustomsOrders.rejected, (state) => {\n state.loading = false\n })\n .addCase(searchCustomsOrders.pending, (state) => {\n state.loading = true\n })\n },\n})\n\nconst { actions } = customsOrdersSlice\nexport const { setParam, setOrder, setSort } = actions\nexport default customsOrdersSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { CustomsOfficerType } from 'Schemas/customs.types.ts'\nimport { AuthResponse } from 'Types/admin/admin'\n\nimport { CUSTOMS_API_ROOT } from 'Constants/Global.admin.constants.ts'\n\nimport { handleError } from 'Helpers/errors.helper.ts'\nimport { setUserToken } from 'Helpers/auth.helpers.ts'\nimport { getAccessToken } from 'Utils/auth.util.ts'\n\ninterface AuthCustomsProps {\n email: string\n password: string\n}\n\n/**\n * Signin the customs officer\n * @param options\n */\nexport const signInCustoms = async (options: AuthCustomsProps) => {\n const url = `${CUSTOMS_API_ROOT}/auth/signin`\n\n try {\n const { data }: AxiosResponse = await axios.post(url, options)\n const { token } = data.data\n setUserToken(token)\n return token\n } catch (error) {\n handleError(error, true)\n }\n}\n\n/**\n * Get customs officer\n */\nexport const getCustomsOfficer = createAsyncThunk('customs/getCustomsOfficer', async () => {\n const url = `${CUSTOMS_API_ROOT}/profile`\n const token = getAccessToken()\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse<{ data: CustomsOfficerType }> = await axios.get(url, config)\n return {\n customsOfficer: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { CustomsOfficerType } from 'Schemas/customs.types.ts'\nimport { getCustomsOfficer } from 'Api/customs/customs.auth.service.ts'\n\ninterface InitialStateProps {\n customsOfficer: CustomsOfficerType\n loading: boolean\n}\n\nconst initialState: InitialStateProps = {\n customsOfficer: null,\n loading: false,\n}\n\nconst customsOfficerSlice = createSlice({\n name: 'customsOfficer',\n initialState,\n reducers: {\n resetCustomsOfficer: (state) => {\n state.customsOfficer = null\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCustomsOfficer.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsOfficer = action.payload.customsOfficer\n state.loading = false\n }\n })\n .addCase(getCustomsOfficer.pending, (state) => {\n state.loading = true\n })\n .addCase(getCustomsOfficer.rejected, (state) => {\n state.loading = false\n })\n },\n})\n\nconst { actions } = customsOfficerSlice\nexport const { resetCustomsOfficer } = actions\nexport default customsOfficerSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { OrderType } from 'Definitions/Order.type.ts'\nimport { DocumentGroup } from 'Types/admin/admin'\nimport { CustomFileType } from 'Definitions/CustomFile.type.ts'\n\nimport { getCustomsOrder, getCustomsOrderCustomFiles } from 'Api/customs/customs.orders.service.ts'\n\ninterface InitialStateProps {\n customsOrderDetails: OrderType\n loading: boolean\n orderCustomFiles: CustomFileType[]\n orderCarCustomFiles: CustomFileType[]\n orderUserCustomFiles: CustomFileType[]\n}\n\nconst initialState: InitialStateProps = {\n customsOrderDetails: null,\n loading: false,\n orderCustomFiles: [],\n orderCarCustomFiles: [],\n orderUserCustomFiles: [],\n}\n\nconst customsOrderDetailsSlice = createSlice({\n name: 'customsOrderDetails',\n initialState,\n reducers: {\n resetCustomsOrderDetailsState: (state) => {\n state.customsOrderDetails = null\n state.orderCustomFiles = []\n state.orderCarCustomFiles = []\n state.orderUserCustomFiles = []\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCustomsOrder.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsOrderDetails = action.payload.orderDetails\n state.loading = false\n }\n })\n .addCase(getCustomsOrder.rejected, (state) => {\n state.loading = false\n })\n .addCase(getCustomsOrder.pending, (state) => {\n state.loading = true\n })\n .addCase(getCustomsOrderCustomFiles.fulfilled, (state, action) => {\n if (action.payload) {\n const { group } = action.payload\n switch (group as DocumentGroup) {\n case 'CERTIFICATE_DOCS': {\n state.orderCustomFiles = action.payload.customFiles\n break\n }\n case 'USER_DOCS': {\n state.orderUserCustomFiles = action.payload.customFiles\n break\n }\n case 'CAR_DOCS': {\n state.orderCarCustomFiles = action.payload.customFiles\n break\n }\n }\n }\n })\n },\n})\n\nconst { actions } = customsOrderDetailsSlice\nexport const { resetCustomsOrderDetailsState } = actions\nexport default customsOrderDetailsSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { PurchaseType } from 'Definitions/Purchase.type.ts'\nimport { DocumentGroup } from 'Types/admin/admin'\nimport { CustomFileType } from 'Definitions/CustomFile.type.ts'\n\nimport { getCustomsPurchase, getCustomsPurchaseCustomFiles } from 'Api/customs/customs.purchases.service.ts'\n\ninterface InitialStateProps {\n customsPurchaseDetails: PurchaseType\n loading: boolean\n purchaseCustomFiles: CustomFileType[]\n purchaseCarCustomFiles: CustomFileType[]\n purchaseUserCustomFiles: CustomFileType[]\n}\n\nconst initialState: InitialStateProps = {\n customsPurchaseDetails: null,\n loading: false,\n purchaseCustomFiles: [],\n purchaseCarCustomFiles: [],\n purchaseUserCustomFiles: [],\n}\n\nconst customsPurchaseDetailsSlice = createSlice({\n name: 'customsPurchaseDetails',\n initialState,\n reducers: {\n resetCustomsPurchaseDetailsState: (state) => {\n state.customsPurchaseDetails = null\n state.purchaseCustomFiles = []\n state.purchaseCarCustomFiles = []\n state.purchaseUserCustomFiles = []\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCustomsPurchase.fulfilled, (state, action) => {\n if (action.payload) {\n state.customsPurchaseDetails = action.payload.purchaseDetails\n state.loading = false\n }\n })\n .addCase(getCustomsPurchase.rejected, (state) => {\n state.loading = false\n })\n .addCase(getCustomsPurchase.pending, (state) => {\n state.loading = true\n })\n .addCase(getCustomsPurchaseCustomFiles.fulfilled, (state, action) => {\n if (action.payload) {\n const { group } = action.payload\n switch (group as DocumentGroup) {\n case 'CERTIFICATE_DOCS': {\n state.purchaseCustomFiles = action.payload.customFiles\n break\n }\n case 'USER_DOCS': {\n state.purchaseUserCustomFiles = action.payload.customFiles\n break\n }\n case 'CAR_DOCS': {\n state.purchaseCarCustomFiles = action.payload.customFiles\n break\n }\n }\n }\n })\n },\n})\n\nconst { actions } = customsPurchaseDetailsSlice\nexport const { resetCustomsPurchaseDetailsState } = actions\nexport default customsPurchaseDetailsSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { CustomFileType } from 'Types/admin/admin'\nimport { BuyerApiType } from 'Schemas/buyer.types.ts'\n\nimport {\n getAdminBuyerCustomFiles,\n searchAdminBuyers,\n updateAdminBuyerByUserId,\n updateAdminBuyerStatus,\n updateAdminBuyerType,\n uploadAdminBuyersCustomFile,\n} from 'Api/admin/admin.buyer.service.ts'\n\ninterface InitialStateProps {\n buyerList: BuyerApiType[]\n buyerCustomFiles: CustomFileType[]\n loading: boolean\n total: number\n pageSize: number\n param: string\n}\n\nconst initialState: InitialStateProps = {\n buyerList: [],\n buyerCustomFiles: [],\n loading: false,\n total: 0,\n pageSize: 20,\n param: '',\n}\n\nconst adminBuyerSlice = createSlice({\n name: 'adminBuyerSlice',\n initialState,\n reducers: {\n setParam: (state, action) => {\n state.param = action.payload\n },\n resetBuyerList: (state) => {\n state.buyerList = []\n state.buyerCustomFiles = []\n state.loading = false\n state.total = 0\n state.pageSize = 20\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(searchAdminBuyers.fulfilled, (state, action) => {\n if (action.payload?.adminBuyerList) {\n state.buyerList = action.payload.adminBuyerList\n state.total = action.payload.total\n state.loading = false\n }\n })\n .addCase(searchAdminBuyers.pending, (state) => {\n state.loading = true\n })\n .addCase(searchAdminBuyers.rejected, (state) => {\n state.loading = false\n })\n .addCase(updateAdminBuyerType.fulfilled, (state, action) => {\n if (action.payload) {\n state.buyerList = state.buyerList.map((buyer) => {\n if (buyer.id === action.payload.buyer.id) {\n return action.payload.buyer\n }\n return buyer\n })\n }\n })\n .addCase(updateAdminBuyerStatus.fulfilled, (state, action) => {\n if (action.payload) {\n state.buyerList = state.buyerList.map((buyer) => {\n if (buyer.id === action.payload.buyer.id) {\n return action.payload.buyer\n }\n return buyer\n })\n }\n })\n .addCase(updateAdminBuyerByUserId.fulfilled, (state, action) => {\n if (action.payload) {\n state.buyerList = state.buyerList.map((buyer) => {\n if (buyer.id === action.payload.buyer.id) {\n return action.payload.buyer\n }\n return buyer\n })\n }\n })\n .addCase(getAdminBuyerCustomFiles.fulfilled, (state, action) => {\n if (action.payload?.customFiles) {\n state.buyerCustomFiles = action.payload.customFiles\n }\n })\n .addCase(uploadAdminBuyersCustomFile.fulfilled, (state, action) => {\n if (action.payload?.customFile) {\n state.buyerCustomFiles = [action.payload.customFile, ...state.buyerCustomFiles]\n }\n })\n },\n})\n\nconst { actions } = adminBuyerSlice\nexport const { resetBuyerList, setParam } = actions\nexport default adminBuyerSlice.reducer\n","import axios, { AxiosResponse } from 'axios'\nimport { createAsyncThunk } from '@reduxjs/toolkit'\n\nimport { DeblocageListResponseType, DeblocageResponse } from 'Types/admin/admin'\n\nimport { ADMIN_API_URL } from 'Constants/Global.admin.constants.ts'\n\nimport { getAccessToken } from 'Utils/auth.util.ts'\nimport { handleError } from 'Helpers/errors.helper.ts'\n\nexport const getDeblocageList = createAsyncThunk(\n 'admin/getDeblocageList',\n async ({ pageIndex, pageSize }: { pageIndex: number; pageSize: number }) => {\n const token = getAccessToken()\n const url = `${ADMIN_API_URL.DEBLOCAGE.ROOT}?page=${pageIndex}&limit=${pageSize}`\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.get(url, config)\n return {\n deblocageList: data.data,\n total: data.total,\n }\n } catch (error) {\n handleError(error, true)\n }\n }\n)\n\nexport const createDeblocage = createAsyncThunk('admin/createDeblocage', async () => {\n const token = getAccessToken()\n const url = ADMIN_API_URL.DEBLOCAGE.ROOT\n const config = {\n headers: {\n Authorization: token,\n },\n }\n\n try {\n const { data }: AxiosResponse = await axios.post(url, null, config)\n return {\n deblocage: data.data,\n }\n } catch (error) {\n handleError(error, true)\n }\n})\n","import { createSlice } from '@reduxjs/toolkit'\nimport { DeblocageType } from 'Types/admin/admin'\nimport { createDeblocage, getDeblocageList } from 'Api/admin/admin.deblocage.service.ts'\n\ninterface InitialStateProps {\n adminDeblocageList: DeblocageType[]\n loading: boolean\n total: number\n pageSize: number\n}\n\nconst initialState: InitialStateProps = {\n adminDeblocageList: [],\n loading: false,\n total: 0,\n pageSize: 20,\n}\n\nconst adminDeblocageSlice = createSlice({\n name: 'adminDeblocage',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(getDeblocageList.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminDeblocageList = action.payload.deblocageList\n state.loading = false\n state.total = action.payload.total\n }\n })\n .addCase(getDeblocageList.rejected, (state) => {\n state.loading = false\n })\n .addCase(getDeblocageList.pending, (state) => {\n state.loading = true\n })\n .addCase(createDeblocage.fulfilled, (state, action) => {\n if (action.payload) {\n state.adminDeblocageList = [action.payload.deblocage, ...state.adminDeblocageList]\n }\n })\n },\n})\n\nexport default adminDeblocageSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { Eur1CounterType } from 'Types/admin/admin'\nimport { PaginationProps } from 'Types/global.types.ts'\n\nimport { getReusableEur1List } from 'Api/admin/admin.eur1Counter.service.ts'\n\ninterface InitialStateProps {\n reusableEur1List: Eur1CounterType[]\n loading: boolean\n total: number\n pageIndex: number\n pageSize: number\n}\n\nconst initialState: InitialStateProps = {\n reusableEur1List: [],\n loading: false,\n total: 0,\n pageIndex: 0,\n pageSize: 20,\n}\n\nconst adminReusableEur1ListSlice = createSlice({\n name: 'adminReusableEur1ListSlice',\n initialState,\n reducers: {\n setReusableEur1PageIndex: (state, action: PayloadAction) => {\n state.pageIndex = action.payload.pageIndex\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getReusableEur1List.fulfilled, (state, action) => {\n if (action.payload) {\n state.reusableEur1List = action.payload.reusableEur1CounterList\n state.total = action.payload.total\n }\n state.loading = false\n })\n .addCase(getReusableEur1List.pending, (state) => {\n state.loading = true\n })\n .addCase(getReusableEur1List.rejected, (state) => {\n state.loading = false\n })\n },\n})\n\nconst { actions } = adminReusableEur1ListSlice\n\nexport const { setReusableEur1PageIndex } = actions\n\nexport default adminReusableEur1ListSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\n\nimport { getCarValueByMonth, getCarValueByYear } from 'Api/admin/admin.statistic.service.ts'\n\ntype ValueProps = {\n totalValueFrance: number\n totalValueOutOfFrance: number\n}\n\ninterface InitialStateProps {\n carValueByMonth: ValueProps\n carValueByYear: ValueProps\n month: number\n year: number\n}\n\nconst currentTime = new Date()\nconst month = currentTime?.getMonth() + 1\nconst year = currentTime?.getFullYear()\n\nconst initialState: InitialStateProps = {\n carValueByMonth: {\n totalValueFrance: 0,\n totalValueOutOfFrance: 0,\n },\n carValueByYear: {\n totalValueFrance: 0,\n totalValueOutOfFrance: 0,\n },\n month,\n year,\n}\n\nexport const carValueStatisticSlice = createSlice({\n name: 'carValueStatisticSlice',\n initialState,\n reducers: {\n setYear: (state, action) => {\n state.year = action.payload\n },\n setMonth: (state, action) => {\n state.month = action.payload\n },\n resetStatistic: (state) => {\n state.carValueByMonth = {\n totalValueFrance: 0,\n totalValueOutOfFrance: 0,\n }\n state.carValueByYear = {\n totalValueFrance: 0,\n totalValueOutOfFrance: 0,\n }\n state.month = month\n state.year = year\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCarValueByMonth.fulfilled, (state, action) => {\n if (action.payload) {\n state.carValueByMonth = {\n totalValueFrance: action.payload.totalValueFrance,\n totalValueOutOfFrance: action.payload.totalValueOutOfFrance\n }\n }\n })\n .addCase(getCarValueByYear.fulfilled, (state, action) => {\n if (action.payload) {\n state.carValueByYear = {\n totalValueFrance: action.payload.totalValueFrance,\n totalValueOutOfFrance: action.payload.totalValueOutOfFrance\n }\n }\n })\n },\n})\n\nexport const { setYear, setMonth, resetStatistic } = carValueStatisticSlice.actions\nexport default carValueStatisticSlice.reducer\n","import { configureStore } from '@reduxjs/toolkit'\n\nimport drawerReducer from './drawer/drawer.slice.ts'\nimport userReducer from './user/user.slice.ts'\nimport notificationReducer from './notifications/notifications.slice.ts'\nimport shippingAddress from './shippingAddress/shippingAddress.slice.ts'\nimport buyerSlice from './buyer/buyer.slice.ts'\nimport sellerSlice from 'Stores/seller/seller.slice.ts'\nimport certificatesSlice from 'Stores/certificates/certificates.slice.ts'\nimport purchaseSlice from 'Stores/purchase/purchase.slice.ts'\nimport dhlSlice from 'Stores/dhl/dhl.slice.ts'\nimport adminListSlice from 'Stores/adminList/adminList.slice.ts'\nimport adminPurchasesSlice from 'Stores/adminPurchases/adminPurchases.slice.ts'\nimport adminCustomersSlice from 'Stores/adminCustomers/adminCustomers.slice.ts'\nimport adminOrdersSlice from 'Stores/adminOrders/adminOrders.slice.ts'\nimport adminStoragePlacesSlice from 'Stores/adminStoragePlaces/adminStoragePlaces.slice.ts'\nimport adminCustomsCrossingSlice from 'Stores/adminCustomsCrossing/adminCustomsCrossing.slice.ts'\nimport adminCustomsVariableSlice from 'Stores/adminCustomsVariable/adminCustomsVariable.slice.ts'\nimport adminSellersSlice from 'Stores/adminSellers/adminSellers.slice.ts'\nimport adminForwardersSlice from 'Stores/adminForwarders/adminForwarders.slice.ts'\nimport adminEur1CounterSlice from 'Stores/adminEur1Counter/adminEur1Counter.slice.ts'\nimport adminBlacklistSlice from 'Stores/adminBlacklist/adminBlacklist.slice.ts'\nimport portalSlice from 'Stores/portal/portal.slice.ts'\nimport statisticSlice from 'Stores/adminStatistic/adminStatistic.slice.ts'\nimport adminDhlSlice from 'Stores/adminDhl/adminDhl.slice.ts'\nimport languageSlice from 'Stores//language/languageSlice.ts'\nimport adminDashboardSlice from 'Stores/adminDashboard/adminDashboard.slice.ts'\nimport adminPricesSlice from 'Stores/adminPrices/adminPrices.slice.ts'\nimport auctionHouseSlice from 'Stores/auctionHouse/auctionHouse.slice.ts'\nimport adminAuctionHouseSlice from 'Stores/adminAuctionHouse/adminAuctionHouse.slice.ts'\nimport adminCustomsOfficersSlice from 'Stores/adminCustomsOfficers/adminCustomsOfficers.slice.ts'\nimport customsSellersSlice from 'Stores/customsSellers/customsSellers.slice.ts'\nimport customsPurchasesSlice from 'Stores/customsPurchases/customsPurchases.slice.ts'\nimport customsOrdersSlice from 'Stores/customsOrders/customsOrders.slice.ts'\nimport customsOfficerSlice from 'Stores/customsOfficer/customsOfficer.slice.ts'\nimport customsOrderDetailsSlice from 'Stores/customsOrderDetails/customsOrderDetails.slice.ts'\nimport customsPurchaseDetailsSlice from 'Stores/customsPurchaseDetails/customsPurchaseDetails.slice.ts'\nimport adminBuyerSlice from 'Stores/adminBuyer/adminBuyer.slice.ts'\nimport adminDeblocageSlice from 'Stores/adminDeblocage/adminDeblocage.slice.ts'\nimport adminReusableEur1ListSlice from 'Stores/adminReusableEur1List/adminReusableEur1List.slice.ts'\nimport adminCarValueStatisticSlice from 'Stores/adminCarValueStatistic/adminCarValueStatistic.slice.ts'\n\nexport const store = configureStore({\n reducer: {\n drawer: drawerReducer,\n user: userReducer,\n notifications: notificationReducer,\n shippingAddress: shippingAddress,\n buyer: buyerSlice,\n seller: sellerSlice,\n certificatesSlice,\n purchaseSlice,\n dhlSlice,\n adminListSlice,\n adminPurchasesSlice,\n adminCustomersSlice,\n adminStoragePlacesSlice,\n adminOrdersSlice,\n adminCustomsCrossingSlice,\n adminCustomsVariableSlice,\n adminSellersSlice,\n adminForwardersSlice,\n adminEur1CounterSlice,\n adminBlacklistSlice,\n portalSlice,\n statisticSlice,\n adminDhlSlice,\n languageSlice,\n adminDashboardSlice,\n adminPricesSlice,\n auctionHouseSlice,\n adminAuctionHouseSlice,\n adminCustomsOfficersSlice,\n customsSellersSlice,\n customsPurchasesSlice,\n customsOrdersSlice,\n customsOfficerSlice,\n customsOrderDetailsSlice,\n customsPurchaseDetailsSlice,\n adminBuyerSlice,\n adminDeblocageSlice,\n adminReusableEur1ListSlice,\n adminCarValueStatisticSlice,\n },\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false }),\n})\n\nexport type AppDispatch = typeof store.dispatch\nexport type RootState = ReturnType\n","import { DefaultTheme } from 'styled-components'\n\ndeclare module 'styled-components' {\n export interface DefaultTheme {\n colors: {\n primary: {\n default: string\n light: string\n medium: string\n strong: string\n dark: string\n }\n secondary: {\n extraDark: string\n dark: string\n medium: string\n light: string\n }\n tertiary: {\n dark: string\n medium: string\n light: string\n }\n situational: {\n success: string\n warning: string\n error: string\n }\n state: {\n success: string\n successLight: string\n }\n grays: {\n gray900: string\n gray800: string\n gray700: string\n gray600: string\n gray500: string\n gray400: string\n gray300: string\n gray200: string\n gray100: string\n white: string\n black: string\n }\n }\n fonts: {\n Inter: string\n }\n }\n}\n\nexport const theme: DefaultTheme = {\n colors: {\n primary: {\n default: '#5352ED',\n light: '#EEEEFD',\n medium: '#CBCBFA',\n strong: '#9897F4',\n dark: '#3837B4',\n },\n secondary: {\n extraDark: '#e02231',\n dark: '#FF4757',\n medium: '#FF919A',\n light: '#FFC8CD',\n },\n tertiary: {\n dark: '#2F3542',\n medium: '#4C5363',\n light: '#F1F2F6',\n },\n situational: {\n success: '#80C570',\n warning: '#F5BA5C',\n error: '#E24840',\n },\n state: {\n success: '#83c775',\n successLight: '#c4f7ba',\n },\n grays: {\n gray900: '#0F1729',\n gray800: '#1B283A',\n gray700: '#333F55',\n gray600: '#455368',\n gray500: '#656F86',\n gray400: '#97A1B4',\n gray300: '#CFD5DD',\n gray200: '#EAECF0',\n gray100: '#F2F4F7',\n white: '#ffffff',\n black: '#000000',\n },\n },\n fonts: {\n Inter: 'Inter',\n },\n}\n","import React, { Suspense } from 'react'\nimport ReactDOM from 'react-dom/client'\nimport { ThemeProvider } from 'styled-components'\nimport { Provider } from 'react-redux'\n\nimport App from './App.tsx'\n\nimport './i18n.ts'\n\nimport { store } from './stores/store.ts'\nimport { theme } from './styles/Theme.ts'\nimport { GlobalStyles } from './styles/Global.ts'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n \n \n \n \n \n \n \n \n \n \n)\n"],"file":"assets/index-53ef0703.js"}