Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

git.sr.ht/~jackmordaunt/gio-planet/form

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

git.sr.ht/~jackmordaunt/gio-planet/form

  • v0.0.0-20210630113341-6d82c9bf8413
  • Go
  • Socket score

Version published
Created
Source

form

Go Reference

Primitives for specifying forms.

The fundamental idea explored here is in separating form concerns. The three core abstractions are the Form, the Value and the Input. Value and Input combine together into a Field.

  • Input abstracts the interactible graphical widget that accepts input.
  • Value abstracts the transformation of text to structured data.
  • Field maps an Input to a Value.
  • Form provides a consistent api for handling a group of fields, namely batch and realtime validation.

Status

This repo is experimental, and does not have a stable interface.

Ideally form initialization would be fully declarative, where the zero value is directly usable. However it's not clear how to achieve such an api.

Some potential avenues to explore:

  • code generation: take a struct definition and generate the form code.
  • reflection: introspect a struct definition and generate form.Fields on the fly.

Use

Since the api is experimental, there is no "idiomatic usage".

Fundamentally, a form binds inputs to values and there are numerous ways to compose it.

This is an example of one way to use the package: one-time initialization that you can call in an update function once per frame.

type Person struct {
    Age    int
    Name   string
    Salary float64
}

type PersonForm struct {
    form.Form
    // Model contains the structured data.
    Model Person
    // Inputs contains the input state.
    Inputs struct {
        Age    component.TextField
        Name   component.TextField
        Salary component.TextField
    }
    init sync.Once
}

func (pf *PersonForm) Update() {
    pf.init.Do(func() {
        pf.Form.Load([]form.Field{
            {
                Value: value.Int{Value: &pf.Model.Age, Default: 18},
                Input: &pf.Inputs.Age,
            },
            {
                Value: value.Required{value.Text{Value: &pf.Model.Name, Default: ""}},
                Input: &pf.Inputs.Name,
            },
            {
                Value: value.Float{Value: &pf.Model.Salary, Default: 0},
                Input: &pf.Inputs.Salary,
            },
        })
    })
}

FAQs

Package last updated on 30 Jun 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc