const settingsService = require('../../store/settings-store.js') const themeService = require('../../store/theme-store.js') const bootloaderService = require('../../features/bootloader/service.js') const transport = require('../../transport/ble-core.js') const { createPageToast } = require('../../utils/page-toast.js') const { createToolInitialState, toolNavigation, toolPageHandlers } = require('../../features/tools/index.js') const { getSettingsPageState } = require('../../features/settings/view-model.js') Page({ data: { ...getSettingsPageState(), ...createToolInitialState(), activeSettingsTitle: '', activeSettingsView: '' }, onLoad() { this.pageToast = createPageToast(this, this.data) this.crcFileBytes = null settingsService.init() themeService.init() bootloaderService.init() this.unsubscribeSettings = settingsService.subscribe((settingsState) => { this.setData(getSettingsPageState(settingsState, themeService.getState())) }) this.unsubscribeTheme = themeService.subscribe((themeState) => { this.setData(getSettingsPageState(settingsService.getState(), themeState)) }) this.unsubscribeTransport = transport.subscribe((transportState) => { this.setData(getSettingsPageState( settingsService.getState(), themeService.getState(), transportState, bootloaderService.getState() )) }) this.unsubscribeBootloader = bootloaderService.subscribe((bootloaderState) => { this.setData(getSettingsPageState( settingsService.getState(), themeService.getState(), transport.getState(), bootloaderState )) }) }, onTabItemTap() { this.backToSettingsHome() }, onShow() { if (this.pageToast) { this.pageToast.setActive(true) } this.setData(getSettingsPageState()) }, onHide() { if (this.pageToast) { this.pageToast.setActive(false) } }, onUnload() { if (this.pageToast) { this.pageToast.destroy() this.pageToast = null } if (this.unsubscribeSettings) { this.unsubscribeSettings() this.unsubscribeSettings = null } if (this.unsubscribeTheme) { this.unsubscribeTheme() this.unsubscribeTheme = null } if (this.unsubscribeTransport) { this.unsubscribeTransport() this.unsubscribeTransport = null } if (this.unsubscribeBootloader) { this.unsubscribeBootloader() this.unsubscribeBootloader = null } }, onNightModeEnabledChange(event) { settingsService.setNightModeEnabled(!!event.detail.value) }, onNightModeFollowSystemChange(event) { settingsService.setNightModeFollowSystem(!!event.detail.value) }, onModbusSlaveAddressBlur(event) { settingsService.setModbusSlaveAddress(event.detail.value) }, onProtocolModeChange(event) { const option = this.data.protocolOptions[Number(event.detail.value)] if (!option) return settingsService.setProtocolMode(option.key) }, onParameterAutoPollChange(event) { settingsService.setParameterAutoPollEnabled(!!event.detail.value) }, onParameterPollIntervalBlur(event) { settingsService.setParameterPollInterval(event.detail.value) }, onParameterMaxPacketLengthBlur(event) { settingsService.setParameterMaxPacketLength(event.detail.value) }, openToolEntry(event) { const view = event.currentTarget.dataset.view if (!toolNavigation.isToolView(view)) return if (this.pageToast) this.pageToast.clear() this.setData({ activeSettingsTitle: toolNavigation.getToolTitle(view), activeSettingsView: view }) }, backToSettingsHome() { if (this.pageToast) this.pageToast.clear() this.setData({ activeSettingsTitle: '', activeSettingsView: '' }) }, chooseFirmwareFile() { if (this.data.isBootloaderBusy) return bootloaderService.chooseFirmwareFile('message') }, startFirmwareUpgrade() { if (!this.data.connectedDevice || !this.data.isFirmwareReady || this.data.isBootloaderBusy) return bootloaderService.startUpgrade() }, readProgramChecksum() { if (!this.data.connectedDevice || this.data.isBootloaderBusy) return bootloaderService.readProgramChecksum() }, handshakeBootloader() { if (!this.data.connectedDevice || this.data.isBootloaderBusy) return bootloaderService.sendHandshakeKeepAlive() }, exitBootloader() { if (!this.data.connectedDevice || this.data.isBootloaderBusy) return bootloaderService.exitBootloader() }, ...toolPageHandlers })