@strapi/review-workflows 5.44.0 → 5.45.0

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.
@@ -42,11 +42,10 @@ const admin = {
42
42
  },
43
43
  licenseOnly: true,
44
44
  permissions: [],
45
- async Component () {
46
- const { Router } = await Promise.resolve().then(function () { return require('./router.js'); });
47
- return {
48
- default: Router
49
- };
45
+ Component () {
46
+ return Promise.resolve().then(function () { return require('./router.js'); }).then((mod)=>({
47
+ default: mod.Router
48
+ }));
50
49
  }
51
50
  });
52
51
  // Always put the assigned to me widget last in the list of widgets
@@ -81,11 +80,10 @@ const admin = {
81
80
  },
82
81
  licenseOnly: true,
83
82
  permissions: [],
84
- async Component () {
85
- const { PurchaseReviewWorkflows } = await Promise.resolve().then(function () { return require('./routes/purchase-review-workflows.js'); });
86
- return {
87
- default: PurchaseReviewWorkflows
88
- };
83
+ Component () {
84
+ return Promise.resolve().then(function () { return require('./routes/purchase-review-workflows.js'); }).then((mod)=>({
85
+ default: mod.PurchaseReviewWorkflows
86
+ }));
89
87
  }
90
88
  });
91
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../admin/src/index.ts"],"sourcesContent":["import { SealCheck } from '@strapi/icons';\n\nimport { PLUGIN_ID, FEATURE_ID } from './constants';\nimport { Header } from './routes/content-manager/model/id/components/Header';\nimport { Panel } from './routes/content-manager/model/id/components/Panel';\nimport { addColumnToTableHook } from './utils/cm-hooks';\nimport { prefixPluginTranslations } from './utils/translations';\n\nimport type { StrapiApp, WidgetArgs } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n register(app: StrapiApp) {\n if (window.strapi.features.isEnabled(FEATURE_ID)) {\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n\n const contentManagerPluginApis = app.getPlugin('content-manager').apis;\n\n if (\n 'addEditViewSidePanel' in contentManagerPluginApis &&\n typeof contentManagerPluginApis.addEditViewSidePanel === 'function'\n ) {\n contentManagerPluginApis.addEditViewSidePanel([Panel]);\n }\n\n app.addSettingsLink('global', {\n id: PLUGIN_ID,\n to: `review-workflows`,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Review Workflows',\n },\n licenseOnly: true,\n permissions: [],\n async Component() {\n const { Router } = await import('./router');\n return { default: Router };\n },\n });\n\n // Always put the assigned to me widget last in the list of widgets\n app.widgets.register((widgets: WidgetArgs[]) => [\n ...widgets,\n {\n icon: SealCheck,\n title: {\n id: `${PLUGIN_ID}.widget.assigned.title`,\n defaultMessage: 'Assigned to me',\n },\n component: async () => {\n const { AssignedWidget } = await import('./components/Widgets');\n return AssignedWidget;\n },\n pluginId: PLUGIN_ID,\n id: 'assigned',\n permissions: [{ action: 'plugin::content-manager.explorer.read' }],\n },\n ]);\n } else if (!window.strapi.features.isEnabled(FEATURE_ID) && window.strapi?.flags?.promoteEE) {\n app.addSettingsLink('global', {\n id: PLUGIN_ID,\n to: `purchase-review-workflows`,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Review Workflows',\n },\n licenseOnly: true,\n permissions: [],\n async Component() {\n const { PurchaseReviewWorkflows } = await import('./routes/purchase-review-workflows');\n return { default: PurchaseReviewWorkflows };\n },\n });\n }\n },\n bootstrap(app: StrapiApp) {\n if (window.strapi.features.isEnabled(FEATURE_ID)) {\n app.getPlugin('content-manager').injectComponent('preview', 'actions', {\n name: 'review-workflows-assignee',\n Component: Header,\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, PLUGIN_ID),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["admin","register","app","window","strapi","features","isEnabled","FEATURE_ID","registerHook","addColumnToTableHook","contentManagerPluginApis","getPlugin","apis","addEditViewSidePanel","Panel","addSettingsLink","id","PLUGIN_ID","to","intlLabel","defaultMessage","licenseOnly","permissions","Component","Router","default","widgets","icon","SealCheck","title","component","AssignedWidget","pluginId","action","flags","promoteEE","PurchaseReviewWorkflows","bootstrap","injectComponent","name","Header","registerTrads","locales","importedTrads","Promise","all","map","locale","then","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../admin/src/index.ts"],"sourcesContent":["import { SealCheck } from '@strapi/icons';\n\nimport { PLUGIN_ID, FEATURE_ID } from './constants';\nimport { Header } from './routes/content-manager/model/id/components/Header';\nimport { Panel } from './routes/content-manager/model/id/components/Panel';\nimport { addColumnToTableHook } from './utils/cm-hooks';\nimport { prefixPluginTranslations } from './utils/translations';\n\nimport type { StrapiApp, WidgetArgs } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n register(app: StrapiApp) {\n if (window.strapi.features.isEnabled(FEATURE_ID)) {\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n\n const contentManagerPluginApis = app.getPlugin('content-manager').apis;\n\n if (\n 'addEditViewSidePanel' in contentManagerPluginApis &&\n typeof contentManagerPluginApis.addEditViewSidePanel === 'function'\n ) {\n contentManagerPluginApis.addEditViewSidePanel([Panel]);\n }\n\n app.addSettingsLink('global', {\n id: PLUGIN_ID,\n to: `review-workflows`,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Review Workflows',\n },\n licenseOnly: true,\n permissions: [],\n Component() {\n return import('./router').then((mod) => ({\n default: mod.Router,\n }));\n },\n });\n\n // Always put the assigned to me widget last in the list of widgets\n app.widgets.register((widgets: WidgetArgs[]) => [\n ...widgets,\n {\n icon: SealCheck,\n title: {\n id: `${PLUGIN_ID}.widget.assigned.title`,\n defaultMessage: 'Assigned to me',\n },\n component: async () => {\n const { AssignedWidget } = await import('./components/Widgets');\n return AssignedWidget;\n },\n pluginId: PLUGIN_ID,\n id: 'assigned',\n permissions: [{ action: 'plugin::content-manager.explorer.read' }],\n },\n ]);\n } else if (!window.strapi.features.isEnabled(FEATURE_ID) && window.strapi?.flags?.promoteEE) {\n app.addSettingsLink('global', {\n id: PLUGIN_ID,\n to: `purchase-review-workflows`,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Review Workflows',\n },\n licenseOnly: true,\n permissions: [],\n Component() {\n return import('./routes/purchase-review-workflows').then((mod) => ({\n default: mod.PurchaseReviewWorkflows,\n }));\n },\n });\n }\n },\n bootstrap(app: StrapiApp) {\n if (window.strapi.features.isEnabled(FEATURE_ID)) {\n app.getPlugin('content-manager').injectComponent('preview', 'actions', {\n name: 'review-workflows-assignee',\n Component: Header,\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, PLUGIN_ID),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["admin","register","app","window","strapi","features","isEnabled","FEATURE_ID","registerHook","addColumnToTableHook","contentManagerPluginApis","getPlugin","apis","addEditViewSidePanel","Panel","addSettingsLink","id","PLUGIN_ID","to","intlLabel","defaultMessage","licenseOnly","permissions","Component","then","mod","default","Router","widgets","icon","SealCheck","title","component","AssignedWidget","pluginId","action","flags","promoteEE","PurchaseReviewWorkflows","bootstrap","injectComponent","name","Header","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
@@ -38,11 +38,10 @@ const admin = {
38
38
  },
39
39
  licenseOnly: true,
40
40
  permissions: [],
41
- async Component () {
42
- const { Router } = await import('./router.mjs');
43
- return {
44
- default: Router
45
- };
41
+ Component () {
42
+ return import('./router.mjs').then((mod)=>({
43
+ default: mod.Router
44
+ }));
46
45
  }
47
46
  });
48
47
  // Always put the assigned to me widget last in the list of widgets
@@ -77,11 +76,10 @@ const admin = {
77
76
  },
78
77
  licenseOnly: true,
79
78
  permissions: [],
80
- async Component () {
81
- const { PurchaseReviewWorkflows } = await import('./routes/purchase-review-workflows.mjs');
82
- return {
83
- default: PurchaseReviewWorkflows
84
- };
79
+ Component () {
80
+ return import('./routes/purchase-review-workflows.mjs').then((mod)=>({
81
+ default: mod.PurchaseReviewWorkflows
82
+ }));
85
83
  }
86
84
  });
87
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../admin/src/index.ts"],"sourcesContent":["import { SealCheck } from '@strapi/icons';\n\nimport { PLUGIN_ID, FEATURE_ID } from './constants';\nimport { Header } from './routes/content-manager/model/id/components/Header';\nimport { Panel } from './routes/content-manager/model/id/components/Panel';\nimport { addColumnToTableHook } from './utils/cm-hooks';\nimport { prefixPluginTranslations } from './utils/translations';\n\nimport type { StrapiApp, WidgetArgs } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n register(app: StrapiApp) {\n if (window.strapi.features.isEnabled(FEATURE_ID)) {\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n\n const contentManagerPluginApis = app.getPlugin('content-manager').apis;\n\n if (\n 'addEditViewSidePanel' in contentManagerPluginApis &&\n typeof contentManagerPluginApis.addEditViewSidePanel === 'function'\n ) {\n contentManagerPluginApis.addEditViewSidePanel([Panel]);\n }\n\n app.addSettingsLink('global', {\n id: PLUGIN_ID,\n to: `review-workflows`,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Review Workflows',\n },\n licenseOnly: true,\n permissions: [],\n async Component() {\n const { Router } = await import('./router');\n return { default: Router };\n },\n });\n\n // Always put the assigned to me widget last in the list of widgets\n app.widgets.register((widgets: WidgetArgs[]) => [\n ...widgets,\n {\n icon: SealCheck,\n title: {\n id: `${PLUGIN_ID}.widget.assigned.title`,\n defaultMessage: 'Assigned to me',\n },\n component: async () => {\n const { AssignedWidget } = await import('./components/Widgets');\n return AssignedWidget;\n },\n pluginId: PLUGIN_ID,\n id: 'assigned',\n permissions: [{ action: 'plugin::content-manager.explorer.read' }],\n },\n ]);\n } else if (!window.strapi.features.isEnabled(FEATURE_ID) && window.strapi?.flags?.promoteEE) {\n app.addSettingsLink('global', {\n id: PLUGIN_ID,\n to: `purchase-review-workflows`,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Review Workflows',\n },\n licenseOnly: true,\n permissions: [],\n async Component() {\n const { PurchaseReviewWorkflows } = await import('./routes/purchase-review-workflows');\n return { default: PurchaseReviewWorkflows };\n },\n });\n }\n },\n bootstrap(app: StrapiApp) {\n if (window.strapi.features.isEnabled(FEATURE_ID)) {\n app.getPlugin('content-manager').injectComponent('preview', 'actions', {\n name: 'review-workflows-assignee',\n Component: Header,\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, PLUGIN_ID),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["admin","register","app","window","strapi","features","isEnabled","FEATURE_ID","registerHook","addColumnToTableHook","contentManagerPluginApis","getPlugin","apis","addEditViewSidePanel","Panel","addSettingsLink","id","PLUGIN_ID","to","intlLabel","defaultMessage","licenseOnly","permissions","Component","Router","default","widgets","icon","SealCheck","title","component","AssignedWidget","pluginId","action","flags","promoteEE","PurchaseReviewWorkflows","bootstrap","injectComponent","name","Header","registerTrads","locales","importedTrads","Promise","all","map","locale","then","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../admin/src/index.ts"],"sourcesContent":["import { SealCheck } from '@strapi/icons';\n\nimport { PLUGIN_ID, FEATURE_ID } from './constants';\nimport { Header } from './routes/content-manager/model/id/components/Header';\nimport { Panel } from './routes/content-manager/model/id/components/Panel';\nimport { addColumnToTableHook } from './utils/cm-hooks';\nimport { prefixPluginTranslations } from './utils/translations';\n\nimport type { StrapiApp, WidgetArgs } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n register(app: StrapiApp) {\n if (window.strapi.features.isEnabled(FEATURE_ID)) {\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n\n const contentManagerPluginApis = app.getPlugin('content-manager').apis;\n\n if (\n 'addEditViewSidePanel' in contentManagerPluginApis &&\n typeof contentManagerPluginApis.addEditViewSidePanel === 'function'\n ) {\n contentManagerPluginApis.addEditViewSidePanel([Panel]);\n }\n\n app.addSettingsLink('global', {\n id: PLUGIN_ID,\n to: `review-workflows`,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Review Workflows',\n },\n licenseOnly: true,\n permissions: [],\n Component() {\n return import('./router').then((mod) => ({\n default: mod.Router,\n }));\n },\n });\n\n // Always put the assigned to me widget last in the list of widgets\n app.widgets.register((widgets: WidgetArgs[]) => [\n ...widgets,\n {\n icon: SealCheck,\n title: {\n id: `${PLUGIN_ID}.widget.assigned.title`,\n defaultMessage: 'Assigned to me',\n },\n component: async () => {\n const { AssignedWidget } = await import('./components/Widgets');\n return AssignedWidget;\n },\n pluginId: PLUGIN_ID,\n id: 'assigned',\n permissions: [{ action: 'plugin::content-manager.explorer.read' }],\n },\n ]);\n } else if (!window.strapi.features.isEnabled(FEATURE_ID) && window.strapi?.flags?.promoteEE) {\n app.addSettingsLink('global', {\n id: PLUGIN_ID,\n to: `purchase-review-workflows`,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Review Workflows',\n },\n licenseOnly: true,\n permissions: [],\n Component() {\n return import('./routes/purchase-review-workflows').then((mod) => ({\n default: mod.PurchaseReviewWorkflows,\n }));\n },\n });\n }\n },\n bootstrap(app: StrapiApp) {\n if (window.strapi.features.isEnabled(FEATURE_ID)) {\n app.getPlugin('content-manager').injectComponent('preview', 'actions', {\n name: 'review-workflows-assignee',\n Component: Header,\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, PLUGIN_ID),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["admin","register","app","window","strapi","features","isEnabled","FEATURE_ID","registerHook","addColumnToTableHook","contentManagerPluginApis","getPlugin","apis","addEditViewSidePanel","Panel","addSettingsLink","id","PLUGIN_ID","to","intlLabel","defaultMessage","licenseOnly","permissions","Component","then","mod","default","Router","widgets","icon","SealCheck","title","component","AssignedWidget","pluginId","action","flags","promoteEE","PurchaseReviewWorkflows","bootstrap","injectComponent","name","Header","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
@@ -32,6 +32,10 @@ function _interopNamespaceDefault(e) {
32
32
 
33
33
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
34
34
 
35
+ const PAGE_SIZE = 10;
36
+ const contains = (value)=>({
37
+ $containsi: value
38
+ });
35
39
  const AssigneeSelect = ({ isCompact })=>{
36
40
  const { collectionType = '', id, slug: model = '' } = reactRouterDom.useParams();
37
41
  const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions);
@@ -43,7 +47,65 @@ const AssigneeSelect = ({ isCompact })=>{
43
47
  const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
44
48
  query
45
49
  ]);
46
- const { data, isLoading: isLoadingUsers, isError } = strapiAdmin.useAdminUsers(undefined, {
50
+ const [pageSize, setPageSize] = React__namespace.useState(PAGE_SIZE);
51
+ const [search, setSearch] = React__namespace.useState('');
52
+ const debouncedSearch = strapiAdmin.useDebounce(search, 300);
53
+ const searchFilters = React__namespace.useMemo(()=>{
54
+ const value = debouncedSearch.trim();
55
+ if (!value) {
56
+ return undefined;
57
+ }
58
+ const [firstTerm, ...restTerms] = value.split(/\s+/);
59
+ const rest = restTerms.join(' ');
60
+ const filters = {
61
+ $or: [
62
+ {
63
+ firstname: contains(value)
64
+ },
65
+ {
66
+ lastname: contains(value)
67
+ },
68
+ {
69
+ username: contains(value)
70
+ },
71
+ {
72
+ email: contains(value)
73
+ }
74
+ ]
75
+ };
76
+ if (rest) {
77
+ filters.$or = [
78
+ ...filters.$or ?? [],
79
+ {
80
+ $and: [
81
+ {
82
+ firstname: contains(firstTerm)
83
+ },
84
+ {
85
+ lastname: contains(rest)
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ $and: [
91
+ {
92
+ firstname: contains(rest)
93
+ },
94
+ {
95
+ lastname: contains(firstTerm)
96
+ }
97
+ ]
98
+ }
99
+ ];
100
+ }
101
+ return filters;
102
+ }, [
103
+ debouncedSearch
104
+ ]);
105
+ const { data, isLoading: isLoadingUsers, isError } = strapiAdmin.useAdminUsers({
106
+ pageSize,
107
+ filters: searchFilters
108
+ }, {
47
109
  skip: isLoadingPermissions || !canRead
48
110
  });
49
111
  const { document } = strapiAdmin$1.unstable_useDocument({
@@ -54,8 +116,36 @@ const AssigneeSelect = ({ isCompact })=>{
54
116
  }, {
55
117
  skip: !id && collectionType !== 'single-types'
56
118
  });
57
- const users$1 = data?.users || [];
119
+ const users$1 = React__namespace.useMemo(()=>data?.users ?? [], [
120
+ data?.users
121
+ ]);
122
+ const { pageCount = 1, page = 1 } = data?.pagination ?? {};
58
123
  const currentAssignee = document ? document[constants.ASSIGNEE_ATTRIBUTE_NAME] : null;
124
+ // Keep the currently assigned user in the options even when they fall outside
125
+ // the loaded page or the active search — otherwise the Combobox loses its value.
126
+ const options = React__namespace.useMemo(()=>{
127
+ if (!currentAssignee) return users$1;
128
+ return users$1.some((u)=>u.id === currentAssignee.id) ? users$1 : [
129
+ currentAssignee,
130
+ ...users$1
131
+ ];
132
+ }, [
133
+ users$1,
134
+ currentAssignee
135
+ ]);
136
+ const handleOpenChange = (isOpen)=>{
137
+ if (!isOpen) {
138
+ setPageSize(PAGE_SIZE);
139
+ setSearch('');
140
+ }
141
+ };
142
+ const handleLoadMore = ()=>{
143
+ setPageSize(pageSize + PAGE_SIZE);
144
+ };
145
+ const handleInputChange = (e)=>{
146
+ setSearch(e.currentTarget.value);
147
+ setPageSize(PAGE_SIZE);
148
+ };
59
149
  const [updateAssignee, { error, isLoading: isMutating }] = contentManager.useUpdateAssigneeMutation();
60
150
  if (!collectionType || !model || !document?.documentId) {
61
151
  return null;
@@ -92,6 +182,7 @@ const AssigneeSelect = ({ isCompact })=>{
92
182
  };
93
183
  const isDisabled = !isLoadingPermissions && !isLoadingUsers && users$1.length === 0 || !document.documentId;
94
184
  const isLoading = isLoadingUsers || isLoadingPermissions || isMutating;
185
+ const hasMoreItems = page < pageCount;
95
186
  const assigneeLabel = formatMessage({
96
187
  id: 'content-manager.reviewWorkflows.assignee.label',
97
188
  defaultMessage: 'Assignee'
@@ -120,10 +211,14 @@ const AssigneeSelect = ({ isCompact })=>{
120
211
  value: currentAssignee ? currentAssignee.id.toString() : null,
121
212
  onChange: handleChange,
122
213
  onClear: ()=>handleChange(null),
214
+ onOpenChange: handleOpenChange,
215
+ onLoadMore: handleLoadMore,
216
+ hasMoreItems: hasMoreItems,
217
+ onInputChange: handleInputChange,
123
218
  placeholder: assigneePlaceholder,
124
219
  loading: isLoading || isLoadingPermissions || isMutating,
125
220
  size: "S",
126
- children: users$1.map((user)=>{
221
+ children: options.map((user)=>{
127
222
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.ComboboxOption, {
128
223
  value: user.id.toString(),
129
224
  textValue: users.getDisplayName(user),
@@ -151,9 +246,13 @@ const AssigneeSelect = ({ isCompact })=>{
151
246
  value: currentAssignee ? currentAssignee.id.toString() : null,
152
247
  onChange: handleChange,
153
248
  onClear: ()=>handleChange(null),
249
+ onOpenChange: handleOpenChange,
250
+ onLoadMore: handleLoadMore,
251
+ hasMoreItems: hasMoreItems,
252
+ onInputChange: handleInputChange,
154
253
  placeholder: assigneePlaceholder,
155
254
  loading: isLoading || isLoadingPermissions || isMutating,
156
- children: users$1.map((user)=>{
255
+ children: options.map((user)=>{
157
256
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.ComboboxOption, {
158
257
  value: user.id.toString(),
159
258
  textValue: users.getDisplayName(user),
@@ -1 +1 @@
1
- {"version":3,"file":"AssigneeSelect.js","sources":["../../../../../../../admin/src/routes/content-manager/model/id/components/AssigneeSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useRBAC,\n useAdminUsers,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport { Combobox, ComboboxOption, Field, VisuallyHidden } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../../../../modules/hooks';\nimport { useUpdateAssigneeMutation } from '../../../../../services/content-manager';\nimport { buildValidParams } from '../../../../../utils/api';\nimport { getDisplayName } from '../../../../../utils/users';\n\nimport { ASSIGNEE_ATTRIBUTE_NAME } from './constants';\n\nconst AssigneeSelect = ({ isCompact }: { isCompact?: boolean }) => {\n const {\n collectionType = '',\n id,\n slug: model = '',\n } = useParams<{ collectionType: string; slug: string; id: string }>();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const {\n allowedActions: { canRead },\n isLoading: isLoadingPermissions,\n } = useRBAC(permissions.settings?.users);\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const {\n data,\n isLoading: isLoadingUsers,\n isError,\n } = useAdminUsers(undefined, {\n skip: isLoadingPermissions || !canRead,\n });\n const { document } = unstable_useDocument(\n {\n collectionType,\n model,\n documentId: id,\n params,\n },\n {\n skip: !id && collectionType !== 'single-types',\n }\n );\n\n const users = data?.users || [];\n\n const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;\n\n const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();\n\n if (!collectionType || !model || !document?.documentId) {\n return null;\n }\n\n const handleChange = async (assigneeId: string | null) => {\n // a simple way to avoid erroneous updates\n if (currentAssignee?.id === assigneeId) {\n return;\n }\n\n const res = await updateAssignee({\n slug: collectionType,\n model,\n id: document.documentId,\n params,\n data: {\n id: assigneeId ? parseInt(assigneeId, 10) : null,\n },\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.notification.saved',\n defaultMessage: 'Assignee updated',\n }),\n });\n }\n\n if (isCompact && 'error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n };\n\n const isDisabled =\n (!isLoadingPermissions && !isLoadingUsers && users.length === 0) || !document.documentId;\n const isLoading = isLoadingUsers || isLoadingPermissions || isMutating;\n\n const assigneeLabel = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.label',\n defaultMessage: 'Assignee',\n });\n const assigneeClearLabel = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.clear',\n defaultMessage: 'Clear assignee',\n });\n const assigneePlaceholder = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.placeholder',\n defaultMessage: 'Select…',\n });\n\n if (isCompact) {\n return (\n <Field.Root name={ASSIGNEE_ATTRIBUTE_NAME} id={ASSIGNEE_ATTRIBUTE_NAME}>\n <VisuallyHidden>\n <Field.Label>{assigneeLabel}</Field.Label>\n </VisuallyHidden>\n <Combobox\n clearLabel={assigneeClearLabel}\n disabled={isDisabled}\n value={currentAssignee ? currentAssignee.id.toString() : null}\n onChange={handleChange}\n onClear={() => handleChange(null)}\n placeholder={assigneePlaceholder}\n loading={isLoading || isLoadingPermissions || isMutating}\n size=\"S\"\n >\n {users.map((user) => {\n return (\n <ComboboxOption\n key={user.id}\n value={user.id.toString()}\n textValue={getDisplayName(user)}\n >\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n </Field.Root>\n );\n }\n\n return (\n <Field.Root\n name={ASSIGNEE_ATTRIBUTE_NAME}\n id={ASSIGNEE_ATTRIBUTE_NAME}\n error={\n ((isError &&\n canRead &&\n formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.error',\n defaultMessage: 'An error occurred while fetching users',\n })) ||\n (error && formatAPIError(error))) ??\n undefined\n }\n >\n <Field.Label>{assigneeLabel}</Field.Label>\n <Combobox\n clearLabel={assigneeClearLabel}\n disabled={\n (!isLoadingPermissions && !isLoading && users.length === 0) || !document.documentId\n }\n value={currentAssignee ? currentAssignee.id.toString() : null}\n onChange={handleChange}\n onClear={() => handleChange(null)}\n placeholder={assigneePlaceholder}\n loading={isLoading || isLoadingPermissions || isMutating}\n >\n {users.map((user) => {\n return (\n <ComboboxOption\n key={user.id}\n value={user.id.toString()}\n textValue={getDisplayName(user)}\n >\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport { AssigneeSelect };\n"],"names":["AssigneeSelect","isCompact","collectionType","id","slug","model","useParams","permissions","useTypedSelector","state","admin_app","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","allowedActions","canRead","isLoading","isLoadingPermissions","useRBAC","settings","users","query","useQueryParams","params","React","useMemo","buildValidParams","data","isLoadingUsers","isError","useAdminUsers","undefined","skip","document","unstable_useDocument","documentId","currentAssignee","ASSIGNEE_ATTRIBUTE_NAME","updateAssignee","error","isMutating","useUpdateAssigneeMutation","handleChange","assigneeId","res","parseInt","type","message","defaultMessage","isDisabled","length","assigneeLabel","assigneeClearLabel","assigneePlaceholder","_jsxs","Field","Root","name","_jsx","VisuallyHidden","Label","Combobox","clearLabel","disabled","value","toString","onChange","onClear","placeholder","loading","size","map","user","ComboboxOption","textValue","getDisplayName","Error"],"mappings":"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"}
1
+ {"version":3,"file":"AssigneeSelect.js","sources":["../../../../../../../admin/src/routes/content-manager/model/id/components/AssigneeSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useRBAC,\n useAdminUsers,\n useQueryParams,\n useDebounce,\n} from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport { Combobox, ComboboxOption, Field, VisuallyHidden } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../../../../modules/hooks';\nimport { useUpdateAssigneeMutation } from '../../../../../services/content-manager';\nimport { buildValidParams } from '../../../../../utils/api';\nimport { getDisplayName } from '../../../../../utils/users';\n\nimport { ASSIGNEE_ATTRIBUTE_NAME } from './constants';\n\nimport type { Modules } from '@strapi/types';\n\nconst PAGE_SIZE = 10;\n\ntype AdminUserFilters = Modules.EntityService.Params.Pick<'admin::user', 'filters'>['filters'];\n\nconst contains = (value: string) => ({ $containsi: value });\n\nconst AssigneeSelect = ({ isCompact }: { isCompact?: boolean }) => {\n const {\n collectionType = '',\n id,\n slug: model = '',\n } = useParams<{ collectionType: string; slug: string; id: string }>();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const {\n allowedActions: { canRead },\n isLoading: isLoadingPermissions,\n } = useRBAC(permissions.settings?.users);\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const [pageSize, setPageSize] = React.useState(PAGE_SIZE);\n const [search, setSearch] = React.useState('');\n const debouncedSearch = useDebounce(search, 300);\n const searchFilters = React.useMemo(() => {\n const value = debouncedSearch.trim();\n\n if (!value) {\n return undefined;\n }\n\n const [firstTerm, ...restTerms] = value.split(/\\s+/);\n const rest = restTerms.join(' ');\n const filters: AdminUserFilters = {\n $or: [\n { firstname: contains(value) },\n { lastname: contains(value) },\n { username: contains(value) },\n { email: contains(value) },\n ],\n };\n\n if (rest) {\n filters.$or = [\n ...(filters.$or ?? []),\n {\n $and: [{ firstname: contains(firstTerm) }, { lastname: contains(rest) }],\n },\n {\n $and: [{ firstname: contains(rest) }, { lastname: contains(firstTerm) }],\n },\n ];\n }\n\n return filters;\n }, [debouncedSearch]);\n\n const {\n data,\n isLoading: isLoadingUsers,\n isError,\n } = useAdminUsers(\n {\n pageSize,\n filters: searchFilters,\n },\n {\n skip: isLoadingPermissions || !canRead,\n }\n );\n const { document } = unstable_useDocument(\n {\n collectionType,\n model,\n documentId: id,\n params,\n },\n {\n skip: !id && collectionType !== 'single-types',\n }\n );\n\n const users = React.useMemo(() => data?.users ?? [], [data?.users]);\n const { pageCount = 1, page = 1 } = data?.pagination ?? {};\n\n const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;\n\n // Keep the currently assigned user in the options even when they fall outside\n // the loaded page or the active search — otherwise the Combobox loses its value.\n const options = React.useMemo(() => {\n if (!currentAssignee) return users;\n return users.some((u) => u.id === currentAssignee.id) ? users : [currentAssignee, ...users];\n }, [users, currentAssignee]);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(PAGE_SIZE);\n setSearch('');\n }\n };\n\n const handleLoadMore = () => {\n setPageSize(pageSize + PAGE_SIZE);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n setPageSize(PAGE_SIZE);\n };\n\n const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();\n\n if (!collectionType || !model || !document?.documentId) {\n return null;\n }\n\n const handleChange = async (assigneeId: string | null) => {\n // a simple way to avoid erroneous updates\n if (currentAssignee?.id === assigneeId) {\n return;\n }\n\n const res = await updateAssignee({\n slug: collectionType,\n model,\n id: document.documentId,\n params,\n data: {\n id: assigneeId ? parseInt(assigneeId, 10) : null,\n },\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.notification.saved',\n defaultMessage: 'Assignee updated',\n }),\n });\n }\n\n if (isCompact && 'error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n };\n\n const isDisabled =\n (!isLoadingPermissions && !isLoadingUsers && users.length === 0) || !document.documentId;\n const isLoading = isLoadingUsers || isLoadingPermissions || isMutating;\n const hasMoreItems = page < pageCount;\n\n const assigneeLabel = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.label',\n defaultMessage: 'Assignee',\n });\n const assigneeClearLabel = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.clear',\n defaultMessage: 'Clear assignee',\n });\n const assigneePlaceholder = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.placeholder',\n defaultMessage: 'Select…',\n });\n\n if (isCompact) {\n return (\n <Field.Root name={ASSIGNEE_ATTRIBUTE_NAME} id={ASSIGNEE_ATTRIBUTE_NAME}>\n <VisuallyHidden>\n <Field.Label>{assigneeLabel}</Field.Label>\n </VisuallyHidden>\n <Combobox\n clearLabel={assigneeClearLabel}\n disabled={isDisabled}\n value={currentAssignee ? currentAssignee.id.toString() : null}\n onChange={handleChange}\n onClear={() => handleChange(null)}\n onOpenChange={handleOpenChange}\n onLoadMore={handleLoadMore}\n hasMoreItems={hasMoreItems}\n onInputChange={handleInputChange}\n placeholder={assigneePlaceholder}\n loading={isLoading || isLoadingPermissions || isMutating}\n size=\"S\"\n >\n {options.map((user) => {\n return (\n <ComboboxOption\n key={user.id}\n value={user.id.toString()}\n textValue={getDisplayName(user)}\n >\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n </Field.Root>\n );\n }\n\n return (\n <Field.Root\n name={ASSIGNEE_ATTRIBUTE_NAME}\n id={ASSIGNEE_ATTRIBUTE_NAME}\n error={\n ((isError &&\n canRead &&\n formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.error',\n defaultMessage: 'An error occurred while fetching users',\n })) ||\n (error && formatAPIError(error))) ??\n undefined\n }\n >\n <Field.Label>{assigneeLabel}</Field.Label>\n <Combobox\n clearLabel={assigneeClearLabel}\n disabled={\n (!isLoadingPermissions && !isLoading && users.length === 0) || !document.documentId\n }\n value={currentAssignee ? currentAssignee.id.toString() : null}\n onChange={handleChange}\n onClear={() => handleChange(null)}\n onOpenChange={handleOpenChange}\n onLoadMore={handleLoadMore}\n hasMoreItems={hasMoreItems}\n onInputChange={handleInputChange}\n placeholder={assigneePlaceholder}\n loading={isLoading || isLoadingPermissions || isMutating}\n >\n {options.map((user) => {\n return (\n <ComboboxOption\n key={user.id}\n value={user.id.toString()}\n textValue={getDisplayName(user)}\n >\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport { AssigneeSelect };\n"],"names":["PAGE_SIZE","contains","value","$containsi","AssigneeSelect","isCompact","collectionType","id","slug","model","useParams","permissions","useTypedSelector","state","admin_app","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","allowedActions","canRead","isLoading","isLoadingPermissions","useRBAC","settings","users","query","useQueryParams","params","React","useMemo","buildValidParams","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","searchFilters","trim","undefined","firstTerm","restTerms","split","rest","join","filters","$or","firstname","lastname","username","email","$and","data","isLoadingUsers","isError","useAdminUsers","skip","document","unstable_useDocument","documentId","pageCount","page","pagination","currentAssignee","ASSIGNEE_ATTRIBUTE_NAME","options","some","u","handleOpenChange","isOpen","handleLoadMore","handleInputChange","e","currentTarget","updateAssignee","error","isMutating","useUpdateAssigneeMutation","handleChange","assigneeId","res","parseInt","type","message","defaultMessage","isDisabled","length","hasMoreItems","assigneeLabel","assigneeClearLabel","assigneePlaceholder","_jsxs","Field","Root","name","_jsx","VisuallyHidden","Label","Combobox","clearLabel","disabled","toString","onChange","onClear","onOpenChange","onLoadMore","onInputChange","placeholder","loading","size","map","user","ComboboxOption","textValue","getDisplayName","Error"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useAPIErrorHandler, useNotification, useRBAC, useQueryParams, useAdminUsers } from '@strapi/admin/strapi-admin';
3
+ import { useAPIErrorHandler, useNotification, useRBAC, useQueryParams, useDebounce, useAdminUsers } from '@strapi/admin/strapi-admin';
4
4
  import { unstable_useDocument } from '@strapi/content-manager/strapi-admin';
5
5
  import { Field, VisuallyHidden, Combobox, ComboboxOption } from '@strapi/design-system';
6
6
  import { useIntl } from 'react-intl';
@@ -11,6 +11,10 @@ import { buildValidParams } from '../../../../../utils/api.mjs';
11
11
  import { getDisplayName } from '../../../../../utils/users.mjs';
12
12
  import { ASSIGNEE_ATTRIBUTE_NAME } from './constants.mjs';
13
13
 
14
+ const PAGE_SIZE = 10;
15
+ const contains = (value)=>({
16
+ $containsi: value
17
+ });
14
18
  const AssigneeSelect = ({ isCompact })=>{
15
19
  const { collectionType = '', id, slug: model = '' } = useParams();
16
20
  const permissions = useTypedSelector((state)=>state.admin_app.permissions);
@@ -22,7 +26,65 @@ const AssigneeSelect = ({ isCompact })=>{
22
26
  const params = React.useMemo(()=>buildValidParams(query), [
23
27
  query
24
28
  ]);
25
- const { data, isLoading: isLoadingUsers, isError } = useAdminUsers(undefined, {
29
+ const [pageSize, setPageSize] = React.useState(PAGE_SIZE);
30
+ const [search, setSearch] = React.useState('');
31
+ const debouncedSearch = useDebounce(search, 300);
32
+ const searchFilters = React.useMemo(()=>{
33
+ const value = debouncedSearch.trim();
34
+ if (!value) {
35
+ return undefined;
36
+ }
37
+ const [firstTerm, ...restTerms] = value.split(/\s+/);
38
+ const rest = restTerms.join(' ');
39
+ const filters = {
40
+ $or: [
41
+ {
42
+ firstname: contains(value)
43
+ },
44
+ {
45
+ lastname: contains(value)
46
+ },
47
+ {
48
+ username: contains(value)
49
+ },
50
+ {
51
+ email: contains(value)
52
+ }
53
+ ]
54
+ };
55
+ if (rest) {
56
+ filters.$or = [
57
+ ...filters.$or ?? [],
58
+ {
59
+ $and: [
60
+ {
61
+ firstname: contains(firstTerm)
62
+ },
63
+ {
64
+ lastname: contains(rest)
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ $and: [
70
+ {
71
+ firstname: contains(rest)
72
+ },
73
+ {
74
+ lastname: contains(firstTerm)
75
+ }
76
+ ]
77
+ }
78
+ ];
79
+ }
80
+ return filters;
81
+ }, [
82
+ debouncedSearch
83
+ ]);
84
+ const { data, isLoading: isLoadingUsers, isError } = useAdminUsers({
85
+ pageSize,
86
+ filters: searchFilters
87
+ }, {
26
88
  skip: isLoadingPermissions || !canRead
27
89
  });
28
90
  const { document } = unstable_useDocument({
@@ -33,8 +95,36 @@ const AssigneeSelect = ({ isCompact })=>{
33
95
  }, {
34
96
  skip: !id && collectionType !== 'single-types'
35
97
  });
36
- const users = data?.users || [];
98
+ const users = React.useMemo(()=>data?.users ?? [], [
99
+ data?.users
100
+ ]);
101
+ const { pageCount = 1, page = 1 } = data?.pagination ?? {};
37
102
  const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;
103
+ // Keep the currently assigned user in the options even when they fall outside
104
+ // the loaded page or the active search — otherwise the Combobox loses its value.
105
+ const options = React.useMemo(()=>{
106
+ if (!currentAssignee) return users;
107
+ return users.some((u)=>u.id === currentAssignee.id) ? users : [
108
+ currentAssignee,
109
+ ...users
110
+ ];
111
+ }, [
112
+ users,
113
+ currentAssignee
114
+ ]);
115
+ const handleOpenChange = (isOpen)=>{
116
+ if (!isOpen) {
117
+ setPageSize(PAGE_SIZE);
118
+ setSearch('');
119
+ }
120
+ };
121
+ const handleLoadMore = ()=>{
122
+ setPageSize(pageSize + PAGE_SIZE);
123
+ };
124
+ const handleInputChange = (e)=>{
125
+ setSearch(e.currentTarget.value);
126
+ setPageSize(PAGE_SIZE);
127
+ };
38
128
  const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();
39
129
  if (!collectionType || !model || !document?.documentId) {
40
130
  return null;
@@ -71,6 +161,7 @@ const AssigneeSelect = ({ isCompact })=>{
71
161
  };
72
162
  const isDisabled = !isLoadingPermissions && !isLoadingUsers && users.length === 0 || !document.documentId;
73
163
  const isLoading = isLoadingUsers || isLoadingPermissions || isMutating;
164
+ const hasMoreItems = page < pageCount;
74
165
  const assigneeLabel = formatMessage({
75
166
  id: 'content-manager.reviewWorkflows.assignee.label',
76
167
  defaultMessage: 'Assignee'
@@ -99,10 +190,14 @@ const AssigneeSelect = ({ isCompact })=>{
99
190
  value: currentAssignee ? currentAssignee.id.toString() : null,
100
191
  onChange: handleChange,
101
192
  onClear: ()=>handleChange(null),
193
+ onOpenChange: handleOpenChange,
194
+ onLoadMore: handleLoadMore,
195
+ hasMoreItems: hasMoreItems,
196
+ onInputChange: handleInputChange,
102
197
  placeholder: assigneePlaceholder,
103
198
  loading: isLoading || isLoadingPermissions || isMutating,
104
199
  size: "S",
105
- children: users.map((user)=>{
200
+ children: options.map((user)=>{
106
201
  return /*#__PURE__*/ jsx(ComboboxOption, {
107
202
  value: user.id.toString(),
108
203
  textValue: getDisplayName(user),
@@ -130,9 +225,13 @@ const AssigneeSelect = ({ isCompact })=>{
130
225
  value: currentAssignee ? currentAssignee.id.toString() : null,
131
226
  onChange: handleChange,
132
227
  onClear: ()=>handleChange(null),
228
+ onOpenChange: handleOpenChange,
229
+ onLoadMore: handleLoadMore,
230
+ hasMoreItems: hasMoreItems,
231
+ onInputChange: handleInputChange,
133
232
  placeholder: assigneePlaceholder,
134
233
  loading: isLoading || isLoadingPermissions || isMutating,
135
- children: users.map((user)=>{
234
+ children: options.map((user)=>{
136
235
  return /*#__PURE__*/ jsx(ComboboxOption, {
137
236
  value: user.id.toString(),
138
237
  textValue: getDisplayName(user),
@@ -1 +1 @@
1
- {"version":3,"file":"AssigneeSelect.mjs","sources":["../../../../../../../admin/src/routes/content-manager/model/id/components/AssigneeSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useRBAC,\n useAdminUsers,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport { Combobox, ComboboxOption, Field, VisuallyHidden } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../../../../modules/hooks';\nimport { useUpdateAssigneeMutation } from '../../../../../services/content-manager';\nimport { buildValidParams } from '../../../../../utils/api';\nimport { getDisplayName } from '../../../../../utils/users';\n\nimport { ASSIGNEE_ATTRIBUTE_NAME } from './constants';\n\nconst AssigneeSelect = ({ isCompact }: { isCompact?: boolean }) => {\n const {\n collectionType = '',\n id,\n slug: model = '',\n } = useParams<{ collectionType: string; slug: string; id: string }>();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const {\n allowedActions: { canRead },\n isLoading: isLoadingPermissions,\n } = useRBAC(permissions.settings?.users);\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const {\n data,\n isLoading: isLoadingUsers,\n isError,\n } = useAdminUsers(undefined, {\n skip: isLoadingPermissions || !canRead,\n });\n const { document } = unstable_useDocument(\n {\n collectionType,\n model,\n documentId: id,\n params,\n },\n {\n skip: !id && collectionType !== 'single-types',\n }\n );\n\n const users = data?.users || [];\n\n const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;\n\n const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();\n\n if (!collectionType || !model || !document?.documentId) {\n return null;\n }\n\n const handleChange = async (assigneeId: string | null) => {\n // a simple way to avoid erroneous updates\n if (currentAssignee?.id === assigneeId) {\n return;\n }\n\n const res = await updateAssignee({\n slug: collectionType,\n model,\n id: document.documentId,\n params,\n data: {\n id: assigneeId ? parseInt(assigneeId, 10) : null,\n },\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.notification.saved',\n defaultMessage: 'Assignee updated',\n }),\n });\n }\n\n if (isCompact && 'error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n };\n\n const isDisabled =\n (!isLoadingPermissions && !isLoadingUsers && users.length === 0) || !document.documentId;\n const isLoading = isLoadingUsers || isLoadingPermissions || isMutating;\n\n const assigneeLabel = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.label',\n defaultMessage: 'Assignee',\n });\n const assigneeClearLabel = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.clear',\n defaultMessage: 'Clear assignee',\n });\n const assigneePlaceholder = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.placeholder',\n defaultMessage: 'Select…',\n });\n\n if (isCompact) {\n return (\n <Field.Root name={ASSIGNEE_ATTRIBUTE_NAME} id={ASSIGNEE_ATTRIBUTE_NAME}>\n <VisuallyHidden>\n <Field.Label>{assigneeLabel}</Field.Label>\n </VisuallyHidden>\n <Combobox\n clearLabel={assigneeClearLabel}\n disabled={isDisabled}\n value={currentAssignee ? currentAssignee.id.toString() : null}\n onChange={handleChange}\n onClear={() => handleChange(null)}\n placeholder={assigneePlaceholder}\n loading={isLoading || isLoadingPermissions || isMutating}\n size=\"S\"\n >\n {users.map((user) => {\n return (\n <ComboboxOption\n key={user.id}\n value={user.id.toString()}\n textValue={getDisplayName(user)}\n >\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n </Field.Root>\n );\n }\n\n return (\n <Field.Root\n name={ASSIGNEE_ATTRIBUTE_NAME}\n id={ASSIGNEE_ATTRIBUTE_NAME}\n error={\n ((isError &&\n canRead &&\n formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.error',\n defaultMessage: 'An error occurred while fetching users',\n })) ||\n (error && formatAPIError(error))) ??\n undefined\n }\n >\n <Field.Label>{assigneeLabel}</Field.Label>\n <Combobox\n clearLabel={assigneeClearLabel}\n disabled={\n (!isLoadingPermissions && !isLoading && users.length === 0) || !document.documentId\n }\n value={currentAssignee ? currentAssignee.id.toString() : null}\n onChange={handleChange}\n onClear={() => handleChange(null)}\n placeholder={assigneePlaceholder}\n loading={isLoading || isLoadingPermissions || isMutating}\n >\n {users.map((user) => {\n return (\n <ComboboxOption\n key={user.id}\n value={user.id.toString()}\n textValue={getDisplayName(user)}\n >\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport { AssigneeSelect };\n"],"names":["AssigneeSelect","isCompact","collectionType","id","slug","model","useParams","permissions","useTypedSelector","state","admin_app","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","allowedActions","canRead","isLoading","isLoadingPermissions","useRBAC","settings","users","query","useQueryParams","params","React","useMemo","buildValidParams","data","isLoadingUsers","isError","useAdminUsers","undefined","skip","document","unstable_useDocument","documentId","currentAssignee","ASSIGNEE_ATTRIBUTE_NAME","updateAssignee","error","isMutating","useUpdateAssigneeMutation","handleChange","assigneeId","res","parseInt","type","message","defaultMessage","isDisabled","length","assigneeLabel","assigneeClearLabel","assigneePlaceholder","_jsxs","Field","Root","name","_jsx","VisuallyHidden","Label","Combobox","clearLabel","disabled","value","toString","onChange","onClear","placeholder","loading","size","map","user","ComboboxOption","textValue","getDisplayName","Error"],"mappings":";;;;;;;;;;;;;AAqBA,MAAMA,cAAAA,GAAiB,CAAC,EAAEC,SAAS,EAA2B,GAAA;IAC5D,MAAM,EACJC,cAAAA,GAAiB,EAAE,EACnBC,EAAE,EACFC,IAAAA,EAAMC,KAAAA,GAAQ,EAAE,EACjB,GAAGC,SAAAA,EAAAA;AACJ,IAAA,MAAMC,cAAcC,gBAAAA,CAAiB,CAACC,QAAUA,KAAAA,CAAMC,SAAS,CAACH,WAAW,CAAA;IAC3E,MAAM,EAAEI,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;IACpD,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EACJC,cAAAA,EAAgB,EAAEC,OAAO,EAAE,EAC3BC,SAAAA,EAAWC,oBAAoB,EAChC,GAAGC,OAAAA,CAAQf,WAAAA,CAAYgB,QAAQ,EAAEC,KAAAA,CAAAA;AAClC,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,SAASC,KAAAA,CAAMC,OAAO,CAAC,IAAMC,iBAAiBL,KAAAA,CAAAA,EAAQ;AAACA,QAAAA;AAAM,KAAA,CAAA;IACnE,MAAM,EACJM,IAAI,EACJX,SAAAA,EAAWY,cAAc,EACzBC,OAAO,EACR,GAAGC,aAAAA,CAAcC,SAAAA,EAAW;AAC3BC,QAAAA,IAAAA,EAAMf,wBAAwB,CAACF;AACjC,KAAA,CAAA;AACA,IAAA,MAAM,EAAEkB,QAAQ,EAAE,GAAGC,oBAAAA,CACnB;AACEpC,QAAAA,cAAAA;AACAG,QAAAA,KAAAA;QACAkC,UAAAA,EAAYpC,EAAAA;AACZwB,QAAAA;KACF,EACA;QACES,IAAAA,EAAM,CAACjC,MAAMD,cAAAA,KAAmB;AAClC,KAAA,CAAA;IAGF,MAAMsB,KAAAA,GAAQO,IAAAA,EAAMP,KAAAA,IAAS,EAAE;AAE/B,IAAA,MAAMgB,eAAAA,GAAkBH,QAAAA,GAAWA,QAAQ,CAACI,wBAAwB,GAAG,IAAA;IAEvE,MAAM,CAACC,gBAAgB,EAAEC,KAAK,EAAEvB,SAAAA,EAAWwB,UAAU,EAAE,CAAC,GAAGC,yBAAAA,EAAAA;AAE3D,IAAA,IAAI,CAAC3C,cAAAA,IAAkB,CAACG,KAAAA,IAAS,CAACgC,UAAUE,UAAAA,EAAY;QACtD,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMO,eAAe,OAAOC,UAAAA,GAAAA;;QAE1B,IAAIP,eAAAA,EAAiBrC,OAAO4C,UAAAA,EAAY;AACtC,YAAA;AACF,QAAA;QAEA,MAAMC,GAAAA,GAAM,MAAMN,cAAAA,CAAe;YAC/BtC,IAAAA,EAAMF,cAAAA;AACNG,YAAAA,KAAAA;AACAF,YAAAA,EAAAA,EAAIkC,SAASE,UAAU;AACvBZ,YAAAA,MAAAA;YACAI,IAAAA,EAAM;gBACJ5B,EAAAA,EAAI4C,UAAAA,GAAaE,QAAAA,CAASF,UAAAA,EAAY,EAAA,CAAA,GAAM;AAC9C;AACF,SAAA,CAAA;AAEA,QAAA,IAAI,UAAUC,GAAAA,EAAK;YACjBhC,kBAAAA,CAAmB;gBACjBkC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASxC,aAAAA,CAAc;oBACrBR,EAAAA,EAAI,6DAAA;oBACJiD,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;QAEA,IAAInD,SAAAA,IAAa,WAAW+C,GAAAA,EAAK;YAC/BhC,kBAAAA,CAAmB;gBACjBkC,IAAAA,EAAM,QAAA;gBACNC,OAAAA,EAASrC,cAAAA,CAAekC,IAAIL,KAAK;AACnC,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMU,UAAAA,GACH,CAAChC,oBAAAA,IAAwB,CAACW,cAAAA,IAAkBR,KAAAA,CAAM8B,MAAM,KAAK,CAAA,IAAM,CAACjB,QAAAA,CAASE,UAAU;IAC1F,MAAMnB,SAAAA,GAAYY,kBAAkBX,oBAAAA,IAAwBuB,UAAAA;AAE5D,IAAA,MAAMW,gBAAgB5C,aAAAA,CAAc;QAClCR,EAAAA,EAAI,gDAAA;QACJiD,cAAAA,EAAgB;AAClB,KAAA,CAAA;AACA,IAAA,MAAMI,qBAAqB7C,aAAAA,CAAc;QACvCR,EAAAA,EAAI,gDAAA;QACJiD,cAAAA,EAAgB;AAClB,KAAA,CAAA;AACA,IAAA,MAAMK,sBAAsB9C,aAAAA,CAAc;QACxCR,EAAAA,EAAI,sDAAA;QACJiD,cAAAA,EAAgB;AAClB,KAAA,CAAA;AAEA,IAAA,IAAInD,SAAAA,EAAW;QACb,qBACEyD,IAAA,CAACC,MAAMC,IAAI,EAAA;YAACC,IAAAA,EAAMpB,uBAAAA;YAAyBtC,EAAAA,EAAIsC,uBAAAA;;8BAC7CqB,GAAA,CAACC,cAAAA,EAAAA;4CACCD,GAAA,CAACH,MAAMK,KAAK,EAAA;AAAET,wBAAAA,QAAAA,EAAAA;;;8BAEhBO,GAAA,CAACG,QAAAA,EAAAA;oBACCC,UAAAA,EAAYV,kBAAAA;oBACZW,QAAAA,EAAUd,UAAAA;AACVe,oBAAAA,KAAAA,EAAO5B,eAAAA,GAAkBA,eAAAA,CAAgBrC,EAAE,CAACkE,QAAQ,EAAA,GAAK,IAAA;oBACzDC,QAAAA,EAAUxB,YAAAA;AACVyB,oBAAAA,OAAAA,EAAS,IAAMzB,YAAAA,CAAa,IAAA,CAAA;oBAC5B0B,WAAAA,EAAaf,mBAAAA;AACbgB,oBAAAA,OAAAA,EAASrD,aAAaC,oBAAAA,IAAwBuB,UAAAA;oBAC9C8B,IAAAA,EAAK,GAAA;8BAEJlD,KAAAA,CAAMmD,GAAG,CAAC,CAACC,IAAAA,GAAAA;AACV,wBAAA,qBACEd,GAAA,CAACe,cAAAA,EAAAA;4BAECT,KAAAA,EAAOQ,IAAAA,CAAKzE,EAAE,CAACkE,QAAQ,EAAA;AACvBS,4BAAAA,SAAAA,EAAWC,cAAAA,CAAeH,IAAAA,CAAAA;sCAEzBG,cAAAA,CAAeH,IAAAA;AAJXA,yBAAAA,EAAAA,IAAAA,CAAKzE,EAAE,CAAA;AAOlB,oBAAA,CAAA;;;;AAIR,IAAA;IAEA,qBACEuD,IAAA,CAACC,MAAMC,IAAI,EAAA;QACTC,IAAAA,EAAMpB,uBAAAA;QACNtC,EAAAA,EAAIsC,uBAAAA;AACJE,QAAAA,KAAAA,EACE,CAAC,OAACV,IACAd,WACAR,aAAAA,CAAc;YACZR,EAAAA,EAAI,gDAAA;YACJiD,cAAAA,EAAgB;SAClB,CAAA,IACCT,KAAAA,IAAS7B,cAAAA,CAAe6B,KAAAA,CAAM,KACjCR,SAAAA;;AAGF,0BAAA2B,GAAA,CAACH,MAAMK,KAAK,EAAA;AAAET,gBAAAA,QAAAA,EAAAA;;0BACdO,GAAA,CAACG,QAAAA,EAAAA;gBACCC,UAAAA,EAAYV,kBAAAA;gBACZW,QAAAA,EACG,CAAC9C,oBAAAA,IAAwB,CAACD,SAAAA,IAAaI,KAAAA,CAAM8B,MAAM,KAAK,CAAA,IAAM,CAACjB,QAAAA,CAASE,UAAU;AAErF6B,gBAAAA,KAAAA,EAAO5B,eAAAA,GAAkBA,eAAAA,CAAgBrC,EAAE,CAACkE,QAAQ,EAAA,GAAK,IAAA;gBACzDC,QAAAA,EAAUxB,YAAAA;AACVyB,gBAAAA,OAAAA,EAAS,IAAMzB,YAAAA,CAAa,IAAA,CAAA;gBAC5B0B,WAAAA,EAAaf,mBAAAA;AACbgB,gBAAAA,OAAAA,EAASrD,aAAaC,oBAAAA,IAAwBuB,UAAAA;0BAE7CpB,KAAAA,CAAMmD,GAAG,CAAC,CAACC,IAAAA,GAAAA;AACV,oBAAA,qBACEd,GAAA,CAACe,cAAAA,EAAAA;wBAECT,KAAAA,EAAOQ,IAAAA,CAAKzE,EAAE,CAACkE,QAAQ,EAAA;AACvBS,wBAAAA,SAAAA,EAAWC,cAAAA,CAAeH,IAAAA,CAAAA;kCAEzBG,cAAAA,CAAeH,IAAAA;AAJXA,qBAAAA,EAAAA,IAAAA,CAAKzE,EAAE,CAAA;AAOlB,gBAAA,CAAA;;AAEF,0BAAA2D,GAAA,CAACH,MAAMqB,KAAK,EAAA,EAAA;;;AAGlB;;;;"}
1
+ {"version":3,"file":"AssigneeSelect.mjs","sources":["../../../../../../../admin/src/routes/content-manager/model/id/components/AssigneeSelect.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useRBAC,\n useAdminUsers,\n useQueryParams,\n useDebounce,\n} from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport { Combobox, ComboboxOption, Field, VisuallyHidden } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { useTypedSelector } from '../../../../../modules/hooks';\nimport { useUpdateAssigneeMutation } from '../../../../../services/content-manager';\nimport { buildValidParams } from '../../../../../utils/api';\nimport { getDisplayName } from '../../../../../utils/users';\n\nimport { ASSIGNEE_ATTRIBUTE_NAME } from './constants';\n\nimport type { Modules } from '@strapi/types';\n\nconst PAGE_SIZE = 10;\n\ntype AdminUserFilters = Modules.EntityService.Params.Pick<'admin::user', 'filters'>['filters'];\n\nconst contains = (value: string) => ({ $containsi: value });\n\nconst AssigneeSelect = ({ isCompact }: { isCompact?: boolean }) => {\n const {\n collectionType = '',\n id,\n slug: model = '',\n } = useParams<{ collectionType: string; slug: string; id: string }>();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const {\n allowedActions: { canRead },\n isLoading: isLoadingPermissions,\n } = useRBAC(permissions.settings?.users);\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const [pageSize, setPageSize] = React.useState(PAGE_SIZE);\n const [search, setSearch] = React.useState('');\n const debouncedSearch = useDebounce(search, 300);\n const searchFilters = React.useMemo(() => {\n const value = debouncedSearch.trim();\n\n if (!value) {\n return undefined;\n }\n\n const [firstTerm, ...restTerms] = value.split(/\\s+/);\n const rest = restTerms.join(' ');\n const filters: AdminUserFilters = {\n $or: [\n { firstname: contains(value) },\n { lastname: contains(value) },\n { username: contains(value) },\n { email: contains(value) },\n ],\n };\n\n if (rest) {\n filters.$or = [\n ...(filters.$or ?? []),\n {\n $and: [{ firstname: contains(firstTerm) }, { lastname: contains(rest) }],\n },\n {\n $and: [{ firstname: contains(rest) }, { lastname: contains(firstTerm) }],\n },\n ];\n }\n\n return filters;\n }, [debouncedSearch]);\n\n const {\n data,\n isLoading: isLoadingUsers,\n isError,\n } = useAdminUsers(\n {\n pageSize,\n filters: searchFilters,\n },\n {\n skip: isLoadingPermissions || !canRead,\n }\n );\n const { document } = unstable_useDocument(\n {\n collectionType,\n model,\n documentId: id,\n params,\n },\n {\n skip: !id && collectionType !== 'single-types',\n }\n );\n\n const users = React.useMemo(() => data?.users ?? [], [data?.users]);\n const { pageCount = 1, page = 1 } = data?.pagination ?? {};\n\n const currentAssignee = document ? document[ASSIGNEE_ATTRIBUTE_NAME] : null;\n\n // Keep the currently assigned user in the options even when they fall outside\n // the loaded page or the active search — otherwise the Combobox loses its value.\n const options = React.useMemo(() => {\n if (!currentAssignee) return users;\n return users.some((u) => u.id === currentAssignee.id) ? users : [currentAssignee, ...users];\n }, [users, currentAssignee]);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(PAGE_SIZE);\n setSearch('');\n }\n };\n\n const handleLoadMore = () => {\n setPageSize(pageSize + PAGE_SIZE);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n setPageSize(PAGE_SIZE);\n };\n\n const [updateAssignee, { error, isLoading: isMutating }] = useUpdateAssigneeMutation();\n\n if (!collectionType || !model || !document?.documentId) {\n return null;\n }\n\n const handleChange = async (assigneeId: string | null) => {\n // a simple way to avoid erroneous updates\n if (currentAssignee?.id === assigneeId) {\n return;\n }\n\n const res = await updateAssignee({\n slug: collectionType,\n model,\n id: document.documentId,\n params,\n data: {\n id: assigneeId ? parseInt(assigneeId, 10) : null,\n },\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.notification.saved',\n defaultMessage: 'Assignee updated',\n }),\n });\n }\n\n if (isCompact && 'error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n };\n\n const isDisabled =\n (!isLoadingPermissions && !isLoadingUsers && users.length === 0) || !document.documentId;\n const isLoading = isLoadingUsers || isLoadingPermissions || isMutating;\n const hasMoreItems = page < pageCount;\n\n const assigneeLabel = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.label',\n defaultMessage: 'Assignee',\n });\n const assigneeClearLabel = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.clear',\n defaultMessage: 'Clear assignee',\n });\n const assigneePlaceholder = formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.placeholder',\n defaultMessage: 'Select…',\n });\n\n if (isCompact) {\n return (\n <Field.Root name={ASSIGNEE_ATTRIBUTE_NAME} id={ASSIGNEE_ATTRIBUTE_NAME}>\n <VisuallyHidden>\n <Field.Label>{assigneeLabel}</Field.Label>\n </VisuallyHidden>\n <Combobox\n clearLabel={assigneeClearLabel}\n disabled={isDisabled}\n value={currentAssignee ? currentAssignee.id.toString() : null}\n onChange={handleChange}\n onClear={() => handleChange(null)}\n onOpenChange={handleOpenChange}\n onLoadMore={handleLoadMore}\n hasMoreItems={hasMoreItems}\n onInputChange={handleInputChange}\n placeholder={assigneePlaceholder}\n loading={isLoading || isLoadingPermissions || isMutating}\n size=\"S\"\n >\n {options.map((user) => {\n return (\n <ComboboxOption\n key={user.id}\n value={user.id.toString()}\n textValue={getDisplayName(user)}\n >\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n </Field.Root>\n );\n }\n\n return (\n <Field.Root\n name={ASSIGNEE_ATTRIBUTE_NAME}\n id={ASSIGNEE_ATTRIBUTE_NAME}\n error={\n ((isError &&\n canRead &&\n formatMessage({\n id: 'content-manager.reviewWorkflows.assignee.error',\n defaultMessage: 'An error occurred while fetching users',\n })) ||\n (error && formatAPIError(error))) ??\n undefined\n }\n >\n <Field.Label>{assigneeLabel}</Field.Label>\n <Combobox\n clearLabel={assigneeClearLabel}\n disabled={\n (!isLoadingPermissions && !isLoading && users.length === 0) || !document.documentId\n }\n value={currentAssignee ? currentAssignee.id.toString() : null}\n onChange={handleChange}\n onClear={() => handleChange(null)}\n onOpenChange={handleOpenChange}\n onLoadMore={handleLoadMore}\n hasMoreItems={hasMoreItems}\n onInputChange={handleInputChange}\n placeholder={assigneePlaceholder}\n loading={isLoading || isLoadingPermissions || isMutating}\n >\n {options.map((user) => {\n return (\n <ComboboxOption\n key={user.id}\n value={user.id.toString()}\n textValue={getDisplayName(user)}\n >\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport { AssigneeSelect };\n"],"names":["PAGE_SIZE","contains","value","$containsi","AssigneeSelect","isCompact","collectionType","id","slug","model","useParams","permissions","useTypedSelector","state","admin_app","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","allowedActions","canRead","isLoading","isLoadingPermissions","useRBAC","settings","users","query","useQueryParams","params","React","useMemo","buildValidParams","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","searchFilters","trim","undefined","firstTerm","restTerms","split","rest","join","filters","$or","firstname","lastname","username","email","$and","data","isLoadingUsers","isError","useAdminUsers","skip","document","unstable_useDocument","documentId","pageCount","page","pagination","currentAssignee","ASSIGNEE_ATTRIBUTE_NAME","options","some","u","handleOpenChange","isOpen","handleLoadMore","handleInputChange","e","currentTarget","updateAssignee","error","isMutating","useUpdateAssigneeMutation","handleChange","assigneeId","res","parseInt","type","message","defaultMessage","isDisabled","length","hasMoreItems","assigneeLabel","assigneeClearLabel","assigneePlaceholder","_jsxs","Field","Root","name","_jsx","VisuallyHidden","Label","Combobox","clearLabel","disabled","toString","onChange","onClear","onOpenChange","onLoadMore","onInputChange","placeholder","loading","size","map","user","ComboboxOption","textValue","getDisplayName","Error"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/review-workflows",
3
- "version": "5.44.0",
3
+ "version": "5.45.0",
4
4
  "description": "Review workflows for your content",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -64,7 +64,7 @@
64
64
  "@reduxjs/toolkit": "1.9.7",
65
65
  "@strapi/design-system": "2.2.0",
66
66
  "@strapi/icons": "2.2.0",
67
- "@strapi/utils": "5.44.0",
67
+ "@strapi/utils": "5.45.0",
68
68
  "fractional-indexing": "3.2.0",
69
69
  "react-dnd": "16.0.1",
70
70
  "react-dnd-html5-backend": "16.0.1",
@@ -74,9 +74,9 @@
74
74
  "yup": "0.32.9"
75
75
  },
76
76
  "devDependencies": {
77
- "@strapi/admin": "5.44.0",
78
- "@strapi/content-manager": "5.44.0",
79
- "@strapi/types": "5.44.0",
77
+ "@strapi/admin": "5.45.0",
78
+ "@strapi/content-manager": "5.45.0",
79
+ "@strapi/types": "5.45.0",
80
80
  "@testing-library/react": "16.3.0",
81
81
  "msw": "1.3.0",
82
82
  "react": "18.3.1",