12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package vuetifyx
- import (
- "context"
- "fmt"
- "github.com/qor5/ui/vuetify"
- "github.com/qor5/web"
- h "github.com/theplant/htmlgo"
- )
- type PickerBuilder struct {
- value interface{}
- label string
- fieldName string
- comp h.MutableAttrHTMLComponent
- }
- func Picker(c h.MutableAttrHTMLComponent) (r *PickerBuilder) {
- r = &PickerBuilder{comp: c}
- return
- }
- func (b *PickerBuilder) Value(v interface{}) (r *PickerBuilder) {
- b.value = v
- return b
- }
- func (b *PickerBuilder) Label(v string) (r *PickerBuilder) {
- b.label = v
- return b
- }
- func (b *PickerBuilder) FieldName(v string) (r *PickerBuilder) {
- b.fieldName = v
- return b
- }
- func (b *PickerBuilder) MarshalHTML(ctx context.Context) ([]byte, error) {
- menuLocal := fmt.Sprintf("picker_%s_menu", b.fieldName)
- valueLocal := fmt.Sprintf("picker_%s_value", b.fieldName)
- b.comp.SetAttr("@change", fmt.Sprintf(`locals.%s = false; locals.%s = $event; $plaid().form(plaidForm).fieldValue(%s, $event)`, menuLocal, valueLocal, h.JSONString(b.fieldName)))
- return web.Scope(
- vuetify.VMenu(
- web.Slot(
- vuetify.VTextField().
- Label(b.label).
- Attr(web.VFieldName(b.fieldName)...).
- Value(b.value).
- Readonly(true).
- PrependIcon("edit_calendar").
- Attr("v-model", fmt.Sprintf("locals.%s", valueLocal)).
- Attr("v-bind", "attrs").
- Attr("v-on", "on"),
- ).Name("activator").Scope("{ on, attrs }"),
- b.comp,
- ).Attr("v-model", fmt.Sprintf("locals.%s", menuLocal)).
- CloseOnContentClick(false).
- MaxWidth(290),
- ).Init(fmt.Sprintf(`{%s: %s, %s: false}`, valueLocal, h.JSONString(b.value), menuLocal)).
- VSlot("{ locals }").
- MarshalHTML(ctx)
- }
|