Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
3d8aec5
refactor(app-shell): move ObjectView's view-options family into objec…
claude Oct 26, 2026
ff7e8a1
Merge commit 'refs/x004t9/main' into claude/project-thread-x004t9
claude Oct 26, 2026
ccd5a74
Merge commit 'refs/x004t9/main' into claude/project-thread-x004t9
claude Oct 26, 2026
9b51e47
Merge commit 'refs/x004t9/main' into claude/project-thread-x004t9
claude Oct 26, 2026
668d82f
refactor(app-shell): move ObjectView's leaf pieces into objectViewChr…
claude Oct 26, 2026
05038cd
Merge commit 'refs/x004t9/main' into claude/project-thread-x004t9
claude Oct 26, 2026
2e11452
refactor(app-shell): move ObjectView's realtime refresh and record co…
claude Oct 26, 2026
0531281
Merge origin/main into claude/project-thread-x004t9
claude Oct 26, 2026
4ca5b4b
Merge origin/main into claude/project-thread-x004t9
claude Oct 26, 2026
5522655
refactor(app-shell): move ObjectView's identity import and record nav…
claude Oct 26, 2026
3fd6606
Merge origin/main into claude/project-thread-x004t9
claude Oct 26, 2026
c416618
refactor(app-shell): type the record navigation hook's parameters fro…
claude Oct 26, 2026
63cf14e
Merge origin/main into claude/project-thread-x004t9
claude Oct 26, 2026
d725c1b
refactor(app-shell): move ObjectView's list toolbar affordances into …
claude Oct 27, 2026
a1cff67
Merge origin/main into claude/project-thread-x004t9
claude Oct 27, 2026
a8de478
Merge origin/main into claude/project-thread-x004t9
claude Oct 27, 2026
0871a48
refactor(app-shell): move ObjectView's header toolbar and list URL st…
claude Oct 27, 2026
96a92ca
Merge origin/main into claude/project-thread-x004t9
claude Oct 27, 2026
e4434f7
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 27, 2026
cd7c792
refactor(app-shell): move ObjectView's view tab strip, plugin schema …
claude Oct 27, 2026
4ef7505
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 27, 2026
472a4e6
refactor(app-shell): move ObjectView's page header and record overlay…
claude Oct 27, 2026
d5ff0d2
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 27, 2026
8cac64f
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 27, 2026
ed7146b
refactor(app-shell): move ObjectView's renderListView into a sibling …
claude Oct 27, 2026
a2e4b76
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 27, 2026
ed4a000
refactor(app-shell): move ObjectView's view management handlers into …
claude Oct 27, 2026
00d32b8
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .changeset/25992-objectview-view-crud-split.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@object-ui/app-shell': patch
---

refactor(app-shell): the Console `ObjectView`'s view management handlers move into a sibling hook

Clause-②: no
Metadata-protocol: none

The view-config panel's save and create handlers, the draft field update, view switching, the mobile view switcher registration and the view-tab CRUD callbacks (rename, delete, pin, set default, reorder, configure, add) move verbatim out of `ObjectViewInner` in `views/ObjectView.tsx` into `useObjectViewViewCrud` in `objectViewViewCrud.tsx`. The panel and dialog state stays in the component, which passes every input in and reads the returned handlers. No logic, name or rendered output changes, and the package entry is unchanged.

What to do: nothing.
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ describe('objectui#5233 — what must NOT be narrowed', () => {
*/
describe('objectui#12504 census — the toolbar-to-view write family is retired', () => {
const here = path.dirname(fileURLToPath(import.meta.url));
const objectViewCode = stripComments(['ObjectView.tsx', 'objectViewListRenderer.tsx'].map((file) => readFileSync(path.join(here, file), 'utf8')).join('\n'));
const objectViewCode = stripComments(['ObjectView.tsx', 'objectViewListRenderer.tsx', 'objectViewViewCrud.tsx'].map((file) => readFileSync(path.join(here, file), 'utf8')).join('\n'));
const dataSourceCode = stripComments(
readFileSync(path.join(here, '..', '..', '..', 'types', 'src', 'data.ts'), 'utf8'),
);
Expand Down
415 changes: 43 additions & 372 deletions ui/packages/app-shell/src/views/ObjectView.tsx

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,10 @@ describe('set as default (#4463)', () => {

describe('the detach-then-call pattern stays gone (ratchet)', () => {
it('ObjectView.tsx never assigns an adapter method to a local', () => {
const source = readFileSync(
fileURLToPath(new URL('./ObjectView.tsx', import.meta.url)),
const source = ['./ObjectView.tsx', './objectViewViewCrud.tsx'].map((file) => readFileSync(
fileURLToPath(new URL(file, import.meta.url)),
'utf8',
);
)).join('\n');

// Comments are stripped FIRST, and that is not a detail: the fix's own
// docblock quotes the broken line verbatim to explain it, so a scan over the
Expand Down
459 changes: 459 additions & 0 deletions ui/packages/app-shell/src/views/objectViewViewCrud.tsx

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ const here = path.dirname(fileURLToPath(import.meta.url));
const objectViewPath = path.join(here, 'ObjectView.tsx');
const widgetsPath = path.join(here, 'metadata-admin/widgets.tsx');

const objectViewSrc = [objectViewPath, path.join(here, 'objectViewListRenderer.tsx')].map((file) => readFileSync(file, 'utf8')).join('\n');
const objectViewSrc = [objectViewPath, path.join(here, 'objectViewListRenderer.tsx'), path.join(here, 'objectViewViewCrud.tsx')].map((file) => readFileSync(file, 'utf8')).join('\n');
const widgetsSrc = readFileSync(widgetsPath, 'utf8');

/**
Expand Down
12 changes: 6 additions & 6 deletions ui/packages/app-shell/src/views/writeRefusalCensus-11583.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,32 +88,32 @@ const LEDGER: Row[] = [
reason: 'Issues one `updateView` per patch and hands every promise back; set-as-default and reorder await them and answer for the refusal.',
},
{
file: 'ObjectView.tsx', symbol: 'handleViewConfigSave', callee: 'persistRuntimeMetadata', calls: 1,
file: 'objectViewViewCrud.tsx', symbol: 'handleViewConfigSave', callee: 'persistRuntimeMetadata', calls: 1,
kind: 'surfaces', pin: 'ObjectView.viewWriteRefusal-11583.test.tsx',
reason: 'The view-config panel\'s edit Save: a toast with the door\'s message, and the panel is told the save failed, so it stays dirty (objectui#11583).',
},
{
file: 'ObjectView.tsx', symbol: 'handleViewCreate', callee: 'createRuntimeMetadata', calls: 1,
file: 'objectViewViewCrud.tsx', symbol: 'handleViewCreate', callee: 'createRuntimeMetadata', calls: 1,
kind: 'surfaces', pin: 'ObjectView.createViewRefusal-11578.test.tsx',
reason: 'Create View: a toast with the door\'s message, and the dialog stays open (objectui#11578).',
},
{
file: 'ObjectView.tsx', symbol: 'handleRenameView', callee: 'updateView', calls: 1,
file: 'objectViewViewCrud.tsx', symbol: 'handleRenameView', callee: 'updateView', calls: 1,
kind: 'surfaces', pin: 'ObjectView.viewWriteRefusal-11583.test.tsx',
reason: 'Rename: the translated `objectViewActions.renameFailed` title, with the door\'s message as the description (objectui#12417).',
},
{
file: 'ObjectView.tsx', symbol: 'handleDeleteView', callee: 'deleteView', calls: 1,
file: 'objectViewViewCrud.tsx', symbol: 'handleDeleteView', callee: 'deleteView', calls: 1,
kind: 'surfaces', pin: 'ObjectView.viewWriteRefusal-11583.test.tsx',
reason: 'Delete: the translated `objectViewActions.deleteFailed` title, with the door\'s message as the description (objectui#12398).',
},
{
file: 'ObjectView.tsx', symbol: 'handlePinView', callee: 'updateView', calls: 1,
file: 'objectViewViewCrud.tsx', symbol: 'handlePinView', callee: 'updateView', calls: 1,
kind: 'surfaces', pin: 'ObjectView.viewWriteRefusal-11583.test.tsx',
reason: 'Pin and unpin: a toast with the door\'s message (objectui#11583).',
},
{
file: 'ObjectView.tsx', symbol: 'handleSetDefaultView', callee: 'dispatchViewPatches', calls: 1,
file: 'objectViewViewCrud.tsx', symbol: 'handleSetDefaultView', callee: 'dispatchViewPatches', calls: 1,
kind: 'surfaces', pin: 'ObjectView.viewWriteRefusal-11583.test.tsx',
reason: 'Set as default: a toast with the door\'s message; it was a bare untranslated literal with no description until the objectui#11583 patch round.',
},
Expand Down
2 changes: 1 addition & 1 deletion ui/scripts/__tests__/check-i18n-call-site-keys.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1088,7 +1088,7 @@ export const A = (name: string, label: string, n: number) => {
"t('marketplace.detail.reseedLocalSuccess', { inserted, updated })",
],
[
'packages/app-shell/src/views/ObjectView.tsx',
'packages/app-shell/src/views/objectViewViewCrud.tsx',
// Tight on purpose: the file still holds a legitimate *computed*
// `defaultValue` ending in the same sentence (line ~1657), and a marker
// loose enough to catch that one would fail for the wrong reason.
Expand Down
Loading