@hed-hog/operations 0.0.321 → 0.0.322
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/controllers/operations-contracts.controller.d.ts +9 -9
- package/dist/controllers/operations-tasks.controller.d.ts +22 -0
- package/dist/controllers/operations-tasks.controller.d.ts.map +1 -1
- package/dist/controllers/operations-tasks.controller.js +37 -0
- package/dist/controllers/operations-tasks.controller.js.map +1 -1
- package/dist/dto/create-task.dto.d.ts.map +1 -1
- package/dist/dto/create-task.dto.js +0 -1
- package/dist/dto/create-task.dto.js.map +1 -1
- package/dist/dto/update-task.dto.d.ts.map +1 -1
- package/dist/dto/update-task.dto.js +0 -1
- package/dist/dto/update-task.dto.js.map +1 -1
- package/dist/operations.service.d.ts +22 -0
- package/dist/operations.service.d.ts.map +1 -1
- package/dist/operations.service.js +77 -22
- package/dist/operations.service.js.map +1 -1
- package/hedhog/data/route.yaml +39 -0
- package/hedhog/frontend/app/_components/person-select-with-create.tsx.ejs +49 -22
- package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +2968 -624
- package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +62 -68
- package/hedhog/frontend/app/_components/task-file-attachments.tsx.ejs +388 -0
- package/hedhog/frontend/app/_lib/types.ts.ejs +1 -0
- package/hedhog/frontend/app/my-tasks/page.tsx.ejs +121 -11
- package/hedhog/frontend/app/projects/page.tsx.ejs +105 -22
- package/hedhog/frontend/messages/en.json +143 -2
- package/hedhog/frontend/messages/pt.json +143 -2
- package/hedhog/table/operations_task_file.yaml +23 -0
- package/package.json +5 -5
- package/src/controllers/operations-tasks.controller.ts +43 -9
- package/src/dto/create-task.dto.ts +0 -1
- package/src/dto/update-task.dto.ts +0 -1
- package/src/operations.service.ts +144 -22
package/hedhog/data/route.yaml
CHANGED
|
@@ -315,6 +315,45 @@
|
|
|
315
315
|
- where:
|
|
316
316
|
slug: admin-operations-director
|
|
317
317
|
|
|
318
|
+
- url: /operations/tasks/:id/files
|
|
319
|
+
method: GET
|
|
320
|
+
relations:
|
|
321
|
+
role:
|
|
322
|
+
- where:
|
|
323
|
+
slug: admin
|
|
324
|
+
- where:
|
|
325
|
+
slug: admin-operations-collaborator
|
|
326
|
+
- where:
|
|
327
|
+
slug: admin-operations-supervisor
|
|
328
|
+
- where:
|
|
329
|
+
slug: admin-operations-director
|
|
330
|
+
|
|
331
|
+
- url: /operations/tasks/:id/files
|
|
332
|
+
method: POST
|
|
333
|
+
relations:
|
|
334
|
+
role:
|
|
335
|
+
- where:
|
|
336
|
+
slug: admin
|
|
337
|
+
- where:
|
|
338
|
+
slug: admin-operations-collaborator
|
|
339
|
+
- where:
|
|
340
|
+
slug: admin-operations-supervisor
|
|
341
|
+
- where:
|
|
342
|
+
slug: admin-operations-director
|
|
343
|
+
|
|
344
|
+
- url: /operations/tasks/:id/files/:fileRelationId
|
|
345
|
+
method: DELETE
|
|
346
|
+
relations:
|
|
347
|
+
role:
|
|
348
|
+
- where:
|
|
349
|
+
slug: admin
|
|
350
|
+
- where:
|
|
351
|
+
slug: admin-operations-collaborator
|
|
352
|
+
- where:
|
|
353
|
+
slug: admin-operations-supervisor
|
|
354
|
+
- where:
|
|
355
|
+
slug: admin-operations-director
|
|
356
|
+
|
|
318
357
|
- url: /operations/projects/:id/tasks
|
|
319
358
|
method: GET
|
|
320
359
|
relations:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
|
|
3
4
|
import { Button } from '@/components/ui/button';
|
|
4
5
|
import {
|
|
5
6
|
Command,
|
|
@@ -49,6 +50,8 @@ import { z } from 'zod';
|
|
|
49
50
|
type PersonOption = {
|
|
50
51
|
id: number | string;
|
|
51
52
|
name: string;
|
|
53
|
+
avatarId?: number | null;
|
|
54
|
+
avatar_id?: number | null;
|
|
52
55
|
};
|
|
53
56
|
|
|
54
57
|
type CreatePersonValues = {
|
|
@@ -661,7 +664,10 @@ export function PersonSelectWithCreate({
|
|
|
661
664
|
}
|
|
662
665
|
|
|
663
666
|
if (payload && 'data' in payload && Array.isArray(payload.data)) {
|
|
664
|
-
return payload.data
|
|
667
|
+
return payload.data.map((p) => ({
|
|
668
|
+
...p,
|
|
669
|
+
avatarId: (p as any).avatar_id ?? p.avatarId ?? null,
|
|
670
|
+
})) as PersonOption[];
|
|
665
671
|
}
|
|
666
672
|
|
|
667
673
|
return [];
|
|
@@ -674,14 +680,12 @@ export function PersonSelectWithCreate({
|
|
|
674
680
|
? String(value)
|
|
675
681
|
: '';
|
|
676
682
|
const hasValue = normalizedValue.length > 0;
|
|
677
|
-
const displayLabel =
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
`ID #${normalizedValue}`)
|
|
684
|
-
: selectedPersonLabel || selectPlaceholder;
|
|
683
|
+
const displayLabel = hasValue
|
|
684
|
+
? (personOptionsData.find((person) => String(person.id) === normalizedValue)
|
|
685
|
+
?.name ??
|
|
686
|
+
selectedPersonLabel ??
|
|
687
|
+
`ID #${normalizedValue}`)
|
|
688
|
+
: selectedPersonLabel || selectPlaceholder;
|
|
685
689
|
const hasSelection = hasValue || Boolean(selectedPersonLabel);
|
|
686
690
|
|
|
687
691
|
return (
|
|
@@ -747,19 +751,42 @@ export function PersonSelectWithCreate({
|
|
|
747
751
|
)}
|
|
748
752
|
</CommandEmpty>
|
|
749
753
|
<CommandGroup>
|
|
750
|
-
{personOptionsData.map((person) =>
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
754
|
+
{personOptionsData.map((person) => {
|
|
755
|
+
const avatarId =
|
|
756
|
+
person.avatarId ?? person.avatar_id ?? null;
|
|
757
|
+
const avatarSrc =
|
|
758
|
+
typeof avatarId === 'number' && avatarId > 0
|
|
759
|
+
? `${process.env.NEXT_PUBLIC_API_BASE_URL}/person/avatar/${avatarId}`
|
|
760
|
+
: undefined;
|
|
761
|
+
const initials = person.name
|
|
762
|
+
.trim()
|
|
763
|
+
.split(' ')
|
|
764
|
+
.filter(Boolean)
|
|
765
|
+
.slice(0, 2)
|
|
766
|
+
.map((w) => w[0]!.toUpperCase())
|
|
767
|
+
.join('');
|
|
768
|
+
return (
|
|
769
|
+
<CommandItem
|
|
770
|
+
key={String(person.id)}
|
|
771
|
+
value={`${person.name}-${person.id}`}
|
|
772
|
+
onSelect={() => {
|
|
773
|
+
onChange(Number(person.id), person.name);
|
|
774
|
+
setSelectedPersonLabel(person.name);
|
|
775
|
+
setPersonOpen(false);
|
|
776
|
+
}}
|
|
777
|
+
>
|
|
778
|
+
<Avatar className="mr-2 h-6 w-6 shrink-0">
|
|
779
|
+
{avatarSrc ? (
|
|
780
|
+
<AvatarImage src={avatarSrc} alt={person.name} />
|
|
781
|
+
) : null}
|
|
782
|
+
<AvatarFallback className="text-[9px] font-medium">
|
|
783
|
+
{initials}
|
|
784
|
+
</AvatarFallback>
|
|
785
|
+
</Avatar>
|
|
786
|
+
{person.name}
|
|
787
|
+
</CommandItem>
|
|
788
|
+
);
|
|
789
|
+
})}
|
|
763
790
|
</CommandGroup>
|
|
764
791
|
</CommandList>
|
|
765
792
|
</Command>
|