@jmruthers/pace-core 0.6.6 → 0.6.7
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.
- package/{scripts/audit/audit-dependencies.cjs → audit-tool/00-dependencies.cjs} +12 -13
- package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
- package/audit-tool/audits/02-project-structure.cjs +255 -0
- package/audit-tool/audits/03-architecture.cjs +196 -0
- package/audit-tool/audits/04-code-quality.cjs +149 -0
- package/audit-tool/audits/05-styling.cjs +224 -0
- package/audit-tool/audits/06-security-rbac.cjs +544 -0
- package/audit-tool/audits/07-api-tech-stack.cjs +301 -0
- package/audit-tool/audits/08-testing-documentation.cjs +202 -0
- package/audit-tool/audits/09-operations.cjs +208 -0
- package/audit-tool/index.cjs +291 -0
- package/audit-tool/utils/code-utils.cjs +218 -0
- package/audit-tool/utils/file-utils.cjs +230 -0
- package/audit-tool/utils/report-utils.cjs +241 -0
- package/cursor-rules/00-standards-overview.mdc +156 -0
- package/cursor-rules/{00-pace-core-compliance.mdc → 01-pace-core-compliance.mdc} +187 -34
- package/cursor-rules/02-project-structure.mdc +37 -5
- package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +125 -11
- package/cursor-rules/04-code-quality.mdc +419 -0
- package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +55 -10
- package/cursor-rules/{09-rbac-compliance.mdc → 06-security-rbac.mdc} +62 -6
- package/cursor-rules/07-api-tech-stack.mdc +377 -0
- package/cursor-rules/08-testing-documentation.mdc +324 -0
- package/cursor-rules/09-operations.mdc +365 -0
- package/dist/DataTable-7PMH7XN7.js +15 -0
- package/dist/{DataTable-2N_tqbfq.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
- package/dist/{PublicPageProvider-BBH6Vqg7.d.ts → PublicPageProvider-DlsCaR5v.d.ts} +26 -16
- package/dist/{chunk-FENMYN2U.js → chunk-5X4QLXRG.js} +1 -3
- package/dist/{chunk-4T7OBVTU.js → chunk-6F3IILHI.js} +1 -1
- package/dist/{chunk-SD6WQY43.js → chunk-7ILTDCL2.js} +9 -1
- package/dist/{chunk-3QC3KRHK.js → chunk-A3W6LW53.js} +16 -1
- package/dist/{chunk-7TYHROIV.js → chunk-BM4CQ5P3.js} +50 -8
- package/dist/{chunk-2HGJFNAH.js → chunk-FEJLJNWA.js} +1 -15
- package/dist/{chunk-OHIK3MIO.js → chunk-GHYHJTYV.js} +2 -2
- package/dist/{chunk-UIYSCEV7.js → chunk-IUBRCBSY.js} +1 -1
- package/dist/{chunk-LAZMKTTF.js → chunk-JGWDVX64.js} +281 -347
- package/dist/{chunk-MAGBIDNS.js → chunk-L4XMVJKY.js} +2 -2
- package/dist/{chunk-A55DK444.js → chunk-OJ4SKRSV.js} +1 -7
- package/dist/{chunk-ZS5VO5JB.js → chunk-Q7Q7V5NV.js} +406 -451
- package/dist/{chunk-3O3WHILE.js → chunk-VBCS3DUA.js} +236 -60
- package/dist/{chunk-BVP2BCJF.js → chunk-ZKAWKYT4.js} +8 -8
- package/dist/components.d.ts +5 -4
- package/dist/components.js +27 -32
- package/dist/eslint-rules/index.cjs +22 -9
- package/{src/eslint-rules/rules/compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +184 -23
- package/dist/eslint-rules/rules/04-code-quality.cjs +290 -0
- package/dist/eslint-rules/rules/05-styling.cjs +61 -0
- package/dist/eslint-rules/rules/{rbac.cjs → 06-security-rbac.cjs} +26 -10
- package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
- package/dist/eslint-rules/rules/08-testing.cjs +94 -0
- package/dist/hooks.d.ts +5 -5
- package/dist/hooks.js +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +18 -17
- package/dist/rbac/index.js +6 -6
- package/dist/theming/runtime.d.ts +14 -1
- package/dist/theming/runtime.js +1 -1
- package/dist/{types-B-K_5VnO.d.ts → types-DXstZpNI.d.ts} +0 -17
- package/dist/{usePublicRouteParams-COZ28Mvq.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +19 -19
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +8 -8
- package/docs/README.md +1 -1
- package/docs/api/modules.md +47 -31
- package/docs/api-reference/components.md +18 -20
- package/docs/api-reference/hooks.md +80 -80
- package/docs/api-reference/types.md +1 -1
- package/docs/api-reference/utilities.md +1 -1
- package/docs/architecture/README.md +1 -1
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +6 -6
- package/docs/core-concepts/permissions.md +6 -6
- package/docs/documentation-index.md +12 -18
- package/docs/getting-started/documentation-index.md +1 -1
- package/docs/getting-started/examples/README.md +4 -4
- package/docs/getting-started/examples/full-featured-app.md +1 -1
- package/docs/getting-started/faq.md +2 -2
- package/docs/getting-started/quick-reference.md +4 -4
- package/docs/implementation-guides/authentication.md +15 -15
- package/docs/implementation-guides/component-styling.md +1 -1
- package/docs/implementation-guides/data-tables.md +126 -33
- package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
- package/docs/implementation-guides/dynamic-colors.md +3 -3
- package/docs/implementation-guides/file-upload-storage.md +2 -2
- package/docs/implementation-guides/hierarchical-datatable.md +40 -60
- package/docs/implementation-guides/inactivity-tracking.md +3 -3
- package/docs/implementation-guides/large-datasets.md +3 -2
- package/docs/implementation-guides/organisation-security.md +2 -2
- package/docs/implementation-guides/performance.md +2 -2
- package/docs/implementation-guides/permission-enforcement.md +1 -1
- package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
- package/docs/migration/V0.4.0_rbac-migration.md +6 -6
- package/docs/rbac/README.md +5 -5
- package/docs/rbac/advanced-patterns.md +6 -6
- package/docs/rbac/api-reference.md +20 -20
- package/docs/rbac/event-based-apps.md +3 -3
- package/docs/rbac/examples.md +41 -41
- package/docs/rbac/getting-started.md +37 -37
- package/docs/rbac/performance.md +1 -1
- package/docs/rbac/quick-start.md +52 -52
- package/docs/rbac/secure-client-protection.md +1 -1
- package/docs/rbac/troubleshooting.md +1 -1
- package/docs/security/README.md +5 -5
- package/docs/standards/0-standards-overview.md +220 -0
- package/docs/standards/{00-pace-core-compliance.md → 1-pace-core-compliance-standards.md} +204 -185
- package/docs/standards/{02-project-structure.md → 2-project-structure-standards.md} +11 -47
- package/docs/standards/3-architecture-standards.md +606 -0
- package/docs/standards/4-code-quality-standards.md +728 -0
- package/docs/standards/{08-markup-quality.md → 5-styling-standards.md} +12 -9
- package/docs/standards/{09-rbac-compliance.md → 6-security-rbac-standards.md} +126 -18
- package/docs/standards/7-api-tech-stack-standards.md +662 -0
- package/docs/standards/8-testing-documentation-standards.md +401 -0
- package/docs/standards/9-operations-standards.md +1102 -0
- package/docs/standards/README.md +203 -104
- package/docs/troubleshooting/README.md +4 -4
- package/docs/troubleshooting/common-issues.md +2 -2
- package/docs/troubleshooting/debugging.md +9 -9
- package/docs/troubleshooting/migration.md +4 -4
- package/eslint-config-pace-core.cjs +21 -10
- package/package.json +6 -5
- package/scripts/install-cursor-rules.cjs +11 -243
- package/scripts/install-eslint-config.cjs +284 -0
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +2 -2
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +10 -10
- package/src/__tests__/integration/UserProfile.test.tsx +14 -14
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
- package/src/__tests__/templates/accessibility.test.template.tsx +9 -9
- package/src/__tests__/templates/component.test.template.tsx +18 -15
- package/src/components/Calendar/Calendar.tsx +201 -47
- package/src/components/ContextSelector/ContextSelector.tsx +137 -153
- package/src/components/DataTable/AUDIT_REPORT.md +293 -0
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +10 -2
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +10 -4
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
- package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
- package/src/components/DataTable/components/DataTableLayout.tsx +5 -16
- package/src/components/DataTable/components/EditableRow.tsx +5 -7
- package/src/components/DataTable/components/EmptyState.tsx +10 -9
- package/src/components/DataTable/components/FilterRow.tsx +2 -4
- package/src/components/DataTable/components/ImportModal.tsx +124 -126
- package/src/components/DataTable/components/LoadingState.tsx +5 -6
- package/src/components/DataTable/components/SortIndicator.tsx +50 -0
- package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
- package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
- package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
- package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
- package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +41 -27
- package/src/components/DataTable/components/index.ts +2 -1
- package/src/components/DataTable/types.ts +0 -18
- package/src/components/DataTable/utils/a11yUtils.ts +17 -0
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +2 -1
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
- package/src/components/DateTimeField/DateTimeField.tsx +7 -8
- package/src/components/Dialog/Dialog.test.tsx +1 -0
- package/src/components/Dialog/Dialog.tsx +25 -8
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
- package/src/components/FileUpload/FileUpload.test.tsx +52 -14
- package/src/components/FileUpload/FileUpload.tsx +112 -130
- package/src/components/Progress/Progress.tsx +2 -4
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
- package/src/components/Select/Select.tsx +86 -77
- package/src/components/Select/types.ts +3 -0
- package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
- package/src/hooks/__tests__/hooks.integration.test.tsx +49 -49
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
- package/src/hooks/public/usePublicEvent.ts +5 -5
- package/src/hooks/public/usePublicEventLogo.ts +5 -5
- package/src/hooks/public/usePublicFileDisplay.ts +2 -2
- package/src/hooks/public/usePublicRouteParams.ts +5 -5
- package/src/hooks/useAppConfig.ts +2 -2
- package/src/hooks/useEventTheme.test.ts +7 -7
- package/src/hooks/useEventTheme.ts +1 -4
- package/src/hooks/useFileDisplay.ts +2 -2
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
- package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
- package/src/providers/__tests__/EventProvider.test.tsx +61 -61
- package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
- package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +37 -37
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +10 -10
- package/src/styles/core.css +7 -0
- package/src/theming/__tests__/parseEventColours.test.ts +9 -3
- package/src/theming/parseEventColours.ts +22 -10
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
- package/src/utils/storage/README.md +1 -1
- package/cursor-rules/01-standards-compliance.mdc +0 -285
- package/cursor-rules/04-testing-standards.mdc +0 -270
- package/cursor-rules/05-bug-reports-and-features.mdc +0 -248
- package/cursor-rules/06-code-quality.mdc +0 -311
- package/cursor-rules/07-tech-stack-compliance.mdc +0 -216
- package/cursor-rules/10-error-handling-patterns.mdc +0 -179
- package/cursor-rules/11-performance-optimization.mdc +0 -169
- package/cursor-rules/12-ci-cd-integration.mdc +0 -150
- package/dist/DataTable-LRJL4IRV.js +0 -15
- package/dist/eslint-rules/rules/compliance.cjs +0 -348
- package/dist/eslint-rules/rules/components.cjs +0 -113
- package/dist/eslint-rules/rules/imports.cjs +0 -102
- package/docs/best-practices/README.md +0 -472
- package/docs/best-practices/accessibility.md +0 -604
- package/docs/best-practices/common-patterns.md +0 -516
- package/docs/best-practices/deployment.md +0 -1103
- package/docs/best-practices/performance.md +0 -1328
- package/docs/best-practices/security.md +0 -940
- package/docs/best-practices/testing.md +0 -1034
- package/docs/rbac/compliance/compliance-guide.md +0 -544
- package/docs/standards/01-standards-compliance.md +0 -188
- package/docs/standards/03-solid-principles.md +0 -39
- package/docs/standards/04-testing-standards.md +0 -36
- package/docs/standards/05-bug-reports-and-features.md +0 -27
- package/docs/standards/06-code-quality.md +0 -34
- package/docs/standards/07-tech-stack-compliance.md +0 -30
- package/docs/standards/10-error-handling-patterns.md +0 -401
- package/docs/standards/11-performance-optimization.md +0 -348
- package/docs/standards/12-ci-cd-integration.md +0 -370
- package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +0 -192
- package/scripts/audit/audit-compliance.cjs +0 -1295
- package/scripts/audit/audit-components.cjs +0 -260
- package/scripts/audit/audit-rbac.cjs +0 -954
- package/scripts/audit/audit-standards.cjs +0 -1268
- package/scripts/audit/index.cjs +0 -1927
- package/src/components/DataTable/components/DataTableBody.tsx +0 -478
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
- package/src/components/DataTable/components/ExpandButton.tsx +0 -113
- package/src/components/DataTable/components/GroupHeader.tsx +0 -54
- package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
- package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
- package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
- package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
- package/src/components/DataTable/core/DataTableContext.tsx +0 -216
- package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
- package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
- package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
- package/src/components/DataTable/utils/debugTools.ts +0 -514
- package/src/eslint-rules/index.cjs +0 -22
- package/src/eslint-rules/rules/components.cjs +0 -113
- package/src/eslint-rules/rules/imports.cjs +0 -102
- package/src/eslint-rules/rules/rbac.cjs +0 -790
- package/src/eslint-rules/utils/helpers.cjs +0 -42
- package/src/eslint-rules/utils/manifest-loader.cjs +0 -75
|
@@ -77,21 +77,21 @@ const DebouncedSearch = () => {
|
|
|
77
77
|
}, [debouncedSearchTerm]);
|
|
78
78
|
|
|
79
79
|
return (
|
|
80
|
-
<
|
|
80
|
+
<section>
|
|
81
81
|
<Input
|
|
82
82
|
data-testid="search-input"
|
|
83
83
|
value={searchTerm}
|
|
84
84
|
onChange={(e) => setSearchTerm(e.target.value)}
|
|
85
85
|
placeholder="Search..."
|
|
86
86
|
/>
|
|
87
|
-
<
|
|
88
|
-
<
|
|
89
|
-
<
|
|
87
|
+
<p data-testid="search-term">Current: {searchTerm}</p>
|
|
88
|
+
<p data-testid="debounced-term">Debounced: {debouncedSearchTerm}</p>
|
|
89
|
+
<section data-testid="results">
|
|
90
90
|
{searchResults.map((result, index) => (
|
|
91
|
-
<
|
|
91
|
+
<p key={index} data-testid={`result-${index}`}>{result}</p>
|
|
92
92
|
))}
|
|
93
|
-
</
|
|
94
|
-
</
|
|
93
|
+
</section>
|
|
94
|
+
</section>
|
|
95
95
|
);
|
|
96
96
|
};
|
|
97
97
|
|
|
@@ -100,17 +100,17 @@ const ResponsiveComponent = () => {
|
|
|
100
100
|
const isMobile = useIsMobile();
|
|
101
101
|
|
|
102
102
|
return (
|
|
103
|
-
<
|
|
104
|
-
<
|
|
103
|
+
<section>
|
|
104
|
+
<p data-testid="device-type">
|
|
105
105
|
{isMobile ? 'Mobile' : 'Desktop'}
|
|
106
|
-
</
|
|
106
|
+
</p>
|
|
107
107
|
<Button
|
|
108
108
|
data-testid="responsive-button"
|
|
109
109
|
className={isMobile ? 'mobile-button' : 'desktop-button'}
|
|
110
110
|
>
|
|
111
111
|
{isMobile ? 'Mobile Action' : 'Desktop Action'}
|
|
112
112
|
</Button>
|
|
113
|
-
</
|
|
113
|
+
</section>
|
|
114
114
|
);
|
|
115
115
|
};
|
|
116
116
|
|
|
@@ -138,7 +138,7 @@ const ValidatedForm = ({ onSubmit }: ValidatedFormProps = {}) => {
|
|
|
138
138
|
onSubmit={handleSubmit}
|
|
139
139
|
>
|
|
140
140
|
{(methods) => (
|
|
141
|
-
<ValidatedFormFields methods={methods} />
|
|
141
|
+
<ValidatedFormFields methods={methods as any} />
|
|
142
142
|
)}
|
|
143
143
|
</Form>
|
|
144
144
|
);
|
|
@@ -151,27 +151,27 @@ const ValidatedFormFields = ({ methods }: { methods: ReturnType<typeof useForm>
|
|
|
151
151
|
|
|
152
152
|
return (
|
|
153
153
|
<>
|
|
154
|
-
<
|
|
154
|
+
<section>
|
|
155
155
|
<Input
|
|
156
156
|
{...methods.register('name')}
|
|
157
157
|
data-testid="name-input"
|
|
158
158
|
placeholder="Name"
|
|
159
159
|
/>
|
|
160
160
|
{errors.name && (
|
|
161
|
-
<
|
|
161
|
+
<p data-testid="name-error">{String(errors.name.message)}</p>
|
|
162
162
|
)}
|
|
163
|
-
</
|
|
164
|
-
<
|
|
163
|
+
</section>
|
|
164
|
+
<section>
|
|
165
165
|
<Input
|
|
166
166
|
{...methods.register('email')}
|
|
167
167
|
data-testid="email-input"
|
|
168
168
|
placeholder="Email"
|
|
169
169
|
/>
|
|
170
170
|
{errors.email && (
|
|
171
|
-
<
|
|
171
|
+
<p data-testid="email-error">{String(errors.email.message)}</p>
|
|
172
172
|
)}
|
|
173
|
-
</
|
|
174
|
-
<
|
|
173
|
+
</section>
|
|
174
|
+
<section>
|
|
175
175
|
<Input
|
|
176
176
|
{...methods.register('age', { valueAsNumber: true })}
|
|
177
177
|
data-testid="age-input"
|
|
@@ -179,9 +179,9 @@ const ValidatedFormFields = ({ methods }: { methods: ReturnType<typeof useForm>
|
|
|
179
179
|
placeholder="Age"
|
|
180
180
|
/>
|
|
181
181
|
{errors.age && (
|
|
182
|
-
<
|
|
182
|
+
<p data-testid="age-error">{String(errors.age.message)}</p>
|
|
183
183
|
)}
|
|
184
|
-
</
|
|
184
|
+
</section>
|
|
185
185
|
<Button type="submit" data-testid="submit-button">
|
|
186
186
|
Submit
|
|
187
187
|
</Button>
|
|
@@ -211,20 +211,20 @@ const KeyboardShortcutsComponent = () => {
|
|
|
211
211
|
useKeyboardShortcuts(shortcuts);
|
|
212
212
|
|
|
213
213
|
return (
|
|
214
|
-
<
|
|
214
|
+
<section>
|
|
215
215
|
<Button onClick={() => setIsModalOpen(true)} data-testid="open-modal">
|
|
216
216
|
Open Modal
|
|
217
217
|
</Button>
|
|
218
218
|
{isModalOpen && (
|
|
219
|
-
<
|
|
220
|
-
<
|
|
219
|
+
<section data-testid="modal">
|
|
220
|
+
<p>Modal Content</p>
|
|
221
221
|
<Button onClick={() => setIsModalOpen(false)} data-testid="close-modal">
|
|
222
222
|
Close
|
|
223
223
|
</Button>
|
|
224
|
-
</
|
|
224
|
+
</section>
|
|
225
225
|
)}
|
|
226
|
-
<
|
|
227
|
-
</
|
|
226
|
+
<p data-testid="saved-status">{savedData}</p>
|
|
227
|
+
</section>
|
|
228
228
|
);
|
|
229
229
|
};
|
|
230
230
|
|
|
@@ -238,13 +238,13 @@ const FocusManagementComponent = () => {
|
|
|
238
238
|
});
|
|
239
239
|
|
|
240
240
|
return (
|
|
241
|
-
<
|
|
241
|
+
<section ref={focusManager.containerRef}>
|
|
242
242
|
<Button data-testid="first-button">First Button</Button>
|
|
243
243
|
<Input data-testid="first-input" placeholder="First Input" />
|
|
244
244
|
<Button data-testid="second-button">Second Button</Button>
|
|
245
245
|
<Input data-testid="second-input" placeholder="Second Input" />
|
|
246
246
|
<Button data-testid="last-button">Last Button</Button>
|
|
247
|
-
</
|
|
247
|
+
</section>
|
|
248
248
|
);
|
|
249
249
|
};
|
|
250
250
|
|
|
@@ -257,10 +257,10 @@ const PerformanceTestComponent = () => {
|
|
|
257
257
|
});
|
|
258
258
|
|
|
259
259
|
return (
|
|
260
|
-
<
|
|
260
|
+
<section data-testid="performance-component">
|
|
261
261
|
<h1>Performance Test Component</h1>
|
|
262
262
|
<p>This component is being monitored for performance.</p>
|
|
263
|
-
</
|
|
263
|
+
</section>
|
|
264
264
|
);
|
|
265
265
|
};
|
|
266
266
|
|
|
@@ -269,19 +269,19 @@ const DataTableStateComponent = () => {
|
|
|
269
269
|
const tableState = useDataTableState({ initialPageSize: 10, data: [] });
|
|
270
270
|
|
|
271
271
|
return (
|
|
272
|
-
<
|
|
273
|
-
<
|
|
272
|
+
<section>
|
|
273
|
+
<p data-testid="sorting-state">
|
|
274
274
|
Sorting: {JSON.stringify(tableState.state.sorting)}
|
|
275
|
-
</
|
|
276
|
-
<
|
|
275
|
+
</p>
|
|
276
|
+
<p data-testid="filters-state">
|
|
277
277
|
Filters: {JSON.stringify(tableState.state.columnFilters)}
|
|
278
|
-
</
|
|
279
|
-
<
|
|
278
|
+
</p>
|
|
279
|
+
<p data-testid="page-state">
|
|
280
280
|
Page: {tableState.state.pageIndex + 1} of {Math.ceil(100 / tableState.state.pageSize)}
|
|
281
|
-
</
|
|
282
|
-
<
|
|
281
|
+
</p>
|
|
282
|
+
<p data-testid="selected-rows">
|
|
283
283
|
Selected: {tableState.state.selectedRows.length} rows
|
|
284
|
-
</
|
|
284
|
+
</p>
|
|
285
285
|
<Button
|
|
286
286
|
onClick={() => tableState.actions.setSorting([{ id: 'name', desc: false }])}
|
|
287
287
|
data-testid="sort-name"
|
|
@@ -294,7 +294,7 @@ const DataTableStateComponent = () => {
|
|
|
294
294
|
>
|
|
295
295
|
Filter Active
|
|
296
296
|
</Button>
|
|
297
|
-
</
|
|
297
|
+
</section>
|
|
298
298
|
);
|
|
299
299
|
};
|
|
300
300
|
|
|
@@ -332,7 +332,7 @@ describe('Hooks Integration', () => {
|
|
|
332
332
|
await user.type(searchInput, 'abc');
|
|
333
333
|
|
|
334
334
|
// Should not show results immediately
|
|
335
|
-
expect(screen.queryByTestId('result-0')).
|
|
335
|
+
expect(screen.queryByTestId('result-0')).toBeNull();
|
|
336
336
|
|
|
337
337
|
// Wait for final debounced value
|
|
338
338
|
await waitFor(() => {
|
|
@@ -402,11 +402,11 @@ describe('Hooks Integration', () => {
|
|
|
402
402
|
const emailError = screen.queryByTestId('email-error');
|
|
403
403
|
const ageError = screen.queryByTestId('age-error');
|
|
404
404
|
|
|
405
|
-
expect(nameError).
|
|
405
|
+
expect(nameError).toBeDefined();
|
|
406
406
|
expect(nameError).toHaveTextContent('Name must be at least 2 characters');
|
|
407
|
-
expect(emailError).
|
|
407
|
+
expect(emailError).toBeDefined();
|
|
408
408
|
expect(emailError).toHaveTextContent('Invalid email address');
|
|
409
|
-
expect(ageError).
|
|
409
|
+
expect(ageError).toBeDefined();
|
|
410
410
|
expect(ageError).toHaveTextContent('Must be at least 18 years old');
|
|
411
411
|
}, { timeout: 5000 });
|
|
412
412
|
});
|
|
@@ -451,13 +451,13 @@ describe('Hooks Integration', () => {
|
|
|
451
451
|
const openButton = screen.getByTestId('open-modal');
|
|
452
452
|
fireEvent.click(openButton);
|
|
453
453
|
|
|
454
|
-
expect(screen.getByTestId('modal')).
|
|
454
|
+
expect(screen.getByTestId('modal')).toBeDefined();
|
|
455
455
|
|
|
456
456
|
// Test Escape key
|
|
457
457
|
fireEvent.keyDown(document, { key: 'Escape' });
|
|
458
458
|
|
|
459
459
|
await waitFor(() => {
|
|
460
|
-
expect(screen.queryByTestId('modal')).
|
|
460
|
+
expect(screen.queryByTestId('modal')).toBeNull();
|
|
461
461
|
});
|
|
462
462
|
});
|
|
463
463
|
|
|
@@ -512,7 +512,7 @@ describe('Hooks Integration', () => {
|
|
|
512
512
|
|
|
513
513
|
renderWithProviders(<PerformanceTestComponent />);
|
|
514
514
|
|
|
515
|
-
expect(screen.getByTestId('performance-component')).
|
|
515
|
+
expect(screen.getByTestId('performance-component')).toBeDefined();
|
|
516
516
|
|
|
517
517
|
// Simulate slow render
|
|
518
518
|
mockPerformance.now.mockReturnValueOnce(0);
|
|
@@ -529,7 +529,7 @@ describe('Hooks Integration', () => {
|
|
|
529
529
|
// Note: This test may need to be updated based on how useComponentPerformance is used
|
|
530
530
|
// The Logger mock should be checked if logging is enabled
|
|
531
531
|
// For now, we verify the component renders without errors
|
|
532
|
-
expect(screen.getByTestId('performance-component')).
|
|
532
|
+
expect(screen.getByTestId('performance-component')).toBeDefined();
|
|
533
533
|
});
|
|
534
534
|
});
|
|
535
535
|
|