Skip to content

Commit eb4481a

Browse files
Copilothotlong
andcommitted
fix: align ViewType and Zod schemas with spec UI protocol
- Add 'gallery' and 'gantt' to ViewType in views.ts - Add 'gallery' and 'gantt' to ViewTypeSchema in views.zod.ts - Sync DetailViewFieldSchema type enum with TS interface (add data-oriented types) - Add missing options, reference_to, reference_field, currency fields to DetailViewFieldSchema - Add missing showBorder, headerColor fields to DetailViewSectionSchema - Add gallery and gantt icons/labels to plugin-view ViewSwitcher Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 3c43079 commit eb4481a

3 files changed

Lines changed: 23 additions & 3 deletions

File tree

packages/plugin-view/src/ViewSwitcher.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ import {
2626
Activity,
2727
Calendar,
2828
FileText,
29+
GanttChartSquare,
2930
Grid,
31+
Images,
3032
LayoutGrid,
3133
List,
3234
Map,
@@ -51,6 +53,8 @@ const DEFAULT_VIEW_LABELS: Record<ViewType, string> = {
5153
calendar: 'Calendar',
5254
timeline: 'Timeline',
5355
map: 'Map',
56+
gallery: 'Gallery',
57+
gantt: 'Gantt',
5458
};
5559

5660
const DEFAULT_VIEW_ICONS: Record<ViewType, LucideIcon> = {
@@ -61,6 +65,8 @@ const DEFAULT_VIEW_ICONS: Record<ViewType, LucideIcon> = {
6165
calendar: Calendar,
6266
timeline: Activity,
6367
map: Map,
68+
gallery: Images,
69+
gantt: GanttChartSquare,
6470
};
6571

6672
const viewSwitcherLayout = cva('flex gap-4', {

packages/types/src/views.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import type { SelectOptionMetadata } from './field-types';
2525
/**
2626
* View Type
2727
*/
28-
export type ViewType = 'list' | 'detail' | 'grid' | 'kanban' | 'calendar' | 'timeline' | 'map';
28+
export type ViewType = 'list' | 'detail' | 'grid' | 'kanban' | 'calendar' | 'timeline' | 'map' | 'gallery' | 'gantt';
2929

3030
/**
3131
* Detail View Field Configuration

packages/types/src/zod/views.zod.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,33 @@ import { BaseSchema, SchemaNodeSchema } from './base.zod.js';
2222
/**
2323
* View Type Schema
2424
*/
25-
export const ViewTypeSchema = z.enum(['list', 'detail', 'grid', 'kanban', 'calendar', 'timeline', 'map']).describe('View type');
25+
export const ViewTypeSchema = z.enum(['list', 'detail', 'grid', 'kanban', 'calendar', 'timeline', 'map', 'gallery', 'gantt']).describe('View type');
2626

2727
/**
2828
* Detail View Field Schema
2929
*/
3030
export const DetailViewFieldSchema = z.object({
3131
name: z.string().describe('Field name/path'),
3232
label: z.string().optional().describe('Display label'),
33-
type: z.enum(['text', 'image', 'link', 'badge', 'date', 'datetime', 'json', 'html', 'markdown', 'custom']).optional().describe('Field type for rendering'),
33+
type: z.enum([
34+
'text', 'number', 'currency', 'percent', 'boolean', 'select', 'lookup', 'master_detail',
35+
'email', 'url', 'phone', 'user',
36+
'image', 'link', 'badge', 'date', 'datetime', 'json', 'html', 'markdown', 'custom',
37+
]).optional().describe('Field type for rendering'),
3438
format: z.string().optional().describe('Format string (e.g., date format)'),
3539
render: SchemaNodeSchema.optional().describe('Custom renderer'),
3640
value: z.any().optional().describe('Field value'),
3741
readonly: z.boolean().optional().describe('Whether field is read-only'),
3842
visible: z.union([z.boolean(), z.string()]).optional().describe('Field visibility condition'),
3943
span: z.number().optional().describe('Span across columns (for grid layout)'),
44+
options: z.array(z.object({
45+
label: z.string(),
46+
value: z.union([z.string(), z.number(), z.boolean()]),
47+
color: z.string().optional(),
48+
})).optional().describe('Options for select/lookup fields'),
49+
reference_to: z.string().optional().describe('Referenced object name for lookup/master_detail fields'),
50+
reference_field: z.string().optional().describe('Display field on the referenced object'),
51+
currency: z.string().optional().describe('Currency code for currency fields (e.g. USD, EUR)'),
4052
});
4153

4254
/**
@@ -51,6 +63,8 @@ export const DetailViewSectionSchema = z.object({
5163
defaultCollapsed: z.boolean().optional().describe('Default collapsed state'),
5264
columns: z.number().optional().describe('Grid columns for field layout'),
5365
visible: z.union([z.boolean(), z.string()]).optional().describe('Section visibility condition'),
66+
showBorder: z.boolean().optional().describe('Show border around section'),
67+
headerColor: z.string().optional().describe('Header background color (Tailwind class)'),
5468
});
5569

5670
/**

0 commit comments

Comments
 (0)