1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-09 09:35:00 +09:00

GO-4367: change api

Signed-off-by: AnastasiaShemyakinskaya <shem98a@mail.ru>
This commit is contained in:
AnastasiaShemyakinskaya 2024-11-29 11:44:47 +01:00
parent 249432845e
commit dbb66a044a
No known key found for this signature in database
GPG key ID: CCD60ED83B103281
6 changed files with 1270 additions and 1270 deletions

View file

@ -27,7 +27,7 @@ var spaceViewLog = logging.Logger("core.block.editor.spaceview")
var ErrIncorrectSpaceInfo = errors.New("space info is incorrect")
var lx = lexid.Must(lexid.CharsAll, 4, 10)
var lx = lexid.Must(lexid.CharsAll, 4, 1000)
// required relations for spaceview beside the bundle.RequiredInternalRelations
var spaceViewRequiredRelations = []domain.RelationKey{
@ -316,10 +316,20 @@ func (s *SpaceView) UpdateLastOpenedDate() error {
return s.Apply(st, smartblock.NoHistory, smartblock.NoEvent, smartblock.SkipIfNoChanges, smartblock.KeepInternalFlags)
}
func (s *SpaceView) SetOrder(prevViewOrderId string) (string, error) {
st := s.NewState()
spaceOrderId := lx.Next(prevViewOrderId)
st.SetDetail(bundle.RelationKeySpaceOrder.String(), pbtypes.String(spaceOrderId))
return spaceOrderId, s.Apply(st)
}
func (s *SpaceView) SetAfterGivenView(viewOrderId string) (string, error) {
st := s.NewState()
spaceOrderId := pbtypes.GetString(st.Details(), bundle.RelationKeySpaceOrder.String())
if spaceOrderId == "" || viewOrderId > spaceOrderId {
if spaceOrderId == "" {
return spaceOrderId, nil
}
if viewOrderId > spaceOrderId {
spaceOrderId = lx.Next(viewOrderId)
st.SetDetail(bundle.RelationKeySpaceOrder.String(), pbtypes.String(spaceOrderId))
return spaceOrderId, s.Apply(st)

View file

@ -430,59 +430,92 @@ func permissionsChange(ctx context.Context, spaceId string, changes []*model.Par
}
func setSpaceViewOrder(og cache.ObjectGetter, request *pb.RpcSpaceSetOrderRequest) error {
spaceViewOrder := request.GetSpaceViewOrder()
if len(spaceViewOrder) < 2 {
return fmt.Errorf("insufficient space views for reordering")
}
spaceViewID := request.SpaceViewId
// given space view is the first view in the order
if spaceViewOrder[0] == spaceViewID {
return setViewAtBeginning(og, request.SpaceViewId, spaceViewOrder[1])
}
// given space view is the last view in the order
if spaceViewOrder[len(spaceViewOrder)-1] == spaceViewID {
return setViewAtEnd(og, spaceViewOrder, request.SpaceViewId, spaceViewOrder[len(spaceViewOrder)-2])
}
return adjustOrderForViews(og, spaceViewOrder, request.SpaceViewId)
}
func setViewAtBeginning(og cache.ObjectGetter, spaceViewId, afterViewId string) error {
var (
nextOrderID string
prevOrderId string
err error
)
for _, id := range request.GetPreviousIds() {
err = cache.Do[*editor.SpaceView](og, id, func(sv *editor.SpaceView) error {
prevOrderId, err = sv.SetAfterGivenView(prevOrderId)
if err != nil {
return fmt.Errorf("failed to update space order of view, %w", err)
}
return nil
})
err = cache.Do[*editor.SpaceView](og, afterViewId, func(sv *editor.SpaceView) error {
nextOrderID, err = sv.SetAfterGivenView(prevOrderId)
if err != nil {
return err
}
}
if request.AfterId != "" {
return setViewBetween(og, request.SpaceViewId, request.AfterId, prevOrderId)
}
return setViewAfter(og, request.SpaceViewId, prevOrderId)
}
func setViewAfter(og cache.ObjectGetter, spaceViewId, prevLexId string) error {
err := cache.Do[*editor.SpaceView](og, spaceViewId, func(sv *editor.SpaceView) error {
_, err := sv.SetAfterGivenView(prevLexId)
return err
})
if err != nil {
return err
}
return nil
}
func setViewBetween(og cache.ObjectGetter, spaceViewId, afterViewId, prevOrderId string) error {
var (
after string
err error
)
err = cache.Do[*editor.SpaceView](og, afterViewId, func(sv *editor.SpaceView) error {
after, err = sv.SetAfterGivenView(prevOrderId)
if err != nil {
return fmt.Errorf("failed to update space order of view, %w", err)
}
return nil
})
if err != nil {
return err
}
err = cache.Do[*editor.SpaceView](og, spaceViewId, func(sv *editor.SpaceView) error {
return sv.SetBetweenViews(prevOrderId, after)
return cache.Do[*editor.SpaceView](og, spaceViewId, func(view *editor.SpaceView) error {
if nextOrderID == "" {
_, err = view.SetOrder(nextOrderID)
return err
}
return view.SetBetweenViews("", nextOrderID)
})
if err != nil {
}
func setViewAtEnd(og cache.ObjectGetter, order []string, spaceViewId, afterSpaceView string) error {
var (
lastOrderId string
err error
)
// get the order for the previous view in the list.
cacheErr := cache.Do[*editor.SpaceView](og, afterSpaceView, func(sv *editor.SpaceView) error {
lastOrderId, err = sv.SetAfterGivenView(lastOrderId)
if err != nil {
return fmt.Errorf("failed to update space order of view, %w", err)
}
return nil
})
if cacheErr != nil {
return cacheErr
}
// if view doesn't have order in details, then set it for all previous ids and get lastOrderId
if lastOrderId == "" {
return adjustOrderForViews(og, order, spaceViewId)
}
return cache.Do[*editor.SpaceView](og, spaceViewId, func(sv *editor.SpaceView) error {
_, err := sv.SetAfterGivenView(lastOrderId)
return err
})
}
func adjustOrderForViews(og cache.ObjectGetter, order []string, spaceViewId string) error {
var (
prevOrderId string
err error
)
for _, id := range order {
cacheErr := cache.Do[*editor.SpaceView](og, id, func(sv *editor.SpaceView) error {
prevOrderId, err = sv.SetOrder(prevOrderId)
if err != nil {
return err
}
return nil
})
if cacheErr != nil {
return cacheErr
}
if id == spaceViewId {
break
}
}
return nil
}

11
core/spaceview/order.go Normal file
View file

@ -0,0 +1,11 @@
package spaceview
import "github.com/anyproto/anytype-heart/core/block/cache"
type OrderSetter interface {
SetSpaceViewOrder(spaceViewId string, order []string) error
}
type orderSetter struct {
og cache.ObjectGetter
}

View file

@ -18949,8 +18949,7 @@ Available undo/redo operations
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| spaceViewId | [string](#string) | | |
| previousIds | [string](#string) | repeated | the ids of the views that are located before the view with spaceViewId in the resulting order |
| afterId | [string](#string) | | the id of the view that follows the view with spaceViewId in the resulting order |
| spaceViewOrder | [string](#string) | repeated | result order of space view ids |

File diff suppressed because it is too large Load diff

View file

@ -495,8 +495,7 @@ message Rpc {
message SetOrder {
message Request {
string spaceViewId = 1;
repeated string previousIds = 2; // the ids of the views that are located before the view with spaceViewId in the resulting order
string afterId = 3; // the id of the view that follows the view with spaceViewId in the resulting order
repeated string spaceViewOrder = 2; // result order of space view ids
}
message Response {