From 5c7cb6f8dbd7380a99b7a83983d9431cef2005c0 Mon Sep 17 00:00:00 2001 From: Vasilii Mikhailovskii Date: Tue, 3 Dec 2024 00:17:47 +0200 Subject: [PATCH] add mange qr-codes --- apps/frontend/components.d.ts | 1 + apps/frontend/public/manifest.json | 4 +- apps/frontend/src/components/QueryRender.vue | 20 ++++-- .../src/components/manage/QRCodeCard.vue | 46 ++++++++++++++ apps/frontend/src/constants/routes.ts | 1 + apps/frontend/src/router/index.ts | 12 +++- .../src/views/ManageDashboardView.vue | 63 +++++++++++++++++++ .../src/server.ts | 4 +- 8 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 apps/frontend/src/components/manage/QRCodeCard.vue create mode 100644 apps/frontend/src/views/ManageDashboardView.vue diff --git a/apps/frontend/components.d.ts b/apps/frontend/components.d.ts index 814b592..9593fea 100644 --- a/apps/frontend/components.d.ts +++ b/apps/frontend/components.d.ts @@ -28,6 +28,7 @@ declare module 'vue' { InputText: typeof import('primevue/inputtext')['default'] ManagePlacementInstructions: typeof import('./src/components/manage/ManagePlacementInstructions.vue')['default'] ProgressSpinner: typeof import('primevue/progressspinner')['default'] + QRCodeCard: typeof import('./src/components/manage/QRCodeCard.vue')['default'] QueryRender: typeof import('./src/components/QueryRender.vue')['default'] RadioButton: typeof import('primevue/radiobutton')['default'] ReadContactInfo: typeof import('./src/components/read/ReadContactInfo.vue')['default'] diff --git a/apps/frontend/public/manifest.json b/apps/frontend/public/manifest.json index 4d3d9bf..2eeb2a0 100644 --- a/apps/frontend/public/manifest.json +++ b/apps/frontend/public/manifest.json @@ -2,7 +2,9 @@ "name": "НаСвязи", "short_name": "НаСвязи", "categories": ["communication", "utilities", "social", "productivity"], - "start_url": "/", + "id": "https://hereconnect.condev.ru", + "start_url": "https://hereconnect.condev.ru/manage/dashboard", + "scope": "https://hereconnect.condev.ru/", "icons": [ { "src": "/android-chrome-192x192.png", diff --git a/apps/frontend/src/components/QueryRender.vue b/apps/frontend/src/components/QueryRender.vue index 04ec19d..ba72954 100644 --- a/apps/frontend/src/components/QueryRender.vue +++ b/apps/frontend/src/components/QueryRender.vue @@ -5,16 +5,26 @@ type Props = { query: UseQueryReturnType } +const slots = defineSlots<{ + default?: (slotBindings: { data: R }) => void + error?: (slotBindings: { error: E; reload: typeof refetch }) => void + loading?: () => void +}>() + const { query } = defineProps() const { data, error, refetch, isSuccess, isError, isLoading } = query diff --git a/apps/frontend/src/components/manage/QRCodeCard.vue b/apps/frontend/src/components/manage/QRCodeCard.vue new file mode 100644 index 0000000..a78b3e4 --- /dev/null +++ b/apps/frontend/src/components/manage/QRCodeCard.vue @@ -0,0 +1,46 @@ + + + diff --git a/apps/frontend/src/constants/routes.ts b/apps/frontend/src/constants/routes.ts index e871935..6af7992 100644 --- a/apps/frontend/src/constants/routes.ts +++ b/apps/frontend/src/constants/routes.ts @@ -3,6 +3,7 @@ export const ROUTE_NAMES = { CREATE: 'create', MANAGE_QR_CODE_READY: 'manage-qr-code-ready', MANAGE_QR_CODE_CHAT: 'manage-qr-code-chat', + MANAGE_DASHBOARD: 'manage-dashboard', READ_QR_CODE: 'read-qr-code', DONATE: 'donate', PUBLIC_CHAT: 'public-chat', diff --git a/apps/frontend/src/router/index.ts b/apps/frontend/src/router/index.ts index 09f117a..f327cb2 100644 --- a/apps/frontend/src/router/index.ts +++ b/apps/frontend/src/router/index.ts @@ -14,13 +14,19 @@ const routes = [ component: () => import('@/views/CreateView.vue'), }, { - path: '/manage/:qr_code_uri/ready', + path: '/manage/dashboard', + name: ROUTE_NAMES.MANAGE_DASHBOARD, + component: () => import('@/views/ManageDashboardView.vue'), + props: true, + }, + { + path: '/manage/qr/:qr_code_uri/ready', name: ROUTE_NAMES.MANAGE_QR_CODE_READY, component: () => import('@/views/ManageQRCodeReadyView.vue'), props: true, }, { - path: '/manage/:qr_code_uri/chat/:chat', + path: '/manage/qr/:qr_code_uri/chat/:chat', name: ROUTE_NAMES.MANAGE_QR_CODE_CHAT, component: () => import('@/views/ManageQRCodeChatView.vue'), props: true, @@ -37,7 +43,7 @@ const routes = [ component: () => import('@/views/DonateView.vue'), }, { - path: '/chat/:qr_code_uri/:chat', + path: '/read/:qr_code_uri/chat/:chat', name: ROUTE_NAMES.PUBLIC_CHAT, component: () => import('@/views/PublicChatView.vue'), props: true, diff --git a/apps/frontend/src/views/ManageDashboardView.vue b/apps/frontend/src/views/ManageDashboardView.vue new file mode 100644 index 0000000..4c47d69 --- /dev/null +++ b/apps/frontend/src/views/ManageDashboardView.vue @@ -0,0 +1,63 @@ + + + diff --git a/services/message-delivery-method-web-push/src/server.ts b/services/message-delivery-method-web-push/src/server.ts index 5988ec7..9ba60c4 100644 --- a/services/message-delivery-method-web-push/src/server.ts +++ b/services/message-delivery-method-web-push/src/server.ts @@ -121,7 +121,7 @@ const start = async () => { requireInteraction: true, timestamp, data: { - url: `/manage/${msgDoc.qr_code_uri}/chat/${msgDoc.chat}#message-${msgDoc.created_at}`, + url: `/manage/qr/${msgDoc.qr_code_uri}/chat/${msgDoc.chat}#message-${msgDoc.created_at}`, payload: { tag }, }, } as const; @@ -200,7 +200,7 @@ const start = async () => { requireInteraction: true, timestamp, data: { - url: `/chat/${msgDoc.qr_code_uri}/${msgDoc.chat}#message-${msgDoc.created_at}`, + url: `/read/qr/${msgDoc.qr_code_uri}/chat/${msgDoc.chat}#msg-${msgDoc.created_at}`, payload: { tag }, }, } as const;