diff --git a/pkg/database/invite.sql.go b/pkg/database/invite.sql.go
index 94b5794..9bf7116 100644
--- a/pkg/database/invite.sql.go
+++ b/pkg/database/invite.sql.go
@@ -111,3 +111,36 @@ func (q *Queries) ListInvites(ctx context.Context) ([]Invite, error) {
}
return items, nil
}
+
+const updateInvite = `-- name: UpdateInvite :one
+update invites
+set name = $2, expires_at = $3, max_uses = $4
+where id = $1
+returning id, name, created_at, expires_at, max_uses, current_uses
+`
+
+type UpdateInviteParams struct {
+ ID uuid.UUID
+ Name string
+ ExpiresAt pgtype.Timestamp
+ MaxUses pgtype.Int4
+}
+
+func (q *Queries) UpdateInvite(ctx context.Context, arg UpdateInviteParams) (Invite, error) {
+ row := q.db.QueryRow(ctx, updateInvite,
+ arg.ID,
+ arg.Name,
+ arg.ExpiresAt,
+ arg.MaxUses,
+ )
+ var i Invite
+ err := row.Scan(
+ &i.ID,
+ &i.Name,
+ &i.CreatedAt,
+ &i.ExpiresAt,
+ &i.MaxUses,
+ &i.CurrentUses,
+ )
+ return i, err
+}
diff --git a/pkg/database/sql/invite.sql b/pkg/database/sql/invite.sql
index 829e238..5043ded 100644
--- a/pkg/database/sql/invite.sql
+++ b/pkg/database/sql/invite.sql
@@ -21,3 +21,9 @@ where id = $1;
update invites
set current_uses = current_uses + 1
where id = $1;
+
+-- name: UpdateInvite :one
+update invites
+set name = $2, expires_at = $3, max_uses = $4
+where id = $1
+returning *;
diff --git a/services/admin/admin.go b/services/admin/admin.go
index 8097f0c..13c0bcd 100644
--- a/services/admin/admin.go
+++ b/services/admin/admin.go
@@ -38,8 +38,11 @@ func NewService(db *database.Queries) (*service, error) {
http.Handle("DELETE /admin/oidc-clients/{id}", s.auth(httputil.Route(s.deleteOIDCClient)))
http.Handle("GET /admin/invites", s.auth(httputil.Route(s.invites)))
+ http.Handle("GET /admin/invites/{id}", s.auth(httputil.Route(s.invite)))
http.Handle("POST /admin/invites", s.auth(httputil.Route(s.createInvite)))
http.Handle("DELETE /admin/invites/{id}", s.auth(httputil.Route(s.deleteInvite)))
+ http.Handle("GET /admin/invites/{id}/edit", s.auth(httputil.Route(s.editInviteForm)))
+ http.Handle("PUT /admin/invites/{id}", s.auth(httputil.Route(s.updateInvite)))
return s, nil
}
diff --git a/services/admin/admin.templ b/services/admin/admin.templ
index cc3badc..4eb83ed 100644
--- a/services/admin/admin.templ
+++ b/services/admin/admin.templ
@@ -1,12 +1,8 @@
package admin
import (
- "github.com/datasektionen/logout/pkg/config"
- "github.com/datasektionen/logout/pkg/database"
"github.com/datasektionen/logout/pkg/templates"
"github.com/datasektionen/logout/services/static"
- "strconv"
- "time"
)
templ admin() {
@@ -31,6 +27,29 @@ templ oidcClients() {
}
}
+templ page() {
+ @templates.Page() {
+
+
+
+ { children... }
+
+
+ }
+}
+
var input = `
border border-neutral-500 grow
outline-none focus:border-cerise-strong hover:border-cerise-light
@@ -48,91 +67,5 @@ var roundButton = `
grid place-items-center pointer
border border-transparent outline-none focus:border-cerise-strong hover:border-cerise-light relative
[&>img]:w-3/5 [&>img]:h-3/5 [&>img]:invert
+ [&>p]:text-center [&>p]:leading-none
`
-
-templ invite(invite database.Invite) {
-
- { invite.Name }
- { strconv.Itoa(int(invite.CurrentUses)) }
-
- if invite.MaxUses.Valid {
- { strconv.Itoa(int(invite.MaxUses.Int32)) }
- }
-
- { invite.CreatedAt.Time.Format(time.DateOnly) }
- { invite.ExpiresAt.Time.Format(time.DateOnly) }
-
-
-
-
-
-}
-
-templ invites(invites []database.Invite) {
- @page() {
-
-
- -
-
Name
- Uses
- Max uses
- Created at
- Expires at
-
-
- for _, inv := range invites {
- @invite(inv)
- }
-
-
-
- }
-}
-
-templ page() {
- @templates.Page() {
-
-
-
- { children... }
-
-
- }
-}
diff --git a/services/admin/admin_templ.go b/services/admin/admin_templ.go
index a8f765a..c4353e3 100644
--- a/services/admin/admin_templ.go
+++ b/services/admin/admin_templ.go
@@ -9,12 +9,8 @@ import "github.com/a-h/templ"
import templruntime "github.com/a-h/templ/runtime"
import (
- "github.com/datasektionen/logout/pkg/config"
- "github.com/datasektionen/logout/pkg/database"
"github.com/datasektionen/logout/pkg/templates"
"github.com/datasektionen/logout/services/static"
- "strconv"
- "time"
)
func admin() templ.Component {
@@ -131,26 +127,7 @@ func oidcClients() templ.Component {
})
}
-var input = `
- border border-neutral-500 grow
- outline-none focus:border-cerise-strong hover:border-cerise-light
- bg-slate-800 p-1.5 rounded h-8
-`
-
-var button = `
- bg-[#3f4c66] p-1 h-8 block rounded border text-center
- select-none border-transparent outline-none
- focus:border-cerise-strong hover:border-cerise-light
-`
-
-var roundButton = `
- bg-[#3f4c66] shrink-0 h-5 w-5 rounded-full
- grid place-items-center pointer
- border border-transparent outline-none focus:border-cerise-strong hover:border-cerise-light relative
- [&>img]:w-3/5 [&>img]:h-3/5 [&>img]:invert
-`
-
-func invite(invite database.Invite) templ.Component {
+func page() templ.Component {
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
@@ -168,318 +145,7 @@ func invite(invite database.Invite) templ.Component {
templ_7745c5c3_Var6 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var7 string
- templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(invite.Name)
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `admin.templ`, Line: 55, Col: 18}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var8 string
- templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(int(invite.CurrentUses)))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `admin.templ`, Line: 56, Col: 44}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if invite.MaxUses.Valid {
- var templ_7745c5c3_Var9 string
- templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(int(invite.MaxUses.Int32)))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `admin.templ`, Line: 59, Col: 45}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var10 string
- templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(invite.CreatedAt.Time.Format(time.DateOnly))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `admin.templ`, Line: 62, Col: 50}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var11 string
- templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(invite.ExpiresAt.Time.Format(time.DateOnly))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `admin.templ`, Line: 63, Col: 50}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var12 = []any{roundButton}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var12...)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var15 = []any{roundButton}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var15...)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, templ.ComponentScript{Call: templ.SafeScript(
- "navigator.clipboard.writeText",
- config.Config.Origin.String()+"/invite/"+invite.ID.String(),
- )})
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return templ_7745c5c3_Err
- })
-}
-
-func invites(invites []database.Invite) templ.Component {
- return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var18 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var18 == nil {
- templ_7745c5c3_Var18 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var19 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("Name
Uses
Max uses
Created at
Expires at
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- for _, inv := range invites {
- templ_7745c5c3_Err = invite(inv).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return templ_7745c5c3_Err
- })
- templ_7745c5c3_Err = page().Render(templ.WithChildren(ctx, templ_7745c5c3_Var19), templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return templ_7745c5c3_Err
- })
-}
-
-func page() templ.Component {
- return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var28 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var28 == nil {
- templ_7745c5c3_Var28 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var29 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var7 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -491,7 +157,7 @@ func page() templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" Members OIDC Clients Invites")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templ_7745c5c3_Var28.Render(ctx, templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = templ_7745c5c3_Var6.Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -513,10 +179,30 @@ func page() templ.Component {
}
return templ_7745c5c3_Err
})
- templ_7745c5c3_Err = templates.Page().Render(templ.WithChildren(ctx, templ_7745c5c3_Var29), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = templates.Page().Render(templ.WithChildren(ctx, templ_7745c5c3_Var7), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return templ_7745c5c3_Err
})
}
+
+var input = `
+ border border-neutral-500 grow
+ outline-none focus:border-cerise-strong hover:border-cerise-light
+ bg-slate-800 p-1.5 rounded h-8
+`
+
+var button = `
+ bg-[#3f4c66] p-1 h-8 block rounded border text-center
+ select-none border-transparent outline-none
+ focus:border-cerise-strong hover:border-cerise-light
+`
+
+var roundButton = `
+ bg-[#3f4c66] shrink-0 h-5 w-5 rounded-full
+ grid place-items-center pointer
+ border border-transparent outline-none focus:border-cerise-strong hover:border-cerise-light relative
+ [&>img]:w-3/5 [&>img]:h-3/5 [&>img]:invert
+ [&>p]:text-center [&>p]:leading-none
+`
diff --git a/services/admin/handlers.go b/services/admin/handlers.go
index 9f4cea8..ac856d2 100644
--- a/services/admin/handlers.go
+++ b/services/admin/handlers.go
@@ -69,6 +69,18 @@ func (s *service) invites(w http.ResponseWriter, r *http.Request) httputil.ToRes
return invites(invs)
}
+func (s *service) invite(w http.ResponseWriter, r *http.Request) httputil.ToResponse {
+ id, err := uuid.Parse(r.PathValue("id"))
+ if err != nil {
+ return httputil.BadRequest("Invalid uuid")
+ }
+ inv, err := s.db.GetInvite(r.Context(), id)
+ if err != nil {
+ return httputil.BadRequest("No such invite")
+ }
+ return invite(inv)
+}
+
func (s *service) createInvite(w http.ResponseWriter, r *http.Request) httputil.ToResponse {
name := r.FormValue("name")
expiresAt, err := time.Parse(time.DateOnly, r.FormValue("expires-at"))
@@ -104,6 +116,46 @@ func (s *service) deleteInvite(w http.ResponseWriter, r *http.Request) httputil.
return nil
}
+func (s *service) editInviteForm(w http.ResponseWriter, r *http.Request) httputil.ToResponse {
+ id, err := uuid.Parse(r.PathValue("id"))
+ if err != nil {
+ return httputil.BadRequest("Invalid id")
+ }
+ invite, err := s.db.GetInvite(r.Context(), id)
+ if err == pgx.ErrNoRows {
+ return httputil.BadRequest("No such invite")
+ }
+ return editInvite(invite)
+}
+
+func (s *service) updateInvite(w http.ResponseWriter, r *http.Request) httputil.ToResponse {
+ id, err := uuid.Parse(r.PathValue("id"))
+ if err != nil {
+ return httputil.BadRequest("Invalid id")
+ }
+
+ name := r.FormValue("name")
+ expiresAt, err := time.Parse(time.DateOnly, r.FormValue("expires-at"))
+ if err != nil {
+ return httputil.BadRequest("Invalid date for expires at")
+ }
+ maxUsesStr := r.FormValue("max-uses")
+ maxUses, err := strconv.Atoi(maxUsesStr)
+ if err != nil && maxUsesStr != "" {
+ return httputil.BadRequest("Invalid int for max uses")
+ }
+ inv, err := s.db.UpdateInvite(r.Context(), database.UpdateInviteParams{
+ ID: id,
+ Name: name,
+ ExpiresAt: pgtype.Timestamp{Time: expiresAt, Valid: true},
+ MaxUses: pgtype.Int4{Int32: int32(maxUses), Valid: maxUsesStr != ""},
+ })
+ if err != nil {
+ return err
+ }
+ return invite(inv)
+}
+
func (s *service) uploadSheet(w http.ResponseWriter, r *http.Request) httputil.ToResponse {
s.memberSheet.mu.Lock()
defer s.memberSheet.mu.Unlock()
diff --git a/services/admin/invites.templ b/services/admin/invites.templ
new file mode 100644
index 0000000..1c33ba8
--- /dev/null
+++ b/services/admin/invites.templ
@@ -0,0 +1,135 @@
+package admin
+
+import (
+ "fmt"
+ "github.com/datasektionen/logout/pkg/config"
+ "github.com/datasektionen/logout/pkg/database"
+ "strconv"
+ "time"
+)
+
+templ invite(invite database.Invite) {
+
+ { invite.Name }
+ { strconv.Itoa(int(invite.CurrentUses)) }
+
+ if invite.MaxUses.Valid {
+ { strconv.Itoa(int(invite.MaxUses.Int32)) }
+ }
+
+ { invite.CreatedAt.Time.Format(time.DateOnly) }
+ { invite.ExpiresAt.Time.Format(time.DateOnly) }
+
+
+
+
+
+
+}
+
+templ editInvite(invite database.Invite) {
+
+ @inviteForm(&invite)
+
+}
+
+templ inviteForm(invite *database.Invite) {
+
+}
+
+templ invites(invites []database.Invite) {
+ @page() {
+
+
+ -
+
Name
+ Uses
+ Max uses
+ Created at
+ Expires at
+
+
+ for _, inv := range invites {
+ @invite(inv)
+ }
+
+ @inviteForm(nil)
+
+ }
+}
diff --git a/services/admin/invites_templ.go b/services/admin/invites_templ.go
new file mode 100644
index 0000000..26dbf54
--- /dev/null
+++ b/services/admin/invites_templ.go
@@ -0,0 +1,584 @@
+// Code generated by templ - DO NOT EDIT.
+
+// templ: version: v0.2.747
+package admin
+
+//lint:file-ignore SA4006 This context is only used if a nested component is present.
+
+import "github.com/a-h/templ"
+import templruntime "github.com/a-h/templ/runtime"
+
+import (
+ "fmt"
+ "github.com/datasektionen/logout/pkg/config"
+ "github.com/datasektionen/logout/pkg/database"
+ "strconv"
+ "time"
+)
+
+func invite(invite database.Invite) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var1 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var1 == nil {
+ templ_7745c5c3_Var1 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var2 string
+ templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(invite.Name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `invites.templ`, Line: 13, Col: 18}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var3 string
+ templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(int(invite.CurrentUses)))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `invites.templ`, Line: 14, Col: 44}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if invite.MaxUses.Valid {
+ var templ_7745c5c3_Var4 string
+ templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(int(invite.MaxUses.Int32)))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `invites.templ`, Line: 17, Col: 45}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var5 string
+ templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(invite.CreatedAt.Time.Format(time.DateOnly))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `invites.templ`, Line: 20, Col: 50}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var6 string
+ templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(invite.ExpiresAt.Time.Format(time.DateOnly))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `invites.templ`, Line: 21, Col: 50}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var7 = []any{roundButton}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var7...)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var10 = []any{roundButton}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var10...)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, templ.ComponentScript{Call: templ.SafeScript(
+ "navigator.clipboard.writeText",
+ config.Config.Origin.String()+"/invite/"+invite.ID.String(),
+ )})
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var13 = []any{roundButton}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var13...)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return templ_7745c5c3_Err
+ })
+}
+
+func editInvite(invite database.Invite) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var16 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var16 == nil {
+ templ_7745c5c3_Var16 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = inviteForm(&invite).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return templ_7745c5c3_Err
+ })
+}
+
+func inviteForm(invite *database.Invite) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var17 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var17 == nil {
+ templ_7745c5c3_Var17 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return templ_7745c5c3_Err
+ })
+}
+
+func invites(invites []database.Invite) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var33 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var33 == nil {
+ templ_7745c5c3_Var33 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var34 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("Name
Uses
Max uses
Created at
Expires at
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ for _, inv := range invites {
+ templ_7745c5c3_Err = invite(inv).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = inviteForm(nil).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return templ_7745c5c3_Err
+ })
+ templ_7745c5c3_Err = page().Render(templ.WithChildren(ctx, templ_7745c5c3_Var34), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return templ_7745c5c3_Err
+ })
+}