From 0bd764dc2d8c46467aea0b68c2bdd21da7263e5e Mon Sep 17 00:00:00 2001 From: molon <3739161+molon@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:53:09 +0800 Subject: [PATCH 1/4] pagebuilder: keep scrollTop after add/delete row --- go.sum | 2 -- pagebuilder/builder.go | 23 +++++++++++++++-------- pagebuilder/editor.go | 12 ++++++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/go.sum b/go.sum index 4c318087f..450a8b920 100644 --- a/go.sum +++ b/go.sum @@ -319,8 +319,6 @@ github.com/qor5/web v1.2.3 h1:OtyfFaHWTAPBz8aYvZL2/yiVf77HvlPwRkmBweKCiWs= github.com/qor5/web v1.2.3/go.mod h1:gwAoUC1cQ9y5Vm3zZmWTq9t1iLOrQH+sIvJUpG6V61w= github.com/qor5/web/v3 v3.0.8-0.20240910062935-ccbcae3ec022 h1:Xom8HTMTWUvJ8qEV4fNpXDlT8vzzmK6bzKjOaq1EgGQ= github.com/qor5/web/v3 v3.0.8-0.20240910062935-ccbcae3ec022/go.mod h1:32vdHHcZb2JimlcaclW9hLUyimdXjrllZDHTh3rl6d0= -github.com/qor5/x/v3 v3.0.9-0.20240910094909-a5d7a2263c6e h1:PyzHSaRrhuIbDMri1VNk9YYl6XtnMMmDMWyoh6thtLY= -github.com/qor5/x/v3 v3.0.9-0.20240910094909-a5d7a2263c6e/go.mod h1:a+cSXd5UjIOgzhhpvfDxDUdjmKLKeDLeoubcQ9dkxtE= github.com/qor5/x/v3 v3.0.9-0.20240910095727-21d046261590 h1:ZAbvT8GfpSPUKfB9ZWizka6z+U7bZZunrclnOm/VvjY= github.com/qor5/x/v3 v3.0.9-0.20240910095727-21d046261590/go.mod h1:a+cSXd5UjIOgzhhpvfDxDUdjmKLKeDLeoubcQ9dkxtE= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= diff --git a/pagebuilder/builder.go b/pagebuilder/builder.go index a7f5b611d..1375424ca 100644 --- a/pagebuilder/builder.go +++ b/pagebuilder/builder.go @@ -926,14 +926,21 @@ func (b *ContainerBuilder) Model(m interface{}) *ContainerBuilder { if portalName := ctx.Param(presets.ParamPortalName); portalName != pageBuilderRightContentPortal { return nil } - return web.Listen( - b.mb.NotifRowUpdated(), - web.Plaid(). - URL(b.mb.Info().ListingHref()). - EventFunc(actions.Update). - Query(presets.ParamID, web.Var("payload.id")). - ThenScript(web.Plaid().EventFunc(ReloadRenderPageOrTemplateEvent).Query(paramStatus, ctx.Param(paramStatus)).MergeQuery(true).Go()). - Go(), + return h.Components( + h.Div().Attr("v-on-mounted", `() => { + if (!!locals.__rightContentPortalScrollTo) { + locals.__rightContentPortalScrollTo(); + } + }`), + web.Listen( + b.mb.NotifRowUpdated(), + web.Plaid(). + URL(b.mb.Info().ListingHref()). + EventFunc(actions.Update). + Query(presets.ParamID, web.Var("payload.id")). + ThenScript(web.Plaid().EventFunc(ReloadRenderPageOrTemplateEvent).Query(paramStatus, ctx.Param(paramStatus)).MergeQuery(true).Go()). + Go(), + ), ) }) val := reflect.ValueOf(m) diff --git a/pagebuilder/editor.go b/pagebuilder/editor.go index 9e101e002..7be9b783d 100644 --- a/pagebuilder/editor.go +++ b/pagebuilder/editor.go @@ -174,6 +174,18 @@ func (b *Builder) Editor(m *ModelBuilder) web.PageFunc { Permanent(true). Width(350), VNavigationDrawer( + h.Div().Attr("v-on-mounted", fmt.Sprintf(`({el}) => { + el.__handleScroll = (event) => { + locals.__rightContentPortalScrollTop = event.target.scrollTop; + } + el.parentElement.addEventListener('scroll', el.__handleScroll) + + locals.__rightContentPortalScrollTo = () => { + el.parentElement.scrollTop = locals.__rightContentPortalScrollTop; + } + }`)).Attr("v-on-unmounted", `({el}) => { + el.parentElement.removeEventListener('scroll', el.__handleScroll); + }`), web.Portal(editContainerDrawer).Name(pageBuilderRightContentPortal), ).Location(LocationRight). Permanent(true). From 3e1c70557d97035eba946f96266ed4b099fa673c Mon Sep 17 00:00:00 2001 From: molon <3739161+molon@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:55:52 +0800 Subject: [PATCH 2/4] pagebuilder: __rightContentPortalScrollTo => __pageBuilderRightContentScrollTop --- pagebuilder/builder.go | 4 ++-- pagebuilder/editor.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pagebuilder/builder.go b/pagebuilder/builder.go index 1375424ca..dbd1defc6 100644 --- a/pagebuilder/builder.go +++ b/pagebuilder/builder.go @@ -928,8 +928,8 @@ func (b *ContainerBuilder) Model(m interface{}) *ContainerBuilder { } return h.Components( h.Div().Attr("v-on-mounted", `() => { - if (!!locals.__rightContentPortalScrollTo) { - locals.__rightContentPortalScrollTo(); + if (!!locals.__pageBuilderRightContentScrollTop) { + locals.__pageBuilderRightContentScrollTop(); } }`), web.Listen( diff --git a/pagebuilder/editor.go b/pagebuilder/editor.go index 7be9b783d..0caff5250 100644 --- a/pagebuilder/editor.go +++ b/pagebuilder/editor.go @@ -176,12 +176,12 @@ func (b *Builder) Editor(m *ModelBuilder) web.PageFunc { VNavigationDrawer( h.Div().Attr("v-on-mounted", fmt.Sprintf(`({el}) => { el.__handleScroll = (event) => { - locals.__rightContentPortalScrollTop = event.target.scrollTop; + locals.__pageBuilderRightContentScrollTopp = event.target.scrollTop; } el.parentElement.addEventListener('scroll', el.__handleScroll) - locals.__rightContentPortalScrollTo = () => { - el.parentElement.scrollTop = locals.__rightContentPortalScrollTop; + locals.__pageBuilderRightContentScrollTop = () => { + el.parentElement.scrollTop = locals.__pageBuilderRightContentScrollTopp; } }`)).Attr("v-on-unmounted", `({el}) => { el.parentElement.removeEventListener('scroll', el.__handleScroll); From b50bf50b2496cdde3aac97180881b3f57676d36d Mon Sep 17 00:00:00 2001 From: molon <3739161+molon@users.noreply.github.com> Date: Wed, 11 Sep 2024 18:00:29 +0800 Subject: [PATCH 3/4] pagebuilder: improve __pageBuilderRightContentScroll names --- pagebuilder/builder.go | 4 ++-- pagebuilder/editor.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pagebuilder/builder.go b/pagebuilder/builder.go index dbd1defc6..fd589ec62 100644 --- a/pagebuilder/builder.go +++ b/pagebuilder/builder.go @@ -928,8 +928,8 @@ func (b *ContainerBuilder) Model(m interface{}) *ContainerBuilder { } return h.Components( h.Div().Attr("v-on-mounted", `() => { - if (!!locals.__pageBuilderRightContentScrollTop) { - locals.__pageBuilderRightContentScrollTop(); + if (!!locals.__pageBuilderRightContentKeepScroll) { + locals.__pageBuilderRightContentKeepScroll(); } }`), web.Listen( diff --git a/pagebuilder/editor.go b/pagebuilder/editor.go index 0caff5250..20cca1bed 100644 --- a/pagebuilder/editor.go +++ b/pagebuilder/editor.go @@ -176,12 +176,12 @@ func (b *Builder) Editor(m *ModelBuilder) web.PageFunc { VNavigationDrawer( h.Div().Attr("v-on-mounted", fmt.Sprintf(`({el}) => { el.__handleScroll = (event) => { - locals.__pageBuilderRightContentScrollTopp = event.target.scrollTop; + locals.__pageBuilderRightContentScrollTop = event.target.scrollTop; } el.parentElement.addEventListener('scroll', el.__handleScroll) - locals.__pageBuilderRightContentScrollTop = () => { - el.parentElement.scrollTop = locals.__pageBuilderRightContentScrollTopp; + locals.__pageBuilderRightContentKeepScroll = () => { + el.parentElement.scrollTop = locals.__pageBuilderRightContentScrollTop; } }`)).Attr("v-on-unmounted", `({el}) => { el.parentElement.removeEventListener('scroll', el.__handleScroll); From 338acb032dcf1d2ffa86a6537896ab2f8cec4ed3 Mon Sep 17 00:00:00 2001 From: molon <3739161+molon@users.noreply.github.com> Date: Wed, 11 Sep 2024 18:02:27 +0800 Subject: [PATCH 4/4] pagebuilder: add display:none for scroll keep related --- pagebuilder/builder.go | 2 +- pagebuilder/editor.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pagebuilder/builder.go b/pagebuilder/builder.go index fd589ec62..0866620ed 100644 --- a/pagebuilder/builder.go +++ b/pagebuilder/builder.go @@ -927,7 +927,7 @@ func (b *ContainerBuilder) Model(m interface{}) *ContainerBuilder { return nil } return h.Components( - h.Div().Attr("v-on-mounted", `() => { + h.Div().Style("display:none").Attr("v-on-mounted", `() => { if (!!locals.__pageBuilderRightContentKeepScroll) { locals.__pageBuilderRightContentKeepScroll(); } diff --git a/pagebuilder/editor.go b/pagebuilder/editor.go index 20cca1bed..95c52c677 100644 --- a/pagebuilder/editor.go +++ b/pagebuilder/editor.go @@ -174,7 +174,7 @@ func (b *Builder) Editor(m *ModelBuilder) web.PageFunc { Permanent(true). Width(350), VNavigationDrawer( - h.Div().Attr("v-on-mounted", fmt.Sprintf(`({el}) => { + h.Div().Style("display:none").Attr("v-on-mounted", fmt.Sprintf(`({el}) => { el.__handleScroll = (event) => { locals.__pageBuilderRightContentScrollTop = event.target.scrollTop; }