cabloy 5.1.167 → 5.1.169

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.cabloy-version +1 -1
  2. package/CHANGELOG.md +13 -0
  3. package/package.json +1 -1
  4. package/repo-e2e/specs/cabloy-basic.spec.ts +75 -0
  5. package/vona/pnpm-lock.yaml +267 -53
  6. package/vona/src/suite/a-training/modules/training-record/src/entity/record.tsx +2 -0
  7. package/zova/packages-zova/zova/package.json +2 -2
  8. package/zova/pnpm-lock.yaml +113 -84
  9. package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/component/routedDialog.ts +2 -1
  10. package/zova/src/suite/cabloy-basic/modules/basic-app/src/component/routedDialog/controller.tsx +8 -2
  11. package/zova/src/suite/cabloy-basic/modules/basic-app/src/service/appModal.ts +60 -8
  12. package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/appModal.ts +43 -8
  13. package/zova/src/suite/cabloy-basic/modules/basic-page/src/.metadata/index.ts +6 -6
  14. package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx +95 -10
  15. package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx +1 -0
  16. package/zova/src/suite/cabloy-basic/modules/basic-page/src/config/locale/en-us.ts +1 -0
  17. package/zova/src/suite/cabloy-basic/modules/basic-page/src/config/locale/zh-cn.ts +1 -0
  18. package/zova/src/suite/cabloy-basic/modules/basic-page/src/index.ts +1 -0
  19. package/zova/src/suite/cabloy-basic/modules/basic-page/src/lib/selection.ts +35 -0
  20. package/zova/src/suite/cabloy-basic/modules/basic-page/test/lib/selection.test.ts +24 -0
  21. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/component/blockResourcePickerActions.ts +34 -0
  22. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/index.ts +30 -8
  23. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/locales.ts +7 -0
  24. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/component/blockResourcePickerActions/controller.tsx +92 -0
  25. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/component/formFieldResourcePicker/controller.tsx +224 -11
  26. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/config/locale/en-us.ts +8 -0
  27. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/config/locale/zh-cn.ts +7 -0
  28. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/index.ts +2 -0
  29. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/lib/resourcePicker.ts +29 -0
  30. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/lib/resourcePickerPageHost.ts +64 -0
  31. package/zova/src/suite/cabloy-basic/modules/basic-resource/test/lib/resourcePicker.test.ts +32 -0
  32. package/zova/src/suite/cabloy-basic/modules/basic-resource/test/lib/resourcePickerPageHost.test.ts +94 -0
  33. package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/table/render.tsx +18 -12
  34. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  35. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/.metadata/component/resourcePickerContext.ts +31 -0
  36. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/.metadata/index.ts +48 -5
  37. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/.metadata/page/resourcePicker.ts +16 -0
  38. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/component/resourcePickerContext/controller.tsx +26 -0
  39. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/index.ts +2 -0
  40. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/lib/resourcePicker.ts +43 -0
  41. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resourcePicker/controller.tsx +85 -0
  42. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/routes.ts +9 -0
  43. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  44. package/zova/src/suite-vendor/a-zova/modules/a-bean/cli/controller/metadata/generateFileComponent.ts +40 -1
  45. package/zova/src/suite-vendor/a-zova/modules/a-bean/package.json +1 -1
  46. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +1 -1
  47. package/zova/src/suite-vendor/a-zova/modules/a-router/src/lib/routerViewBase.tsx +5 -0
  48. package/zova/src/suite-vendor/a-zova/modules/a-routerstack/package.json +1 -1
  49. package/zova/src/suite-vendor/a-zova/modules/a-routerstack/src/component/routerViewStack/controller.tsx +7 -1
  50. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
  51. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +2 -0
  52. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/render.tsx +13 -10
  53. package/zova/src/suite-vendor/a-zova/package.json +5 -5
package/.cabloy-version CHANGED
@@ -1 +1 @@
1
- 5.1.167
1
+ 5.1.169
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.169
4
+
5
+ ### Features
6
+
7
+ - Add a resource picker.
8
+
9
+ ## 5.1.168
10
+
11
+ ### Features
12
+
13
+ - Add a resource picker.
14
+ - Add update functionality.
15
+
3
16
  ## 5.1.167
4
17
 
5
18
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cabloy",
3
- "version": "5.1.167",
3
+ "version": "5.1.169",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A Node.js fullstack framework",
6
6
  "keywords": [
@@ -765,6 +765,81 @@ test(
765
765
  },
766
766
  );
767
767
 
768
+ test(
769
+ 'ATP-BASIC-RESOURCE-PICKER-01: Training Record selects and cancels a routed Student picker',
770
+ { tag: ['@admin', '@flow'] },
771
+ async ({ page }) => {
772
+ const pageErrors = collectPageErrors(page);
773
+ await loginAsAdmin(page);
774
+
775
+ const studentName = `Resource Picker E2E ${Date.now()}`;
776
+ const accessToken = (await page.context().cookies()).find(
777
+ cookie => cookie.name === 'token',
778
+ )?.value;
779
+ expect(accessToken).toBeTruthy();
780
+ const headers = { Authorization: `Bearer ${accessToken}` };
781
+ let studentId: string | number | undefined;
782
+ try {
783
+ const createResponse = await page.request.post('/api/training/student', {
784
+ data: { name: studentName, mobile: '13812345678', level: 1 },
785
+ headers,
786
+ });
787
+ expect(createResponse.ok()).toBeTruthy();
788
+ studentId = (await createResponse.json()).data;
789
+ expect(['string', 'number']).toContain(typeof studentId);
790
+
791
+ const response = await page.goto('/admin/rest/resource/training-record%3Arecord/create', {
792
+ waitUntil: 'load',
793
+ });
794
+ expect(response?.ok()).toBeTruthy();
795
+ await expect(page.locator('html')).toHaveAttribute('data-zova-hydrated', 'admin');
796
+ const browserUrl = page.url();
797
+ const studentField = page.getByRole('group', { name: 'Student *', exact: true });
798
+ const pickerTrigger = studentField.locator('button');
799
+ await expect(pickerTrigger).toBeVisible();
800
+
801
+ const initialSelect = waitForStudentSelect(page);
802
+ await pickerTrigger.click();
803
+ const dialog = page.getByRole('dialog');
804
+ await expect(dialog).toHaveCount(1);
805
+ await initialSelect;
806
+ expect(page.url()).toBe(browserUrl);
807
+
808
+ const row = dialog.locator('tbody tr').filter({ hasText: studentName });
809
+ await expect(row).toHaveCount(1);
810
+ await expect(dialog.getByRole('button', { name: 'Create', exact: true })).toBeVisible();
811
+ await expect(dialog.getByRole('button', { name: 'Search', exact: true })).toBeVisible();
812
+ await expect(row.getByRole('radio', { name: /^Select row / })).toHaveCount(1);
813
+
814
+ await row.getByRole('radio', { name: /^Select row / }).check();
815
+ await expect(row).toHaveAttribute('aria-selected', 'true');
816
+ await expect(dialog.locator('span.text-sm[role="status"]')).toHaveText('Selected one item');
817
+ await expect(dialog.getByRole('button', { name: 'Select', exact: true })).toBeEnabled();
818
+ await dialog.getByRole('button', { name: 'Select', exact: true }).click();
819
+ await expect(dialog).toHaveCount(0);
820
+ await expect(pickerTrigger).toHaveText(studentName);
821
+ expect(page.url()).toBe(browserUrl);
822
+
823
+ await pickerTrigger.click();
824
+ await expect(dialog).toHaveCount(1);
825
+ await expect(row).toHaveCount(1);
826
+ await dialog.getByRole('button', { name: 'Cancel', exact: true }).click();
827
+ await expect(dialog).toHaveCount(0);
828
+ await expect(pickerTrigger).toHaveText(studentName);
829
+ expect(page.url()).toBe(browserUrl);
830
+ expect(pageErrors).toEqual([]);
831
+ } finally {
832
+ if (studentId !== undefined) {
833
+ const deleteResponse = await page.request.delete(
834
+ `/api/training/student/deleteForce/${studentId}`,
835
+ { headers },
836
+ );
837
+ expect(deleteResponse.ok()).toBeTruthy();
838
+ }
839
+ }
840
+ },
841
+ );
842
+
768
843
  test(
769
844
  'ATP-BASIC-FORM-01: Training Student content remains in the Basic Information tab',
770
845
  { tag: ['@admin', '@flow'] },