diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 4d5570566..a7fba06b1 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -567,6 +567,7 @@ func (tx *Transaction) doSetAttrViewGroup(operation *Operation) (ret *TxErr) { logging.LogErrorf("marshal operation data failed: %s", err) return &TxErr{code: TxErrHandleAttributeView, id: operation.AvID, msg: err.Error()} } + group := &av.ViewGroup{} if err = gulu.JSON.UnmarshalJSON(data, &group); nil != err { logging.LogErrorf("unmarshal operation data failed: %s", err) @@ -590,6 +591,14 @@ func SetAttributeViewGroup(avID, blockID string, group *av.ViewGroup) (err error return err } + setAttributeViewGroup(attrView, view, group) + + err = av.SaveAttributeView(attrView) + ReloadAttrView(avID) + return +} + +func setAttributeViewGroup(attrView *av.AttributeView, view *av.View, group *av.ViewGroup) { var oldHideEmpty, firstInit, changeGroupField bool if nil != view.Group { oldHideEmpty = view.Group.HideEmpty @@ -646,10 +655,6 @@ func SetAttributeViewGroup(avID, blockID string, group *av.ViewGroup) (err error g.GroupSort = i } } - - err = av.SaveAttributeView(attrView) - ReloadAttrView(avID) - return } func (tx *Transaction) doSetAttrViewCardAspectRatio(operation *Operation) (ret *TxErr) { @@ -777,6 +782,10 @@ func ChangeAttrViewLayout(blockID, avID string, layout av.LayoutType) (err error view.Kanban.Fields = append(view.Kanban.Fields, &av.ViewKanbanField{BaseField: &av.BaseField{ID: field.ID}}) } } + + preferredGroupKey := getKanbanPreferredGroupKey(attrView) + group := &av.ViewGroup{Field: preferredGroupKey.ID} + setAttributeViewGroup(attrView, view, group) } view.LayoutType = newLayout @@ -2842,11 +2851,19 @@ func addAttrViewView(avID, viewID, blockID string, layout av.LayoutType) (err er for _, col := range firstView.Table.Columns { view.Kanban.Fields = append(view.Kanban.Fields, &av.ViewKanbanField{BaseField: &av.BaseField{ID: col.ID}}) } + case av.LayoutTypeGallery: + for _, field := range firstView.Gallery.CardFields { + view.Kanban.Fields = append(view.Kanban.Fields, &av.ViewKanbanField{BaseField: &av.BaseField{ID: field.ID}}) + } case av.LayoutTypeKanban: for _, field := range firstView.Kanban.Fields { view.Kanban.Fields = append(view.Kanban.Fields, &av.ViewKanbanField{BaseField: &av.BaseField{ID: field.ID}}) } } + + preferredGroupKey := getKanbanPreferredGroupKey(attrView) + group := &av.ViewGroup{Field: preferredGroupKey.ID} + setAttributeViewGroup(attrView, view, group) default: err = av.ErrWrongLayoutType logging.LogErrorf("wrong layout type [%s] for attribute view [%s]", layout, avID) @@ -2880,6 +2897,19 @@ func addAttrViewView(avID, viewID, blockID string, layout av.LayoutType) (err er return } +func getKanbanPreferredGroupKey(attrView *av.AttributeView) (ret *av.Key) { + for _, kv := range attrView.KeyValues { + if av.KeyTypeSelect == kv.Key.Type { + ret = kv.Key + break + } + } + if nil == ret { + ret = attrView.GetBlockKey() + } + return +} + func (tx *Transaction) doSetAttrViewViewName(operation *Operation) (ret *TxErr) { var err error avID := operation.AvID