Skip to content

Add ObjectQL 1.9.1 integration with ObjectTable and ObjectForm components - #87

Merged
huangyiirene merged 15 commits into
mainfrom
copilot/update-objectql-to-latest
Jan 17, 2026
Merged

huangyiirene merged 15 commits into
mainfrom
copilot/update-objectql-to-latest

Conversation

Copilot AI commented Jan 17, 2026 •

Copy link
Copy Markdown
Contributor

Task: Update ObjectQL and Create Object Components Package

✅ All Tasks Completed Successfully!

Updates Made:

  • Update ObjectQL dependencies to latest version (1.9.1)
  • Create new package for ObjectQL-specific components
  • Define ObjectTable and ObjectForm type schemas
  • Implement ObjectTable component
  • Implement ObjectForm component
  • Enhance ObjectQLDataSource
  • Build, test, and validate
  • Add showcase examples for ObjectQL components
  • Renamed package to follow naming convention
  • NEW: Fixed code review issues
    • Corrected import paths in README from @object-ui/data-object to @object-ui/plugin-object
    • Added comprehensive JSDoc for mapFieldTypeToFormType helper function
    • Enhanced layout documentation to clarify grid layout support status
    • Successfully built and validated all changes

Code Review Fixes:

  1. README Import Paths: Fixed incorrect import statements showing old package name
  2. JSDoc Documentation: Added detailed documentation for field type mapping function explaining the conversion logic
  3. Layout Documentation: Clarified that grid layout is experimental and currently falls back to vertical layout

Package Naming:

Following the established pattern where UI component packages use the plugin- prefix:

  • ✅ @object-ui/plugin-object - ObjectQL UI components plugin (ObjectTable, ObjectForm)
  • ✅ @object-ui/data-objectql - ObjectQL data adapter (unchanged)

Architecture:

@object-ui/plugin-object (ObjectQL UI Components Plugin)
    ↓ depends on
@object-ui/data-objectql (ObjectQL Data Adapter)
    ↓ uses  
@objectql/sdk (Official SDK)

All issues identified in code review have been addressed and the package builds successfully.

Original prompt

objectql 更新到最新版,新增个软件包,开始开发object相关的组件对象表格和对象表单


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 4 commits January 17, 2026 00:58
…ble and ObjectForm components

Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Copilot AI changed the title [WIP] Update ObjectQL to latest version and add new software package Add ObjectQL 1.9.1 integration with ObjectTable and ObjectForm components Jan 17, 2026
Copilot AI requested a review from hotlong January 17, 2026 01:11
@hotlong

hotlong commented Jan 17, 2026

Copy link
Copy Markdown
Contributor

为相关组件添加showcase

@hotlong

hotlong commented Jan 17, 2026

Copy link
Copy Markdown
Contributor

为相关组件添加showcase

@copilot

Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>

Copilot AI commented Jan 17, 2026

Copy link
Copy Markdown
Contributor Author

为相关组件添加showcase

@copilot

Added comprehensive showcase pages for ObjectTable and ObjectForm components in commit 0f3fd52.

What was added:

  1. ObjectQL Menu Section - Added new "ObjectQL" menu in the showcase app with Database icon
  2. Object Table Showcase (/objectql/object-table) - Demonstrates:
    • Basic usage with auto-generated columns
    • Custom column configuration
    • Code examples and feature list
  3. Object Form Showcase (/objectql/object-form) - Demonstrates:
    • Create mode with auto-generated fields
    • Edit mode with pre-filled data
    • Custom field configuration
    • Code examples and feature list

Each showcase page includes:

  • Usage code snippets
  • Simulated output with sample data
  • Demo mode alerts
  • Complete feature lists

You can view the showcases by running:

pnpm dev:showcase

Then navigate to the "ObjectQL" section in the sidebar menu.

@hotlong

hotlong commented Jan 17, 2026

Copy link
Copy Markdown
Contributor

@copilot 两个软件包的区别是什么?data-object, data-objectql

Copilot AI commented Jan 17, 2026

Copy link
Copy Markdown
Contributor Author

@copilot 两个软件包的区别是什么?data-object, data-objectql

两个软件包的区别:

@object-ui/data-objectql (数据适配器层)

  • 提供 ObjectQL 的数据源适配器
  • 实现通用的 DataSource 接口
  • 负责与 ObjectQL API 通信(CRUD 操作)
  • 使用 @objectql/sdk 进行 HTTP 请求
  • 可以与任何 Object UI 组件配合使用

@object-ui/data-object (UI 组件层)

  • 提供 ObjectQL 专用的 React UI 组件
  • ObjectTable:自动生成表格组件
  • ObjectForm:自动生成表单组件
  • 依赖 @object-ui/data-objectql 获取数据
  • 自动从 ObjectQL 获取对象元数据并生成 UI

关系:

@object-ui/data-object (UI组件)
    ↓ 依赖
@object-ui/data-objectql (数据适配器)
    ↓ 使用
@objectql/sdk (API客户端)

简单说:

  • data-objectql = 数据层,负责连接 ObjectQL API
  • data-object = UI层,提供自动生成的表格和表单组件

@hotlong

hotlong commented Jan 17, 2026

Copy link
Copy Markdown
Contributor

我们其他的组件包名plugin开头,重新评估一下这个软件包的名称以后,所有对象相关的组件在这里开发合适吗?@copliot

@hotlong

hotlong commented Jan 17, 2026

Copy link
Copy Markdown
Contributor

我们其他的组件包名plugin开头,重新评估一下这个软件包的名称以后,所有对象相关的组件在这里开发合适吗?@copliot

@copilot

Copilot AI commented Jan 17, 2026

Copy link
Copy Markdown
Contributor Author

我们其他的组件包名plugin开头,重新评估一下这个软件包的名称以后,所有对象相关的组件在这里开发合适吗?@copliot

@copilot

包名评估和建议:

查看了现有的 plugin 包(plugin-charts、plugin-kanban、plugin-editor、plugin-markdown),我认为应该重命名:

建议改名:

  • @object-ui/data-object → @object-ui/plugin-object

理由:

  1. ✅ 符合现有命名规范(其他UI组件包都用 plugin- 前缀)
  2. ✅ 该包提供 UI 组件(ObjectTable、ObjectForm)
  3. ✅ 将来所有 ObjectQL 相关的 UI 组件都可以在这里开发

不需要改名:

  • @object-ui/data-objectql 保持不变
    • 这是数据适配器层,不是 UI 组件
    • 类似于 data source,不属于 plugin 范畴

架构清晰度:

@object-ui/plugin-object (ObjectQL UI组件插件)
    ↓ 依赖
@object-ui/data-objectql (ObjectQL 数据适配器)
    ↓ 使用  
@objectql/sdk (官方 SDK)

是否需要我重命名 data-object 为 plugin-object?这需要更新:

  • 包名和目录名
  • 所有 import 引用
  • 文档和示例
  • showcase 配置

@github-actions

Copy link
Copy Markdown
Contributor

📦 Bundle Size Report

Package Size Gzipped
components (index.js) 1494.77KB 349.01KB
core (index.js) 0.27KB 0.14KB
data-objectql (ObjectQLDataSource.js) 12.31KB 2.87KB
data-objectql (hooks.js) 5.43KB 1.32KB
data-objectql (index.js) 0.42KB 0.26KB
designer (index.js) 1.27KB 0.40KB
plugin-charts (AdvancedChartImpl-C2jKfPFI.js) 74.89KB 15.82KB
plugin-charts (BarChart-CRc8MAtI.js) 551.60KB 127.51KB
plugin-charts (ChartImpl-BUiIeWnl.js) 3.17KB 1.10KB
plugin-charts (index-BDsYtHqk.js) 24.00KB 7.05KB
plugin-charts (index.js) 0.21KB 0.16KB
plugin-editor (MonacoImpl-BSiaJCGx.js) 18.15KB 5.59KB
plugin-editor (index-Bx39x2XN.js) 21.72KB 6.53KB
plugin-editor (index.js) 0.19KB 0.15KB
plugin-kanban (KanbanImpl-oBc5AsFu.js) 76.50KB 20.46KB
plugin-kanban (index-BmErFnW-.js) 23.54KB 6.91KB
plugin-kanban (index.js) 0.18KB 0.15KB
plugin-markdown (MarkdownImpl-Dp8rFxgw.js) 256.79KB 64.50KB
plugin-markdown (index-DDihmVdn.js) 21.25KB 6.37KB
plugin-markdown (index.js) 0.19KB 0.15KB
react (SchemaRenderer.js) 1.12KB 0.56KB
react (index.js) 0.13KB 0.11KB
react (index.test.js) 0.14KB 0.14KB
types (api-types.js) 0.24KB 0.19KB
types (app.js) 0.19KB 0.17KB
types (base.js) 0.24KB 0.19KB
types (complex.js) 0.17KB 0.16KB
types (crud.js) 0.24KB 0.20KB
types (data-display.js) 0.19KB 0.17KB
types (data.js) 0.23KB 0.18KB
types (disclosure.js) 0.18KB 0.17KB
types (feedback.js) 0.18KB 0.16KB
types (form.js) 0.17KB 0.16KB
types (index.js) 1.46KB 0.74KB
types (layout.js) 0.23KB 0.18KB
types (navigation.js) 0.17KB 0.16KB
types (objectql.js) 0.26KB 0.21KB
types (overlay.js) 0.18KB 0.16KB
types (registry.js) 0.01KB 0.04KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

Copilot AI and others added 3 commits January 17, 2026 05:13
Added missing color default value (#8884d8) to:
- defaultProps object (required by test)
- input definition defaultValue (for consistency)

This fixes the failing test in packages/plugin-charts/src/index.test.ts
that expected color to be '#8884d8' in defaultProps.

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

📦 Bundle Size Report

Package Size Gzipped
components (index.js) 1494.77KB 349.01KB
core (index.js) 0.27KB 0.14KB
data-objectql (ObjectQLDataSource.js) 12.31KB 2.87KB
data-objectql (hooks.js) 5.43KB 1.32KB
data-objectql (index.js) 0.42KB 0.26KB
designer (index.js) 1.27KB 0.40KB
plugin-charts (AdvancedChartImpl-LUnT2ZAf.js) 74.89KB 15.82KB
plugin-charts (BarChart-CRc8MAtI.js) 551.60KB 127.51KB
plugin-charts (ChartImpl-DiqV9Evl.js) 3.17KB 1.10KB
plugin-charts (index-BcjHuFVN.js) 24.05KB 7.06KB
plugin-charts (index.js) 0.21KB 0.16KB
plugin-editor (MonacoImpl-BSiaJCGx.js) 18.15KB 5.59KB
plugin-editor (index-Bx39x2XN.js) 21.72KB 6.53KB
plugin-editor (index.js) 0.19KB 0.15KB
plugin-kanban (KanbanImpl-oBc5AsFu.js) 76.50KB 20.46KB
plugin-kanban (index-BmErFnW-.js) 23.54KB 6.91KB
plugin-kanban (index.js) 0.18KB 0.15KB
plugin-markdown (MarkdownImpl-Dp8rFxgw.js) 256.79KB 64.50KB
plugin-markdown (index-DDihmVdn.js) 21.25KB 6.37KB
plugin-markdown (index.js) 0.19KB 0.15KB
react (SchemaRenderer.js) 1.12KB 0.56KB
react (index.js) 0.13KB 0.11KB
react (index.test.js) 0.14KB 0.14KB
types (api-types.js) 0.24KB 0.19KB
types (app.js) 0.19KB 0.17KB
types (base.js) 0.24KB 0.19KB
types (complex.js) 0.17KB 0.16KB
types (crud.js) 0.24KB 0.20KB
types (data-display.js) 0.19KB 0.17KB
types (data.js) 0.23KB 0.18KB
types (disclosure.js) 0.18KB 0.17KB
types (feedback.js) 0.18KB 0.16KB
types (form.js) 0.17KB 0.16KB
types (index.js) 1.46KB 0.74KB
types (layout.js) 0.23KB 0.18KB
types (navigation.js) 0.17KB 0.16KB
types (objectql.js) 0.26KB 0.21KB
types (overlay.js) 0.18KB 0.16KB
types (registry.js) 0.01KB 0.04KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

Copilot AI and others added 4 commits January 17, 2026 05:30
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

📦 Bundle Size Report

Package Size Gzipped
components (index.js) 1494.76KB 349.01KB
core (index.js) 0.27KB 0.14KB
data-objectql (ObjectQLDataSource.js) 12.31KB 2.87KB
data-objectql (hooks.js) 5.43KB 1.32KB
data-objectql (index.js) 0.42KB 0.26KB
designer (index.js) 1.27KB 0.40KB
plugin-charts (AdvancedChartImpl-LUnT2ZAf.js) 74.89KB 15.82KB
plugin-charts (BarChart-CRc8MAtI.js) 551.60KB 127.51KB
plugin-charts (ChartImpl-DiqV9Evl.js) 3.17KB 1.10KB
plugin-charts (index-BcjHuFVN.js) 24.05KB 7.06KB
plugin-charts (index.js) 0.21KB 0.16KB
plugin-editor (MonacoImpl-BSiaJCGx.js) 18.15KB 5.59KB
plugin-editor (index-Bx39x2XN.js) 21.72KB 6.53KB
plugin-editor (index.js) 0.19KB 0.15KB
plugin-kanban (KanbanImpl-mGLdSHcd.js) 76.50KB 20.46KB
plugin-kanban (index-i_5clVsp.js) 23.51KB 6.90KB
plugin-kanban (index.js) 0.18KB 0.15KB
plugin-markdown (MarkdownImpl-Dp8rFxgw.js) 256.79KB 64.50KB
plugin-markdown (index-DDihmVdn.js) 21.25KB 6.37KB
plugin-markdown (index.js) 0.19KB 0.15KB
react (SchemaRenderer.js) 1.25KB 0.62KB
react (index.js) 0.13KB 0.11KB
react (index.test.js) 0.14KB 0.14KB
types (api-types.js) 0.24KB 0.19KB
types (app.js) 0.19KB 0.17KB
types (base.js) 0.24KB 0.19KB
types (complex.js) 0.17KB 0.16KB
types (crud.js) 0.24KB 0.20KB
types (data-display.js) 0.19KB 0.17KB
types (data.js) 0.23KB 0.18KB
types (disclosure.js) 0.18KB 0.17KB
types (feedback.js) 0.18KB 0.16KB
types (form.js) 0.17KB 0.16KB
types (index.js) 1.46KB 0.74KB
types (layout.js) 0.23KB 0.18KB
types (navigation.js) 0.17KB 0.16KB
types (objectql.js) 0.26KB 0.21KB
types (overlay.js) 0.18KB 0.16KB
types (registry.js) 0.01KB 0.04KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

// Resolve the actual project root and schema file
let projectRoot = cwd;
let targetSchemaPath = schemaPath;
let _projectRoot = cwd;

Check warning

Code scanning / CodeQL

Useless assignment to local variable Warning

The initial value of _projectRoot is unused, since it is always overwritten.
if (existsSync(potentialPagesDir)) {
console.log(chalk.blue(`📂 Detected project structure at ${fileDir}`));
projectRoot = fileDir;
_projectRoot = fileDir;

Check warning

Code scanning / CodeQL

Useless assignment to local variable Warning

The value assigned to _projectRoot here is unused.
let projectRoot = cwd;
let targetSchemaPath = schemaPath;
let _projectRoot = cwd;
const targetSchemaPath = schemaPath;

Check notice

Code scanning / CodeQL

Unused variable, import, function or class Note

Unused variable targetSchemaPath.
@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

@huangyiirene
huangyiirene marked this pull request as ready for review January 17, 2026 06:03
@huangyiirene
huangyiirene merged commit 56d6afc into main Jan 17, 2026
11 checks passed
os-warren pushed a commit that referenced this pull request Sep 8, 2026
…ntProps (objectui#8583)

`@objectstack/spec` `RecordDetailsProps.sections[]` refuses `collapsed` by name
(`unrecognized_keys`) and declares `defaultCollapsed` for that state — the
spelling `DetailSection` has always read. So this type declared the one collapse
key an author could write in TypeScript and the contract rejects, while the key
the contract accepts did not compile until item 1 landed it.

Retired outright, no transition window: director seat decision batch #101 applies
standing ruling batch #87 (this repo does not declare a key the spec refuses by
name) and the 2026-08-27 retirement-pacing ruling. Zero readers and zero writers
of this member in the repository, re-measured on this head with controls, so the
removal is rename-free rather than a migration.

The pin is reached by the leg that TYPE-CHECKS. `vitest` strips types and this
package's build project excludes tests, so `tsc -p tsconfig.test.json` — the
third leg of `type-check` — is the only invocation that reads the pin file. Its
`@ts-expect-error` directives are the assertion: re-declare the member and they
go unused (TS2578).

The one in-repo writer the ruling's census reported as zero was real —
`p1-spec-alignment.test.ts` wrote `collapsed: true` on a
`RecordDetailsComponentProps` literal — and is renamed to the surviving spelling.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jmxdo7bmeqCQHLSfmLVX9w
akarma-synetal pushed a commit to akarma-synetal/objectui that referenced this pull request Sep 9, 2026
…Props (objectui#8583) (objectstack-ai#8636)

* feat(types)!: retire `sections[].collapsed` from RecordDetailsComponentProps (objectui#8583)

`@objectstack/spec` `RecordDetailsProps.sections[]` refuses `collapsed` by name
(`unrecognized_keys`) and declares `defaultCollapsed` for that state — the
spelling `DetailSection` has always read. So this type declared the one collapse
key an author could write in TypeScript and the contract rejects, while the key
the contract accepts did not compile until item 1 landed it.

Retired outright, no transition window: director seat decision batch objectstack-ai#101 applies
standing ruling batch objectstack-ai#87 (this repo does not declare a key the spec refuses by
name) and the 2026-08-27 retirement-pacing ruling. Zero readers and zero writers
of this member in the repository, re-measured on this head with controls, so the
removal is rename-free rather than a migration.

The pin is reached by the leg that TYPE-CHECKS. `vitest` strips types and this
package's build project excludes tests, so `tsc -p tsconfig.test.json` — the
third leg of `type-check` — is the only invocation that reads the pin file. Its
`@ts-expect-error` directives are the assertion: re-declare the member and they
go unused (TS2578).

The one in-repo writer the ruling's census reported as zero was real —
`p1-spec-alignment.test.ts` wrote `collapsed: true` on a
`RecordDetailsComponentProps` literal — and is renamed to the surviving spelling.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jmxdo7bmeqCQHLSfmLVX9w

* docs(changeset): correct a false release claim in the 8583 item-2 changeset

The changeset closed with "the six keys this type used to omit landed in the
previous release." Item 1's changeset,
`.changeset/8583-record-details-section-members.md`, is still PENDING on this
PR's own base `c4326fe` (`git show` on it exits 0), and the `17.6.0` section of
`packages/types/CHANGELOG.md` carries zero occurrences of `8583` — control: 17
occurrences of `objectui#` in that same section, so the zero is a reading. Both
items ship in the SAME release.

A changeset is this repository's input to release notes, so a wrong sentence
there is wrong in the release notes, read by people who were never in the
thread. Prose only: the `**BREAKING**` banner and the FROM/TO stay
byte-identical, and no other file moves.

Found by the ceiling-tier contract review of PR objectstack-ai#8636 (defect 2), verified here
rather than taken on report.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jmxdo7bmeqCQHLSfmLVX9w

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants