diff --git a/frontend/src/services/businessService.ts b/frontend/src/services/businessService.ts index a088850..327c433 100644 --- a/frontend/src/services/businessService.ts +++ b/frontend/src/services/businessService.ts @@ -2,7 +2,7 @@ import { supabase } from '@/supabase' import type { Business } from '@/types' -const SELECT_FIELDS = 'id, name, address, phone, image_url, social_media, category, latitude, longitude, area, description, website, supplier_name, supplier_description, schedule, whatsapp, instagram, facebook, gallery_images, updated_at, is_featured' +const SELECT_FIELDS = 'id, name, address, phone, image_url, social_media, category, latitude, longitude, area, description, website, supplier_name, supplier_description, schedule, whatsapp, instagram, facebook, gallery_images, updated_at, is_featured, parent_business_id' export const businessService = { /** Helper to upload file to supabase storage */ @@ -43,12 +43,14 @@ export const businessService = { } else if (key === 'gallery_images' && typeof value === 'string') { // Comes as JSON string from the form try { payload[key] = JSON.parse(value) } catch { /* ignore */ } - } else if (value !== 'null' && value !== '' && key !== 'file' && key !== 'image') { - if (value === 'true') { + } else if (key !== 'file' && key !== 'image') { + if (value === 'null') { + payload[key] = null + } else if (value === 'true') { payload[key] = true } else if (value === 'false') { payload[key] = false - } else { + } else if (value !== '') { payload[key] = value } } diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 6956ae7..1342da6 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -103,6 +103,7 @@ export interface Business { supplier_name?: string | null // Name of the business/operator supplier_description?: string | null // Info about the business/operator is_featured?: boolean // To show on Map + parent_business_id?: string | null // Link to parent company/business // Template/Mold fields schedule?: string | null // "Lun-Sáb 8am-10pm" whatsapp?: string | null // WhatsApp number diff --git a/frontend/src/views/AdminBusinessEditor.vue b/frontend/src/views/AdminBusinessEditor.vue index 08eb0e7..d30aac1 100644 --- a/frontend/src/views/AdminBusinessEditor.vue +++ b/frontend/src/views/AdminBusinessEditor.vue @@ -10,7 +10,8 @@ const route = useRoute(); const authStore = useAuthStore(); const isLoading = ref(false); const isEditing = ref(false); -const showMessage = ref({ text: '', type: '' }); +const showMessage = ref({ text: '', type: '' as 'success' | 'error' | '' }); +const parentOptions = ref([]); const selectedFile = ref(null); const selectedFileName = ref(''); @@ -32,17 +33,23 @@ const businessForm = ref>({ website: '', schedule: '', whatsapp: '', - instagram: '', facebook: '', supplier_name: '', supplier_description: '', is_featured: false, + parent_business_id: null, gallery_images: [] }); const previewImageUrl = ref('https://images.unsplash.com/photo-1555396273-367ea4eb4db5?q=80&w=2074&auto=format&fit=crop'); onMounted(async () => { + try { + const allBiz = await businessService.getAllBusinesses(); + const routeId = route.params.id as string; + parentOptions.value = allBiz.filter(b => b.id !== routeId); + } catch (e) {} + const id = route.params.id as string; if (id && id !== 'new') { isEditing.value = true; @@ -120,12 +127,16 @@ async function saveBusiness() { formData.append('schedule', businessForm.value.schedule || ''); formData.append('whatsapp', businessForm.value.whatsapp || ''); formData.append('instagram', businessForm.value.instagram || ''); - formData.append('facebook', businessForm.value.facebook || ''); formData.append('supplier_name', businessForm.value.supplier_name || ''); formData.append('supplier_description', businessForm.value.supplier_description || ''); formData.append('is_featured', String(businessForm.value.is_featured === true)); - + if (businessForm.value.parent_business_id) { + formData.append('parent_business_id', businessForm.value.parent_business_id); + } else { + formData.append('parent_business_id', 'null'); + } + if (businessForm.value.gallery_images?.length) { formData.append('gallery_images', JSON.stringify(businessForm.value.gallery_images)); } @@ -272,6 +283,17 @@ const catEmoji = computed(() => CATEGORY_EMOJI[businessForm.value.category || '' +
+ + +

Útil si estás creando una 'Actividad' que pertenece a un 'Restaurante' o 'Local' existente en SIBU.

+
+