Skip to content

Commit 53bdd0c

Browse files
authored
Merge pull request #953 from objectstack-ai/copilot/upgrade-objectstack-to-latest-one-more-time
2 parents 4083489 + aa300b2 commit 53bdd0c

28 files changed

+1163
-259
lines changed

ROADMAP.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# ObjectUI Development Roadmap
22

3-
> **Last Updated:** March 1, 2026
3+
> **Last Updated:** March 2, 2026
44
> **Current Version:** v0.5.x
5-
> **Spec Version:** @objectstack/spec v3.0.10
6-
> **Client Version:** @objectstack/client v3.0.10
5+
> **Spec Version:** @objectstack/spec v3.2.0
6+
> **Client Version:** @objectstack/client v3.2.0
77
> **Target UX Benchmark:** 🎯 Airtable parity
88
> **Current Priority:** AppShell Navigation · Designer Interaction · **View Config Live Preview Sync ✅** · Dashboard Config Panel · Airtable UX Polish · **Flow Designer ✅** · **App Creation & Editing Flow ✅** · **System Settings & App Management ✅** · **Right-Side Visual Editor Drawer ✅**
99
@@ -49,6 +49,15 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind
4949

5050
---
5151

52+
## 🔄 Spec v3.2.0 Upgrade Summary
53+
54+
> Upgraded from `@objectstack/spec v3.0.10``v3.2.0` on March 2, 2026. All `@objectstack/*` packages upgraded to v3.2.0.
55+
56+
**Breaking Changes Applied:**
57+
- Actions with `type: 'api'` now require a `target` field (the API endpoint/handler name). Added `target` to all API actions across examples (CRM, todo, msw-todo, kitchen-sink).
58+
59+
---
60+
5261
## 🔄 Spec v3.0.10 Upgrade Summary
5362

5463
> Upgraded from `@objectstack/spec v3.0.9``v3.0.10` on February 25, 2026. UI sub-export adds new Zod schemas and `ViewFilterRule` type. Dashboard widgets now require `id` field. View filters must use object format.

apps/console/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@
6666
"@object-ui/plugin-view": "workspace:*",
6767
"@object-ui/react": "workspace:*",
6868
"@object-ui/types": "workspace:*",
69-
"@objectstack/cli": "^3.0.10",
70-
"@objectstack/client": "^3.0.10",
71-
"@objectstack/driver-memory": "^3.0.10",
72-
"@objectstack/objectql": "^3.0.10",
73-
"@objectstack/plugin-msw": "^3.0.10",
74-
"@objectstack/runtime": "^3.0.10",
75-
"@objectstack/spec": "^3.0.10",
69+
"@objectstack/cli": "^3.2.0",
70+
"@objectstack/client": "^3.2.0",
71+
"@objectstack/driver-memory": "^3.2.0",
72+
"@objectstack/objectql": "^3.2.0",
73+
"@objectstack/plugin-msw": "^3.2.0",
74+
"@objectstack/runtime": "^3.2.0",
75+
"@objectstack/spec": "^3.2.0",
7676
"@tailwindcss/postcss": "^4.1.18",
7777
"@testing-library/jest-dom": "^6.9.1",
7878
"@testing-library/react": "^16.3.2",

examples/crm/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@
1919
},
2020
"dependencies": {
2121
"@hono/node-server": "^1.19.9",
22-
"@objectstack/core": "^3.0.10",
23-
"@objectstack/driver-memory": "^3.0.10",
24-
"@objectstack/objectql": "^3.0.10",
25-
"@objectstack/plugin-auth": "^3.0.10",
26-
"@objectstack/plugin-hono-server": "^3.0.10",
27-
"@objectstack/runtime": "^3.0.10",
28-
"@objectstack/spec": "^3.0.10",
22+
"@objectstack/core": "^3.2.0",
23+
"@objectstack/driver-memory": "^3.2.0",
24+
"@objectstack/objectql": "^3.2.0",
25+
"@objectstack/plugin-auth": "^3.2.0",
26+
"@objectstack/plugin-hono-server": "^3.2.0",
27+
"@objectstack/runtime": "^3.2.0",
28+
"@objectstack/spec": "^3.2.0",
2929
"hono": "^4.12.2",
3030
"pino": "^8.21.0",
3131
"pino-pretty": "^13.1.3"
3232
},
3333
"devDependencies": {
34-
"@objectstack/cli": "^3.0.10",
34+
"@objectstack/cli": "^3.2.0",
3535
"tsx": "^4.21.0",
3636
"typescript": "^5.9.3"
3737
}

examples/crm/src/actions/account.actions.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const AccountActions = [
44
label: 'Send Email',
55
icon: 'mail',
66
type: 'api' as const,
7+
target: 'account_send_email',
78
locations: ['record_header' as const, 'list_item' as const],
89
params: [
910
{ name: 'to', label: 'To Email', type: 'email' as const, required: true },
@@ -17,6 +18,7 @@ export const AccountActions = [
1718
label: 'Assign Owner',
1819
icon: 'user-plus',
1920
type: 'api' as const,
21+
target: 'account_assign_owner',
2022
locations: ['record_header' as const, 'list_item' as const, 'list_toolbar' as const],
2123
bulkEnabled: true,
2224
params: [
@@ -30,6 +32,7 @@ export const AccountActions = [
3032
label: 'Merge Accounts',
3133
icon: 'git-merge',
3234
type: 'api' as const,
35+
target: 'account_merge',
3336
locations: ['record_more' as const],
3437
confirmText: 'Are you sure you want to merge these accounts? This action cannot be undone.',
3538
variant: 'danger' as const,

examples/crm/src/actions/contact.actions.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const ContactActions = [
44
label: 'Send Email',
55
icon: 'mail',
66
type: 'api' as const,
7+
target: 'contact_send_email',
78
locations: ['record_header' as const, 'list_item' as const, 'list_toolbar' as const],
89
bulkEnabled: true,
910
params: [
@@ -17,6 +18,7 @@ export const ContactActions = [
1718
label: 'Convert to Customer',
1819
icon: 'user-check',
1920
type: 'api' as const,
21+
target: 'contact_convert_to_customer',
2022
locations: ['record_header' as const],
2123
visible: "type !== 'Customer'",
2224
confirmText: 'Convert this contact to a customer?',
@@ -28,6 +30,7 @@ export const ContactActions = [
2830
label: 'Log a Call',
2931
icon: 'phone',
3032
type: 'api' as const,
33+
target: 'contact_log_call',
3134
locations: ['record_header' as const, 'list_item' as const],
3235
params: [
3336
{ name: 'call_subject', label: 'Subject', type: 'text' as const, required: true },

examples/crm/src/actions/event.actions.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const EventActions = [
44
label: 'Send Invitation',
55
icon: 'send',
66
type: 'api' as const,
7+
target: 'event_send_invitation',
78
locations: ['record_header' as const],
89
params: [
910
{ name: 'message', label: 'Optional Message', type: 'textarea' as const },
@@ -15,6 +16,7 @@ export const EventActions = [
1516
label: 'Mark as Completed',
1617
icon: 'check-circle',
1718
type: 'api' as const,
19+
target: 'event_mark_completed',
1820
locations: ['record_header' as const],
1921
confirmText: 'Mark this event as completed?',
2022
refreshAfter: true,
@@ -25,6 +27,7 @@ export const EventActions = [
2527
label: 'Cancel Event',
2628
icon: 'x-circle',
2729
type: 'api' as const,
30+
target: 'event_cancel',
2831
locations: ['record_more' as const],
2932
variant: 'danger' as const,
3033
params: [

examples/crm/src/actions/opportunity.actions.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const OpportunityActions = [
44
label: 'Change Stage',
55
icon: 'arrow-right-circle',
66
type: 'api' as const,
7+
target: 'opportunity_change_stage',
78
locations: ['record_header' as const, 'list_item' as const, 'list_toolbar' as const],
89
bulkEnabled: true,
910
visible: "stage !== 'closed_won' && stage !== 'closed_lost'",
@@ -28,6 +29,7 @@ export const OpportunityActions = [
2829
label: 'Mark as Won',
2930
icon: 'trophy',
3031
type: 'api' as const,
32+
target: 'opportunity_mark_won',
3133
locations: ['record_header' as const],
3234
variant: 'primary' as const,
3335
visible: "stage !== 'closed_won' && stage !== 'closed_lost'",
@@ -40,6 +42,7 @@ export const OpportunityActions = [
4042
label: 'Mark as Lost',
4143
icon: 'x-circle',
4244
type: 'api' as const,
45+
target: 'opportunity_mark_lost',
4346
locations: ['record_more' as const],
4447
variant: 'danger' as const,
4548
visible: "stage !== 'closed_won' && stage !== 'closed_lost'",

examples/crm/src/actions/opportunity_contact.actions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const OpportunityContactActions = [
44
label: 'Set as Primary',
55
icon: 'star',
66
type: 'api' as const,
7+
target: 'opportunity_contact_set_primary',
78
locations: ['record_header' as const, 'list_item' as const],
89
refreshAfter: true,
910
successMessage: 'Primary contact updated',

examples/crm/src/actions/order.actions.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const OrderActions = [
44
label: 'Change Status',
55
icon: 'refresh-cw',
66
type: 'api' as const,
7+
target: 'order_change_status',
78
locations: ['record_header' as const, 'list_item' as const],
89
params: [
910
{
@@ -26,6 +27,7 @@ export const OrderActions = [
2627
label: 'Generate Invoice',
2728
icon: 'file-text',
2829
type: 'api' as const,
30+
target: 'order_generate_invoice',
2931
locations: ['record_header' as const],
3032
confirmText: 'Generate an invoice for this order?',
3133
successMessage: 'Invoice generated successfully',
@@ -35,6 +37,7 @@ export const OrderActions = [
3537
label: 'Mark as Shipped',
3638
icon: 'truck',
3739
type: 'api' as const,
40+
target: 'order_mark_shipped',
3841
locations: ['record_header' as const],
3942
params: [
4043
{ name: 'tracking_number', label: 'Tracking Number', type: 'text' as const, required: true },

examples/crm/src/actions/order_item.actions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const OrderItemActions = [
44
label: 'Adjust Quantity',
55
icon: 'hash',
66
type: 'api' as const,
7+
target: 'order_item_adjust_quantity',
78
locations: ['record_header' as const, 'list_item' as const],
89
params: [
910
{ name: 'new_quantity', label: 'New Quantity', type: 'number' as const, required: true },

0 commit comments

Comments
 (0)