From 2cb1839ba6b1d83bacb2845363545540b75e281c Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Wed, 3 Jun 2020 12:44:07 +0200 Subject: [PATCH] Fix config import (broken automation buttons) --- compose/importer/page.go | 28 +++++++++++++++++++++++- compose/importer/page_test.go | 25 +++++++++++++++++++++ compose/importer/testdata/page_full.yaml | 11 ++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/compose/importer/page.go b/compose/importer/page.go index 8238c22d5..df9c33f29 100644 --- a/compose/importer/page.go +++ b/compose/importer/page.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "strconv" + "strings" "github.com/pkg/errors" @@ -214,7 +215,7 @@ func (pImp *Page) castBlocks(page *types.Page, def interface{}) error { return err } - page.Blocks = append(page.Blocks, block) + page.Blocks = append(page.Blocks, pImp.sanitizeBlock(block)) return }) } @@ -246,6 +247,31 @@ func (pImp *Page) castBlockStyle(page *types.Page, n int, def interface{}) (s ty }) } +func (pImp *Page) sanitizeBlock(b types.PageBlock) types.PageBlock { + switch strings.ToLower(b.Kind) { + case "automation": + return pImp.sanitizeAutomationBlock(b) + } + + return b +} + +func (pImp *Page) sanitizeAutomationBlock(b types.PageBlock) types.PageBlock { + b.Options["sealed"] = deinterfacer.ToBool(b.Options["sealed"], false) + + bb := deinterfacer.ToSliceOfStringToInterfaceMap(b.Options["buttons"]) + + for b := range bb { + bb[b]["enabled"] = deinterfacer.ToBool(bb[b]["enabled"], true) + bb[b]["variant"] = deinterfacer.ToString(bb[b]["variant"], "primary") + bb[b]["resourceType"] = deinterfacer.ToString(bb[b]["resourceType"], "compose:record") + } + + b.Options["buttons"] = bb + + return b +} + // Get existing pages func (pImp *Page) Get(handle string) (*types.Page, error) { handle = importer.NormalizeHandle(handle) diff --git a/compose/importer/page_test.go b/compose/importer/page_test.go index 6104df888..3c7bca81a 100644 --- a/compose/importer/page_test.go +++ b/compose/importer/page_test.go @@ -38,6 +38,31 @@ func TestPageImport_CastSet(t *testing.T) { Kind: "TheTestingKind", XYWH: [4]int{11, 12, 13, 14}, }, + { + Title: "Automation", + Options: map[string]interface{}{ + "sealed": false, + "buttons": []map[string]interface{}{ + { + "label": "Lead-2-Account", + "script": "ToAccount.js:default", + "variant": "secondary", + "resourceType": "compose:record", + "enabled": false, + }, + { + "label": "Defaults", + "script": "Defaults.js:default", + "variant": "primary", + "resourceType": "compose:record", + "enabled": true, + }, + }, + }, + Style: types.PageBlockStyle{}, + Kind: "Automation", + XYWH: [4]int{21, 22, 23, 24}, + }, }) sub2 := page.set.FindByHandle("sub2") diff --git a/compose/importer/testdata/page_full.yaml b/compose/importer/testdata/page_full.yaml index f459adfc6..0cedb5cf1 100644 --- a/compose/importer/testdata/page_full.yaml +++ b/compose/importer/testdata/page_full.yaml @@ -12,6 +12,17 @@ pages: - title: B2 xywh: [ 11, 12, 13, 14 ] kind: TheTestingKind + - title: Automation + xywh: [ 21, 22, 23, 24 ] + kind: Automation + options: + buttons: + - label: Lead-2-Account + script: ToAccount.js:default + variant: secondary + enabled: false + - label: Defaults + script: Defaults.js:default - handle: sub2 title: Sub page 2 pages: