@@ -4,6 +4,14 @@ import { useState, useRef, useMemo } from "react"
4
4
import { Button } from "@/components/ui/button"
5
5
import { Checkbox } from "@/components/ui/checkbox"
6
6
import { Input } from "@/components/ui/input"
7
+ import {
8
+ Dialog ,
9
+ DialogContent ,
10
+ DialogFooter ,
11
+ DialogHeader ,
12
+ DialogTitle ,
13
+ DialogTrigger ,
14
+ } from "@/components/ui/dialog"
7
15
import { Copy } from "lucide-react"
8
16
import { TicketOpts } from "@/lib/api"
9
17
@@ -14,7 +22,8 @@ function ticketUrl(ticket: string) {
14
22
}
15
23
16
24
interface InvitePopupProps {
17
- onClose : ( ) => void
25
+ open : boolean
26
+ onOpenChange : ( open : boolean ) => void
18
27
channel : string
19
28
getTicket : ( options : {
20
29
includeMyself : boolean
@@ -23,7 +32,7 @@ interface InvitePopupProps {
23
32
} ) => string
24
33
}
25
34
26
- export function InvitePopup ( { onClose , channel, getTicket } : InvitePopupProps ) {
35
+ export function InvitePopup ( { open , onOpenChange , channel, getTicket } : InvitePopupProps ) {
27
36
const [ ticketOptions , setTicketOptions ] = useState < TicketOpts > ( {
28
37
includeMyself : true ,
29
38
includeBootstrap : true ,
@@ -40,27 +49,27 @@ export function InvitePopup({ onClose, channel, getTicket }: InvitePopupProps) {
40
49
const cliCommand = `cargo run -- join ${ ticket } `
41
50
42
51
return (
43
- < div className = "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50" >
44
- < div className = "bg-background text-foreground p-6 rounded-lg w-full max-w-md shadow-lg border-2 border-primary/10" >
45
- < h2 className = "text-xl font-semibold mb-4" > Invite to Channel </ h2 >
52
+ < Dialog open = { open } onOpenChange = { onOpenChange } >
53
+ < DialogTitle > Invite to channel </ DialogTitle >
54
+ < DialogContent >
46
55
< div className = "mb-4" >
47
- < p className = "font-semibold mb-2" > Ticket: </ p >
56
+ < p className = "font-semibold mb-2" > Ticket</ p >
48
57
< div className = "flex items-center" >
49
- < span className = "mr-2" > { ticket . substring ( 0 , 8 ) } ...</ span >
58
+ < span className = "mr-2 font-mono " > { ticket . substring ( 0 , 16 ) } ...</ span >
50
59
< Button variant = "outline" size = "sm" onClick = { ( ) => copyToClipboard ( ticket ) } >
51
60
< Copy className = "w-4 h-4 mr-2" />
52
61
Copy
53
62
</ Button >
54
63
</ div >
55
64
</ div >
56
65
< div className = "mb-4" >
57
- < p className = "font-semibold mb-2" > Join Link: </ p >
66
+ < p className = "font-semibold mb-2" > Join link </ p >
58
67
< a href = { ticketUrl ( ticket ) } className = "text-blue-500 hover:underline" target = "_blank" >
59
- { ticketUrl ( ticket . substring ( 0 , 8 ) ) } ...
68
+ { ticketUrl ( ticket . substring ( 0 , 16 ) ) } ...
60
69
</ a >
61
70
</ div >
62
71
< div className = "mb-4" >
63
- < p className = "font-semibold mb-2" > Join from CLI: </ p >
72
+ < p className = "font-semibold mb-2" > Join from the command line </ p >
64
73
< Input
65
74
ref = { cliCommandRef }
66
75
value = { cliCommand }
@@ -74,7 +83,7 @@ export function InvitePopup({ onClose, channel, getTicket }: InvitePopupProps) {
74
83
</ Button >
75
84
</ div >
76
85
< div className = "mb-4" >
77
- < h3 className = "font-semibold mb-2" > Configure Ticket: </ h3 >
86
+ < h3 className = "font-semibold mb-2" > Configure ticket </ h3 >
78
87
< div className = "space-y-2" >
79
88
< div className = "flex items-center" >
80
89
< Checkbox
@@ -110,9 +119,9 @@ export function InvitePopup({ onClose, channel, getTicket }: InvitePopupProps) {
110
119
</ div >
111
120
{ /* <Button onClick={generateTicket}>Generate Ticket</Button> */ }
112
121
< div className = "flex justify-end" >
113
- < Button onClick = { onClose } > Close</ Button >
122
+ < Button onClick = { ( _ ) => onOpenChange ( false ) } > Close</ Button >
114
123
</ div >
115
- </ div >
116
- </ div >
124
+ </ DialogContent >
125
+ </ Dialog >
117
126
)
118
127
}
0 commit comments