package booking import ( "net/http" "dev.tandem.ws/tandem/camper/pkg/auth" "dev.tandem.ws/tandem/camper/pkg/database" httplib "dev.tandem.ws/tandem/camper/pkg/http" "dev.tandem.ws/tandem/camper/pkg/template" ) type PrebookingHandler struct { } func NewPrebookingHandler() *PrebookingHandler { return &PrebookingHandler{} } func (h *PrebookingHandler) Handler(user *auth.User, company *auth.Company, conn *database.Conn) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var head string head, r.URL.Path = httplib.ShiftPath(r.URL.Path) switch head { case "": switch r.Method { case http.MethodGet: servePrebookingIndex(w, r, user, company, conn) default: httplib.MethodNotAllowed(w, r, http.MethodGet) } default: http.NotFound(w, r) } }) } func servePrebookingIndex(w http.ResponseWriter, r *http.Request, user *auth.User, company *auth.Company, conn *database.Conn) { filters := newFilterForm(r.Context(), conn, company, user.Locale) if err := filters.Parse(r); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } filters.BookingStatus.Selected = []string{"created"} bookings, err := collectBookingEntries(r.Context(), conn, user.Locale.Language, filters) if err != nil { panic(err) } page := &prebookingIndex{ Bookings: filters.buildCursor(bookings), Filters: filters, } page.MustRender(w, r, user, company) } type prebookingIndex struct { Bookings []*bookingEntry Filters *filterForm } func (page prebookingIndex) MustRender(w http.ResponseWriter, r *http.Request, user *auth.User, company *auth.Company) { if httplib.IsHTMxRequest(r) && page.Filters.Paginated() { template.MustRenderAdminNoLayout(w, r, user, company, "prebooking/results.gohtml", page) } else { template.MustRenderAdminFiles(w, r, user, company, page, "prebooking/index.gohtml", "prebooking/results.gohtml") } }