Documentation ¶
Overview ¶
Common functions, constants, and structures package for the frontend.
Index ¶
- Constants
- Variables
- func FetchData(input *CallInput, output *Response) bool
- func LoadUser(user *models.User, ctx *app.Context) error
- func LoadUser2(encoded string, user *models.User) error
- func ReadFile(file app.Value) (data []byte, err error)
- func SaveUser(user *models.User, ctx *app.Context) error
- func SaveUser2(plain *string, user *models.User) error
- type CallInput
- type Response
- type Toast
- type ToastInterface
Constants ¶
const ( // Flow/Posts-related error messages. ERR_INVALID_REPLY = "no valid reply content entered" ERR_POST_UNAUTH_DELETE = "you can delete your own posts only!" ERR_POST_NOT_FOUND = "post not found" ERR_USER_NOT_FOUND = "user not found" ERR_PRIVATE_ACC = "this account is private" // Generic error messages on the FE. ERR_CANNOT_REACH_BE = "cannot reach the server" ERR_CANNOT_GET_DATA = "cannot get the data" ERR_LOGIN_AGAIN = "please log-in again" // Login-related error messages. MSG_USER_ACTIVATED = "user successfully activated, try logging in" ERR_ALL_FIELDS_REQUIRED = "all fields are required" ERR_LOGIN_CHARS_LIMIT = "only a-z, A-Z characters and numbers can be used" ERR_ACCESS_DENIED = "wrong credentials entered" ERR_LOCAL_STORAGE_USER_FAIL = "cannot save user's data to the browser" ERR_ACTIVATION_INVALID_UUID = "invalid activation UUID" ERR_ACTIVATION_EXPIRED_UUID = "expired activation UUID" // Notification-related (non-)error messages. MSG_SUBSCRIPTION_UPDATED = "subscription updated" MSG_UNSUBSCRIBED_SUCCESS = "successfully unsubscribed, notifications off" ERR_SUBSCRIPTION_UPDATE_FAIL = "failed to update the subscription, try again later" ERR_NOTIF_PERMISSION_DENIED = "notification permission denied by user" ERR_NOTIF_UNSUPPORTED_BROWSER = "notifications are not supported in this browser" // Polls-related (non-)error messages. MSG_NO_POLL_TO_SHOW = "no poll to show, click here to create one!" ERR_POLL_UNAUTH_DELETE = "you can delete your own polls only!" ERR_POLL_OPTION_MISMATCH = "such option is not associated to the poll" // Post-related (non-)error messages. MSG_IMAGE_READY = "image is ready for the upload" ERR_LOCAL_STORAGE_LOAD_FAIL = "cannot decode user's data: " ERR_POST_TEXTAREA_EMPTY = "no valid content entered" ERR_POLL_FIELDS_REQUIRED = "poll question and at least two options are required" ERR_POST_UNKNOWN_TYPE = "unknown post type" // Register-related error messages. ERR_REGISTER_FIELDS_REQUIRED = "all fields are required" ERR_REGISTER_CHARSET_LIMIT = "only a-z, A-Z characters and numbers can be used" ERR_WRONG_EMAIL_FORMAT = "invalid e-mail address format entered" // Reset-related (non-)error messages. MSG_RESET_PASSPHRASE_SUCCESS = "your passphrase has been changed, check your mail inbox" MSG_RESET_REQUEST_SUCCESS = "the passphrase reset request has been sent, check your mail inbox" ERR_RESET_FIELD_REQUIRED = "e-mail address is required" ERR_RESET_UUID_FIELD_EMPTY = "UUID string is required to continue, check your mail inbox" ERR_RESET_INVALID_INPUT_DATA = "invalid input data entered" // Settings-related (non-)error messages. MSG_PASSPHRASE_UPDATED = "passphrase updated successfully" MSG_ABOUT_TEXT_UPDATED = "about text updated successfully" MSG_WEBSITE_UPDATED = "website updated successfully" MSG_SUBSCRIPTION_REQ_SUCCESS = "successfully subscribed to notifs" MSG_LOCAL_TIME_TOGGLE = "local time mode toggled" MSG_PRIVATE_MODE_TOGGLE = "private mode toggled" MSG_AVATAR_CHANGE_SUCCESS = "avatar updated successfully" ERR_PASSPHRASE_MISMATCH = "passphrases do not match" ERR_PASSPHRASE_MISSING = "passphrase fields need to be filled" ERR_ABOUT_TEXT_UNCHANGED = "the about textarea is empty, or the text has not changed" ERR_ABOUT_TEXT_CHAR_LIMIT = "about text has to be shorter than 100 chars" ERR_WEBSITE_UNCHANGED = "website URL has to be filled, or changed" ERR_WEBSITE_REGEXP_FAIL = "failed to check the website format (regexp object failed)" ERR_WEBSITE_INVALID = "website prolly not a valid URL" ERR_SUBSCRIPTION_BLANK_UUID = "blank UUID string" ERR_SUBSCRIPTION_REQ_FAIL = "failed to subscribe to notifications: " // Users-related (non-)error messages. MSG_USER_UPDATED_SUCCESS = "user has been updated, request was removed" MSG_FOLLOW_REQUEST_REMOVED = "user has been updated, request was removed" MSG_REQ_TO_FOLLOW_SUCCESS = "request to follow sent successfully" MSG_SHADE_SUCCESSFUL = "user (un)shaded successfully" )
const ( // Toast type error = red10. TTYPE_ERR = "error" // Toast type info = blue10. TTYPE_INFO = "info" // Toast type success = green10. TTYPE_SUCCESS = "success" )
Variables ¶
var ( // those vars are used during the build --- linker (ld) bakes the values in AppVersion string AppPepper string VapidPublicKey string )
var Client = sse.Client{ HTTPClient: &http.Client{ Timeout: 3 * time.Second, }, OnRetry: func(err error, duration time.Duration) { fmt.Printf("conn error: %v\n", err) time.Sleep(duration) }, ResponseValidator: NoopValidator, Backoff: sse.Backoff{ InitialInterval: 1000 * time.Millisecond, Multiplier: float64(1.5), Jitter: float64(0.5), MaxInterval: 2 * time.Second, MaxElapsedTime: 2 * time.Second, MaxRetries: 10, }, }
Custom HTTP client.
var DefaultValidator sse.ResponseValidator = func(r *http.Response) error { if r.StatusCode != http.StatusOK { return fmt.Errorf("expected status code %d %s, received %d %s", http.StatusOK, http.StatusText(http.StatusOK), r.StatusCode, http.StatusText(r.StatusCode)) } cts := r.Header.Get("Content-Type") if expected := "text/event-stream"; cts != expected { return fmt.Errorf("expected content type to have %q, received %q", expected, cts) } return nil }
Default response validator. https://pkg.go.dev/github.com/tmaxmax/go-sse@v0.8.0#ResponseValidator
var NoopValidator sse.ResponseValidator = func(_ *http.Response) error { return nil }
Noop response validator. https://pkg.go.dev/github.com/tmaxmax/go-sse@v0.8.0#ResponseValidator
var ToastColor = func(ttype string) string { switch ttype { case TTYPE_SUCCESS: return "green10" case TTYPE_ERR: return "red10" case TTYPE_INFO: default: return "blue10" } return "blue10" }
ToastColor is a helper function reference to define the colour palette for such toast types.
var URL = func() string { if app.Getenv("APP_URL_MAIN") != "" { return "https://" + app.Getenv("APP_URL_MAIN") } return "http://localhost:8080" }()
URL is a simple lambda function to retrieve the URL for a new SSE connection.
Functions ¶
func LoadUser ¶ added in v0.41.8
LoadUser uses the app.Context pointer to load the encoded user string from the LocalStorage to decode it back to the models.User struct.
Types ¶
type CallInput ¶
type CallInput struct { Method string Url string CallerID string PageNo int HideReplies bool // payload body for the API call Data interface{} }
DTO-in structure for the API call.
type Response ¶ added in v0.42.0
type Response struct { Code int Message string `json:"message"` Timestamp int64 `json:"timestamp"` Data interface{} `json:"data"` }
standardized common response from API
type Toast ¶ added in v0.41.1
type Toast struct { // AppContext is a pointer reference to the application context. AppContext *app.Context // TLink is a field to hold the hypertext link. TLink string // TText is a filed to hold the very text message to display. TText string // TType defines the message type (error, info, success). TType string // TID is a filed to hold the toast's UUID. TID int64 }
func (*Toast) Context ¶ added in v0.41.1
Context sets the application context pointer reference. Returns itself.
func (*Toast) Dispatch ¶ added in v0.41.1
Dispatch is the final method for the toast's cycle. This method ensures a proper propagation of the toast to such screen to display its content. Custom implementations of the <f> function can be seens in other packages that use this very implementation.
func (*Toast) Link ¶ added in v0.41.1
Link sets the string input as the TLink content. Returns itself.
type ToastInterface ¶ added in v0.41.1
type ToastInterface interface { // Context method sets the application context pointer reference. Context(*app.Context) *Toast // Text method write the input string to the TText field. Text(string) *Toast // Link method writes the input string to the TLink field. Link(string) *Toast // Type method writes the input string to the TType field. Type(string) *Toast // SetPrefix method enables to set the logging prefix. Can be removed afterwards. SetPrefix(string) *Toast // RemovePrefix method removes the previously added logging prefix. RemovePrefix() *Toast // Dispatch sends the instance itself to the Content type of a view. This method is the final one. Dispatch(interface{}, func(*Toast, interface{})) }