From e6264c819509fafd01b479f2aa7151d0cdffb894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Jerman?= Date: Mon, 25 Apr 2022 13:54:26 +0200 Subject: [PATCH] Add support for record page button settings --- app/boot_levels.go | 10 ++++++ compose/service/page.go | 69 +++++++++++++++++++++++++++++++----- system/types/app_settings.go | 10 ++++++ 3 files changed, 81 insertions(+), 8 deletions(-) diff --git a/app/boot_levels.go b/app/boot_levels.go index 4760676ba..99b93e3c2 100644 --- a/app/boot_levels.go +++ b/app/boot_levels.go @@ -571,6 +571,16 @@ func (app *CortezaApp) Activate(ctx context.Context) (err error) { updatePasswdSettings(app.Opt.Auth, sysService.CurrentSettings) }) + cmpService.DefaultPage.UpdateConfig(sysService.CurrentSettings) + sysService.DefaultSettings.Register("compose.ui.record-toolbar", func(ctx context.Context, current interface{}, set types.SettingValueSet) { + appSettings, is := current.(*types.AppSettings) + if !is { + return + } + + cmpService.DefaultPage.UpdateConfig(appSettings) + }) + updateDiscoverySettings(app.Opt.Discovery, service.CurrentSettings) updateLocaleSettings(app.Opt.Locale) diff --git a/compose/service/page.go b/compose/service/page.go index c9a59585f..a7da357d6 100644 --- a/compose/service/page.go +++ b/compose/service/page.go @@ -13,6 +13,7 @@ import ( "github.com/cortezaproject/corteza-server/pkg/label" "github.com/cortezaproject/corteza-server/pkg/locale" "github.com/cortezaproject/corteza-server/store" + systemTypes "github.com/cortezaproject/corteza-server/system/types" ) type ( @@ -22,6 +23,17 @@ type ( eventbus eventDispatcher store store.Storer locale ResourceTranslationsManagerService + + pageSettings *pageSettings + } + + pageSettings struct { + hideNew bool + hideEdit bool + hideSubmit bool + hideDelete bool + hideClone bool + hideBack bool } pageAccessController interface { @@ -46,11 +58,12 @@ const ( func Page() *page { return &page{ - actionlog: DefaultActionlog, - ac: DefaultAccessControl, - eventbus: eventbus.Service(), - store: DefaultStore, - locale: DefaultResourceTranslation, + actionlog: DefaultActionlog, + ac: DefaultAccessControl, + eventbus: eventbus.Service(), + store: DefaultStore, + locale: DefaultResourceTranslation, + pageSettings: &pageSettings{}, } } @@ -144,6 +157,11 @@ func (svc page) search(ctx context.Context, filter types.PageFilter) (set types. return err } + set.Walk(func(p *types.Page) error { + preparePageConfig(svc.pageSettings, p) + return nil + }) + // i18n tag := locale.GetAcceptLanguageFromContext(ctx) set.Walk(func(p *types.Page) error { @@ -505,6 +523,8 @@ func (svc page) lookup(ctx context.Context, namespaceID uint64, lookup func(*pag return err } + preparePageConfig(svc.pageSettings, p) + p.DecodeTranslations(svc.locale.Locale().ResourceTranslations(locale.GetAcceptLanguageFromContext(ctx), p.ResourceTranslation())) aProps.setPage(p) @@ -664,22 +684,55 @@ func (svc page) handleUndelete(ctx context.Context, ns *types.Namespace, m *type return pageChanged, nil } -func loadPage(ctx context.Context, s store.Storer, namespaceID, pageID uint64) (ns *types.Namespace, m *types.Page, err error) { +func preparePageConfig(ss *pageSettings, p *types.Page) { + if p.ModuleID == 0 { + p.Config.Buttons = nil + return + } + + p.Config.Buttons = &types.PageButtonConfig{} + if ss == nil { + return + } + p.Config.Buttons.New.Enabled = !ss.hideNew + p.Config.Buttons.Edit.Enabled = !ss.hideEdit + p.Config.Buttons.Submit.Enabled = !ss.hideSubmit + p.Config.Buttons.Delete.Enabled = !ss.hideDelete + p.Config.Buttons.Clone.Enabled = !ss.hideClone + p.Config.Buttons.Back.Enabled = !ss.hideBack +} + +func (svc *page) UpdateConfig(ss *systemTypes.AppSettings) { + a := ss.Compose.UI.RecordToolbar + + svc.pageSettings = &pageSettings{ + hideNew: a.HideNew, + hideEdit: a.HideEdit, + hideSubmit: a.HideSubmit, + hideDelete: a.HideDelete, + hideClone: a.HideClone, + hideBack: a.HideBack, + } +} + +func loadPage(ctx context.Context, s store.Storer, namespaceID, pageID uint64) (ns *types.Namespace, p *types.Page, err error) { if pageID == 0 { return nil, nil, PageErrInvalidID() } if ns, err = loadNamespace(ctx, s, namespaceID); err == nil { - if m, err = store.LookupComposePageByID(ctx, s, pageID); errors.IsNotFound(err) { + if p, err = store.LookupComposePageByID(ctx, s, pageID); errors.IsNotFound(err) { err = PageErrNotFound() } } + preparePageConfig(nil, p) + if err != nil { return nil, nil, err } - if namespaceID != m.NamespaceID { + if namespaceID != p.NamespaceID { // Make sure chart belongs to the right namespace return nil, nil, PageErrNotFound() } diff --git a/system/types/app_settings.go b/system/types/app_settings.go index 8de2dc412..498264d50 100644 --- a/system/types/app_settings.go +++ b/system/types/app_settings.go @@ -173,6 +173,16 @@ type ( // Hide namespace link at the end of the list HideNamespaceListLink bool `json:"hideNamespaceListLink"` } `kv:"sidebar,final" json:"sidebar"` + + // Record toolbar specific settings + RecordToolbar struct { + HideNew bool `json:"hideNew"` + HideEdit bool `json:"hideEdit"` + HideSubmit bool `json:"hideSubmit"` + HideDelete bool `json:"hideDelete"` + HideClone bool `json:"hideClone"` + HideBack bool `json:"hideBack"` + } `kv:"record-toolbar,final" json:"record-toolbar"` } `kv:"ui" json:"ui"` // Record related settings