Skip to content

Commit c9bd09e

Browse files
Copilothotlong
andcommitted
refactor: add validation constraints to numeric fields
- Add .positive() validation to ListColumnSchema.width - Add .int().positive() validation to PaginationConfigSchema.pageSize and pageSizeOptions - Add .int().min(1).max(4) validation to FormFieldSchema.colSpan Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent a6f7654 commit c9bd09e

10 files changed

Lines changed: 51 additions & 23 deletions

File tree

content/docs/references/ui/view/FormField.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ description: FormField Schema Reference
1414
| **readonly** | `boolean` | optional | Read-only override |
1515
| **required** | `boolean` | optional | Required override |
1616
| **hidden** | `boolean` | optional | Hidden override |
17-
| **colSpan** | `number` | optional | Column span in grid layout (1-4) |
17+
| **colSpan** | `integer` | optional | Column span in grid layout (1-4) |
1818
| **widget** | `string` | optional | Custom widget/component name |
1919
| **dependsOn** | `string` | optional | Parent field name for cascading |
2020
| **visibleOn** | `string` | optional | Visibility condition expression |

content/docs/references/ui/view/PaginationConfig.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ description: PaginationConfig Schema Reference
77

88
| Property | Type | Required | Description |
99
| :--- | :--- | :--- | :--- |
10-
| **pageSize** | `number` | optional | Number of records per page |
11-
| **pageSizeOptions** | `number[]` | optional | Available page size options |
10+
| **pageSize** | `integer` | optional | Number of records per page |
11+
| **pageSizeOptions** | `integer[]` | optional | Available page size options |

packages/spec/json-schema/ui/FormField.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@
3333
"description": "Hidden override"
3434
},
3535
"colSpan": {
36-
"type": "number",
36+
"type": "integer",
37+
"minimum": 1,
38+
"maximum": 4,
3739
"description": "Column span in grid layout (1-4)"
3840
},
3941
"widget": {

packages/spec/json-schema/ui/FormSection.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@
6464
"description": "Hidden override"
6565
},
6666
"colSpan": {
67-
"type": "number",
67+
"type": "integer",
68+
"minimum": 1,
69+
"maximum": 4,
6870
"description": "Column span in grid layout (1-4)"
6971
},
7072
"widget": {

packages/spec/json-schema/ui/FormView.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@
7878
"description": "Hidden override"
7979
},
8080
"colSpan": {
81-
"type": "number",
81+
"type": "integer",
82+
"minimum": 1,
83+
"maximum": 4,
8284
"description": "Column span in grid layout (1-4)"
8385
},
8486
"widget": {
@@ -174,7 +176,9 @@
174176
"description": "Hidden override"
175177
},
176178
"colSpan": {
177-
"type": "number",
179+
"type": "integer",
180+
"minimum": 1,
181+
"maximum": 4,
178182
"description": "Column span in grid layout (1-4)"
179183
},
180184
"widget": {

packages/spec/json-schema/ui/ListColumn.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
},
1515
"width": {
1616
"type": "number",
17+
"exclusiveMinimum": 0,
1718
"description": "Column width in pixels"
1819
},
1920
"align": {

packages/spec/json-schema/ui/ListView.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
},
4545
"width": {
4646
"type": "number",
47+
"exclusiveMinimum": 0,
4748
"description": "Column width in pixels"
4849
},
4950
"align": {
@@ -159,14 +160,16 @@
159160
"type": "object",
160161
"properties": {
161162
"pageSize": {
162-
"type": "number",
163+
"type": "integer",
164+
"exclusiveMinimum": 0,
163165
"default": 25,
164166
"description": "Number of records per page"
165167
},
166168
"pageSizeOptions": {
167169
"type": "array",
168170
"items": {
169-
"type": "number"
171+
"type": "integer",
172+
"exclusiveMinimum": 0
170173
},
171174
"description": "Available page size options"
172175
}

packages/spec/json-schema/ui/PaginationConfig.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@
55
"type": "object",
66
"properties": {
77
"pageSize": {
8-
"type": "number",
8+
"type": "integer",
9+
"exclusiveMinimum": 0,
910
"default": 25,
1011
"description": "Number of records per page"
1112
},
1213
"pageSizeOptions": {
1314
"type": "array",
1415
"items": {
15-
"type": "number"
16+
"type": "integer",
17+
"exclusiveMinimum": 0
1618
},
1719
"description": "Available page size options"
1820
}

packages/spec/json-schema/ui/View.json

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
},
4848
"width": {
4949
"type": "number",
50+
"exclusiveMinimum": 0,
5051
"description": "Column width in pixels"
5152
},
5253
"align": {
@@ -162,14 +163,16 @@
162163
"type": "object",
163164
"properties": {
164165
"pageSize": {
165-
"type": "number",
166+
"type": "integer",
167+
"exclusiveMinimum": 0,
166168
"default": 25,
167169
"description": "Number of records per page"
168170
},
169171
"pageSizeOptions": {
170172
"type": "array",
171173
"items": {
172-
"type": "number"
174+
"type": "integer",
175+
"exclusiveMinimum": 0
173176
},
174177
"description": "Available page size options"
175178
}
@@ -333,7 +336,9 @@
333336
"description": "Hidden override"
334337
},
335338
"colSpan": {
336-
"type": "number",
339+
"type": "integer",
340+
"minimum": 1,
341+
"maximum": 4,
337342
"description": "Column span in grid layout (1-4)"
338343
},
339344
"widget": {
@@ -429,7 +434,9 @@
429434
"description": "Hidden override"
430435
},
431436
"colSpan": {
432-
"type": "number",
437+
"type": "integer",
438+
"minimum": 1,
439+
"maximum": 4,
433440
"description": "Column span in grid layout (1-4)"
434441
},
435442
"widget": {
@@ -508,6 +515,7 @@
508515
},
509516
"width": {
510517
"type": "number",
518+
"exclusiveMinimum": 0,
511519
"description": "Column width in pixels"
512520
},
513521
"align": {
@@ -623,14 +631,16 @@
623631
"type": "object",
624632
"properties": {
625633
"pageSize": {
626-
"type": "number",
634+
"type": "integer",
635+
"exclusiveMinimum": 0,
627636
"default": 25,
628637
"description": "Number of records per page"
629638
},
630639
"pageSizeOptions": {
631640
"type": "array",
632641
"items": {
633-
"type": "number"
642+
"type": "integer",
643+
"exclusiveMinimum": 0
634644
},
635645
"description": "Available page size options"
636646
}
@@ -798,7 +808,9 @@
798808
"description": "Hidden override"
799809
},
800810
"colSpan": {
801-
"type": "number",
811+
"type": "integer",
812+
"minimum": 1,
813+
"maximum": 4,
802814
"description": "Column span in grid layout (1-4)"
803815
},
804816
"widget": {
@@ -894,7 +906,9 @@
894906
"description": "Hidden override"
895907
},
896908
"colSpan": {
897-
"type": "number",
909+
"type": "integer",
910+
"minimum": 1,
911+
"maximum": 4,
898912
"description": "Column span in grid layout (1-4)"
899913
},
900914
"widget": {

packages/spec/src/ui/view.zod.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { z } from 'zod';
77
export const ListColumnSchema = z.object({
88
field: z.string().describe('Field name (snake_case)'),
99
label: z.string().optional().describe('Display label override'),
10-
width: z.number().optional().describe('Column width in pixels'),
10+
width: z.number().positive().optional().describe('Column width in pixels'),
1111
align: z.enum(['left', 'center', 'right']).optional().describe('Text alignment'),
1212
hidden: z.boolean().optional().describe('Hide column by default'),
1313
sortable: z.boolean().optional().describe('Allow sorting by this column'),
@@ -27,8 +27,8 @@ export const SelectionConfigSchema = z.object({
2727
* List View Pagination Configuration
2828
*/
2929
export const PaginationConfigSchema = z.object({
30-
pageSize: z.number().default(25).describe('Number of records per page'),
31-
pageSizeOptions: z.array(z.number()).optional().describe('Available page size options'),
30+
pageSize: z.number().int().positive().default(25).describe('Number of records per page'),
31+
pageSizeOptions: z.array(z.number().int().positive()).optional().describe('Available page size options'),
3232
});
3333

3434
/**
@@ -115,7 +115,7 @@ export const FormFieldSchema = z.object({
115115
readonly: z.boolean().optional().describe('Read-only override'),
116116
required: z.boolean().optional().describe('Required override'),
117117
hidden: z.boolean().optional().describe('Hidden override'),
118-
colSpan: z.number().optional().describe('Column span in grid layout (1-4)'),
118+
colSpan: z.number().int().min(1).max(4).optional().describe('Column span in grid layout (1-4)'),
119119
widget: z.string().optional().describe('Custom widget/component name'),
120120
dependsOn: z.string().optional().describe('Parent field name for cascading'),
121121
visibleOn: z.string().optional().describe('Visibility condition expression'),

0 commit comments

Comments
 (0)