Compare commits

...

5 Commits

Author SHA1 Message Date
victorAnumudu 283994e43a pauload fixed 2026-01-21 10:25:56 +01:00
ameye b7d242ff0a Merge branch 'template-media-set' of MERMS/MermsPanelReactJS into master 2026-01-21 08:44:57 +00:00
victorAnumudu f6bae30bdd btn name changed 2026-01-21 04:19:05 +01:00
victorAnumudu a7e2e865de added template media set endpoint 2026-01-21 03:27:48 +01:00
ameye 51887cf0d6 Merge branch 'upload-btn-bug' of MERMS/MermsPanelReactJS into master 2026-01-20 17:11:43 +00:00
3 changed files with 57 additions and 52 deletions
@@ -9,6 +9,8 @@ import UploadModal from './UploadModal';
const TemplateConfigure = ({productData}) => { const TemplateConfigure = ({productData}) => {
const [selectedSectionDetails, setSelectedSectionDetails] = useState({})
// /panel/myproduct/template-config // /panel/myproduct/template-config
const queryClient = useQueryClient() const queryClient = useQueryClient()
@@ -96,7 +98,7 @@ const TemplateConfigure = ({productData}) => {
}}> }}>
<div style={{textAlign: 'right',width: '100%'}}></div> <div style={{textAlign: 'right',width: '100%'}}></div>
{/* [Change Image] */} {/* [Change Image] */}
<label className='w-100 text-end' data-bs-toggle="modal" data-bs-target="#verticalCenter" style={{cursor: 'pointer'}}>[Change Image]</label> <label onClick={()=>setSelectedSectionDetails(item)} className='w-100 text-end' data-bs-toggle="modal" data-bs-target="#verticalCenter" style={{cursor: 'pointer'}}>[Change Image]</label>
{/* <input id={item?.id} name={item?.id} className="d-none form-control form-control-sm" type="file" onChange={handleFileChange}/> */} {/* <input id={item?.id} name={item?.id} className="d-none form-control form-control-sm" type="file" onChange={handleFileChange}/> */}
<div> <div>
<h5 className="mt-0 mb-1">{item?.name}</h5> <h5 className="mt-0 mb-1">{item?.name}</h5>
@@ -121,7 +123,7 @@ const TemplateConfigure = ({productData}) => {
} </div> } </div>
<UploadModal /> <UploadModal productId={productData?.product_id} selectedSectionDetails={selectedSectionDetails} />
</> </>
} }
@@ -2,21 +2,24 @@ import React, { useRef, useState } from 'react'
import { Modal } from "bootstrap"; import { Modal } from "bootstrap";
import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query';
import queryKeys from '../../../services/queryKeys'; import queryKeys from '../../../services/queryKeys';
import {getMediaFileList, getTemplateConfig, uploadFile} from '../../../services/services'; import {getMediaFileList, templateMediaSet} from '../../../services/services';
export default function UploadModal() { export default function UploadModal({productId, selectedSectionDetails}) {
const [selectedFiles, setSelectedFiles] = useState([]) const queryClient = useQueryClient()
const [selectedFile, setSelectedFile] = useState('')
const handleSelectedFiles = (file_uid) => { const handleSelectedFile = (file_uid) => {
if(selectedFiles.length && selectedFiles.includes(file_uid)){ // if(selectedFile.length && selectedFile.includes(file_uid)){
let indexOfItem = selectedFiles.indexOf(file_uid) // let indexOfItem = selectedFile.indexOf(file_uid)
let oldFiles = [...selectedFiles] // let oldFiles = [...selectedFile]
oldFiles.splice(indexOfItem, 1) // oldFiles.splice(indexOfItem, 1)
setSelectedFiles(oldFiles) // setSelectedFile(oldFiles)
}else{ // }else{
setSelectedFiles(prev => [...prev, file_uid]) // setSelectedFile(prev => [...prev, file_uid])
} // }
setSelectedFile(file_uid)
} }
const modalRef = useRef(null) const modalRef = useRef(null)
@@ -37,33 +40,29 @@ export default function UploadModal() {
modal && modal.hide(); modal && modal.hide();
}; };
const uploadFileMutation = useMutation({ const changeTemplateMediaSet = useMutation({
mutationFn: (fields) => { mutationFn: (fields) => {
if(!fields.file){ if(!fields.file_uid){
throw({message: 'Please select a file first!'}) throw({message: 'Please select a file first!'})
} }
// return uploadFile(fields) return templateMediaSet(fields)
// remember to close the modal },
dismissModal()
setTimeout(()=>{
uploadFileMutation.reset()
}, 3000)
},
onSuccess: (res) => { onSuccess: (res) => {
// console.log('res', res.data) // console.log('res', res.data)
// if(res.data.resultCode != '0' || !res?.data?.pending_uid){ if(res.data.resultCode != '0'){
// throw({message: res?.data?.resultDescription}) throw({message: res?.data?.resultDescription})
// } }
// setSelectedFile({id: '', img: ''}) setSelectedFile('')
// queryClient.refetchQueries({ dismissModal() // to close modal
// queryKey: [...queryKeys.my_files], queryClient.refetchQueries({
// type: 'active', queryKey: [...queryKeys.myTemplateConfig],
// exact: true, // type: 'active',
// }) // exact: true,
})
}, },
onSettled: () => { onSettled: () => {
setTimeout(()=>{ setTimeout(()=>{
uploadFileMutation.reset() changeTemplateMediaSet.reset()
}, 3000) }, 3000)
} }
}) })
@@ -71,10 +70,13 @@ export default function UploadModal() {
const handleUpload = () => { const handleUpload = () => {
let reqData = { let reqData = {
token: localStorage.getItem("token"), // USER TOKEN token: localStorage.getItem("token"), // USER TOKEN
member_uid: localStorage.getItem("uid"), // USER UID uid: localStorage.getItem("uid"), // USER UID
// file: selectedFile?.img product_id: productId,
file_uid: selectedFile,
image_id: selectedSectionDetails?.id
}; };
uploadFileMutation.mutate(reqData) // console.log('reqData', reqData)
changeTemplateMediaSet.mutate(reqData)
} }
const {data, isFetching, isError, error} = useQuery({ const {data, isFetching, isError, error} = useQuery({
@@ -121,9 +123,9 @@ export default function UploadModal() {
{mediaFileList?.file_list?.map(item => { {mediaFileList?.file_list?.map(item => {
const file_url = (mediaFileList?.media_server + "/" + item?.file_group + "/" + item?.file_uid + "/" + item.filename).toLowerCase(); const file_url = (mediaFileList?.media_server + "/" + item?.file_group + "/" + item?.file_uid + "/" + item.filename).toLowerCase();
return( return(
<div onClick={()=>handleSelectedFiles(item?.file_uid)} className={`p-3 text-center col-4`} style={{cursor: 'pointer'}}> <div onClick={()=>handleSelectedFile(item?.file_uid)} className={`p-3 text-center col-4`} style={{cursor: 'pointer'}}>
<div className={`p-3 ${selectedFiles.includes(item?.file_uid) && 'bg-light'}`}> <div className={`p-3 ${(selectedFile == item?.file_uid) && 'bg-light'}`} style={{Height: '250px'}}>
<img key={item?.file_uid} className="img-fluid" src={file_url} alt='file-image' /> <img key={item?.file_uid} className="img-fluid" style={{}} src={file_url} alt='file-image' />
</div> </div>
</div> </div>
) )
@@ -135,33 +137,26 @@ export default function UploadModal() {
} }
</div> </div>
} }
{/* <div style={{fontSize: '18px'}} className="" dangerouslySetInnerHTML={{__html: saleText}}/> */} {changeTemplateMediaSet.error &&
{/* {mutation.error &&
<> <>
<div className="col-12"> <div className="col-12">
<p className='text-danger'>{mutation.error.message}</p> <p className='text-danger'>{changeTemplateMediaSet.error.message}</p>
</div> </div>
</> </>
} }
{mutation.isSuccess && {changeTemplateMediaSet.isSuccess &&
<> <>
<div className="col-12"> <div className="col-12">
<p className='text-success'>{'subscription is successful'}</p> <p className='text-success'>{'subscription is successful'}</p>
</div> </div>
</> </>
} */} }
{/* {requestStatus.message && (
<div className="col-12">
<p className={`p-2 text-center ${requestStatus.status ? 'text-success' : 'text-danger'}`}>{requestStatus.message}</p>
</div>
)} */}
</div> </div>
<div className="modal-footer"> <div className="modal-footer">
<button type="button" className="btn btn-danger" data-bs-dismiss="modal">Cancel</button> <button type="button" className="btn btn-danger" data-bs-dismiss="modal">Cancel</button>
{selectedFiles.length > 0 && {selectedFile &&
<button type="button" className="btn btn-primary" disabled={uploadFileMutation?.isPending || uploadFileMutation?.isSuccess} onClick={handleUpload}>{uploadFileMutation?.isPending ? 'Upload...' : uploadFileMutation?.isSuccess ? 'Uploaded' : 'Upload'}</button> <button type="button" className="btn btn-primary" disabled={changeTemplateMediaSet?.isPending || changeTemplateMediaSet?.isSuccess} onClick={handleUpload}>{changeTemplateMediaSet?.isPending ? 'Applying...' : changeTemplateMediaSet?.isSuccess ? 'Applied' : 'Apply'}</button>
} }
</div> </div>
</div> </div>
+8
View File
@@ -298,6 +298,14 @@ export const uploadFile = (reqData) => {
return postAuxEnd(`/upload/webfiles`, postData, true) return postAuxEnd(`/upload/webfiles`, postData, true)
} }
// FUNCTION TO CHANGE TEMPLATE MEDIA SET
export const templateMediaSet = (reqData) => {
let postData = {
...reqData,
}
return postAuxEnd(`/panel/myproduct/template-media-set`, postData, false)
}
export const getReportsTopicsList = (reqData) => { export const getReportsTopicsList = (reqData) => {
let postData = { let postData = {
...reqData, ...reqData,