Dependency cycle when validating editable fields in table

I have an editable table with an unknown number of editable values, and need to make sure that the table can only be saved when the sum of those values is equal to 100. Since there isn't an easy way to sum the changed + original values of the column in my version of Retool (self-hosted 3.8.8), I decided to just compare the sum of the changeset to the sum of the original values of the rows that were changed, which has the same effect.

However, when I try and disable saving in the table, I run into a Dependency Cycle Found error. Inside the table's validation function, I need to check the values of the table itself. This seems to be the root cause of the dependency cycle itself.

I think the workaround here is to avoid using the table's save mechanisms at all and use a "Save" button outside the table itself that is conditionally enabled/disabled using the same logic, but I was wondering if it would be possible to do this exclusively via the table without relying on other input fields, buttons, etc...

  • Goal: In the Retool table component, I can use the values of the table itself to conditionally disable the "Save" button

  • Steps: I tried moving my validation logic to multiple transformers, but the dependency cycle errors persist

  • Details: Self-hosted Retool 3.8.8

  • Screenshots: Posted above

  • App JSON below:

{"uuid":"5251716e-028e-11ef-8908-975675e4afb7","page":{"id":18775,"data":{"appState":"[\"~#iR\",[\"^ \",\"n\",\"appTemplate\",\"v\",[\"^ \",\"isFetching\",false,\"plugins\",[\"~#iOM\",[\"table\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"table\",\"type\",\"widget\",\"subtype\",\"TableWidget2\",\"namespace\",null,\"resourceName\",null,\"resourceDisplayName\",null,\"template\",[\"^3\",[\"selectedRowKey\",null,\"_nextAfterCursor\",\"\",\"_columnBackgroundColor\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"_defaultSort\",null,\"_clearChangesetOnSave\",true,\"heightType\",\"auto\",\"disableEdits\",false,\"_rowHeight\",\"medium\",\"_columnIds\",[\"~#iL\",[\"39593\",\"0eba5\"]],\"_isSaving\",false,\"_actionIds\",[\"^:\",[]],\"_clearChangeset\",false,\"caseSensitiveFiltering\",false,\"_limitOffsetRowCount\",null,\"selectedSourceRow\",null,\"_dynamicColumnsEnabled\",false,\"disableSave\",\"{{sameSum.value}}\",\"_columnEditableOptions\",[\"^3\",[\"39593\",[\"^3\",[]],\"0eba5\",[\"^3\",[\"showStepper\",true,\"min\",\"0\",\"max\",\"100\"]]]],\"_toolbarPosition\",\"bottom\",\"_groupByColumns\",[\"^:\",[]],\"_toolbarButtonLabel\",[\"^3\",[\"1a\",\"Filter\",\"3c\",\"Download\",\"4d\",\"Refresh\"]],\"_nextBeforeCursor\",\"\",\"_persistRowSelection\",false,\"_toolbarButtonIcon\",[\"^3\",[\"1a\",\"bold/interface-text-formatting-filter-2\",\"3c\",\"bold/interface-download-button-2\",\"4d\",\"bold/interface-arrows-round-left\"]],\"changesetArray\",[],\"_toolbarButtonType\",[\"^3\",[\"1a\",\"filter\",\"3c\",\"custom\",\"4d\",\"custom\"]],\"_columnOptionList\",[\"^3\",[\"39593\",[\"^3\",[]],\"0eba5\",[\"^3\",[]]]],\"_columnValueOverride\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"marginType\",\"normal\",\"_showBorder\",true,\"_templatePageSize\",null,\"_dynamicColumnProperties\",[\"^3\",[]],\"_showHeader\",true,\"_currentPage\",0,\"_columnKey\",[\"^3\",[\"39593\",\"id\",\"0eba5\",\"value\"]],\"hidden\",false,\"_toolbarButtonIds\",[\"^:\",[\"1a\",\"3c\",\"4d\"]],\"data\",\"[{id: 1, value: 10}, {id: 2, value: 20}, {id: 3, value: 30}, {id: 4, value: 40}]\",\"_cellSelection\",\"none\",\"_serverPaginated\",false,\"_linkedFilterId\",null,\"searchMode\",\"fuzzy\",\"_columnCellTooltip\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"_columnFormat\",[\"^3\",[\"39593\",\"decimal\",\"0eba5\",\"decimal\"]],\"_cursorCache\",[\"^ \"],\"_calculatedPageSize\",null,\"_primaryKeyColumnId\",\"39593\",\"selectedDataIndex\",null,\"_columnAlignment\",[\"^3\",[\"39593\",\"center\",\"0eba5\",\"center\"]],\"_actionIcon\",[\"^3\",[]],\"_columnTooltip\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"_columnIcon\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"_columnCellTooltipMode\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"_pageSize\",null,\"showInEditor\",false,\"selectedSourceRows\",[],\"_enableExpandableRows\",false,\"_selectMultipleRowsOnActionClick\",\"no\",\"_columnSortDisabled\",[\"^3\",[\"39593\",false,\"0eba5\",false]],\"_showSummaryRow\",false,\"filterStack\",null,\"_expandedRows\",null,\"changesetObject\",null,\"_actionDisabled\",[\"^3\",[]],\"_columnReferenceId\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"_dynamicColumnSource\",[],\"_rowSelection\",\"single\",\"_columnCaption\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"_dynamicColumnFormatOptions\",[\"^3\",[]],\"_dynamicRowHeights\",false,\"_columnFormatOptions\",[\"^3\",[\"39593\",[\"^3\",[\"notation\",\"standard\"]],\"0eba5\",[\"^3\",[\"showSeparators\",true,\"notation\",\"standard\"]]]],\"_changeset\",null,\"_afterCursor\",\"\",\"selectedRowKeys\",[],\"_beforeCursor\",\"\",\"_columnSummaryAggregationMode\",[\"^3\",[\"39593\",\"none\",\"0eba5\",\"none\"]],\"searchTerm\",\"\",\"selectedRows\",[],\"_disabledVirtualization\",false,\"_showColumnBorders\",false,\"_columnStatusIndicatorOptions\",[\"^3\",[\"39593\",[\"^3\",[]],\"0eba5\",[\"^3\",[]]]],\"_columnSize\",[\"^3\",[\"39593\",439,\"0eba5\",100]],\"_serverPaginationType\",\"limitOffsetBased\",\"_selectSingleRowsOnActionClick\",\"replace\",\"_showFooter\",true,\"_groupedColumnConfig\",[\"^3\",[]],\"_virtualizeStartIndex\",0,\"_toolbarButtonHidden\",[\"^3\",[\"1a\",\"\",\"3c\",\"\",\"4d\",\"\"]],\"_defaultFilters\",[\"^3\",[]],\"events\",[\"^:\",[[\"^3\",[\"event\",\"save\",\"type\",\"datasource\",\"method\",\"trigger\",\"pluginId\",\"submit\",\"targetId\",null,\"params\",[\"^3\",[]],\"waitType\",\"debounce\",\"waitMs\",\"0\"]]]],\"_columnEditable\",[\"^3\",[\"39593\",\"false\",\"0eba5\",\"true\"]],\"pagination\",null,\"selectedDataIndexes\",[],\"_columnGroupAggregationMode\",[\"^3\",[\"39593\",\"countDistinct\",\"0eba5\",\"sum\"]],\"sortArray\",[],\"_selectedCell\",null,\"overflowType\",\"scroll\",\"selectedCell\",null,\"_defaultSelectedRow\",[\"^3\",[\"mode\",\"index\",\"indexType\",\"display\",\"index\",0]],\"_hasNextPage\",false,\"_includeRowInChangesetArray\",false,\"_columnPosition\",[\"^3\",[\"39593\",\"center\",\"0eba5\",\"center\"]],\"_enableSaveActions\",true,\"_columnPlaceholder\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"Enter value\"]],\"_defaultFilterOperator\",\"and\",\"_actionLabel\",[\"^3\",[]],\"_virtualizeEndIndex\",0,\"selectedRow\",null,\"_actionHidden\",[\"^3\",[]],\"maintainSpaceWhenHidden\",false,\"_columnHidden\",[\"^3\",[\"39593\",\"\",\"0eba5\",\"\"]],\"_columnLabel\",[\"^3\",[\"39593\",\"ID\",\"0eba5\",\"Value\"]],\"_showToolbar\",false]],\"style\",[\"^3\",[]],\"position2\",[\"^0\",[\"^ \",\"n\",\"position2\",\"v\",[\"^ \",\"container\",\"\",\"rowGroup\",\"body\",\"subcontainer\",\"\",\"row\",0,\"col\",0,\"height\",1,\"width\",8,\"tabNum\",0]]],\"mobilePosition2\",null,\"mobileAppPosition\",null,\"tabIndex\",null,\"^=\",\"\",\"createdAt\",\"~m1713999598643\",\"updatedAt\",\"~m1714018624162\",\"folder\",\"\",\"screen\",null]]],\"$main\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"$main\",\"^4\",\"frame\",\"^5\",\"Frame\",\"^6\",null,\"^7\",null,\"^8\",null,\"^9\",[\"^3\",[\"type\",\"main\",\"sticky\",null,\"paddingType\",\"normal\",\"enableFullBleed\",false,\"isHiddenOnDesktop\",false,\"isHiddenOnMobile\",false]],\"^;\",[\"^3\",[]],\"^<\",null,\"^C\",null,\"^D\",null,\"^E\",null,\"^=\",\"\",\"^F\",\"~m1713999598699\",\"^G\",\"~m1713999598699\",\"^H\",\"\",\"^I\",null]]],\"changesetSum\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"changesetSum\",\"^4\",\"function\",\"^5\",\"Function\",\"^6\",null,\"^7\",null,\"^8\",null,\"^9\",[\"^3\",[\"funcBody\",\"const table = {{table}}\\n      \\nconst tableChanges = table?.changesetArray || []\\n\\nconst changedSum = tableChanges.reduce((acc, cur) => acc + cur.value, 0)\\n\\nreturn changedSum\",\"value\",\"\"]],\"^;\",null,\"^<\",null,\"^C\",null,\"^D\",null,\"^E\",null,\"^=\",\"\",\"^F\",\"~m1714001783701\",\"^G\",\"~m1714016719687\",\"^H\",\"\",\"^I\",null]]],\"submit\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"submit\",\"^4\",\"datasource\",\"^5\",\"JavascriptQuery\",\"^6\",null,\"^7\",\"JavascriptQuery\",\"^8\",null,\"^9\",[\"^3\",[\"queryRefreshTime\",\"\",\"lastReceivedFromResourceAt\",null,\"queryDisabledMessage\",\"\",\"servedFromCache\",false,\"offlineUserQueryInputs\",\"\",\"successMessage\",\"\",\"queryDisabled\",\"\",\"playgroundQuerySaveId\",\"latest\",\"workflowParams\",null,\"resourceNameOverride\",\"\",\"runWhenModelUpdates\",false,\"workflowRunId\",null,\"showFailureToaster\",true,\"query\",\"console.log(\\\"submitted!\\\")\",\"playgroundQueryUuid\",\"\",\"playgroundQueryId\",null,\"error\",null,\"workflowRunBodyType\",\"raw\",\"privateParams\",[\"^:\",[]],\"runWhenPageLoadsDelay\",\"\",\"data\",null,\"importedQueryInputs\",[\"^3\",[]],\"_additionalScope\",[\"^:\",[]],\"isImported\",false,\"showSuccessToaster\",true,\"cacheKeyTtl\",\"\",\"requestSentTimestamp\",null,\"metadata\",null,\"workflowActionType\",null,\"queryRunTime\",null,\"changesetObject\",\"\",\"errorTransformer\",\"// The variable 'data' allows you to reference the request's data in the transformer. \\n// example: return data.find(element => element.isError)\\nreturn data.error\",\"finished\",null,\"confirmationMessage\",null,\"isFetching\",false,\"changeset\",\"\",\"rawData\",null,\"queryTriggerDelay\",\"0\",\"resourceTypeOverride\",null,\"watchedParams\",[\"^:\",[]],\"enableErrorTransformer\",false,\"showLatestVersionUpdatedWarning\",false,\"timestamp\",0,\"importedQueryDefaults\",[\"^3\",[]],\"enableTransformer\",false,\"showUpdateSetValueDynamicallyToggle\",true,\"runWhenPageLoads\",false,\"transformer\",\"// Query results are available as the `data` variable\\nreturn formatDataAsArray(data)\",\"events\",[\"^:\",[]],\"queryTimeout\",\"10000\",\"workflowId\",null,\"requireConfirmation\",false,\"queryFailureConditions\",\"\",\"changesetIsObject\",false,\"enableCaching\",false,\"allowedGroups\",[\"^:\",[]],\"workflowBlockPluginId\",null,\"offlineQueryType\",\"None\",\"queryThrottleTime\",\"750\",\"updateSetValueDynamically\",false,\"notificationDuration\",\"\"]],\"^;\",null,\"^<\",null,\"^C\",null,\"^D\",null,\"^E\",null,\"^=\",\"\",\"^F\",\"~m1714016393932\",\"^G\",\"~m1714016406458\",\"^H\",\"\",\"^I\",null]]],\"numberInput1\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"numberInput1\",\"^4\",\"widget\",\"^5\",\"NumberInputWidget\",\"^6\",null,\"^7\",null,\"^8\",null,\"^9\",[\"^3\",[\"readOnly\",false,\"iconAfter\",\"\",\"max\",null,\"preventScroll\",false,\"inputValue\",0,\"marginType\",\"normal\",\"hidden\",false,\"customValidation\",\"\",\"showSeparators\",true,\"hideValidationMessage\",false,\"textBefore\",\"\",\"validationMessage\",\"\",\"textAfter\",\"\",\"showInEditor\",false,\"allowNull\",false,\"showClear\",false,\"tooltipText\",\"\",\"currency\",\"USD\",\"labelAlign\",\"left\",\"formDataKey\",\"{{ self.id }}\",\"value\",\"{{changesetSum.value}}\",\"labelCaption\",\"\",\"min\",null,\"labelWidth\",\"33\",\"placeholder\",\"Enter value\",\"showStepper\",true,\"label\",\"Changed\",\"_validate\",false,\"labelWidthUnit\",\"%\",\"invalid\",false,\"format\",\"decimal\",\"iconBefore\",\"\",\"textAlign\",\"left\",\"inputTooltip\",\"\",\"events\",[\"^3\",[]],\"loading\",false,\"disabled\",\"true\",\"labelPosition\",\"left\",\"decimalPlaces\",null,\"labelWrap\",false,\"padDecimal\",false,\"maintainSpaceWhenHidden\",false,\"required\",false]],\"^;\",[\"^3\",[]],\"^<\",[\"^0\",[\"^ \",\"n\",\"position2\",\"v\",[\"^ \",\"^=\",\"\",\"^>\",\"body\",\"^?\",\"\",\"row\",0,\"col\",8,\"^@\",1,\"^A\",4,\"^B\",0]]],\"^C\",null,\"^D\",null,\"^E\",null,\"^=\",\"\",\"^F\",\"~m1714016676611\",\"^G\",\"~m1714016839368\",\"^H\",\"\",\"^I\",null]]],\"originalSum\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"originalSum\",\"^4\",\"function\",\"^5\",\"Function\",\"^6\",null,\"^7\",null,\"^8\",null,\"^9\",[\"^3\",[\"funcBody\",\"const table = {{table}}\\n      \\nconst tableChanges = table?.changesetArray || []\\nconst tableData = table?.data || []\\n\\nif (tableChanges.length < 1 || tableData.length < 1) {\\n  return true\\n}\\n\\nconst ids = tableChanges.map(row => row.id)\\n\\nconst originalSum = tableData.filter(row => ids.includes(row.id)).reduce((acc, cur) => acc + cur.value, 0)\\n\\nreturn originalSum\",\"value\",\"\"]],\"^;\",null,\"^<\",null,\"^C\",null,\"^D\",null,\"^E\",null,\"^=\",\"\",\"^F\",\"~m1714016741118\",\"^G\",\"~m1714016819639\",\"^H\",\"\",\"^I\",null]]],\"numberInput2\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"numberInput2\",\"^4\",\"widget\",\"^5\",\"NumberInputWidget\",\"^6\",null,\"^7\",null,\"^8\",null,\"^9\",[\"^3\",[\"readOnly\",false,\"iconAfter\",\"\",\"max\",null,\"preventScroll\",false,\"inputValue\",0,\"marginType\",\"normal\",\"hidden\",false,\"customValidation\",\"\",\"showSeparators\",true,\"hideValidationMessage\",false,\"textBefore\",\"\",\"validationMessage\",\"\",\"textAfter\",\"\",\"showInEditor\",false,\"allowNull\",false,\"showClear\",false,\"tooltipText\",\"\",\"currency\",\"USD\",\"labelAlign\",\"left\",\"formDataKey\",\"{{ self.id }}\",\"value\",\"{{originalSum.value}}\",\"labelCaption\",\"\",\"min\",null,\"labelWidth\",\"33\",\"placeholder\",\"Enter value\",\"showStepper\",true,\"label\",\"Original\",\"_validate\",false,\"labelWidthUnit\",\"%\",\"invalid\",false,\"format\",\"decimal\",\"iconBefore\",\"\",\"textAlign\",\"left\",\"inputTooltip\",\"\",\"events\",[\"^3\",[]],\"loading\",false,\"disabled\",\"true\",\"labelPosition\",\"left\",\"decimalPlaces\",null,\"labelWrap\",false,\"padDecimal\",false,\"maintainSpaceWhenHidden\",false,\"required\",false]],\"^;\",[\"^3\",[]],\"^<\",[\"^0\",[\"^ \",\"n\",\"position2\",\"v\",[\"^ \",\"^=\",\"\",\"^>\",\"body\",\"^?\",\"\",\"row\",1,\"col\",8,\"^@\",1,\"^A\",4,\"^B\",0]]],\"^C\",null,\"^D\",null,\"^E\",null,\"^=\",\"\",\"^F\",\"~m1714016823389\",\"^G\",\"~m1714016846226\",\"^H\",\"\",\"^I\",null]]],\"sameSum\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"sameSum\",\"^4\",\"function\",\"^5\",\"Function\",\"^6\",null,\"^7\",null,\"^8\",null,\"^9\",[\"^3\",[\"funcBody\",\"return Math.abs({{changesetSum.value}} - {{originalSum.value}}) < 0.001\",\"value\",\"\"]],\"^;\",null,\"^<\",null,\"^C\",null,\"^D\",null,\"^E\",null,\"^=\",\"\",\"^F\",\"~m1714016878260\",\"^G\",\"~m1714016907212\",\"^H\",\"\",\"^I\",null]]],\"checkbox1\",[\"^0\",[\"^ \",\"n\",\"pluginTemplate\",\"v\",[\"^ \",\"id\",\"checkbox1\",\"^4\",\"widget\",\"^5\",\"CheckboxWidget2\",\"^6\",null,\"^7\",null,\"^8\",null,\"^9\",[\"^3\",[\"marginType\",\"normal\",\"hidden\",false,\"customValidation\",\"\",\"hideValidationMessage\",false,\"validationMessage\",\"\",\"showInEditor\",false,\"tooltipText\",\"\",\"labelAlign\",\"left\",\"formDataKey\",\"{{ self.id }}\",\"value\",\"{{sameSum.value}}\",\"labelCaption\",\"\",\"label\",\"Same Sum\",\"_validate\",false,\"invalid\",false,\"events\",[\"^3\",[]],\"disabled\",\"true\",\"labelPosition\",\"right\",\"labelWrap\",false,\"maintainSpaceWhenHidden\",false,\"required\",false]],\"^;\",[\"^3\",[]],\"^<\",[\"^0\",[\"^ \",\"n\",\"position2\",\"v\",[\"^ \",\"^=\",\"\",\"^>\",\"body\",\"^?\",\"\",\"row\",2,\"col\",8,\"^@\",0.6,\"^A\",4,\"^B\",0]]],\"^C\",null,\"^D\",null,\"^E\",null,\"^=\",\"\",\"^F\",\"~m1714016921957\",\"^G\",\"~m1714017839726\",\"^H\",\"\",\"^I\",null]]]]],\"^F\",null,\"version\",\"3.8.8\",\"appThemeId\",null,\"appMaxWidth\",\"1560px\",\"preloadedAppJavaScript\",null,\"preloadedAppJSLinks\",[],\"testEntities\",[],\"tests\",[],\"appStyles\",\"\",\"responsiveLayoutDisabled\",false,\"loadingIndicatorsDisabled\",false,\"urlFragmentDefinitions\",[\"^:\",[]],\"pageLoadValueOverrides\",[\"^:\",[]],\"customDocumentTitle\",\"\",\"customDocumentTitleEnabled\",false,\"customShortcuts\",[],\"isGlobalWidget\",false,\"isMobileApp\",false,\"isFormApp\",false,\"multiScreenMobileApp\",false,\"mobileAppSettings\",[\"^ \",\"mobileOfflineModeEnabled\",false,\"mobileOfflineModeDelaySync\",false,\"mobileOfflineModeBannerMode\",\"default\",\"displaySetting\",[\"^ \",\"landscapeMode\",false,\"tabletMode\",false]],\"folders\",[\"^:\",[]],\"queryStatusVisibility\",false,\"markdownLinkBehavior\",\"auto\",\"inAppRetoolPillAppearance\",\"NO_OVERRIDE\",\"rootScreen\",null,\"instrumentationEnabled\",false,\"experimentalFeatures\",[\"^ \",\"sourceControlTemplateDehydration\",false,\"multiplayerEditingEnabled\",false,\"disableMultiplayerEditing\",false],\"experimentalPerfFeatures\",[\"^ \",\"useRuntimeV2\",true,\"runtimeV2OptOut\",false],\"experimentalStabilityFeatures\",[\"^ \",\"lockModelForUpdates\",false],\"experimentalDataTabEnabled\",true]]]"},"changesRecord":[{"type":"WIDGET_TEMPLATE_UPDATE","payload":{"plugin":{"id":"table","type":"widget","style":{},"folder":"","screen":null,"subtype":"TableWidget2","tabIndex":null,"template":{"data":"[{id: 1, value: 10}, {id: 2, value: 20}, {id: 3, value: 30}, {id: 4, value: 40}]","events":[{"type":"datasource","event":"save","method":"trigger","params":{},"waitMs":"0","pluginId":"submit","targetId":null,"waitType":"debounce"}],"hidden":false,"_isSaving":false,"_pageSize":null,"sortArray":[],"_actionIds":[],"_changeset":null,"_columnIds":["39593","0eba5"],"_columnKey":{"39593":"id","0eba5":"value"},"_rowHeight":"medium","heightType":"auto","marginType":"normal","pagination":null,"searchMode":"fuzzy","searchTerm":"","_actionIcon":{},"_columnIcon":{"39593":"","0eba5":""},"_columnSize":{"39593":439,"0eba5":100},"_showBorder":true,"_showFooter":true,"_showHeader":true,"disableSave":"{{!sameSum.value}}","filterStack":null,"selectedRow":null,"_actionLabel":{},"_afterCursor":"","_columnLabel":{"39593":"ID","0eba5":"Value"},"_currentPage":0,"_cursorCache":{},"_defaultSort":null,"_hasNextPage":false,"_showToolbar":false,"disableEdits":false,"overflowType":"scroll","selectedCell":null,"selectedRows":[],"showInEditor":false,"_actionHidden":{},"_beforeCursor":"","_columnFormat":{"39593":"decimal","0eba5":"decimal"},"_columnHidden":{"39593":"","0eba5":""},"_expandedRows":null,"_rowSelection":"single","_selectedCell":null,"_cellSelection":"none","_columnCaption":{"39593":"","0eba5":""},"_columnTooltip":{"39593":"","0eba5":""},"changesetArray":[],"selectedRowKey":null,"_actionDisabled":{},"_clearChangeset":false,"_columnEditable":{"39593":"false","0eba5":"true"},"_columnPosition":{"39593":"center","0eba5":"center"},"_defaultFilters":{},"_groupByColumns":[],"_linkedFilterId":null,"_showSummaryRow":false,"changesetObject":null,"selectedRowKeys":[],"_columnAlignment":{"39593":"center","0eba5":"center"},"_nextAfterCursor":"","_serverPaginated":false,"_toolbarPosition":"bottom","_columnOptionList":{"39593":{},"0eba5":{}},"_nextBeforeCursor":"","_templatePageSize":null,"_toolbarButtonIds":["1a","3c","4d"],"selectedDataIndex":null,"selectedSourceRow":null,"_columnCellTooltip":{"39593":"","0eba5":""},"_columnPlaceholder":{"39593":"","0eba5":"Enter value"},"_columnReferenceId":{"39593":"","0eba5":""},"_dynamicRowHeights":false,"_enableSaveActions":true,"_showColumnBorders":false,"_toolbarButtonIcon":{"1a":"bold/interface-text-formatting-filter-2","3c":"bold/interface-download-button-2","4d":"bold/interface-arrows-round-left"},"_toolbarButtonType":{"1a":"filter","3c":"custom","4d":"custom"},"selectedSourceRows":[],"_calculatedPageSize":null,"_columnSortDisabled":{"39593":false,"0eba5":false},"_defaultSelectedRow":{"mode":"index","index":0,"indexType":"display"},"_primaryKeyColumnId":"39593","_toolbarButtonLabel":{"1a":"Filter","3c":"Download","4d":"Refresh"},"_virtualizeEndIndex":0,"selectedDataIndexes":[],"_columnFormatOptions":{"39593":{"notation":"standard"},"0eba5":{"notation":"standard","showSeparators":true}},"_columnValueOverride":{"39593":"","0eba5":""},"_dynamicColumnSource":[],"_groupedColumnConfig":{},"_limitOffsetRowCount":null,"_persistRowSelection":false,"_toolbarButtonHidden":{"1a":"","3c":"","4d":""},"_clearChangesetOnSave":true,"_enableExpandableRows":false,"_serverPaginationType":"limitOffsetBased","_virtualizeStartIndex":0,"_columnBackgroundColor":{"39593":"","0eba5":""},"_columnCellTooltipMode":{"39593":"","0eba5":""},"_columnEditableOptions":{"39593":{},"0eba5":{"max":"100","min":"0","showStepper":true}},"_defaultFilterOperator":"and","_dynamicColumnsEnabled":false,"caseSensitiveFiltering":false,"_disabledVirtualization":false,"maintainSpaceWhenHidden":false,"_dynamicColumnProperties":{},"_columnGroupAggregationMode":{"39593":"countDistinct","0eba5":"sum"},"_dynamicColumnFormatOptions":{},"_includeRowInChangesetArray":false,"_columnStatusIndicatorOptions":{"39593":{},"0eba5":{}},"_columnSummaryAggregationMode":{"39593":"none","0eba5":"none"},"_selectSingleRowsOnActionClick":"replace","_selectMultipleRowsOnActionClick":"no"},"container":"","createdAt":"2024-04-24T22:59:58.643Z","namespace":null,"position2":{"col":0,"row":0,"width":8,"height":1,"tabNum":0,"rowGroup":"body","container":"","subcontainer":""},"updatedAt":"2024-04-25T04:13:54.465Z","resourceName":null,"mobilePosition2":null,"mobileAppPosition":null,"resourceDisplayName":null},"update":{"disableSave":"{{sameSum.value}}"},"widgetId":"table","shouldRecalculateTemplate":true},"isUserTriggered":true}],"gitSha":null,"checksum":null,"createdAt":"2024-04-25T04:17:06.412Z","updatedAt":"2024-04-25T04:17:06.412Z","pageId":40,"userId":8,"branchId":null},"modules":{}}

Can you simply export the app as a JSON file - the JSON you posted doesn't work when I try to create an app from it.

I just re-exported the app as a JSON file and the diff checker says identical to the one I pasted/embedded in my post. I originally tried uploading the JSON file itself, but it seems like this forum won't allow new users to add non-image attachments to their posts.

This is what I am seeing when I use the JSON you provided.

Screenshot 2024-04-26 at 11.38.03 AM