refactor(web): replace enums with as const in models and service files

Convert PromptMode, PromptRole, SubjectType, AccessMode, and
AppSourceType from TypeScript enums to as const objects with
companion type aliases to reduce bundle size.

Also convert PromptRole in workflow/types.ts (required to keep
cross-module type compatibility) and add explicit generic to
useState<PromptMode> in configuration/index.tsx so TypeScript
correctly widens the inferred state type.

Part of #27998
This commit is contained in:
Mahmoud Hamdi 2026-03-15 15:43:01 +02:00
parent f5cc1c8b75
commit d6d696cd04
5 changed files with 48 additions and 30 deletions

View File

@ -392,7 +392,7 @@ const Configuration: FC = () => {
}
}, [textGenerationModelList, hasFetchedDetail, modelModeType, currModel, modelConfig])
const [promptMode, doSetPromptMode] = useState(PromptMode.simple)
const [promptMode, doSetPromptMode] = useState<PromptMode>(PromptMode.simple)
const isAdvancedMode = promptMode === PromptMode.advanced
const [canReturnToSimpleMode, setCanReturnToSimpleMode] = useState(true)
const setPromptMode = async (mode: PromptMode) => {

View File

@ -239,11 +239,14 @@ export type ModelConfig = {
completion_params: Record<string, any>
}
export enum PromptRole {
system = 'system',
user = 'user',
assistant = 'assistant',
}
export const PromptRole = {
system: 'system',
user: 'user',
assistant: 'assistant',
} as const
// eslint-disable-next-line ts/no-redeclare -- value-type pair
export type PromptRole = typeof PromptRole[keyof typeof PromptRole]
export enum EditionType {
basic = 'basic',

View File

@ -1,14 +1,20 @@
export enum SubjectType {
GROUP = 'group',
ACCOUNT = 'account',
}
export const SubjectType = {
GROUP: 'group',
ACCOUNT: 'account',
} as const
export enum AccessMode {
PUBLIC = 'public',
SPECIFIC_GROUPS_MEMBERS = 'private',
ORGANIZATION = 'private_all',
EXTERNAL_MEMBERS = 'sso_verified',
}
// eslint-disable-next-line ts/no-redeclare -- value-type pair
export type SubjectType = typeof SubjectType[keyof typeof SubjectType]
export const AccessMode = {
PUBLIC: 'public',
SPECIFIC_GROUPS_MEMBERS: 'private',
ORGANIZATION: 'private_all',
EXTERNAL_MEMBERS: 'sso_verified',
} as const
// eslint-disable-next-line ts/no-redeclare -- value-type pair
export type AccessMode = typeof AccessMode[keyof typeof AccessMode]
export type AccessControlGroup = {
id: 'string'

View File

@ -13,10 +13,13 @@ import type { AgentStrategy, ModelModeType, RETRIEVE_TYPE, ToolItem, TtsAutoPlay
export type Inputs = Record<string, string | number | object | boolean>
export enum PromptMode {
simple = 'simple',
advanced = 'advanced',
}
export const PromptMode = {
simple: 'simple',
advanced: 'advanced',
} as const
// eslint-disable-next-line ts/no-redeclare -- value-type pair
export type PromptMode = typeof PromptMode[keyof typeof PromptMode]
export type PromptItem = {
role?: PromptRole
@ -42,11 +45,14 @@ export type BlockStatus = {
query: boolean
}
export enum PromptRole {
system = 'system',
user = 'user',
assistant = 'assistant',
}
export const PromptRole = {
system: 'system',
user: 'user',
assistant: 'assistant',
} as const
// eslint-disable-next-line ts/no-redeclare -- value-type pair
export type PromptRole = typeof PromptRole[keyof typeof PromptRole]
export type PromptVariable = {
key: string

View File

@ -29,11 +29,14 @@ import {
} from './base'
import { getWebAppAccessToken } from './webapp-auth'
export enum AppSourceType {
webApp = 'webApp',
installedApp = 'installedApp',
tryApp = 'tryApp',
}
export const AppSourceType = {
webApp: 'webApp',
installedApp: 'installedApp',
tryApp: 'tryApp',
} as const
// eslint-disable-next-line ts/no-redeclare -- value-type pair
export type AppSourceType = typeof AppSourceType[keyof typeof AppSourceType]
const apiPrefix = {
[AppSourceType.webApp]: '',