evcc-io/assets/js/settings.js
Michael Geers 03e08fe6f3
Remember and restore energy flow details opened state (#5902)
* show energyflow details on large screens

* remember last open/close state of details
2023-01-31 15:52:54 +01:00

49 lines
1.2 KiB
JavaScript

import { reactive, watch } from "vue";
const SETTINGS_LOCALE = "settings_locale";
const SETTINGS_THEME = "settings_theme";
const SETTINGS_UNIT = "settings_unit";
const SETTINGS_ENERGYFLOW_DETAILS = "settings_energyflow_details";
function read(key) {
return window.localStorage[key];
}
function save(key) {
return (value) => {
try {
if (value) {
window.localStorage[key] = value;
} else {
delete window.localStorage[key];
}
} catch (e) {
console.error("unable to write to localstorage", { key, value });
}
};
}
function readBool(key) {
return read(key) === "true";
}
function saveBool(key) {
return (value) => {
save(key)(value ? "true" : "false");
};
}
const settings = reactive({
telemetry: null,
locale: read(SETTINGS_LOCALE),
theme: read(SETTINGS_THEME),
unit: read(SETTINGS_UNIT),
energyflowDetails: readBool(SETTINGS_ENERGYFLOW_DETAILS),
});
watch(() => settings.locale, save(SETTINGS_LOCALE));
watch(() => settings.theme, save(SETTINGS_THEME));
watch(() => settings.unit, save(SETTINGS_UNIT));
watch(() => settings.energyflowDetails, saveBool(SETTINGS_ENERGYFLOW_DETAILS));
export default settings;