33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import type { VersionWithContext } from './derive';
|
|
import { WORK_HOURS } from './work-hours';
|
|
|
|
const UNFINISHED_VERSION_STATUSES = new Set(['planned', 'developing', 'paused']);
|
|
|
|
export interface XiaobaoWarningVersionFilter {
|
|
canManage: boolean;
|
|
userName?: string;
|
|
}
|
|
|
|
export function filterXiaobaoWarningVersions(
|
|
versions: VersionWithContext[],
|
|
filter: XiaobaoWarningVersionFilter,
|
|
): VersionWithContext[] {
|
|
return versions.filter((version) => {
|
|
if (!UNFINISHED_VERSION_STATUSES.has(version.status)) return false;
|
|
if (filter.canManage) return true;
|
|
if (!filter.userName) return false;
|
|
return (version.members ?? []).some((member) => member.name === filter.userName);
|
|
});
|
|
}
|
|
|
|
export function formatRemainingWork(hours: number): string {
|
|
const safeHours = Number.isFinite(hours) && hours > 0 ? hours : 0;
|
|
const days = safeHours / WORK_HOURS.hoursPerDay;
|
|
return `${formatNumber(safeHours)}h / ${formatNumber(days)}天`;
|
|
}
|
|
|
|
function formatNumber(value: number): string {
|
|
if (Number.isInteger(value)) return String(value);
|
|
return value.toFixed(1).replace(/\.0$/, '');
|
|
}
|