package components import ( "context" "fmt" "github.com/starfleetcptn/gomft/internal/db" "strconv" ) type UserManagementData struct { Users []db.User Roles []db.Role ActiveTab string // "list", "create", or "edit" EditUser *db.User UserRoles []db.Role ErrorMessage string SuccessMessage string } templ UserManagement(ctx context.Context, data UserManagementData) { @LayoutWithContext("User Management", ctx) { @UserManagementContent(data) } } // UserManagementContent is a partial component for HTMX to replace only the content templ UserManagementContent(data UserManagementData) { //

User Management

if data.SuccessMessage != "" { } if data.ErrorMessage != "" { }
if data.ActiveTab == "list" || data.ActiveTab == "" { @userList(data.Users) } else if data.ActiveTab == "create" { @userForm(nil, true, data.Roles) } else if data.ActiveTab == "edit" && data.EditUser != nil { @userForm(data.EditUser, false, data.Roles) }
} // User listing component templ userList(users []db.User) { for _, user := range users { @UserDialog( fmt.Sprintf("delete-user-dialog-%d", user.ID), "Delete User", fmt.Sprintf("Are you sure you want to delete user \"%s\"? This action cannot be undone.", user.Email), "bg-red-600 hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700", "Delete User", "delete", user.ID, user.Email, ) }
if len(users) == 0 { } else { for _, user := range users { } }
Email
Role
Status
Actions
No users found. Click the "Add User" button to create your first user.
{ user.Email } if user.GetIsAdmin() { Admin } else { User } if user.GetAccountLocked() { Locked } else { Active }
} // User form component for creating/editing users templ userForm(user *db.User, isNew bool, availableRoles []db.Role) {

if isNew { Create New User } else { Edit User: { user.Email } }

if isNew { Create a new user account with appropriate permissions. } else { Update user information and permissions. }

Passwords do not match

Grant administrative privileges to this user

if !isNew {

Account Status

Prevent user from logging in

} if len(availableRoles) > 0 {

Roles

for _, role := range availableRoles {

{ role.Description }

}
}
} // Helper function to check if a user has a specific role func hasRole(user *db.User, roleID uint) bool { for _, role := range user.Roles { if role.ID == roleID { return true } } return false } // UserDialog for confirmation actions templ UserDialog(id string, title string, message string, confirmClass string, confirmText string, action string, userID uint, userEmail string) { } script hideUserDialog(id string) { document.getElementById(id).classList.add("hidden"); document.getElementById(id).classList.remove("flex"); } script showUserDialog(id string) { document.getElementById(id).classList.remove("hidden"); document.getElementById(id).classList.add("flex"); } script triggerUserDelete(dialogId string, userID uint, userEmail string) { // Hide the dialog document.getElementById(dialogId).classList.add("hidden"); document.getElementById(dialogId).classList.remove("flex"); // Store data in a way that's accessible to event handlers window.lastDeletedUser = { id: userID, email: userEmail }; // Add custom marker to track this deletion window.currentlyDeletingUser = true; }