2022-04-06 12:37:06 +00:00
import { Credential } from "@prisma/client" ;
import { Bits , Blocks , Elements , Modal , setIfTruthy } from "slack-block-builder" ;
const CreateEventModal = (
data :
| ( Credential & {
user : {
username : string | null ;
eventTypes : {
id : number ;
title : string ;
} [ ] ;
} | null ;
} )
| null ,
2022-06-11 21:30:52 +00:00
invalidInput = false
2022-04-06 12:37:06 +00:00
) = > {
return Modal ( { title : "Create Booking" , submit : "Create" , callbackId : "cal.event.create" } )
. blocks (
Blocks . Section ( { text : ` Hey there, * ${ data ? . user ? . username } !* ` } ) ,
Blocks . Divider ( ) ,
Blocks . Input ( { label : "Your Name" , blockId : "eventName" } ) . element (
Elements . TextInput ( { placeholder : "Event Name" } ) . actionId ( "event_name" )
) ,
Blocks . Input ( { label : "Which event would you like to create?" , blockId : "eventType" } ) . element (
Elements . StaticSelect ( { placeholder : "Which event would you like to create?" } )
. actionId ( "create.event.type" )
. options (
data ? . user ? . eventTypes . map ( ( item : any ) = >
Bits . Option ( { text : item.title ? ? "No Name" , value : item.id.toString ( ) } )
)
)
) , // This doesnt need to reach out to the server when the user changes the selection
Blocks . Input ( {
label : "Who would you like to invite to your event?" ,
blockId : "selectedUsers" ,
} ) . element (
Elements . UserMultiSelect ( { placeholder : "Who would you like to invite to your event?" } ) . actionId (
"invite_users"
)
) ,
Blocks . Input ( { label : "When would this event be?" , blockId : "eventDate" } ) . element (
Elements . DatePicker ( { placeholder : "Select Date" } ) . actionId ( "event_date" )
) ,
Blocks . Input ( { label : "What time would you like to start?" , blockId : "eventTime" } ) . element (
Elements . TimePicker ( { placeholder : "Select Time" } ) . actionId ( "event_start_time" )
) , // TODO: We could in future validate if the time is in the future or if busy at point - Didnt see much point as this gets validated when you submit. Could be better UX
setIfTruthy ( invalidInput , [ Blocks . Section ( { text : "Please fill in all the fields" } ) ] )
)
. buildToObject ( ) ;
} ;
export default CreateEventModal ;