Hypercode/alex/hypercodePublic

Code

  1. hypercode
  2. views
  3. components
  4. profile_header.go
profile_header.go80 lines
package components

import (
	"github.com/hypercodehq/hypercode/database/models"
	"github.com/hypercodehq/libhtml"
	"github.com/hypercodehq/libhtml/attr"
	"github.com/hypercodehq/hypercode/views/components/ui"
)

type ProfileHeaderData struct {
	User         *models.User
	Username     string
	DisplayName  string
	IsOrg        bool
	CurrentTab   string
	ShowSettings bool
}

func ProfileHeader(data *ProfileHeaderData) html.Node {
	if data == nil {
		data = &ProfileHeaderData{}
	}

	return html.Group(
		html.Header(
			attr.Class("bg-background border-b px-4 py-3 flex flex-wrap justify-between items-center gap-2"),
			html.Div(
				attr.Class("flex flex-wrap items-center gap-3"),
				html.A(
					attr.Href("/"),
					attr.DataTooltip("Go back home"),
					attr.DataSide("bottom"),
					html.Img(
						attr.Src("/logo.png"),
						attr.Alt("Hypercode"),
						attr.Class("h-7"),
					),
				),
				html.Span(
					attr.Class("text-muted-foreground text-md"),
					html.Text("/"),
				),
				html.A(
					attr.Href("/"+data.Username),
					attr.Class("text-md font-medium hover:underline"),
					html.Text(data.Username),
				),
			),
			html.Div(
				attr.Class("flex flex-wrap items-center gap-4"),
				html.IfElsef(
					data.User != nil,
					func() html.Node { return profileLoggedInActions(data.User) },
					func() html.Node { return loggedOutActions() },
				),
			),
		),
		html.Div(
			attr.Class("bg-background border-b px-4"),
			html.Div(
				attr.Class("flex flex-wrap justify-between items-center gap-4"),
				ui.ProfileTabs(ui.ProfileTabsProps{
					Username:     data.Username,
					CurrentTab:   data.CurrentTab,
					ShowSettings: data.ShowSettings,
					IsOrg:        data.IsOrg,
				}),
			),
		),
	)
}

func profileLoggedInActions(user *models.User) html.Node {
	return html.Div(
		attr.Class("flex flex-wrap items-center gap-4"),
		createNewDropdown(),
		userAccountDropdown(user),
	)
}