/* * Copyright (C) 2022 Kristóf Marussy * * This file is part of Sophie. * * Sophie is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * SPDX-License-Identifier: AGPL-3.0-only */ import { defineServiceModel, ServiceAction } from '@sophie/shared'; import { Instance } from 'mobx-state-tree'; import getEnv from '../env/getEnv'; import ServiceSettings from './ServiceSettings'; const Service = defineServiceModel(ServiceSettings).actions((self) => ({ dispatch(serviceAction: ServiceAction): void { getEnv(self).dispatchMainAction({ action: 'dispatch-service-action', serviceId: self.id, serviceAction, }); }, goBack(): void { this.dispatch({ action: 'back', }); }, goForward(): void { this.dispatch({ action: 'forward', }); }, reload(ignoreCache = false): void { this.dispatch({ action: 'reload', ignoreCache, }); }, stop(): void { this.dispatch({ action: 'stop', }); }, go(url: string): void { this.dispatch({ action: 'go', url, }); }, goHome(): void { this.dispatch({ action: 'go-home', }); }, })); /* eslint-disable-next-line @typescript-eslint/no-redeclare -- Intentionally naming the type the same as the store definition. */ interface Service extends Instance {} export default Service;