/
45case
/
ptable
Обзор
Документация
Войти
/
45case
/
ptable
Код
Запросы
3
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
src/entities/element/model/phase.ts
56 строк
2 KB
Olya
first_commit
06 июл 2026, 18:16
06 июл 2026, 18:16
0ff6e29
Код
Авторство
О чём код?
import { CHEMISTRY_CONSTANTS } from "@/shared/lib/chemistry/constants"; import type { ElementPhaseAtStp, PeriodicElement } from "./elements"; export const elementPhaseLabels: Record<ElementPhaseAtStp, string> = { gas: "Газ", liquid: "Жидкость", solid: "Твёрдое", unknown: "Неизвестно", }; function toKelvin(temperatureCelsius: number) { return temperatureCelsius + CHEMISTRY_CONSTANTS.ZERO_CELSIUS_IN_KELVIN; } export function getElementPhaseAtTemperature( element: Pick<PeriodicElement, "boilingPointKelvin" | "meltingPointKelvin" | "phaseAtStp">, temperatureCelsius: number, ): ElementPhaseAtStp { const temperatureKelvin = toKelvin(temperatureCelsius); const { boilingPointKelvin, meltingPointKelvin } = element; if (meltingPointKelvin != null && boilingPointKelvin != null) { if (temperatureKelvin >= boilingPointKelvin) { return "gas"; } if (temperatureKelvin < meltingPointKelvin) { return "solid"; } return "liquid"; } if (meltingPointKelvin != null) { if (temperatureKelvin < meltingPointKelvin) { return "solid"; } return element.phaseAtStp === "solid" ? "liquid" : element.phaseAtStp; } if (boilingPointKelvin != null) { if (temperatureKelvin >= boilingPointKelvin) { return "gas"; } return element.phaseAtStp === "gas" ? "liquid" : element.phaseAtStp; } return element.phaseAtStp; } export function getElementPhaseLabel(phase: ElementPhaseAtStp) { return elementPhaseLabels[phase]; }