Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
95689f4
feat: loosen item mapping requirements
jwartofsky-yext Aug 6, 2026
b544188
remove unused mappedSourceTypes
jwartofsky-yext Aug 6, 2026
b12af5b
Merge branch 'main' into loosenItemMappingRequirements2
jwartofsky-yext Aug 7, 2026
e826f22
docs: auto-generate component documentation
github-actions[bot] Aug 7, 2026
3dac016
Update component screenshots for visual-editor
github-actions[bot] Aug 7, 2026
a13ecaf
Merge branch 'main' into loosenItemMappingRequirements2
jwartofsky-yext Aug 11, 2026
bcd2115
Update component screenshots for visual-editor
github-actions[bot] Aug 11, 2026
3098137
release: v1.4.5
jwartofsky-yext Aug 13, 2026
26366d2
Merge branch 'main' into loosenItemMappingRequirements2
jwartofsky-yext Aug 13, 2026
35ef7a9
Update component screenshots for visual-editor
github-actions[bot] Aug 13, 2026
480c214
feat: allow indexing of lists in embedded fields (#1288)
asanehisa Aug 14, 2026
5254dfc
feat: add phone number to hero section (#1298)
a-friedman Aug 26, 2026
3a6efa6
release: v1.4.6
a-friedman Aug 26, 2026
b04cfd5
fix: spacing for blank links in header and footer (#1302)
a-friedman Sep 1, 2026
819af72
feat: add keyword display name to locator (#1306)
a-friedman Sep 1, 2026
512492e
release: v1.4.7
nanhu95 Sep 1, 2026
bed2ade
fix: update footer links to be translatableString (#1309)
nanhu95 Sep 2, 2026
9a287bc
release: v1.4.8
nanhu95 Sep 2, 2026
d8a2cb9
Merge branch 'main' into loosenItemMappingRequirements2
jwartofsky-yext Sep 8, 2026
c87ad6e
feat: allow 6 columns in grid (#1320)
benlife5 Sep 14, 2026
3001646
Merge branch 'main-1x-backup' into loosenItemMappingRequirements2
jwartofsky-yext Sep 29, 2026
f671fa7
Update component screenshots for visual-editor
github-actions[bot] Sep 29, 2026
c9a775d
Merge branch 'main' into loosenItemMappingRequirements2
jwartofsky-yext Sep 30, 2026
2245be6
update other locales itemSource hint
jwartofsky-yext Oct 1, 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

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@
"inheritedDataMsg": "Data is inherited from the parent section.",
"insight": "Insight",
"item": "Item",
"itemSourceParentFieldTooltip": "List elements must be able to satisfy the mapping requirements:",
Comment thread
jwartofsky-yext marked this conversation as resolved.
"itemSourceParentFieldTooltip": "List elements should be able to satisfy the mapping requirements:",
"kilometer_zero": "kilometers",
"kilometer_one": "kilometer",
"kilometer_other": "kilometers",
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

86 changes: 86 additions & 0 deletions packages/visual-editor/src/editor/yextEntityFieldUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -228,3 +228,89 @@ describe("getEntityFieldDisplayName", () => {
).toBe("c_linkedEntity");
});
});

describe("item-source parent selection", () => {
it("allows item sources when any descendant type matches", () => {
const fields = getFieldsForSelector(
{
fields: [
{
name: "c_articles",
definition: {
name: "c_articles",
typeName: "c_articles",
isList: true,
type: {},
},
children: {
fields: [
{
name: "title",
definition: {
name: "title",
typeName: "type.string",
type: {},
},
},
],
},
},
],
displayNames: {
c_articles: "Articles",
"c_articles.title": "Articles > Title",
},
},
{
itemSourceTypes: [["type.image"], ["type.rich_text_v2"]],
}
);

expect(fields).toEqual(
expect.arrayContaining([
expect.objectContaining({
name: "c_articles",
}),
])
);
});

it("hides item sources when no descendant types match", () => {
const fields = getFieldsForSelector(
{
fields: [
{
name: "c_articles",
definition: {
name: "c_articles",
typeName: "c_articles",
isList: true,
type: {},
},
children: {
fields: [
{
name: "title",
definition: {
name: "title",
typeName: "type.string",
type: {},
},
},
],
},
},
],
displayNames: {
c_articles: "Articles",
"c_articles.title": "Articles > Title",
},
},
{
itemSourceTypes: [["type.image"], ["type.cta"]],
}
);

expect(fields).toEqual([]);
});
});
14 changes: 10 additions & 4 deletions packages/visual-editor/src/editor/yextEntityFieldUtils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
type EntityFieldTypes,
getFilteredEntityFields,
getCompatibleEntityFieldTypes,
RenderEntityFieldFilter,
Expand Down Expand Up @@ -317,7 +318,8 @@ const getScopedFieldsForSelector = (
* 1. Scope to a selected source item when `sourceField` is provided.
* 2. For item-source and mapped-source pickers, restrict roots to fields that
* can satisfy the required descendant type sets. `itemSourceTypes` takes
* precedence over `mappedSourceTypes` when both are present.
* precedence over `mappedSourceTypes` when both are present and requires only
* one matching group; mapped-source pickers require every group.
* 3. Filter incompatible resolved values out when a stream document is
* available.
* 4. Fall back to normal entity-field filtering for standard field selectors.
Expand Down Expand Up @@ -347,7 +349,7 @@ export const getFieldsForSelector = (
}
);

return requiredDescendantTypes.every((requiredTypes) =>
const matchesRequiredTypes = (requiredTypes: EntityFieldTypes[]): boolean =>
availableFields.some(
(availableField) =>
getFilteredEntityFields(
Expand All @@ -357,8 +359,12 @@ export const getFieldsForSelector = (
types: requiredTypes.flatMap(getCompatibleEntityFieldTypes),
}
).length > 0
)
);
);

// One descendant match is enough for item-source selection.
return filter.itemSourceTypes?.length
? requiredDescendantTypes.some(matchesRequiredTypes)
: requiredDescendantTypes.every(matchesRequiredTypes);
};

if (filter.itemSourceTypes?.length) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,7 @@ describe("EntityFieldSelectorField", () => {
expect(tooltip).toBeDefined();
expect(
within(tooltip).getByText(
"List elements must be able to satisfy the mapping requirements:"
"List elements should be able to satisfy the mapping requirements:"
)
).toBeDefined();
expect(within(tooltip).getByText("rich_text_v2")).toBeDefined();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ export const ConstantValueModeToggler = ({
const locale = i18n.language;
const itemSourceParentFieldTooltipTitle = pt(
"itemSourceParentFieldTooltip",
"List elements must be able to satisfy the mapping requirements:"
"List elements should be able to satisfy the mapping requirements:"
);

return (
Expand Down
Loading