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:
parent
249432845e
commit
dbb66a044a
6 changed files with 1270 additions and 1270 deletions
|
@ -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)
|
||||
|
|
111
core/space.go
111
core/space.go
|
@ -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
11
core/spaceview/order.go
Normal 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
|
||||
}
|
|
@ -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 |
|
||||
|
||||
|
||||
|
||||
|
|
2398
pb/commands.pb.go
2398
pb/commands.pb.go
File diff suppressed because it is too large
Load diff
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue