From 8466c7ff370046ff149ac189ca9df3643e579a11 Mon Sep 17 00:00:00 2001 From: Dobrunia Kostrigin <48620984+Dobrunia@users.noreply.github.com> Date: Wed, 11 Feb 2026 20:33:02 +0300 Subject: [PATCH 1/8] WorkspaceMember --- client/src/components/card/CardNote.vue | 24 +- client/src/components/common/CopyButton.vue | 46 +++ client/src/generated/graphql.ts | 104 +++++- client/src/graphql/mutations.ts | 57 +++ client/src/graphql/queries.ts | 22 ++ client/src/graphql/types.ts | 1 + client/src/router/index.ts | 6 + client/src/views/InviteView.vue | 63 ++++ .../src/views/workspace/WorkspaceLayout.vue | 345 ++++++++++++++++-- server/prisma/schema.prisma | 33 +- server/src/generated/types.ts | 79 ++++ server/src/lib/constants.ts | 3 + server/src/lib/workspace-access.ts | 24 ++ server/src/resolvers/card.ts | 50 ++- server/src/resolvers/column.ts | 20 +- server/src/resolvers/roadmap.ts | 31 +- server/src/resolvers/tool.ts | 21 +- server/src/resolvers/workspace.ts | 258 +++++++++++-- server/src/schema/schema.graphql | 31 ++ 19 files changed, 1095 insertions(+), 123 deletions(-) create mode 100644 client/src/components/common/CopyButton.vue create mode 100644 client/src/views/InviteView.vue create mode 100644 server/src/lib/workspace-access.ts diff --git a/client/src/components/card/CardNote.vue b/client/src/components/card/CardNote.vue index 649d248..2edd1c3 100644 --- a/client/src/components/card/CardNote.vue +++ b/client/src/components/card/CardNote.vue @@ -2,8 +2,8 @@ import { ref, computed } from 'vue'; import type { NotePayload } from '@/lib/card-payload'; import { linkify } from '@/lib/utils'; -import { toast } from 'vue-sonner'; import CardActionBtn from './CardActionBtn.vue'; +import CopyButton from '@/components/common/CopyButton.vue'; import { DialogRoot, DialogPortal, @@ -18,18 +18,9 @@ const props = defineProps<{ }>(); const showContentModal = ref(false); -const copied = ref(false); const contentHtml = computed(() => linkify(props.payload.content ?? '')); const hasLongContent = computed(() => (props.payload.content?.length ?? 0) > 100); - -function copyContent() { - navigator.clipboard.writeText(props.payload.content ?? '').then(() => { - copied.value = true; - toast.success('Текст скопирован'); - setTimeout(() => (copied.value = false), 2000); - }); -}