diff --git a/kernel/av/av.go b/kernel/av/av.go index e689a8db7..9c7c708a8 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -99,11 +99,12 @@ type KeySelectOption struct { } type Value struct { - ID string `json:"id,omitempty"` - KeyID string `json:"keyID,omitempty"` - BlockID string `json:"blockID,omitempty"` - Type KeyType `json:"type,omitempty"` - IsDetached bool `json:"isDetached,omitempty"` + ID string `json:"id,omitempty"` + KeyID string `json:"keyID,omitempty"` + BlockID string `json:"blockID,omitempty"` + Type KeyType `json:"type,omitempty"` + IsDetached bool `json:"isDetached,omitempty"` + IsInitialized bool `json:"isInitialized,omitempty"` Block *ValueBlock `json:"block,omitempty"` Text *ValueText `json:"text,omitempty"` diff --git a/kernel/av/table.go b/kernel/av/table.go index 72ddaf67b..a829dec2a 100644 --- a/kernel/av/table.go +++ b/kernel/av/table.go @@ -508,6 +508,16 @@ type TableRow struct { Cells []*TableCell `json:"cells"` } +func (row *TableRow) GetBlockValue() (ret *Value) { + for _, cell := range row.Cells { + if KeyTypeBlock == cell.ValueType { + ret = cell.Value + break + } + } + return +} + func (table *Table) GetType() LayoutType { return LayoutTypeTable } @@ -569,6 +579,12 @@ func (table *Table) FilterRows() { rows := []*TableRow{} for _, row := range table.Rows { + block := row.GetBlockValue() + if !block.IsInitialized && nil != block.Block && "" == block.Block.Content && block.IsDetached { + rows = append(rows, row) + continue + } + pass := true for j, index := range colIndexes { operator := table.Filters[j].Operator diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index afe6667ce..0f14c3c22 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -430,7 +430,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a ial := GetBlockAttrs(row.ID) updatedStr := ial["updated"] if "" == updatedStr { - block := getTableRowBlockValue(row) + block := row.GetBlockValue() cell.Value.Updated = av.NewFormattedValueUpdated(block.Block.Updated, 0, av.UpdatedFormatNone) cell.Value.Updated.IsNotEmpty = true } else { @@ -475,16 +475,6 @@ func getRowBlockValue(keyValues []*av.KeyValues) (ret *av.Value) { return } -func getTableRowBlockValue(row *av.TableRow) (ret *av.Value) { - for _, cell := range row.Cells { - if av.KeyTypeBlock == cell.ValueType { - ret = cell.Value - break - } - } - return -} - func (tx *Transaction) doSetAttrViewName(operation *Operation) (ret *TxErr) { err := setAttributeViewName(operation) if nil != err { @@ -693,7 +683,7 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre content = getNodeRefText(node) } now := time.Now().UnixMilli() - value := &av.Value{ID: ast.NewNodeID(), KeyID: blockValues.Key.ID, BlockID: blockID, Type: av.KeyTypeBlock, IsDetached: operation.IsDetached, Block: &av.ValueBlock{ID: blockID, Content: content, Created: now, Updated: now}} + value := &av.Value{ID: ast.NewNodeID(), KeyID: blockValues.Key.ID, BlockID: blockID, Type: av.KeyTypeBlock, IsDetached: operation.IsDetached, IsInitialized: false, Block: &av.ValueBlock{ID: blockID, Content: content, Created: now, Updated: now}} blockValues.Values = append(blockValues.Values, value) if !operation.IsDetached { @@ -1301,6 +1291,7 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string, for _, v := range kv.Values { if rowID == v.Block.ID { v.Block.Updated = time.Now().UnixMilli() + v.IsInitialized = true break } }