AdGuardHome/client/src/reducers/dashboard.js

176 lines
5.1 KiB
JavaScript
Raw Normal View History

2020-08-19 16:23:05 +01:00
import { handleActions } from 'redux-actions';
import * as actions from '../actions';
import { areEqualVersions } from '../helpers/version';
import { STANDARD_DNS_PORT, STANDARD_WEB_PORT } from '../helpers/constants';
const dashboard = handleActions(
{
[actions.setDnsRunningStatus]: (state, { payload }) => (
{
...state,
isCoreRunning: payload,
}
),
[actions.dnsStatusRequest]: (state) => ({
...state,
processing: true,
}),
[actions.dnsStatusFailure]: (state) => ({
...state,
processing: false,
}),
[actions.dnsStatusSuccess]: (state, { payload }) => {
const {
version,
dns_port: dnsPort,
dns_addresses: dnsAddresses,
protection_enabled: protectionEnabled,
http_port: httpPort,
language,
} = payload;
const newState = {
...state,
isCoreRunning: true,
processing: false,
dnsVersion: version,
dnsPort,
dnsAddresses,
protectionEnabled,
language,
httpPort,
};
return newState;
},
[actions.getVersionRequest]: (state) => ({
...state,
processingVersion: true,
}),
[actions.getVersionFailure]: (state) => ({
...state,
processingVersion: false,
}),
[actions.getVersionSuccess]: (state, { payload }) => {
const currentVersion = state.dnsVersion === 'undefined' ? 0 : state.dnsVersion;
if (!payload.disabled && !areEqualVersions(currentVersion, payload.new_version)) {
const {
announcement_url: announcementUrl,
new_version: newVersion,
can_autoupdate: canAutoUpdate,
} = payload;
const newState = {
...state,
announcementUrl,
newVersion,
canAutoUpdate,
isUpdateAvailable: true,
processingVersion: false,
checkUpdateFlag: !payload.disabled,
};
return newState;
}
return {
...state,
processingVersion: false,
checkUpdateFlag: !payload.disabled,
};
},
[actions.getUpdateRequest]: (state) => ({
...state,
processingUpdate: true,
}),
[actions.getUpdateFailure]: (state) => ({
...state,
processingUpdate: false,
}),
[actions.getUpdateSuccess]: (state) => {
const newState = {
...state,
processingUpdate: false,
};
return newState;
},
[actions.toggleProtectionRequest]: (state) => ({
...state,
processingProtection: true,
}),
[actions.toggleProtectionFailure]: (state) => ({
...state,
processingProtection: false,
}),
[actions.toggleProtectionSuccess]: (state) => {
const newState = {
...state,
protectionEnabled: !state.protectionEnabled,
processingProtection: false,
};
return newState;
},
[actions.getLanguageSuccess]: (state, { payload }) => {
const newState = {
...state,
language: payload,
};
return newState;
},
[actions.getClientsRequest]: (state) => ({
...state,
processingClients: true,
}),
[actions.getClientsFailure]: (state) => ({
...state,
processingClients: false,
}),
[actions.getClientsSuccess]: (state, { payload }) => {
const newState = {
...state,
...payload,
processingClients: false,
};
return newState;
},
[actions.getProfileRequest]: (state) => ({
...state,
processingProfile: true,
}),
[actions.getProfileFailure]: (state) => ({
...state,
processingProfile: false,
}),
[actions.getProfileSuccess]: (state, { payload }) => ({
...state,
name: payload.name,
processingProfile: false,
}),
},
{
processing: true,
isCoreRunning: true,
processingVersion: true,
processingClients: true,
processingUpdate: false,
processingProfile: true,
protectionEnabled: false,
processingProtection: false,
httpPort: STANDARD_WEB_PORT,
dnsPort: STANDARD_DNS_PORT,
dnsAddresses: [],
dnsVersion: '',
clients: [],
autoClients: [],
supportedTags: [],
name: '',
checkUpdateFlag: false,
},
);
export default dashboard;