@strapi/content-manager 0.0.0-experimental.6d27139261823fc4b18da9f3c10b271d5010dbf0 → 0.0.0-experimental.71ed910bd859c7e558bd1c1042eaadb7d26fd22a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-9lRmRdIr.mjs → ComponentConfigurationPage-7-qB29e7.mjs} +3 -3
  2. package/dist/_chunks/{ComponentConfigurationPage-9lRmRdIr.mjs.map → ComponentConfigurationPage-7-qB29e7.mjs.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-DyDkPajU.js → ComponentConfigurationPage-DP7AC0UU.js} +3 -3
  4. package/dist/_chunks/{ComponentConfigurationPage-DyDkPajU.js.map → ComponentConfigurationPage-DP7AC0UU.js.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-Bk893vVY.mjs → EditConfigurationPage-CI4XoymK.mjs} +3 -3
  6. package/dist/_chunks/{EditConfigurationPage-Bk893vVY.mjs.map → EditConfigurationPage-CI4XoymK.mjs.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-DValmA0m.js → EditConfigurationPage-DITVliEI.js} +3 -3
  8. package/dist/_chunks/{EditConfigurationPage-DValmA0m.js.map → EditConfigurationPage-DITVliEI.js.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-Dk7Eaft4.js → EditViewPage-CUS2EAhB.js} +8 -4
  10. package/dist/_chunks/EditViewPage-CUS2EAhB.js.map +1 -0
  11. package/dist/_chunks/{EditViewPage-DiNFdFqP.mjs → EditViewPage-Dzpno8xI.mjs} +8 -4
  12. package/dist/_chunks/EditViewPage-Dzpno8xI.mjs.map +1 -0
  13. package/dist/_chunks/{Field-Dv_HTFTa.mjs → Field-B_jG_EV9.mjs} +34 -32
  14. package/dist/_chunks/Field-B_jG_EV9.mjs.map +1 -0
  15. package/dist/_chunks/{Field-DH2OaqUP.js → Field-CtUU1Fg8.js} +38 -36
  16. package/dist/_chunks/Field-CtUU1Fg8.js.map +1 -0
  17. package/dist/_chunks/{Form-Dy6P4HgH.mjs → Form-BXHao2mZ.mjs} +15 -7
  18. package/dist/_chunks/Form-BXHao2mZ.mjs.map +1 -0
  19. package/dist/_chunks/{Form-B_dUDizM.js → Form-DTqO0ymI.js} +15 -7
  20. package/dist/_chunks/Form-DTqO0ymI.js.map +1 -0
  21. package/dist/_chunks/{History-DrwsD1Vc.mjs → History-2Ah2CQ4T.mjs} +4 -4
  22. package/dist/_chunks/{History-DrwsD1Vc.mjs.map → History-2Ah2CQ4T.mjs.map} +1 -1
  23. package/dist/_chunks/{History-BT4w83Oa.js → History-C_uSGzO5.js} +4 -4
  24. package/dist/_chunks/{History-BT4w83Oa.js.map → History-C_uSGzO5.js.map} +1 -1
  25. package/dist/_chunks/{ListConfigurationPage-BxIP0jRy.mjs → ListConfigurationPage-BjSJlaoC.mjs} +2 -2
  26. package/dist/_chunks/{ListConfigurationPage-BxIP0jRy.mjs.map → ListConfigurationPage-BjSJlaoC.mjs.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-CuYrMcW3.js → ListConfigurationPage-nyuP7OSy.js} +2 -2
  28. package/dist/_chunks/{ListConfigurationPage-CuYrMcW3.js.map → ListConfigurationPage-nyuP7OSy.js.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-5a1vw-OK.mjs → ListViewPage-B75x3nz2.mjs} +24 -12
  30. package/dist/_chunks/ListViewPage-B75x3nz2.mjs.map +1 -0
  31. package/dist/_chunks/{ListViewPage-BvpwNur7.js → ListViewPage-DHgHD8Xg.js} +28 -16
  32. package/dist/_chunks/ListViewPage-DHgHD8Xg.js.map +1 -0
  33. package/dist/_chunks/{NoContentTypePage-UqEiWKkM.js → NoContentTypePage-CDUKdZ7d.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-UqEiWKkM.js.map → NoContentTypePage-CDUKdZ7d.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-Bm6tRcd3.mjs → NoContentTypePage-DUacQSyF.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-Bm6tRcd3.mjs.map → NoContentTypePage-DUacQSyF.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-BHPqn_tQ.mjs → NoPermissionsPage-SFllMekk.mjs} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-BHPqn_tQ.mjs.map → NoPermissionsPage-SFllMekk.mjs.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-C_vGRo8Q.js → NoPermissionsPage-zwIZydDI.js} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-C_vGRo8Q.js.map → NoPermissionsPage-zwIZydDI.js.map} +1 -1
  41. package/dist/_chunks/{Relations-C7fPyh5P.mjs → Relations-D2NRW8fC.mjs} +13 -9
  42. package/dist/_chunks/Relations-D2NRW8fC.mjs.map +1 -0
  43. package/dist/_chunks/{Relations-CznVF6LS.js → Relations-NFLaRNPr.js} +13 -9
  44. package/dist/_chunks/Relations-NFLaRNPr.js.map +1 -0
  45. package/dist/_chunks/{en-otD_UBJi.js → en-BlhnxQfj.js} +6 -5
  46. package/dist/_chunks/{en-otD_UBJi.js.map → en-BlhnxQfj.js.map} +1 -1
  47. package/dist/_chunks/{en-CbaIuYoB.mjs → en-C8YBvRrK.mjs} +6 -5
  48. package/dist/_chunks/{en-CbaIuYoB.mjs.map → en-C8YBvRrK.mjs.map} +1 -1
  49. package/dist/_chunks/{index-BJ6uTqLL.mjs → index-C9HxCo5R.mjs} +1586 -1483
  50. package/dist/_chunks/index-C9HxCo5R.mjs.map +1 -0
  51. package/dist/_chunks/{index-D9UmmBcM.js → index-ovJRE1FM.js} +1582 -1479
  52. package/dist/_chunks/index-ovJRE1FM.js.map +1 -0
  53. package/dist/_chunks/{layout-uomiIGbG.mjs → layout-DaUjDiWQ.mjs} +5 -4
  54. package/dist/_chunks/{layout-uomiIGbG.mjs.map → layout-DaUjDiWQ.mjs.map} +1 -1
  55. package/dist/_chunks/{layout-kfu5Wtix.js → layout-UNWstw_s.js} +5 -4
  56. package/dist/_chunks/{layout-kfu5Wtix.js.map → layout-UNWstw_s.js.map} +1 -1
  57. package/dist/_chunks/{relations-DiDufGSA.mjs → relations-D8iFAeRu.mjs} +2 -2
  58. package/dist/_chunks/{relations-DiDufGSA.mjs.map → relations-D8iFAeRu.mjs.map} +1 -1
  59. package/dist/_chunks/{relations-DKENrxko.js → relations-NN3coOG5.js} +2 -2
  60. package/dist/_chunks/{relations-DKENrxko.js.map → relations-NN3coOG5.js.map} +1 -1
  61. package/dist/_chunks/{usePrev-B9w_-eYc.js → useDebounce-CtcjDB3L.js} +14 -1
  62. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -0
  63. package/dist/_chunks/useDebounce-DmuSJIF3.mjs +29 -0
  64. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -0
  65. package/dist/admin/index.js +2 -1
  66. package/dist/admin/index.js.map +1 -1
  67. package/dist/admin/index.mjs +3 -2
  68. package/dist/admin/src/exports.d.ts +1 -1
  69. package/dist/admin/src/hooks/useDocument.d.ts +32 -1
  70. package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
  71. package/dist/admin/src/services/documents.d.ts +3 -1
  72. package/dist/server/index.js +27 -16
  73. package/dist/server/index.js.map +1 -1
  74. package/dist/server/index.mjs +27 -16
  75. package/dist/server/index.mjs.map +1 -1
  76. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  77. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  78. package/dist/shared/contracts/collection-types.d.ts +3 -1
  79. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  80. package/package.json +11 -11
  81. package/dist/_chunks/EditViewPage-DiNFdFqP.mjs.map +0 -1
  82. package/dist/_chunks/EditViewPage-Dk7Eaft4.js.map +0 -1
  83. package/dist/_chunks/Field-DH2OaqUP.js.map +0 -1
  84. package/dist/_chunks/Field-Dv_HTFTa.mjs.map +0 -1
  85. package/dist/_chunks/Form-B_dUDizM.js.map +0 -1
  86. package/dist/_chunks/Form-Dy6P4HgH.mjs.map +0 -1
  87. package/dist/_chunks/ListViewPage-5a1vw-OK.mjs.map +0 -1
  88. package/dist/_chunks/ListViewPage-BvpwNur7.js.map +0 -1
  89. package/dist/_chunks/Relations-C7fPyh5P.mjs.map +0 -1
  90. package/dist/_chunks/Relations-CznVF6LS.js.map +0 -1
  91. package/dist/_chunks/index-BJ6uTqLL.mjs.map +0 -1
  92. package/dist/_chunks/index-D9UmmBcM.js.map +0 -1
  93. package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
  94. package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
  95. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
  96. package/strapi-server.js +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce-DmuSJIF3.mjs","sources":["../../admin/src/utils/urls.ts","../../admin/src/hooks/usePrev.ts","../../admin/src/hooks/useDebounce.ts"],"sourcesContent":["const prefixFileUrlWithBackendUrl = (fileURL?: string): string | undefined => {\n return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;\n};\n\nexport { prefixFileUrlWithBackendUrl };\n","import { useEffect, useRef } from 'react';\n\nexport const usePrev = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n};\n","import { useEffect, useState } from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"],"names":[],"mappings":";AAAM,MAAA,8BAA8B,CAAC,YAAyC;AAC5E,SAAO,CAAC,CAAC,WAAW,QAAQ,WAAW,GAAG,IAAI,GAAG,OAAO,OAAO,UAAU,GAAG,OAAO,KAAK;AAC1F;ACAa,MAAA,UAAU,CAAI,UAA4B;AACrD,QAAM,MAAM;AAEZ,YAAU,MAAM;AACd,QAAI,UAAU;AAAA,EAAA,GACb,CAAC,KAAK,CAAC;AAEV,SAAO,IAAI;AACb;ACRgB,SAAA,YAAoB,OAAe,OAAuB;AACxE,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAE1D,YAAU,MAAM;AACR,UAAA,UAAU,WAAW,MAAM;AAC/B,wBAAkB,KAAK;AAAA,OACtB,KAAK;AAER,WAAO,MAAM;AACX,mBAAa,OAAO;AAAA,IAAA;AAAA,EACtB,GACC,CAAC,OAAO,KAAK,CAAC;AAEV,SAAA;AACT;"}
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const index = require("../_chunks/index-D9UmmBcM.js");
3
+ const index = require("../_chunks/index-ovJRE1FM.js");
4
4
  require("@strapi/icons");
5
5
  exports.DocumentRBAC = index.DocumentRBAC;
6
6
  exports.buildValidParams = index.buildValidParams;
7
7
  exports.default = index.index;
8
+ exports.unstable_useContentManagerContext = index.useContentManagerContext;
8
9
  exports.unstable_useDocument = index.useDocument;
9
10
  exports.unstable_useDocumentActions = index.useDocumentActions;
10
11
  exports.unstable_useDocumentLayout = index.useDocumentLayout;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -1,11 +1,12 @@
1
- import { l, d, K, J, L, h, f } from "../_chunks/index-BJ6uTqLL.mjs";
1
+ import { l, d, K, L, J, M, h, f } from "../_chunks/index-C9HxCo5R.mjs";
2
2
  import "@strapi/icons";
3
3
  export {
4
4
  l as DocumentRBAC,
5
5
  d as buildValidParams,
6
6
  K as default,
7
+ L as unstable_useContentManagerContext,
7
8
  J as unstable_useDocument,
8
- L as unstable_useDocumentActions,
9
+ M as unstable_useDocumentActions,
9
10
  h as unstable_useDocumentLayout,
10
11
  f as useDocumentRBAC
11
12
  };
@@ -4,7 +4,7 @@
4
4
  * but should still export the same things.
5
5
  */
6
6
  export { buildValidParams } from './utils/api';
7
- export { useDocument as unstable_useDocument } from './hooks/useDocument';
7
+ export { useDocument as unstable_useDocument, useContentManagerContext as unstable_useContentManagerContext, } from './hooks/useDocument';
8
8
  export { useDocumentActions as unstable_useDocumentActions } from './hooks/useDocumentActions';
9
9
  export { useDocumentLayout as unstable_useDocumentLayout } from './hooks/useDocumentLayout';
10
10
  export type { EditFieldLayout, EditLayout, ListFieldLayout, ListLayout, } from './hooks/useDocumentLayout';
@@ -31,7 +31,9 @@ type UseDocument = (args: UseDocumentArgs, opts?: UseDocumentOpts) => {
31
31
  * This is the schema of the content type, it is not the same as the layout.
32
32
  */
33
33
  schema?: Schema;
34
+ schemas?: Schema[];
34
35
  validate: (document: Document) => null | FormErrors;
36
+ hasError?: boolean;
35
37
  };
36
38
  /**
37
39
  * @alpha
@@ -78,10 +80,39 @@ declare const useDoc: () => {
78
80
  * This is the schema of the content type, it is not the same as the layout.
79
81
  */
80
82
  schema?: ContentType | undefined;
83
+ schemas?: ContentType[] | undefined;
81
84
  validate: (document: Document) => null | FormErrors;
85
+ hasError?: boolean | undefined;
82
86
  collectionType: string;
83
87
  model: string;
84
88
  id: string | undefined;
85
89
  };
86
- export { useDocument, useDoc };
90
+ /**
91
+ * @public
92
+ * @experimental
93
+ * Content manager context hooks for plugin development.
94
+ * Make sure to use this hook inside the content manager.
95
+ */
96
+ declare const useContentManagerContext: () => {
97
+ error: import("@reduxjs/toolkit").SerializedError | import("../utils/api").BaseQueryError | undefined;
98
+ isLoading: boolean;
99
+ model: string;
100
+ collectionType: string;
101
+ id: string | undefined;
102
+ slug: string;
103
+ isCreatingEntry: boolean;
104
+ isSingleType: boolean;
105
+ hasDraftAndPublish: boolean;
106
+ components: ComponentsDictionary;
107
+ contentType: ContentType | undefined;
108
+ contentTypes: ContentType[] | undefined;
109
+ form: import("@strapi/admin/strapi-admin").FormContextValue<import("@strapi/admin/strapi-admin").FormValues>;
110
+ layout: {
111
+ error?: import("@reduxjs/toolkit").SerializedError | import("../utils/api").BaseQueryError | undefined;
112
+ isLoading: boolean;
113
+ edit: import("./useDocumentLayout").EditLayout;
114
+ list: import("./useDocumentLayout").ListLayout;
115
+ };
116
+ };
117
+ export { useDocument, useDoc, useContentManagerContext };
87
118
  export type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };
@@ -6,20 +6,20 @@ interface HeaderProps {
6
6
  title?: string;
7
7
  }
8
8
  declare const Header: ({ isCreating, status, title: documentTitle }: HeaderProps) => import("react/jsx-runtime").JSX.Element;
9
- interface HeaderButtonAction {
9
+ interface DialogOptions {
10
+ type: 'dialog';
11
+ title: string;
12
+ content?: React.ReactNode;
13
+ footer?: React.ReactNode;
14
+ }
15
+ interface HeaderActionDescription {
10
16
  disabled?: boolean;
11
17
  label: string;
12
18
  icon?: React.ReactNode;
13
- /**
14
- * @default 'default'
15
- */
16
19
  type?: 'icon' | 'default';
17
- onClick?: (event: React.SyntheticEvent) => void;
18
- }
19
- interface HeaderSelectAction {
20
- disabled?: boolean;
21
- label: string;
22
- options: Array<{
20
+ onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;
21
+ dialog?: DialogOptions;
22
+ options?: Array<{
23
23
  disabled?: boolean;
24
24
  label: string;
25
25
  startIcon?: React.ReactNode;
@@ -28,8 +28,8 @@ interface HeaderSelectAction {
28
28
  }>;
29
29
  onSelect?: (value: string) => void;
30
30
  value?: string;
31
+ customizeContent?: (value: string) => React.ReactNode;
31
32
  }
32
- type HeaderActionDescription = HeaderButtonAction | HeaderSelectAction;
33
33
  declare const DEFAULT_HEADER_ACTIONS: DocumentActionComponent[];
34
34
  export { Header, DEFAULT_HEADER_ACTIONS };
35
35
  export type { HeaderProps, HeaderActionDescription };
@@ -96,6 +96,8 @@ declare const useAutoCloneDocumentMutation: import("@reduxjs/toolkit/dist/query/
96
96
  }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "ComponentConfiguration" | "ContentTypesConfiguration" | "ContentTypeSettings" | "Document" | "InitialData" | "HistoryVersion" | "Relations" | "UidAvailability", Unpublish.Response, "adminApi">>, useUnpublishManyDocumentsMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Pick<BulkUnpublish.Params, "model"> & {
97
97
  documentIds: string[];
98
98
  } & {
99
- params?: {} | undefined;
99
+ params?: {
100
+ locale?: string | string[] | null | undefined;
101
+ } | undefined;
100
102
  }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "ComponentConfiguration" | "ContentTypesConfiguration" | "ContentTypeSettings" | "Document" | "InitialData" | "HistoryVersion" | "Relations" | "UidAvailability", BulkUnpublish.Response, "adminApi">>;
101
103
  export { useAutoCloneDocumentMutation, useCloneDocumentMutation, useCreateDocumentMutation, useDeleteDocumentMutation, useDeleteManyDocumentsMutation, useDiscardDocumentMutation, useGetAllDocumentsQuery, useLazyGetDocumentQuery, useGetDocumentQuery, useLazyGetDraftRelationCountQuery as useGetDraftRelationCountQuery, useGetManyDraftRelationCountQuery, usePublishDocumentMutation, usePublishManyDocumentsMutation, useUpdateDocumentMutation, useUnpublishDocumentMutation, useUnpublishManyDocumentsMutation, };
@@ -1787,7 +1787,7 @@ const collectionTypes = {
1787
1787
  permissionChecker2,
1788
1788
  model,
1789
1789
  // @ts-expect-error TODO: fix
1790
- { id, locale, publishedAt: null },
1790
+ { documentId: id, locale, publishedAt: null },
1791
1791
  { availableLocales: true, availableStatus: false }
1792
1792
  );
1793
1793
  ctx.body = { data: {}, meta };
@@ -1924,11 +1924,17 @@ const collectionTypes = {
1924
1924
  }
1925
1925
  const isUpdate = !isCreate;
1926
1926
  if (isUpdate) {
1927
- document = await documentManager2.findOne(id, model, { populate, locale });
1928
- if (!document) {
1927
+ const documentExists = documentManager2.exists(model, id);
1928
+ if (!documentExists) {
1929
1929
  throw new strapiUtils.errors.NotFoundError("Document not found");
1930
1930
  }
1931
- if (permissionChecker2.can.update(document)) {
1931
+ document = await documentManager2.findOne(id, model, { populate, locale });
1932
+ if (!document) {
1933
+ if (permissionChecker2.cannot.create({ locale }) || permissionChecker2.cannot.publish({ locale })) {
1934
+ throw new strapiUtils.errors.ForbiddenError();
1935
+ }
1936
+ document = await updateDocument(ctx);
1937
+ } else if (permissionChecker2.can.update(document)) {
1932
1938
  await updateDocument(ctx);
1933
1939
  }
1934
1940
  }
@@ -1990,7 +1996,9 @@ const collectionTypes = {
1990
1996
  if (permissionChecker2.cannot.unpublish()) {
1991
1997
  return ctx.forbidden();
1992
1998
  }
1993
- const { locale } = await getDocumentLocaleAndStatus(body, model);
1999
+ const { locale } = await getDocumentLocaleAndStatus(body, model, {
2000
+ allowMultipleLocales: true
2001
+ });
1994
2002
  const entityPromises = documentIds.map(
1995
2003
  (documentId) => documentManager2.findLocales(documentId, model, { locale, isPublished: true })
1996
2004
  );
@@ -2380,11 +2388,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
2380
2388
  const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
2381
2389
  const isSourceLocalized = isLocalized(sourceModel);
2382
2390
  const isTargetLocalized = isLocalized(targetModel);
2383
- let validatedLocale = locale;
2384
- if (!targetModel || !isTargetLocalized)
2385
- validatedLocale = void 0;
2386
2391
  return {
2387
- locale: validatedLocale,
2392
+ locale,
2388
2393
  isSourceLocalized,
2389
2394
  isTargetLocalized
2390
2395
  };
@@ -2487,7 +2492,7 @@ const relations = {
2487
2492
  attribute,
2488
2493
  fieldsToSelect,
2489
2494
  mainField,
2490
- source: { schema: sourceSchema },
2495
+ source: { schema: sourceSchema, isLocalized: isSourceLocalized },
2491
2496
  target: { schema: targetSchema, isLocalized: isTargetLocalized },
2492
2497
  sourceSchema,
2493
2498
  targetSchema,
@@ -2509,7 +2514,8 @@ const relations = {
2509
2514
  fieldsToSelect,
2510
2515
  mainField,
2511
2516
  source: {
2512
- schema: { uid: sourceUid, modelType: sourceModelType }
2517
+ schema: { uid: sourceUid, modelType: sourceModelType },
2518
+ isLocalized: isSourceLocalized
2513
2519
  },
2514
2520
  target: {
2515
2521
  schema: { uid: targetUid },
@@ -2547,12 +2553,16 @@ const relations = {
2547
2553
  } else {
2548
2554
  where.id = id;
2549
2555
  }
2550
- if (status) {
2551
- where[`${alias}.published_at`] = getPublishedAtClause(status, targetUid);
2556
+ const publishedAt = getPublishedAtClause(status, targetUid);
2557
+ if (!fp.isEmpty(publishedAt)) {
2558
+ where[`${alias}.published_at`] = publishedAt;
2552
2559
  }
2553
- if (filterByLocale) {
2560
+ if (isTargetLocalized && locale) {
2554
2561
  where[`${alias}.locale`] = locale;
2555
2562
  }
2563
+ if (isSourceLocalized && locale) {
2564
+ where.locale = locale;
2565
+ }
2556
2566
  if ((idsToInclude?.length ?? 0) !== 0) {
2557
2567
  where[`${alias}.id`].$notIn = idsToInclude;
2558
2568
  }
@@ -2570,7 +2580,8 @@ const relations = {
2570
2580
  id: { $notIn: fp.uniq(idsToOmit) }
2571
2581
  });
2572
2582
  }
2573
- const res = await strapi.db.query(targetUid).findPage(strapi.get("query-params").transform(targetUid, queryParams));
2583
+ const dbQuery = strapi.get("query-params").transform(targetUid, queryParams);
2584
+ const res = await strapi.db.query(targetUid).findPage(dbQuery);
2574
2585
  ctx.body = {
2575
2586
  ...res,
2576
2587
  results: await addStatusToRelations(targetUid, res.results)
@@ -2692,7 +2703,7 @@ const singleTypes = {
2692
2703
  permissionChecker2,
2693
2704
  model,
2694
2705
  // @ts-expect-error - fix types
2695
- { id: document.documentId, locale, publishedAt: null },
2706
+ { documentId: document.documentId, locale, publishedAt: null },
2696
2707
  { availableLocales: true, availableStatus: false }
2697
2708
  );
2698
2709
  ctx.body = { data: {}, meta };