From 02d47e1632495fa6bebeeee1ac71d4c51e94bd07 Mon Sep 17 00:00:00 2001 From: kirillston Date: Tue, 25 Apr 2023 18:17:59 +0200 Subject: [PATCH] GO-1000 Create space dashboard page once --- core/block/editor/workspaces.go | 28 +++++++-------------------- core/block/service.go | 19 ------------------ util/builtinobjects/builtinobjects.go | 27 ++++++++++++++++++-------- 3 files changed, 26 insertions(+), 48 deletions(-) diff --git a/core/block/editor/workspaces.go b/core/block/editor/workspaces.go index de02d426c..28ecf1ee3 100644 --- a/core/block/editor/workspaces.go +++ b/core/block/editor/workspaces.go @@ -1,7 +1,6 @@ package editor import ( - "context" "fmt" "strings" "time" @@ -53,13 +52,12 @@ var objectTypeToCollection = map[bundle.TypeKey]string{ type Workspaces struct { *SubObjectCollection - app *app.App - DetailsModifier DetailsModifier - templateCloner templateCloner - dashboardIDGetter dashboardIDGetter - sourceService source.Service - anytype core.Service - objectStore objectstore.ObjectStore + app *app.App + DetailsModifier DetailsModifier + templateCloner templateCloner + sourceService source.Service + anytype core.Service + objectStore objectstore.ObjectStore } func NewWorkspace( @@ -99,9 +97,7 @@ func (p *Workspaces) Init(ctx *smartblock.InitContext) (err error) { p.app = ctx.App // TODO pass as explicit deps p.sourceService = p.app.MustComponent(source.CName).(source.Service) - treeGetter := p.app.MustComponent(treegetter.CName) - p.templateCloner = treeGetter.(templateCloner) - p.dashboardIDGetter = treeGetter.(dashboardIDGetter) + p.templateCloner = p.app.MustComponent(treegetter.CName).(templateCloner) p.AddHook(p.updateSubObject, smartblock.HookAfterApply) @@ -131,18 +127,12 @@ func (p *Workspaces) Init(ctx *smartblock.InitContext) (err error) { } } - spaceDashboardID, err := p.dashboardIDGetter.GetSpaceDashboardID(ctx.Ctx) - if err != nil { - log.Errorf("failed to get Space Dashboard ID: %v", err) - } - defaultValue := &types.Struct{Fields: map[string]*types.Value{bundle.RelationKeyWorkspaceId.String(): pbtypes.String(p.Id())}} return smartblock.ObjectApplyTemplate(p, ctx.State, template.WithEmpty, template.WithTitle, template.WithFeaturedRelations, template.WithDetail(bundle.RelationKeyIsHidden, pbtypes.Bool(true)), - template.WithDetail(bundle.RelationKeySpaceDashboardId, pbtypes.String(spaceDashboardID)), template.WithDetail(bundle.RelationKeySpaceAccessibility, pbtypes.Int64(0)), template.WithForcedDetail(bundle.RelationKeyLayout, pbtypes.Float64(float64(model.ObjectType_space))), template.WithForcedDetail(bundle.RelationKeyType, pbtypes.String(bundle.TypeKeySpace.URL())), @@ -156,10 +146,6 @@ type templateCloner interface { TemplateClone(id string) (templateID string, err error) } -type dashboardIDGetter interface { - GetSpaceDashboardID(ctx context.Context) (string, error) -} - type WorkspaceParameters struct { IsHighlighted bool WorkspaceId string diff --git a/core/block/service.go b/core/block/service.go index 5cdd843e2..f321884e2 100644 --- a/core/block/service.go +++ b/core/block/service.go @@ -137,8 +137,6 @@ type Service struct { fileStore filestore.FileStore tempDirProvider core.TempDirProvider sbtProvider typeprovider.SmartBlockTypeProvider - - spaceDashboardID string } func (s *Service) Name() string { @@ -170,22 +168,6 @@ func (s *Service) Run(ctx context.Context) (err error) { return } -func (s *Service) GetSpaceDashboardID(ctx context.Context) (string, error) { - if s.spaceDashboardID == "" { - obj, release, err := s.CreateTreeObject(ctx, coresb.SmartBlockTypePage, func(id string) *smartblock.InitContext { - return &smartblock.InitContext{ - Ctx: ctx, - } - }) - if err != nil { - return "", err - } - release() - s.spaceDashboardID = obj.Id() - } - return s.spaceDashboardID, nil -} - func (s *Service) Anytype() core.Service { return s.anytype } @@ -630,7 +612,6 @@ func (s *Service) SetWorkspaceDashboardId(ctx *session.Context, workspaceId stri }, false); err != nil { return err } - s.spaceDashboardID = id return nil }) return id, nil diff --git a/util/builtinobjects/builtinobjects.go b/util/builtinobjects/builtinobjects.go index bf08052d1..ef6873790 100644 --- a/util/builtinobjects/builtinobjects.go +++ b/util/builtinobjects/builtinobjects.go @@ -29,6 +29,7 @@ import ( "github.com/anytypeio/go-anytype-middleware/core/relation/relationutils" "github.com/anytypeio/go-anytype-middleware/pb" "github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle" + "github.com/anytypeio/go-anytype-middleware/pkg/lib/core" "github.com/anytypeio/go-anytype-middleware/pkg/lib/core/smartblock" coresb "github.com/anytypeio/go-anytype-middleware/pkg/lib/core/smartblock" "github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr" @@ -64,6 +65,7 @@ type builtinObjects struct { service *block.Service relService relation2.Service sbtProvider typeprovider.SmartBlockTypeProvider + coreService core.Service createBuiltinObjects bool idsMap map[string]string @@ -80,6 +82,7 @@ func (b *builtinObjects) Init(a *app.App) (err error) { b.service = a.MustComponent(block.CName).(*block.Service) b.createBuiltinObjects = a.MustComponent(config.CName).(*config.Config).CreateBuiltinObjects b.relService = a.MustComponent(relation2.CName).(relation2.Service) + b.coreService = a.MustComponent(core.CName).(core.Service) b.cancel = func() {} return } @@ -133,14 +136,6 @@ func (b *builtinObjects) inject(ctx context.Context) (err error) { b.idsMap[id] = id continue } - if id == builtInDashboardObjectID { - b.idsMap[id], err = b.service.GetSpaceDashboardID(ctx) - if err != nil { - return err - } - isSpaceDashboardIDFound = true - continue - } // create object obj, release, err := b.service.CreateTreeObject(ctx, sbt, func(id string) *sb.InitContext { @@ -152,6 +147,22 @@ func (b *builtinObjects) inject(ctx context.Context) (err error) { return err } newId := obj.Id() + + if id == builtInDashboardObjectID { + isSpaceDashboardIDFound = true + if err2 := b.service.SetDetails(nil, pb.RpcObjectSetDetailsRequest{ + ContextId: b.coreService.PredefinedBlocks().Account, + Details: []*pb.RpcObjectSetDetailsDetail{ + { + Key: bundle.RelationKeySpaceDashboardId.String(), + Value: pbtypes.String(newId), + }, + }, + }); err2 != nil { + log.Errorf("Failed to set SpaceDashboardId relation to Account object: %s", err2.Error()) + } + } + release() b.idsMap[id] = newId }