calculator2026/src/lib/pricingScaleProject.ts
2026-04-07 16:27:49 +08:00

42 lines
1.3 KiB
TypeScript

import {
makeProjectMajorKey,
resolveScaleRowMajorDictId,
resolveScaleRowProjectIndex
} from '@/lib/pricingScaleLink'
const PROJECT_PATH_PREFIX = 'project-'
const PROJECT_ROW_ID_SEPARATOR = '::'
export const normalizeScaleProjectCount = (value: unknown) => {
const parsed = Number(value)
if (!Number.isFinite(parsed)) return 1
return Math.max(1, Math.floor(parsed))
}
export const buildScaleProjectGroupPathKey = (projectIndex: number) => `${PROJECT_PATH_PREFIX}${projectIndex}`
export const buildScopedScaleRowId = (
isMutipleService: boolean,
projectIndex: number,
majorId: string
) => (isMutipleService ? `${projectIndex}${PROJECT_ROW_ID_SEPARATOR}${majorId}` : majorId)
export const inferScaleProjectCountFromRows = <TRow>(
rows: Array<Partial<TRow>> | undefined,
isMutipleService: boolean
) => {
if (!isMutipleService) return 1
let maxProjectIndex = 1
for (const row of rows || []) {
maxProjectIndex = Math.max(maxProjectIndex, resolveScaleRowProjectIndex(row))
}
return maxProjectIndex
}
export const getScaleProjectMajorKeyFromRow = <TRow>(row: Partial<TRow> | undefined) => {
if (!row) return ''
const majorDictId = resolveScaleRowMajorDictId(row)
if (!majorDictId) return ''
return makeProjectMajorKey(resolveScaleRowProjectIndex(row), majorDictId)
}