diff --git a/src/app/(protected)/workorders/_components/detail/tabs/slide-over-extras-tab.tsx b/src/app/(protected)/workorders/_components/detail/tabs/slide-over-extras-tab.tsx
index caed0bf3..8ad375e0 100644
--- a/src/app/(protected)/workorders/_components/detail/tabs/slide-over-extras-tab.tsx
+++ b/src/app/(protected)/workorders/_components/detail/tabs/slide-over-extras-tab.tsx
@@ -40,22 +40,16 @@ type SlideOverExtrasTabProps = {
function ExtraDocRow({
file,
- index,
- uploads,
- avetaRequired,
isReadOnly,
pending,
onRemove,
}: {
file: MediaFile;
- index: number;
- uploads: MediaFile[];
- avetaRequired: boolean;
isReadOnly: boolean;
pending: boolean;
onRemove: (id: string) => void;
}) {
- const category = resolveExtraDocCategory(file, index, avetaRequired, uploads);
+ const category = resolveExtraDocCategory(file);
const isAveta = category === "Aveta";
const ItemIcon = isAveta ? ShieldCheck : FILETYPE_ICON[file.fileType];
const showDelete = !isReadOnly && canDeleteWorkOrderMedia(file);
@@ -192,13 +186,10 @@ export function SlideOverExtrasTab({
) : (
- {uploads.map((file, index) => (
+ {uploads.map((file) => (
item.category === "Aveta");
- if (avetaRequired && index === 0 && !hasExplicitAveta) {
- return "Aveta";
- }
+/**
+ * Extra Docs overlay category. Board purpose stays Extra
+ * (API enum Before/After/Extra/Completion). Aveta is never inferred from
+ * upload order — only an explicit Aveta category counts.
+ */
+export function resolveExtraDocCategory(file: MediaFile): MediaCategory {
return file.category;
}
-export function shouldDefaultFirstExtraToAveta(
- avetaRequired: boolean,
- existing: MediaFile[],
-): boolean {
- return avetaRequired && !existing.some((item) => item.category === "Aveta");
+export function hasExplicitAvetaFile(files: MediaFile[]): boolean {
+ return files.some((item) => item.category === "Aveta");
}
diff --git a/src/test/app/(protected)/workorders/slide-over-extras-aveta.test.tsx b/src/test/app/(protected)/workorders/slide-over-extras-aveta.test.tsx
index 25724db6..de6af331 100644
--- a/src/test/app/(protected)/workorders/slide-over-extras-aveta.test.tsx
+++ b/src/test/app/(protected)/workorders/slide-over-extras-aveta.test.tsx
@@ -12,8 +12,16 @@ const photo: MediaFile = {
category: "Report",
};
+const avetaDoc: MediaFile = {
+ id: "m2",
+ name: "aveta-clearance.pdf",
+ fileType: "pdf",
+ url: "blob:2",
+ category: "Aveta",
+};
+
describe("SlideOverExtrasTab Aveta", () => {
- it("labels the first extra document as Aveta when the WO is flagged", () => {
+ it("does not label the first extra document as Aveta when none is explicitly Aveta", () => {
renderWithProviders(
{
/>,
);
- expect(screen.getAllByText("Aveta").length).toBeGreaterThan(0);
expect(screen.getByText("safety-form.pdf")).toBeInTheDocument();
+ expect(screen.getAllByText("Aveta")).toHaveLength(1);
+ });
+
+ it("labels only an explicitly Aveta-categorized extra document", () => {
+ renderWithProviders(
+ ,
+ );
+
+ expect(screen.getByText("safety-form.pdf")).toBeInTheDocument();
+ expect(screen.getByText("aveta-clearance.pdf")).toBeInTheDocument();
+ expect(screen.getAllByText("Aveta").length).toBeGreaterThanOrEqual(2);
});
});
diff --git a/src/test/domain/work-orders/utils/extra-docs-aveta.test.ts b/src/test/domain/work-orders/utils/extra-docs-aveta.test.ts
index 45b05469..ddc4b562 100644
--- a/src/test/domain/work-orders/utils/extra-docs-aveta.test.ts
+++ b/src/test/domain/work-orders/utils/extra-docs-aveta.test.ts
@@ -1,8 +1,8 @@
import { describe, expect, it } from "vitest";
import type { MediaFile } from "@/domain/work-orders/types/work-order-media";
import {
+ hasExplicitAvetaFile,
resolveExtraDocCategory,
- shouldDefaultFirstExtraToAveta,
} from "@/domain/work-orders/utils/extra-docs-aveta";
function file(category: MediaFile["category"]): MediaFile {
@@ -16,23 +16,23 @@ function file(category: MediaFile["category"]): MediaFile {
}
describe("extra-docs-aveta", () => {
- it("defaults the first extra file to Aveta when required and none is Aveta", () => {
+ it("does not label the first extra file as Aveta when the WO is flagged and none is Aveta", () => {
const files = [file("Photo"), file("Report")];
- expect(resolveExtraDocCategory(files[0], 0, true, files)).toBe("Aveta");
- expect(resolveExtraDocCategory(files[1], 1, true, files)).toBe("Report");
- expect(shouldDefaultFirstExtraToAveta(true, files)).toBe(true);
+ expect(resolveExtraDocCategory(files[0])).toBe("Photo");
+ expect(resolveExtraDocCategory(files[1])).toBe("Report");
+ expect(hasExplicitAvetaFile(files)).toBe(false);
});
it("keeps an explicit Aveta file and does not relabel others", () => {
const files = [file("Photo"), file("Aveta")];
- expect(resolveExtraDocCategory(files[0], 0, true, files)).toBe("Photo");
- expect(resolveExtraDocCategory(files[1], 1, true, files)).toBe("Aveta");
- expect(shouldDefaultFirstExtraToAveta(true, files)).toBe(false);
+ expect(resolveExtraDocCategory(files[0])).toBe("Photo");
+ expect(resolveExtraDocCategory(files[1])).toBe("Aveta");
+ expect(hasExplicitAvetaFile(files)).toBe(true);
});
it("does not label extras as Aveta when the WO is not flagged", () => {
const files = [file("Photo")];
- expect(resolveExtraDocCategory(files[0], 0, false, files)).toBe("Photo");
- expect(shouldDefaultFirstExtraToAveta(false, files)).toBe(false);
+ expect(resolveExtraDocCategory(files[0])).toBe("Photo");
+ expect(hasExplicitAvetaFile(files)).toBe(false);
});
});