From edc5f8af856255d1525635152e75b761215fa5e7 Mon Sep 17 00:00:00 2001 From: AlacrisDevs Date: Sat, 7 Feb 2026 11:39:51 +0200 Subject: [PATCH] feat: add event module pages (placeholders + full Team module) - 6 placeholder 'coming soon' pages: tasks, files, schedule, budget, guests, sponsors - Full Team module: add/remove members, change roles, role badges - Uses existing event_members DB table and API layer - i18n keys added for EN and ET (module placeholders + team) - svelte-check: 0 errors, vitest: 112/112 passed --- messages/en.json | 17 + messages/et.json | 17 + .../events/[eventSlug]/budget/+page.svelte | 32 ++ .../events/[eventSlug]/files/+page.svelte | 32 ++ .../events/[eventSlug]/guests/+page.svelte | 32 ++ .../events/[eventSlug]/schedule/+page.svelte | 32 ++ .../events/[eventSlug]/sponsors/+page.svelte | 32 ++ .../events/[eventSlug]/tasks/+page.svelte | 32 ++ .../events/[eventSlug]/team/+page.svelte | 490 ++++++++++++++++++ 9 files changed, 716 insertions(+) create mode 100644 src/routes/[orgSlug]/events/[eventSlug]/budget/+page.svelte create mode 100644 src/routes/[orgSlug]/events/[eventSlug]/files/+page.svelte create mode 100644 src/routes/[orgSlug]/events/[eventSlug]/guests/+page.svelte create mode 100644 src/routes/[orgSlug]/events/[eventSlug]/schedule/+page.svelte create mode 100644 src/routes/[orgSlug]/events/[eventSlug]/sponsors/+page.svelte create mode 100644 src/routes/[orgSlug]/events/[eventSlug]/tasks/+page.svelte create mode 100644 src/routes/[orgSlug]/events/[eventSlug]/team/+page.svelte diff --git a/messages/en.json b/messages/en.json index f620aa8..191b81f 100644 --- a/messages/en.json +++ b/messages/en.json @@ -324,6 +324,23 @@ "events_mod_team_desc": "Team members and shift scheduling", "events_mod_sponsors": "Sponsors", "events_mod_sponsors_desc": "Sponsors, partners, and deliverables", + "module_coming_soon": "Coming Soon", + "module_coming_soon_desc": "This module is under development and will be available soon.", + "team_title": "Event Team", + "team_subtitle": "Manage team members and their roles for this event.", + "team_add_member": "Add Member", + "team_role_lead": "Lead", + "team_role_manager": "Manager", + "team_role_member": "Member", + "team_empty": "No team members assigned yet. Add members from your organization.", + "team_remove_confirm": "Remove {name} from this event's team?", + "team_remove_btn": "Remove", + "team_added": "{name} added to team", + "team_removed": "{name} removed from team", + "team_updated": "Role updated", + "team_select_member": "Select a member", + "team_select_role": "Select role", + "team_already_assigned": "Already on team", "overview_subtitle": "Welcome back. Here's what's happening.", "overview_stat_events": "Events", "overview_upcoming_events": "Upcoming Events", diff --git a/messages/et.json b/messages/et.json index f206b28..79f59f6 100644 --- a/messages/et.json +++ b/messages/et.json @@ -324,6 +324,23 @@ "events_mod_team_desc": "Meeskonnaliikmed ja vahetuste planeerimine", "events_mod_sponsors": "Sponsorid", "events_mod_sponsors_desc": "Sponsorid, partnerid ja kohustused", + "module_coming_soon": "Tulekul", + "module_coming_soon_desc": "See moodul on arendamisel ja saab peagi kättesaadavaks.", + "team_title": "Ürituse meeskond", + "team_subtitle": "Halda meeskonnaliikmeid ja nende rolle selle ürituse jaoks.", + "team_add_member": "Lisa liige", + "team_role_lead": "Juht", + "team_role_manager": "Haldur", + "team_role_member": "Liige", + "team_empty": "Meeskonnaliikmeid pole veel määratud. Lisa liikmeid oma organisatsioonist.", + "team_remove_confirm": "Eemalda {name} selle ürituse meeskonnast?", + "team_remove_btn": "Eemalda", + "team_added": "{name} lisatud meeskonda", + "team_removed": "{name} eemaldatud meeskonnast", + "team_updated": "Roll uuendatud", + "team_select_member": "Vali liige", + "team_select_role": "Vali roll", + "team_already_assigned": "Juba meeskonnas", "overview_subtitle": "Tere tagasi. Siin on ülevaade toimuvast.", "overview_stat_events": "Üritused", "overview_upcoming_events": "Tulevased üritused", diff --git a/src/routes/[orgSlug]/events/[eventSlug]/budget/+page.svelte b/src/routes/[orgSlug]/events/[eventSlug]/budget/+page.svelte new file mode 100644 index 0000000..7d948ce --- /dev/null +++ b/src/routes/[orgSlug]/events/[eventSlug]/budget/+page.svelte @@ -0,0 +1,32 @@ + + + + {m.events_mod_budget()} | {data.event.name} | {data.org.name} + + +
+ account_balance_wallet +

{m.events_mod_budget()}

+

+ {m.events_mod_budget_desc()} +

+ {m.module_coming_soon()} +
diff --git a/src/routes/[orgSlug]/events/[eventSlug]/files/+page.svelte b/src/routes/[orgSlug]/events/[eventSlug]/files/+page.svelte new file mode 100644 index 0000000..88895a9 --- /dev/null +++ b/src/routes/[orgSlug]/events/[eventSlug]/files/+page.svelte @@ -0,0 +1,32 @@ + + + + {m.events_mod_files()} | {data.event.name} | {data.org.name} + + +
+ folder +

{m.events_mod_files()}

+

+ {m.events_mod_files_desc()} +

+ {m.module_coming_soon()} +
diff --git a/src/routes/[orgSlug]/events/[eventSlug]/guests/+page.svelte b/src/routes/[orgSlug]/events/[eventSlug]/guests/+page.svelte new file mode 100644 index 0000000..e0c7002 --- /dev/null +++ b/src/routes/[orgSlug]/events/[eventSlug]/guests/+page.svelte @@ -0,0 +1,32 @@ + + + + {m.events_mod_guests()} | {data.event.name} | {data.org.name} + + +
+ groups +

{m.events_mod_guests()}

+

+ {m.events_mod_guests_desc()} +

+ {m.module_coming_soon()} +
diff --git a/src/routes/[orgSlug]/events/[eventSlug]/schedule/+page.svelte b/src/routes/[orgSlug]/events/[eventSlug]/schedule/+page.svelte new file mode 100644 index 0000000..5f69922 --- /dev/null +++ b/src/routes/[orgSlug]/events/[eventSlug]/schedule/+page.svelte @@ -0,0 +1,32 @@ + + + + {m.events_mod_schedule()} | {data.event.name} | {data.org.name} + + +
+ calendar_today +

{m.events_mod_schedule()}

+

+ {m.events_mod_schedule_desc()} +

+ {m.module_coming_soon()} +
diff --git a/src/routes/[orgSlug]/events/[eventSlug]/sponsors/+page.svelte b/src/routes/[orgSlug]/events/[eventSlug]/sponsors/+page.svelte new file mode 100644 index 0000000..ec6994e --- /dev/null +++ b/src/routes/[orgSlug]/events/[eventSlug]/sponsors/+page.svelte @@ -0,0 +1,32 @@ + + + + {m.events_mod_sponsors()} | {data.event.name} | {data.org.name} + + +
+ handshake +

{m.events_mod_sponsors()}

+

+ {m.events_mod_sponsors_desc()} +

+ {m.module_coming_soon()} +
diff --git a/src/routes/[orgSlug]/events/[eventSlug]/tasks/+page.svelte b/src/routes/[orgSlug]/events/[eventSlug]/tasks/+page.svelte new file mode 100644 index 0000000..d1509e6 --- /dev/null +++ b/src/routes/[orgSlug]/events/[eventSlug]/tasks/+page.svelte @@ -0,0 +1,32 @@ + + + + {m.events_mod_tasks()} | {data.event.name} | {data.org.name} + + +
+ task_alt +

{m.events_mod_tasks()}

+

+ {m.events_mod_tasks_desc()} +

+ {m.module_coming_soon()} +
diff --git a/src/routes/[orgSlug]/events/[eventSlug]/team/+page.svelte b/src/routes/[orgSlug]/events/[eventSlug]/team/+page.svelte new file mode 100644 index 0000000..ce37cfb --- /dev/null +++ b/src/routes/[orgSlug]/events/[eventSlug]/team/+page.svelte @@ -0,0 +1,490 @@ + + + + {m.events_mod_team()} | {data.event.name} | {data.org.name} + + +
+
+ +
+
+

{m.team_title()}

+

{m.team_subtitle()}

+
+ {#if isEditor} + + {/if} +
+ + + {#if teamMembers.length === 0} +
+ badge +

+ {m.team_empty()} +

+ {#if isEditor && availableMembers.length > 0} +
+ +
+ {/if} +
+ {:else} +
+
+ {#each teamMembers as member} +
+
+ +
+

+ {member.profile?.full_name || + member.profile?.email || + "Unknown"} +

+

+ {member.profile?.email || ""} +

+
+
+
+ {member.role} + {#if isEditor} + + + {/if} +
+
+ {/each} +
+
+ {/if} +
+
+ + + (showAddModal = false)} + title={m.team_add_member()} +> +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + + (editingMember = null)} + title="Change Role" +> + {#if editingMember} +
+
+ +
+

+ {editingMember.profile?.full_name || + editingMember.profile?.email || + "Unknown"} +

+

+ {editingMember.role} +

+
+
+ +
+ + +
+ +
+ + +
+
+ {/if} +
+ + +{#if memberToRemove} + + +
e.key === "Escape" && (memberToRemove = null)} + onclick={(e) => e.target === e.currentTarget && (memberToRemove = null)} + role="dialog" + aria-modal="true" + aria-label={m.team_remove_btn()} + > +
+

+ {m.team_remove_btn()} +

+

+ {m.team_remove_confirm({ name: getMemberName(memberToRemove) })} +

+
+ + +
+
+
+{/if}