worklog-reminder

Форк
0
84 строки · 2.4 Кб
1
import { createSlice } from '@reduxjs/toolkit';
2
import AbstractStorage from '../../../Domain/AbstractStorage';
3
import NotificationTask from '../../Task/Renderer/NotificationTask';
4
import ReloadIssuesTask from '../../Task/Renderer/ReloadIssuesTask';
5

6
const settingsSlice = createSlice({
7
  name: 'settings',
8
  initialState: {
9
    host: '',
10
    username: '',
11
    token: '',
12
    notificationInterval: AbstractStorage.DEFAULT_NOTIFICATION_INTERVAL,
13
    updateInterval: AbstractStorage.DEFAULT_UPDATE_INTERVAL,
14
    isOnboardingPassed: false,
15
  },
16
  reducers: {
17
    setHost: (state, action) => { state.host = action.payload; },
18
    setUsername: (state, action) => { state.username = action.payload; },
19
    setToken: (state, action) => { state.token = action.payload; },
20
    setNotificationInterval: (state, action) => {
21
      state.notificationInterval = action.payload;
22
      new NotificationTask().restart(state.notificationInterval);
23
    },
24
    setUpdateInterval: (state, action) => {
25
      state.updateInterval = action.payload;
26
      new ReloadIssuesTask().restart(state.updateInterval);
27
    },
28
    setOnboardingPassed: (state, action) => {
29
      state.isOnboardingPassed = action.payload;
30
    },
31
  },
32
});
33

34
const selectSettings = (state) => state.settings;
35
const selectHost = (state) => state.settings.host;
36
const selectUsername = (state) => state.settings.username;
37
const selectToken = (state) => state.settings.token;
38
const selectNotificationInterval = (state) => state.settings.notificationInterval;
39
const selectUpdateInterval = (state) => state.settings.updateInterval;
40
const selectIsOnboardingPassed = (state) => state.settings.isOnboardingPassed;
41

42
const selectIsSettingsFilled = (state) => {
43
  const {
44
    host,
45
    username,
46
    token,
47
    updateInterval,
48
    notificationInterval,
49
  } = state.settings;
50

51
  return host && username && token && updateInterval && notificationInterval;
52
};
53

54
const {
55
  setHost,
56
  setUsername,
57
  setToken,
58
  setNotificationInterval,
59
  setUpdateInterval,
60
  setOnboardingPassed,
61
} = settingsSlice.actions;
62

63
const settingsReducer = settingsSlice.reducer;
64

65
export {
66
  settingsReducer,
67
  settingsSlice,
68
  // Selectors
69
  selectSettings,
70
  selectHost,
71
  selectUsername,
72
  selectToken,
73
  selectNotificationInterval,
74
  selectUpdateInterval,
75
  selectIsSettingsFilled,
76
  selectIsOnboardingPassed,
77
  // Reducers
78
  setHost,
79
  setUsername,
80
  setToken,
81
  setNotificationInterval,
82
  setUpdateInterval,
83
  setOnboardingPassed,
84
};
85

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.