Completed
Push — main ( 2a7c24...5182f9 )
by Alejandro
14s queued 10s
created

src/domains/reducers/domainsList.ts   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 50
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 1
eloc 41
mnd 1
bc 1
fnc 0
dl 0
loc 50
ccs 14
cts 14
cp 1
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { Action, Dispatch } from 'redux';
2
import { ShlinkDomain } from '../../utils/services/types';
3
import { buildReducer } from '../../utils/helpers/redux';
4
import { ShlinkApiClientBuilder } from '../../utils/services/ShlinkApiClientBuilder';
5
import { GetState } from '../../container/types';
6
7
/* eslint-disable padding-line-between-statements */
8 1
export const LIST_DOMAINS_START = 'shlink/domainsList/LIST_DOMAINS_START';
9 1
export const LIST_DOMAINS_ERROR = 'shlink/domainsList/LIST_DOMAINS_ERROR';
10 1
export const LIST_DOMAINS = 'shlink/domainsList/LIST_DOMAINS';
11
/* eslint-enable padding-line-between-statements */
12
13
export interface DomainsList {
14
  domains: ShlinkDomain[];
15
  loading: boolean;
16
  error: boolean;
17
}
18
19
export interface ListDomainsAction extends Action<string> {
20
  domains: ShlinkDomain[];
21
}
22
23 1
const initialState: DomainsList = {
24
  domains: [],
25
  loading: false,
26
  error: false,
27
};
28
29
export default buildReducer<DomainsList, ListDomainsAction>({
30 1
  [LIST_DOMAINS_START]: () => ({ ...initialState, loading: true }),
31 1
  [LIST_DOMAINS_ERROR]: () => ({ ...initialState, error: true }),
32 1
  [LIST_DOMAINS]: (_, { domains }) => ({ ...initialState, domains }),
33
}, initialState);
34
35 2
export const listDomains = (buildShlinkApiClient: ShlinkApiClientBuilder) => () => async (
36
  dispatch: Dispatch,
37
  getState: GetState,
38
) => {
39 2
  dispatch({ type: LIST_DOMAINS_START });
40 2
  const { listDomains } = buildShlinkApiClient(getState);
41
42 2
  try {
43 2
    const domains = await listDomains();
44
45 1
    dispatch<ListDomainsAction>({ type: LIST_DOMAINS, domains });
46
  } catch (e) {
47 1
    dispatch({ type: LIST_DOMAINS_ERROR });
48
  }
49
};
50