From afbdeb086cf099892cd328f93b0be800f0ba5d86 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 14:34:12 +0200 Subject: [PATCH] ENH - match Local Pages photo workflow --- frontend/src/views/apps/LocalPagesApp.vue | 70 +++++++++++++++++++++-- sky_phone/source/html/index.html | 2 +- 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/frontend/src/views/apps/LocalPagesApp.vue b/frontend/src/views/apps/LocalPagesApp.vue index 2806ad3..653c3d3 100644 --- a/frontend/src/views/apps/LocalPagesApp.vue +++ b/frontend/src/views/apps/LocalPagesApp.vue @@ -7,6 +7,8 @@ import { ChevronRight, Compass, Heart, + ImagePlus, + Images, MapPin, Plus, Search, @@ -20,6 +22,7 @@ import { computed, onMounted, ref } from 'vue' import { useRouter } from 'vue-router' import CityMarktSelect from '@/components/citymarkt/CityMarktSelect.vue' +import CityMarktGallery from '@/components/citymarkt/CityMarktGallery.vue' import { useAccountStore } from '@/stores/account' import { useMediaStore } from '@/stores/media' import { usePagesStore } from '@/stores/pages' @@ -42,6 +45,8 @@ const galleryIndex = ref(0) const search = ref('') const category = ref('all') const feedback = ref('') +const photoSource = ref<'camera' | 'gallery' | null>(null) +const cameraFlash = ref(false) const draft = ref({ body: '', category: 'recommendation' as Exclude, @@ -72,6 +77,11 @@ const isAuthenticated = computed(() => Boolean(account.email)) const selectedPhotos = computed(() => draft.value.images .map((id) => media.photos.find((photo) => photo.id === id)) .filter((photo) => photo !== undefined)) +const selectedImages = computed(() => selectedPhotos.value.map((photo, index) => ({ + gradient: photo.gradient, + media_id: photo.id, + sort_order: index + 1, +}))) const canPublish = computed(() => { const title = draft.value.title.trim().length const body = draft.value.body.trim().length @@ -133,7 +143,9 @@ function capturePhoto(): void { showFeedback('Apps.localPages.photoLimit') return } + cameraFlash.value = true draft.value.images.push(media.capture().id) + window.setTimeout(() => (cameraFlash.value = false), 120) } async function publish(): Promise { @@ -153,6 +165,7 @@ async function publish(): Promise { return } draft.value = { body: '', category: 'recommendation', district: 'los_santos', images: [], title: '' } + photoSource.value = null tab.value = 'feed' screen.value = 'main' showFeedback('Apps.localPages.published') @@ -258,10 +271,57 @@ onMounted(() => void loadFeed())