Elastic search support
Uadmin supports elastic search (please build your package with tag 'elasticsearch'). For this you need just to describe your data model, like below (model has to implement core.ElasticModelInterface interface):
type Tweet struct { User string `json:"user" uadmin:"list,search"` Message string `json:"message" uadmin:"list,search"` ID string}
func (t *Tweet) String() string { return fmt.Sprintf("User %s tweeted following %s", t.User, t.Message)}
func (t *Tweet) SetID(ID string) { t.ID = ID}
func (t *Tweet) GetID() string { return t.ID}
func (t *Tweet) GetIndexName() string { return "tweets"}
don't forget to create index in data migration:
// Create a clientclient := core.NewUadminESClient()client.DeleteIndex("tweets").Do(context.Background())// Create an index_, err := client.CreateIndex("tweets").Do(context.Background())if err != nil { // Handle error panic(err)}return nil
and then register admin panel for your elastic search model:
tweetsAdminPage := core.NewElasticSearchAdminPage( nil, func() (interface{}, interface{}) { return nil, nil }, func(modelI interface{}, ctx core.IAdminContext) *core.Form { return nil },)tweetsAdminPage.PageName = "Tweets"tweetsAdminPage.Slug = "tweets"tweetsAdminPage.BlueprintName = "tweets"tweetsAdminPage.Router = mainRoutererr := core.CurrentDashboardAdminPanel.AdminPages.AddAdminPage(tweetsAdminPage)if err != nil { panic(fmt.Errorf("error initializing tweets blueprint: %s", err))}var tweetsmodelAdminPage *core.AdminPagetweetsmodelAdminPage = core.NewElasticSearchAdminPage( tweetsAdminPage, func() (interface{}, interface{}) { return &Tweet{}, &[]*Tweet{} }, func(modelI interface{}, ctx core.IAdminContext) *core.Form { fields := []string{"User", "Message"} form := core.NewFormFromModelFromGinContext(ctx, modelI, make([]string, 0), fields, true, "", true) return form },)tweetsmodelAdminPage.PageName = "Tweets"tweetsmodelAdminPage.Slug = "tweet"tweetsmodelAdminPage.BlueprintName = "tweets"tweetsmodelAdminPage.Router = mainRoutertweetsmodelAdminPage.ModelName = "tweet"IDListDisplayField, _ := tweetsmodelAdminPage.ListDisplay.GetFieldByDisplayName("ID")IDListDisplayField.SortBy.SetSortCustomImplementation(func(afo core.IAdminFilterObjects, field *core.Field, direction int) { directionB := true if direction == -1 { directionB = false } afo.GetPaginatedQuerySet().Order(&core.ESSortBy{ FieldName: "_id", Direction: directionB, })})err = tweetsAdminPage.SubPages.AddAdminPage(tweetsmodelAdminPage)if err != nil { panic(fmt.Errorf("error initializing tweets blueprint: %s", err))}