/
personalAPIKeysLogic.ts
43 lines (41 loc) 路 1.66 KB
/
personalAPIKeysLogic.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
import { kea } from 'kea'
import { toast } from 'react-toastify'
import api from 'lib/api'
import { PersonalAPIKeyType } from '~/types'
import { personalAPIKeysLogicType } from './personalAPIKeysLogicType'
import { copyToClipboard } from 'lib/utils'
export const personalAPIKeysLogic = kea<personalAPIKeysLogicType>({
path: ['lib', 'components', 'PersonalAPIKeys', 'personalAPIKeysLogic'],
loaders: ({ values }) => ({
keys: [
[] as PersonalAPIKeyType[],
{
loadKeys: async () => {
const response: PersonalAPIKeyType[] = await api.get('api/personal_api_keys/')
return response
},
createKey: async (label: string) => {
const newKey: PersonalAPIKeyType = await api.create('api/personal_api_keys/', {
label,
})
return [newKey, ...values.keys]
},
deleteKey: async (key: PersonalAPIKeyType) => {
await api.delete(`api/personal_api_keys/${key.id}/`)
return (values.keys as PersonalAPIKeyType[]).filter((filteredKey) => filteredKey.id != key.id)
},
},
],
}),
listeners: () => ({
createKeySuccess: ({ keys }: { keys: PersonalAPIKeyType[] }) => {
keys[0]?.value && copyToClipboard(keys[0].value, 'personal API key value')
},
deleteKeySuccess: ({}: { keys: PersonalAPIKeyType[] }) => {
toast.success(`Personal API key deleted.`)
},
}),
events: ({ actions }) => ({
afterMount: [actions.loadKeys],
}),
})