From 3e1c260eaedf0bd06ab3740b9b05ebf43108b8d8 Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:18:48 +0000 Subject: [PATCH 01/39] chore: status toggle badge --- .../components/tasks/StatusToggleBadge.vue | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 frontend/src/components/tasks/StatusToggleBadge.vue diff --git a/frontend/src/components/tasks/StatusToggleBadge.vue b/frontend/src/components/tasks/StatusToggleBadge.vue new file mode 100644 index 00000000..069ced72 --- /dev/null +++ b/frontend/src/components/tasks/StatusToggleBadge.vue @@ -0,0 +1,63 @@ + + + From 236dc55de05b130c3a41b9947588bb7dab91c1e6 Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:19:13 +0000 Subject: [PATCH 02/39] chore: date-picker component --- .../components/ui/date-picker/DatePicker.vue | 230 ++++++++++++++++++ .../src/components/ui/date-picker/index.ts | 1 + 2 files changed, 231 insertions(+) create mode 100644 frontend/src/components/ui/date-picker/DatePicker.vue create mode 100644 frontend/src/components/ui/date-picker/index.ts diff --git a/frontend/src/components/ui/date-picker/DatePicker.vue b/frontend/src/components/ui/date-picker/DatePicker.vue new file mode 100644 index 00000000..3fc50560 --- /dev/null +++ b/frontend/src/components/ui/date-picker/DatePicker.vue @@ -0,0 +1,230 @@ + + + diff --git a/frontend/src/components/ui/date-picker/index.ts b/frontend/src/components/ui/date-picker/index.ts new file mode 100644 index 00000000..0591cff8 --- /dev/null +++ b/frontend/src/components/ui/date-picker/index.ts @@ -0,0 +1 @@ +export { default as DatePicker } from "./DatePicker.vue"; From 3748641bffc8694792487ffdf619cf3086e255d5 Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:21:49 +0000 Subject: [PATCH 03/39] chore: calendar component --- .../src/components/ui/calendar/Calendar.vue | 227 ++++++++++++++++++ .../components/ui/calendar/CalendarCell.vue | 30 +++ .../ui/calendar/CalendarCellTrigger.vue | 45 ++++ .../components/ui/calendar/CalendarGrid.vue | 25 ++ .../ui/calendar/CalendarGridBody.vue | 12 + .../ui/calendar/CalendarGridHead.vue | 15 ++ .../ui/calendar/CalendarGridRow.vue | 25 ++ .../ui/calendar/CalendarHeadCell.vue | 30 +++ .../components/ui/calendar/CalendarHeader.vue | 30 +++ .../ui/calendar/CalendarHeading.vue | 33 +++ .../ui/calendar/CalendarNextButton.vue | 35 +++ .../ui/calendar/CalendarPrevButton.vue | 35 +++ frontend/src/components/ui/calendar/index.ts | 18 ++ 13 files changed, 560 insertions(+) create mode 100644 frontend/src/components/ui/calendar/Calendar.vue create mode 100644 frontend/src/components/ui/calendar/CalendarCell.vue create mode 100644 frontend/src/components/ui/calendar/CalendarCellTrigger.vue create mode 100644 frontend/src/components/ui/calendar/CalendarGrid.vue create mode 100644 frontend/src/components/ui/calendar/CalendarGridBody.vue create mode 100644 frontend/src/components/ui/calendar/CalendarGridHead.vue create mode 100644 frontend/src/components/ui/calendar/CalendarGridRow.vue create mode 100644 frontend/src/components/ui/calendar/CalendarHeadCell.vue create mode 100644 frontend/src/components/ui/calendar/CalendarHeader.vue create mode 100644 frontend/src/components/ui/calendar/CalendarHeading.vue create mode 100644 frontend/src/components/ui/calendar/CalendarNextButton.vue create mode 100644 frontend/src/components/ui/calendar/CalendarPrevButton.vue create mode 100644 frontend/src/components/ui/calendar/index.ts diff --git a/frontend/src/components/ui/calendar/Calendar.vue b/frontend/src/components/ui/calendar/Calendar.vue new file mode 100644 index 00000000..02cd0d21 --- /dev/null +++ b/frontend/src/components/ui/calendar/Calendar.vue @@ -0,0 +1,227 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarCell.vue b/frontend/src/components/ui/calendar/CalendarCell.vue new file mode 100644 index 00000000..a802ee9e --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarCell.vue @@ -0,0 +1,30 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarCellTrigger.vue b/frontend/src/components/ui/calendar/CalendarCellTrigger.vue new file mode 100644 index 00000000..01490dab --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarCellTrigger.vue @@ -0,0 +1,45 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarGrid.vue b/frontend/src/components/ui/calendar/CalendarGrid.vue new file mode 100644 index 00000000..0268f026 --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarGrid.vue @@ -0,0 +1,25 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarGridBody.vue b/frontend/src/components/ui/calendar/CalendarGridBody.vue new file mode 100644 index 00000000..3460fbcf --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarGridBody.vue @@ -0,0 +1,12 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarGridHead.vue b/frontend/src/components/ui/calendar/CalendarGridHead.vue new file mode 100644 index 00000000..ecb481da --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarGridHead.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarGridRow.vue b/frontend/src/components/ui/calendar/CalendarGridRow.vue new file mode 100644 index 00000000..32be664f --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarGridRow.vue @@ -0,0 +1,25 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarHeadCell.vue b/frontend/src/components/ui/calendar/CalendarHeadCell.vue new file mode 100644 index 00000000..afcd2392 --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarHeadCell.vue @@ -0,0 +1,30 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarHeader.vue b/frontend/src/components/ui/calendar/CalendarHeader.vue new file mode 100644 index 00000000..b7dac037 --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarHeader.vue @@ -0,0 +1,30 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarHeading.vue b/frontend/src/components/ui/calendar/CalendarHeading.vue new file mode 100644 index 00000000..c9483a46 --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarHeading.vue @@ -0,0 +1,33 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarNextButton.vue b/frontend/src/components/ui/calendar/CalendarNextButton.vue new file mode 100644 index 00000000..4334d32a --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarNextButton.vue @@ -0,0 +1,35 @@ + + + diff --git a/frontend/src/components/ui/calendar/CalendarPrevButton.vue b/frontend/src/components/ui/calendar/CalendarPrevButton.vue new file mode 100644 index 00000000..2c87bfbb --- /dev/null +++ b/frontend/src/components/ui/calendar/CalendarPrevButton.vue @@ -0,0 +1,35 @@ + + + diff --git a/frontend/src/components/ui/calendar/index.ts b/frontend/src/components/ui/calendar/index.ts new file mode 100644 index 00000000..52d8f669 --- /dev/null +++ b/frontend/src/components/ui/calendar/index.ts @@ -0,0 +1,18 @@ +export { default as Calendar } from "./Calendar.vue"; +export { default as CalendarCell } from "./CalendarCell.vue"; +export { default as CalendarCellTrigger } from "./CalendarCellTrigger.vue"; +export { default as CalendarGrid } from "./CalendarGrid.vue"; +export { default as CalendarGridBody } from "./CalendarGridBody.vue"; +export { default as CalendarGridHead } from "./CalendarGridHead.vue"; +export { default as CalendarGridRow } from "./CalendarGridRow.vue"; +export { default as CalendarHeadCell } from "./CalendarHeadCell.vue"; +export { default as CalendarHeader } from "./CalendarHeader.vue"; +export { default as CalendarHeading } from "./CalendarHeading.vue"; +export { default as CalendarNextButton } from "./CalendarNextButton.vue"; +export { default as CalendarPrevButton } from "./CalendarPrevButton.vue"; + +export type LayoutTypes = + | "month-and-year" + | "month-only" + | "year-only" + | undefined; From 059eddfc9707b221c8ba06bd612007c48b1afc8a Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:22:06 +0000 Subject: [PATCH 04/39] chore: native select --- .../ui/native-select/NativeSelect.vue | 55 +++++++++++++++++++ .../ui/native-select/NativeSelectOptGroup.vue | 18 ++++++ .../ui/native-select/NativeSelectOption.vue | 18 ++++++ .../src/components/ui/native-select/index.ts | 3 + 4 files changed, 94 insertions(+) create mode 100644 frontend/src/components/ui/native-select/NativeSelect.vue create mode 100644 frontend/src/components/ui/native-select/NativeSelectOptGroup.vue create mode 100644 frontend/src/components/ui/native-select/NativeSelectOption.vue create mode 100644 frontend/src/components/ui/native-select/index.ts diff --git a/frontend/src/components/ui/native-select/NativeSelect.vue b/frontend/src/components/ui/native-select/NativeSelect.vue new file mode 100644 index 00000000..2c8a145f --- /dev/null +++ b/frontend/src/components/ui/native-select/NativeSelect.vue @@ -0,0 +1,55 @@ + + + diff --git a/frontend/src/components/ui/native-select/NativeSelectOptGroup.vue b/frontend/src/components/ui/native-select/NativeSelectOptGroup.vue new file mode 100644 index 00000000..0dff281f --- /dev/null +++ b/frontend/src/components/ui/native-select/NativeSelectOptGroup.vue @@ -0,0 +1,18 @@ + + + + + + diff --git a/frontend/src/components/ui/native-select/NativeSelectOption.vue b/frontend/src/components/ui/native-select/NativeSelectOption.vue new file mode 100644 index 00000000..d67fc9b3 --- /dev/null +++ b/frontend/src/components/ui/native-select/NativeSelectOption.vue @@ -0,0 +1,18 @@ + + + + + + diff --git a/frontend/src/components/ui/native-select/index.ts b/frontend/src/components/ui/native-select/index.ts new file mode 100644 index 00000000..7ebf6049 --- /dev/null +++ b/frontend/src/components/ui/native-select/index.ts @@ -0,0 +1,3 @@ +export { default as NativeSelect } from "./NativeSelect.vue"; +export { default as NativeSelectOptGroup } from "./NativeSelectOptGroup.vue"; +export { default as NativeSelectOption } from "./NativeSelectOption.vue"; From 3136ab90aee1f10bab365150f4fab91bdf1fb0b2 Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:22:38 +0000 Subject: [PATCH 05/39] chore: remove unneeded text --- .../src/components/companies/EditableCompanyParticipation.vue | 2 +- .../views/Dashboard/ContractTemplates/UploadTemplateForm.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/companies/EditableCompanyParticipation.vue b/frontend/src/components/companies/EditableCompanyParticipation.vue index 3458026e..80c69655 100644 --- a/frontend/src/components/companies/EditableCompanyParticipation.vue +++ b/frontend/src/components/companies/EditableCompanyParticipation.vue @@ -147,7 +147,7 @@
- + From dcc238b4c7d50986b129f030894210f0969c3d4d Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:24:08 +0000 Subject: [PATCH 06/39] chore: accordion collapsed by default on mobile --- .../views/Dashboard/Companies/CompanyView.vue | 75 ++++++++++++++----- 1 file changed, 57 insertions(+), 18 deletions(-) diff --git a/frontend/src/views/Dashboard/Companies/CompanyView.vue b/frontend/src/views/Dashboard/Companies/CompanyView.vue index 7a07a2e3..2970a68b 100644 --- a/frontend/src/views/Dashboard/Companies/CompanyView.vue +++ b/frontend/src/views/Dashboard/Companies/CompanyView.vue @@ -1,7 +1,7 @@ @@ -92,16 +95,20 @@ import { getCompanyById, getCompanyRepresentatives } from "@/api/companies"; import CompanyCard from "@/components/cards/CompanyCard.vue"; import CompanyBillingInfo from "@/components/companies/CompanyBillingInfo.vue"; import CompanyContacts from "@/components/companies/CompanyContacts.vue"; -import CompanyCommunications from "@/components/companies/CompanyCommunications.vue"; -import ParticipationsCard from "@/components/ParticipationsCard.vue"; import DirectEmailDialogTrigger from "@/components/DirectEmailDialogTrigger.vue"; import type { CompanyWithParticipation } from "@/dto/companies"; import { withCurrentParticipation } from "@/lib/utils"; import { useEventStore } from "@/stores/event"; import { useQuery, useQueryCache } from "@pinia/colada"; -import { computed } from "vue"; +import { computed, ref } from "vue"; import { useRoute } from "vue-router"; +import Info from "./Info/Info.vue"; +import TabsList from "@/components/ui/tabs/TabsList.vue"; +import TabsTrigger from "@/components/ui/tabs/TabsTrigger.vue"; +import TabsContent from "@/components/ui/tabs/TabsContent.vue"; +import Tabs from "@/components/ui/tabs/Tabs.vue"; +import Tasks from "./Tasks/Tasks.vue"; import Accordion from "@/components/ui/accordion/Accordion.vue"; import AccordionItem from "@/components/ui/accordion/AccordionItem.vue"; import AccordionTrigger from "@/components/ui/accordion/AccordionTrigger.vue"; @@ -109,6 +116,7 @@ import AccordionContent from "@/components/ui/accordion/AccordionContent.vue"; const route = useRoute(); const queryCache = useQueryCache(); +const activeTab = ref("info"); const companyId = route.params.companyId; const { data: company } = useQuery({ diff --git a/frontend/src/views/Dashboard/Companies/Info/Info.vue b/frontend/src/views/Dashboard/Companies/Info/Info.vue new file mode 100644 index 00000000..2015566e --- /dev/null +++ b/frontend/src/views/Dashboard/Companies/Info/Info.vue @@ -0,0 +1,22 @@ + + + From 6ec47cae26d449a0044872e9f37a70eb2b276a90 Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:25:59 +0000 Subject: [PATCH 09/39] chore: billing and logos task --- .../src/components/tasks/TaskBillingLogos.vue | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 frontend/src/components/tasks/TaskBillingLogos.vue diff --git a/frontend/src/components/tasks/TaskBillingLogos.vue b/frontend/src/components/tasks/TaskBillingLogos.vue new file mode 100644 index 00000000..d062ebad --- /dev/null +++ b/frontend/src/components/tasks/TaskBillingLogos.vue @@ -0,0 +1,191 @@ + + + From ad0023c5ef1bc01db55256d88e15923f661bcf01 Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:26:08 +0000 Subject: [PATCH 10/39] chore: confirmation task --- .../src/components/tasks/TaskConfirmation.vue | 252 ++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 frontend/src/components/tasks/TaskConfirmation.vue diff --git a/frontend/src/components/tasks/TaskConfirmation.vue b/frontend/src/components/tasks/TaskConfirmation.vue new file mode 100644 index 00000000..948260dd --- /dev/null +++ b/frontend/src/components/tasks/TaskConfirmation.vue @@ -0,0 +1,252 @@ + + + From a1f29e068fde8410d73c21614acd0b28c580f1cd Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:26:22 +0000 Subject: [PATCH 11/39] chore: corlief task --- frontend/src/components/tasks/TaskCorlief.vue | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 frontend/src/components/tasks/TaskCorlief.vue diff --git a/frontend/src/components/tasks/TaskCorlief.vue b/frontend/src/components/tasks/TaskCorlief.vue new file mode 100644 index 00000000..dadc94b0 --- /dev/null +++ b/frontend/src/components/tasks/TaskCorlief.vue @@ -0,0 +1,61 @@ + + + From e3b45e335763b221cdabe5fcd591de519645bf3a Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:26:39 +0000 Subject: [PATCH 12/39] chore: contract task --- .../src/components/tasks/TaskContract.vue | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 frontend/src/components/tasks/TaskContract.vue diff --git a/frontend/src/components/tasks/TaskContract.vue b/frontend/src/components/tasks/TaskContract.vue new file mode 100644 index 00000000..7ee2422d --- /dev/null +++ b/frontend/src/components/tasks/TaskContract.vue @@ -0,0 +1,67 @@ + + + From 839dcd3a6bb2f0bae6862baf9ffff7f1791fd8a0 Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:27:34 +0000 Subject: [PATCH 13/39] chore: logistics task --- .../src/components/tasks/TaskLogistics.vue | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 frontend/src/components/tasks/TaskLogistics.vue diff --git a/frontend/src/components/tasks/TaskLogistics.vue b/frontend/src/components/tasks/TaskLogistics.vue new file mode 100644 index 00000000..afee7b68 --- /dev/null +++ b/frontend/src/components/tasks/TaskLogistics.vue @@ -0,0 +1,95 @@ + + + From ce31ce2b3662d258e3eec244d57e9bc19f2c69b5 Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:27:51 +0000 Subject: [PATCH 14/39] chore: session titles task --- .../components/tasks/TaskSessionTitles.vue | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 frontend/src/components/tasks/TaskSessionTitles.vue diff --git a/frontend/src/components/tasks/TaskSessionTitles.vue b/frontend/src/components/tasks/TaskSessionTitles.vue new file mode 100644 index 00000000..55941f31 --- /dev/null +++ b/frontend/src/components/tasks/TaskSessionTitles.vue @@ -0,0 +1,107 @@ + + + From 96b7e0dcfdfe859fef4357c603508bf88f53618d Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Fri, 6 Feb 2026 00:28:01 +0000 Subject: [PATCH 15/39] feat: tasks prototype --- .../src/components/tasks/TaskTimelineItem.vue | 72 ++++++++++++++++ .../views/Dashboard/Companies/Tasks/Tasks.vue | 85 +++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 frontend/src/components/tasks/TaskTimelineItem.vue create mode 100644 frontend/src/views/Dashboard/Companies/Tasks/Tasks.vue diff --git a/frontend/src/components/tasks/TaskTimelineItem.vue b/frontend/src/components/tasks/TaskTimelineItem.vue new file mode 100644 index 00000000..e3f4f529 --- /dev/null +++ b/frontend/src/components/tasks/TaskTimelineItem.vue @@ -0,0 +1,72 @@ + + + diff --git a/frontend/src/views/Dashboard/Companies/Tasks/Tasks.vue b/frontend/src/views/Dashboard/Companies/Tasks/Tasks.vue new file mode 100644 index 00000000..db4c38e2 --- /dev/null +++ b/frontend/src/views/Dashboard/Companies/Tasks/Tasks.vue @@ -0,0 +1,85 @@ + + + From c44f5a8c479621a9b549c975ed0fd3fe4dbf3572 Mon Sep 17 00:00:00 2001 From: Francisca Almeida Date: Sat, 28 Feb 2026 23:37:29 +0000 Subject: [PATCH 16/39] feat: refactor task components to support entity type differentiation --- .../src/components/tasks/TaskBillingLogos.vue | 133 ++++++++++-------- .../src/components/tasks/TaskConfirmation.vue | 78 +++++++--- .../src/components/tasks/TaskContract.vue | 13 +- frontend/src/components/tasks/TaskCorlief.vue | 2 +- .../src/components/tasks/TaskLogistics.vue | 2 +- frontend/src/components/tasks/Tasks.vue | 94 +++++++++++++ frontend/src/dto/tasks.ts | 25 ++++ .../views/Dashboard/Companies/Tasks/Tasks.vue | 77 ++-------- .../views/Dashboard/Speakers/SpeakerView.vue | 41 ++++-- 9 files changed, 301 insertions(+), 164 deletions(-) create mode 100644 frontend/src/components/tasks/Tasks.vue create mode 100644 frontend/src/dto/tasks.ts diff --git a/frontend/src/components/tasks/TaskBillingLogos.vue b/frontend/src/components/tasks/TaskBillingLogos.vue index d062ebad..ec22a7ef 100644 --- a/frontend/src/components/tasks/TaskBillingLogos.vue +++ b/frontend/src/components/tasks/TaskBillingLogos.vue @@ -1,7 +1,7 @@ @@ -30,7 +30,10 @@
- + @@ -43,8 +46,12 @@ import { FileText } from "lucide-vue-next"; import ContractDownload from "../companies/ContractDownload.vue"; import { Checkbox } from "@/components/ui/checkbox"; import { Label } from "@/components/ui/label"; +import type { EntityType } from "@/dto/tasks"; -const props = defineProps<{ companyId: string }>(); +const props = defineProps<{ + entityId: string; + entityType: EntityType; +}>(); // Contract states const hasCreatedContract = ref(false); diff --git a/frontend/src/components/tasks/TaskCorlief.vue b/frontend/src/components/tasks/TaskCorlief.vue index dadc94b0..5277e9e0 100644 --- a/frontend/src/components/tasks/TaskCorlief.vue +++ b/frontend/src/components/tasks/TaskCorlief.vue @@ -34,7 +34,7 @@ import { Label } from "@/components/ui/label"; import { Building2 } from "lucide-vue-next"; interface Props { - companyId: string; + entityId: string; stepNumber?: number; } diff --git a/frontend/src/components/tasks/TaskLogistics.vue b/frontend/src/components/tasks/TaskLogistics.vue index afee7b68..6e0569de 100644 --- a/frontend/src/components/tasks/TaskLogistics.vue +++ b/frontend/src/components/tasks/TaskLogistics.vue @@ -63,7 +63,7 @@ import { import { Truck } from "lucide-vue-next"; interface Props { - companyId: string; + entityId: string; stepNumber?: number; isLast?: boolean; } diff --git a/frontend/src/components/tasks/Tasks.vue b/frontend/src/components/tasks/Tasks.vue new file mode 100644 index 00000000..d098f199 --- /dev/null +++ b/frontend/src/components/tasks/Tasks.vue @@ -0,0 +1,94 @@ + + + diff --git a/frontend/src/dto/tasks.ts b/frontend/src/dto/tasks.ts new file mode 100644 index 00000000..6d080255 --- /dev/null +++ b/frontend/src/dto/tasks.ts @@ -0,0 +1,25 @@ +import type { Participation, ObjectID } from "."; +import type { CompanyBillingInfo, CompanyParticipation } from "./companies"; +import type { SpeakerParticipation } from "./speakers"; + +/** + * Discriminator for entity types that share the Tasks timeline. + */ +export type EntityType = "company" | "speaker"; + +/** + * A unified participation type used across task components. + * Company participations carry extra fields (package, billing, confirmed, etc.) + * while speaker participations carry their own (feedback, flights, room, etc.). + */ +export type AnyParticipation = CompanyParticipation | SpeakerParticipation; + +/** + * Minimal shape every entity must satisfy to be used in the Tasks view. + */ +export interface TaskEntity { + id: ObjectID; + name: string; + participation?: Participation; + billingInfo?: CompanyBillingInfo; +} diff --git a/frontend/src/views/Dashboard/Companies/Tasks/Tasks.vue b/frontend/src/views/Dashboard/Companies/Tasks/Tasks.vue index db4c38e2..37d98716 100644 --- a/frontend/src/views/Dashboard/Companies/Tasks/Tasks.vue +++ b/frontend/src/views/Dashboard/Companies/Tasks/Tasks.vue @@ -1,57 +1,16 @@ diff --git a/frontend/src/views/Dashboard/Speakers/SpeakerView.vue b/frontend/src/views/Dashboard/Speakers/SpeakerView.vue index 89481a18..a6da4382 100644 --- a/frontend/src/views/Dashboard/Speakers/SpeakerView.vue +++ b/frontend/src/views/Dashboard/Speakers/SpeakerView.vue @@ -25,17 +25,35 @@ /> - +
- + + + Info + Tasks + + + +
+ + + +
+
- + + + +
@@ -46,6 +64,7 @@ import SpeakerCard from "@/components/cards/SpeakerCard.vue"; import ContactCard from "@/components/ContactCard.vue"; import ParticipationsCard from "@/components/ParticipationsCard.vue"; import DirectEmailDialogTrigger from "@/components/DirectEmailDialogTrigger.vue"; +import Tasks from "@/components/tasks/Tasks.vue"; import type { SpeakerWithContactObject, SpeakerWithParticipation, @@ -54,12 +73,14 @@ import { withCurrentParticipation } from "@/lib/utils"; import { useEventStore } from "@/stores/event"; import { useQuery, useQueryCache } from "@pinia/colada"; -import { computed } from "vue"; +import { computed, ref } from "vue"; import { useRoute } from "vue-router"; import SpeakerCommunications from "@/components/speakers/SpeakerCommunications.vue"; +import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"; const route = useRoute(); const queryCache = useQueryCache(); +const activeTab = ref("info"); const speakerId = route.params.speakerId; const { data: speaker } = useQuery({ From 2a38de8558433a84e1ad4f5cd96335ef5c74ebf5 Mon Sep 17 00:00:00 2001 From: Francisca Almeida Date: Sat, 28 Feb 2026 23:37:45 +0000 Subject: [PATCH 17/39] feat: add task components for flights, hotel, and materials --- frontend/src/components/tasks/TaskFlights.vue | 109 ++++++++++++++++++ frontend/src/components/tasks/TaskHotel.vue | 59 ++++++++++ .../src/components/tasks/TaskMaterials.vue | 58 ++++++++++ frontend/src/components/tasks/Tasks.vue | 41 ++++--- 4 files changed, 254 insertions(+), 13 deletions(-) create mode 100644 frontend/src/components/tasks/TaskFlights.vue create mode 100644 frontend/src/components/tasks/TaskHotel.vue create mode 100644 frontend/src/components/tasks/TaskMaterials.vue diff --git a/frontend/src/components/tasks/TaskFlights.vue b/frontend/src/components/tasks/TaskFlights.vue new file mode 100644 index 00000000..065c2122 --- /dev/null +++ b/frontend/src/components/tasks/TaskFlights.vue @@ -0,0 +1,109 @@ + + + diff --git a/frontend/src/components/tasks/TaskHotel.vue b/frontend/src/components/tasks/TaskHotel.vue new file mode 100644 index 00000000..4b63eac2 --- /dev/null +++ b/frontend/src/components/tasks/TaskHotel.vue @@ -0,0 +1,59 @@ + + + diff --git a/frontend/src/components/tasks/TaskMaterials.vue b/frontend/src/components/tasks/TaskMaterials.vue new file mode 100644 index 00000000..61d5fb59 --- /dev/null +++ b/frontend/src/components/tasks/TaskMaterials.vue @@ -0,0 +1,58 @@ + + + diff --git a/frontend/src/components/tasks/Tasks.vue b/frontend/src/components/tasks/Tasks.vue index d098f199..4ac768d2 100644 --- a/frontend/src/components/tasks/Tasks.vue +++ b/frontend/src/components/tasks/Tasks.vue @@ -26,21 +26,33 @@ - + + + + + @@ -58,6 +70,9 @@ import TaskContract from "./TaskContract.vue"; import TaskSessionTitles from "./TaskSessionTitles.vue"; import TaskCorlief from "./TaskCorlief.vue"; import TaskLogistics from "./TaskLogistics.vue"; +import TaskFlights from "./TaskFlights.vue"; +import TaskMaterials from "./TaskMaterials.vue"; +import TaskHotel from "./TaskHotel.vue"; interface Props { entityType: EntityType; From 25144bcd26a6815d851ee92ccc9a7f80f63dcae3 Mon Sep 17 00:00:00 2001 From: Francisca Almeida Date: Sat, 28 Feb 2026 23:43:33 +0000 Subject: [PATCH 18/39] feat: add speaker-specific fields and coverage task components --- .../src/components/tasks/TaskBillingLogos.vue | 27 +++++++ .../src/components/tasks/TaskConfirmation.vue | 30 ++++++++ .../src/components/tasks/TaskCoverage.vue | 77 +++++++++++++++++++ .../src/components/tasks/TaskMaterials.vue | 77 +++++++++++++++++-- frontend/src/components/tasks/Tasks.vue | 7 +- 5 files changed, 210 insertions(+), 8 deletions(-) create mode 100644 frontend/src/components/tasks/TaskCoverage.vue diff --git a/frontend/src/components/tasks/TaskBillingLogos.vue b/frontend/src/components/tasks/TaskBillingLogos.vue index ec22a7ef..8bd9dd92 100644 --- a/frontend/src/components/tasks/TaskBillingLogos.vue +++ b/frontend/src/components/tasks/TaskBillingLogos.vue @@ -109,6 +109,28 @@ + + + @@ -130,6 +152,7 @@ import type { EntityType } from "@/dto/tasks"; import TaskTimelineItem from "./TaskTimelineItem.vue"; import BillingForm from "@/components/companies/BillingForm.vue"; import Button from "@/components/ui/button/Button.vue"; +import { Input } from "@/components/ui/input"; import EmptyStateCard from "@/components/ui/EmptyStateCard.vue"; import StatusToggleBadge from "./StatusToggleBadge.vue"; import { useCompanyBillingMutation } from "@/mutations/companies"; @@ -189,6 +212,10 @@ const hasAskedForBillingInfo = ref(false); const logosReceived = ref(false); const logosNeedReviewing = ref(false); +// LinkedIn (speakers only) +const linkedinUrl = ref(""); +const wantsLinkedinTag = ref(false); + // Completion state const isComplete = computed(() => { if (props.entityType === "company") { diff --git a/frontend/src/components/tasks/TaskConfirmation.vue b/frontend/src/components/tasks/TaskConfirmation.vue index 3523af52..ac2feff5 100644 --- a/frontend/src/components/tasks/TaskConfirmation.vue +++ b/frontend/src/components/tasks/TaskConfirmation.vue @@ -43,6 +43,30 @@ /> + + +