From e2aa60c54c49afad010e2d5758bfb9b8bfcc6e7d Mon Sep 17 00:00:00 2001 From: Kavehhn174 Date: Wed, 19 Aug 2026 06:30:07 +0330 Subject: [PATCH] fix(property): load signed urls for image gallery and strip query params on save --- src/views/pages/Property/CreateProperty.vue | 46 +++++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/src/views/pages/Property/CreateProperty.vue b/src/views/pages/Property/CreateProperty.vue index c8f2296..7a255fc 100644 --- a/src/views/pages/Property/CreateProperty.vue +++ b/src/views/pages/Property/CreateProperty.vue @@ -322,11 +322,26 @@ const groupedFeatures = computed(() => { const fillImagesArray = (urlsArray) => { if (!Array.isArray(urlsArray)) return []; - return urlsArray.map((url) => ({ - name: url.split('/').pop() || 'file', - url: url, - progress: 100 - })); + return urlsArray.map((item) => { + if (typeof item === 'object' && item !== null) { + const rawUrl = item.url || item.source || ''; + const rawName = item.fileName || item.name || (rawUrl ? rawUrl.split('?')[0].split('/').pop() : 'file'); + return { + name: rawName, + url: rawUrl, + source: item.fileName || rawUrl.split('?')[0].split('/').pop() || '', + progress: 100 + }; + } + const urlStr = String(item || ''); + const cleanUrl = urlStr.split('?')[0]; + return { + name: cleanUrl.split('/').pop() || 'file', + url: urlStr, + source: cleanUrl.split('/').pop() || '', + progress: 100 + }; + }); }; const handleSelectCategory = (catId) => { @@ -384,8 +399,15 @@ onBeforeMount(async () => { property.value = { ...property.value, ...data }; featuresValues.value = extractFeaturesValues(data.features); - mainImageUrlsWithData.value = fillImagesArray(data.mainImageUrls || []); - documentUrlsWithData.value = fillImagesArray(data.documentUrls || []); + const mainImages = (data.signedMainImageUrls && data.signedMainImageUrls.length > 0) + ? data.signedMainImageUrls + : (data.mainImageUrls || []); + const docs = (data.signedDocumentUrls && data.signedDocumentUrls.length > 0) + ? data.signedDocumentUrls + : (data.documentUrls || []); + + mainImageUrlsWithData.value = fillImagesArray(mainImages); + documentUrlsWithData.value = fillImagesArray(docs); if (data.category) { const catId = typeof data.category === 'object' ? data.category._id : data.category; @@ -419,10 +441,16 @@ const saveProperty = async () => { isSaving.value = true; try { property.value.mainImageUrls = (mainImageUrlsWithData.value || []) - .map((x) => (typeof x === 'string' ? x : x.url || x.source || '')) + .map((x) => { + const raw = typeof x === 'string' ? x : (x.url || x.source || ''); + return raw.split('?')[0]; + }) .filter(Boolean); property.value.documentUrls = (documentUrlsWithData.value || []) - .map((x) => (typeof x === 'string' ? x : x.url || x.source || '')) + .map((x) => { + const raw = typeof x === 'string' ? x : (x.url || x.source || ''); + return raw.split('?')[0]; + }) .filter(Boolean); property.value.features = serializeFeaturesPayload(featuresValues.value);