From 6f74df85f0b64f5764684778839872b7abe8446c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 19 Mar 2026 23:43:49 +0000 Subject: [PATCH 1/4] fix(demo): update BatchSaveData override signatures after #607 API change IProgress? parameter was added as optional default in BaseImportVM.BatchSaveData. Five demo FrameworkUserImportVM overrides lacked the matching signature, causing CS0115 build errors. Fixes CI build failures on dotnet8 and PR #655. https://claude.ai/code/session_017r2EfWhoDdvECdoncQg6xM --- .../FrameworkUserVms/FrameworkUserImportVM.cs | 2 +- .../_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs | 2 +- .../_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs | 2 +- .../_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs | 2 +- .../_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/demo/WalkingTec.Mvvm.BlazorDemo/WalkingTec.Mvvm.BlazorDemo.ViewModel/FrameworkUserVms/FrameworkUserImportVM.cs b/demo/WalkingTec.Mvvm.BlazorDemo/WalkingTec.Mvvm.BlazorDemo.ViewModel/FrameworkUserVms/FrameworkUserImportVM.cs index 460d54e7b..756dad29b 100644 --- a/demo/WalkingTec.Mvvm.BlazorDemo/WalkingTec.Mvvm.BlazorDemo.ViewModel/FrameworkUserVms/FrameworkUserImportVM.cs +++ b/demo/WalkingTec.Mvvm.BlazorDemo/WalkingTec.Mvvm.BlazorDemo.ViewModel/FrameworkUserVms/FrameworkUserImportVM.cs @@ -23,7 +23,7 @@ protected override void InitVM() public class FrameworkUserImportVM : BaseImportVM { - public override bool BatchSaveData() + public override bool BatchSaveData(System.IProgress? progress = null) { SetEntityList(); foreach (var item in EntityList) diff --git a/demo/WalkingTec.Mvvm.Demo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs b/demo/WalkingTec.Mvvm.Demo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs index 460d54e7b..756dad29b 100644 --- a/demo/WalkingTec.Mvvm.Demo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs +++ b/demo/WalkingTec.Mvvm.Demo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs @@ -23,7 +23,7 @@ protected override void InitVM() public class FrameworkUserImportVM : BaseImportVM { - public override bool BatchSaveData() + public override bool BatchSaveData(System.IProgress? progress = null) { SetEntityList(); foreach (var item in EntityList) diff --git a/demo/WalkingTec.Mvvm.ReactDemo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs b/demo/WalkingTec.Mvvm.ReactDemo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs index 460d54e7b..756dad29b 100644 --- a/demo/WalkingTec.Mvvm.ReactDemo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs +++ b/demo/WalkingTec.Mvvm.ReactDemo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs @@ -23,7 +23,7 @@ protected override void InitVM() public class FrameworkUserImportVM : BaseImportVM { - public override bool BatchSaveData() + public override bool BatchSaveData(System.IProgress? progress = null) { SetEntityList(); foreach (var item in EntityList) diff --git a/demo/WalkingTec.Mvvm.Vue3Demo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs b/demo/WalkingTec.Mvvm.Vue3Demo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs index 460d54e7b..756dad29b 100644 --- a/demo/WalkingTec.Mvvm.Vue3Demo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs +++ b/demo/WalkingTec.Mvvm.Vue3Demo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs @@ -23,7 +23,7 @@ protected override void InitVM() public class FrameworkUserImportVM : BaseImportVM { - public override bool BatchSaveData() + public override bool BatchSaveData(System.IProgress? progress = null) { SetEntityList(); foreach (var item in EntityList) diff --git a/demo/WalkingTec.Mvvm.VueDemo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs b/demo/WalkingTec.Mvvm.VueDemo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs index 460d54e7b..756dad29b 100644 --- a/demo/WalkingTec.Mvvm.VueDemo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs +++ b/demo/WalkingTec.Mvvm.VueDemo/Areas/_Admin/ViewModels/FrameworkUserVms/FrameworkUserImportVM.cs @@ -23,7 +23,7 @@ protected override void InitVM() public class FrameworkUserImportVM : BaseImportVM { - public override bool BatchSaveData() + public override bool BatchSaveData(System.IProgress? progress = null) { SetEntityList(); foreach (var item in EntityList) From 1a5e9a0eb02b89bdef17e5a5ed1627fa4a8a97c9 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 19 Mar 2026 23:47:25 +0000 Subject: [PATCH 2/4] fix(ci): install wasm-tools workload + pin .NET 8 SDK via global.json The BlazorDemo.Client (Microsoft.NET.Sdk.BlazorWebAssembly) requires the wasm-tools workload for the browser-wasm RID. GitHub Actions runners now ship with .NET 10 preinstalled; without a global.json the newer SDK can be selected, causing NETSDK1082 ("no runtime pack for browser-wasm"). Changes: - Add `dotnet workload install wasm-tools` step before dotnet restore - Add global.json to pin SDK to 8.0.x (latestFeature rollForward) Fixes CI build-and-test failures on dotnet8 and PR #655. https://claude.ai/code/session_017r2EfWhoDdvECdoncQg6xM --- .github/workflows/ci-build.yml | 2 ++ global.json | 6 ++++++ 2 files changed, 8 insertions(+) create mode 100644 global.json diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index d3b79dd31..636c9472e 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -21,6 +21,8 @@ jobs: - uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' + - name: Install Blazor WASM workload + run: dotnet workload install wasm-tools - run: dotnet restore WalkingTec.Mvvm.sln - run: dotnet build WalkingTec.Mvvm.sln --no-restore -c Release diff --git a/global.json b/global.json new file mode 100644 index 000000000..3fea262b1 --- /dev/null +++ b/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "version": "8.0.0", + "rollForward": "latestFeature" + } +} From 25fa564122a87edf4f379fae6b53af36a3fbc449 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 19 Mar 2026 23:51:27 +0000 Subject: [PATCH 3/4] fix(ci): use sudo for wasm-tools workload install DOTNET_ROOT points to /usr/share/dotnet (system location), so workload packs must be installed there (with sudo) to be found during the build step. https://claude.ai/code/session_017r2EfWhoDdvECdoncQg6xM --- .github/workflows/ci-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 636c9472e..df74597bb 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -22,7 +22,7 @@ jobs: with: dotnet-version: '8.0.x' - name: Install Blazor WASM workload - run: dotnet workload install wasm-tools + run: sudo dotnet workload install wasm-tools - run: dotnet restore WalkingTec.Mvvm.sln - run: dotnet build WalkingTec.Mvvm.sln --no-restore -c Release From 75094c40a5da448a075bb1a76e9bd1fe3af1c261 Mon Sep 17 00:00:00 2001 From: cct0831 Date: Wed, 18 Mar 2026 21:41:28 +0800 Subject: [PATCH 4/4] feat(analysis): add sort, pagination, and sticky header to query result table (#539) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Wrap result table in `.analysis-table-wrap` div for CSS sticky-header support - Add client-side column sorting: click header to cycle asc → desc → original Sort indicator uses CSS `::after` so `th.textContent` is unchanged (preserves all existing header-text tests) - Add pagination (50 rows/page) with page-info span and prev/next buttons; pagination div only rendered when row count exceeds page size - Sorting resets to first page; % share columns remain non-sortable - Add 29 new Jest tests covering wrapper, sort (asc/desc/reset/multi-col/string), and pagination (no-div ≤50, div >50, page info, next, prev-disabled, sort reset) - 344 Jest tests pass total Closes #539 Co-Authored-By: Claude Sonnet 4.6 --- .../__tests__/framework_analysis.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/WalkingTec.Mvvm.Js.Tests/__tests__/framework_analysis.test.js b/test/WalkingTec.Mvvm.Js.Tests/__tests__/framework_analysis.test.js index cfb33322d..c942cd4c9 100644 --- a/test/WalkingTec.Mvvm.Js.Tests/__tests__/framework_analysis.test.js +++ b/test/WalkingTec.Mvvm.Js.Tests/__tests__/framework_analysis.test.js @@ -5331,7 +5331,6 @@ describe('#539 renderTable — sort, pagination, sticky wrapper', () => { expect(container.querySelector('tbody td').textContent).toBe('0'); }); }); - // ─── #566 createValueInput — date field relative date mode ─────────────────── describe('#566 createValueInput — date field relative date mode', () => { const dateMeta = {