@@ -5,64 +5,27 @@ import type {
5
5
} from '~~/shared/schemas/setting' ;
6
6
import type { User } from '~~/server/db/schema' ;
7
7
8
- type AddOrRemoveMember =
9
- | z . infer < typeof addMemberSchema >
10
- | z . infer < typeof removeMemberSchema > ;
8
+ type CreateMember = z . infer < typeof addMemberSchema > ;
9
+ type RemoveMember = z . infer < typeof removeMemberSchema > ;
11
10
12
- const useMembersState = ( ) => useState < User [ ] > ( 'settings-members' , ( ) => [ ] ) ;
13
- const useMembersFetchedState = ( ) =>
14
- useState < boolean > ( 'settings-members-first-fetch' , ( ) => false ) ;
15
-
16
- export async function useMembers ( ) {
17
- const members = useMembersState ( ) ;
18
- const membersFetched = useMembersFetchedState ( ) ;
11
+ export function useMembersState ( ) {
12
+ return useObjectState ( 'settings-members' ) ;
13
+ }
19
14
20
- const membersApiCall = useFetch < User [ ] > ( '/api/settings/members' , {
21
- immediate : false ,
22
- default : ( ) => [ ] ,
15
+ export async function useMembersRepository ( ) {
16
+ return useObjectRepository <
17
+ User [ ] ,
18
+ never ,
19
+ never ,
20
+ never ,
21
+ CreateMember ,
22
+ never ,
23
+ RemoveMember
24
+ > ( {
25
+ key : 'settings-members' ,
26
+ fetchURL : '/api/settings/members' ,
27
+ postURL : '/api/settings/members' ,
28
+ deleteURL : '/api/settings/members' ,
29
+ initFn : ( ) => [ ] ,
23
30
} ) ;
24
-
25
- const setMembers = ( m : User [ ] ) => {
26
- members . value = [ ...m ] ;
27
- } ;
28
- watch ( membersApiCall . data , setMembers ) ;
29
-
30
- if ( ! membersFetched . value ) {
31
- await membersApiCall
32
- . execute ( )
33
- . then ( ( ) => setMembers ( membersApiCall . data . value ) ) ;
34
- membersFetched . value = true ;
35
- }
36
-
37
- const refereshMembers = membersApiCall . refresh ;
38
-
39
- const isSubmitting = ref ( false ) ;
40
-
41
- const makeAddOrRemoveMember =
42
- ( method : 'POST' | 'DELETE' ) => async ( body : AddOrRemoveMember ) => {
43
- try {
44
- isSubmitting . value = true ;
45
- await $fetch < User > ( '/api/settings/members' , {
46
- method,
47
- body,
48
- } ) ;
49
- refereshMembers ( ) ;
50
- return true ;
51
- } catch ( e ) {
52
- console . error ( e ) ;
53
- return false ;
54
- } finally {
55
- isSubmitting . value = false ;
56
- }
57
- } ;
58
- const addMember = makeAddOrRemoveMember ( 'POST' ) ;
59
- const removeMember = makeAddOrRemoveMember ( 'DELETE' ) ;
60
-
61
- return {
62
- members,
63
- isSubmitting,
64
-
65
- addMember,
66
- removeMember,
67
- } ;
68
31
}
0 commit comments