diff --git a/src/components/UploadProduct/index.jsx b/src/components/UploadProduct/index.jsx index 67cd95b..25a5a80 100644 --- a/src/components/UploadProduct/index.jsx +++ b/src/components/UploadProduct/index.jsx @@ -8,7 +8,7 @@ import ProductUploadField from "./ProductUploadField"; import LoadingSpinner from "../Spinners/LoadingSpinner"; import usersService from "../../services/UsersService"; -export default function UploadProduct() { +export default function UploadProduct({uploadTypes}) { const apiCall = new usersService() const [requestStatus, setRequestStatus] = useState({loading: false, status: null, message: ''}) // DETERMINES THE STATUS OF UPLOAD @@ -88,7 +88,7 @@ export default function UploadProduct() { // most importend imgRead.readAsDataURL(e.target.files[0]); } - if (file.length) { + if (file?.length) { if (file[0].name) { setSelectedFile(file?.[0].name); setImgDetails(file?.[0]) @@ -134,26 +134,33 @@ export default function UploadProduct() { setRequestStatus({loading: false, status: false, message: ''}) },5000) } - - if(imgDetails.size > 2097152){ // CHECKS IF IMAGE SIZE IS MORE THAN "MB" - setRequestStatus({loading: false, status: null, message: 'Image must be less than 2MB'}) - return setTimeout(()=>{ - setRequestStatus({loading: false, status: false, message: ''}) - },5000) - } let reqData = { // PAYLOAD FOR API CALL - file_name: selectedFile, + file_name: selectedFile.substring(0,21).replace(/ /gi, ""),//selectedFile.replace(/[ -]/gi, ""), file_size: imgDetails.size, file_type: imgDetails.type, file_data: img, - item_name: itemName, - item_description: description, + title: itemName, + description: description, msg_type: 'FILE', // action: 'WRENCHBOARD_RESOURCE_MYFILES', action: 11307 } - // console.log('TESTING', reqData) + + if(!isValidFile(imgDetails, uploadTypes?.data)){ // FUNCTION TO CHECK IF FILE TYPE IS VALID + setRequestStatus({loading: false, status: null, message: 'File type not supported'}) + return setTimeout(()=>{ + setRequestStatus({loading: false, status: false, message: ''}) + },5000) + } + + let validSize = isValidFileSize(imgDetails, uploadTypes?.data) // FUNCTION TO CHECK IF FILE SIZE IS VALID + if(!validSize.status){ + setRequestStatus({loading: false, status: null, message: validSize.message}) + return setTimeout(()=>{ + setRequestStatus({loading: false, status: false, message: ''}) + },5000) + } //API CALL TO UPLOAD COMES HERE setRequestStatus({loading: true, status: null, message: ''}) // SETS REQUEST LOADING TRUE @@ -263,8 +270,15 @@ export default function UploadProduct() { Image,Video,Audio or Documents

- File types supported: JPG, PNG, GIP, SVG, MP4, MP3, WEBM, - OGG, GLB, GLTF + File types supported: {uploadTypes.loading && loading...} + {/* JPG, PNG, GIP, SVG, MP4, MP3, WEBM, OGG, GLB, GLTF */} + {uploadTypes?.data?.length ? + uploadTypes?.data?.map((item, index) => { + return index != uploadTypes.data.length-1 ? `${item.name}, ` : `${item.name}` + }) + : + null + }

@@ -415,7 +429,7 @@ export default function UploadProduct() {
{/* heading */} -
+

Item Privew

@@ -561,3 +575,37 @@ export default function UploadProduct() { ); } + + + + +//FUNCTIONS to check if file upload type is valid +const isValidFile = (file, supportedFile=[]) => { + let fileType = file.type.split("/")[1]; + let valid = supportedFile.filter(item => ( + item.name.toLowerCase() == fileType.toLowerCase() + )) + if(valid.length){ + return true + }else{ + return false + } +} + +//FUNCTIONS TO CHECK IF FILE SIZE IS VALID +const isValidFileSize = (file, supportedFile=[]) => { + let fileType = file.type.split("/")[1]; + let fileSize = file.size; + let valid = supportedFile.filter(item => ( + item.name.toLowerCase() == fileType.toLowerCase() + )) + if(valid.length){ + if((Number(valid[0].max_size_mb) * 1048576) >= fileSize){ + return {status: true} + }else{ + return {status: false, message: `File must not exceed ${valid[0].max_size_mb}MB`} + } + }else{ + return false + } +} diff --git a/src/views/UploadProductPage.jsx b/src/views/UploadProductPage.jsx index 5c51b17..52d7dcd 100644 --- a/src/views/UploadProductPage.jsx +++ b/src/views/UploadProductPage.jsx @@ -1,6 +1,22 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import UploadProduct from "../components/UploadProduct"; +import usersService from "../services/UsersService"; export default function UploadProductPage() { - return ; + const [uploadTypes, setUploadTypes] = useState({loading: true, data: []}); + const api = new usersService(); + + const getUploadTypes = async () => { + try { + const res = await api.getResourceList(); + setUploadTypes({loading: false, data: res?.data?.upload_types.data}); + } catch (error) { + setUploadTypes({loading: false, data: []}); + throw new Error("Error getting mode"); + } + }; + useEffect(() => { + getUploadTypes(); + }, []); + return ; }