From c2c9242f4e76fa3ac26eaea6c3831455b4101812 Mon Sep 17 00:00:00 2001 From: Ian Boyes Date: Fri, 17 Apr 2026 08:40:06 -0700 Subject: [PATCH 01/13] refactor: replace QuickAnalyzeWorkflow enum with union type --- src/account/types.ts | 5 +---- src/tests/fake/account.ts | 8 ++------ 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/account/types.ts b/src/account/types.ts index 19d35fbc4..fe0895f6e 100644 --- a/src/account/types.ts +++ b/src/account/types.ts @@ -1,10 +1,7 @@ import type { GroupMinimal, Permissions } from "@groups/types"; import type { User } from "@users/types"; -export enum QuickAnalyzeWorkflow { - nuvs = "nuvs", - pathoscope_bowtie = "pathoscope_bowtie", -} +export type QuickAnalyzeWorkflow = "nuvs" | "pathoscope_bowtie"; export type APIKeyMinimal = { created_at?: string; diff --git a/src/tests/fake/account.ts b/src/tests/fake/account.ts index c126a90aa..b4a0ebf26 100644 --- a/src/tests/fake/account.ts +++ b/src/tests/fake/account.ts @@ -1,8 +1,4 @@ -import { - type Account, - type APIKeyMinimal, - QuickAnalyzeWorkflow, -} from "@account/types"; +import type { Account, APIKeyMinimal } from "@account/types"; import { faker } from "@faker-js/faker"; import type { Permissions } from "@groups/types"; import nock from "nock"; @@ -11,7 +7,7 @@ import { createFakePermissions } from "./permissions"; import { createFakeUser } from "./user"; const defaultSettings = { - quick_analyze_workflow: QuickAnalyzeWorkflow.pathoscope_bowtie, + quick_analyze_workflow: "pathoscope_bowtie", show_ids: true, show_versions: true, skip_quick_analyze_dialog: true, From 5f6cab16f9d13dae8362baef2055802151f3fab8 Mon Sep 17 00:00:00 2001 From: Ian Boyes Date: Fri, 17 Apr 2026 09:18:06 -0700 Subject: [PATCH 02/13] refactor: replace HistoryMethod enum with union type --- src/otus/types.ts | 31 +++++++++++++++---------------- src/tests/fake/otus.ts | 17 ++++++++--------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/otus/types.ts b/src/otus/types.ts index 9c46b8706..75a8aba0e 100644 --- a/src/otus/types.ts +++ b/src/otus/types.ts @@ -12,22 +12,21 @@ export enum Molecule { ss_rna_pos = "ssRNA+", } -export enum HistoryMethod { - add_isolate = "add_isolate", - create = "create", - create_sequence = "create_sequence", - clone = "clone", - edit = "edit", - edit_sequence = "edit_sequence", - edit_isolate = "edit_isolate", - remove = "remove", - remote = "remote", - remove_isolate = "remove_isolate", - remove_sequence = "remove_sequence", - import_otu = "import", - set_as_default = "set_as_default", - update = "update", -} +export type HistoryMethod = + | "add_isolate" + | "create" + | "create_sequence" + | "clone" + | "edit" + | "edit_sequence" + | "edit_isolate" + | "remove" + | "remote" + | "remove_isolate" + | "remove_sequence" + | "import" + | "set_as_default" + | "update"; /** Contains information on history change */ export type HistoryNested = { diff --git a/src/tests/fake/otus.ts b/src/tests/fake/otus.ts index ead44148d..8c5f0c3cb 100644 --- a/src/tests/fake/otus.ts +++ b/src/tests/fake/otus.ts @@ -1,13 +1,12 @@ import { faker } from "@faker-js/faker"; import type { UpdateOTUProps } from "@otus/queries"; -import { - HistoryMethod, - type HistoryNested, - type Otu, - type OtuIsolate, - type OtuMinimal, - type OtuSegment, - type OtuSequence, +import type { + HistoryNested, + Otu, + OtuIsolate, + OtuMinimal, + OtuSegment, + OtuSequence, } from "@otus/types"; import nock from "nock"; import { createFakeReferenceNested } from "./references"; @@ -21,7 +20,7 @@ export function createFakeHistoryNested(): HistoryNested { created_at: faker.date.past().toISOString(), description: faker.lorem.lines(1), id: faker.string.alphanumeric({ casing: "lower", length: 8 }), - method_name: HistoryMethod.create, + method_name: "create", user: createFakeUserNested(), }; } From 3e7041ce64762ed7e69a9125f46212d7133f25b5 Mon Sep 17 00:00:00 2001 From: Ian Boyes Date: Fri, 17 Apr 2026 09:18:49 -0700 Subject: [PATCH 03/13] refactor: replace AdministratorPermissions enums with const records --- src/administration/utils.ts | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/administration/utils.ts b/src/administration/utils.ts index 05ac6340e..fdf85dbc0 100644 --- a/src/administration/utils.ts +++ b/src/administration/utils.ts @@ -5,13 +5,13 @@ import { AdministratorRoleName } from "./types"; /** * The permissions level of each administrator role */ -enum AdministratorPermissionsLevel { - full, - settings, - spaces, - users, - base, -} +const AdministratorPermissionsLevel: Record = { + [AdministratorRoleName.FULL]: 0, + [AdministratorRoleName.SETTINGS]: 1, + [AdministratorRoleName.SPACES]: 2, + [AdministratorRoleName.USERS]: 3, + [AdministratorRoleName.BASE]: 4, +}; /** * Check if a user has a sufficient admin role @@ -33,16 +33,16 @@ export function hasSufficientAdminRole( /** * Permissions granted to each administrator role */ -export enum AdministratorPermissions { - cancel_job = AdministratorRoleName.BASE, - create_ref = AdministratorRoleName.BASE, - modify_hmm = AdministratorRoleName.BASE, - remove_job = AdministratorRoleName.BASE, - upload_file = AdministratorRoleName.FULL, - create_sample = AdministratorRoleName.FULL, - modify_subtraction = AdministratorRoleName.FULL, - remove_file = AdministratorRoleName.FULL, -} +export const AdministratorPermissions: Record = { + cancel_job: AdministratorRoleName.BASE, + create_ref: AdministratorRoleName.BASE, + modify_hmm: AdministratorRoleName.BASE, + remove_job: AdministratorRoleName.BASE, + upload_file: AdministratorRoleName.FULL, + create_sample: AdministratorRoleName.FULL, + modify_subtraction: AdministratorRoleName.FULL, + remove_file: AdministratorRoleName.FULL, +}; /** * Check if a user has a sufficient admin role or legacy permissions to perform an action From cb1d3d80b9c3c46f809691326ba2f1624a3e0568 Mon Sep 17 00:00:00 2001 From: Ian Boyes Date: Fri, 17 Apr 2026 09:19:34 -0700 Subject: [PATCH 04/13] refactor: replace ReferenceFormMode enum with union type --- src/references/components/Detail/EditReference.tsx | 8 ++------ src/references/components/EmptyReference.tsx | 8 ++------ src/references/components/ReferenceForm.tsx | 7 ++----- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/references/components/Detail/EditReference.tsx b/src/references/components/Detail/EditReference.tsx index ad00fdbcb..810cdbcd6 100644 --- a/src/references/components/Detail/EditReference.tsx +++ b/src/references/components/Detail/EditReference.tsx @@ -4,7 +4,7 @@ import SaveButton from "@base/SaveButton"; import { useUpdateReference } from "@references/queries"; import type { Reference } from "@references/types"; import { useForm } from "react-hook-form"; -import { ReferenceForm, ReferenceFormMode } from "../ReferenceForm"; +import { ReferenceForm } from "../ReferenceForm"; export type FormValues = { name: string; @@ -49,11 +49,7 @@ export default function EditReference({ detail }: EditReferenceProps) { Edit Reference
handleEdit({ ...values }))}> - + diff --git a/src/references/components/EmptyReference.tsx b/src/references/components/EmptyReference.tsx index b334b260d..ea3be6abe 100644 --- a/src/references/components/EmptyReference.tsx +++ b/src/references/components/EmptyReference.tsx @@ -3,7 +3,7 @@ import Button from "@base/Button"; import { DialogFooter } from "@base/Dialog"; import { useForm } from "react-hook-form"; import { useCreateReference } from "../queries"; -import { ReferenceForm, ReferenceFormMode } from "./ReferenceForm"; +import { ReferenceForm } from "./ReferenceForm"; type FormValues = { name: string; @@ -41,11 +41,7 @@ export default function EmptyReference() { }), )} > - +