Fix fetch translation (#2909)

This commit is contained in:
Paulus Schoutsen 2019-03-11 16:26:59 -07:00 committed by GitHub
parent c026c65d53
commit 9a00c65e3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 53 additions and 22 deletions

View File

@ -1,38 +1,36 @@
import { HomeAssistant } from "../types";
export interface FrontendUserData {
language: string;
declare global {
// tslint:disable-next-line
interface FrontendUserData {}
}
export const fetchFrontendUserData = async (
export type ValidUserDataKey = keyof FrontendUserData;
export const fetchFrontendUserData = async <
UserDataKey extends ValidUserDataKey
>(
hass: HomeAssistant,
key: string
): Promise<FrontendUserData> => {
const result = await hass.callWS<{ value: FrontendUserData }>({
key: UserDataKey
): Promise<FrontendUserData[UserDataKey] | null> => {
const result = await hass.callWS<{
value: FrontendUserData[UserDataKey] | null;
}>({
type: "frontend/get_user_data",
key,
});
return result.value;
};
export const saveFrontendUserData = async (
export const saveFrontendUserData = async <
UserDataKey extends ValidUserDataKey
>(
hass: HomeAssistant,
key: string,
value: FrontendUserData
key: UserDataKey,
value: FrontendUserData[UserDataKey]
): Promise<void> =>
hass.callWS<void>({
type: "frontend/set_user_data",
key,
value,
});
export const getHassTranslations = async (
hass: HomeAssistant,
language: string
): Promise<{}> => {
const result = await hass.callWS<{ resources: {} }>({
type: "frontend/get_translations",
language,
});
return result.resources;
};

31
src/data/translation.ts Normal file
View File

@ -0,0 +1,31 @@
import { HomeAssistant } from "../types";
import { fetchFrontendUserData, saveFrontendUserData } from "./frontend";
export interface FrontendTranslationData {
language: string;
}
declare global {
interface FrontendUserData {
language: FrontendTranslationData;
}
}
export const fetchTranslationPreferences = (hass: HomeAssistant) =>
fetchFrontendUserData(hass, "language");
export const saveTranslationPreferences = (
hass: HomeAssistant,
data: FrontendTranslationData
) => saveFrontendUserData(hass, "language", data);
export const getHassTranslations = async (
hass: HomeAssistant,
language: string
): Promise<{}> => {
const result = await hass.callWS<{ resources: {} }>({
type: "frontend/get_translations",
language,
});
return result.resources;
};

View File

@ -9,8 +9,9 @@ import { HassBaseEl } from "./hass-base-mixin";
import { computeLocalize } from "../../common/translations/localize";
import { computeRTL } from "../../common/util/compute_rtl";
import { HomeAssistant } from "../../types";
import { saveFrontendUserData, getHassTranslations } from "../../data/frontend";
import { saveFrontendUserData } from "../../data/frontend";
import { storeState } from "../../util/ha-pref-storage";
import { getHassTranslations } from "../../data/translation";
/*
* superClass needs to contain `this.hass` and `this._updateHass`.

View File

@ -43,7 +43,8 @@ function findAvailableLanguage(language: string) {
* Get user selected language from backend
*/
export async function getUserLanguage(hass: HomeAssistant) {
const { language } = await fetchFrontendUserData(hass, "language");
const result = await fetchFrontendUserData(hass, "language");
const language = result ? result.language : null;
if (language) {
const availableLanguage = findAvailableLanguage(language);
if (availableLanguage) {