@burdenoff/microfe-timecampus 2026.608.1 → 2026.625.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/timecampus/components/ErrorBoundary.js +4 -4
- package/dist/timecampus/components/ErrorBoundary.js.map +1 -1
- package/dist/timecampus/components/LoadingSkeleton.js +8 -8
- package/dist/timecampus/components/LoadingSkeleton.js.map +1 -1
- package/dist/timecampus/components/PageLayout.js +17 -13
- package/dist/timecampus/components/PageLayout.js.map +1 -1
- package/dist/timecampus/components/StatCard.js +22 -19
- package/dist/timecampus/components/StatCard.js.map +1 -1
- package/dist/timecampus/pages/HomePage.js +183 -163
- package/dist/timecampus/pages/HomePage.js.map +1 -1
- package/dist/timecampus/pages/applets/AppletStorePage.js +17 -17
- package/dist/timecampus/pages/applets/AppletStorePage.js.map +1 -1
- package/dist/timecampus/pages/applets/InstalledAppletsPage.js +18 -18
- package/dist/timecampus/pages/applets/InstalledAppletsPage.js.map +1 -1
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js +28 -28
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js.map +1 -1
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js +19 -19
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/channels/ChannelsPage.js +15 -15
- package/dist/timecampus/pages/channels/ChannelsPage.js.map +1 -1
- package/dist/timecampus/pages/client-portal/ClientPortalPage.js +22 -22
- package/dist/timecampus/pages/client-portal/ClientPortalPage.js.map +1 -1
- package/dist/timecampus/pages/dashboard/AnalyticsPage.js +20 -20
- package/dist/timecampus/pages/dashboard/AnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/dashboard/ReportsPage.js +20 -20
- package/dist/timecampus/pages/dashboard/ReportsPage.js.map +1 -1
- package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js +18 -18
- package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js +22 -22
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js +14 -14
- package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js +22 -22
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/focus-score/FocusScorePage.js +27 -27
- package/dist/timecampus/pages/focus-score/FocusScorePage.js.map +1 -1
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js +19 -19
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/geofencing/GeofencingPage.js +16 -16
- package/dist/timecampus/pages/geofencing/GeofencingPage.js.map +1 -1
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js +18 -18
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js +16 -16
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js.map +1 -1
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js +21 -21
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js.map +1 -1
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js +22 -22
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js +18 -18
- package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/meetings/MeetingCreatePage.js +16 -16
- package/dist/timecampus/pages/meetings/MeetingCreatePage.js.map +1 -1
- package/dist/timecampus/pages/meetings/MeetingDetailPage.js +29 -29
- package/dist/timecampus/pages/meetings/MeetingDetailPage.js.map +1 -1
- package/dist/timecampus/pages/meetings/MeetingsPage.js +20 -20
- package/dist/timecampus/pages/meetings/MeetingsPage.js.map +1 -1
- package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js +23 -23
- package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/pomodoro/PomodoroPage.js +23 -23
- package/dist/timecampus/pages/pomodoro/PomodoroPage.js.map +1 -1
- package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js +30 -30
- package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/projects/ProjectCreatePage.js +19 -19
- package/dist/timecampus/pages/projects/ProjectCreatePage.js.map +1 -1
- package/dist/timecampus/pages/projects/ProjectDetailPage.js +23 -23
- package/dist/timecampus/pages/projects/ProjectDetailPage.js.map +1 -1
- package/dist/timecampus/pages/projects/ProjectsPage.js +20 -20
- package/dist/timecampus/pages/projects/ProjectsPage.js.map +1 -1
- package/dist/timecampus/pages/projects/TasksPage.js +15 -15
- package/dist/timecampus/pages/projects/TasksPage.js.map +1 -1
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js +25 -25
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js.map +1 -1
- package/dist/timecampus/pages/team/TeamAnalyticsPage.js +19 -19
- package/dist/timecampus/pages/team/TeamAnalyticsPage.js.map +1 -1
- package/dist/timecampus/pages/team/TeamMembersPage.js +21 -21
- package/dist/timecampus/pages/team/TeamMembersPage.js.map +1 -1
- package/dist/timecampus/pages/team/TeamPage.js +19 -19
- package/dist/timecampus/pages/team/TeamPage.js.map +1 -1
- package/dist/timecampus/pages/team-activity/TeamActivityPage.js +21 -21
- package/dist/timecampus/pages/team-activity/TeamActivityPage.js.map +1 -1
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js +20 -20
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js.map +1 -1
- package/dist/timecampus/pages/templates/TemplateApplicationPage.js +16 -16
- package/dist/timecampus/pages/templates/TemplateApplicationPage.js.map +1 -1
- package/dist/timecampus/pages/templates/TemplateDetailPage.js +21 -21
- package/dist/timecampus/pages/templates/TemplateDetailPage.js.map +1 -1
- package/dist/timecampus/pages/templates/TemplatesPage.js +16 -16
- package/dist/timecampus/pages/templates/TemplatesPage.js.map +1 -1
- package/dist/timecampus/pages/time/TimeEntriesPage.js +25 -25
- package/dist/timecampus/pages/time/TimeEntriesPage.js.map +1 -1
- package/dist/timecampus/pages/time/TimeTrackingPage.js +24 -24
- package/dist/timecampus/pages/time/TimeTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/time/TimerPage.js +20 -20
- package/dist/timecampus/pages/time/TimerPage.js.map +1 -1
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.js +27 -27
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.js.map +1 -1
- package/dist/timecampus/pages/widgets/WidgetDetailPage.js +20 -20
- package/dist/timecampus/pages/widgets/WidgetDetailPage.js.map +1 -1
- package/dist/timecampus/pages/widgets/WidgetsPage.js +18 -18
- package/dist/timecampus/pages/widgets/WidgetsPage.js.map +1 -1
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js +23 -23
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js.map +1 -1
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js +19 -19
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js.map +1 -1
- package/dist/timecampus/pages/workflows/WorkflowsPage.js +17 -17
- package/dist/timecampus/pages/workflows/WorkflowsPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { useCreateMeetingMutation as t } from "../../../generated/wspace-operations.js";
|
|
3
|
+
import { PageLayout as n } from "../../components/PageLayout.js";
|
|
4
4
|
import { useCallback as r, useState as i } from "react";
|
|
5
5
|
import { ArrowLeft as a } from "lucide-react";
|
|
6
6
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
7
|
//#region src/timecampus/pages/meetings/MeetingCreatePage.tsx
|
|
8
8
|
function c() {
|
|
9
|
-
let { workspaceId: c = "" } = e(), [l, { loading: u }] =
|
|
9
|
+
let { workspaceId: c = "" } = e(), [l, { loading: u }] = t(), [d, f] = i(""), [p, m] = i(""), [h, g] = i(30), [_, v] = i(""), y = r(async () => {
|
|
10
10
|
!c || !d || !p || (await l({
|
|
11
11
|
variables: { input: {
|
|
12
12
|
workspaceId: c,
|
|
@@ -26,67 +26,67 @@ function c() {
|
|
|
26
26
|
_,
|
|
27
27
|
l
|
|
28
28
|
]);
|
|
29
|
-
return /* @__PURE__ */ o(
|
|
29
|
+
return /* @__PURE__ */ o(n, {
|
|
30
30
|
title: "Schedule Meeting",
|
|
31
31
|
description: "Create a new meeting",
|
|
32
32
|
actions: /* @__PURE__ */ s("button", {
|
|
33
|
-
className: "inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-2 text-sm font-medium text-
|
|
33
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
34
34
|
children: [/* @__PURE__ */ o(a, { className: "h-4 w-4" }), "Back"]
|
|
35
35
|
}),
|
|
36
36
|
children: /* @__PURE__ */ o("div", {
|
|
37
|
-
className: "mx-auto max-w-2xl rounded-xl border border-border bg-card p-6",
|
|
37
|
+
className: "mx-auto max-w-2xl rounded-xl border border-border-seam bg-gloss-card shadow-pop p-6",
|
|
38
38
|
children: /* @__PURE__ */ s("div", {
|
|
39
39
|
className: "space-y-4",
|
|
40
40
|
children: [
|
|
41
41
|
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("label", {
|
|
42
|
-
className: "block text-sm font-medium text-
|
|
42
|
+
className: "block text-sm font-medium text-text-primary",
|
|
43
43
|
children: "Meeting Title"
|
|
44
44
|
}), /* @__PURE__ */ o("input", {
|
|
45
45
|
type: "text",
|
|
46
46
|
placeholder: "Enter meeting title",
|
|
47
47
|
value: d,
|
|
48
48
|
onChange: (e) => f(e.target.value),
|
|
49
|
-
className: "mt-1 w-full rounded-md border border-border bg-
|
|
49
|
+
className: "mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary"
|
|
50
50
|
})] }),
|
|
51
51
|
/* @__PURE__ */ s("div", {
|
|
52
52
|
className: "grid grid-cols-2 gap-4",
|
|
53
53
|
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("label", {
|
|
54
|
-
className: "block text-sm font-medium text-
|
|
54
|
+
className: "block text-sm font-medium text-text-primary",
|
|
55
55
|
children: "Date"
|
|
56
56
|
}), /* @__PURE__ */ o("input", {
|
|
57
57
|
type: "date",
|
|
58
58
|
value: p,
|
|
59
59
|
onChange: (e) => m(e.target.value),
|
|
60
|
-
className: "mt-1 w-full rounded-md border border-border bg-
|
|
60
|
+
className: "mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary"
|
|
61
61
|
})] }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("label", {
|
|
62
|
-
className: "block text-sm font-medium text-
|
|
62
|
+
className: "block text-sm font-medium text-text-primary",
|
|
63
63
|
children: "Duration (minutes)"
|
|
64
64
|
}), /* @__PURE__ */ o("input", {
|
|
65
65
|
type: "number",
|
|
66
66
|
value: h,
|
|
67
67
|
onChange: (e) => g(Number(e.target.value)),
|
|
68
|
-
className: "mt-1 w-full rounded-md border border-border bg-
|
|
68
|
+
className: "mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary"
|
|
69
69
|
})] })]
|
|
70
70
|
}),
|
|
71
71
|
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("label", {
|
|
72
|
-
className: "block text-sm font-medium text-
|
|
72
|
+
className: "block text-sm font-medium text-text-primary",
|
|
73
73
|
children: "Description"
|
|
74
74
|
}), /* @__PURE__ */ o("textarea", {
|
|
75
75
|
placeholder: "Meeting agenda...",
|
|
76
76
|
rows: 3,
|
|
77
77
|
value: _,
|
|
78
78
|
onChange: (e) => v(e.target.value),
|
|
79
|
-
className: "mt-1 w-full rounded-md border border-border bg-
|
|
79
|
+
className: "mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary"
|
|
80
80
|
})] }),
|
|
81
81
|
/* @__PURE__ */ s("div", {
|
|
82
82
|
className: "flex justify-end gap-2 pt-4",
|
|
83
83
|
children: [/* @__PURE__ */ o("button", {
|
|
84
|
-
className: "rounded-md border border-border px-4 py-2 text-sm font-medium text-
|
|
84
|
+
className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
85
85
|
children: "Cancel"
|
|
86
86
|
}), /* @__PURE__ */ o("button", {
|
|
87
87
|
onClick: y,
|
|
88
88
|
disabled: u || !d || !p,
|
|
89
|
-
className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-
|
|
89
|
+
className: "rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50",
|
|
90
90
|
children: u ? "Scheduling..." : "Schedule"
|
|
91
91
|
})]
|
|
92
92
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeetingCreatePage.js","names":[],"sources":["../../../../src/timecampus/pages/meetings/MeetingCreatePage.tsx"],"sourcesContent":["import { useState, useCallback } from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport { useCreateMeetingMutation } from \"@/generated/wspace-operations\";\n\nexport function MeetingCreatePage() {\n const { workspaceId = \"\" } = useTimeCampus();\n const [createMeeting, { loading: creating }] = useCreateMeetingMutation();\n\n const [title, setTitle] = useState(\"\");\n const [date, setDate] = useState(\"\");\n const [duration, setDuration] = useState(30);\n const [description, setDescription] = useState(\"\");\n\n const handleSubmit = useCallback(async () => {\n if (!workspaceId || !title || !date) return;\n const startTime = new Date(date).toISOString();\n await createMeeting({\n variables: {\n input: {\n workspaceId,\n title,\n meetingType: \"TEAM\" as never,\n startTime,\n duration,\n notes: description || undefined,\n },\n },\n refetchQueries: [\"ListMeetings\"],\n });\n setTitle(\"\");\n setDate(\"\");\n setDuration(30);\n setDescription(\"\");\n }, [workspaceId, title, date, duration, description, createMeeting]);\n\n return (\n <PageLayout\n title=\"Schedule Meeting\"\n description=\"Create a new meeting\"\n actions={\n <button className=\"inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-2 text-sm font-medium text-
|
|
1
|
+
{"version":3,"file":"MeetingCreatePage.js","names":[],"sources":["../../../../src/timecampus/pages/meetings/MeetingCreatePage.tsx"],"sourcesContent":["import { useState, useCallback } from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport { useCreateMeetingMutation } from \"@/generated/wspace-operations\";\n\nexport function MeetingCreatePage() {\n const { workspaceId = \"\" } = useTimeCampus();\n const [createMeeting, { loading: creating }] = useCreateMeetingMutation();\n\n const [title, setTitle] = useState(\"\");\n const [date, setDate] = useState(\"\");\n const [duration, setDuration] = useState(30);\n const [description, setDescription] = useState(\"\");\n\n const handleSubmit = useCallback(async () => {\n if (!workspaceId || !title || !date) return;\n const startTime = new Date(date).toISOString();\n await createMeeting({\n variables: {\n input: {\n workspaceId,\n title,\n meetingType: \"TEAM\" as never,\n startTime,\n duration,\n notes: description || undefined,\n },\n },\n refetchQueries: [\"ListMeetings\"],\n });\n setTitle(\"\");\n setDate(\"\");\n setDuration(30);\n setDescription(\"\");\n }, [workspaceId, title, date, duration, description, createMeeting]);\n\n return (\n <PageLayout\n title=\"Schedule Meeting\"\n description=\"Create a new meeting\"\n actions={\n <button className=\"inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50\">\n <ArrowLeft className=\"h-4 w-4\" />\n Back\n </button>\n }\n >\n <div className=\"mx-auto max-w-2xl rounded-xl border border-border-seam bg-gloss-card shadow-pop p-6\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n Meeting Title\n </label>\n <input\n type=\"text\"\n placeholder=\"Enter meeting title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n className=\"mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n Date\n </label>\n <input\n type=\"date\"\n value={date}\n onChange={(e) => setDate(e.target.value)}\n className=\"mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n Duration (minutes)\n </label>\n <input\n type=\"number\"\n value={duration}\n onChange={(e) => setDuration(Number(e.target.value))}\n className=\"mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n Description\n </label>\n <textarea\n placeholder=\"Meeting agenda...\"\n rows={3}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n className=\"mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary\"\n />\n </div>\n <div className=\"flex justify-end gap-2 pt-4\">\n <button className=\"rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50\">\n Cancel\n </button>\n <button\n onClick={handleSubmit}\n disabled={creating || !title || !date}\n className=\"rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50\"\n >\n {creating ? \"Scheduling...\" : \"Schedule\"}\n </button>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,IAAoB;CAClC,IAAM,EAAE,iBAAc,OAAO,GAAe,EACtC,CAAC,GAAe,EAAE,SAAS,OAAc,GAA0B,EAEnE,CAAC,GAAO,KAAY,EAAS,GAAG,EAChC,CAAC,GAAM,KAAW,EAAS,GAAG,EAC9B,CAAC,GAAU,KAAe,EAAS,GAAG,EACtC,CAAC,GAAa,KAAkB,EAAS,GAAG,EAE5C,IAAe,EAAY,YAAY;AACvC,GAAC,KAAe,CAAC,KAAS,CAAC,MAE/B,MAAM,EAAc;GAClB,WAAW,EACT,OAAO;IACL;IACA;IACA,aAAa;IACb,WAPY,IAAI,KAAK,EAAK,CAAC,aAAa;IAQxC;IACA,OAAO,KAAe,KAAA;IACvB,EACF;GACD,gBAAgB,CAAC,eAAe;GACjC,CAAC,EACF,EAAS,GAAG,EACZ,EAAQ,GAAG,EACX,EAAY,GAAG,EACf,EAAe,GAAG;IACjB;EAAC;EAAa;EAAO;EAAM;EAAU;EAAa;EAAc,CAAC;AAEpE,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,kBAAC,UAAD;GAAQ,WAAU;aAAlB,CACE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAAA,OAE1B;;YAGX,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;MAAO,WAAU;gBAA8C;MAEvD,CAAA,EACR,kBAAC,SAAD;MACE,MAAK;MACL,aAAY;MACZ,OAAO;MACP,WAAW,MAAM,EAAS,EAAE,OAAO,MAAM;MACzC,WAAU;MACV,CAAA,CACE,EAAA,CAAA;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;OAAO,WAAU;iBAA8C;OAEvD,CAAA,EACR,kBAAC,SAAD;OACE,MAAK;OACL,OAAO;OACP,WAAW,MAAM,EAAQ,EAAE,OAAO,MAAM;OACxC,WAAU;OACV,CAAA,CACE,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;OAAO,WAAU;iBAA8C;OAEvD,CAAA,EACR,kBAAC,SAAD;OACE,MAAK;OACL,OAAO;OACP,WAAW,MAAM,EAAY,OAAO,EAAE,OAAO,MAAM,CAAC;OACpD,WAAU;OACV,CAAA,CACE,EAAA,CAAA,CACF;;KACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;MAAO,WAAU;gBAA8C;MAEvD,CAAA,EACR,kBAAC,YAAD;MACE,aAAY;MACZ,MAAM;MACN,OAAO;MACP,WAAW,MAAM,EAAe,EAAE,OAAO,MAAM;MAC/C,WAAU;MACV,CAAA,CACE,EAAA,CAAA;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,UAAD;OAAQ,WAAU;iBAA+G;OAExH,CAAA,EACT,kBAAC,UAAD;OACE,SAAS;OACT,UAAU,KAAY,CAAC,KAAS,CAAC;OACjC,WAAU;iBAET,IAAW,kBAAkB;OACvB,CAAA,CACL;;KACF;;GACF,CAAA;EACK,CAAA"}
|
|
@@ -1,57 +1,57 @@
|
|
|
1
1
|
import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
|
|
2
2
|
import { formatCurrency as t } from "../../utils/helpers.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { StatCard as n } from "../../components/StatCard.js";
|
|
4
|
+
import { LoadingSkeleton as r } from "../../components/LoadingSkeleton.js";
|
|
5
|
+
import { useGetMeetingQuery as i } from "../../../generated/wspace-operations.js";
|
|
6
|
+
import { PageLayout as a } from "../../components/PageLayout.js";
|
|
7
7
|
import { Clock as o, Users as s } from "lucide-react";
|
|
8
8
|
import { useParams as c } from "react-router-dom";
|
|
9
9
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
10
10
|
//#region src/timecampus/pages/meetings/MeetingDetailPage.tsx
|
|
11
11
|
function d() {
|
|
12
|
-
let { id: d } = c(), { workspaceId: f = "" } = e(), { data: p, loading: m, error: h } =
|
|
12
|
+
let { id: d } = c(), { workspaceId: f = "" } = e(), { data: p, loading: m, error: h } = i({
|
|
13
13
|
variables: {
|
|
14
14
|
id: d ?? "",
|
|
15
15
|
workspaceId: f
|
|
16
16
|
},
|
|
17
17
|
skip: !f || !d
|
|
18
18
|
}), g = p?.meeting;
|
|
19
|
-
if (m) return /* @__PURE__ */ l(
|
|
19
|
+
if (m) return /* @__PURE__ */ l(a, {
|
|
20
20
|
title: "Meeting Details",
|
|
21
21
|
description: `Meeting ID: ${d}`,
|
|
22
|
-
children: /* @__PURE__ */ l(
|
|
22
|
+
children: /* @__PURE__ */ l(r, { variant: "detail" })
|
|
23
23
|
});
|
|
24
|
-
if (h || !g) return /* @__PURE__ */ l(
|
|
24
|
+
if (h || !g) return /* @__PURE__ */ l(a, {
|
|
25
25
|
title: "Meeting Details",
|
|
26
26
|
description: `Meeting ID: ${d}`,
|
|
27
27
|
children: /* @__PURE__ */ l("div", {
|
|
28
|
-
className: "rounded-lg border border-
|
|
28
|
+
className: "rounded-lg border border-status-error-bg/40 bg-status-error-bg p-4 text-sm text-status-error-text",
|
|
29
29
|
children: h ? "Failed to load meeting details. Please try again later." : "Meeting not found."
|
|
30
30
|
})
|
|
31
31
|
});
|
|
32
32
|
let _ = g.actionItems.filter((e) => e.status !== "COMPLETED").length;
|
|
33
|
-
return /* @__PURE__ */ u(
|
|
33
|
+
return /* @__PURE__ */ u(a, {
|
|
34
34
|
title: "Meeting Details",
|
|
35
35
|
description: g.title,
|
|
36
36
|
children: [/* @__PURE__ */ u("div", {
|
|
37
37
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
38
38
|
children: [
|
|
39
|
-
/* @__PURE__ */ l(
|
|
39
|
+
/* @__PURE__ */ l(n, {
|
|
40
40
|
title: "Duration",
|
|
41
41
|
value: `${g.duration ?? 0} min`,
|
|
42
42
|
icon: /* @__PURE__ */ l(o, { className: "h-5 w-5" })
|
|
43
43
|
}),
|
|
44
|
-
/* @__PURE__ */ l(
|
|
44
|
+
/* @__PURE__ */ l(n, {
|
|
45
45
|
title: "Participants",
|
|
46
46
|
value: String(g.participants.length),
|
|
47
47
|
icon: /* @__PURE__ */ l(s, { className: "h-5 w-5" })
|
|
48
48
|
}),
|
|
49
|
-
/* @__PURE__ */ l(
|
|
49
|
+
/* @__PURE__ */ l(n, {
|
|
50
50
|
title: "Cost",
|
|
51
51
|
value: g.cost == null ? "N/A" : t(g.cost),
|
|
52
52
|
description: "Based on participant rates"
|
|
53
53
|
}),
|
|
54
|
-
/* @__PURE__ */ l(
|
|
54
|
+
/* @__PURE__ */ l(n, {
|
|
55
55
|
title: "Action Items",
|
|
56
56
|
value: String(g.actionItems.length),
|
|
57
57
|
description: `${_} pending`
|
|
@@ -60,56 +60,56 @@ function d() {
|
|
|
60
60
|
}), /* @__PURE__ */ u("div", {
|
|
61
61
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
|
|
62
62
|
children: [/* @__PURE__ */ u("div", {
|
|
63
|
-
className: "rounded-xl border border-border bg-card p-6",
|
|
63
|
+
className: "rounded-xl border border-border-seam bg-gloss-card shadow-pop p-6",
|
|
64
64
|
children: [/* @__PURE__ */ l("h3", {
|
|
65
|
-
className: "mb-4 text-sm font-semibold text-
|
|
65
|
+
className: "mb-4 text-sm font-semibold text-text-primary",
|
|
66
66
|
children: "Participants"
|
|
67
67
|
}), g.participants.length > 0 ? /* @__PURE__ */ l("div", {
|
|
68
68
|
className: "space-y-2",
|
|
69
69
|
children: g.participants.map((e) => /* @__PURE__ */ u("div", {
|
|
70
|
-
className: "flex items-center justify-between rounded-lg border border-border px-3 py-2",
|
|
70
|
+
className: "flex items-center justify-between rounded-lg border border-border-subtle px-3 py-2",
|
|
71
71
|
children: [/* @__PURE__ */ l("span", {
|
|
72
|
-
className: "text-sm text-
|
|
72
|
+
className: "text-sm text-text-primary",
|
|
73
73
|
children: e.userId
|
|
74
74
|
}), /* @__PURE__ */ u("div", {
|
|
75
75
|
className: "flex items-center gap-2",
|
|
76
76
|
children: [/* @__PURE__ */ l("span", {
|
|
77
|
-
className: "text-xs text-
|
|
77
|
+
className: "text-xs text-text-secondary",
|
|
78
78
|
children: e.role
|
|
79
79
|
}), /* @__PURE__ */ l("span", {
|
|
80
|
-
className: "inline-flex rounded-full bg-
|
|
80
|
+
className: "inline-flex rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary",
|
|
81
81
|
children: e.status
|
|
82
82
|
})]
|
|
83
83
|
})]
|
|
84
84
|
}, e.id))
|
|
85
85
|
}) : /* @__PURE__ */ l("div", {
|
|
86
|
-
className: "flex h-32 items-center justify-center rounded-lg border border-dashed border-border",
|
|
86
|
+
className: "flex h-32 items-center justify-center rounded-lg border border-dashed border-border-subtle",
|
|
87
87
|
children: /* @__PURE__ */ l("p", {
|
|
88
|
-
className: "text-sm text-
|
|
88
|
+
className: "text-sm text-text-secondary",
|
|
89
89
|
children: "No participants added"
|
|
90
90
|
})
|
|
91
91
|
})]
|
|
92
92
|
}), /* @__PURE__ */ u("div", {
|
|
93
|
-
className: "rounded-xl border border-border bg-card p-6",
|
|
93
|
+
className: "rounded-xl border border-border-seam bg-gloss-card shadow-pop p-6",
|
|
94
94
|
children: [/* @__PURE__ */ l("h3", {
|
|
95
|
-
className: "mb-4 text-sm font-semibold text-
|
|
95
|
+
className: "mb-4 text-sm font-semibold text-text-primary",
|
|
96
96
|
children: "Action Items"
|
|
97
97
|
}), g.actionItems.length > 0 ? /* @__PURE__ */ l("div", {
|
|
98
98
|
className: "space-y-2",
|
|
99
99
|
children: g.actionItems.map((e) => /* @__PURE__ */ u("div", {
|
|
100
|
-
className: "flex items-center justify-between rounded-lg border border-border px-3 py-2",
|
|
100
|
+
className: "flex items-center justify-between rounded-lg border border-border-subtle px-3 py-2",
|
|
101
101
|
children: [/* @__PURE__ */ l("span", {
|
|
102
|
-
className: "text-sm text-
|
|
102
|
+
className: "text-sm text-text-primary",
|
|
103
103
|
children: e.title
|
|
104
104
|
}), /* @__PURE__ */ l("span", {
|
|
105
|
-
className: "inline-flex rounded-full bg-
|
|
105
|
+
className: "inline-flex rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary",
|
|
106
106
|
children: e.status
|
|
107
107
|
})]
|
|
108
108
|
}, e.id))
|
|
109
109
|
}) : /* @__PURE__ */ l("div", {
|
|
110
|
-
className: "flex h-32 items-center justify-center rounded-lg border border-dashed border-border",
|
|
110
|
+
className: "flex h-32 items-center justify-center rounded-lg border border-dashed border-border-subtle",
|
|
111
111
|
children: /* @__PURE__ */ l("p", {
|
|
112
|
-
className: "text-sm text-
|
|
112
|
+
className: "text-sm text-text-secondary",
|
|
113
113
|
children: "No action items"
|
|
114
114
|
})
|
|
115
115
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeetingDetailPage.js","names":[],"sources":["../../../../src/timecampus/pages/meetings/MeetingDetailPage.tsx"],"sourcesContent":["import { useParams } from \"react-router-dom\";\nimport { CalendarDays, Users, Clock, Video } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { StatCard } from \"../../components/StatCard\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useGetMeetingQuery,\n type MeetingParticipantFieldsFragment,\n type MeetingActionItemFieldsFragment,\n} from \"@/generated/wspace-operations\";\nimport { formatCurrency } from \"../../utils/helpers\";\n\nexport function MeetingDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useGetMeetingQuery({\n variables: { id: id ?? \"\", workspaceId },\n skip: !workspaceId || !id,\n });\n\n const meeting = data?.meeting;\n\n if (loading) {\n return (\n <PageLayout title=\"Meeting Details\" description={`Meeting ID: ${id}`}>\n <LoadingSkeleton variant=\"detail\" />\n </PageLayout>\n );\n }\n\n if (error || !meeting) {\n return (\n <PageLayout title=\"Meeting Details\" description={`Meeting ID: ${id}`}>\n <div className=\"rounded-lg border border-
|
|
1
|
+
{"version":3,"file":"MeetingDetailPage.js","names":[],"sources":["../../../../src/timecampus/pages/meetings/MeetingDetailPage.tsx"],"sourcesContent":["import { useParams } from \"react-router-dom\";\nimport { CalendarDays, Users, Clock, Video } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { StatCard } from \"../../components/StatCard\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useGetMeetingQuery,\n type MeetingParticipantFieldsFragment,\n type MeetingActionItemFieldsFragment,\n} from \"@/generated/wspace-operations\";\nimport { formatCurrency } from \"../../utils/helpers\";\n\nexport function MeetingDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useGetMeetingQuery({\n variables: { id: id ?? \"\", workspaceId },\n skip: !workspaceId || !id,\n });\n\n const meeting = data?.meeting;\n\n if (loading) {\n return (\n <PageLayout title=\"Meeting Details\" description={`Meeting ID: ${id}`}>\n <LoadingSkeleton variant=\"detail\" />\n </PageLayout>\n );\n }\n\n if (error || !meeting) {\n return (\n <PageLayout title=\"Meeting Details\" description={`Meeting ID: ${id}`}>\n <div className=\"rounded-lg border border-status-error-bg/40 bg-status-error-bg p-4 text-sm text-status-error-text\">\n {error\n ? \"Failed to load meeting details. Please try again later.\"\n : \"Meeting not found.\"}\n </div>\n </PageLayout>\n );\n }\n\n const pendingActions = meeting.actionItems.filter(\n (a: MeetingActionItemFieldsFragment) => a.status !== \"COMPLETED\",\n ).length;\n\n return (\n <PageLayout title=\"Meeting Details\" description={meeting.title}>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <StatCard\n title=\"Duration\"\n value={`${meeting.duration ?? 0} min`}\n icon={<Clock className=\"h-5 w-5\" />}\n />\n <StatCard\n title=\"Participants\"\n value={String(meeting.participants.length)}\n icon={<Users className=\"h-5 w-5\" />}\n />\n <StatCard\n title=\"Cost\"\n value={meeting.cost != null ? formatCurrency(meeting.cost) : \"N/A\"}\n description=\"Based on participant rates\"\n />\n <StatCard\n title=\"Action Items\"\n value={String(meeting.actionItems.length)}\n description={`${pendingActions} pending`}\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n <div className=\"rounded-xl border border-border-seam bg-gloss-card shadow-pop p-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-text-primary\">\n Participants\n </h3>\n {meeting.participants.length > 0 ? (\n <div className=\"space-y-2\">\n {meeting.participants.map(\n (p: MeetingParticipantFieldsFragment) => (\n <div\n key={p.id}\n className=\"flex items-center justify-between rounded-lg border border-border-subtle px-3 py-2\"\n >\n <span className=\"text-sm text-text-primary\">\n {p.userId}\n </span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-text-secondary\">\n {p.role}\n </span>\n <span className=\"inline-flex rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {p.status}\n </span>\n </div>\n </div>\n ),\n )}\n </div>\n ) : (\n <div className=\"flex h-32 items-center justify-center rounded-lg border border-dashed border-border-subtle\">\n <p className=\"text-sm text-text-secondary\">\n No participants added\n </p>\n </div>\n )}\n </div>\n <div className=\"rounded-xl border border-border-seam bg-gloss-card shadow-pop p-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-text-primary\">\n Action Items\n </h3>\n {meeting.actionItems.length > 0 ? (\n <div className=\"space-y-2\">\n {meeting.actionItems.map(\n (item: MeetingActionItemFieldsFragment) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between rounded-lg border border-border-subtle px-3 py-2\"\n >\n <span className=\"text-sm text-text-primary\">\n {item.title}\n </span>\n <span className=\"inline-flex rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {item.status}\n </span>\n </div>\n ),\n )}\n </div>\n ) : (\n <div className=\"flex h-32 items-center justify-center rounded-lg border border-dashed border-border-subtle\">\n <p className=\"text-sm text-text-secondary\">No action items</p>\n </div>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAgB,IAAoB;CAClC,IAAM,EAAE,UAAO,GAA2B,EACpC,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAAmB;EAClD,WAAW;GAAE,IAAI,KAAM;GAAI;GAAa;EACxC,MAAM,CAAC,KAAe,CAAC;EACxB,CAAC,EAEI,IAAU,GAAM;AAEtB,KAAI,EACF,QACE,kBAAC,GAAD;EAAY,OAAM;EAAkB,aAAa,eAAe;YAC9D,kBAAC,GAAD,EAAiB,SAAQ,UAAW,CAAA;EACzB,CAAA;AAIjB,KAAI,KAAS,CAAC,EACZ,QACE,kBAAC,GAAD;EAAY,OAAM;EAAkB,aAAa,eAAe;YAC9D,kBAAC,OAAD;GAAK,WAAU;aACZ,IACG,4DACA;GACA,CAAA;EACK,CAAA;CAIjB,IAAM,IAAiB,EAAQ,YAAY,QACxC,MAAuC,EAAE,WAAW,YACtD,CAAC;AAEF,QACE,kBAAC,GAAD;EAAY,OAAM;EAAkB,aAAa,EAAQ;YAAzD,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,GAAG,EAAQ,YAAY,EAAE;KAChC,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;KACnC,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,OAAO,EAAQ,aAAa,OAAO;KAC1C,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;KACnC,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,EAAQ,QAAQ,OAAsC,QAA/B,EAAe,EAAQ,KAAK;KAC1D,aAAY;KACZ,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,OAAO,EAAQ,YAAY,OAAO;KACzC,aAAa,GAAG,EAAe;KAC/B,CAAA;IACE;MAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAA+C;KAExD,CAAA,EACJ,EAAQ,aAAa,SAAS,IAC7B,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAQ,aAAa,KACnB,MACC,kBAAC,OAAD;MAEE,WAAU;gBAFZ,CAIE,kBAAC,QAAD;OAAM,WAAU;iBACb,EAAE;OACE,CAAA,EACP,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAE;QACE,CAAA,EACP,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAE;QACE,CAAA,CACH;SACF;QAdC,EAAE,GAcH,CAET;KACG,CAAA,GAEN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAEvC,CAAA;KACA,CAAA,CAEJ;OACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAA+C;KAExD,CAAA,EACJ,EAAQ,YAAY,SAAS,IAC5B,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAQ,YAAY,KAClB,MACC,kBAAC,OAAD;MAEE,WAAU;gBAFZ,CAIE,kBAAC,QAAD;OAAM,WAAU;iBACb,EAAK;OACD,CAAA,EACP,kBAAC,QAAD;OAAM,WAAU;iBACb,EAAK;OACD,CAAA,CACH;QATC,EAAK,GASN,CAET;KACG,CAAA,GAEN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAAmB,CAAA;KAC1D,CAAA,CAEJ;MACF;KACK"}
|
|
@@ -1,63 +1,63 @@
|
|
|
1
1
|
import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
|
|
2
2
|
import { formatDate as t } from "../../utils/helpers.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { LoadingSkeleton as n } from "../../components/LoadingSkeleton.js";
|
|
4
|
+
import { useListMeetingsQuery as r } from "../../../generated/wspace-operations.js";
|
|
5
|
+
import { PageLayout as i } from "../../components/PageLayout.js";
|
|
6
6
|
import { CalendarDays as a, Plus as o, Video as s } from "lucide-react";
|
|
7
7
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
8
8
|
//#region src/timecampus/pages/meetings/MeetingsPage.tsx
|
|
9
9
|
function u() {
|
|
10
|
-
let { workspaceId: u = "" } = e(), { data: d, loading: f, error: p } =
|
|
10
|
+
let { workspaceId: u = "" } = e(), { data: d, loading: f, error: p } = r({
|
|
11
11
|
variables: {
|
|
12
12
|
workspaceId: u,
|
|
13
13
|
limit: 20
|
|
14
14
|
},
|
|
15
15
|
skip: !u
|
|
16
16
|
}), m = d?.meetings ?? [];
|
|
17
|
-
return f ? /* @__PURE__ */ c(
|
|
17
|
+
return f ? /* @__PURE__ */ c(i, {
|
|
18
18
|
title: "Meetings",
|
|
19
19
|
description: "Schedule and track meetings",
|
|
20
20
|
actions: /* @__PURE__ */ l("button", {
|
|
21
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-
|
|
21
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-action-primary-bg px-3 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
|
|
22
22
|
children: [/* @__PURE__ */ c(o, { className: "h-4 w-4" }), "Schedule Meeting"]
|
|
23
23
|
}),
|
|
24
|
-
children: /* @__PURE__ */ c(
|
|
24
|
+
children: /* @__PURE__ */ c(n, {
|
|
25
25
|
variant: "list",
|
|
26
26
|
count: 5
|
|
27
27
|
})
|
|
28
|
-
}) : p ? /* @__PURE__ */ c(
|
|
28
|
+
}) : p ? /* @__PURE__ */ c(i, {
|
|
29
29
|
title: "Meetings",
|
|
30
30
|
description: "Schedule and track meetings",
|
|
31
31
|
children: /* @__PURE__ */ c("div", {
|
|
32
|
-
className: "rounded-lg border border-
|
|
32
|
+
className: "rounded-lg border border-status-error-bg/40 bg-status-error-bg p-4 text-sm text-status-error-text",
|
|
33
33
|
children: "Failed to load meetings. Please try again later."
|
|
34
34
|
})
|
|
35
|
-
}) : /* @__PURE__ */ c(
|
|
35
|
+
}) : /* @__PURE__ */ c(i, {
|
|
36
36
|
title: "Meetings",
|
|
37
37
|
description: "Schedule and track meetings",
|
|
38
38
|
actions: /* @__PURE__ */ l("button", {
|
|
39
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-
|
|
39
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-action-primary-bg px-3 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
|
|
40
40
|
children: [/* @__PURE__ */ c(o, { className: "h-4 w-4" }), "Schedule Meeting"]
|
|
41
41
|
}),
|
|
42
42
|
children: /* @__PURE__ */ c("div", {
|
|
43
|
-
className: "rounded-xl border border-border bg-card",
|
|
43
|
+
className: "rounded-xl border border-border-seam bg-gloss-card shadow-pop",
|
|
44
44
|
children: /* @__PURE__ */ c("div", {
|
|
45
45
|
className: "divide-y divide-border",
|
|
46
46
|
children: m.length === 0 ? /* @__PURE__ */ c("div", {
|
|
47
|
-
className: "p-8 text-center text-sm text-
|
|
47
|
+
className: "p-8 text-center text-sm text-text-secondary",
|
|
48
48
|
children: "No meetings found."
|
|
49
49
|
}) : m.map((e) => /* @__PURE__ */ l("div", {
|
|
50
|
-
className: "flex items-center justify-between p-4 hover:bg-
|
|
50
|
+
className: "flex items-center justify-between p-4 hover:bg-bg-sunken/50 transition-colors cursor-pointer",
|
|
51
51
|
children: [/* @__PURE__ */ l("div", {
|
|
52
52
|
className: "flex items-center gap-3",
|
|
53
|
-
children: [/* @__PURE__ */ c(a, { className: "h-5 w-5 text-
|
|
53
|
+
children: [/* @__PURE__ */ c(a, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ l("div", {
|
|
54
54
|
className: "flex items-center gap-2",
|
|
55
55
|
children: [/* @__PURE__ */ c("p", {
|
|
56
|
-
className: "text-sm font-medium text-
|
|
56
|
+
className: "text-sm font-medium text-text-primary",
|
|
57
57
|
children: e.title
|
|
58
|
-
}), e.recordingUrl && /* @__PURE__ */ c(s, { className: "h-3.5 w-3.5 text-
|
|
58
|
+
}), e.recordingUrl && /* @__PURE__ */ c(s, { className: "h-3.5 w-3.5 text-text-secondary" })]
|
|
59
59
|
}), /* @__PURE__ */ l("p", {
|
|
60
|
-
className: "text-xs text-
|
|
60
|
+
className: "text-xs text-text-secondary",
|
|
61
61
|
children: [
|
|
62
62
|
t(e.startTime),
|
|
63
63
|
" ·",
|
|
@@ -72,10 +72,10 @@ function u() {
|
|
|
72
72
|
}), /* @__PURE__ */ l("div", {
|
|
73
73
|
className: "flex items-center gap-2",
|
|
74
74
|
children: [/* @__PURE__ */ c("span", {
|
|
75
|
-
className: "inline-flex rounded-full bg-
|
|
75
|
+
className: "inline-flex rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary",
|
|
76
76
|
children: e.meetingType
|
|
77
77
|
}), /* @__PURE__ */ c("span", {
|
|
78
|
-
className: "inline-flex rounded-full bg-
|
|
78
|
+
className: "inline-flex rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary",
|
|
79
79
|
children: e.endTime ? "completed" : "scheduled"
|
|
80
80
|
})]
|
|
81
81
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeetingsPage.js","names":[],"sources":["../../../../src/timecampus/pages/meetings/MeetingsPage.tsx"],"sourcesContent":["import { CalendarDays, Plus, Video } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { formatDate } from \"../../utils/helpers\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListMeetingsQuery,\n type MeetingFieldsFragment,\n} from \"@/generated/wspace-operations\";\n\nexport function MeetingsPage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useListMeetingsQuery({\n variables: { workspaceId, limit: 20 },\n skip: !workspaceId,\n });\n\n const meetings = data?.meetings ?? [];\n\n if (loading) {\n return (\n <PageLayout\n title=\"Meetings\"\n description=\"Schedule and track meetings\"\n actions={\n <button className=\"inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-
|
|
1
|
+
{"version":3,"file":"MeetingsPage.js","names":[],"sources":["../../../../src/timecampus/pages/meetings/MeetingsPage.tsx"],"sourcesContent":["import { CalendarDays, Plus, Video } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { formatDate } from \"../../utils/helpers\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListMeetingsQuery,\n type MeetingFieldsFragment,\n} from \"@/generated/wspace-operations\";\n\nexport function MeetingsPage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useListMeetingsQuery({\n variables: { workspaceId, limit: 20 },\n skip: !workspaceId,\n });\n\n const meetings = data?.meetings ?? [];\n\n if (loading) {\n return (\n <PageLayout\n title=\"Meetings\"\n description=\"Schedule and track meetings\"\n actions={\n <button className=\"inline-flex items-center gap-1.5 rounded-md bg-action-primary-bg px-3 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90\">\n <Plus className=\"h-4 w-4\" />\n Schedule Meeting\n </button>\n }\n >\n <LoadingSkeleton variant=\"list\" count={5} />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"Meetings\" description=\"Schedule and track meetings\">\n <div className=\"rounded-lg border border-status-error-bg/40 bg-status-error-bg p-4 text-sm text-status-error-text\">\n Failed to load meetings. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Meetings\"\n description=\"Schedule and track meetings\"\n actions={\n <button className=\"inline-flex items-center gap-1.5 rounded-md bg-action-primary-bg px-3 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90\">\n <Plus className=\"h-4 w-4\" />\n Schedule Meeting\n </button>\n }\n >\n <div className=\"rounded-xl border border-border-seam bg-gloss-card shadow-pop\">\n <div className=\"divide-y divide-border\">\n {meetings.length === 0 ? (\n <div className=\"p-8 text-center text-sm text-text-secondary\">\n No meetings found.\n </div>\n ) : (\n meetings.map((meeting: MeetingFieldsFragment) => (\n <div\n key={meeting.id}\n className=\"flex items-center justify-between p-4 hover:bg-bg-sunken/50 transition-colors cursor-pointer\"\n >\n <div className=\"flex items-center gap-3\">\n <CalendarDays className=\"h-5 w-5 text-text-secondary\" />\n <div>\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-text-primary\">\n {meeting.title}\n </p>\n {meeting.recordingUrl && (\n <Video className=\"h-3.5 w-3.5 text-text-secondary\" />\n )}\n </div>\n <p className=\"text-xs text-text-secondary\">\n {formatDate(meeting.startTime)} ·{\" \"}\n {meeting.duration ?? 0}min ·{\" \"}\n {meeting.participants.length} participants\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-flex rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {meeting.meetingType}\n </span>\n <span className=\"inline-flex rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {meeting.endTime ? \"completed\" : \"scheduled\"}\n </span>\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;AAUA,SAAgB,IAAe;CAC7B,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAAqB;EACpD,WAAW;GAAE;GAAa,OAAO;GAAI;EACrC,MAAM,CAAC;EACR,CAAC,EAEI,IAAW,GAAM,YAAY,EAAE;AA6BrC,QA3BI,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,kBAAC,UAAD;GAAQ,WAAU;aAAlB,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,mBAErB;;YAGX,kBAAC,GAAD;GAAiB,SAAQ;GAAO,OAAO;GAAK,CAAA;EACjC,CAAA,GAIb,IAEA,kBAAC,GAAD;EAAY,OAAM;EAAW,aAAY;YACvC,kBAAC,OAAD;GAAK,WAAU;aAAoG;GAE7G,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,kBAAC,UAAD;GAAQ,WAAU;aAAlB,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,mBAErB;;YAGX,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAS,WAAW,IACnB,kBAAC,OAAD;KAAK,WAAU;eAA8C;KAEvD,CAAA,GAEN,EAAS,KAAK,MACZ,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAc,WAAU,+BAAgC,CAAA,EACxD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAQ;QACP,CAAA,EACH,EAAQ,gBACP,kBAAC,GAAD,EAAO,WAAU,mCAAoC,CAAA,CAEnD;UACN,kBAAC,KAAD;OAAG,WAAU;iBAAb;QACG,EAAW,EAAQ,UAAU;QAAC;QAAU;QACxC,EAAQ,YAAY;QAAE;QAAa;QACnC,EAAQ,aAAa;QAAO;QAC3B;SACA,EAAA,CAAA,CACF;SACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD;OAAM,WAAU;iBACb,EAAQ;OACJ,CAAA,EACP,kBAAC,QAAD;OAAM,WAAU;iBACb,EAAQ,UAAU,cAAc;OAC5B,CAAA,CACH;QACF;OA7BC,EAAQ,GA6BT,CACN;IAEA,CAAA;GACF,CAAA;EACK,CAAA"}
|
|
@@ -1,46 +1,46 @@
|
|
|
1
1
|
import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { StatCard as t } from "../../components/StatCard.js";
|
|
3
|
+
import { LoadingSkeleton as n } from "../../components/LoadingSkeleton.js";
|
|
4
|
+
import { useGetPomodoroStatsQuery as r, useListPomodoroSessionsQuery as i } from "../../../generated/wspace-operations.js";
|
|
5
|
+
import { PageLayout as a } from "../../components/PageLayout.js";
|
|
6
6
|
import { BarChart3 as o, Target as s } from "lucide-react";
|
|
7
7
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
8
8
|
//#region src/timecampus/pages/pomodoro/PomodoroAnalyticsPage.tsx
|
|
9
9
|
function u() {
|
|
10
|
-
let { workspaceId: u = "" } = e(), { data: d, loading: f, error: p } =
|
|
10
|
+
let { workspaceId: u = "" } = e(), { data: d, loading: f, error: p } = r({
|
|
11
11
|
variables: { workspaceId: u },
|
|
12
12
|
skip: !u
|
|
13
|
-
}), { data: m, loading: h } =
|
|
13
|
+
}), { data: m, loading: h } = i({
|
|
14
14
|
variables: {
|
|
15
15
|
workspaceId: u,
|
|
16
16
|
limit: 50
|
|
17
17
|
},
|
|
18
18
|
skip: !u
|
|
19
19
|
}), g = d?.pomodoroStats, _ = m?.pomodoroSessions ?? [];
|
|
20
|
-
if (f || h) return /* @__PURE__ */ c(
|
|
20
|
+
if (f || h) return /* @__PURE__ */ c(a, {
|
|
21
21
|
title: "Pomodoro Analytics",
|
|
22
22
|
description: "Track your focus sessions and productivity",
|
|
23
|
-
children: /* @__PURE__ */ c(
|
|
23
|
+
children: /* @__PURE__ */ c(n, {
|
|
24
24
|
variant: "card",
|
|
25
25
|
count: 4
|
|
26
26
|
})
|
|
27
27
|
});
|
|
28
|
-
if (p) return /* @__PURE__ */ c(
|
|
28
|
+
if (p) return /* @__PURE__ */ c(a, {
|
|
29
29
|
title: "Pomodoro Analytics",
|
|
30
30
|
description: "Track your focus sessions and productivity",
|
|
31
31
|
children: /* @__PURE__ */ c("div", {
|
|
32
|
-
className: "rounded-lg border border-
|
|
32
|
+
className: "rounded-lg border border-status-error-bg/40 bg-status-error-bg p-4 text-sm text-status-error-text",
|
|
33
33
|
children: "Failed to load pomodoro analytics. Please try again later."
|
|
34
34
|
})
|
|
35
35
|
});
|
|
36
36
|
let v = Math.floor((g?.totalFocusMinutes ?? 0) / 60), y = (g?.totalFocusMinutes ?? 0) % 60, b = g?.totalSessions ? (g.totalSessions / 30).toFixed(1) : "0", x = _.filter((e) => e.completed).length;
|
|
37
|
-
return /* @__PURE__ */ l(
|
|
37
|
+
return /* @__PURE__ */ l(a, {
|
|
38
38
|
title: "Pomodoro Analytics",
|
|
39
39
|
description: "Track your focus sessions and productivity",
|
|
40
40
|
children: [/* @__PURE__ */ l("div", {
|
|
41
41
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
42
42
|
children: [
|
|
43
|
-
/* @__PURE__ */ c(
|
|
43
|
+
/* @__PURE__ */ c(t, {
|
|
44
44
|
title: "Total Sessions",
|
|
45
45
|
value: String(g?.totalSessions ?? 0),
|
|
46
46
|
trend: {
|
|
@@ -48,7 +48,7 @@ function u() {
|
|
|
48
48
|
label: "completion rate"
|
|
49
49
|
}
|
|
50
50
|
}),
|
|
51
|
-
/* @__PURE__ */ c(
|
|
51
|
+
/* @__PURE__ */ c(t, {
|
|
52
52
|
title: "Total Focus Time",
|
|
53
53
|
value: `${v}h ${y}m`,
|
|
54
54
|
trend: {
|
|
@@ -56,12 +56,12 @@ function u() {
|
|
|
56
56
|
label: "avg min/session"
|
|
57
57
|
}
|
|
58
58
|
}),
|
|
59
|
-
/* @__PURE__ */ c(
|
|
59
|
+
/* @__PURE__ */ c(t, {
|
|
60
60
|
title: "Avg. Sessions/Day",
|
|
61
61
|
value: b,
|
|
62
62
|
description: `Target: ${g?.totalSessions ?? 0} total`
|
|
63
63
|
}),
|
|
64
|
-
/* @__PURE__ */ c(
|
|
64
|
+
/* @__PURE__ */ c(t, {
|
|
65
65
|
title: "Completion Rate",
|
|
66
66
|
value: `${g?.completionRate ?? 0}%`,
|
|
67
67
|
icon: /* @__PURE__ */ c(s, { className: "h-5 w-5" }),
|
|
@@ -74,32 +74,32 @@ function u() {
|
|
|
74
74
|
}), /* @__PURE__ */ l("div", {
|
|
75
75
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
|
|
76
76
|
children: [/* @__PURE__ */ l("div", {
|
|
77
|
-
className: "rounded-xl border border-border bg-card p-6",
|
|
77
|
+
className: "rounded-xl border border-border-seam bg-gloss-card shadow-pop p-6",
|
|
78
78
|
children: [/* @__PURE__ */ l("div", {
|
|
79
79
|
className: "mb-4 flex items-center gap-2",
|
|
80
80
|
children: [/* @__PURE__ */ c(o, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ c("h3", {
|
|
81
|
-
className: "text-sm font-semibold text-
|
|
81
|
+
className: "text-sm font-semibold text-text-primary",
|
|
82
82
|
children: "Sessions per Day"
|
|
83
83
|
})]
|
|
84
84
|
}), /* @__PURE__ */ c("div", {
|
|
85
|
-
className: "flex h-48 items-center justify-center rounded-lg border border-dashed border-border",
|
|
85
|
+
className: "flex h-48 items-center justify-center rounded-lg border border-dashed border-border-subtle",
|
|
86
86
|
children: /* @__PURE__ */ c("p", {
|
|
87
|
-
className: "text-sm text-
|
|
87
|
+
className: "text-sm text-text-secondary",
|
|
88
88
|
children: _.length > 0 ? `${x} completed out of ${_.length} sessions` : "No session data available"
|
|
89
89
|
})
|
|
90
90
|
})]
|
|
91
91
|
}), /* @__PURE__ */ l("div", {
|
|
92
|
-
className: "rounded-xl border border-border bg-card p-6",
|
|
92
|
+
className: "rounded-xl border border-border-seam bg-gloss-card shadow-pop p-6",
|
|
93
93
|
children: [/* @__PURE__ */ l("div", {
|
|
94
94
|
className: "mb-4 flex items-center gap-2",
|
|
95
95
|
children: [/* @__PURE__ */ c(o, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ c("h3", {
|
|
96
|
-
className: "text-sm font-semibold text-
|
|
96
|
+
className: "text-sm font-semibold text-text-primary",
|
|
97
97
|
children: "Focus Distribution"
|
|
98
98
|
})]
|
|
99
99
|
}), /* @__PURE__ */ c("div", {
|
|
100
|
-
className: "flex h-48 items-center justify-center rounded-lg border border-dashed border-border",
|
|
100
|
+
className: "flex h-48 items-center justify-center rounded-lg border border-dashed border-border-subtle",
|
|
101
101
|
children: /* @__PURE__ */ c("p", {
|
|
102
|
-
className: "text-sm text-
|
|
102
|
+
className: "text-sm text-text-secondary",
|
|
103
103
|
children: g ? `${g.streakDays} day streak · ${g.averageSessionMinutes}m avg session` : "No data available"
|
|
104
104
|
})
|
|
105
105
|
})]
|