From dec770608958ac23010a7869a3672203ee455040 Mon Sep 17 00:00:00 2001 From: Nick Kosarev Date: Wed, 27 Aug 2025 10:49:51 +0200 Subject: [PATCH] feat: feedback service --- .../atrium-telegram/app/assets/css/styles.css | 1 + .../atrium-telegram/app/components/Button.vue | 10 +---- .../app/components/CreateCard.vue | 8 +++- .../app/components/Navigation.vue | 8 +--- .../app/components/TaskCard.vue | 38 +++++++--------- .../app/components/TaskList.vue | 43 +++++++++++-------- .../app/components/TasksTodaySwitch.vue | 2 + .../app/composables/useFeedback.ts | 15 +++++++ apps/atrium-telegram/app/pages/index.vue | 21 +++++---- apps/atrium-telegram/i18n/locales/ru-RU.json | 14 ++++++ 10 files changed, 96 insertions(+), 64 deletions(-) create mode 100644 apps/atrium-telegram/app/composables/useFeedback.ts diff --git a/apps/atrium-telegram/app/assets/css/styles.css b/apps/atrium-telegram/app/assets/css/styles.css index d04c34f3..69723736 100644 --- a/apps/atrium-telegram/app/assets/css/styles.css +++ b/apps/atrium-telegram/app/assets/css/styles.css @@ -3,6 +3,7 @@ --ui-secondary: var(--tg-theme-link-color); --ui-border: var(--tg-theme-section-separator-color); --ui-text: var(--tg-theme-text-color); + --ui-text-muted: var(--tg-theme-hint-color); --ui-bg: var(--tg-theme-section-bg-color); --ui-color-neutral-400: var(--tg-theme-subtitle-text-color); diff --git a/apps/atrium-telegram/app/components/Button.vue b/apps/atrium-telegram/app/components/Button.vue index 4cbe5afe..d784c74a 100644 --- a/apps/atrium-telegram/app/components/Button.vue +++ b/apps/atrium-telegram/app/components/Button.vue @@ -1,18 +1,12 @@ diff --git a/apps/atrium-telegram/app/components/CreateCard.vue b/apps/atrium-telegram/app/components/CreateCard.vue index d909563c..427b5b28 100644 --- a/apps/atrium-telegram/app/components/CreateCard.vue +++ b/apps/atrium-telegram/app/components/CreateCard.vue @@ -1,5 +1,5 @@ diff --git a/apps/atrium-telegram/app/components/Navigation.vue b/apps/atrium-telegram/app/components/Navigation.vue index f7ad42bd..9daaa332 100644 --- a/apps/atrium-telegram/app/components/Navigation.vue +++ b/apps/atrium-telegram/app/components/Navigation.vue @@ -31,9 +31,8 @@ diff --git a/apps/atrium-telegram/app/components/TaskCard.vue b/apps/atrium-telegram/app/components/TaskCard.vue index 2e8b41db..c2427ebe 100644 --- a/apps/atrium-telegram/app/components/TaskCard.vue +++ b/apps/atrium-telegram/app/components/TaskCard.vue @@ -24,17 +24,16 @@ - - - +
@@ -116,7 +116,7 @@ const { task } = defineProps<{ }>() const { t } = useI18n() -const toast = useToast() +const { vibrate } = useFeedback() const actionToast = useActionToast() const taskStore = useTaskStore() const userStore = useUserStore() @@ -140,7 +140,6 @@ const canFocus = computed(() => task.performerId === userStore.id && !isComplete const isFocused = computed(() => task.id === performer.value?.focusedTaskId) const checkbox = ref(false) -const toastId = ref(`task-close-${task.id}`) const items = computed(() => { const menuItems: DropdownMenuItem[] = [ @@ -195,6 +194,8 @@ async function onUnfocus() { } function onStartCompleting() { + vibrate() + if (!checkbox.value) { return } @@ -202,14 +203,5 @@ function onStartCompleting() { modalCompleteTask.open({ taskId: task.id }) checkbox.value = false - - toast.add({ - id: toastId.value, - title: 'Закрываем задачу?', - description: 'Сразу как успешную или есть что добавить? Заполните форму.', - color: 'secondary', - type: 'foreground', - duration: 5000, - }) } diff --git a/apps/atrium-telegram/app/components/TaskList.vue b/apps/atrium-telegram/app/components/TaskList.vue index fa45a9ec..5e0f76cc 100644 --- a/apps/atrium-telegram/app/components/TaskList.vue +++ b/apps/atrium-telegram/app/components/TaskList.vue @@ -54,25 +54,21 @@
- - - + - - - +
@@ -103,6 +99,7 @@ const { listId, currentUserId } = defineProps<{ currentUserId: string }>() +const { vibrate } = useFeedback() const userStore = useUserStore() const taskStore = useTaskStore() @@ -129,4 +126,14 @@ const canEdit = computed(() => list.value?.chat?.members.some((member) => member const overlay = useOverlay() const modalCreateTask = overlay.create(ModalCreateTask) const modalUpdateTaskList = overlay.create(ModalUpdateTaskList) + +function handleEditTaskList() { + vibrate() + modalUpdateTaskList.open({ listId }) +} + +function handleCreateTask() { + vibrate() + modalCreateTask.open({ performerId: userStore.id, listId }) +} diff --git a/apps/atrium-telegram/app/components/TasksTodaySwitch.vue b/apps/atrium-telegram/app/components/TasksTodaySwitch.vue index 61b02606..5e8097dd 100644 --- a/apps/atrium-telegram/app/components/TasksTodaySwitch.vue +++ b/apps/atrium-telegram/app/components/TasksTodaySwitch.vue @@ -9,9 +9,11 @@ root: 'flex-row-reverse items-center', label: 'mr-3 text-base/5 md:text-lg/5 font-semibold', }" + @change="vibrate" /> diff --git a/apps/atrium-telegram/app/composables/useFeedback.ts b/apps/atrium-telegram/app/composables/useFeedback.ts new file mode 100644 index 00000000..3a1a539d --- /dev/null +++ b/apps/atrium-telegram/app/composables/useFeedback.ts @@ -0,0 +1,15 @@ +import { hapticFeedback } from '@telegram-apps/sdk-vue' + +function _useFeedback() { + function vibrate() { + if (hapticFeedback.impactOccurred.isAvailable()) { + hapticFeedback.impactOccurred('light') + } + } + + return { + vibrate, + } +} + +export const useFeedback = createSharedComposable(_useFeedback) diff --git a/apps/atrium-telegram/app/pages/index.vue b/apps/atrium-telegram/app/pages/index.vue index 2783b887..557ba9d4 100644 --- a/apps/atrium-telegram/app/pages/index.vue +++ b/apps/atrium-telegram/app/pages/index.vue @@ -2,13 +2,11 @@
- - - +

@@ -42,7 +40,7 @@

-
+
) const myTodayTasks = computed(() => myLists.value.flatMap((taskList) => taskList.tasks.filter((task) => !task.completedAt && task.date && isToday(parseDate(task.date), getLocalTimeZone())))) +function handleUploadUserAvatar() { + vibrate() + modalUploadUserAvatar.open() +} + useHead({ title: 'Суши Атриум', }) diff --git a/apps/atrium-telegram/i18n/locales/ru-RU.json b/apps/atrium-telegram/i18n/locales/ru-RU.json index b3f9eca5..953795e3 100644 --- a/apps/atrium-telegram/i18n/locales/ru-RU.json +++ b/apps/atrium-telegram/i18n/locales/ru-RU.json @@ -7,6 +7,10 @@ "app": { "home": "Пространство", "create": { + "task": { + "button": "Создать задачу", + "title": "Создание задачи" + }, "task-list": { "button": "Создать проект", "title": "Создание проекта" @@ -16,6 +20,16 @@ "user-photo": { "button": "Обновить фото", "title": "Обновление фото пользователя" + }, + "task": { + "button": "Обновить задачу", + "title": "Обновление задачи", + "completion": "Закрытие задачи", + "close": "Закрыть задачу" + }, + "task-list": { + "button": "Обновить проект", + "title": "Обновление проекта" } } }