Documentation
¶
Index ¶
- func PermissionSelector(data PermissionSelectorData) g.Node
- func RoleForm(data RoleFormData) g.Node
- func RoleListTable(data RoleListTableData) g.Node
- func RoleManagementInterface(data RoleManagementInterfaceData) g.Node
- type DashboardExtension
- type DashboardWidget
- type NavigationItem
- type NavigationPosition
- type OrgExtensionContext
- type OrganizationAction
- type OrganizationQuickLink
- type OrganizationSettingsSection
- type OrganizationTab
- type OrganizationUIExtension
- type OrganizationWidget
- type PageHelpers
- type PageRenderer
- type PermissionSelectorData
- type RoleFormData
- type RoleListTableData
- type RoleManagementInterfaceData
- type Route
- type SettingsPage
- type SettingsSection
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func PermissionSelector ¶
func PermissionSelector(data PermissionSelectorData) g.Node
PermissionSelector renders a permission multi-select component
func RoleForm ¶
func RoleForm(data RoleFormData) g.Node
RoleForm renders a form for creating/editing a role
func RoleListTable ¶
func RoleListTable(data RoleListTableData) g.Node
RoleListTable renders a table of roles with actions
func RoleManagementInterface ¶
func RoleManagementInterface(data RoleManagementInterfaceData) g.Node
RoleManagementInterface renders the complete role management UI
Types ¶
type DashboardExtension ¶
type DashboardExtension interface {
// ExtensionID returns a unique identifier for this extension
ExtensionID() string
NavigationItems() []NavigationItem
// Routes returns routes to register under /dashboard/app/:appId/
Routes() []Route
// SettingsSections returns settings sections to add to the settings page
// Deprecated: Use SettingsPages() instead for full-page settings
// Returns a list of setting section renderers
SettingsSections() []SettingsSection
// SettingsPages returns full settings pages to add to the settings sidebar
// These pages get their own routes and full-page layouts
SettingsPages() []SettingsPage
// DashboardWidgets returns widgets to show on the main dashboard
// These appear as cards on the dashboard home page
DashboardWidgets() []DashboardWidget
}
DashboardExtension is the interface that plugins implement to extend the dashboard
type DashboardWidget ¶
type DashboardWidget struct {
// ID is a unique identifier for this widget
ID string
// Title is the widget title
Title string
// Icon is an optional icon
Icon g.Node
// Order determines display order (lower = first)
Order int
// Size determines the widget size (1 = 1 column, 2 = 2 columns, etc.)
Size int
// Renderer renders the widget content
Renderer func(basePath string, currentApp *app.App) g.Node
}
DashboardWidget represents a widget on the dashboard home page
type NavigationItem ¶
type NavigationItem struct {
ID string
Label string
Icon g.Node
Position NavigationPosition
Order int
// Example: func(basePath string, app *app.App) string {
// return basePath + "/dashboard/app/" + app.ID.String() + "/multisession"
// }
URLBuilder func(basePath string, currentApp *app.App) string
// Example: func(activePage string) bool { return activePage == "multisession" }
ActiveChecker func(activePage string) bool
RequiresPlugin string
PermissionRequired string
}
NavigationItem represents a navigation link registered by a plugin
type NavigationPosition ¶
type NavigationPosition string
NavigationPosition defines where a navigation item should be placed
const ( NavPositionMain NavigationPosition = "main" NavPositionSettings NavigationPosition = "settings" NavPositionUserDropdown NavigationPosition = "user_dropdown" NavPositionFooter NavigationPosition = "footer" )
type OrgExtensionContext ¶ added in v0.0.5
type OrgExtensionContext struct {
// OrgID is the organization identifier
OrgID xid.ID
// AppID is the application identifier
AppID xid.ID
// BasePath is the dashboard base path
BasePath string
// Request is the HTTP request for accessing additional context
Request *http.Request
// GetOrg is a helper function to lazy-load the organization object if needed
// Most extensions should fetch their own org-scoped data instead
GetOrg func() (interface{}, error)
// IsAdmin indicates if the current user has admin privileges in this org
IsAdmin bool
}
OrgExtensionContext provides context information to extension renderers Extensions receive minimal information and fetch their own data as needed
type OrganizationAction ¶ added in v0.0.5
type OrganizationAction struct {
// ID is a unique identifier for this action
ID string
// Label is the button text
Label string
// Icon is an optional icon component (lucide icon recommended)
Icon g.Node
// Order determines display order (lower = first)
Order int
// Style determines button styling: "primary", "secondary", "danger"
Style string
// RequireAdmin indicates if admin privileges are required to see this action
RequireAdmin bool
// Action is the onclick handler or htmx attribute
// Examples:
// - "htmx.ajax('POST', '/api/scim/sync', {target: '#status'})"
// - "document.getElementById('modal').showModal()"
Action string
}
OrganizationAction represents an action button in the organization header
type OrganizationQuickLink ¶ added in v0.0.5
type OrganizationQuickLink struct {
// ID is a unique identifier for this link
ID string
// Title is the card title
Title string
// Description is the card description
Description string
// Icon is an optional icon component (lucide icon recommended)
Icon g.Node
// Order determines display order (lower = first)
Order int
// URLBuilder builds the URL for this link
// Receives basePath, orgID, and appID to construct the full URL
URLBuilder func(basePath string, orgID xid.ID, appID xid.ID) string
// RequireAdmin indicates if admin privileges are required to see this link
RequireAdmin bool
}
OrganizationQuickLink represents a quick access card on the organization detail page
type OrganizationSettingsSection ¶ added in v0.0.5
type OrganizationSettingsSection struct {
// ID is a unique identifier for this section
ID string
// Title is the section title
Title string
// Description is the section description
Description string
// Icon is an optional icon component (lucide icon recommended)
Icon g.Node
// Order determines display order (lower = first)
Order int
// RequireAdmin indicates if admin privileges are required to see this section
RequireAdmin bool
// Renderer renders the section content
Renderer func(ctx OrgExtensionContext) g.Node
}
OrganizationSettingsSection represents a settings section for organization configuration
type OrganizationTab ¶ added in v0.0.5
type OrganizationTab struct {
// ID is a unique identifier for this tab
ID string
// Label is the display text in the tab navigation
Label string
// Icon is an optional icon component (lucide icon recommended)
Icon g.Node
// Order determines display order in tab bar (lower = first)
Order int
// RequireAdmin indicates if admin privileges are required to view this tab
RequireAdmin bool
// Path is the URL path segment for this tab (e.g., "scim", "billing")
// Will be accessible at: /dashboard/app/:appId/organizations/:orgId/tabs/:path
Path string
// Renderer renders the full tab content
// The function receives context with org ID and can fetch its own data
Renderer func(ctx OrgExtensionContext) g.Node
}
OrganizationTab represents a full-page tab for organization content
type OrganizationUIExtension ¶ added in v0.0.5
type OrganizationUIExtension interface {
// ExtensionID returns a unique identifier for this extension
ExtensionID() string
// OrganizationWidgets returns widget cards to display on the organization detail page
// These appear as stats cards alongside the default org stats
OrganizationWidgets() []OrganizationWidget
// OrganizationTabs returns full-page tabs for organization content
// Each tab gets its own route and can display complete pages
OrganizationTabs() []OrganizationTab
// OrganizationActions returns action buttons for the organization header
// These appear as buttons in the organization detail page header
OrganizationActions() []OrganizationAction
// OrganizationQuickLinks returns quick access cards
// These appear alongside default quick links (Members, Teams, Roles, Invitations)
OrganizationQuickLinks() []OrganizationQuickLink
// OrganizationSettingsSections returns settings sections for org settings pages
// These can be used to add custom settings to organization configuration
OrganizationSettingsSections() []OrganizationSettingsSection
}
OrganizationUIExtension is the interface that plugins implement to extend organization pages This allows plugins to add widgets, tabs, actions, and quick links to organization-scoped pages
type OrganizationWidget ¶ added in v0.0.5
type OrganizationWidget struct {
// ID is a unique identifier for this widget
ID string
// Title is the widget title
Title string
// Icon is an optional icon component (lucide icon recommended)
Icon g.Node
// Order determines display order (lower = first)
Order int
// Size determines the widget size in grid columns (1-3)
// 1 = takes 1/3 of row, 2 = takes 2/3 of row, 3 = full width
Size int
// RequireAdmin indicates if admin privileges are required to view this widget
RequireAdmin bool
// Renderer renders the widget content
// The function receives context with org ID and can fetch its own data
Renderer func(ctx OrgExtensionContext) g.Node
}
OrganizationWidget represents a stats card/widget on the organization detail page
type PageHelpers ¶
type PageHelpers interface {
// GetCurrentUser returns the currently authenticated user
GetCurrentUser() interface{}
// GetCurrentApp returns the current app from URL context
GetCurrentApp() interface{}
// GetUserApps returns all apps the current user has access to
GetUserApps() []interface{}
// GetBasePath returns the dashboard base path
GetBasePath() string
// GetEnabledPlugins returns map of enabled plugin IDs
GetEnabledPlugins() map[string]bool
// SetTitle sets the page title
SetTitle(title string)
// SetActivePage sets the active page identifier for navigation highlighting
SetActivePage(page string)
}
PageHelpers provides helper functions for extension page renderers
type PageRenderer ¶
type PageRenderer func(helpers PageHelpers) (g.Node, error)
PageRenderer is a function that renders page content for an extension It receives helpers for building PageData and returns the content node The dashboard automatically wraps this in the layout (header, nav, footer)
type PermissionSelectorData ¶
type PermissionSelectorData struct {
Permissions []*schema.Permission
SelectedPermIDs map[xid.ID]bool
}
PermissionSelectorData contains data for the permission selector
type RoleFormData ¶
type RoleFormData struct {
Role *schema.Role
Permissions []*schema.Permission
SelectedPermIDs map[xid.ID]bool
IsTemplate bool
CanSetOwnerRole bool
Errors map[string]string
ActionURL string
CancelURL string
}
RoleFormData contains data for rendering the role form
type RoleListTableData ¶
type RoleListTableData struct {
Roles []*schema.Role
IsTemplate bool
BasePath string
OnEdit func(roleID xid.ID) string
OnDelete func(roleID xid.ID) string
OnClone func(roleID xid.ID) string
ShowActions bool
}
RoleListTableData contains data for the role list table
type RoleManagementInterfaceData ¶
type RoleManagementInterfaceData struct {
Title string
Description string
Roles []*schema.Role
IsTemplate bool
BasePath string
CreateRoleURL string
AppID xid.ID
OrgID *xid.ID
ShowActions bool
}
RoleManagementInterfaceData contains data for the full role management interface
type Route ¶
type Route struct {
// Method is the HTTP method (GET, POST, etc.)
Method string
// Path is the route path (relative to /dashboard/app/:appId/)
// Example: "/multisession" becomes "/dashboard/app/:appId/multisession"
Path string
// Handler is the route handler function
// Should be: func(c forge.Context) error
// Use PageRenderer helper to render with dashboard layout
Handler interface{}
// Name is the route name for identification
Name string
// Summary is a short description for OpenAPI
Summary string
// Description is a detailed description for OpenAPI
Description string
// Tags are OpenAPI tags
Tags []string
// RequireAuth indicates if the route requires authentication
RequireAuth bool
// RequireAdmin indicates if the route requires admin privileges
RequireAdmin bool
// PageRenderer is an optional helper that renders the page content
// The dashboard will wrap this in the layout automatically
PageRenderer PageRenderer
}
Route represents a route registered by a plugin extension
type SettingsPage ¶
type SettingsPage struct {
// ID is a unique identifier for this page (e.g., "role-templates", "api-keys")
ID string
// Label is the display text in the sidebar
Label string
// Description is a brief description of what this page does
Description string
// Icon is an optional icon component (lucide icon recommended)
Icon g.Node
// Category groups pages in the sidebar ("general", "security", "communication", "integrations", "advanced")
Category string
// Order determines the display order within the category (lower = first)
Order int
// Path is the URL path relative to /settings/ (e.g., "roles", "api-keys")
Path string
// RequirePlugin optionally specifies a plugin ID that must be enabled
RequirePlugin string
// RequireAdmin indicates if admin privileges are required
RequireAdmin bool
}
SettingsPage represents a full settings page in the sidebar navigation
type SettingsSection ¶
type SettingsSection struct {
// ID is a unique identifier for this section
ID string
// Title is the section title
Title string
// Description is the section description
Description string
// Icon is an optional icon
Icon g.Node
// Order determines display order (lower = first)
Order int
// Renderer renders the section content
Renderer func(basePath string, currentApp *app.App) g.Node
}
SettingsSection represents a section in the settings page Deprecated: Use SettingsPage instead for full-page settings