Files
OpenOPC/opc/plugins/office_ui/frontend_src/lib/sessionIdentity.ts
T
2026-07-01 17:56:31 +08:00

52 lines
1.6 KiB
TypeScript

import type { Session } from '../types/kanban'
export type CanonicalSessionExecMode = 'task' | 'company' | 'org'
export type CanonicalCompanyProfile = 'corporate' | 'custom'
export function normalizeSessionExecMode(value?: string | null): CanonicalSessionExecMode {
const normalized = String(value ?? '').trim().toLowerCase()
if (normalized === 'company') return 'company'
if (normalized === 'org' || normalized === 'custom') return 'org'
return 'task'
}
export function normalizeSessionCompanyProfile(value?: string | null): CanonicalCompanyProfile {
return String(value ?? '').trim().toLowerCase() === 'custom' ? 'custom' : 'corporate'
}
export function canonicalizeSessionExecutionIdentity<T extends Partial<Session>>(session: T): T {
const rawMode = String(session.execMode ?? '').trim().toLowerCase()
const rawProfile = String(session.companyProfile ?? '').trim().toLowerCase()
const rawOrgId = String(session.orgId ?? '').trim()
const hasExplicitMode = rawMode.length > 0
const execMode: CanonicalSessionExecMode = hasExplicitMode
? normalizeSessionExecMode(rawMode)
: (rawProfile === 'custom' || rawOrgId ? 'org' : normalizeSessionExecMode(rawMode))
if (execMode === 'org') {
return {
...session,
execMode: 'org',
companyProfile: 'custom',
orgId: rawOrgId || undefined,
}
}
if (execMode === 'company') {
return {
...session,
execMode: 'company',
companyProfile: 'corporate',
orgId: undefined,
}
}
return {
...session,
execMode: 'task',
companyProfile: undefined,
orgId: undefined,
}
}