From 19133a4cb3407281b7986083712b99c8486ca72e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Jerman?= Date: Mon, 20 Mar 2023 16:44:16 +0100 Subject: [PATCH] Add support for expr & action persistence on layouts --- server/compose/service/page_layout.go | 31 --------------------------- server/compose/types/page_layout.go | 27 +++++++++++++++++------ 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/server/compose/service/page_layout.go b/server/compose/service/page_layout.go index 27da7e074..213ccd5ff 100644 --- a/server/compose/service/page_layout.go +++ b/server/compose/service/page_layout.go @@ -151,11 +151,6 @@ func (svc pageLayout) search(ctx context.Context, filter types.PageLayoutFilter) return err } - set.Walk(func(p *types.PageLayout) error { - preparePageLayoutConfig(svc.pageLayoutSettings, p) - return nil - }) - // i18n tag := locale.GetAcceptLanguageFromContext(ctx) set.Walk(func(p *types.PageLayout) error { @@ -224,8 +219,6 @@ func (svc pageLayout) Create(ctx context.Context, new *types.PageLayout) (*types // return // } - preparePageLayoutConfig(svc.pageLayoutSettings, new) - if err = label.Create(ctx, s, new); err != nil { return } @@ -331,8 +324,6 @@ func (svc pageLayout) updater(ctx context.Context, s store.Storer, ns *types.Nam // return // } - preparePageLayoutConfig(svc.pageLayoutSettings, res) - if changes&pageLayoutLabelsChanged > 0 { if err = label.Update(ctx, s, res); err != nil { return @@ -368,8 +359,6 @@ func (svc pageLayout) lookup(ctx context.Context, namespaceID uint64, lookup fun return err } - preparePageLayoutConfig(svc.pageLayoutSettings, p) - p.DecodeTranslations(svc.locale.Locale().ResourceTranslations(locale.GetAcceptLanguageFromContext(ctx), p.ResourceTranslation())) aProps.setPageLayout(p) @@ -539,24 +528,6 @@ func (svc pageLayout) handleUndelete(ctx context.Context, ns *types.Namespace, m return pageLayoutChanged, nil } -func preparePageLayoutConfig(ss *pageLayoutSettings, p *types.PageLayout) { - if p.ModuleID == 0 { - p.Config.Buttons = nil - return - } - - p.Config.Buttons = &types.PageLayoutButtonConfig{} - 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 *pageLayout) UpdateConfig(ss *systemTypes.AppSettings) { a := ss.Compose.UI.RecordToolbar @@ -602,8 +573,6 @@ func loadPageLayout(ctx context.Context, s store.ComposePageLayouts, namespaceID return nil, PageLayoutErrNotFound() } - preparePageLayoutConfig(nil, res) - return } diff --git a/server/compose/types/page_layout.go b/server/compose/types/page_layout.go index a1c71120f..4f8b2bcc3 100644 --- a/server/compose/types/page_layout.go +++ b/server/compose/types/page_layout.go @@ -63,7 +63,24 @@ type ( } PageLayoutConfig struct { - Buttons *PageLayoutButtonConfig `json:"buttons,omitempty"` + Visibility PageLayoutVisibility `json:"visibility"` + Actions []PageLayoutAction `json:"actions"` + } + + PageLayoutVisibility struct { + Expression string + Roles []string + } + + PageLayoutAction struct { + ActionID uint64 `json:"actionID,string"` + Placement string + Meta any + + // Kind and Params specify the action's behavior and the parameters it + // can use for execution + Kind string + Params any } PageLayoutFilter struct { @@ -108,12 +125,8 @@ func (set PageLayoutSet) FindByHandle(handle string) *PageLayout { return nil } -func (bb *PageLayoutConfig) Scan(src any) error { return sql.ParseJSON(src, bb) } -func (bb PageLayoutConfig) Value() (driver.Value, error) { - // We're not saving button config to the DB; no need for it - bb.Buttons = nil - return json.Marshal(bb) -} +func (bb *PageLayoutConfig) Scan(src any) error { return sql.ParseJSON(src, bb) } +func (bb PageLayoutConfig) Value() (driver.Value, error) { return json.Marshal(bb) } func (vv *PageLayoutMeta) Scan(src any) error { return sql.ParseJSON(src, vv) } func (vv *PageLayoutMeta) Value() (driver.Value, error) { return json.Marshal(vv) }