Releases: relaticle/custom-fields
Release list
v3.9.0
What's Changed
Other Changes
- chore(deps-dev): bump the npm group across 1 directory with 9 updates by @dependabot[bot] in #204
- fix(imports): report every invalid cell instead of aborting the row or silently guessing by @ManukMinasyan in #206
Full Changelog: v3.8.0...v3.9.0
v3.8.0
Deterministic record lookups, a configurable search minimum, and an option-count threshold for option-backed selects. All three are reachable from a new selects config block, so 3.7 behaviour can be restored exactly.
Deterministic record lookups
RecordSelectInputComponent ran limit(50) with no orderBy, so the initial page was whatever the database returned and could differ between two renders of the same form. It now orders by the model key descending, which is deterministic and backed by the primary key index.
Measured on a seeded 50,000-row tenant with EXPLAIN (ANALYZE, BUFFERS):
| Variant | Plan | Time | Shared buffers |
|---|---|---|---|
| Model key desc (the new default) | Index Scan Backward on the primary key | 0.036 ms | 7 |
No ORDER BY (3.7 behaviour) |
Seq Scan stops at 50 rows | 0.043 ms | 4 |
updated_at desc, id desc |
Seq Scan 50,004 rows, top-N heapsort, Limit | 7.59 ms | 822 |
Determinism therefore costs nothing. Set record_lookup.order_column to 'updated_at' if you prefer most-recently-touched-first, and index that column when the lookup table is large. A configured column always gets the model key appended as a tiebreaker.
Minimum search length, configurable end to end
getSearchResultsForJs() returned [] below 2 characters. It now returns the unfiltered first page, and the minimum comes from record_lookup.min_search_length rather than a literal. The field's JavaScript reads the same value, so raising the minimum can no longer leave the client asking for a filtered search that the server answers with an unfiltered page.
Search box only above an option-count threshold (behaviour change)
SelectComponent and MultiSelectComponent called ->searchable() unconditionally, so a three-option status field rendered a search box above three items. They now gate on option count, default 10.
This is a taste change, not a bug fix. It carries no performance benefit: filtering for static options already happened client-side at zero server cost. The only effect is that the search box disappears on small option sets.
Opt-out: set custom-fields.selects.searchable_threshold to 0 to always render the search box, which is exactly the pre-3.8 behaviour.
Config
'selects' => [
'searchable_threshold' => 10, // 0 always shows the search box (pre-3.8 behaviour)
'record_lookup' => [
'order_column' => null, // null means the model key, index-backed
'order_direction' => 'desc',
'limit' => 50,
'min_search_length' => 2,
],
],Consumers who published config/custom-fields.php before 3.8 do not have this block. Every read passes the same value as its default, so nothing breaks and the new defaults apply.
Full Changelog: v3.7.0...v3.8.0
v3.7.0
What's Changed
Other Changes
- fix: record filter matches nothing for single-value fields by @ManukMinasyan in #202
Full Changelog: v3.6.3...v3.7.0
v3.6.3
What's Changed
Other Changes
- fix: keep a persisted field's code stable when its name is renamed [3.x] by @ManukMinasyan in #201
Full Changelog: v3.6.2...v3.6.3
v3.6.2
What's Changed
Other Changes
- feat: allow the host app to register its own management page by @ManukMinasyan in #200
Full Changelog: v3.6.1...v3.6.2
v3.6.1
What's Changed
Other Changes
- chore(deps): bump brace-expansion from 2.1.1 to 2.1.4 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #194
- chore(deps): bump ip-address from 10.2.0 to 10.4.0 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #195
- chore(deps): bump the npm_and_yarn group across 2 directories with 5 updates by @dependabot[bot] in #196
- chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #199
- perf: reuse eager-loaded relations in forModel via loadMissing by @MACscr in #197
- feat: section-scoped custom field resolution by @ManukMinasyan in #198
New Contributors
Full Changelog: v3.6.0...v3.6.1
v3.6.0
What's Changed
Other Changes
- chore(deps): bump tar from 7.5.20 to 7.5.22 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #191
- fix: apply presence rule to custom field validation on import [3.x] by @ManukMinasyan in #192
- fix: only save custom fields the imported row carried [3.x] by @ManukMinasyan in #193
Full Changelog: v3.5.5...v3.6.0
v3.5.5
What's Changed
Other Changes
- feat: add section-level width control (UI_SECTION_WIDTH_CONTROL) by @ManukMinasyan in #181
- chore(deps): bump the npm_and_yarn group across 2 directories with 3 updates by @dependabot[bot] in #183
- chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates by @dependabot[bot] in #184
- chore(deps): bump actions/setup-node from 6 to 7 by @dependabot[bot] in #182
- chore(deps): bump hono from 4.12.25 to 4.12.31 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #185
- chore(deps): bump the npm_and_yarn group across 2 directories with 3 updates by @dependabot[bot] in #186
- fix: generate cloned container schemas from the evaluated component by @ManukMinasyan in #188
- chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #187
- fix: resync docs lockfile so the docs deploy can install again by @ManukMinasyan in #190
- chore(deps): bump @hono/node-server from 1.19.13 to 2.0.12 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #189
Full Changelog: v3.5.4...v3.5.5
v3.5.4
What's Changed
Other Changes
- chore: apply rector 2.5.7 auto-fixes by @ManukMinasyan in #180
- fix(forms): resolve dependent fields via CoreVisibilityLogicService (fixes #149 strict-mode crash) by @crossi-dev in #167
New Contributors
- @crossi-dev made their first contribution in #167
Full Changelog: v3.5.3...v3.5.4
v3.5.3
What's Changed
Other Changes
- fix: keep multi-choice visibleJs expressions attribute-safe and id-typed by @ManukMinasyan in #178
Full Changelog: v3.5.2...v3.5.3