@@ -20,93 +20,112 @@ import {
20
20
import { forkProject } from "../services" ;
21
21
22
22
import styles from "./Colab.module.sass" ;
23
+ import { AddIcon } from "@icons/Add" ;
24
+ import { SolidUserIcon } from "@icons/SolidUser" ;
23
25
24
26
export function Colab ( ) {
27
+ const [ addMenu , setAddMenu ] = createSignal ( false ) ;
28
+
25
29
return (
26
30
< Dialog open = { isColabOpen ( ) } onOpenChange = { setIsColabOpen } >
27
31
< Dialog . Portal >
28
32
< Dialog . Overlay class = { styles . overlay } />
29
33
< Dialog . Content class = { styles . content } >
30
34
< h2 class = { styles . title } > Live Collaboration</ h2 >
35
+ < ColabButtons />
31
36
32
37
< div class = { styles . container } >
33
- < div >
34
- < h3 class = { styles . subtitle } > Room settings </ h3 >
35
-
36
- < ColabPublicPassword />
37
- < ColabButtons / >
38
- </ div >
38
+ < Show when = { isProjectOwner ( ) } >
39
+ < div >
40
+ < h3 class = { styles . subtitle } > Room settings </ h3 >
41
+ < ColabPublicPassword />
42
+ </ div >
43
+ </ Show >
39
44
40
45
< div >
41
- < h3 class = { styles . subtitle } > Members</ h3 >
42
-
43
- < TextField
44
- beforeIcon = { < BrandsGithubIcon /> }
45
- placeholder = "Username"
46
- />
47
-
48
- < ul class = { styles . user_list } >
49
- < For each = { Object . entries ( projectInfo . users ) } >
50
- { ( [ user_id , [ username , access ] ] ) => (
51
- < li class = { styles . member } >
52
- < span class = { styles . member_name } >
53
- { username }
54
- </ span >
55
-
56
- < SelectField
57
- value = { access }
58
- disabled = { ! isProjectOwner ( ) }
59
- options = { [ AccessLevel . Editor , AccessLevel . ReadOnly ] }
60
- onValueChange = { ( access ) => {
61
- sendMessage ( ClientMessageKind . PermitAccess , {
62
- user_id,
63
- access,
64
- } ) ;
65
- } }
66
- />
67
- </ li >
68
- ) }
69
- </ For >
70
- </ ul >
71
-
72
- < h3 class = { styles . subtitle } > Pending Requests</ h3 >
73
- < ul class = { styles . user_list } >
74
- < For each = { Object . entries ( projectInfo . requests ) } >
75
- { ( [ user , name ] ) => (
76
- < li class = { styles . member } >
77
- < span class = { styles . member_name } >
78
- { name }
79
- </ span >
80
-
81
- < ul class = { styles . button_group } >
82
- < button
83
- class = { styles . success }
84
- onClick = { ( ) => {
85
- setProjectInfo ( "users" , user , [
86
- name ,
87
- AccessLevel . ReadOnly ,
88
- ] ) ;
46
+ < Show when = { ! addMenu ( ) } >
47
+ < div class = { styles . title_button_container } >
48
+ < h3 class = { styles . subtitle } > Members</ h3 >
49
+ < Show when = { isProjectOwner ( ) } >
50
+ < button onClick = { ( ) => setAddMenu ( true ) } >
51
+ < AddIcon />
52
+ </ button >
53
+ </ Show >
54
+ </ div >
55
+
56
+ < ul class = { styles . user_list } >
57
+ < For each = { Object . entries ( projectInfo . users ) } >
58
+ { ( [ user_id , [ username , access ] ] ) => (
59
+ < li class = { styles . member } >
60
+ < span class = { styles . member_name } > { username } </ span >
61
+
62
+ < SelectField
63
+ value = { access }
64
+ disabled = { ! isProjectOwner ( ) }
65
+ options = { [ AccessLevel . Editor , AccessLevel . ReadOnly ] }
66
+ onValueChange = { ( access ) => {
89
67
sendMessage ( ClientMessageKind . PermitAccess , {
90
- user_id : user ,
91
- access : AccessLevel . ReadOnly ,
68
+ user_id,
69
+ access,
92
70
} ) ;
93
71
} }
94
- >
95
- Allow
96
- </ button >
97
- < button
98
- class = { styles . error }
99
- onClick = { ( ) => {
100
- setProjectInfo ( "requests" , user , undefined ) ;
101
- } }
102
- >
103
- Kick
104
- </ button >
105
- </ ul >
106
- </ li >
107
- ) }
108
- </ For >
109
- </ ul >
72
+ />
73
+ </ li >
74
+ ) }
75
+ </ For >
76
+ </ ul >
77
+ </ Show >
78
+
79
+ < Show when = { addMenu ( ) } >
80
+ < div class = { styles . title_button_container } >
81
+ < h3 class = { styles . subtitle } > Add</ h3 >
82
+ < Show when = { isProjectOwner ( ) } >
83
+ < button onClick = { ( ) => setAddMenu ( false ) } >
84
+ < SolidUserIcon />
85
+ </ button >
86
+ </ Show >
87
+ </ div >
88
+
89
+ < TextField
90
+ beforeIcon = { < BrandsGithubIcon /> }
91
+ placeholder = "Username"
92
+ />
93
+ < ul class = { styles . user_list } >
94
+ < For each = { Object . entries ( projectInfo . requests ) } >
95
+ { ( [ user , name ] ) => (
96
+ < li class = { styles . member } >
97
+ < span class = { styles . member_name } > { name } </ span >
98
+
99
+ < ul class = { styles . button_group } >
100
+ < button
101
+ class = { styles . success }
102
+ onClick = { ( ) => {
103
+ setProjectInfo ( "users" , user , [
104
+ name ,
105
+ AccessLevel . ReadOnly ,
106
+ ] ) ;
107
+ sendMessage ( ClientMessageKind . PermitAccess , {
108
+ user_id : user ,
109
+ access : AccessLevel . ReadOnly ,
110
+ } ) ;
111
+ } }
112
+ >
113
+ Allow
114
+ </ button >
115
+ < button
116
+ class = { styles . error }
117
+ onClick = { ( ) => {
118
+ setProjectInfo ( "requests" , user , undefined ) ;
119
+ } }
120
+ >
121
+ Kick
122
+ </ button >
123
+ </ ul >
124
+ </ li >
125
+ ) }
126
+ </ For >
127
+ </ ul >
128
+ </ Show >
110
129
</ div >
111
130
</ div >
112
131
</ Dialog . Content >
@@ -123,7 +142,7 @@ function ColabPublicPassword() {
123
142
createEffect ( ( ) => {
124
143
let pass = password ( ) ;
125
144
126
- if ( first_time && ( first_time = false , true ) ) return ;
145
+ if ( first_time && ( ( first_time = false ) , true ) ) return ;
127
146
128
147
if ( debounce ) clearTimeout ( debounce ) ;
129
148
@@ -170,15 +189,9 @@ function ColabButtons() {
170
189
171
190
return (
172
191
< div class = { styles . buttons_container } >
173
- < button onClick = { ( ) => copyPath ( ) } >
174
- Copy colab link
175
- </ button >
176
- < button onClick = { ( ) => copyPath ( "/fork" ) } >
177
- Copy fork link
178
- </ button >
179
- < button onClick = { ( ) => forkProject ( projectInfo . id ) } >
180
- Fork
181
- </ button >
192
+ < button onClick = { ( ) => copyPath ( ) } > Copy colab link</ button >
193
+ < button onClick = { ( ) => copyPath ( "/fork" ) } > Copy fork link</ button >
194
+ < button onClick = { ( ) => forkProject ( projectInfo . id ) } > Fork</ button >
182
195
</ div >
183
196
) ;
184
197
}
0 commit comments