Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions .changeset/1887-duplicate-banner-verify.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
---

Comments only, releases nothing: the lead record page's duplicate banners were re-verified in a browser on the 17.6.0 pin (no banner on a lead with no verdict, only its own banner on a suspected or confirmed lead), and two statements in the banner comments that had stopped being true on 17.6.0 are corrected (#1887).
15 changes: 9 additions & 6 deletions src/sales/pages/lead_detail.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,12 @@ export const LeadDetailPage: Page = {
// predicate: `record-alert.tsx` evaluates `properties.visible` through
// `toPredicateInput` + `useCondition` against the row
// (`usePredicateRecordContext`), the same pipeline as an action button.
// A node-level `visibleWhen` would be a different gate one tier up,
// evaluated by `SchemaRenderer` on `data` = the data-source ADAPTER,
// not the row — it cannot see `duplicate_status` at all.
// A node-level `visibleWhen` is a different gate one tier up,
// evaluated by `SchemaRenderer`, and the two compose as AND. Measured
// on the 17.6.0 pin (#1887), that tier binds the page's row as
// `record` too (objectui#5454): this same predicate, moved there,
// gated correctly in both directions. `visible` stays because it is
// the gate `record:alert` declares in its own props.
//
// ⚠️ `has()` is load-bearing, and this surface is the WORST of the four
// this repo measures (cf. `test/view-predicate-dialect.test.ts`): the
Expand Down Expand Up @@ -185,9 +188,9 @@ export const LeadDetailPage: Page = {
// this renderer resolves both through `pickLocalized(…, language)`
// (the same capability `opportunity_detail.page.ts` records under
// #972), and `body` has no other channel — the i18n extractor's
// per-component copy keys are title/description/label/placeholder/
// emptyText/submitLabel, so a plain-string `body` would ship English to
// all four locales. Keeping both halves of one banner's copy in one
// per-component copy keys (`PAGE_COMPONENT_COPY_KEYS`, read on 17.6.0)
// are title/description/label/placeholder/emptyText, so a plain-string
// `body` would ship English to all four locales. Keeping both halves of one banner's copy in one
// place beats splitting `title` into the locale packs.
//
// ⭐ Each banner's copy NAMES ITS OWN VERDICT, in the vocabulary the
Expand Down
6 changes: 3 additions & 3 deletions test/lead-duplicate-visibility.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -273,9 +273,9 @@ describe('lead record page — the duplicate banners, one per verdict', () => {
// `record:alert` resolves `title` / `body` through `pickLocalized(…,
// language)`, so an inline `{ en, 'zh-CN', … }` map is a delivered
// capability — and for `body` it is the ONLY channel: the i18n extractor's
// per-component copy keys are title/description/label/placeholder/
// emptyText/submitLabel, so a plain-string body would ship English to
// every locale with nothing reporting it.
// per-component copy keys (`PAGE_COMPONENT_COPY_KEYS`, read on 17.6.0) are
// title/description/label/placeholder/emptyText, so a plain-string body
// would ship English to every locale with nothing reporting it.
const declared = (stack as AnyRec).i18n?.supportedLocales ?? [];
expect([...declared].sort(), 'the app no longer ships these four locales')
.toEqual([...LOCALES].sort());
Expand Down
Loading