diff --git a/frontend-html/src/model/entities/DataView.ts b/frontend-html/src/model/entities/DataView.ts index e0f44fb85d..c70897326b 100644 --- a/frontend-html/src/model/entities/DataView.ts +++ b/frontend-html/src/model/entities/DataView.ts @@ -90,7 +90,10 @@ import { ScreenFocusManager } from "model/entities/ScreenFocusManager"; import {TabIndex} from "./TabIndexOwner"; class SavedViewState { - constructor(public selectedRowId: string | undefined) { + constructor( + public selectedRowId: string | undefined, + public selectedRowIndex: number | undefined + ) { } } @@ -740,7 +743,6 @@ export class DataView implements IDataView { yield*this.setSelectedRowId(this.dataTable.getRowId(row)); } - *setSelectedRowId(id: string | undefined): Generator { if (this.selectedRowId === id) { return; @@ -761,16 +763,33 @@ export class DataView implements IDataView { @action.bound saveViewState(): void { - this.viewStateStack.push(new SavedViewState(this.selectedRowId)); + this.viewStateStack.push( + new SavedViewState( + this.selectedRowId, + this.getRowIndexById(this.selectedRowId) + ) + ); } @action.bound *restoreViewState() { const state = this.viewStateStack.pop(); if (state && state.selectedRowId) { - yield*this.setSelectedRowId(state.selectedRowId); + const row = this.dataTable.getRowById(state.selectedRowId); + if(row) { + yield*this.setSelectedRowId(state.selectedRowId); + } + else if (state.selectedRowIndex) { + const nextRow = this.tableRows[state.selectedRowIndex]; + const isDataRow = Array.isArray(nextRow); + if(isDataRow){ + const nextRowId = this.dataTable.getRowId(nextRow); + yield*this.setSelectedRowId(nextRowId); + return; + } + } if (!getSelectedRow(this)) { - this.selectFirstRow(); + yield*this.reselectOrSelectFirst(); } getTablePanelView(this).scrollToCurrentCell(); } diff --git a/frontend-html/src/model/entities/FormScreenLifecycle/FormScreenLifecycle.tsx b/frontend-html/src/model/entities/FormScreenLifecycle/FormScreenLifecycle.tsx index 8d54b9acba..716de773e6 100644 --- a/frontend-html/src/model/entities/FormScreenLifecycle/FormScreenLifecycle.tsx +++ b/frontend-html/src/model/entities/FormScreenLifecycle/FormScreenLifecycle.tsx @@ -922,7 +922,6 @@ export class FormScreenLifecycle02 implements IFormScreenLifecycle02 { }): any { const rootDataView = args.rootDataView; const api = getApi(this); - yield*rootDataView.setSelectedRowId(undefined); rootDataView.lifecycle.stopSelectedRowReaction(); try { this.monitor.inFlow++; @@ -956,9 +955,9 @@ export class FormScreenLifecycle02 implements IFormScreenLifecycle02 { if (this.initialSelectedRowId) { yield*rootDataView.setSelectedRowId(this.initialSelectedRowId); } else { - yield*rootDataView.reselectOrSelectFirst(); + yield*rootDataView.restoreViewState(); } - yield*rootDataView.restoreViewState(); + getTablePanelView(rootDataView).scrollToCurrentCell(); } finally { yield*rootDataView.lifecycle.startSelectedRowReaction(!args.preloadIsDirty); this.monitor.inFlow--; diff --git a/model-tests/model/Widgets/Menu/Menu.origam b/model-tests/model/Widgets/Menu/Menu.origam index 675caba3d2..cf7acba85b 100644 --- a/model-tests/model/Widgets/Menu/Menu.origam +++ b/model-tests/model/Widgets/Menu/Menu.origam @@ -590,6 +590,17 @@ x:parentId="147775f5-451d-4efd-8634-7f27a2cf50a6" ami:roles="*" wrmi:workflow="Widgets/Workflow/Widgets/TestOAuthRequest.origam#TestOAuthRequest/4af5f7a5-3fbe-459b-aa6c-6ac2e7613b4f" /> + + + + \ No newline at end of file diff --git a/model-tests/model/Widgets/Transformation/Widgets/New_Record_TestQueue1.origam___text___b4c78415-29fc-4bdb-a9c6-2351f9403703.xslt b/model-tests/model/Widgets/Transformation/Widgets/New_Record_TestQueue1.origam___text___b4c78415-29fc-4bdb-a9c6-2351f9403703.xslt new file mode 100644 index 0000000000..258ccb8167 --- /dev/null +++ b/model-tests/model/Widgets/Transformation/Widgets/New_Record_TestQueue1.origam___text___b4c78415-29fc-4bdb-a9c6-2351f9403703.xslt @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/model-tests/model/Widgets/Workflow/Widgets/CreateWQRow_TestQueue1.origam b/model-tests/model/Widgets/Workflow/Widgets/CreateWQRow_TestQueue1.origam new file mode 100644 index 0000000000..3356c01ed3 --- /dev/null +++ b/model-tests/model/Widgets/Workflow/Widgets/CreateWQRow_TestQueue1.origam @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file