{"version":3,"sources":["constants/userConstants.js","constants/productConstants.js","constants/cartConstants.js","constants/orderConstants.js","store.js","reducers/userReducers.js","reducers/productReducer.js","reducers/cartReducers.js","reducers/orderReducers.js","constants/enviromentConstants.js","components/Header.js","actions/userActions.js","components/Footer.js","database.js","components/KuarsisCarousel.js","components/KuarsisMainWithSides.js","screens/HomeScreen.js","components/Message.js","components/Loader.js","components/FormContainer.js","screens/LoginScreen.js","screens/TechScreen.js","screens/PixanScreen.js","screens/TaanahScreen.js","screens/RegisterScreen.js","screens/ProfileScreen.js","components/Product.js","components/Paginate.js","components/Meta.js","actions/productActions.js","screens/PixanHomeScreen.js","actions/cartActions.js","screens/CartScreen.js","components/CheckoutSteps.js","screens/ShippingScreen.js","screens/PaymentScreen.js","actions/orderActions.js","screens/PlaceOrderScreen.js","screens/OrderScreen.js","screens/ProductListScreen.js","libs/imagesLib.js","screens/ProductEditScreen.js","App.js","reportWebVitals.js","index.js"],"names":["USER_LOGIN_REQUEST","USER_LOGIN_SUCCESS","USER_LOGIN_FAILED","USER_LOGOUT","USER_REGISTER_REQUEST","USER_REGISTER_SUCCESS","USER_REGISTER_FAILED","USER_REGISTER_RESET","USER_DETAILS_REQUEST","USER_DETAILS_SUCCESS","USER_DETAILS_FAILED","USER_DETAILS_RESET","USER_UPDATE_PROFILE_REQUEST","USER_UPDATE_PROFILE_SUCCESS","USER_UPDATE_PROFILE_FAILED","USER_UPDATE_PROFILE_RESET","USER_LIST_REQUEST","USER_LIST_SUCCESS","USER_LIST_FAILED","USER_LIST_RESET","USER_DELETE_REQUEST","USER_DELETE_SUCCESS","USER_DELETE_FAILED","USER_UPDATE_REQUEST","USER_UPDATE_SUCCESS","USER_UPDATE_FAILED","USER_UPDATE_RESET","PRODUCT_LIST_REQUEST","PRODUCT_LIST_SUCCESS","PRODUCT_LIST_FAIL","PRODUCT_DETAILS_REQUEST","PRODUCT_DETAILS_SUCCESS","PRODUCT_DETAILS_FAIL","PRODUCT_DELETE_REQUEST","PRODUCT_DELETE_SUCCESS","PRODUCT_DELETE_FAIL","PRODUCT_CREATE_REQUEST","PRODUCT_CREATE_SUCCESS","PRODUCT_CREATE_FAIL","PRODUCT_CREATE_RESET","PRODUCT_UPDATE_REQUEST","PRODUCT_UPDATE_SUCCESS","PRODUCT_UPDATE_FAIL","PRODUCT_UPDATE_RESET","PRODUCT_CREATE_REVIEW_REQUEST","PRODUCT_CREATE_REVIEW_SUCCESS","PRODUCT_CREATE_REVIEW_FAIL","PRODUCT_CREATE_REVIEW_RESET","PRODUCT_TOP_REQUEST","PRODUCT_TOP_SUCCESS","PRODUCT_TOP_FAIL","CART_ADD_ITEM","CART_REMOVE_ITEM","CART_SAVE_SHIPPING_ADDRESS","CART_SAVE_PAYMENT_METHOD","CART_RESET","ORDER_CREATE_REQUEST","ORDER_CREATE_SUCCESS","ORDER_CREATE_FAIL","ORDER_CREATE_PAID","ORDER_DETAILS_REQUEST","ORDER_DETAILS_SUCCESS","ORDER_DETAILS_FAIL","ORDER_PAY_REQUEST","ORDER_PAY_SUCCESS","ORDER_PAY_FAIL","ORDER_PAY_RESET","ORDER_LIST_MY_REQUEST","ORDER_LIST_MY_SUCCESS","ORDER_LIST_MY_FAIL","ORDER_LIST_MY_RESET","ORDER_LIST_REQUEST","ORDER_LIST_SUCCESS","ORDER_LIST_FAIL","ORDER_DELIVER_REQUEST","ORDER_DELIVER_SUCCESS","ORDER_DELIVER_FAIL","ORDER_DELIVER_RESET","ORDER_DELIVER_DOWNLOAD_REQUEST","ORDER_DELIVER_DOWNLOAD_SUCCESS","ORDER_DELIVER_DOWNLOAD_FAIL","ORDER_DELIVER_DOWNLOAD_RESET","reducer","combineReducers","userLogin","state","action","type","loading","logedout","userInfo","payload","error","userRegister","userDetails","user","userUpdateProfile","success","userList","users","userDelete","userUpdate","productList","products","pages","page","productDetails","product","reviews","productDelete","productCreate","productUpdate","productReviewCreate","productTopRated","cart","cartItems","shippingAddress","item","existItem","find","x","map","filter","paymentMethod","orderCreate","orderPaid","order","orderDetails","orderItems","orderPay","orderListMy","orders","orderList","orderDeliver","orderDeliverDownloadURL","productSignedURL","initialState","localStorage","getItem","JSON","parse","middleware","thunk","store","createStore","composeWithDevTools","applyMiddleware","BACKEND_ENDPOINT","KUARSIS_PUBLIC_BUCKET_URL","Header","history","dispatch","useDispatch","useSelector","useEffect","push","className","Navbar","id","bg","variant","expand","collapseOnSelect","Container","Brand","href","src","KUARSIS_PUBLIC_STATIC_FOLDER","alt","width","height","fluid","style","marginLeft","Toggle","Collapse","Nav","NavDropdown","title","to","Item","Link","name","split","onClick","removeItem","isAdmin","Footer","Row","Col","PageSettings","_id","pageName","title1","description1","title2","description2","title3","description3","descId","desc","sidebar","sidebarId","sidebarText","linkToCompanyWebsite","settings","priority","label","subLabel","imageSrc","KuarsisCarousel","pageToDisplay","carouselSettings","carousel","sort","first","second","Carousel","pause","fade","setting","display","Caption","marginRight","rounded","KuarsisMainWithSides","pageSettings","xs","description","toString","HomeScreen","Message","children","Alert","defaultProps","Loader","Spinner","animation","role","margin","FormContainer","md","LoginScreen","location","useState","email","setEmail","password","setPassword","redirect","search","Form","onSubmit","e","preventDefault","a","config","headers","console","log","axios","post","data","setItem","stringify","response","message","login","Group","controlId","Label","Control","placeholder","value","onChange","target","Button","TechScreen","PixanScreen","TaanahScreen","RegisterScreen","setName","confirmPassword","setConfirmPassword","setMessage","register","ProfileScreen","getState","Authorization","token","get","put","updateUserProfile","Product","Card","Img","image","Body","Title","as","Text","price","Paginate","keyword","Pagination","Array","keys","activeLabel","active","Meta","keywords","Helmet","content","listProducts","pageNumber","PixanHomeScreen","match","params","sm","lg","xl","addToCart","qty","countInStock","CartScreen","productId","Number","removeFromCartHandler","removeFromCart","length","ListGroup","disabled","selected","reduce","acc","toFixed","CheckoutSteps","step1","step2","step3","step4","ShippingScreen","address","setAddress","city","setCity","postalCode","setPostalCode","country","setCountry","required","PaymentScreen","setPaymentMethod","Check","checked","deliverOrder","PlaceOrderScreen","addDecimals","num","Math","round","itemsPrice","taxPrice","totalPrice","agreeWithLicense","index","createOrder","shippingPrice","alert","numbered","htmlFor","OrderScreen","orderId","sdkReady","setSdkReady","loadingPay","successPay","loadingDeliver","successDeliver","downloadSuccess","eProductSignedURL","addPayPalScript","clientId","script","document","createElement","async","onload","body","appendChild","isPaid","window","paypal","link","setAttribute","click","remove","fileDownload","productIdToDownload","downloadOrderedProduct","paidAt","print","amount","onSuccess","paymentResult","payOrder","ProductListScreen","loadingDelete","errorDelete","successDelete","loadingCreate","errorCreate","successCreate","createdProduct","deleteHandler","confirm","delete","deleteProduct","Table","striped","bordered","hover","responsive","category","brand","convert","file","watermarkText","Promise","resolve","reject","reverse","includes","toLowerCase","size","imageType","imgWidth","imgHeight","fileName","img","Image","elem","ctx","getContext","drawImage","font","fillStyle","fillText","canvas","toBlob","blob","newFile","File","lastModified","Date","now","URL","createObjectURL","ProductEditScreen","setPrice","setImage","setBrand","setCategory","setCountInStock","setDescription","uploading","setUploading","loadingUpdate","errorUpdate","successUpdate","isCreated","uploadFileHandler","files","preSignedPublicURL","preSignedPrivateURL","fileS3Name","then","watermarkedImage","onUploadProgress","e2","percentCompleted","loaded","total","catch","updateProduct","App","dotenv","component","path","exact","PixanProductScreen","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.359c2a7a.chunk.js","sourcesContent":["export const USER_LOGIN_REQUEST = 'USER_LOGIN_REQUEST'\r\nexport const USER_LOGIN_SUCCESS = 'USER_LOGIN_SUCCESS'\r\nexport const USER_LOGIN_FAILED = 'USER_LOGIN_FAILED'\r\nexport const USER_LOGOUT = 'USER_LOGOUT'\r\n\r\nexport const USER_REGISTER_REQUEST = 'USER_REGISTER_REQUEST'\r\nexport const USER_REGISTER_SUCCESS = 'USER_REGISTER_SUCCESS'\r\nexport const USER_REGISTER_FAILED = 'USER_REGISTER_FAILED'\r\nexport const USER_REGISTER_RESET = 'USER_REGISTER_RESET'\r\n\r\nexport const USER_DETAILS_REQUEST = 'USER_DETAILS_REQUEST'\r\nexport const USER_DETAILS_SUCCESS = 'USER_DETAILS_SUCCESS'\r\nexport const USER_DETAILS_FAILED = 'USER_DETAILS_FAILED'\r\nexport const USER_DETAILS_RESET = 'USER_DETAILS_RESET'\r\n\r\nexport const USER_UPDATE_PROFILE_REQUEST = 'USER_UPDATE_PROFILE_REQUEST'\r\nexport const USER_UPDATE_PROFILE_SUCCESS = 'USER_UPDATE_PROFILE_SUCCESS'\r\nexport const USER_UPDATE_PROFILE_FAILED = 'USER_UPDATE_PROFILE_FAILED'\r\nexport const USER_UPDATE_PROFILE_RESET = 'USER_UPDATE_PROFILE_RESET'\r\n\r\nexport const USER_LIST_REQUEST = 'USER_LIST_REQUEST'\r\nexport const USER_LIST_SUCCESS = 'USER_LIST_SUCCESS'\r\nexport const USER_LIST_FAILED = 'USER_LIST_FAILED'\r\nexport const USER_LIST_RESET = 'USER_LIST_RESET'\r\n\r\nexport const USER_DELETE_REQUEST = 'USER_DELETE_REQUEST'\r\nexport const USER_DELETE_SUCCESS = 'USER_DELETE_SUCCESS'\r\nexport const USER_DELETE_FAILED = 'USER_DELETE_FAILED'\r\n\r\nexport const USER_UPDATE_REQUEST = 'USER_UPDATE_REQUEST'\r\nexport const USER_UPDATE_SUCCESS = 'USER_UPDATE_SUCCESS'\r\nexport const USER_UPDATE_FAILED = 'USER_UPDATE_FAILED'\r\nexport const USER_UPDATE_RESET = 'USER_UPDATE_RESET'\r\n","export const PRODUCT_LIST_REQUEST = 'PRODUCT_LIST_REQUEST'\r\nexport const PRODUCT_LIST_SUCCESS = 'PRODUCT_LIST_SUCCESS'\r\nexport const PRODUCT_LIST_FAIL = 'PRODUCT_LIST_FAIL'\r\n\r\nexport const PRODUCT_DETAILS_REQUEST = 'PRODUCT_DETAILS_REQUEST'\r\nexport const PRODUCT_DETAILS_SUCCESS = 'PRODUCT_DETAILS_SUCCESS'\r\nexport const PRODUCT_DETAILS_FAIL = 'PRODUCT_DETAILS_FAIL'\r\n\r\nexport const PRODUCT_DELETE_REQUEST = 'PRODUCT_DELETE_REQUEST'\r\nexport const PRODUCT_DELETE_SUCCESS = 'PRODUCT_DELETE_SUCCESS'\r\nexport const PRODUCT_DELETE_FAIL = 'PRODUCT_DELETE_FAIL'\r\n\r\nexport const PRODUCT_CREATE_REQUEST = 'PRODUCT_CREATE_REQUEST'\r\nexport const PRODUCT_CREATE_SUCCESS = 'PRODUCT_CREATE_SUCCESS'\r\nexport const PRODUCT_CREATE_FAIL = 'PRODUCT_CREATE_FAIL'\r\nexport const PRODUCT_CREATE_RESET = 'PRODUCT_CREATE_RESET'\r\n\r\nexport const PRODUCT_UPDATE_REQUEST = 'PRODUCT_UPDATE_REQUEST'\r\nexport const PRODUCT_UPDATE_SUCCESS = 'PRODUCT_UPDATE_SUCCESS'\r\nexport const PRODUCT_UPDATE_FAIL = 'PRODUCT_UPDATE_FAIL'\r\nexport const PRODUCT_UPDATE_RESET = 'PRODUCT_UPDATE_RESET'\r\n\r\nexport const PRODUCT_CREATE_REVIEW_REQUEST = 'PRODUCT_CREATE_REVIEW_REQUEST'\r\nexport const PRODUCT_CREATE_REVIEW_SUCCESS = 'PRODUCT_CREATE_REVIEW_SUCCESS'\r\nexport const PRODUCT_CREATE_REVIEW_FAIL = 'PRODUCT_CREATE_REVIEW_FAIL'\r\nexport const PRODUCT_CREATE_REVIEW_RESET = 'PRODUCT_CREATE_REVIEW_RESET'\r\n\r\nexport const PRODUCT_TOP_REQUEST = 'PRODUCT_TOP_REQUEST'\r\nexport const PRODUCT_TOP_SUCCESS = 'PRODUCT_TOP_SUCCESS'\r\nexport const PRODUCT_TOP_FAIL = 'PRODUCT_TOP_FAIL'\r\n","export const CART_ADD_ITEM = 'CART_ADD_ITEM'\r\nexport const CART_REMOVE_ITEM = 'CART_REMOVE_ITEM'\r\nexport const CART_SAVE_SHIPPING_ADDRESS = 'CART_SAVE_SHIPPING_ADDRESS'\r\nexport const CART_SAVE_PAYMENT_METHOD = 'CART_SAVE_PAYMENT_METHOD'\r\nexport const CART_RESET = 'CART_RESET'\r\n","export const ORDER_CREATE_REQUEST = 'ORDER_CREATE_REQUEST'\r\nexport const ORDER_CREATE_SUCCESS = 'ORDER_CREATE_SUCCESS'\r\nexport const ORDER_CREATE_FAIL = 'ORDER_CREATE_FAIL'\r\nexport const ORDER_CREATE_PAID = 'ORDER_CREATE_PAID'\r\n\r\nexport const ORDER_DETAILS_REQUEST = 'ORDER_DETAILS_REQUEST'\r\nexport const ORDER_DETAILS_SUCCESS = 'ORDER_DETAILS_SUCCESS'\r\nexport const ORDER_DETAILS_FAIL = 'ORDER_DETAILS_FAIL'\r\n\r\nexport const ORDER_PAY_REQUEST = 'ORDER_PAY_REQUEST'\r\nexport const ORDER_PAY_SUCCESS = 'ORDER_PAY_SUCCESS'\r\nexport const ORDER_PAY_FAIL = 'ORDER_PAY_FAIL'\r\nexport const ORDER_PAY_RESET = 'ORDER_PAY_RESET'\r\n\r\nexport const ORDER_LIST_MY_REQUEST = 'ORDER_LIST_MY_REQUEST'\r\nexport const ORDER_LIST_MY_SUCCESS = 'ORDER_LIST_MY_SUCCESS'\r\nexport const ORDER_LIST_MY_FAIL = 'ORDER_LIST_MY_FAIL'\r\nexport const ORDER_LIST_MY_RESET = 'ORDER_LIST_MY_RESET'\r\n\r\nexport const ORDER_LIST_REQUEST = 'ORDER_LIST_REQUEST'\r\nexport const ORDER_LIST_SUCCESS = 'ORDER_LIST_SUCCESS'\r\nexport const ORDER_LIST_FAIL = 'ORDER_LIST_FAIL'\r\n\r\nexport const ORDER_DELIVER_REQUEST = 'ORDER_DELIVER_REQUEST'\r\nexport const ORDER_DELIVER_SUCCESS = 'ORDER_DELIVER_SUCCESS'\r\nexport const ORDER_DELIVER_FAIL = 'ORDER_DELIVER_FAIL'\r\nexport const ORDER_DELIVER_RESET = 'ORDER_DELIVER_RESET'\r\n\r\nexport const ORDER_DELIVER_DOWNLOAD_REQUEST = 'ORDER_DELIVER_DOWNLOAD_REQUEST'\r\nexport const ORDER_DELIVER_DOWNLOAD_SUCCESS = 'ORDER_DELIVER_DOWNLOAD_SUCCESS'\r\nexport const ORDER_DELIVER_DOWNLOAD_FAIL = 'ORDER_DELIVER_DOWNLOAD_FAIL'\r\nexport const ORDER_DELIVER_DOWNLOAD_RESET = 'ORDER_DELIVER_DOWNLOAD_RESET'\r\n","// We wil combine reducers that will handle functionality by component.\r\nimport { createStore, combineReducers, applyMiddleware } from 'redux'\r\nimport thunk from 'redux-thunk'\r\nimport { composeWithDevTools } from 'redux-devtools-extension'\r\nimport {\r\n userLoginReducer,\r\n userRegisterReducer,\r\n userDetailsReducer,\r\n userUpdateProfileReducer,\r\n userListReducer,\r\n userDeleteReducer,\r\n userUpdateReducer,\r\n} from './reducers/userReducers.js'\r\n\r\nimport {\r\n productListReducer,\r\n productDetailsReducer,\r\n productDeleteReducer,\r\n productCreateReducer,\r\n productUpdateReducer,\r\n productReviewCreateReducer,\r\n productTopRatedReducer,\r\n} from './reducers/productReducer.js'\r\n\r\nimport { cartReducer } from './reducers/cartReducers'\r\n\r\nimport {\r\n orderCreateReducer,\r\n orderDetailsReducer,\r\n orderPayReducer,\r\n orderDeliverReducer,\r\n orderListMyReducer,\r\n orderListReducer,\r\n orderDeliverDownloadURLReducer,\r\n} from './reducers/orderReducers'\r\n\r\n// Any new reducers will be combined here, right now we will add an empty object since we don't have any reducers yet\r\nconst reducer = combineReducers({\r\n //User Reducers\r\n userLogin: userLoginReducer,\r\n userRegister: userRegisterReducer,\r\n userDetails: userDetailsReducer,\r\n userUpdateProfile: userUpdateProfileReducer,\r\n userList: userListReducer,\r\n userDelete: userDeleteReducer,\r\n userUpdate: userUpdateReducer,\r\n //Product Reducers\r\n productList: productListReducer,\r\n productDetails: productDetailsReducer,\r\n productDelete: productDeleteReducer,\r\n productCreate: productCreateReducer,\r\n productUpdate: productUpdateReducer,\r\n productReviewCreate: productReviewCreateReducer,\r\n productTopRated: productTopRatedReducer,\r\n //Cart Reducer\r\n cart: cartReducer,\r\n //Order Reducers\r\n orderCreate: orderCreateReducer,\r\n orderDetails: orderDetailsReducer,\r\n orderPay: orderPayReducer,\r\n orderListMy: orderListMyReducer,\r\n orderList: orderListReducer,\r\n orderDeliver: orderDeliverReducer,\r\n orderDeliverDownloadURL: orderDeliverDownloadURLReducer,\r\n})\r\n\r\nconst userInfoFromStorage = localStorage.getItem('userInfo')\r\n ? JSON.parse(localStorage.getItem('userInfo'))\r\n : null\r\n\r\n// If we want something loaded into the state when the store loads, we can put it in here:\r\nconst initialState = {\r\n userLogin: { userInfo: userInfoFromStorage },\r\n}\r\n\r\n// This is the middleware piece, for now we will initialize with thunk\r\nconst middleware = [thunk]\r\n\r\n//This will create the store with the combined reducers and an initial state.\r\nconst store = createStore(\r\n reducer,\r\n initialState,\r\n composeWithDevTools(applyMiddleware(...middleware)) //This parameter allows Redux to connect to the Redux Devtools to see the state in a Chrome browser\r\n)\r\n\r\nexport default store\r\n","import {\r\n USER_LOGIN_REQUEST,\r\n USER_LOGIN_SUCCESS,\r\n USER_LOGIN_FAILED,\r\n USER_REGISTER_REQUEST,\r\n USER_REGISTER_SUCCESS,\r\n USER_REGISTER_FAILED,\r\n USER_REGISTER_RESET,\r\n USER_LOGOUT,\r\n USER_DETAILS_REQUEST,\r\n USER_DETAILS_SUCCESS,\r\n USER_DETAILS_FAILED,\r\n USER_UPDATE_PROFILE_REQUEST,\r\n USER_UPDATE_PROFILE_SUCCESS,\r\n USER_UPDATE_PROFILE_FAILED,\r\n USER_UPDATE_PROFILE_RESET,\r\n USER_DETAILS_RESET,\r\n USER_LIST_REQUEST,\r\n USER_LIST_SUCCESS,\r\n USER_LIST_FAILED,\r\n USER_LIST_RESET,\r\n USER_DELETE_REQUEST,\r\n USER_DELETE_SUCCESS,\r\n USER_DELETE_FAILED,\r\n USER_UPDATE_RESET,\r\n USER_UPDATE_REQUEST,\r\n USER_UPDATE_SUCCESS,\r\n USER_UPDATE_FAILED,\r\n} from '../constants/userConstants'\r\n\r\nexport const userLoginReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case USER_LOGIN_REQUEST:\r\n return { loading: true }\r\n case USER_LOGIN_SUCCESS:\r\n return { loading: false, logedout: false, userInfo: action.payload }\r\n case USER_LOGIN_FAILED:\r\n return { loading: false, logedout: false, error: action.payload }\r\n case USER_LOGOUT:\r\n return { logedout: true }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const userRegisterReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case USER_REGISTER_REQUEST:\r\n return { loading: true }\r\n case USER_REGISTER_SUCCESS:\r\n return { loading: false, userInfo: action.payload }\r\n case USER_REGISTER_FAILED:\r\n return { loading: false, error: action.payload }\r\n case USER_REGISTER_RESET:\r\n return {}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const userDetailsReducer = (state = { user: {} }, action) => {\r\n switch (action.type) {\r\n case USER_DETAILS_REQUEST:\r\n return { ...state, loading: true }\r\n case USER_DETAILS_SUCCESS:\r\n return { loading: false, user: action.payload }\r\n case USER_DETAILS_FAILED:\r\n return { loading: false, error: action.payload }\r\n case USER_DETAILS_RESET:\r\n return { user: {} }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const userUpdateProfileReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case USER_UPDATE_PROFILE_REQUEST:\r\n return { loading: true }\r\n case USER_UPDATE_PROFILE_SUCCESS:\r\n return { loading: false, success: true, userInfo: action.payload }\r\n case USER_UPDATE_PROFILE_FAILED:\r\n return { loading: false, error: action.payload }\r\n case USER_UPDATE_PROFILE_RESET:\r\n return {}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const userListReducer = (state = { users: [] }, action) => {\r\n switch (action.type) {\r\n case USER_LIST_REQUEST:\r\n return { loading: true }\r\n case USER_LIST_SUCCESS:\r\n return { loading: false, users: action.payload }\r\n case USER_LIST_FAILED:\r\n return { loading: false, error: action.payload }\r\n case USER_LIST_RESET:\r\n return { users: [] }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const userDeleteReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case USER_DELETE_REQUEST:\r\n return { loading: true }\r\n case USER_DELETE_SUCCESS:\r\n return { loading: false, success: true }\r\n case USER_DELETE_FAILED:\r\n return { loading: false, error: action.payload }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const userUpdateReducer = (state = { user: {} }, action) => {\r\n switch (action.type) {\r\n case USER_UPDATE_REQUEST:\r\n return { loading: true }\r\n case USER_UPDATE_SUCCESS:\r\n return { loading: false, success: true }\r\n case USER_UPDATE_FAILED:\r\n return { loading: false, error: action.payload }\r\n case USER_UPDATE_RESET:\r\n return { user: {} }\r\n default:\r\n return state\r\n }\r\n}\r\n","import {\r\n PRODUCT_LIST_REQUEST,\r\n PRODUCT_LIST_SUCCESS,\r\n PRODUCT_LIST_FAIL,\r\n PRODUCT_DETAILS_REQUEST,\r\n PRODUCT_DETAILS_SUCCESS,\r\n PRODUCT_DETAILS_FAIL,\r\n PRODUCT_DELETE_REQUEST,\r\n PRODUCT_DELETE_SUCCESS,\r\n PRODUCT_DELETE_FAIL,\r\n PRODUCT_CREATE_RESET,\r\n PRODUCT_CREATE_REQUEST,\r\n PRODUCT_CREATE_SUCCESS,\r\n PRODUCT_CREATE_FAIL,\r\n PRODUCT_UPDATE_REQUEST,\r\n PRODUCT_UPDATE_SUCCESS,\r\n PRODUCT_UPDATE_FAIL,\r\n PRODUCT_UPDATE_RESET,\r\n PRODUCT_CREATE_REVIEW_REQUEST,\r\n PRODUCT_CREATE_REVIEW_SUCCESS,\r\n PRODUCT_CREATE_REVIEW_FAIL,\r\n PRODUCT_CREATE_REVIEW_RESET,\r\n PRODUCT_TOP_REQUEST,\r\n PRODUCT_TOP_SUCCESS,\r\n PRODUCT_TOP_FAIL,\r\n} from '../constants/productConstants'\r\n\r\nexport const productListReducer = (state = { products: [] }, action) => {\r\n switch (action.type) {\r\n case PRODUCT_LIST_REQUEST:\r\n return { loading: true, products: [] }\r\n case PRODUCT_LIST_SUCCESS:\r\n return {\r\n loading: false,\r\n products: action.payload.products,\r\n pages: action.payload.pages,\r\n page: action.payload.page,\r\n }\r\n case PRODUCT_LIST_FAIL:\r\n return { loading: false, error: action.payload }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\n//Note that we are adding products as an empty object, but since products contain an array of reviews, we also have to initialize that array to an empty array.\r\nexport const productDetailsReducer = (\r\n state = { product: { reviews: [] } },\r\n action\r\n) => {\r\n switch (action.type) {\r\n case PRODUCT_DETAILS_REQUEST:\r\n return { loading: true, ...state }\r\n case PRODUCT_DETAILS_SUCCESS:\r\n return { loading: false, product: action.payload }\r\n case PRODUCT_DETAILS_FAIL:\r\n return { loading: false, error: action.payload }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const productDeleteReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case PRODUCT_DELETE_REQUEST:\r\n return { loading: true }\r\n case PRODUCT_DELETE_SUCCESS:\r\n return { loading: false, success: true }\r\n case PRODUCT_DELETE_FAIL:\r\n return { loading: false, error: action.payload }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const productCreateReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case PRODUCT_CREATE_REQUEST:\r\n return { loading: true }\r\n case PRODUCT_CREATE_SUCCESS:\r\n return { loading: false, success: true, product: action.payload }\r\n case PRODUCT_CREATE_FAIL:\r\n return { loading: false, error: action.payload }\r\n case PRODUCT_CREATE_RESET:\r\n return {}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const productUpdateReducer = (state = { product: {} }, action) => {\r\n switch (action.type) {\r\n case PRODUCT_UPDATE_REQUEST:\r\n return { loading: true }\r\n case PRODUCT_UPDATE_SUCCESS:\r\n return { loading: false, success: true, product: action.payload }\r\n case PRODUCT_UPDATE_FAIL:\r\n return { loading: false, error: action.payload }\r\n case PRODUCT_UPDATE_RESET:\r\n return { product: {} }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const productReviewCreateReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case PRODUCT_CREATE_REVIEW_REQUEST:\r\n return { loading: true }\r\n case PRODUCT_CREATE_REVIEW_SUCCESS:\r\n return { loading: false, success: true }\r\n case PRODUCT_CREATE_REVIEW_FAIL:\r\n return { loading: false, error: action.payload }\r\n case PRODUCT_CREATE_REVIEW_RESET:\r\n return {}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const productTopRatedReducer = (state = { products: [] }, action) => {\r\n switch (action.type) {\r\n case PRODUCT_TOP_REQUEST:\r\n return { loading: true, products: [] }\r\n case PRODUCT_TOP_SUCCESS:\r\n return { loading: false, products: action.payload }\r\n case PRODUCT_TOP_FAIL:\r\n return { loading: false, error: action.payload }\r\n default:\r\n return state\r\n }\r\n}\r\n","import {\r\n CART_ADD_ITEM,\r\n CART_REMOVE_ITEM,\r\n CART_RESET,\r\n CART_SAVE_PAYMENT_METHOD,\r\n CART_SAVE_SHIPPING_ADDRESS,\r\n} from '../constants/cartConstants'\r\n\r\nexport const cartReducer = (\r\n state = { cartItems: [], shippingAddress: {} },\r\n action\r\n) => {\r\n switch (action.type) {\r\n case CART_ADD_ITEM:\r\n const item = action.payload\r\n const existItem = state.cartItems.find((x) => x.product === item.product)\r\n if (existItem) {\r\n return {\r\n ...state,\r\n cartItems: state.cartItems.map((x) =>\r\n x.product === existItem.product ? item : x\r\n ),\r\n }\r\n } else {\r\n return {\r\n ...state,\r\n cartItems: [...state.cartItems, item],\r\n }\r\n }\r\n case CART_REMOVE_ITEM:\r\n return {\r\n ...state,\r\n cartItems: state.cartItems.filter((x) => x.product !== action.payload),\r\n }\r\n case CART_SAVE_SHIPPING_ADDRESS:\r\n return {\r\n ...state,\r\n shippingAddress: action.payload,\r\n }\r\n case CART_SAVE_PAYMENT_METHOD:\r\n return {\r\n ...state,\r\n paymentMethod: action.payload,\r\n }\r\n case CART_RESET:\r\n return { cartItems: [], shippingAddress: {} }\r\n default:\r\n return state\r\n }\r\n}\r\n","import {\r\n ORDER_CREATE_REQUEST,\r\n ORDER_CREATE_SUCCESS,\r\n ORDER_CREATE_FAIL,\r\n ORDER_DETAILS_REQUEST,\r\n ORDER_DETAILS_SUCCESS,\r\n ORDER_DETAILS_FAIL,\r\n ORDER_PAY_RESET,\r\n ORDER_PAY_REQUEST,\r\n ORDER_PAY_SUCCESS,\r\n ORDER_PAY_FAIL,\r\n ORDER_LIST_MY_REQUEST,\r\n ORDER_LIST_MY_SUCCESS,\r\n ORDER_LIST_MY_FAIL,\r\n ORDER_LIST_MY_RESET,\r\n ORDER_LIST_REQUEST,\r\n ORDER_LIST_SUCCESS,\r\n ORDER_LIST_FAIL,\r\n ORDER_DELIVER_REQUEST,\r\n ORDER_DELIVER_SUCCESS,\r\n ORDER_DELIVER_FAIL,\r\n ORDER_DELIVER_RESET,\r\n ORDER_DELIVER_DOWNLOAD_REQUEST,\r\n ORDER_DELIVER_DOWNLOAD_SUCCESS,\r\n ORDER_DELIVER_DOWNLOAD_FAIL,\r\n ORDER_DELIVER_DOWNLOAD_RESET,\r\n ORDER_CREATE_PAID,\r\n} from '../constants/orderConstants'\r\n\r\nexport const orderCreateReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case ORDER_CREATE_REQUEST:\r\n return {\r\n loading: true,\r\n }\r\n case ORDER_CREATE_SUCCESS:\r\n return {\r\n loading: false,\r\n success: true,\r\n orderPaid: false,\r\n order: action.payload,\r\n }\r\n case ORDER_CREATE_FAIL:\r\n return {\r\n loading: false,\r\n error: action.payload,\r\n }\r\n case ORDER_CREATE_PAID:\r\n return {\r\n orderPaid: true,\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const orderDetailsReducer = (\r\n state = { loading: true, orderItems: [], shippingAddress: {} },\r\n action\r\n) => {\r\n switch (action.type) {\r\n case ORDER_DETAILS_REQUEST:\r\n return {\r\n ...state,\r\n loading: true,\r\n }\r\n case ORDER_DETAILS_SUCCESS:\r\n return {\r\n loading: false,\r\n order: action.payload,\r\n }\r\n case ORDER_DETAILS_FAIL:\r\n return {\r\n loading: false,\r\n error: action.payload,\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const orderPayReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case ORDER_PAY_REQUEST:\r\n return {\r\n loading: true,\r\n }\r\n case ORDER_PAY_SUCCESS:\r\n return {\r\n loading: false,\r\n success: true,\r\n }\r\n case ORDER_PAY_FAIL:\r\n return {\r\n loading: false,\r\n error: action.payload,\r\n }\r\n case ORDER_PAY_RESET:\r\n return {}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const orderDeliverReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case ORDER_DELIVER_REQUEST:\r\n return {\r\n loading: true,\r\n }\r\n case ORDER_DELIVER_SUCCESS:\r\n return {\r\n loading: false,\r\n success: true,\r\n }\r\n case ORDER_DELIVER_FAIL:\r\n return {\r\n loading: false,\r\n error: action.payload,\r\n }\r\n case ORDER_DELIVER_RESET:\r\n return {}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const orderDeliverDownloadURLReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case ORDER_DELIVER_DOWNLOAD_REQUEST:\r\n return {\r\n loading: true,\r\n }\r\n case ORDER_DELIVER_DOWNLOAD_SUCCESS:\r\n return {\r\n productSignedURL: action.payload,\r\n loading: false,\r\n success: true,\r\n }\r\n case ORDER_DELIVER_DOWNLOAD_FAIL:\r\n return {\r\n loading: false,\r\n error: action.payload,\r\n }\r\n case ORDER_DELIVER_DOWNLOAD_RESET:\r\n return {}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const orderListMyReducer = (state = { orders: [] }, action) => {\r\n switch (action.type) {\r\n case ORDER_LIST_MY_REQUEST:\r\n return {\r\n loading: true,\r\n }\r\n case ORDER_LIST_MY_SUCCESS:\r\n return {\r\n loading: false,\r\n orders: action.payload,\r\n }\r\n case ORDER_LIST_MY_FAIL:\r\n return {\r\n loading: false,\r\n error: action.payload,\r\n }\r\n case ORDER_LIST_MY_RESET:\r\n return {\r\n orders: [],\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const orderListReducer = (state = { orders: [] }, action) => {\r\n switch (action.type) {\r\n case ORDER_LIST_REQUEST:\r\n return {\r\n loading: true,\r\n }\r\n case ORDER_LIST_SUCCESS:\r\n return {\r\n loading: false,\r\n orders: action.payload,\r\n }\r\n case ORDER_LIST_FAIL:\r\n return {\r\n loading: false,\r\n error: action.payload,\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n","//PIXANDEV FILE\r\n\r\n///Change the BACKEND_ENDPOINT to point to the desired endpoint for the target environment.\r\n//In case I want to test the BACKEND_ENDPOINT in the local machine then I can change it to 'http://localhost:5000'\r\n//In case I want to test the BACKEND_ENDPOINT in the AWS enviornment, then I can change it to 'https://ikhmic2rag.execute-api.us-east-1.amazonaws.com/dev'\r\n//In case I want to test the BACKEND_ENDPOINT in the AWS PIXANDEV dev enviornment, then I can change it to 'https://r8chx2099g.execute-api.us-east-1.amazonaws.com/pixandev'\r\n//In case I want to test the BACKEND_ENDPOINT in the AWS PIXAN prod enviornment, then I can change it to 'https://7p1h5lrqd5.execute-api.us-east-1.amazonaws.com/pixan'\r\n//This BACKEND_ENDPOPINT constant will be referenced across all actions invoking backend services, and I can also use it to switch to DEV, QA or PROD environments later.\r\n//In case I want to test in AWS environment I have to change the KUARSIS_PUBLIC_STATIC_FOLDER to 'https://www.kuarsis.com/images'\r\n//In case I want to test in AWS PIXANDEV environment I have to change the KUARSIS_PUBLIC_STATIC_FOLDER to 'https://pixandev.kuarsis.com/images'\r\n//In case I want to test in AWS PIXANDEV environment I have to change the KUARSIS_PUBLIC_STATIC_FOLDER to 'https://pixan.kuarsis.com/images'\r\n//In case I want to test in localhost environment I have to change the KUARSIS_PUBLIC_STATIC_FOLDER to 'http://localhost:3000/images'\r\n\r\n\r\n// LOCALHOST DEV VARIABLES\r\n\r\n// export const BACKEND_ENDPOINT = 'http://localhost:5000'\r\n// export const KUARSIS_PUBLIC_STATIC_FOLDER = 'http://localhost:3000/images'\r\n// export const KUARSIS_BANNER_MAIN_LOGO = '/KuarxisLogo256px.png'\r\n// export const KUARSIS_PUBLIC_BUCKET_URL =\r\n// 'https://kuarsis-products-s3-public-dev.s3.amazonaws.com/'\r\n\r\n\r\n// LOCALHOST PROD VARIABLES\r\n\r\n// export const BACKEND_ENDPOINT = 'http://localhost:5000'\r\n// export const KUARSIS_PUBLIC_STATIC_FOLDER = 'http://localhost:3000/images'\r\n// export const KUARSIS_BANNER_MAIN_LOGO = 'KuarxisLogo256px.png'\r\n// export const KUARSIS_PUBLIC_BUCKET_URL =\r\n// 'https://kuarsis-products-s3-public.s3.amazonaws.com/'\r\n\r\n\r\n//CONSTANTS FOR WWW.KUARSIS.COM PROD ENVIRONMENT\r\n\r\nexport const BACKEND_ENDPOINT =\r\n 'https://we568vitke.execute-api.us-east-1.amazonaws.com/kuarxbeprd'\r\nexport const KUARSIS_PUBLIC_STATIC_FOLDER = 'https://www.kuarxis.com/images'\r\nexport const KUARSIS_BANNER_MAIN_LOGO = 'KuarxisLogo256px.png'\r\nexport const KUARSIS_PUBLIC_BUCKET_URL =\r\n 'https://kuarsis-products-s3-public.s3.amazonaws.com/'\r\n\r\n\r\n\r\n//CONSTANTS FOR DEV.KUARXIS.COM ENVIRONMENT\r\n/*\r\nexport const BACKEND_ENDPOINT = 'https://o3dzma966j.execute-api.us-east-1.amazonaws.com/kuarxbedev'\r\nexport const KUARSIS_PUBLIC_STATIC_FOLDER = 'https://dev.kuarxis.com/images' \r\nexport const KUARSIS_BANNER_MAIN_LOGO = 'KuarxisLogo256px.png'\r\nexport const KUARSIS_PUBLIC_BUCKET_URL = 'https://kuarsis-products-s3-public-dev.s3.amazonaws.com/'\r\n*/\r\n//CONSTANTS FOR PIXANDEV.KUARSIS.COM (DEV) ENVIRONMENT\r\n/*\r\nexport const BACKEND_ENDPOINT =\r\n 'https://r8chx2099g.execute-api.us-east-1.amazonaws.com/pixandev'\r\nexport const KUARSIS_PUBLIC_STATIC_FOLDER =\r\n 'https://pixandev.kuarsis.com/images'\r\nexport const KUARSIS_BANNER_MAIN_LOGO = 'PixanLogo256px.png'\r\nexport const KUARSIS_PUBLIC_BUCKET_URL =\r\n 'https://kuarsis-products-s3-public-dev.s3.amazonaws.com/'\r\n*/\r\n\r\n//CONSTANTS FOR PIXAN.KUARSIS.COM (PROD) ENVIRONMENT\r\n/*\r\nexport const BACKEND_ENDPOINT =\r\n 'https://7p1h5lrqd5.execute-api.us-east-1.amazonaws.com/pixan'\r\nexport const KUARSIS_PUBLIC_STATIC_FOLDER = 'https://pixan.kuarsis.com/images'\r\nexport const KUARSIS_BANNER_MAIN_LOGO = 'PixanLogo256px.png'\r\nexport const KUARSIS_PUBLIC_BUCKET_URL =\r\n 'https://kuarsis-products-s3-public.s3.amazonaws.com/'\r\n*/\r\n\r\n/*\r\nFor information about dev and prod users for testing, consult the \"Setps to setup Kuarsis Web Page for a new GIT repository.docx\" \r\ndocument at the root of Kuarsis folder\r\n*/\r\n\r\n","import React from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { Image, Navbar, Nav, Container, NavDropdown } from 'react-bootstrap'\r\nimport { LinkContainer } from 'react-router-bootstrap'\r\nimport { logout } from '../actions/userActions'\r\nimport { useEffect } from 'react'\r\nimport {\r\n KUARSIS_PUBLIC_STATIC_FOLDER,\r\n KUARSIS_BANNER_MAIN_LOGO,\r\n} from '../constants/enviromentConstants'\r\n\r\nconst Header = ({ history }) => {\r\n const dispatch = useDispatch()\r\n const userLogin = useSelector((state) => state.userLogin)\r\n const { userInfo, logedout } = userLogin\r\n\r\n useEffect(() => {\r\n if (logedout) {\r\n history.push('/')\r\n }\r\n // eslint-disable-next-line\r\n }, [history, logedout])\r\n\r\n const logoutHandler = () => {\r\n dispatch(logout())\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n Kuarxis Companies\r\n \r\n {/* Navbar.Toggle is the tag that makes the Hamburger menu button to appear on mobiles, if you remove this line, the hamburger will not show up on mobile devices */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Header\r\n","import axios from 'axios'\r\nimport {\r\n USER_DETAILS_FAILED,\r\n USER_DETAILS_REQUEST,\r\n USER_DETAILS_SUCCESS,\r\n USER_DETAILS_RESET,\r\n USER_LOGIN_FAILED,\r\n USER_LOGIN_REQUEST,\r\n USER_LOGIN_SUCCESS,\r\n USER_LOGOUT,\r\n USER_REGISTER_FAILED,\r\n USER_REGISTER_REQUEST,\r\n USER_REGISTER_SUCCESS,\r\n USER_UPDATE_PROFILE_FAILED,\r\n USER_UPDATE_PROFILE_REQUEST,\r\n USER_UPDATE_PROFILE_SUCCESS,\r\n USER_LIST_FAILED,\r\n USER_LIST_SUCCESS,\r\n USER_LIST_REQUEST,\r\n USER_LIST_RESET,\r\n USER_DELETE_REQUEST,\r\n USER_DELETE_SUCCESS,\r\n USER_DELETE_FAILED,\r\n USER_UPDATE_REQUEST,\r\n USER_UPDATE_SUCCESS,\r\n USER_UPDATE_FAILED,\r\n USER_REGISTER_RESET,\r\n} from '../constants/userConstants'\r\nimport { BACKEND_ENDPOINT } from '../constants/enviromentConstants'\r\n\r\nexport const login = (email, password) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: USER_LOGIN_REQUEST,\r\n })\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n\r\n console.log('userActions:login', 'before axios post', email, password)\r\n const { data } = await axios.post(\r\n BACKEND_ENDPOINT + '/users/sign-in',\r\n { email, password },\r\n config\r\n )\r\n\r\n console.log('userActions:login', 'after axios post', email, password)\r\n\r\n dispatch({\r\n type: USER_LOGIN_SUCCESS,\r\n payload: data,\r\n })\r\n\r\n localStorage.setItem('userInfo', JSON.stringify(data))\r\n } catch (error) {\r\n console.log('userActions:login', 'inside catch error:', error)\r\n dispatch({\r\n type: USER_LOGIN_FAILED,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const logout = () => (dispatch) => {\r\n localStorage.removeItem('userInfo')\r\n dispatch({ type: USER_LOGOUT })\r\n dispatch({ type: USER_REGISTER_RESET })\r\n dispatch({ type: USER_DETAILS_RESET })\r\n dispatch({ type: USER_LIST_RESET })\r\n}\r\n\r\nexport const register = (name, email, password) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: USER_REGISTER_REQUEST,\r\n })\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n\r\n const { data } = await axios.post(\r\n BACKEND_ENDPOINT + '/users',\r\n { name, email, password },\r\n config\r\n )\r\n\r\n dispatch({\r\n type: USER_REGISTER_SUCCESS,\r\n payload: data,\r\n })\r\n\r\n dispatch({\r\n type: USER_LOGIN_SUCCESS,\r\n payload: data,\r\n })\r\n\r\n localStorage.setItem('userInfo', JSON.stringify(data))\r\n } catch (error) {\r\n dispatch({\r\n type: USER_REGISTER_FAILED,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const getUserDetails = (id) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: USER_DETAILS_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n const { data } = await axios.get(BACKEND_ENDPOINT + `/users/${id}`, config)\r\n\r\n dispatch({\r\n type: USER_DETAILS_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: USER_DETAILS_FAILED,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const updateUserProfile = (user) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: USER_UPDATE_PROFILE_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n const { data } = await axios.put(\r\n BACKEND_ENDPOINT + `/users/profile`,\r\n user,\r\n config\r\n )\r\n\r\n dispatch({\r\n type: USER_UPDATE_PROFILE_SUCCESS,\r\n payload: data,\r\n })\r\n\r\n dispatch({\r\n type: USER_LOGIN_SUCCESS,\r\n payload: data,\r\n })\r\n\r\n localStorage.setItem('userInfo', JSON.stringify(data))\r\n } catch (error) {\r\n dispatch({\r\n type: USER_UPDATE_PROFILE_FAILED,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const listUsers = () => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: USER_LIST_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n const { data } = await axios.get(BACKEND_ENDPOINT + `/users`, config)\r\n\r\n dispatch({\r\n type: USER_LIST_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: USER_LIST_FAILED,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const deleteUser = (id) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: USER_DELETE_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n await axios.delete(BACKEND_ENDPOINT + `/users/${id}`, config)\r\n\r\n dispatch({\r\n type: USER_DELETE_SUCCESS,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: USER_DELETE_FAILED,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const updateUser = (user) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: USER_UPDATE_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n const { data } = await axios.put(\r\n BACKEND_ENDPOINT + `/users/${user._id}`,\r\n user,\r\n config\r\n )\r\n\r\n dispatch({\r\n type: USER_UPDATE_SUCCESS,\r\n })\r\n\r\n dispatch({ type: USER_DETAILS_SUCCESS, payload: data })\r\n } catch (error) {\r\n dispatch({\r\n type: USER_UPDATE_FAILED,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\n\r\nconst Footer = () => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default Footer\r\n","export const PageSettings = [\r\n {\r\n _id: '1',\r\n pageName: 'Home',\r\n title1: 'Our Vision',\r\n description1: 'Kuarxis is recognized worldwide as a fair, useful, sensical, and high-quality company passionate about satisfying its customers, employees, shareholders, and society.',\r\n title2: 'Our Mision',\r\n description2:\r\n 'Our mission is to unify values, principles, culture, and leadership across all Kuarxis Companies, each of which aims to bring \"pieces of paradise to Earth\" in its own unique way and capacity.',\r\n title3: 'Our companies:',\r\n description3: [\r\n {\r\n descId: 1,\r\n desc: 'Kuarxis-Tech: Brings pieces of paradise to Earth by creating software solutions and providing Information Technology services that enhance fairness, efficiency, and effectiveness in people\\'s daily lives.',\r\n },\r\n {\r\n descId: 2,\r\n desc: 'ArtPixan Company: brings pieces of paradise to Earth by running a fair business that produces and promotes art, bringing joy, peace, love, and happiness to people\\'s daily lives.',\r\n },\r\n {\r\n descId: 3,\r\n desc: 'Taanah Company: brings pieces of paradise to Earth by running a fair business that excels in hospitality services, offering rental homes and apartments for both business and leisure stays.' \r\n },\r\n ],\r\n sidebar: [\r\n {\r\n sidebarId: 1,\r\n sidebarText:\r\n 'In paradise, there is only joy and happiness, with no suffering. When Henry Ford invented the car, he brought a piece of paradise to Earth by increasing joy and reducing the suffering of long-distance travel. Kuarxis\\' mission is to continue bringing pieces of paradise to Earth.',\r\n },\r\n ],\r\n linkToCompanyWebsite: '',\r\n settings: [\r\n {\r\n priority: 1,\r\n label: 'Kuarxis Companies',\r\n subLabel: 'Kuarxis-Tech | ArtPixan | Taanah',\r\n imageSrc: './images/KuarxisLogo256px.png',\r\n alt: 'Kuarxis Companies Image',\r\n height: '425px',\r\n width: '425px',\r\n },\r\n {\r\n priority: 2,\r\n label: 'Kuarxis-Tech',\r\n subLabel:\r\n 'Software solutions and information technology services.',\r\n imageSrc:\r\n './images/KuarxisTechHome1radowan-nakif-rehan-cYyqhdbJ9TI-unsplash.jpg',\r\n alt: 'Kuarxis-Tech image',\r\n height: '427px',\r\n width: '100%',\r\n },\r\n {\r\n priority: 3,\r\n label: 'ArtPixan',\r\n subLabel: 'Creating and promoting art.',\r\n imageSrc:\r\n './images/2020509-NewportBridgeSunrise-NATURALNS2.2.jpg',\r\n alt: 'Kuarxis-ArtPixan Image',\r\n height: '427px',\r\n width: '100%',\r\n },\r\n {\r\n priority: 4,\r\n label: 'Taanah',\r\n subLabel: 'Hospitality services for business or leisure.',\r\n imageSrc:\r\n './images/TaanahHome-alberto-castillo-q-mx4mSkK9zeo-unsplash.jpg',\r\n alt: 'Kuarxis-Taanah image',\r\n height: '427px',\r\n width: '100%',\r\n },\r\n ],\r\n },\r\n {\r\n _id: '2',\r\n pageName: 'Kuarxis-Tech',\r\n title1: 'Our Vision',\r\n description1: 'We envision a world that is more fair, more efficient, and more effective, where every nonsensical element is transformed into something that makes sense, all with the help of our software solutions and services.',\r\n title2: 'Our Mission',\r\n description2:\r\n 'Bring pieces of paradise to Earth by creating software solutions and providing IT services that enhance fairness, efficiency, and effectiveness that help turning the non-sense into sense in people\\'s daily lives.',\r\n title3: 'Our Strategy',\r\n description3: [\r\n {\r\n descId: 1,\r\n desc: 'Developing software solutions to simplify value investing (KuarxValueMiner) and an adaptable online store platform (KuarxStore) for any type of online business.',\r\n },\r\n {\r\n descId: 2,\r\n desc: 'Providing expert advisory in software development processes, IT project management, and IT Scrum Framework.',\r\n },\r\n ],\r\n sidebar: [\r\n {\r\n sidebarId: 1,\r\n sidebarText:\r\n 'If you are interested in our services or solutions please contact: customer.care@kuarxis.com',\r\n },\r\n {\r\n sidebarId: 2,\r\n sidebarText:\r\n 'Kuarxis-Tech will be happy to help you!',\r\n },\r\n ],\r\n linkToCompanyWebsite: '/kuarxistech',\r\n settings: [\r\n {\r\n priority: 1,\r\n label: 'Kuarxis-Tech',\r\n subLabel: 'Software solutions and information technology services.',\r\n imageSrc: './images/KuarxisLogo256px.png',\r\n alt: 'Kuarxis-Tech image',\r\n height: '425px',\r\n width: '425px',\r\n },\r\n {\r\n priority: 2,\r\n label: 'Kuarxis-Tech Software Solutions',\r\n subLabel: 'Innovative software products that enhance fairness, efficiency, and effectiveness in people\\'s daily lives.',\r\n imageSrc:\r\n './images/1-OverwhelmedBySoftware-PhotobyThisisEngineering_RAEngonUnsplash.jpg',\r\n alt: 'Kuarxis-Tech Overwhelmed by Software image',\r\n height: '390px',\r\n width: '100%',\r\n },\r\n {\r\n priority: 3,\r\n label: 'Kuarxis-Tech IT Services',\r\n subLabel:\r\n 'Custom software development, advisory on IT Project Management and IT Scrum Framework.',\r\n imageSrc:\r\n './images/2-TechnologyStrategyPhotobyJESHOOTS.COMonUnsplash.jpg',\r\n alt: 'Kuarxis-Tech Strategy image',\r\n height: '390px',\r\n width: '100%',\r\n },\r\n ],\r\n }, \r\n {\r\n _id: '3',\r\n pageName: 'ArtPixan',\r\n title1: 'Our Vision',\r\n description1:\r\n 'The industry of artistic high-quality photography becomes fairer for both customers and photographers, with the help of our ArtPixan platform.',\r\n title2: 'Our Mision',\r\n description2:\r\n 'Offering the best online photography store for licensing photos, while being the fairest to both customers and photographers.',\r\n title3: 'Our Strategy',\r\n\r\n description3: [\r\n {\r\n descId: 1,\r\n desc: 'Creating our own high-quality artistic photos and licensing them at a fair price to customers through ArtPixan, an online store powered by KuarxStore from Kuarxis-Tech, customized for the photography business',\r\n },\r\n {\r\n descId: 2,\r\n desc: 'Helping fellow photographers by providing them with the ArtPixan platform to sell their photos, ensuring fair payment for their work and fair prices for customers.',\r\n },\r\n \r\n ],\r\n sidebar: [\r\n {\r\n sidebarId: 1,\r\n sidebarText:\r\n 'ArtPixan offers high-quality artistic photos of sunsets, sunrises, bridges, travel, nightscapes, seascapes, and more, at a fair price for our customers and fair remuneration to the photographers.',\r\n },\r\n {\r\n sidebarId: 2,\r\n sidebarText:\r\n 'Go to ArtPixan by clicking the ArtPixan link in the top menu.',\r\n },\r\n {\r\n sidebarId: 3,\r\n sidebarText:\r\n 'Interested in selling your photos, contact us: customer.care@kuarxis.com',\r\n },\r\n ],\r\n linkToCompanyWebsite: '/ArtPixan',\r\n settings: [\r\n {\r\n priority: 1,\r\n label: 'ArtPixan',\r\n subLabel: 'Photography stock online store.',\r\n imageSrc:\r\n './images/2020509-NewportBridgeSunrise-NATURALNS2.2.jpg',\r\n alt: 'Kuarxis-ArtPixan Image',\r\n height: '390px',\r\n width: '100%',\r\n },\r\n {\r\n priority: 2,\r\n label: 'ArtPixan',\r\n subLabel:\r\n 'Nightscapes, Landscapes, Sunsets, Sunrises, Beaches, Bridges, Mansions and more.',\r\n imageSrc: './images/PixanRebelSpirit.jpg',\r\n alt: 'Kuarxis-ArtPixan Image',\r\n height: '390px',\r\n width: '100%',\r\n },\r\n ],\r\n },\r\n {\r\n _id: '4',\r\n pageName: 'Taanah',\r\n title1: 'Our Vision',\r\n description1:\r\n 'Becoming the world\\'s best host for guests renting houses or rooms.',\r\n title2: 'Our Mision',\r\n description2:\r\n 'Bringing paradise to Earth by offering relaxing and comfortable houses and rooms for rent.',\r\n title3: 'Our Strategy',\r\n\r\n description3: [\r\n {\r\n descId: 1,\r\n desc: 'Offering our house, Casa del Nogal, for rent.',\r\n },\r\n {\r\n descId: 2,\r\n desc: 'Expanding our portfolio by acquiring new houses for rent.',\r\n },\r\n ],\r\n sidebar: [\r\n {\r\n sidebarId: 1,\r\n sidebarText:\r\n 'Visiting Monterrey, Nuevo León, for business or leisure?',\r\n },\r\n {\r\n sidebarId: 2,\r\n sidebarText: 'Casa del Nogal is waiting for you! Book your stay now at customer.care@kuarxis.com',\r\n },\r\n ],\r\n linkToCompanyWebsite: '/kuarxistaanah',\r\n settings: [\r\n {\r\n priority: 1,\r\n label: 'Taanah',\r\n subLabel: 'Offering houses or rooms for rent, perfect for business or leisure.',\r\n imageSrc: './images/KuarxisLogo256px.png',\r\n alt: 'Kuarxis-Taanah Logo',\r\n height: '425px',\r\n width: '425px',\r\n },\r\n {\r\n priority: 2,\r\n label: 'Searching for the perfect house or room to rent?',\r\n subLabel: 'For business or leisure, Taanah is the best host.',\r\n imageSrc: './images/Taanah1-laurentiu-morariu-m49NDxxGR0U-unsplash.jpg',\r\n alt: 'Kuarxis-Taanah Place to Stay',\r\n height: '390px',\r\n width: '100%',\r\n },\r\n {\r\n priority: 3,\r\n label: 'Taanah is now offering \\'Casa del Nogal\\' for rent!',\r\n subLabel:\r\n '3 rooms, 2.5 bathrooms, kitchen, and living room. Rent the entire house or individual rooms.',\r\n imageSrc: './images/Taanah2-anthony-rooke--NJO7AF0mUo-unsplash.jpg',\r\n alt: 'Kuarxis-Taanah Casa del Nogal',\r\n height: '390px',\r\n width: '100%',\r\n },\r\n ],\r\n },\r\n]\r\n","import React from 'react'\r\nimport { Carousel, Image } from 'react-bootstrap'\r\nimport { PageSettings } from '../database'\r\n\r\nconst KuarsisCarousel = ({ pageToDisplay }) => {\r\n const carouselSettings = PageSettings.find(\r\n (carousel) => carousel.pageName === pageToDisplay\r\n ).settings.sort((first, second) => {\r\n return first.priority - second.priority\r\n })\r\n\r\n return (\r\n \r\n {carouselSettings.map((setting) => (\r\n \r\n
\r\n \r\n

{setting.label}

\r\n

{setting.subLabel}

\r\n
\r\n \r\n
\r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n\r\nexport default KuarsisCarousel\r\n","import React from 'react'\r\nimport { PageSettings } from '../database'\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst KuarsisMainWithSides = ({ pageToDisplay }) => {\r\n const pageSettings = PageSettings.find(\r\n (page) => page.pageName === pageToDisplay\r\n )\r\n\r\n return (\r\n
\r\n \r\n \r\n

{pageSettings.title1}

\r\n

{pageSettings.description1}

\r\n

{pageSettings.title2}

\r\n

{pageSettings.description2}

\r\n

{pageSettings.title3}

\r\n \r\n \r\n \r\n
\r\n {pageSettings.sidebar.map((sidebar) => (\r\n
\r\n {sidebar.sidebarText.toString()}\r\n
\r\n
\r\n
\r\n ))}\r\n {/*
*/}\r\n {/* {pageSettings.linkToCompanyWebsite ? (\r\n

\r\n To visit {pageSettings.pageName} webpage click{' '}\r\n \r\n here\r\n {' '}\r\n

\r\n ) : (\r\n ''\r\n )} */}\r\n {/*
*/}\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default KuarsisMainWithSides\r\n","import React from 'react'\r\nimport KuarsisCarousel from '../components/KuarsisCarousel'\r\nimport KuarsisMainWithSides from '../components/KuarsisMainWithSides'\r\n\r\nconst HomeScreen = () => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default HomeScreen\r\n","import React from 'react'\r\nimport { Alert } from 'react-bootstrap'\r\n\r\nconst Message = ({ variant, children }) => {\r\n return {children}\r\n}\r\n\r\nMessage.defaultProps = {\r\n variant: 'info',\r\n}\r\n\r\nexport default Message\r\n","import React from 'react'\r\nimport { Spinner } from 'react-bootstrap'\r\n\r\nconst Loader = () => {\r\n return (\r\n \r\n Loading...\r\n \r\n )\r\n}\r\n\r\nexport default Loader\r\n","import React from 'react'\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\n\r\n//This is a From template to create other forms, you can pass the children with all the inputs you need inside the form.\r\nconst FormContainer = ({ children }) => {\r\n return (\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default FormContainer\r\n","import React, { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { Form, Button, Row, Col } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Message from '../components/Message'\r\nimport Loader from '../components/Loader'\r\nimport FormContainer from '../components/FormContainer'\r\nimport { login } from '../actions/userActions'\r\n\r\nconst LoginScreen = ({ location, history }) => {\r\n const [email, setEmail] = useState('')\r\n const [password, setPassword] = useState('')\r\n\r\n const dispatch = useDispatch()\r\n\r\n const userLogin = useSelector((state) => state.userLogin)\r\n\r\n const { loading, error, userInfo } = userLogin\r\n\r\n const redirect = location.search ? location.search.split('=')[1] : '/'\r\n\r\n useEffect(() => {\r\n if (userInfo) {\r\n history.push(redirect)\r\n }\r\n }, [history, userInfo, redirect])\r\n\r\n const submitHandler = (e) => {\r\n e.preventDefault()\r\n dispatch(login(email, password))\r\n }\r\n\r\n return (\r\n \r\n

Sign In

\r\n {error && {error}}\r\n {loading && }\r\n
\r\n \r\n Email Address\r\n setEmail(e.target.value)}\r\n >\r\n \r\n \r\n Password Address\r\n setPassword(e.target.value)}\r\n >\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n New Customer?{' '}\r\n \r\n Register\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default LoginScreen\r\n","import React from 'react'\r\nimport KuarsisCarousel from '../components/KuarsisCarousel'\r\nimport KuarsisMainWithSides from '../components/KuarsisMainWithSides'\r\n\r\nconst TechScreen = () => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default TechScreen\r\n","import React from 'react'\r\nimport KuarsisCarousel from '../components/KuarsisCarousel'\r\nimport KuarsisMainWithSides from '../components/KuarsisMainWithSides'\r\n\r\nconst PixanScreen = () => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default PixanScreen\r\n","import React from 'react'\r\nimport KuarsisCarousel from '../components/KuarsisCarousel'\r\nimport KuarsisMainWithSides from '../components/KuarsisMainWithSides'\r\n\r\nconst TaanahScreen = () => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default TaanahScreen\r\n","import React, { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { Form, Button, Row, Col } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Message from '../components/Message'\r\nimport Loader from '../components/Loader'\r\nimport FormContainer from '../components/FormContainer'\r\nimport { register } from '../actions/userActions'\r\n\r\nconst RegisterScreen = ({ location, history }) => {\r\n const [name, setName] = useState('')\r\n const [email, setEmail] = useState('')\r\n const [password, setPassword] = useState('')\r\n const [confirmPassword, setConfirmPassword] = useState('')\r\n const [message, setMessage] = useState(null)\r\n\r\n const dispatch = useDispatch()\r\n\r\n const userRegister = useSelector((state) => state.userRegister)\r\n\r\n const { loading, error, userInfo } = userRegister\r\n\r\n const redirect = location.search ? location.search.split('=')[1] : '/'\r\n\r\n useEffect(() => {\r\n if (userInfo) {\r\n history.push(redirect)\r\n }\r\n }, [history, userInfo, redirect])\r\n\r\n const submitHandler = (e) => {\r\n e.preventDefault()\r\n if (password !== confirmPassword) {\r\n setMessage('Passwords do not match')\r\n } else {\r\n dispatch(register(name, email, password))\r\n }\r\n }\r\n\r\n return (\r\n \r\n

Sign Up

\r\n {message && {message}}\r\n {error && {error}}\r\n {loading && }\r\n
\r\n \r\n Name\r\n setName(e.target.value)}\r\n >\r\n \r\n \r\n Email Address\r\n setEmail(e.target.value)}\r\n >\r\n \r\n \r\n Password\r\n setPassword(e.target.value)}\r\n >\r\n \r\n \r\n Confirm Password\r\n setConfirmPassword(e.target.value)}\r\n >\r\n \r\n \r\n
\r\n \r\n \r\n Have an Account?{' '}\r\n \r\n Login\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default RegisterScreen\r\n","import React, { useState, useEffect } from 'react'\r\nimport { Form, Button /*Row, Col, Table*/ } from 'react-bootstrap'\r\n// import { LinkContainer } from 'react-router-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Message from '../components/Message'\r\nimport Loader from '../components/Loader'\r\nimport { getUserDetails, updateUserProfile } from '../actions/userActions'\r\nimport { USER_UPDATE_PROFILE_RESET } from '../constants/userConstants'\r\nimport FormContainer from '../components/FormContainer'\r\n//import { listMyOrders } from '../actions/orderActions'\r\n\r\nconst ProfileScreen = ({ location, history }) => {\r\n const [name, setName] = useState('')\r\n const [email, setEmail] = useState('')\r\n const [password, setPassword] = useState('')\r\n const [confirmPassword, setConfirmPassword] = useState('')\r\n const [message, setMessage] = useState(null)\r\n\r\n const dispatch = useDispatch()\r\n\r\n const userDetails = useSelector((state) => state.userDetails)\r\n const { loading, error, user } = userDetails\r\n\r\n const userLogin = useSelector((state) => state.userLogin)\r\n const { userInfo } = userLogin\r\n\r\n const userUpdateProfile = useSelector((state) => state.userUpdateProfile)\r\n const { success } = userUpdateProfile\r\n\r\n // const orderListMy = useSelector((state) => state.orderListMy)\r\n // const { loading: loadingOrders, error: errorOrders, orders } = orderListMy\r\n\r\n useEffect(() => {\r\n if (!userInfo) {\r\n history.push('/sign-in')\r\n } else {\r\n if (!user || !user.name || success) {\r\n dispatch({ type: USER_UPDATE_PROFILE_RESET })\r\n //if there is no user name, then passing 'profile' as parameter of the getUserDetails if you look into its code, it will do a request to /api/user/profile which is the function that will get the user profile information, even thou the code says /api/users/:id the :id will be replaced with 'profile' instead of an actual user 'id'\r\n dispatch(getUserDetails('profile'))\r\n //dispatch(listMyOrders())\r\n } else {\r\n setName(user.name)\r\n setEmail(user.email)\r\n }\r\n }\r\n }, [dispatch, history, userInfo, user, success])\r\n\r\n const submitHandler = (e) => {\r\n e.preventDefault()\r\n if (password !== confirmPassword) {\r\n setMessage('Passwords do not match')\r\n } else {\r\n dispatch(updateUserProfile({ id: user._id, name, email, password }))\r\n }\r\n }\r\n\r\n return (\r\n \r\n {/* */}\r\n

User Profile

\r\n {message && {message}}\r\n {error && {error}}\r\n {success && Profile Updated}\r\n {loading && }\r\n
\r\n \r\n Name\r\n setName(e.target.value)}\r\n >\r\n \r\n \r\n Email Address\r\n setEmail(e.target.value)}\r\n >\r\n \r\n \r\n Password\r\n setPassword(e.target.value)}\r\n >\r\n \r\n \r\n Confirm Password\r\n setConfirmPassword(e.target.value)}\r\n >\r\n \r\n \r\n
\r\n {/* \r\n \r\n

MY ORDERS

\r\n {loadingOrders ? (\r\n \r\n ) : errorOrders ? (\r\n {errorOrders}\r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {orders.map((order) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
IDDATETOTALPAIDDELIVERED
{order._id}{order.createdAt.substring(0, 10)}{order.totalPrice}\r\n {order.isPaid ? (\r\n order.paidAt.substring(0, 10)\r\n ) : (\r\n \r\n )}\r\n \r\n {order.isDelivered ? (\r\n order.deliveredAt.substring(0, 10)\r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n */}\r\n
\r\n )\r\n}\r\n\r\nexport default ProfileScreen\r\n","import React from 'react'\r\n//With the link you can redirect the page to a new page without refreshing the whole page but only the section where you want the page to appear. If you don't use Link and use a regular tag, when the user clicks on it, it will refresh the whole page to show the page on the link, which is not user friendly.\r\nimport { Link } from 'react-router-dom'\r\nimport { Card } from 'react-bootstrap'\r\nimport { KUARSIS_PUBLIC_BUCKET_URL } from '../constants/enviromentConstants'\r\n\r\nconst Product = ({ product }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {product.name}\r\n \r\n \r\n ${product.price}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default Product\r\n","import React from 'react'\r\nimport { Pagination } from 'react-bootstrap'\r\nimport { LinkContainer } from 'react-router-bootstrap'\r\n\r\nconst Paginate = ({ pages, page, isAdmin = false, keyword = '' }) => {\r\n return (\r\n pages > 1 && (\r\n \r\n {[...Array(pages).keys()].map((x) => (\r\n \r\n \r\n {x + 1}\r\n \r\n \r\n ))}\r\n \r\n )\r\n )\r\n}\r\n\r\nexport default Paginate\r\n","import React from 'react'\r\nimport { Helmet } from 'react-helmet'\r\n\r\nconst Meta = ({ title, description, keywords }) => {\r\n return (\r\n \r\n {title}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nMeta.defaultProps = {\r\n title: 'Welcome to Pixan',\r\n keywords:\r\n 'photo, stock, landscapes, bridges, sunsets, sunset, bridge, photos, photography, sunrise, seascapes, astrophotography, images, nature',\r\n description: 'Pixan is an photo stock online store',\r\n}\r\n\r\nexport default Meta\r\n","import {\r\n PRODUCT_LIST_REQUEST,\r\n PRODUCT_LIST_SUCCESS,\r\n PRODUCT_LIST_FAIL,\r\n PRODUCT_DETAILS_REQUEST,\r\n PRODUCT_DETAILS_SUCCESS,\r\n PRODUCT_DETAILS_FAIL,\r\n PRODUCT_DELETE_FAIL,\r\n PRODUCT_DELETE_SUCCESS,\r\n PRODUCT_DELETE_REQUEST,\r\n PRODUCT_CREATE_REQUEST,\r\n PRODUCT_CREATE_SUCCESS,\r\n PRODUCT_CREATE_FAIL,\r\n PRODUCT_UPDATE_REQUEST,\r\n PRODUCT_UPDATE_SUCCESS,\r\n PRODUCT_UPDATE_FAIL,\r\n PRODUCT_CREATE_REVIEW_REQUEST,\r\n PRODUCT_CREATE_REVIEW_SUCCESS,\r\n PRODUCT_CREATE_REVIEW_FAIL,\r\n PRODUCT_TOP_REQUEST,\r\n PRODUCT_TOP_SUCCESS,\r\n PRODUCT_TOP_FAIL,\r\n} from '../constants/productConstants'\r\n\r\nimport { BACKEND_ENDPOINT } from '../constants/enviromentConstants'\r\n\r\nimport axios from 'axios'\r\n\r\nexport const listProducts =\r\n (keyword = '', pageNumber = '') =>\r\n async (dispatch) => {\r\n try {\r\n console.log('List Products Function')\r\n dispatch({ type: PRODUCT_LIST_REQUEST })\r\n console.log('productActions: page ', pageNumber)\r\n const { data } = await axios.get(\r\n BACKEND_ENDPOINT +\r\n `/products?keyword=${keyword}&pageNumber=${pageNumber}`\r\n )\r\n console.log('List Products Success')\r\n dispatch({\r\n type: PRODUCT_LIST_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n console.log('List Products Error')\r\n dispatch({\r\n type: PRODUCT_LIST_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n }\r\n\r\nexport const listProductDetails = (id) => async (dispatch) => {\r\n try {\r\n dispatch({ type: PRODUCT_DETAILS_REQUEST })\r\n const { data } = await axios.get(BACKEND_ENDPOINT + `/products/${id}`)\r\n dispatch({\r\n type: PRODUCT_DETAILS_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: PRODUCT_DETAILS_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const deleteProduct = (id) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: PRODUCT_DELETE_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: { Authorization: `Bearer ${userInfo.token}` },\r\n }\r\n\r\n await axios.delete(BACKEND_ENDPOINT + `/products/${id}`, config)\r\n\r\n dispatch({\r\n type: PRODUCT_DELETE_SUCCESS,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: PRODUCT_DELETE_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const createProduct = (id) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: PRODUCT_CREATE_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: { Authorization: `Bearer ${userInfo.token}` },\r\n }\r\n\r\n console.log('START before createProduct axions call')\r\n const { data } = await axios.post(\r\n BACKEND_ENDPOINT + `/products`,\r\n {},\r\n config\r\n )\r\n console.log('START after createProduct axions call')\r\n\r\n dispatch({\r\n type: PRODUCT_CREATE_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: PRODUCT_CREATE_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const updateProduct = (product) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: PRODUCT_UPDATE_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n const { data } = await axios.put(\r\n BACKEND_ENDPOINT + `/products/${product._id}`,\r\n product,\r\n config\r\n )\r\n\r\n dispatch({\r\n type: PRODUCT_UPDATE_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: PRODUCT_UPDATE_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const createProductReview =\r\n (productId, review) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: PRODUCT_CREATE_REVIEW_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n await axios.post(\r\n BACKEND_ENDPOINT + `/products/${productId}/reviews`,\r\n review,\r\n config\r\n )\r\n\r\n dispatch({\r\n type: PRODUCT_CREATE_REVIEW_SUCCESS,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: PRODUCT_CREATE_REVIEW_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n }\r\n\r\nexport const listTopProducts = () => async (dispatch) => {\r\n try {\r\n dispatch({ type: PRODUCT_TOP_REQUEST })\r\n const { data } = await axios.get(BACKEND_ENDPOINT + `/products/top`)\r\n dispatch({\r\n type: PRODUCT_TOP_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: PRODUCT_TOP_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n","import React, { useEffect } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport Product from '../components/Product'\r\nimport Message from '../components/Message'\r\nimport Loader from '../components/Loader'\r\nimport Paginate from '../components/Paginate'\r\nimport Meta from '../components/Meta'\r\nimport { listProducts } from '../actions/productActions'\r\n\r\nconst PixanHomeScreen = ({ match }) => {\r\n const keyword = match.params.keyword\r\n const pageNumber = match.params.pageNumber || 1\r\n\r\n const dispatch = useDispatch()\r\n\r\n const productList = useSelector((state) => state.productList)\r\n const { loading, error, products, page, pages } = productList\r\n\r\n useEffect(() => {\r\n dispatch(listProducts(keyword, pageNumber))\r\n }, [dispatch, keyword, pageNumber])\r\n\r\n return (\r\n <>\r\n \r\n

ArtPixan Photos by Silver

\r\n {loading ? (\r\n \r\n ) : error ? (\r\n {error}\r\n ) : (\r\n <>\r\n \r\n {products.map((product) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default PixanHomeScreen\r\n","import axios from 'axios'\r\nimport {\r\n CART_ADD_ITEM,\r\n CART_REMOVE_ITEM,\r\n CART_SAVE_SHIPPING_ADDRESS,\r\n CART_SAVE_PAYMENT_METHOD,\r\n} from '../constants/cartConstants'\r\nimport { BACKEND_ENDPOINT } from '../constants/enviromentConstants'\r\n\r\n//We need to get the state inside the addToCart action reason why we have to pass the getState function from the store, as a parameter of the async function of the addToCart.\r\nexport const addToCart = (id, qty) => async (dispatch, getState) => {\r\n const { data } = await axios.get(BACKEND_ENDPOINT + `/products/${id}`)\r\n\r\n //All this information is the one we want to show in the Cart page, we want name, image, price and countInStock that is coming from the axios get call, data.\r\n dispatch({\r\n type: CART_ADD_ITEM,\r\n payload: {\r\n product: data._id,\r\n name: data.name,\r\n image: data.image,\r\n price: data.price,\r\n countInStock: data.countInStock,\r\n qty,\r\n },\r\n })\r\n\r\n //We will add the cart to the local storage. Local storage can only store string data, and the getState will return JSON data, reason why you need to do JSON.stringify.\r\n //To get the data that was stored in the local Storage, we will do that from the store.js file, in the initialState variable, we can get the initial values from the localStorage there, and pass it to the createStore as usual\r\n localStorage.setItem('cartItems', JSON.stringify(getState().cart.cartItems))\r\n}\r\n\r\nexport const removeFromCart = (id) => (dispatch, getState) => {\r\n dispatch({\r\n type: CART_REMOVE_ITEM,\r\n payload: id,\r\n })\r\n\r\n localStorage.setItem('cartItems', JSON.stringify(getState().cart.cartItems))\r\n}\r\n\r\nexport const saveShippingAddress = (data) => (dispatch) => {\r\n dispatch({\r\n type: CART_SAVE_SHIPPING_ADDRESS,\r\n payload: data,\r\n })\r\n\r\n localStorage.setItem('shippingAddress', JSON.stringify(data))\r\n}\r\n\r\nexport const savePaymentMethod = (data) => (dispatch) => {\r\n dispatch({\r\n type: CART_SAVE_PAYMENT_METHOD,\r\n payload: data,\r\n })\r\n\r\n localStorage.setItem('paymentMethod', JSON.stringify(data))\r\n}\r\n","import React, { useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { Row, Col, ListGroup, Image, Form, Button, Card } from 'react-bootstrap'\r\nimport Message from '../components/Message'\r\nimport { addToCart, removeFromCart } from '../actions/cartActions'\r\nimport { KUARSIS_PUBLIC_BUCKET_URL } from '../constants/enviromentConstants'\r\n\r\n//Match is for getting the product id to add to the cart. Location is to find the qty (cuantity) parameter in the URL, and history is for redirecting to a different page with history.push\r\nconst CartScreen = ({ match, location, history }) => {\r\n //match is for getting the id from the URL\r\n const productId = match.params.id\r\n\r\n //location.search will return the quantity parameter as ?qty=2 where 2 is the number selected by the user when clicking the Add to Cart button.\r\n const qty = location.search ? Number(location.search.split('=')[1]) : 1\r\n\r\n const dispatch = useDispatch()\r\n\r\n const cart = useSelector((state) => state.cart)\r\n const { cartItems } = cart\r\n\r\n useEffect(() => {\r\n if (productId) {\r\n dispatch(addToCart(productId, qty))\r\n }\r\n }, [dispatch, productId, qty])\r\n\r\n const removeFromCartHandler = (id) => {\r\n dispatch(removeFromCart(id))\r\n }\r\n\r\n const checkoutHandler = () => {\r\n history.push('/sign-in?redirect=placeorder')\r\n }\r\n\r\n return (\r\n <>\r\n \r\n Go Back to Photos\r\n \r\n \r\n \r\n

Shopping Cart

\r\n {cartItems.length === 0 ? (\r\n \r\n {' '}\r\n Your cart is empty Go Back\r\n \r\n ) : (\r\n \r\n {cartItems.map((item) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {item.name}\r\n \r\n ${item.price}\r\n \r\n \r\n dispatch(\r\n addToCart(item.product, Number(e.target.value))\r\n )\r\n }\r\n disabled\r\n >\r\n {/* {[...Array(item.countInStock).keys()].map((x) => (\r\n \r\n ))} */}\r\n \r\n \r\n \r\n \r\n removeFromCartHandler(item.product)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n

\r\n Subtotal ({cartItems.reduce((acc, item) => acc + item.qty, 0)}\r\n ) items\r\n

\r\n $\r\n {cartItems\r\n .reduce((acc, item) => acc + item.qty * item.price, 0)\r\n .toFixed(2)}\r\n
\r\n \r\n \r\n Proceed to Checkout\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default CartScreen\r\n","import React from 'react'\r\nimport { Nav } from 'react-bootstrap'\r\nimport { LinkContainer } from 'react-router-bootstrap'\r\n\r\nconst CheckoutSteps = ({ step1, step2, step3, step4 }) => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default CheckoutSteps\r\n","import React, { useState } from 'react'\r\nimport { Form, Button } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport FormContainer from '../components/FormContainer'\r\nimport CheckoutSteps from '../components/CheckoutSteps'\r\nimport { saveShippingAddress } from '../actions/cartActions'\r\n\r\nconst ShippingScreen = ({ history }) => {\r\n const cart = useSelector((state) => state.cart)\r\n const { shippingAddress } = cart\r\n\r\n const [address, setAddress] = useState(shippingAddress.address)\r\n const [city, setCity] = useState(shippingAddress.city)\r\n const [postalCode, setPostalCode] = useState(shippingAddress.postalCode)\r\n const [country, setCountry] = useState(shippingAddress.country)\r\n\r\n const dispatch = useDispatch()\r\n\r\n const submitHandler = (e) => {\r\n e.preventDefault()\r\n dispatch(saveShippingAddress({ address, city, postalCode, country }))\r\n history.push('/payment')\r\n }\r\n\r\n return (\r\n \r\n \r\n

Shipping

\r\n
\r\n \r\n Address\r\n setAddress(e.target.value)}\r\n >\r\n \r\n \r\n City\r\n setCity(e.target.value)}\r\n >\r\n \r\n \r\n Postal Code\r\n setPostalCode(e.target.value)}\r\n >\r\n \r\n \r\n Country\r\n setCountry(e.target.value)}\r\n >\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ShippingScreen\r\n","import React, { useState } from 'react'\r\nimport { Form, Button, Col } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport FormContainer from '../components/FormContainer'\r\nimport CheckoutSteps from '../components/CheckoutSteps'\r\nimport { savePaymentMethod } from '../actions/cartActions'\r\n\r\nconst PaymentScreen = ({ history }) => {\r\n const cart = useSelector((state) => state.cart)\r\n\r\n const { shippingAddress } = cart\r\n if (!shippingAddress) {\r\n history.push('/shipping')\r\n }\r\n\r\n const [paymentMethod, setPaymentMethod] = useState('PayPal')\r\n\r\n const dispatch = useDispatch()\r\n\r\n const submitHandler = (e) => {\r\n e.preventDefault()\r\n dispatch(savePaymentMethod(paymentMethod))\r\n history.push('/placeorder')\r\n }\r\n\r\n return (\r\n \r\n \r\n

Payment Method

\r\n
\r\n \r\n Select Method\r\n \r\n setPaymentMethod(e.target.value)}\r\n >\r\n {/* setPaymentMethod(e.target.value)}\r\n > */}\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default PaymentScreen\r\n","import axios from 'axios'\r\nimport {\r\n ORDER_CREATE_REQUEST,\r\n ORDER_CREATE_SUCCESS,\r\n ORDER_CREATE_FAIL,\r\n ORDER_CREATE_PAID,\r\n ORDER_DETAILS_REQUEST,\r\n ORDER_DETAILS_SUCCESS,\r\n ORDER_DETAILS_FAIL,\r\n ORDER_PAY_REQUEST,\r\n ORDER_PAY_SUCCESS,\r\n ORDER_PAY_FAIL,\r\n ORDER_LIST_MY_REQUEST,\r\n ORDER_LIST_MY_SUCCESS,\r\n ORDER_LIST_MY_FAIL,\r\n ORDER_LIST_SUCCESS,\r\n ORDER_LIST_REQUEST,\r\n ORDER_LIST_FAIL,\r\n ORDER_DELIVER_REQUEST,\r\n ORDER_DELIVER_SUCCESS,\r\n ORDER_DELIVER_FAIL,\r\n ORDER_DELIVER_DOWNLOAD_REQUEST,\r\n ORDER_DELIVER_DOWNLOAD_SUCCESS,\r\n ORDER_DELIVER_DOWNLOAD_FAIL,\r\n} from '../constants/orderConstants'\r\n\r\nimport { BACKEND_ENDPOINT } from '../constants/enviromentConstants'\r\n\r\nexport const createOrder = (order) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: ORDER_CREATE_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n console.log('createOrder env variable:', BACKEND_ENDPOINT)\r\n console.log('createOrder env variable:', BACKEND_ENDPOINT + '/orders')\r\n const { data } = await axios.post(\r\n BACKEND_ENDPOINT + '/orders',\r\n order,\r\n config\r\n )\r\n\r\n dispatch({\r\n type: ORDER_CREATE_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: ORDER_CREATE_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const getOrderDetails = (id) => async (dispatch, getState) => {\r\n try {\r\n console.log('Entrando a getOrderDetails')\r\n dispatch({\r\n type: ORDER_DETAILS_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n const { data } = await axios.get(BACKEND_ENDPOINT + `/orders/${id}`, config)\r\n\r\n dispatch({\r\n type: ORDER_DETAILS_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: ORDER_DETAILS_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const payOrder =\r\n (orderId, paymentResult) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: ORDER_PAY_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n const { data } = await axios.put(\r\n BACKEND_ENDPOINT + `/orders/${orderId}/pay`,\r\n paymentResult,\r\n config\r\n )\r\n dispatch({\r\n type: ORDER_PAY_SUCCESS,\r\n payload: data,\r\n })\r\n\r\n dispatch({ type: ORDER_CREATE_PAID })\r\n } catch (error) {\r\n dispatch({\r\n type: ORDER_PAY_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n }\r\n\r\nexport const deliverOrder = (order) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: ORDER_DELIVER_REQUEST,\r\n })\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n const { data } = await axios.put(\r\n BACKEND_ENDPOINT + `/orders/${order._id}/delivered`,\r\n {},\r\n config\r\n )\r\n\r\n dispatch({\r\n type: ORDER_DELIVER_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: ORDER_DELIVER_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const listMyOrders = () => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: ORDER_LIST_MY_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: { Authorization: `Bearer ${userInfo.token}` },\r\n }\r\n const { data } = await axios.get(\r\n BACKEND_ENDPOINT + `/orders/myorders`,\r\n config\r\n )\r\n\r\n dispatch({\r\n type: ORDER_LIST_MY_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: ORDER_LIST_MY_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const listOrders = () => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: ORDER_LIST_REQUEST,\r\n })\r\n\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: { Authorization: `Bearer ${userInfo.token}` },\r\n }\r\n const { data } = await axios.get(/*BACKEND_ENDPOINT + */ `/orders`, config)\r\n\r\n dispatch({\r\n type: ORDER_LIST_SUCCESS,\r\n payload: data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: ORDER_LIST_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n}\r\n\r\nexport const downloadOrderedProduct =\r\n (productIdToDownload) => async (dispatch, getState) => {\r\n try {\r\n console.log('START downloadOrderedProduct 1111111')\r\n dispatch({\r\n type: ORDER_DELIVER_DOWNLOAD_REQUEST,\r\n })\r\n const {\r\n userLogin: { userInfo },\r\n } = getState()\r\n\r\n const config = {\r\n headers: {\r\n Authorization: `Bearer ${userInfo.token}`,\r\n },\r\n }\r\n\r\n console.log('Before axios downloadOrderedProduct')\r\n const data = await axios.get(\r\n BACKEND_ENDPOINT +\r\n `/orders/downloadOrderedProduct/${productIdToDownload}`,\r\n config\r\n )\r\n console.log('orderActions data: ', data)\r\n dispatch({\r\n type: ORDER_DELIVER_DOWNLOAD_SUCCESS,\r\n payload: data.data,\r\n })\r\n } catch (error) {\r\n dispatch({\r\n type: ORDER_DELIVER_DOWNLOAD_FAIL,\r\n payload:\r\n error.response && error.response.data.message\r\n ? error.response.data.message\r\n : error.message,\r\n })\r\n }\r\n console.log('END doawnloadOrderedProduct')\r\n }\r\n","import React, { useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { Button, Row, Col, ListGroup, Image, Card } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Message from '../components/Message'\r\nimport CheckoutSteps from '../components/CheckoutSteps'\r\nimport { createOrder } from '../actions/orderActions'\r\nimport { KUARSIS_PUBLIC_BUCKET_URL } from '../constants/enviromentConstants'\r\n\r\nconst PlaceOrderScreen = ({ history }) => {\r\n const dispatch = useDispatch()\r\n const cart = useSelector((state) => state.cart)\r\n\r\n const addDecimals = (num) => {\r\n return (Math.round(num * 100) / 100).toFixed(2)\r\n }\r\n\r\n // Calculate prices\r\n cart.itemsPrice = addDecimals(\r\n cart.cartItems.reduce((acc, item) => acc + item.price * item.qty, 0)\r\n )\r\n cart.taxPrice = addDecimals(Number((0.15 * cart.itemsPrice).toFixed(2)))\r\n cart.totalPrice = (Number(cart.itemsPrice) + Number(cart.taxPrice)).toFixed(2)\r\n\r\n const orderCreate = useSelector((state) => state.orderCreate)\r\n const { order, success, error, orderPaid } = orderCreate\r\n\r\n useEffect(() => {\r\n console.log('orderPaid variable is: ', orderPaid)\r\n if (success && !orderPaid) {\r\n console.log('Placing Order: ', order, orderPaid)\r\n history.push(`/order/${order._id}`)\r\n }\r\n // eslint-disable-next-line\r\n }, [history, orderPaid, success])\r\n const placeOrderHandler = () => {\r\n console.log('Creating Order:', cart)\r\n if (agreeWithLicense) {\r\n dispatch(\r\n createOrder({\r\n orderItems: cart.cartItems,\r\n shippingAddress: cart.shippingAddress,\r\n paymentMethod: cart.paymentMethod,\r\n itemsPrice: cart.itemsPrice,\r\n shippingPrice: cart.shippingPrice,\r\n taxPrice: cart.taxPrice,\r\n totalPrice: cart.totalPrice,\r\n })\r\n )\r\n } else {\r\n alert(\r\n 'Please agree with the Photo Pixan License before placing the order.'\r\n )\r\n }\r\n }\r\n var agreeWithLicense = false\r\n const agreeWithLicenseHandler = () => {\r\n agreeWithLicense = !agreeWithLicense\r\n }\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n

Order Items

\r\n {cart.cartItems.length === 0 ? (\r\n Your cart is empty\r\n ) : (\r\n \r\n {cart.cartItems.map((item, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {item.name}\r\n \r\n \r\n \r\n {item.qty} x ${item.price} = ${item.qty * item.price}\r\n \r\n \r\n \r\n ))}\r\n \r\n )}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n

Order Summary

\r\n
\r\n \r\n \r\n Items\r\n ${cart.itemsPrice}\r\n \r\n \r\n \r\n \r\n Tax\r\n ${cart.taxPrice}\r\n \r\n \r\n \r\n \r\n Total\r\n ${cart.totalPrice}\r\n \r\n \r\n \r\n {error && {error}}\r\n \r\n Place Order\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
Pixan Photo License Agreement:
\r\n \r\n \r\n After the photos are paid, the download link is valid only\r\n for five minutes after which it will expire.\r\n \r\n \r\n Photos which download link has expired, cannot longer be\r\n downloaded unless the order is placed again.\r\n \r\n \r\n Purchased photos can be used in websites, digital marketing\r\n campaings, printed in physical products, or just for\r\n enjoyment.\r\n \r\n \r\n If printed in physical products, no more than 500,000 prints\r\n are allowed.\r\n \r\n \r\n Photos cannot be resale without Pixan consent.\r\n \r\n \r\n By clicking the button \"Place Order\" above, you accept this\r\n License Agreement.\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default PlaceOrderScreen\r\n","import React, { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport { PayPalButton } from 'react-paypal-button-v2'\r\nimport { Link } from 'react-router-dom'\r\nimport { Button, Row, Col, ListGroup, Image, Card } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Message from '../components/Message'\r\nimport Loader from '../components/Loader'\r\nimport {\r\n getOrderDetails,\r\n payOrder,\r\n deliverOrder,\r\n downloadOrderedProduct,\r\n} from '../actions/orderActions'\r\nimport {\r\n ORDER_PAY_RESET,\r\n ORDER_DELIVER_RESET,\r\n ORDER_DELIVER_DOWNLOAD_RESET,\r\n} from '../constants/orderConstants'\r\n\r\nimport {\r\n BACKEND_ENDPOINT,\r\n KUARSIS_PUBLIC_BUCKET_URL,\r\n} from '../constants/enviromentConstants'\r\n\r\nimport { CART_RESET } from '../constants/cartConstants'\r\n\r\nconst OrderScreen = ({ match, history }) => {\r\n const orderId = match.params.id\r\n\r\n const [sdkReady, setSdkReady] = useState(false)\r\n\r\n const dispatch = useDispatch()\r\n\r\n const orderDetails = useSelector((state) => state.orderDetails)\r\n const { order, loading, error } = orderDetails\r\n\r\n const userLogin = useSelector((state) => state.userLogin)\r\n const { userInfo } = userLogin\r\n\r\n const orderPay = useSelector((state) => state.orderPay)\r\n const { loading: loadingPay, success: successPay } = orderPay\r\n\r\n const orderDeliver = useSelector((state) => state.orderDeliver)\r\n const { loading: loadingDeliver, success: successDeliver } = orderDeliver\r\n\r\n const orderDeliverDownloadURL = useSelector(\r\n (state) => state.orderDeliverDownloadURL\r\n )\r\n const { success: downloadSuccess, productSignedURL: eProductSignedURL } =\r\n orderDeliverDownloadURL\r\n\r\n if (!loading) {\r\n const addDecimals = (num) => {\r\n return (Math.round(num * 100) / 100).toFixed(2)\r\n }\r\n // Calculate prices\r\n order.itemsPrice = addDecimals(\r\n order.orderItems.reduce((acc, item) => acc + item.price * item.qty, 0)\r\n )\r\n }\r\n useEffect(() => {\r\n if (!userInfo) {\r\n history.push('/login')\r\n }\r\n\r\n const addPayPalScript = async () => {\r\n const { data: clientId } = await axios.get(\r\n BACKEND_ENDPOINT + '/config/paypal'\r\n )\r\n console.log('PayPal Client Id: ', clientId)\r\n const script = document.createElement('script')\r\n script.type = 'text/javascript'\r\n script.src = `https://www.paypal.com/sdk/js?client-id=${clientId}`\r\n script.async = true\r\n script.onload = () => {\r\n setSdkReady(true)\r\n }\r\n document.body.appendChild(script)\r\n }\r\n\r\n if (!order || successPay || successDeliver || order._id !== orderId) {\r\n dispatch({ type: ORDER_PAY_RESET })\r\n dispatch({ type: ORDER_DELIVER_RESET })\r\n\r\n dispatch(getOrderDetails(orderId))\r\n } else if (!order.isPaid) {\r\n if (!window.paypal) {\r\n addPayPalScript()\r\n } else {\r\n setSdkReady(true)\r\n }\r\n }\r\n if (downloadSuccess) {\r\n const link = document.createElement('a')\r\n link.href = eProductSignedURL\r\n // link.href =\r\n // 'https://kuarsis-products-s3-public.s3.amazonaws.com/1656042006477.jpg'\r\n //link.id = 'downloadFileURL'\r\n console.log('download url: ', eProductSignedURL)\r\n link.setAttribute('download', 'file.jpg')\r\n document.body.appendChild(link)\r\n console.log('Before Link CLICK')\r\n link.click()\r\n console.log('After Link CLICK')\r\n link.remove()\r\n console.log('After Link Remove')\r\n dispatch({ type: ORDER_DELIVER_DOWNLOAD_RESET })\r\n //window.open(eProductSignedURL, '_blank')\r\n }\r\n }, [\r\n dispatch,\r\n orderId,\r\n successPay,\r\n successDeliver,\r\n order,\r\n eProductSignedURL,\r\n downloadSuccess,\r\n history,\r\n userInfo,\r\n ])\r\n\r\n const successPaymentHandler = (paymentResult) => {\r\n dispatch(payOrder(orderId, paymentResult))\r\n dispatch({ type: CART_RESET })\r\n }\r\n\r\n const deliverHandler = () => {\r\n dispatch(deliverOrder(order))\r\n }\r\n\r\n const fileDownload = (productIdToDownload) => {\r\n dispatch(downloadOrderedProduct(productIdToDownload))\r\n dispatch(deliverOrder(order))\r\n }\r\n\r\n const printReceiptHandler = () => {\r\n window.print()\r\n }\r\n\r\n return loading ? (\r\n \r\n ) : error ? (\r\n {error}\r\n ) : (\r\n <>\r\n

Order {order._id}

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

Licensing to

\r\n

\r\n Name: \r\n {order.user.name}\r\n

\r\n

\r\n Email: \r\n {order.user.email}\r\n

\r\n {/* {order.isDelivered ? (\r\n \r\n Delivered on {order.deliveredAt}\r\n \r\n ) : (\r\n Not Delivered\r\n )} */}\r\n \r\n \r\n

Payment Method

\r\n

\r\n Method: PayPal\r\n

\r\n {order.isPaid ? (\r\n Paid on {order.paidAt}\r\n ) : (\r\n Not paid\r\n )}\r\n
\r\n \r\n

Order Items

\r\n {order.orderItems.length === 0 ? (\r\n Order is empty\r\n ) : (\r\n \r\n {order.orderItems.map((item, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {item.name}\r\n \r\n \r\n \r\n {item.qty} x $ {item.price} = ${' '}\r\n {item.qty * item.price}\r\n \r\n {order.isPaid ? (\r\n \r\n fileDownload(item.product)}\r\n >\r\n Download\r\n \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n ))}\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n

Order Summary

\r\n
\r\n \r\n \r\n Items\r\n $ {order.itemsPrice}\r\n \r\n \r\n \r\n \r\n Tax\r\n $ {order.taxPrice}\r\n \r\n \r\n \r\n \r\n Total\r\n $ {order.totalPrice}\r\n \r\n \r\n {order.isPaid && (\r\n \r\n \r\n Print Receipt\r\n \r\n \r\n )}\r\n {!order.isPaid && (\r\n \r\n {loadingPay && }\r\n {!sdkReady ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n {loadingDeliver && }\r\n {userInfo &&\r\n userInfo.isAdmin &&\r\n order.isPaid &&\r\n false && //This false should be replaced by a flag that can be part of the product attributes to configure when a product needs to be physically delivered.\r\n !order.isDelivered && (\r\n \r\n \r\n Mark as Delivered\r\n \r\n \r\n )}\r\n
\r\n
\r\n {order.isPaid && (\r\n \r\n \r\n \r\n Thank you for your purchase!
\r\n
\r\n The \"Download\" button will expire 5 minutes after the\r\n purchase, please click it as soon as possible to download your\r\n photos.\r\n
\r\n \r\n The order number that appears at the top of this screen is\r\n your Pixan Photo License number it is proof that you licensed\r\n the photo, please keep it for your records.\r\n \r\n \r\n The current page is your receipt, you can print it for your\r\n records.\r\n \r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default OrderScreen\r\n","import React, { useEffect } from 'react'\r\nimport { LinkContainer } from 'react-router-bootstrap'\r\nimport { Table, Button, Row, Col } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Message from '../components/Message'\r\nimport Loader from '../components/Loader'\r\nimport Paginate from '../components/Paginate'\r\n\r\nimport {\r\n listProducts,\r\n deleteProduct,\r\n createProduct,\r\n} from '../actions/productActions'\r\nimport { PRODUCT_CREATE_RESET } from '../constants/productConstants'\r\n\r\nconst ProductListScreen = ({ history, match }) => {\r\n const pageNumber = match.params.pageNumber || 1\r\n\r\n const dispatch = useDispatch()\r\n\r\n const productList = useSelector((state) => state.productList)\r\n const { loading, error, products, page, pages } = productList\r\n\r\n const productDelete = useSelector((state) => state.productDelete)\r\n const {\r\n loading: loadingDelete,\r\n error: errorDelete,\r\n success: successDelete,\r\n } = productDelete\r\n\r\n const productCreate = useSelector((state) => state.productCreate)\r\n const {\r\n loading: loadingCreate,\r\n error: errorCreate,\r\n success: successCreate,\r\n product: createdProduct,\r\n } = productCreate\r\n\r\n const userLogin = useSelector((state) => state.userLogin)\r\n const { userInfo } = userLogin\r\n\r\n useEffect(() => {\r\n dispatch({ type: PRODUCT_CREATE_RESET })\r\n\r\n if (!userInfo.isAdmin) {\r\n history.push('/login')\r\n }\r\n\r\n if (successCreate) {\r\n history.push(`/admin/product/${createdProduct._id}/edit`)\r\n } else {\r\n dispatch(listProducts('', pageNumber))\r\n }\r\n }, [\r\n dispatch,\r\n history,\r\n userInfo,\r\n successDelete,\r\n successCreate,\r\n createdProduct,\r\n pageNumber,\r\n ])\r\n\r\n const deleteHandler = (id) => {\r\n if (window.confirm('Are you sure')) {\r\n dispatch(deleteProduct(id))\r\n }\r\n }\r\n\r\n const createProductHandler = () => {\r\n dispatch(createProduct())\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n

Products

\r\n \r\n \r\n \r\n \r\n
\r\n {loadingDelete && }\r\n {errorDelete && {errorDelete}}\r\n {loadingCreate && }\r\n {errorCreate && {errorCreate}}\r\n {loading ? (\r\n \r\n ) : error ? (\r\n {error}\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {products.map((product) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
IDNAMEPRICECATEGORYBRAND
{product._id}{product.name}$ {product.price}{product.category}{product.brand}\r\n \r\n \r\n \r\n deleteHandler(product._id)}\r\n >\r\n \r\n \r\n
\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default ProductListScreen\r\n","export const convert = ({ file, width, height, type, watermarkText }) => {\r\n console.log(3)\r\n return new Promise((resolve, reject) => {\r\n let allow = ['jpg', 'gif', 'bmp', 'png', 'jpeg', 'svg']\r\n try {\r\n if (\r\n file.name &&\r\n file.name.split('.').reverse()[0] &&\r\n allow.includes(file.name.split('.').reverse()[0].toLowerCase()) &&\r\n file.size &&\r\n file.type\r\n ) {\r\n let imageType = type ? type : 'jpeg'\r\n const imgWidth = width ? width : 500\r\n const imgHeight = height ? height : 300\r\n const fileName = file.name\r\n\r\n const img = new Image()\r\n img.onload = () => {\r\n const elem = document.createElement('canvas')\r\n elem.width = imgWidth\r\n elem.height = imgHeight\r\n const ctx = elem.getContext('2d')\r\n ctx.drawImage(img, 0, 0, imgWidth, imgHeight)\r\n console.log(5)\r\n ctx.font = 'bold 10px Arial'\r\n ctx.fillStyle = 'rgba(255, 0, 0, 0.5)'\r\n ctx.fillText(watermarkText, imgWidth * 0.05, imgHeight * 0.05)\r\n ctx.fillText(watermarkText, imgWidth * 0.6, imgHeight * 0.05)\r\n ctx.fillText(watermarkText, imgWidth * 0.3, imgHeight * 0.5)\r\n ctx.fillText(watermarkText, imgWidth * 0.05, imgHeight * 0.9)\r\n ctx.fillText(watermarkText, imgWidth * 0.6, imgHeight * 0.9)\r\n ctx.canvas.toBlob(\r\n (blob) => {\r\n const newFile = new File([blob], fileName, {\r\n type: `image/${imageType.toLowerCase()}`,\r\n lastModified: Date.now(),\r\n })\r\n resolve(newFile)\r\n },\r\n 'image/jpeg',\r\n 1\r\n )\r\n }\r\n img.src = URL.createObjectURL(file)\r\n } else {\r\n reject('File not supported!')\r\n }\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n}\r\n","import axios from 'axios'\r\nimport React, { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { Form, Button } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Message from '../components/Message'\r\nimport Loader from '../components/Loader'\r\nimport FormContainer from '../components/FormContainer'\r\nimport { listProductDetails, updateProduct } from '../actions/productActions'\r\nimport { PRODUCT_UPDATE_RESET } from '../constants/productConstants'\r\nimport { BACKEND_ENDPOINT } from '../constants/enviromentConstants'\r\nimport { convert } from '../libs/imagesLib'\r\n\r\nconst ProductEditScreen = ({ match, history }) => {\r\n const productId = match.params.id\r\n\r\n const [name, setName] = useState('')\r\n const [price, setPrice] = useState(null)\r\n const [image, setImage] = useState('')\r\n const [brand, setBrand] = useState('')\r\n const [category, setCategory] = useState('')\r\n const [countInStock, setCountInStock] = useState(null)\r\n const [description, setDescription] = useState('')\r\n const [uploading, setUploading] = useState(false)\r\n\r\n const dispatch = useDispatch()\r\n\r\n const productDetails = useSelector((state) => state.productDetails)\r\n const { loading, error, product } = productDetails\r\n\r\n const productUpdate = useSelector((state) => state.productUpdate)\r\n\r\n const {\r\n loading: loadingUpdate,\r\n error: errorUpdate,\r\n success: successUpdate,\r\n } = productUpdate\r\n\r\n useEffect(() => {\r\n if (successUpdate) {\r\n dispatch({ type: PRODUCT_UPDATE_RESET })\r\n history.push('/admin/productList')\r\n } else {\r\n if (!product.name || product._id !== productId) {\r\n dispatch(listProductDetails(productId))\r\n } else {\r\n if (product.isCreated) {\r\n setName(product.name)\r\n setPrice(product.price)\r\n setImage(product.image)\r\n setBrand(product.brand)\r\n setCategory(product.category)\r\n setCountInStock(product.countInStock)\r\n setDescription(product.description)\r\n }\r\n }\r\n }\r\n }, [dispatch, history, productId, product, successUpdate])\r\n\r\n const uploadFileHandler = async (e) => {\r\n const file = e.target.files[0]\r\n setUploading(true)\r\n try {\r\n console.log('before UPLOAD post')\r\n\r\n const { data } = await axios.get(\r\n BACKEND_ENDPOINT + `/upload/getPutObjectURLs`\r\n )\r\n const { preSignedPublicURL, preSignedPrivateURL, fileS3Name } = data\r\n\r\n console.log(\r\n 'ProductEditScreen.uploadFileHandler preSignedPublicURL: ',\r\n preSignedPublicURL\r\n )\r\n\r\n //----------START FILE SIZE REDUCTION AND WATERMARKING\r\n let newFile = null\r\n\r\n convert({\r\n file: file,\r\n width: 600,\r\n height: 400,\r\n type: 'jpeg',\r\n watermarkText: 'Kuarsis Pixan Copyright',\r\n })\r\n .then((watermarkedImage) => {\r\n axios\r\n .put(preSignedPublicURL, watermarkedImage, {\r\n headers: {\r\n 'Content-Type': 'image/jpeg',\r\n },\r\n onUploadProgress: (e2) => {\r\n // Show progress\r\n var percentCompleted = Math.round((e2.loaded * 100) / e2.total)\r\n console.log('Public Upload Progress: ', percentCompleted)\r\n },\r\n })\r\n .then(function ({ data }) {\r\n console.log('Public Upload Progress: Upload Completed', data)\r\n })\r\n })\r\n .catch((error) => {\r\n throw error\r\n })\r\n\r\n await axios.put(preSignedPublicURL, newFile, {\r\n headers: {\r\n 'Content-Type': 'image/jpeg',\r\n },\r\n onUploadProgress: (e2) => {\r\n // Show progress\r\n var percentCompleted = Math.round((e2.loaded * 100) / e2.total)\r\n //document.getElementById('uploadPercent').innerHTML = percentCompleted\r\n console.log('Public Upload Progress: ', percentCompleted)\r\n },\r\n })\r\n console.log('Public Upload Progress: Upload Completed')\r\n\r\n //UPLOAD PRIVATE FILE:\r\n console.log(\r\n 'ProductEditScreen.uploadFileHandler preSignedPrivateURL: ',\r\n preSignedPrivateURL\r\n )\r\n await axios.put(preSignedPrivateURL, file, {\r\n headers: {\r\n 'Content-Type': 'application/octet-stream',\r\n },\r\n onUploadProgress: (e2) => {\r\n // Show progress\r\n var percentCompleted = Math.round((e2.loaded * 100) / e2.total)\r\n //document.getElementById('uploadPercent').innerHTML = percentCompleted\r\n console.log('Private Upload Progress: ', percentCompleted)\r\n },\r\n })\r\n console.log('Private Upload Progress: Upload Completed')\r\n\r\n /*const { data } = await axios.put(\r\n BACKEND_ENDPOINT + '/upload',\r\n formData\r\n /*config*/\r\n //)\r\n console.log('LOG after upload file path: ', fileS3Name)\r\n setImage(fileS3Name)\r\n setUploading(false)\r\n } catch (error) {\r\n console.error(error)\r\n setUploading(false)\r\n }\r\n }\r\n\r\n const submitHandler = (e) => {\r\n e.preventDefault()\r\n dispatch(\r\n updateProduct({\r\n _id: productId,\r\n name,\r\n price,\r\n image,\r\n brand,\r\n category,\r\n description,\r\n countInStock,\r\n isCreated: true,\r\n })\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n \r\n Go Back\r\n \r\n \r\n

Edit Product

\r\n {loadingUpdate && }\r\n {errorUpdate && {errorUpdate}}\r\n {loading ? (\r\n \r\n ) : error ? (\r\n {error}\r\n ) : (\r\n
\r\n \r\n Name\r\n setName(e.target.value)}\r\n >\r\n \r\n \r\n Price\r\n setPrice(e.target.value)}\r\n >\r\n \r\n\r\n \r\n Image\r\n setImage(e.target.value)}\r\n >\r\n \r\n {/* */}\r\n {uploading && }\r\n \r\n \r\n Brand\r\n setBrand(e.target.value)}\r\n >\r\n \r\n\r\n \r\n Count In Stock\r\n setCountInStock(e.target.value)}\r\n >\r\n \r\n\r\n \r\n Category\r\n setCategory(e.target.value)}\r\n >\r\n \r\n\r\n \r\n Description\r\n setDescription(e.target.value)}\r\n >\r\n \r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ProductEditScreen\r\n","import React from 'react'\nimport { Container } from 'react-bootstrap'\nimport Header from './components/Header'\nimport Footer from './components/Footer'\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\nimport HomeScreen from './screens/HomeScreen'\nimport LoginScreen from './screens/LoginScreen'\nimport TechScreen from './screens/TechScreen'\nimport PixanScreen from './screens/PixanScreen'\nimport TaanahScreen from './screens/TaanahScreen'\n// import UnderConstructionScreen from './screens/UnderConstructionScreen'\nimport RegisterScreen from './screens/RegisterScreen'\nimport ProfileScreen from './screens/ProfileScreen'\nimport PixanHomeScreen from './screens/PixanHomeScreen'\nimport PixanProductScreen from './screens/PixanHomeScreen'\nimport CartScreen from './screens/CartScreen'\nimport ShippingScreen from './screens/ShippingScreen'\nimport PaymentScreen from './screens/PaymentScreen'\nimport PlaceOrderScreen from './screens/PlaceOrderScreen'\nimport OrderScreen from './screens/OrderScreen'\nimport ProductListScreen from './screens/ProductListScreen'\nimport ProductEditScreen from './screens/ProductEditScreen'\n\nimport dotenv from 'dotenv'\n\n//https://dev.d2zqth0d2er18d.amplifyapp.com\nconst App = () => {\n dotenv.config()\n return (\n <>\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n
\n