Skip to content

Commit

Permalink
Merge pull request #477 from qor5/fix-edit-setter
Browse files Browse the repository at this point in the history
Fix: default field will reset setterFunc
  • Loading branch information
sunfmin authored Aug 15, 2024
2 parents f330127 + d1a17d9 commit 0500ee1
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 2 deletions.
23 changes: 23 additions & 0 deletions docs/docsrc/examples/examples_presets/editing.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package examples_presets

import (
"embed"
"errors"
"fmt"
"io"
"net/http"
Expand Down Expand Up @@ -187,3 +188,25 @@ func PresetsEditingValidate(b *presets.Builder, db *gorm.DB) (

return
}

func PresetsEditingSetter(b *presets.Builder, db *gorm.DB) (
mb *presets.ModelBuilder,
cl *presets.ListingBuilder,
ce *presets.EditingBuilder,
dp *presets.DetailingBuilder,
) {
b.DataOperator(gorm2op.DataOperator(db))
db.AutoMigrate(&Company{})
mb = b.Model(&Company{})
mb.Listing("ID", "Name")
eb := mb.Editing("Name")
eb.Field("Name").SetterFunc(func(obj interface{}, field *presets.FieldContext, ctx *web.EventContext) (err error) {
c := obj.(*Company)
if c.Name == "" {
return errors.New("name must not be empty")
}
return
})

return
}
26 changes: 26 additions & 0 deletions docs/docsrc/examples/examples_presets/editing_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,29 @@ func TestPresetsEditingValidate(t *testing.T) {
})
}
}

func TestPresetsEditingSetter(t *testing.T) {
pb := presets.New().DataOperator(gorm2op.DataOperator(TestDB))
PresetsEditingSetter(pb, TestDB)

cases := []multipartestutils.TestCase{
{
Name: "default field setterFunc",
Debug: true,
ReqFunc: func() *http.Request {
companyData.TruncatePut(SqlDB)
return multipartestutils.NewMultipartBuilder().
PageURL("/companies?__execute_event__=presets_Update").
AddField("Name", "").
BuildEventFuncRequest()
},
ExpectPortalUpdate0ContainsInOrder: []string{"name must not be empty"},
},
}

for _, c := range cases {
t.Run(c.Name, func(t *testing.T) {
multipartestutils.RunCase(t, c, pb)
})
}
}
1 change: 1 addition & 0 deletions docs/docsrc/examples/examples_presets/mux.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ func SamplesHandler(mux examples.Muxer) {
addExample(mux, db, PresetsConfirmDialog)
addExample(mux, db, PresetsEditingCustomizationTabs)
addExample(mux, db, PresetsEditingValidate)
addExample(mux, db, PresetsEditingSetter)
addExample(mux, db, PresetsListingCustomizationSearcher)
addExample(mux, db, PresetsDetailInlineEditDetails)
addExample(mux, db, PresetsDetailInlineEditInspectTables)
Expand Down
6 changes: 4 additions & 2 deletions presets/field.go
Original file line number Diff line number Diff line change
Expand Up @@ -500,8 +500,10 @@ func (b *FieldsBuilder) getFieldOrDefault(name string) (r *FieldBuilder) {
}

ft := b.defaults.fieldTypeByTypeOrCreate(fType)
r.ComponentFunc(ft.compFunc).
SetterFunc(ft.setterFunc)
r.ComponentFunc(ft.compFunc)
if r.setterFunc == nil {
r.SetterFunc(ft.setterFunc)
}
}
return
}
Expand Down

0 comments on commit 0500ee1

Please sign in to comment.