@hed-hog/operations 0.0.331 → 0.0.338

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.
Files changed (58) hide show
  1. package/dist/controllers/operations-contracts.controller.d.ts +12 -12
  2. package/dist/operations.service.d.ts.map +1 -1
  3. package/dist/operations.service.js +8 -1
  4. package/dist/operations.service.js.map +1 -1
  5. package/dist/operations.service.spec.js +6 -0
  6. package/dist/operations.service.spec.js.map +1 -1
  7. package/hedhog/frontend/app/_components/collaborator-details-screen.tsx.ejs +476 -0
  8. package/hedhog/frontend/app/_components/collaborator-select-with-create.tsx.ejs +261 -0
  9. package/hedhog/frontend/app/_components/collaborator-tasks-tab.tsx.ejs +358 -358
  10. package/hedhog/frontend/app/_components/collaborator-timesheets-tab.tsx.ejs +6 -6
  11. package/hedhog/frontend/app/_components/contract-content-editor.tsx.ejs +258 -0
  12. package/hedhog/frontend/app/_components/my-project-summary-screen.tsx.ejs +84 -84
  13. package/hedhog/frontend/app/_components/person-select-with-create.tsx.ejs +1 -0
  14. package/hedhog/frontend/app/_components/project-cost-report-screen.tsx.ejs +23 -23
  15. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +4 -4
  16. package/hedhog/frontend/app/_components/task-detail-sheet.tsx.ejs +803 -803
  17. package/hedhog/frontend/app/_components/task-form-sheet.tsx.ejs +629 -629
  18. package/hedhog/frontend/app/_lib/api.ts.ejs +480 -480
  19. package/hedhog/frontend/app/_lib/types.ts.ejs +5 -5
  20. package/hedhog/frontend/app/my-tasks/page.tsx.ejs +74 -74
  21. package/hedhog/frontend/messages/operations/operations/en.json +2100 -0
  22. package/hedhog/frontend/messages/operations/operations/pt.json +2111 -0
  23. package/hedhog/frontend/widgets/capacity-distribution.tsx.ejs +16 -16
  24. package/hedhog/frontend/widgets/effort-by-project.tsx.ejs +16 -16
  25. package/hedhog/frontend/widgets/headcount-by-area.tsx.ejs +16 -16
  26. package/hedhog/frontend/widgets/index.ts.ejs +25 -25
  27. package/hedhog/frontend/widgets/managed-projects-status.tsx.ejs +16 -16
  28. package/hedhog/frontend/widgets/my-hours-period-kpi.tsx.ejs +16 -16
  29. package/hedhog/frontend/widgets/my-open-requests-kpi.tsx.ejs +16 -16
  30. package/hedhog/frontend/widgets/my-pending-requests-list.tsx.ejs +16 -16
  31. package/hedhog/frontend/widgets/my-project-allocations-kpi.tsx.ejs +16 -16
  32. package/hedhog/frontend/widgets/my-quick-actions.tsx.ejs +16 -16
  33. package/hedhog/frontend/widgets/my-relevant-deadlines.tsx.ejs +16 -16
  34. package/hedhog/frontend/widgets/my-timesheet-status-kpi.tsx.ejs +16 -16
  35. package/hedhog/frontend/widgets/my-weekly-journey.tsx.ejs +16 -16
  36. package/hedhog/frontend/widgets/portfolio-costs-kpi.tsx.ejs +16 -16
  37. package/hedhog/frontend/widgets/portfolio-effort-kpi.tsx.ejs +16 -16
  38. package/hedhog/frontend/widgets/portfolio-projects-kpi.tsx.ejs +16 -16
  39. package/hedhog/frontend/widgets/portfolio-risk-kpi.tsx.ejs +16 -16
  40. package/hedhog/frontend/widgets/project-status-overview.tsx.ejs +16 -16
  41. package/hedhog/frontend/widgets/shared-operations-widget.tsx.ejs +169 -169
  42. package/hedhog/frontend/widgets/strategic-deadlines.tsx.ejs +16 -16
  43. package/hedhog/frontend/widgets/team-approval-queue.tsx.ejs +16 -16
  44. package/hedhog/frontend/widgets/team-capacity-kpi.tsx.ejs +16 -16
  45. package/hedhog/frontend/widgets/team-headcount-kpi.tsx.ejs +16 -16
  46. package/hedhog/frontend/widgets/team-hours-kpi.tsx.ejs +16 -16
  47. package/hedhog/frontend/widgets/team-pending-approvals-kpi.tsx.ejs +16 -16
  48. package/hedhog/frontend/widgets/team-utilization-overview.tsx.ejs +16 -16
  49. package/hedhog/frontend/widgets/team-workload-alerts.tsx.ejs +16 -16
  50. package/hedhog/table/operations_collaborator.yaml +8 -8
  51. package/hedhog/table/operations_task.yaml +76 -76
  52. package/hedhog/table/operations_task_activity.yaml +51 -51
  53. package/package.json +5 -5
  54. package/src/controllers/operations-tasks.controller.ts +156 -156
  55. package/src/dashboard/widgets/MyQuickActions.tsx +22 -22
  56. package/src/dto/create-collaborator.dto.ts +4 -4
  57. package/src/operations.service.spec.ts +1006 -988
  58. package/src/operations.service.ts +8 -1
@@ -414,11 +414,11 @@ export type OperationsTaskOption = {
414
414
  projectId: number;
415
415
  projectAssignmentId: number | null;
416
416
  projectName: string;
417
- projectCode?: string | null;
418
- dueDate?: string | null;
419
- estimateHours?: number | null;
420
- tags?: string | null;
421
- assigneeName?: string | null;
417
+ projectCode?: string | null;
418
+ dueDate?: string | null;
419
+ estimateHours?: number | null;
420
+ tags?: string | null;
421
+ assigneeName?: string | null;
422
422
  assigneeUserPhotoId?: number | null;
423
423
  assigneePersonAvatarId?: number | null;
424
424
  commentCount?: number | null;
@@ -8,42 +8,42 @@ import {
8
8
  } from '@/components/entity-list';
9
9
  import { Button } from '@/components/ui/button';
10
10
  import { Card, CardContent } from '@/components/ui/card';
11
- import {
12
- Dialog,
13
- DialogContent,
14
- DialogDescription,
11
+ import {
12
+ Dialog,
13
+ DialogContent,
14
+ DialogDescription,
15
15
  DialogFooter,
16
16
  DialogHeader,
17
- DialogTitle,
18
- } from '@/components/ui/dialog';
19
- import { Input } from '@/components/ui/input';
20
- import { KpiCardsGrid } from '@/components/ui/kpi-cards-grid';
21
- import { Label } from '@/components/ui/label';
22
- import { Progress } from '@/components/ui/progress';
23
- import {
24
- Select,
25
- SelectContent,
26
- SelectItem,
27
- SelectTrigger,
28
- SelectValue,
29
- } from '@/components/ui/select';
30
- import {
31
- Sheet,
32
- SheetContent,
33
- SheetHeader,
34
- SheetTitle,
35
- } from '@/components/ui/sheet';
36
- import {
37
- Table,
38
- TableBody,
39
- TableCell,
17
+ DialogTitle,
18
+ } from '@/components/ui/dialog';
19
+ import { Input } from '@/components/ui/input';
20
+ import { KpiCardsGrid } from '@/components/ui/kpi-cards-grid';
21
+ import { Label } from '@/components/ui/label';
22
+ import { Progress } from '@/components/ui/progress';
23
+ import {
24
+ Select,
25
+ SelectContent,
26
+ SelectItem,
27
+ SelectTrigger,
28
+ SelectValue,
29
+ } from '@/components/ui/select';
30
+ import {
31
+ Sheet,
32
+ SheetContent,
33
+ SheetHeader,
34
+ SheetTitle,
35
+ } from '@/components/ui/sheet';
36
+ import {
37
+ Table,
38
+ TableBody,
39
+ TableCell,
40
40
  TableHead,
41
41
  TableHeader,
42
- TableRow,
43
- } from '@/components/ui/table';
44
- import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
45
- import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group';
46
- import { RichTextEditor } from '@/components/rich-text-editor';
42
+ TableRow,
43
+ } from '@/components/ui/table';
44
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
45
+ import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group';
46
+ import { RichTextEditor } from '@/components/rich-text-editor';
47
47
  import {
48
48
  closestCenter,
49
49
  DndContext,
@@ -85,16 +85,16 @@ import Link from 'next/link';
85
85
  import { useCallback, useMemo, useState } from 'react';
86
86
  import { OperationsHeader } from '../_components/operations-header';
87
87
  import { StatusBadge } from '../_components/status-badge';
88
- import {
89
- TaskDetailSheet,
90
- TaskCommentsSection,
91
- type TaskDetailSheetData,
92
- } from '../_components/task-detail-sheet';
93
- import { TaskFileAttachments } from '../_components/task-file-attachments';
94
- import { TimesheetEntryCreateSheet } from '../_components/timesheet-entry-create-sheet';
95
- import { fetchOperations, mutateOperations } from '../_lib/api';
96
- import { useMentionItems } from '../_lib/hooks/use-mention-items';
97
- import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
88
+ import {
89
+ TaskDetailSheet,
90
+ TaskCommentsSection,
91
+ type TaskDetailSheetData,
92
+ } from '../_components/task-detail-sheet';
93
+ import { TaskFileAttachments } from '../_components/task-file-attachments';
94
+ import { TimesheetEntryCreateSheet } from '../_components/timesheet-entry-create-sheet';
95
+ import { fetchOperations, mutateOperations } from '../_lib/api';
96
+ import { useMentionItems } from '../_lib/hooks/use-mention-items';
97
+ import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
98
98
  import type {
99
99
  OperationsCollaborator,
100
100
  OperationsProjectOption,
@@ -168,25 +168,25 @@ function parseTaskId(value: UniqueIdentifier | null | undefined) {
168
168
  return match ? Number(match[1]) : null;
169
169
  }
170
170
 
171
- function parseColumnId(
172
- value: UniqueIdentifier | null | undefined
173
- ): BoardColumnId | null {
174
- if (!value) return null;
175
- const match = String(value).match(/^col-(.+)$/);
176
- const id = match?.[1];
177
- return KANBAN_COLUMNS.some((c) => c.id === id) ? (id as BoardColumnId) : null;
178
- }
179
-
180
- function normalizeDateInputValue(value?: string | null) {
181
- if (!value) return '';
182
- const match = String(value)
183
- .trim()
184
- .match(/^\d{4}-\d{2}-\d{2}/);
185
- return match?.[0] ?? '';
186
- }
187
-
188
- function splitTasksByColumn(tasks: OperationsTaskOption[]): BoardColumns {
189
- return {
171
+ function parseColumnId(
172
+ value: UniqueIdentifier | null | undefined
173
+ ): BoardColumnId | null {
174
+ if (!value) return null;
175
+ const match = String(value).match(/^col-(.+)$/);
176
+ const id = match?.[1];
177
+ return KANBAN_COLUMNS.some((c) => c.id === id) ? (id as BoardColumnId) : null;
178
+ }
179
+
180
+ function normalizeDateInputValue(value?: string | null) {
181
+ if (!value) return '';
182
+ const match = String(value)
183
+ .trim()
184
+ .match(/^\d{4}-\d{2}-\d{2}/);
185
+ return match?.[0] ?? '';
186
+ }
187
+
188
+ function splitTasksByColumn(tasks: OperationsTaskOption[]): BoardColumns {
189
+ return {
190
190
  todo: tasks.filter((t) => t.status === 'todo'),
191
191
  doing: tasks.filter((t) => t.status === 'doing'),
192
192
  review: tasks.filter((t) => t.status === 'review'),
@@ -334,10 +334,10 @@ export default function OperationsMyTasksPage() {
334
334
  const t = useTranslations('operations.MyTasksPage');
335
335
  const commonT = useTranslations('operations.Common');
336
336
  const detailT = useTranslations('operations.ProjectDetailsPage');
337
-
338
- const { request, currentLocaleCode, getSettingValue } = useApp();
339
- const mentionItems = useMentionItems(request);
340
- const [search, setSearch] = useState('');
337
+
338
+ const { request, currentLocaleCode, getSettingValue } = useApp();
339
+ const mentionItems = useMentionItems(request);
340
+ const [search, setSearch] = useState('');
341
341
  const [statusFilter, setStatusFilter] = useState('all');
342
342
  const [page, setPage] = useState(1);
343
343
  const [pageSize, setPageSize] = usePersistedPageSize({
@@ -366,11 +366,11 @@ export default function OperationsMyTasksPage() {
366
366
  const [deletePromptTask, setDeletePromptTask] =
367
367
  useState<OperationsTaskOption | null>(null);
368
368
  const [taskFormOpen, setTaskFormOpen] = useState(false);
369
- const [editingTaskId, setEditingTaskId] = useState<number | null>(null);
370
- const [archivingTaskId, setArchivingTaskId] = useState<number | null>(null);
371
- const [taskFormLoading, setTaskFormLoading] = useState(false);
372
- const [taskFormData, setTaskFormData] =
373
- useState<TaskFormState>(EMPTY_TASK_FORM);
369
+ const [editingTaskId, setEditingTaskId] = useState<number | null>(null);
370
+ const [archivingTaskId, setArchivingTaskId] = useState<number | null>(null);
371
+ const [taskFormLoading, setTaskFormLoading] = useState(false);
372
+ const [taskFormData, setTaskFormData] =
373
+ useState<TaskFormState>(EMPTY_TASK_FORM);
374
374
  const [activeDragTask, setActiveDragTask] =
375
375
  useState<OperationsTaskOption | null>(null);
376
376
  const [isTimesheetEntrySheetOpen, setIsTimesheetEntrySheetOpen] =
@@ -1527,10 +1527,10 @@ export default function OperationsMyTasksPage() {
1527
1527
  </Dialog>
1528
1528
 
1529
1529
 
1530
- <Sheet
1531
- open={taskFormOpen}
1532
- onOpenChange={(open) => {
1533
- setTaskFormOpen(open);
1530
+ <Sheet
1531
+ open={taskFormOpen}
1532
+ onOpenChange={(open) => {
1533
+ setTaskFormOpen(open);
1534
1534
  if (!open) setEditingTaskId(null);
1535
1535
  }}
1536
1536
  >