@sv-use/core
Version:
A collection of Svelte 5 utilities.
56 lines (55 loc) • 1.74 kB
JavaScript
import { onDestroy } from 'svelte';
import { handleEventListener } from '../handle-event-listener/index.svelte.js';
import { noop } from '../__internal__/utils.svelte.js';
/**
* Retrieves information about the battery.
* @see https://svelte-librarian.github.io/sv-use/docs/core/get-battery
*/
export function getBattery(options = {}) {
const { autoCleanup = true } = options;
const events = ['chargingchange', 'chargingtimechange', 'dischargingtimechange', 'levelchange'];
let battery;
let cleanup = noop;
const _isSupported = $derived.by(() => navigator && 'getBattery' in navigator);
let _charging = $state(0);
let _chargingTime = $state(0);
let _dischargingTime = $state(0);
let _level = $state(1);
if (_isSupported) {
navigator.getBattery().then((_battery) => {
battery = _battery;
updateBatteryInfo.call(battery);
cleanup = handleEventListener(battery, events, updateBatteryInfo, {
autoCleanup,
passive: true
});
});
}
if (autoCleanup) {
onDestroy(() => cleanup());
}
function updateBatteryInfo() {
_charging = this.charging || 0;
_chargingTime = this.chargingTime || 0;
_dischargingTime = this.dischargingTime || 0;
_level = this.level || 1;
}
return {
get isSupported() {
return _isSupported;
},
get charging() {
return _charging;
},
get chargingTime() {
return _chargingTime;
},
get dischargingTime() {
return _dischargingTime;
},
get level() {
return _level;
},
cleanup
};
}