-
Notifications
You must be signed in to change notification settings - Fork 90
/
Copy pathusers.slice.ts
53 lines (50 loc) · 1.9 KB
/
users.slice.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { createSlice, type EntityState, type PayloadAction } from '@reduxjs/toolkit'
import { keyFromCertificate, parseCertificate, parseCertificationRequest } from '@quiet/identity'
import { StoreKeys } from '../store.keys'
import { certificatesAdapter } from './users.adapter'
import { SendCsrsResponse, type SendCertificatesResponse } from '@quiet/types'
export class UsersState {
public certificates: EntityState<any> = certificatesAdapter.getInitialState()
public csrs: EntityState<any> = certificatesAdapter.getInitialState()
}
export const usersSlice = createSlice({
initialState: { ...new UsersState() },
name: StoreKeys.Users,
reducers: {
// Utility action for testing purposes
storeUserCertificate: (state, action: PayloadAction<{ certificate: string }>) => {
certificatesAdapter.addOne(state.certificates, parseCertificate(action.payload.certificate))
},
responseSendCertificates: (state, action: PayloadAction<SendCertificatesResponse>) => {
certificatesAdapter.setAll(
state.certificates,
Object.values(action.payload.certificates).map(item => {
if (!item) {
return
}
return parseCertificate(item)
})
)
},
storeCsrs: (state, action: PayloadAction<SendCsrsResponse>) => {
certificatesAdapter.upsertMany(
state.csrs,
Object.values(action.payload.csrs).map(item => {
if (!item) {
return
}
return parseCertificationRequest(item)
})
)
},
// Utility action for testing purposes
test_remove_user_certificate: (state, action: PayloadAction<{ certificate: string }>) => {
certificatesAdapter.removeOne(
state.certificates,
keyFromCertificate(parseCertificate(action.payload.certificate))
)
},
},
})
export const usersActions = usersSlice.actions
export const usersReducer = usersSlice.reducer