From 0608147e78492b2b5d857bbdd7ffd8263d89189e Mon Sep 17 00:00:00 2001 From: Bas Kiers Date: Wed, 15 Jan 2025 15:48:54 +0100 Subject: [PATCH 1/4] feat: pass locale parameter to resource fetch methods --- .../FetchingWrappedResourceInlineCard.tsx | 6 ++++-- .../src/plugins/shared/FetchingWrappedResourceCard.tsx | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/rich-text/src/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.tsx b/packages/rich-text/src/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.tsx index bb3bc29db..edf947d35 100644 --- a/packages/rich-text/src/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.tsx +++ b/packages/rich-text/src/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.tsx @@ -21,8 +21,10 @@ interface FetchingWrappedResourceInlineCardProps { } export function FetchingWrappedResourceInlineCard(props: FetchingWrappedResourceInlineCardProps) { - const { link, onEntityFetchComplete } = props; - const { data, status: requestStatus } = useResource(link.linkType, link.urn); + const { link, onEntityFetchComplete, sdk } = props; + const { data, status: requestStatus } = useResource(link.linkType, link.urn, { + locale: sdk.field.locale, + }); React.useEffect(() => { if (requestStatus === 'success') { diff --git a/packages/rich-text/src/plugins/shared/FetchingWrappedResourceCard.tsx b/packages/rich-text/src/plugins/shared/FetchingWrappedResourceCard.tsx index 979d2d944..f851f0320 100644 --- a/packages/rich-text/src/plugins/shared/FetchingWrappedResourceCard.tsx +++ b/packages/rich-text/src/plugins/shared/FetchingWrappedResourceCard.tsx @@ -61,8 +61,10 @@ interface FetchingWrappedResourceCardProps { } export const FetchingWrappedResourceCard = (props: FetchingWrappedResourceCardProps) => { - const { link, onEntityFetchComplete } = props; - const { data, status, error } = useResource(link.linkType, link.urn); + const { link, onEntityFetchComplete, sdk } = props; + const { data, status, error } = useResource(link.linkType, link.urn, { + locale: sdk.field.locale, + }); React.useEffect(() => { if (status === 'success') { From a6da11e25fd87275f42f8a2532279a5ac40626b4 Mon Sep 17 00:00:00 2001 From: Bas Kiers Date: Wed, 15 Jan 2025 15:49:23 +0100 Subject: [PATCH 2/4] feat: pass locale parameter to Resource modals --- packages/rich-text/src/helpers/config.ts | 1 + .../src/plugins/Hyperlink/HyperlinkModal.tsx | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/rich-text/src/helpers/config.ts b/packages/rich-text/src/helpers/config.ts index a46c6eb13..8013fe423 100644 --- a/packages/rich-text/src/helpers/config.ts +++ b/packages/rich-text/src/helpers/config.ts @@ -53,5 +53,6 @@ function getEntityTypeFromRichTextNode(nodeType): 'Entry' | 'Asset' | never { export const newResourceEntitySelectorConfigFromRichTextField = (field, nodeType) => { return { allowedResources: getAllowedResourcesForNodeType(field, nodeType), + locale: field.locale, }; }; diff --git a/packages/rich-text/src/plugins/Hyperlink/HyperlinkModal.tsx b/packages/rich-text/src/plugins/Hyperlink/HyperlinkModal.tsx index 62dcb69bf..edef1f64a 100644 --- a/packages/rich-text/src/plugins/Hyperlink/HyperlinkModal.tsx +++ b/packages/rich-text/src/plugins/Hyperlink/HyperlinkModal.tsx @@ -143,6 +143,7 @@ export function HyperlinkModal(props: HyperlinkModalProps) { async function selectResourceEntry() { const options = { allowedResources: getAllowedResourcesForNodeType(props.sdk.field, INLINES.RESOURCE_HYPERLINK), + locale: props.sdk.field.locale, }; // @ts-expect-error wait for update of app-sdk version const entityLink = await props.sdk.dialogs.selectSingleResourceEntity(options); @@ -195,7 +196,8 @@ export function HyperlinkModal(props: HyperlinkModalProps) { setLinkType(event.target.value) } testId="link-type-input" - isDisabled={props.readonly}> + isDisabled={props.readonly} + > {enabledLinkTypes.map((nodeType) => ( {LINK_TYPE_SELECTION_VALUES[nodeType]} @@ -237,7 +239,8 @@ export function HyperlinkModal(props: HyperlinkModalProps) { + className={styles.removeSelectionLabel} + > Remove selection )} @@ -299,7 +302,8 @@ export function HyperlinkModal(props: HyperlinkModalProps) { onClick={() => props.onClose(null)} variant="secondary" testId="cancel-cta" - size="small"> + size="small" + > Cancel From ef252d1f9bc324160d4a1b2e9a26183b8f1754e6 Mon Sep 17 00:00:00 2001 From: Bas Kiers Date: Wed, 15 Jan 2025 15:51:23 +0100 Subject: [PATCH 3/4] feat: pass locale parameter to ExistingResourceCard --- packages/reference/src/resources/Cards/ResourceCard.tsx | 4 +++- .../reference/src/resources/SingleResourceReferenceEditor.tsx | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/reference/src/resources/Cards/ResourceCard.tsx b/packages/reference/src/resources/Cards/ResourceCard.tsx index a789cc2c0..e57ba3687 100644 --- a/packages/reference/src/resources/Cards/ResourceCard.tsx +++ b/packages/reference/src/resources/Cards/ResourceCard.tsx @@ -13,6 +13,7 @@ import { ExternalEntryCard } from './ExternalEntryCard'; type ResourceCardProps = { index?: number; resourceLink?: ResourceLink; + locale?: string; isDisabled: boolean; renderDragHandle?: RenderDragFn; getEntryRouteHref: (entryRoute: EntryRoute) => string; @@ -27,8 +28,9 @@ function ExistingResourceCard( inView: boolean; } ) { - const { resourceLink, inView, index = 0 } = props; + const { resourceLink, inView, index = 0, locale } = props; const resourceOptions = { + locale, priority: index * -1, enabled: inView, allowExternal: true, diff --git a/packages/reference/src/resources/SingleResourceReferenceEditor.tsx b/packages/reference/src/resources/SingleResourceReferenceEditor.tsx index 71aca40bf..911805430 100644 --- a/packages/reference/src/resources/SingleResourceReferenceEditor.tsx +++ b/packages/reference/src/resources/SingleResourceReferenceEditor.tsx @@ -33,6 +33,7 @@ export function SingleResourceReferenceEditor( props.sdk.field.removeValue()} resourceLink={value} + locale={props.sdk.field.locale} isDisabled={disabled} getEntryRouteHref={props.getEntryRouteHref} /> From f641ec130ca35bb26a13900ac764f74dba2312fa Mon Sep 17 00:00:00 2001 From: Bas Kiers Date: Wed, 15 Jan 2025 15:54:58 +0100 Subject: [PATCH 4/4] feat: pass locale parameter to Resource Dialog --- packages/reference/src/common/EntityStore.tsx | 35 +++++++++++++------ .../src/resources/useResourceLinkActions.ts | 4 ++- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/packages/reference/src/common/EntityStore.tsx b/packages/reference/src/common/EntityStore.tsx index 8c46ae4a4..0fb5c3839 100644 --- a/packages/reference/src/common/EntityStore.tsx +++ b/packages/reference/src/common/EntityStore.tsx @@ -60,11 +60,11 @@ type UseEntityOptions = GetEntityOptions & { enabled?: boolean }; type QueryEntityResult = Promise; -type GetResourceOptions = GetOptions & { allowExternal?: boolean }; +type GetResourceOptions = GetOptions & { allowExternal?: boolean; locale?: string }; type QueryResourceResult = QueryEntityResult>; -type UseResourceOptions = GetResourceOptions & { enabled?: boolean }; +type UseResourceOptions = GetResourceOptions & { enabled?: boolean; locale?: string }; // all types of the union share the data property to ease destructuring downstream type UseEntityResult = @@ -188,7 +188,12 @@ const isEntityQueryKey = (queryKey: QueryKey): queryKey is EntityQueryKey => { ); }; -type ResourceQueryKey = [ident: 'Resource', resourceType: string, urn: string]; +type ResourceQueryKey = [ + ident: 'Resource', + resourceType: string, + urn: string, + locale: string | undefined +]; async function fetchContentfulEntry({ urn, @@ -262,9 +267,13 @@ async function fetchExternalResource({ spaceId, environmentId, resourceType, -}: FetchParams & { spaceId: string; environmentId: string; resourceType: string }): Promise< - ResourceInfo -> { + locale, +}: FetchParams & { + spaceId: string; + environmentId: string; + resourceType: string; + locale?: string; +}): Promise> { let resourceFetchError: unknown; const [resource, resourceTypes] = await Promise.all([ fetch( @@ -275,7 +284,7 @@ async function fetchExternalResource({ spaceId, environmentId, resourceTypeId: resourceType, - query: { 'sys.urn[in]': urn }, + query: { 'sys.urn[in]': urn, locale }, }) .then(({ items }) => { return items[0] ?? null; @@ -452,7 +461,7 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons urn: string, options?: GetResourceOptions ): QueryResourceResult { - const queryKey: ResourceQueryKey = ['Resource', resourceType, urn]; + const queryKey: ResourceQueryKey = ['Resource', resourceType, urn, locale]; return fetch( queryKey, (): Promise => { @@ -471,6 +480,7 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons return fetchExternalResource({ fetch, urn, + locale: options?.locale, options, resourceType, spaceId: currentSpaceId, @@ -629,13 +639,16 @@ export function useEntity( export function useResource( resourceType: string, urn: string, - options?: UseResourceOptions + { locale, ...options }: UseResourceOptions = {} ) { - const queryKey: ResourceQueryKey = ['Resource', resourceType, urn]; + if (resourceType.startsWith('Contentful:')) { + locale = undefined; + } + const queryKey: ResourceQueryKey = ['Resource', resourceType, urn, locale]; const { getResource } = useEntityLoader(); const { status, data, error } = useQuery( queryKey, - () => getResource(resourceType, urn, options), + () => getResource(resourceType, urn, { ...options, locale }), { enabled: options?.enabled, } diff --git a/packages/reference/src/resources/useResourceLinkActions.ts b/packages/reference/src/resources/useResourceLinkActions.ts index 663b6d16a..beff79e8b 100644 --- a/packages/reference/src/resources/useResourceLinkActions.ts +++ b/packages/reference/src/resources/useResourceLinkActions.ts @@ -46,12 +46,14 @@ export function useResourceLinkActions({ await dialogs.selectMultipleResourceEntities({ // @ts-expect-error wait for update of app-sdk version allowedResources: field.allowedResources, + locale: field.locale, }) : async (): Promise<[ResourceLink<'Contentful:Entry'> | null]> => [ // @ts-expect-error wait for update of app-sdk version await dialogs.selectSingleResourceEntity({ // @ts-expect-error wait for update of app-sdk version allowedResources: field.allowedResources, + locale: field.locale, }), ]; @@ -59,7 +61,7 @@ export function useResourceLinkActions({ onLinkedExisting(await promptSelection()); }; // @ts-expect-error wait for update of app-sdk version - }, [dialogs, field.allowedResources, multiple, onLinkedExisting]); + }, [dialogs, field.allowedResources, field.locale, multiple, onLinkedExisting]); const { canLinkEntity } = useEditorPermissions({ entityType: 'Entry',