You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
### Added
11
+
12
+
-**RecordPickerDialog Component** (`@object-ui/fields`): New enterprise-grade record selection dialog with multi-column table display, pagination, search, column sorting with `$orderby`, keyboard navigation (Arrow keys + Enter), loading/error/empty states, and single/multi-select support. Responsive layout with mobile-friendly width. Provides the foundation for Salesforce-style Lookup experience.
13
+
-**LookupField Popover Typeahead** (`@object-ui/fields`): Level 1 quick-select upgraded from Dialog to Popover for inline typeahead experience (anchored dropdown, not modal). Includes "Show All Results" footer button that opens the full RecordPickerDialog (Level 2).
14
+
-**LookupFieldMetadata Schema Enhancement** (`@object-ui/types`): Added `lookup_columns`, `description_field`, `lookup_page_size`, `lookup_filters` to `LookupFieldMetadata`. New `LookupColumnDef` interface with `type` hint for cell formatting. New `LookupFilterDef` interface for base filter configuration.
15
+
10
16
### Changed
11
17
12
18
-**@objectstack v3.2.6 Upgrade**: Upgraded all `@objectstack/*` packages from `^3.2.5` to `^3.2.6` across 13 package.json files (43 references)
// Custom page size for the Record Picker dialog (default: 10)
85
+
lookup_page_size?: number;
76
86
}
77
87
78
88
interface LookupOption {
@@ -106,6 +116,41 @@ The popup will:
106
116
2. Send `$search` queries with 300ms debounce as the user types
107
117
3. Show loading spinner, error state with retry, and empty state
108
118
4. Display "Showing X of Y" when more records exist than the page size
119
+
5. Show a **"Show All Results"** button to open the full Record Picker dialog
120
+
121
+
## Record Picker Dialog (Enterprise)
122
+
123
+
When more results are available than displayed in the quick-select popup, a **"Show All Results"** button opens the full **RecordPickerDialog** — an enterprise-grade record selection experience.
124
+
125
+
```plaintext
126
+
// Configure the Record Picker with lookup_columns
127
+
{
128
+
type: 'lookup',
129
+
name: 'order',
130
+
label: 'Order',
131
+
reference_to: 'orders',
132
+
reference_field: 'order_number',
133
+
description_field: 'customer_name',
134
+
lookup_columns: [
135
+
{ field: 'order_number', label: 'Order #' },
136
+
{ field: 'customer_name', label: 'Customer' },
137
+
{ field: 'total_amount', label: 'Amount' },
138
+
{ field: 'status', label: 'Status' },
139
+
],
140
+
lookup_page_size: 15,
141
+
}
142
+
```
143
+
144
+
The Record Picker dialog provides:
145
+
-**Multi-column table** with configurable columns via `lookup_columns`
146
+
-**Search** with debounced server-side querying
147
+
-**Column sorting** via clickable headers (sends `$orderby` to DataSource)
148
+
-**Pagination** with page-by-page navigation
149
+
-**Keyboard navigation** — Arrow keys to move between rows, Enter/Space to select
150
+
-**Single/Multi-select** with visual check indicators and confirmation flow
151
+
-**Responsive layout** — Mobile-friendly width (95vw on small screens)
152
+
-**Loading, error, and empty states**
153
+
- Auto-inferred columns from `reference_field` when `lookup_columns` is not set
109
154
110
155
## Lookup vs Master-Detail
111
156
@@ -133,12 +178,19 @@ import { LookupCellRenderer } from '@object-ui/fields';
133
178
134
179
## Features
135
180
181
+
-**Two-Level Interaction**: Popover typeahead (Level 1) + full Record Picker dialog (Level 2)
182
+
-**Record Picker Dialog**: Enterprise-grade table with multi-column, pagination, search, sorting
183
+
-**Inline Popover**: Level 1 opens as anchored dropdown (non-modal) for fast typeahead
184
+
-**Column Sorting**: Clickable column headers with `$orderby` server-side sort
136
185
-**Dynamic DataSource Loading**: Automatically fetches records from referenced objects
137
186
-**Search**: Debounced type-ahead search with `$search` parameter
138
-
-**Multi-Select**: Support for multiple references
139
-
-**Keyboard Navigation**: Arrow keys to navigate, Enter to select
187
+
-**Multi-Select**: Support for multiple references with confirmation flow
188
+
-**Keyboard Navigation**: Arrow keys to navigate rows, Enter to select in both levels
189
+
-**Responsive**: Mobile-friendly width, adapts to screen size
140
190
-**Loading/Error/Empty States**: Friendly feedback for all states
141
191
-**Secondary Field Display**: Show description/subtitle per option
142
192
-**Quick-Create Entry**: Optional "Create new" button when no results
143
-
-**Pagination Hint**: Shows total count when more results available
193
+
-**Configurable Columns**: `lookup_columns` for multi-column picker display
194
+
-**Base Filters**: `lookup_filters` to restrict selectable records
195
+
-**Pagination**: Page-by-page navigation in Record Picker dialog
144
196
-**Backward Compatible**: Falls back to static options when no DataSource
0 commit comments