worklog-reminder
84 строки · 2.4 Кб
1import { createSlice } from '@reduxjs/toolkit';2import AbstractStorage from '../../../Domain/AbstractStorage';3import NotificationTask from '../../Task/Renderer/NotificationTask';4import ReloadIssuesTask from '../../Task/Renderer/ReloadIssuesTask';5
6const settingsSlice = createSlice({7name: 'settings',8initialState: {9host: '',10username: '',11token: '',12notificationInterval: AbstractStorage.DEFAULT_NOTIFICATION_INTERVAL,13updateInterval: AbstractStorage.DEFAULT_UPDATE_INTERVAL,14isOnboardingPassed: false,15},16reducers: {17setHost: (state, action) => { state.host = action.payload; },18setUsername: (state, action) => { state.username = action.payload; },19setToken: (state, action) => { state.token = action.payload; },20setNotificationInterval: (state, action) => {21state.notificationInterval = action.payload;22new NotificationTask().restart(state.notificationInterval);23},24setUpdateInterval: (state, action) => {25state.updateInterval = action.payload;26new ReloadIssuesTask().restart(state.updateInterval);27},28setOnboardingPassed: (state, action) => {29state.isOnboardingPassed = action.payload;30},31},32});33
34const selectSettings = (state) => state.settings;35const selectHost = (state) => state.settings.host;36const selectUsername = (state) => state.settings.username;37const selectToken = (state) => state.settings.token;38const selectNotificationInterval = (state) => state.settings.notificationInterval;39const selectUpdateInterval = (state) => state.settings.updateInterval;40const selectIsOnboardingPassed = (state) => state.settings.isOnboardingPassed;41
42const selectIsSettingsFilled = (state) => {43const {44host,45username,46token,47updateInterval,48notificationInterval,49} = state.settings;50
51return host && username && token && updateInterval && notificationInterval;52};53
54const {55setHost,56setUsername,57setToken,58setNotificationInterval,59setUpdateInterval,60setOnboardingPassed,61} = settingsSlice.actions;62
63const settingsReducer = settingsSlice.reducer;64
65export {66settingsReducer,67settingsSlice,68// Selectors69selectSettings,70selectHost,71selectUsername,72selectToken,73selectNotificationInterval,74selectUpdateInterval,75selectIsSettingsFilled,76selectIsOnboardingPassed,77// Reducers78setHost,79setUsername,80setToken,81setNotificationInterval,82setUpdateInterval,83setOnboardingPassed,84};85