1
mirror of https://github.com/home-assistant/frontend synced 2024-09-28 00:43:28 +02:00

Use display precision for number format none (#15674)

* Use display precision for number format none

* Update src/common/number/format_number.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* prettier

* Fix 0 value

---------

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
This commit is contained in:
Paul Bottein 2023-03-02 11:19:27 +01:00 committed by GitHub
parent 000e2ef7fc
commit afe1b7ef59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 12 deletions

View File

@ -77,6 +77,26 @@ export const formatNumber = (
).format(Number(num));
}
}
if (
!Number.isNaN(Number(num)) &&
num !== "" &&
localeOptions?.number_format === NumberFormat.none &&
Intl &&
(options?.maximumFractionDigits != null ||
options?.minimumFractionDigits != null)
) {
// If NumberFormat is none, just set the digits options for precision and use en-US format without grouping.
return new Intl.NumberFormat(
"en-US",
getDefaultFormatOptions(num, {
useGrouping: false,
maximumFractionDigits: options?.maximumFractionDigits,
minimumFractionDigits: options?.minimumFractionDigits,
})
).format(Number(num));
}
if (typeof num === "string") {
return num;
}

View File

@ -1,6 +1,6 @@
import { HassEntity } from "home-assistant-js-websocket";
import { PropertyValues } from "lit";
import { EntityRegistryEntry } from "../../../data/entity_registry";
import { EntityRegistryDisplayEntry } from "../../../data/entity_registry";
import { HomeAssistant } from "../../../types";
import { processConfigEntities } from "./process-config-entities";
@ -37,24 +37,19 @@ function compareEntityState(
return oldState !== newState;
}
function compareEntityEntryOptions(
function compareEntityDisplayEntry(
oldHass: HomeAssistant,
newHass: HomeAssistant,
entityId: string
) {
const oldEntry = oldHass.entities[entityId] as
| EntityRegistryEntry
| EntityRegistryDisplayEntry
| undefined;
const newEntry = newHass.entities[entityId] as
| EntityRegistryEntry
| EntityRegistryDisplayEntry
| undefined;
return (
oldEntry?.options?.sensor?.display_precision !==
newEntry?.options?.sensor?.display_precision ||
oldEntry?.options?.sensor?.suggested_display_precision !==
newEntry?.options?.sensor?.suggested_display_precision
);
return oldEntry?.display_precision !== newEntry?.display_precision;
}
// Check if config or Entity changed
@ -71,7 +66,7 @@ export function hasConfigOrEntityChanged(
return (
compareEntityState(oldHass, newHass, element._config!.entity) ||
compareEntityEntryOptions(oldHass, newHass, element._config!.entity)
compareEntityDisplayEntry(oldHass, newHass, element._config!.entity)
);
}
@ -96,7 +91,7 @@ export function hasConfigOrEntitiesChanged(
return (
compareEntityState(oldHass, newHass, entity.entity) ||
compareEntityEntryOptions(oldHass, newHass, entity.entity)
compareEntityDisplayEntry(oldHass, newHass, entity.entity)
);
});
}

View File

@ -69,6 +69,33 @@ describe("formatNumber", () => {
);
});
it("Formats number with fraction digits options if number format is none", () => {
assert.strictEqual(
formatNumber(
1234.5,
{ ...defaultLocale, number_format: NumberFormat.none },
{
minimumFractionDigits: 2,
maximumFractionDigits: 2,
}
),
"1234.50"
);
});
it("Do not formats number with others options if number format is none", () => {
assert.strictEqual(
formatNumber(
1234.5,
{ ...defaultLocale, number_format: NumberFormat.none },
{
useGrouping: true,
}
),
"1234.5"
);
});
it("Sets only the maximumFractionDigits format option when none are provided for a number value", () => {
assert.deepEqual(getDefaultFormatOptions(1234.5), {
maximumFractionDigits: 2,