@strapi/review-workflows 5.45.1 → 5.46.1

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 (89) hide show
  1. package/dist/admin/index.js +6 -0
  2. package/dist/admin/index.js.map +1 -1
  3. package/dist/admin/index.mjs +7 -1
  4. package/dist/admin/index.mjs.map +1 -1
  5. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.js +83 -0
  6. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.js.map +1 -0
  7. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.mjs +62 -0
  8. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.mjs.map +1 -0
  9. package/dist/admin/routes/content-manager/model/components/StageFilter.js +70 -0
  10. package/dist/admin/routes/content-manager/model/components/StageFilter.js.map +1 -0
  11. package/dist/admin/routes/content-manager/model/components/StageFilter.mjs +68 -0
  12. package/dist/admin/routes/content-manager/model/components/StageFilter.mjs.map +1 -0
  13. package/dist/admin/routes/content-manager/model/constants.js +63 -9
  14. package/dist/admin/routes/content-manager/model/constants.js.map +1 -1
  15. package/dist/admin/routes/content-manager/model/constants.mjs +63 -10
  16. package/dist/admin/routes/content-manager/model/constants.mjs.map +1 -1
  17. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js +5 -5
  18. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js.map +1 -1
  19. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs +5 -5
  20. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs.map +1 -1
  21. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js +45 -18
  22. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js.map +1 -1
  23. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs +45 -18
  24. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs.map +1 -1
  25. package/dist/admin/routes/settings/components/Stages.js +1 -1
  26. package/dist/admin/routes/settings/components/Stages.js.map +1 -1
  27. package/dist/admin/routes/settings/components/Stages.mjs +1 -1
  28. package/dist/admin/routes/settings/components/Stages.mjs.map +1 -1
  29. package/dist/admin/routes/settings/id.js +4 -4
  30. package/dist/admin/routes/settings/id.js.map +1 -1
  31. package/dist/admin/routes/settings/id.mjs +4 -4
  32. package/dist/admin/routes/settings/id.mjs.map +1 -1
  33. package/dist/admin/routes/settings/index.js +2 -2
  34. package/dist/admin/routes/settings/index.js.map +1 -1
  35. package/dist/admin/routes/settings/index.mjs +2 -2
  36. package/dist/admin/routes/settings/index.mjs.map +1 -1
  37. package/dist/admin/src/utils/cm-hooks.d.ts +42 -2
  38. package/dist/admin/translations/cs.json.js +2 -1
  39. package/dist/admin/translations/cs.json.js.map +1 -1
  40. package/dist/admin/translations/cs.json.mjs +2 -1
  41. package/dist/admin/translations/cs.json.mjs.map +1 -1
  42. package/dist/admin/translations/de.json.js +8 -0
  43. package/dist/admin/translations/de.json.js.map +1 -0
  44. package/dist/admin/translations/de.json.mjs +6 -0
  45. package/dist/admin/translations/de.json.mjs.map +1 -0
  46. package/dist/admin/translations/en.json.js +20 -1
  47. package/dist/admin/translations/en.json.js.map +1 -1
  48. package/dist/admin/translations/en.json.mjs +20 -1
  49. package/dist/admin/translations/en.json.mjs.map +1 -1
  50. package/dist/admin/translations/es.json.js +2 -1
  51. package/dist/admin/translations/es.json.js.map +1 -1
  52. package/dist/admin/translations/es.json.mjs +2 -1
  53. package/dist/admin/translations/es.json.mjs.map +1 -1
  54. package/dist/admin/translations/fr.json.js +8 -0
  55. package/dist/admin/translations/fr.json.js.map +1 -0
  56. package/dist/admin/translations/fr.json.mjs +6 -0
  57. package/dist/admin/translations/fr.json.mjs.map +1 -0
  58. package/dist/admin/translations/nl.json.js +2 -1
  59. package/dist/admin/translations/nl.json.js.map +1 -1
  60. package/dist/admin/translations/nl.json.mjs +2 -1
  61. package/dist/admin/translations/nl.json.mjs.map +1 -1
  62. package/dist/admin/translations/pl.json.js +8 -0
  63. package/dist/admin/translations/pl.json.js.map +1 -0
  64. package/dist/admin/translations/pl.json.mjs +6 -0
  65. package/dist/admin/translations/pl.json.mjs.map +1 -0
  66. package/dist/admin/translations/ru.json.js +8 -0
  67. package/dist/admin/translations/ru.json.js.map +1 -0
  68. package/dist/admin/translations/ru.json.mjs +6 -0
  69. package/dist/admin/translations/ru.json.mjs.map +1 -0
  70. package/dist/admin/translations/uk.json.js +2 -1
  71. package/dist/admin/translations/uk.json.js.map +1 -1
  72. package/dist/admin/translations/uk.json.mjs +2 -1
  73. package/dist/admin/translations/uk.json.mjs.map +1 -1
  74. package/dist/admin/translations/zh-Hans.json.js +8 -0
  75. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  76. package/dist/admin/translations/zh-Hans.json.mjs +6 -0
  77. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  78. package/dist/admin/utils/cm-hooks.js +16 -0
  79. package/dist/admin/utils/cm-hooks.js.map +1 -1
  80. package/dist/admin/utils/cm-hooks.mjs +17 -2
  81. package/dist/admin/utils/cm-hooks.mjs.map +1 -1
  82. package/dist/server/controllers/stages.js +24 -14
  83. package/dist/server/controllers/stages.js.map +1 -1
  84. package/dist/server/controllers/stages.mjs +24 -14
  85. package/dist/server/controllers/stages.mjs.map +1 -1
  86. package/dist/server/src/controllers/stages.d.ts.map +1 -1
  87. package/dist/shared/contracts/review-workflows.d.ts +2 -0
  88. package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
  89. package/package.json +7 -7
@@ -1,11 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import 'react';
3
- import '@strapi/admin/strapi-admin';
4
- import '@strapi/design-system';
5
- import 'react-intl';
6
- import 'react-router-dom';
7
- import '../../../utils/colors.mjs';
8
- import '../../../services/settings.mjs';
2
+ import { AssigneeFilter } from './components/AssigneeFilter.mjs';
3
+ import { StageFilter } from './components/StageFilter.mjs';
9
4
  import { StageColumn, AssigneeColumn } from './components/TableColumns.mjs';
10
5
  import { STAGE_ATTRIBUTE_NAME, ASSIGNEE_ATTRIBUTE_NAME } from './id/components/constants.mjs';
11
6
 
@@ -19,7 +14,7 @@ const REVIEW_WORKFLOW_COLUMNS = [
19
14
  },
20
15
  label: {
21
16
  id: 'review-workflows.containers.list.table-headers.reviewWorkflows.stage',
22
- defaultMessage: 'Review stage'
17
+ defaultMessage: 'review stage'
23
18
  },
24
19
  searchable: false,
25
20
  sortable: true,
@@ -40,7 +35,7 @@ const REVIEW_WORKFLOW_COLUMNS = [
40
35
  },
41
36
  label: {
42
37
  id: 'review-workflows.containers.list.table-headers.reviewWorkflows.assignee',
43
- defaultMessage: 'Assignee'
38
+ defaultMessage: 'assignee'
44
39
  },
45
40
  searchable: false,
46
41
  sortable: true,
@@ -53,6 +48,64 @@ const REVIEW_WORKFLOW_COLUMNS = [
53
48
  })
54
49
  }
55
50
  ];
51
+ const REVIEW_WORKFLOW_FILTERS = [
52
+ {
53
+ mainField: {
54
+ name: 'name',
55
+ type: 'string'
56
+ },
57
+ input: StageFilter,
58
+ label: {
59
+ id: 'review-workflows.containers.list.table-headers.reviewWorkflows.stage',
60
+ defaultMessage: 'review stage'
61
+ },
62
+ name: 'strapi_stage',
63
+ type: 'relation'
64
+ },
65
+ {
66
+ type: 'relation',
67
+ mainField: {
68
+ name: 'id',
69
+ type: 'integer'
70
+ },
71
+ input: AssigneeFilter,
72
+ operators: [
73
+ {
74
+ label: {
75
+ id: 'components.FilterOptions.FILTER_TYPES.$eq',
76
+ defaultMessage: 'is'
77
+ },
78
+ value: '$eq'
79
+ },
80
+ {
81
+ label: {
82
+ id: 'components.FilterOptions.FILTER_TYPES.$ne',
83
+ defaultMessage: 'is not'
84
+ },
85
+ value: '$ne'
86
+ },
87
+ {
88
+ label: {
89
+ id: 'components.FilterOptions.FILTER_TYPES.$null',
90
+ defaultMessage: 'is null'
91
+ },
92
+ value: '$null'
93
+ },
94
+ {
95
+ label: {
96
+ id: 'components.FilterOptions.FILTER_TYPES.$notNull',
97
+ defaultMessage: 'is not null'
98
+ },
99
+ value: '$notNull'
100
+ }
101
+ ],
102
+ label: {
103
+ id: 'review-workflows.containers.list.table-headers.reviewWorkflows.assignee',
104
+ defaultMessage: 'assignee'
105
+ },
106
+ name: 'strapi_assignee'
107
+ }
108
+ ];
56
109
 
57
- export { REVIEW_WORKFLOW_COLUMNS };
110
+ export { REVIEW_WORKFLOW_COLUMNS, REVIEW_WORKFLOW_FILTERS };
58
111
  //# sourceMappingURL=constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../../admin/src/routes/content-manager/model/constants.tsx"],"sourcesContent":["import { AssigneeFilter } from './components/AssigneeFilter';\nimport { StageFilter } from './components/StageFilter';\nimport { AssigneeColumn, StageColumn } from './components/TableColumns';\nimport { ASSIGNEE_ATTRIBUTE_NAME, STAGE_ATTRIBUTE_NAME } from './id/components/constants';\n\nimport type { Filters } from '@strapi/admin/strapi-admin';\nimport type { ListFieldLayout } from '@strapi/content-manager/strapi-admin';\nimport type { MessageDescriptor } from 'react-intl';\n\nexport const REVIEW_WORKFLOW_COLUMNS = [\n {\n name: STAGE_ATTRIBUTE_NAME,\n attribute: {\n type: 'relation',\n relation: 'oneToMany',\n target: 'admin::review-workflow-stage',\n },\n label: {\n id: 'review-workflows.containers.list.table-headers.reviewWorkflows.stage',\n defaultMessage: 'Review stage',\n },\n searchable: false,\n sortable: true,\n mainField: {\n name: 'name',\n type: 'string',\n },\n cellFormatter: (props) => <StageColumn {...props} />,\n },\n {\n name: ASSIGNEE_ATTRIBUTE_NAME,\n attribute: {\n type: 'relation',\n target: 'admin::user',\n relation: 'oneToMany',\n },\n label: {\n id: 'review-workflows.containers.list.table-headers.reviewWorkflows.assignee',\n defaultMessage: 'Assignee',\n },\n searchable: false,\n sortable: true,\n mainField: {\n name: 'firstname',\n type: 'string',\n },\n cellFormatter: (props) => <AssigneeColumn {...props} />,\n },\n] satisfies Array<Omit<ListFieldLayout, 'label'> & { label: MessageDescriptor }>;\n\nexport const REVIEW_WORKFLOW_FILTERS = [\n {\n mainField: {\n name: 'name',\n type: 'string',\n },\n input: StageFilter,\n label: {\n id: 'review-workflows.containers.list.table-headers.reviewWorkflows.stage',\n defaultMessage: 'Review stage',\n },\n name: 'strapi_stage',\n type: 'relation',\n },\n\n {\n type: 'relation',\n mainField: {\n name: 'id',\n type: 'integer',\n },\n input: AssigneeFilter,\n operators: [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n },\n value: '$eq',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n },\n value: '$ne',\n },\n ],\n label: {\n id: 'review-workflows.containers.list.table-headers.reviewWorkflows.assignee.label',\n defaultMessage: 'Assignee',\n },\n name: 'strapi_assignee',\n },\n] satisfies Array<\n Omit<Filters.Filter, 'label' | 'operators'> & {\n label: MessageDescriptor;\n operators?: Array<{ value: string; label: MessageDescriptor }>;\n }\n>;\n"],"names":["REVIEW_WORKFLOW_COLUMNS","name","STAGE_ATTRIBUTE_NAME","attribute","type","relation","target","label","id","defaultMessage","searchable","sortable","mainField","cellFormatter","props","_jsx","StageColumn","ASSIGNEE_ATTRIBUTE_NAME","AssigneeColumn"],"mappings":";;;;;;;;;;;MASaA,uBAAAA,GAA0B;AACrC,IAAA;QACEC,IAAAA,EAAMC,oBAAAA;QACNC,SAAAA,EAAW;YACTC,IAAAA,EAAM,UAAA;YACNC,QAAAA,EAAU,WAAA;YACVC,MAAAA,EAAQ;AACV,SAAA;QACAC,KAAAA,EAAO;YACLC,EAAAA,EAAI,sEAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,UAAAA,EAAY,KAAA;QACZC,QAAAA,EAAU,IAAA;QACVC,SAAAA,EAAW;YACTX,IAAAA,EAAM,MAAA;YACNG,IAAAA,EAAM;AACR,SAAA;QACAS,aAAAA,EAAe,CAACC,sBAAUC,GAAA,CAACC,WAAAA,EAAAA;AAAa,gBAAA,GAAGF;;AAC7C,KAAA;AACA,IAAA;QACEb,IAAAA,EAAMgB,uBAAAA;QACNd,SAAAA,EAAW;YACTC,IAAAA,EAAM,UAAA;YACNE,MAAAA,EAAQ,aAAA;YACRD,QAAAA,EAAU;AACZ,SAAA;QACAE,KAAAA,EAAO;YACLC,EAAAA,EAAI,yEAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,UAAAA,EAAY,KAAA;QACZC,QAAAA,EAAU,IAAA;QACVC,SAAAA,EAAW;YACTX,IAAAA,EAAM,WAAA;YACNG,IAAAA,EAAM;AACR,SAAA;QACAS,aAAAA,EAAe,CAACC,sBAAUC,GAAA,CAACG,cAAAA,EAAAA;AAAgB,gBAAA,GAAGJ;;AAChD;;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../../admin/src/routes/content-manager/model/constants.tsx"],"sourcesContent":["import { AssigneeFilter } from './components/AssigneeFilter';\nimport { StageFilter } from './components/StageFilter';\nimport { AssigneeColumn, StageColumn } from './components/TableColumns';\nimport { ASSIGNEE_ATTRIBUTE_NAME, STAGE_ATTRIBUTE_NAME } from './id/components/constants';\n\nimport type { Filters } from '@strapi/admin/strapi-admin';\nimport type { ListFieldLayout } from '@strapi/content-manager/strapi-admin';\nimport type { MessageDescriptor } from 'react-intl';\n\nexport const REVIEW_WORKFLOW_COLUMNS = [\n {\n name: STAGE_ATTRIBUTE_NAME,\n attribute: {\n type: 'relation',\n relation: 'oneToMany',\n target: 'admin::review-workflow-stage',\n },\n label: {\n id: 'review-workflows.containers.list.table-headers.reviewWorkflows.stage',\n defaultMessage: 'review stage',\n },\n searchable: false,\n sortable: true,\n mainField: {\n name: 'name',\n type: 'string',\n },\n cellFormatter: (props) => <StageColumn {...props} />,\n },\n {\n name: ASSIGNEE_ATTRIBUTE_NAME,\n attribute: {\n type: 'relation',\n target: 'admin::user',\n relation: 'oneToMany',\n },\n label: {\n id: 'review-workflows.containers.list.table-headers.reviewWorkflows.assignee',\n defaultMessage: 'assignee',\n },\n searchable: false,\n sortable: true,\n mainField: {\n name: 'firstname',\n type: 'string',\n },\n cellFormatter: (props) => <AssigneeColumn {...props} />,\n },\n] satisfies Array<Omit<ListFieldLayout, 'label'> & { label: MessageDescriptor }>;\n\nexport const REVIEW_WORKFLOW_FILTERS = [\n {\n mainField: {\n name: 'name',\n type: 'string',\n },\n input: StageFilter,\n label: {\n id: 'review-workflows.containers.list.table-headers.reviewWorkflows.stage',\n defaultMessage: 'review stage',\n },\n name: 'strapi_stage',\n type: 'relation',\n },\n\n {\n type: 'relation',\n mainField: {\n name: 'id',\n type: 'integer',\n },\n input: AssigneeFilter,\n operators: [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n },\n value: '$eq',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n },\n value: '$ne',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$null',\n defaultMessage: 'is null',\n },\n value: '$null',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$notNull',\n defaultMessage: 'is not null',\n },\n value: '$notNull',\n },\n ],\n label: {\n id: 'review-workflows.containers.list.table-headers.reviewWorkflows.assignee',\n defaultMessage: 'assignee',\n },\n name: 'strapi_assignee',\n },\n] satisfies Array<\n Omit<Filters.Filter, 'label' | 'operators'> & {\n label: MessageDescriptor;\n operators?: Array<{ value: string; label: MessageDescriptor }>;\n }\n>;\n"],"names":["REVIEW_WORKFLOW_COLUMNS","name","STAGE_ATTRIBUTE_NAME","attribute","type","relation","target","label","id","defaultMessage","searchable","sortable","mainField","cellFormatter","props","_jsx","StageColumn","ASSIGNEE_ATTRIBUTE_NAME","AssigneeColumn","REVIEW_WORKFLOW_FILTERS","input","StageFilter","AssigneeFilter","operators","value"],"mappings":";;;;;;MASaA,uBAAAA,GAA0B;AACrC,IAAA;QACEC,IAAAA,EAAMC,oBAAAA;QACNC,SAAAA,EAAW;YACTC,IAAAA,EAAM,UAAA;YACNC,QAAAA,EAAU,WAAA;YACVC,MAAAA,EAAQ;AACV,SAAA;QACAC,KAAAA,EAAO;YACLC,EAAAA,EAAI,sEAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,UAAAA,EAAY,KAAA;QACZC,QAAAA,EAAU,IAAA;QACVC,SAAAA,EAAW;YACTX,IAAAA,EAAM,MAAA;YACNG,IAAAA,EAAM;AACR,SAAA;QACAS,aAAAA,EAAe,CAACC,sBAAUC,GAAA,CAACC,WAAAA,EAAAA;AAAa,gBAAA,GAAGF;;AAC7C,KAAA;AACA,IAAA;QACEb,IAAAA,EAAMgB,uBAAAA;QACNd,SAAAA,EAAW;YACTC,IAAAA,EAAM,UAAA;YACNE,MAAAA,EAAQ,aAAA;YACRD,QAAAA,EAAU;AACZ,SAAA;QACAE,KAAAA,EAAO;YACLC,EAAAA,EAAI,yEAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,UAAAA,EAAY,KAAA;QACZC,QAAAA,EAAU,IAAA;QACVC,SAAAA,EAAW;YACTX,IAAAA,EAAM,WAAA;YACNG,IAAAA,EAAM;AACR,SAAA;QACAS,aAAAA,EAAe,CAACC,sBAAUC,GAAA,CAACG,cAAAA,EAAAA;AAAgB,gBAAA,GAAGJ;;AAChD;;MAGWK,uBAAAA,GAA0B;AACrC,IAAA;QACEP,SAAAA,EAAW;YACTX,IAAAA,EAAM,MAAA;YACNG,IAAAA,EAAM;AACR,SAAA;QACAgB,KAAAA,EAAOC,WAAAA;QACPd,KAAAA,EAAO;YACLC,EAAAA,EAAI,sEAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAR,IAAAA,EAAM,cAAA;QACNG,IAAAA,EAAM;AACR,KAAA;AAEA,IAAA;QACEA,IAAAA,EAAM,UAAA;QACNQ,SAAAA,EAAW;YACTX,IAAAA,EAAM,IAAA;YACNG,IAAAA,EAAM;AACR,SAAA;QACAgB,KAAAA,EAAOE,cAAAA;QACPC,SAAAA,EAAW;AACT,YAAA;gBACEhB,KAAAA,EAAO;oBACLC,EAAAA,EAAI,2CAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAe,KAAAA,EAAO;AACT,aAAA;AACA,YAAA;gBACEjB,KAAAA,EAAO;oBACLC,EAAAA,EAAI,2CAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAe,KAAAA,EAAO;AACT,aAAA;AACA,YAAA;gBACEjB,KAAAA,EAAO;oBACLC,EAAAA,EAAI,6CAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAe,KAAAA,EAAO;AACT,aAAA;AACA,YAAA;gBACEjB,KAAAA,EAAO;oBACLC,EAAAA,EAAI,gDAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAe,KAAAA,EAAO;AACT;AACD,SAAA;QACDjB,KAAAA,EAAO;YACLC,EAAAA,EAAI,yEAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAR,IAAAA,EAAM;AACR;;;;;"}
@@ -168,7 +168,7 @@ const AssigneeSelect = ({ isCompact })=>{
168
168
  toggleNotification({
169
169
  type: 'success',
170
170
  message: formatMessage({
171
- id: 'content-manager.reviewWorkflows.assignee.notification.saved',
171
+ id: 'review-workflows.assignee.notification.saved',
172
172
  defaultMessage: 'Assignee updated'
173
173
  })
174
174
  });
@@ -184,15 +184,15 @@ const AssigneeSelect = ({ isCompact })=>{
184
184
  const isLoading = isLoadingUsers || isLoadingPermissions || isMutating;
185
185
  const hasMoreItems = page < pageCount;
186
186
  const assigneeLabel = formatMessage({
187
- id: 'content-manager.reviewWorkflows.assignee.label',
187
+ id: 'review-workflows.assignee.label',
188
188
  defaultMessage: 'Assignee'
189
189
  });
190
190
  const assigneeClearLabel = formatMessage({
191
- id: 'content-manager.reviewWorkflows.assignee.clear',
191
+ id: 'review-workflows.assignee.clear',
192
192
  defaultMessage: 'Clear assignee'
193
193
  });
194
194
  const assigneePlaceholder = formatMessage({
195
- id: 'content-manager.reviewWorkflows.assignee.placeholder',
195
+ id: 'review-workflows.assignee.placeholder',
196
196
  defaultMessage: 'Select…'
197
197
  });
198
198
  if (isCompact) {
@@ -233,7 +233,7 @@ const AssigneeSelect = ({ isCompact })=>{
233
233
  name: constants.ASSIGNEE_ATTRIBUTE_NAME,
234
234
  id: constants.ASSIGNEE_ATTRIBUTE_NAME,
235
235
  error: (isError && canRead && formatMessage({
236
- id: 'content-manager.reviewWorkflows.assignee.error',
236
+ id: 'review-workflows.assignee.error',
237
237
  defaultMessage: 'An error occurred while fetching users'
238
238
  }) || error && formatAPIError(error)) ?? undefined,
239
239
  children: [
@@ -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 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAMA,SAAAA,GAAY,EAAA;AAIlB,MAAMC,QAAAA,GAAW,CAACC,KAAAA,IAAmB;QAAEC,UAAAA,EAAYD;KAAM,CAAA;AAEzD,MAAME,cAAAA,GAAiB,CAAC,EAAEC,SAAS,EAA2B,GAAA;IAC5D,MAAM,EACJC,cAAAA,GAAiB,EAAE,EACnBC,EAAE,EACFC,IAAAA,EAAMC,KAAAA,GAAQ,EAAE,EACjB,GAAGC,wBAAAA,EAAAA;AACJ,IAAA,MAAMC,cAAcC,sBAAAA,CAAiB,CAACC,QAAUA,KAAAA,CAAMC,SAAS,CAACH,WAAW,CAAA;IAC3E,MAAM,EAAEI,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,8BAAAA,EAAAA;IACpD,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,EACJC,cAAAA,EAAgB,EAAEC,OAAO,EAAE,EAC3BC,SAAAA,EAAWC,oBAAoB,EAChC,GAAGC,mBAAAA,CAAQf,WAAAA,CAAYgB,QAAQ,EAAEC,KAAAA,CAAAA;AAClC,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AACpB,IAAA,MAAMC,SAASC,gBAAAA,CAAMC,OAAO,CAAC,IAAMC,qBAAiBL,KAAAA,CAAAA,EAAQ;AAACA,QAAAA;AAAM,KAAA,CAAA;AAEnE,IAAA,MAAM,CAACM,QAAAA,EAAUC,WAAAA,CAAY,GAAGJ,gBAAAA,CAAMK,QAAQ,CAACrC,SAAAA,CAAAA;AAC/C,IAAA,MAAM,CAACsC,MAAAA,EAAQC,SAAAA,CAAU,GAAGP,gBAAAA,CAAMK,QAAQ,CAAC,EAAA,CAAA;IAC3C,MAAMG,eAAAA,GAAkBC,wBAAYH,MAAAA,EAAQ,GAAA,CAAA;IAC5C,MAAMI,aAAAA,GAAgBV,gBAAAA,CAAMC,OAAO,CAAC,IAAA;QAClC,MAAM/B,KAAAA,GAAQsC,gBAAgBG,IAAI,EAAA;AAElC,QAAA,IAAI,CAACzC,KAAAA,EAAO;YACV,OAAO0C,SAAAA;AACT,QAAA;AAEA,QAAA,MAAM,CAACC,SAAAA,EAAW,GAAGC,UAAU,GAAG5C,KAAAA,CAAM6C,KAAK,CAAC,KAAA,CAAA;QAC9C,MAAMC,IAAAA,GAAOF,SAAAA,CAAUG,IAAI,CAAC,GAAA,CAAA;AAC5B,QAAA,MAAMC,OAAAA,GAA4B;YAChCC,GAAAA,EAAK;AACH,gBAAA;AAAEC,oBAAAA,SAAAA,EAAWnD,QAAAA,CAASC,KAAAA;AAAO,iBAAA;AAC7B,gBAAA;AAAEmD,oBAAAA,QAAAA,EAAUpD,QAAAA,CAASC,KAAAA;AAAO,iBAAA;AAC5B,gBAAA;AAAEoD,oBAAAA,QAAAA,EAAUrD,QAAAA,CAASC,KAAAA;AAAO,iBAAA;AAC5B,gBAAA;AAAEqD,oBAAAA,KAAAA,EAAOtD,QAAAA,CAASC,KAAAA;AAAO;AAC1B;AACH,SAAA;AAEA,QAAA,IAAI8C,IAAAA,EAAM;AACRE,YAAAA,OAAAA,CAAQC,GAAG,GAAG;mBACRD,OAAAA,CAAQC,GAAG,IAAI,EAAE;AACrB,gBAAA;oBACEK,IAAAA,EAAM;AAAC,wBAAA;AAAEJ,4BAAAA,SAAAA,EAAWnD,QAAAA,CAAS4C,SAAAA;AAAW,yBAAA;AAAG,wBAAA;AAAEQ,4BAAAA,QAAAA,EAAUpD,QAAAA,CAAS+C,IAAAA;AAAM;AAAE;AAC1E,iBAAA;AACA,gBAAA;oBACEQ,IAAAA,EAAM;AAAC,wBAAA;AAAEJ,4BAAAA,SAAAA,EAAWnD,QAAAA,CAAS+C,IAAAA;AAAM,yBAAA;AAAG,wBAAA;AAAEK,4BAAAA,QAAAA,EAAUpD,QAAAA,CAAS4C,SAAAA;AAAW;AAAE;AAC1E;AACD,aAAA;AACH,QAAA;QAEA,OAAOK,OAAAA;IACT,CAAA,EAAG;AAACV,QAAAA;AAAgB,KAAA,CAAA;IAEpB,MAAM,EACJiB,IAAI,EACJjC,SAAAA,EAAWkC,cAAc,EACzBC,OAAO,EACR,GAAGC,yBAAAA,CACF;AACEzB,QAAAA,QAAAA;QACAe,OAAAA,EAASR;KACX,EACA;AACEmB,QAAAA,IAAAA,EAAMpC,wBAAwB,CAACF;AACjC,KAAA,CAAA;AAEF,IAAA,MAAM,EAAEuC,QAAQ,EAAE,GAAGC,kCAAAA,CACnB;AACEzD,QAAAA,cAAAA;AACAG,QAAAA,KAAAA;QACAuD,UAAAA,EAAYzD,EAAAA;AACZwB,QAAAA;KACF,EACA;QACE8B,IAAAA,EAAM,CAACtD,MAAMD,cAAAA,KAAmB;AAClC,KAAA,CAAA;IAGF,MAAMsB,OAAAA,GAAQI,iBAAMC,OAAO,CAAC,IAAMwB,IAAAA,EAAM7B,KAAAA,IAAS,EAAE,EAAE;QAAC6B,IAAAA,EAAM7B;AAAM,KAAA,CAAA;IAClE,MAAM,EAAEqC,SAAAA,GAAY,CAAC,EAAEC,IAAAA,GAAO,CAAC,EAAE,GAAGT,IAAAA,EAAMU,UAAAA,IAAc,EAAC;AAEzD,IAAA,MAAMC,eAAAA,GAAkBN,QAAAA,GAAWA,QAAQ,CAACO,kCAAwB,GAAG,IAAA;;;IAIvE,MAAMC,OAAAA,GAAUtC,gBAAAA,CAAMC,OAAO,CAAC,IAAA;QAC5B,IAAI,CAACmC,iBAAiB,OAAOxC,OAAAA;QAC7B,OAAOA,OAAAA,CAAM2C,IAAI,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEjE,EAAE,KAAK6D,eAAAA,CAAgB7D,EAAE,CAAA,GAAIqB,OAAAA,GAAQ;AAACwC,YAAAA,eAAAA;AAAoBxC,YAAAA,GAAAA;AAAM,SAAA;IAC7F,CAAA,EAAG;AAACA,QAAAA,OAAAA;AAAOwC,QAAAA;AAAgB,KAAA,CAAA;AAE3B,IAAA,MAAMK,mBAAmB,CAACC,MAAAA,GAAAA;AACxB,QAAA,IAAI,CAACA,MAAAA,EAAQ;YACXtC,WAAAA,CAAYpC,SAAAA,CAAAA;YACZuC,SAAAA,CAAU,EAAA,CAAA;AACZ,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMoC,cAAAA,GAAiB,IAAA;AACrBvC,QAAAA,WAAAA,CAAYD,QAAAA,GAAWnC,SAAAA,CAAAA;AACzB,IAAA,CAAA;AAEA,IAAA,MAAM4E,oBAAoB,CAACC,CAAAA,GAAAA;QACzBtC,SAAAA,CAAUsC,CAAAA,CAAEC,aAAa,CAAC5E,KAAK,CAAA;QAC/BkC,WAAAA,CAAYpC,SAAAA,CAAAA;AACd,IAAA,CAAA;IAEA,MAAM,CAAC+E,gBAAgB,EAAEC,KAAK,EAAExD,SAAAA,EAAWyD,UAAU,EAAE,CAAC,GAAGC,wCAAAA,EAAAA;AAE3D,IAAA,IAAI,CAAC5E,cAAAA,IAAkB,CAACG,KAAAA,IAAS,CAACqD,UAAUE,UAAAA,EAAY;QACtD,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMmB,eAAe,OAAOC,UAAAA,GAAAA;;QAE1B,IAAIhB,eAAAA,EAAiB7D,OAAO6E,UAAAA,EAAY;AACtC,YAAA;AACF,QAAA;QAEA,MAAMC,GAAAA,GAAM,MAAMN,cAAAA,CAAe;YAC/BvE,IAAAA,EAAMF,cAAAA;AACNG,YAAAA,KAAAA;AACAF,YAAAA,EAAAA,EAAIuD,SAASE,UAAU;AACvBjC,YAAAA,MAAAA;YACA0B,IAAAA,EAAM;gBACJlD,EAAAA,EAAI6E,UAAAA,GAAaE,QAAAA,CAASF,UAAAA,EAAY,EAAA,CAAA,GAAM;AAC9C;AACF,SAAA,CAAA;AAEA,QAAA,IAAI,UAAUC,GAAAA,EAAK;YACjBjE,kBAAAA,CAAmB;gBACjBmE,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASzE,aAAAA,CAAc;oBACrBR,EAAAA,EAAI,6DAAA;oBACJkF,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;QAEA,IAAIpF,SAAAA,IAAa,WAAWgF,GAAAA,EAAK;YAC/BjE,kBAAAA,CAAmB;gBACjBmE,IAAAA,EAAM,QAAA;gBACNC,OAAAA,EAAStE,cAAAA,CAAemE,IAAIL,KAAK;AACnC,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMU,UAAAA,GACH,CAACjE,oBAAAA,IAAwB,CAACiC,cAAAA,IAAkB9B,OAAAA,CAAM+D,MAAM,KAAK,CAAA,IAAM,CAAC7B,QAAAA,CAASE,UAAU;IAC1F,MAAMxC,SAAAA,GAAYkC,kBAAkBjC,oBAAAA,IAAwBwD,UAAAA;AAC5D,IAAA,MAAMW,eAAe1B,IAAAA,GAAOD,SAAAA;AAE5B,IAAA,MAAM4B,gBAAgB9E,aAAAA,CAAc;QAClCR,EAAAA,EAAI,gDAAA;QACJkF,cAAAA,EAAgB;AAClB,KAAA,CAAA;AACA,IAAA,MAAMK,qBAAqB/E,aAAAA,CAAc;QACvCR,EAAAA,EAAI,gDAAA;QACJkF,cAAAA,EAAgB;AAClB,KAAA,CAAA;AACA,IAAA,MAAMM,sBAAsBhF,aAAAA,CAAc;QACxCR,EAAAA,EAAI,sDAAA;QACJkF,cAAAA,EAAgB;AAClB,KAAA,CAAA;AAEA,IAAA,IAAIpF,SAAAA,EAAW;QACb,qBACE2F,eAAA,CAACC,mBAAMC,IAAI,EAAA;YAACC,IAAAA,EAAM9B,iCAAAA;YAAyB9D,EAAAA,EAAI8D,iCAAAA;;8BAC7C+B,cAAA,CAACC,2BAAAA,EAAAA;4CACCD,cAAA,CAACH,mBAAMK,KAAK,EAAA;AAAET,wBAAAA,QAAAA,EAAAA;;;8BAEhBO,cAAA,CAACG,qBAAAA,EAAAA;oBACCC,UAAAA,EAAYV,kBAAAA;oBACZW,QAAAA,EAAUf,UAAAA;AACVxF,oBAAAA,KAAAA,EAAOkE,eAAAA,GAAkBA,eAAAA,CAAgB7D,EAAE,CAACmG,QAAQ,EAAA,GAAK,IAAA;oBACzDC,QAAAA,EAAUxB,YAAAA;AACVyB,oBAAAA,OAAAA,EAAS,IAAMzB,YAAAA,CAAa,IAAA,CAAA;oBAC5B0B,YAAAA,EAAcpC,gBAAAA;oBACdqC,UAAAA,EAAYnC,cAAAA;oBACZiB,YAAAA,EAAcA,YAAAA;oBACdmB,aAAAA,EAAenC,iBAAAA;oBACfoC,WAAAA,EAAajB,mBAAAA;AACbkB,oBAAAA,OAAAA,EAASzF,aAAaC,oBAAAA,IAAwBwD,UAAAA;oBAC9CiC,IAAAA,EAAK,GAAA;8BAEJ5C,OAAAA,CAAQ6C,GAAG,CAAC,CAACC,IAAAA,GAAAA;AACZ,wBAAA,qBACEhB,cAAA,CAACiB,2BAAAA,EAAAA;4BAECnH,KAAAA,EAAOkH,IAAAA,CAAK7G,EAAE,CAACmG,QAAQ,EAAA;AACvBY,4BAAAA,SAAAA,EAAWC,oBAAAA,CAAeH,IAAAA,CAAAA;sCAEzBG,oBAAAA,CAAeH,IAAAA;AAJXA,yBAAAA,EAAAA,IAAAA,CAAK7G,EAAE,CAAA;AAOlB,oBAAA,CAAA;;;;AAIR,IAAA;IAEA,qBACEyF,eAAA,CAACC,mBAAMC,IAAI,EAAA;QACTC,IAAAA,EAAM9B,iCAAAA;QACN9D,EAAAA,EAAI8D,iCAAAA;AACJW,QAAAA,KAAAA,EACE,CAAC,OAACrB,IACApC,WACAR,aAAAA,CAAc;YACZR,EAAAA,EAAI,gDAAA;YACJkF,cAAAA,EAAgB;SAClB,CAAA,IACCT,KAAAA,IAAS9D,cAAAA,CAAe8D,KAAAA,CAAM,KACjCpC,SAAAA;;AAGF,0BAAAwD,cAAA,CAACH,mBAAMK,KAAK,EAAA;AAAET,gBAAAA,QAAAA,EAAAA;;0BACdO,cAAA,CAACG,qBAAAA,EAAAA;gBACCC,UAAAA,EAAYV,kBAAAA;gBACZW,QAAAA,EACG,CAAChF,oBAAAA,IAAwB,CAACD,SAAAA,IAAaI,OAAAA,CAAM+D,MAAM,KAAK,CAAA,IAAM,CAAC7B,QAAAA,CAASE,UAAU;AAErF9D,gBAAAA,KAAAA,EAAOkE,eAAAA,GAAkBA,eAAAA,CAAgB7D,EAAE,CAACmG,QAAQ,EAAA,GAAK,IAAA;gBACzDC,QAAAA,EAAUxB,YAAAA;AACVyB,gBAAAA,OAAAA,EAAS,IAAMzB,YAAAA,CAAa,IAAA,CAAA;gBAC5B0B,YAAAA,EAAcpC,gBAAAA;gBACdqC,UAAAA,EAAYnC,cAAAA;gBACZiB,YAAAA,EAAcA,YAAAA;gBACdmB,aAAAA,EAAenC,iBAAAA;gBACfoC,WAAAA,EAAajB,mBAAAA;AACbkB,gBAAAA,OAAAA,EAASzF,aAAaC,oBAAAA,IAAwBwD,UAAAA;0BAE7CX,OAAAA,CAAQ6C,GAAG,CAAC,CAACC,IAAAA,GAAAA;AACZ,oBAAA,qBACEhB,cAAA,CAACiB,2BAAAA,EAAAA;wBAECnH,KAAAA,EAAOkH,IAAAA,CAAK7G,EAAE,CAACmG,QAAQ,EAAA;AACvBY,wBAAAA,SAAAA,EAAWC,oBAAAA,CAAeH,IAAAA,CAAAA;kCAEzBG,oBAAAA,CAAeH,IAAAA;AAJXA,qBAAAA,EAAAA,IAAAA,CAAK7G,EAAE,CAAA;AAOlB,gBAAA,CAAA;;AAEF,0BAAA6F,cAAA,CAACH,mBAAMuB,KAAK,EAAA,EAAA;;;AAGlB;;;;"}
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: 'review-workflows.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: 'review-workflows.assignee.label',\n defaultMessage: 'Assignee',\n });\n const assigneeClearLabel = formatMessage({\n id: 'review-workflows.assignee.clear',\n defaultMessage: 'Clear assignee',\n });\n const assigneePlaceholder = formatMessage({\n id: 'review-workflows.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: 'review-workflows.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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"}
@@ -147,7 +147,7 @@ const AssigneeSelect = ({ isCompact })=>{
147
147
  toggleNotification({
148
148
  type: 'success',
149
149
  message: formatMessage({
150
- id: 'content-manager.reviewWorkflows.assignee.notification.saved',
150
+ id: 'review-workflows.assignee.notification.saved',
151
151
  defaultMessage: 'Assignee updated'
152
152
  })
153
153
  });
@@ -163,15 +163,15 @@ const AssigneeSelect = ({ isCompact })=>{
163
163
  const isLoading = isLoadingUsers || isLoadingPermissions || isMutating;
164
164
  const hasMoreItems = page < pageCount;
165
165
  const assigneeLabel = formatMessage({
166
- id: 'content-manager.reviewWorkflows.assignee.label',
166
+ id: 'review-workflows.assignee.label',
167
167
  defaultMessage: 'Assignee'
168
168
  });
169
169
  const assigneeClearLabel = formatMessage({
170
- id: 'content-manager.reviewWorkflows.assignee.clear',
170
+ id: 'review-workflows.assignee.clear',
171
171
  defaultMessage: 'Clear assignee'
172
172
  });
173
173
  const assigneePlaceholder = formatMessage({
174
- id: 'content-manager.reviewWorkflows.assignee.placeholder',
174
+ id: 'review-workflows.assignee.placeholder',
175
175
  defaultMessage: 'Select…'
176
176
  });
177
177
  if (isCompact) {
@@ -212,7 +212,7 @@ const AssigneeSelect = ({ isCompact })=>{
212
212
  name: ASSIGNEE_ATTRIBUTE_NAME,
213
213
  id: ASSIGNEE_ATTRIBUTE_NAME,
214
214
  error: (isError && canRead && formatMessage({
215
- id: 'content-manager.reviewWorkflows.assignee.error',
215
+ id: 'review-workflows.assignee.error',
216
216
  defaultMessage: 'An error occurred while fetching users'
217
217
  }) || error && formatAPIError(error)) ?? undefined,
218
218
  children: [
@@ -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 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
+ {"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: 'review-workflows.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: 'review-workflows.assignee.label',\n defaultMessage: 'Assignee',\n });\n const assigneeClearLabel = formatMessage({\n id: 'review-workflows.assignee.clear',\n defaultMessage: 'Clear assignee',\n });\n const assigneePlaceholder = formatMessage({\n id: 'review-workflows.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: 'review-workflows.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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"}
@@ -44,13 +44,13 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
44
44
  children: [
45
45
  /*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Title, {
46
46
  children: formatMessage({
47
- id: 'content-manager.reviewWorkflows.workflows.limit.title',
47
+ id: 'review-workflows.workflows.limit.title',
48
48
  defaultMessage: 'You’ve reached the limit of workflows in your plan'
49
49
  })
50
50
  }),
51
51
  /*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Body, {
52
52
  children: formatMessage({
53
- id: 'content-manager.reviewWorkflows.workflows.limit.body',
53
+ id: 'review-workflows.workflows.limit.body',
54
54
  defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.'
55
55
  })
56
56
  })
@@ -65,13 +65,13 @@ const StageLimitModal = ({ open, onOpenChange })=>{
65
65
  children: [
66
66
  /*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Title, {
67
67
  children: formatMessage({
68
- id: 'content-manager.reviewWorkflows.stages.limit.title',
68
+ id: 'review-workflows.stages.limit.title',
69
69
  defaultMessage: 'You have reached the limit of stages for this workflow in your plan'
70
70
  })
71
71
  }),
72
72
  /*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Body, {
73
73
  children: formatMessage({
74
- id: 'content-manager.reviewWorkflows.stages.limit.body',
74
+ id: 'review-workflows.stages.limit.body',
75
75
  defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.'
76
76
  })
77
77
  })
@@ -86,7 +86,7 @@ const StageLimitModal = ({ open, onOpenChange })=>{
86
86
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
87
87
  disabled: stages.length === 0,
88
88
  placeholder: formatMessage({
89
- id: 'content-manager.reviewWorkflows.assignee.placeholder',
89
+ id: 'review-workflows.assignee.placeholder',
90
90
  defaultMessage: 'Select…'
91
91
  }),
92
92
  startIcon: activeWorkflowStage && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
@@ -159,14 +159,17 @@ const StageSelect = ({ isCompact })=>{
159
159
  }, {
160
160
  skip: !id && collectionType !== 'single-types'
161
161
  });
162
+ // Fall back to the URL `id` so the stages endpoint is still queried when the
163
+ // selected locale has no entry yet. The backend returns workflow metadata
164
+ // even when the entity for `documentId + locale` does not exist.
165
+ const stagesDocumentId = document?.documentId ?? id;
162
166
  const { data, isLoading: isLoadingStages } = contentManager.useGetStagesQuery({
163
167
  slug: collectionType,
164
168
  model: model,
165
- // @ts-expect-error – `id` is not correctly typed in the DS.
166
- id: document?.documentId,
169
+ id: stagesDocumentId,
167
170
  params
168
171
  }, {
169
- skip: !document?.documentId
172
+ skip: !stagesDocumentId || stagesDocumentId === 'create'
170
173
  });
171
174
  const { meta, stages = [] } = data ?? {};
172
175
  const { getFeature } = ee.useLicenseLimits();
@@ -211,7 +214,7 @@ const StageSelect = ({ isCompact })=>{
211
214
  toggleNotification({
212
215
  type: 'success',
213
216
  message: formatMessage({
214
- id: 'content-manager.reviewWorkflows.stage.notification.saved',
217
+ id: 'review-workflows.stage.notification.saved',
215
218
  defaultMessage: 'Review stage updated'
216
219
  })
217
220
  });
@@ -228,7 +231,7 @@ const StageSelect = ({ isCompact })=>{
228
231
  toggleNotification({
229
232
  type: 'danger',
230
233
  message: formatMessage({
231
- id: 'content-manager.reviewWorkflows.stage.notification.error',
234
+ id: 'review-workflows.stage.notification.error',
232
235
  defaultMessage: 'An error occurred while updating the review stage'
233
236
  })
234
237
  });
@@ -236,14 +239,38 @@ const StageSelect = ({ isCompact })=>{
236
239
  };
237
240
  const isLoading = isLoadingStages || isLoadingDocument;
238
241
  const reviewStageLabel = formatMessage({
239
- id: 'content-manager.reviewWorkflows.stage.label',
242
+ id: 'review-workflows.stage.label',
240
243
  defaultMessage: 'Review stage'
241
244
  });
242
- const reviewStageHint = !isLoading && stages.length === 0 && // TODO: Handle errors and hints
243
- formatMessage({
244
- id: 'content-manager.reviewWorkflows.stages.no-transition',
245
- defaultMessage: 'You don’t have the permission to update this stage.'
246
- });
245
+ // The Edit View renders the Review Workflows panel even when the user
246
+ // switches to a locale that has not been saved yet. In that case the
247
+ // document for the selected locale does not exist and we cannot transition
248
+ // any stage until the entry is first saved, so surface a dedicated hint
249
+ // rather than the misleading "no permission" message.
250
+ const hasDocumentForLocale = Boolean(document?.documentId);
251
+ const totalWorkflowStages = meta?.stageCount ?? 0;
252
+ const canTransition = meta?.canTransition ?? true;
253
+ let reviewStageHint;
254
+ if (!isLoading) {
255
+ if (!hasDocumentForLocale) {
256
+ reviewStageHint = formatMessage({
257
+ id: 'review-workflows.stages.save-first',
258
+ defaultMessage: 'Save this entry to assign a workflow stage.'
259
+ });
260
+ } else if (stages.length === 0) {
261
+ if (canTransition && totalWorkflowStages === 1) {
262
+ reviewStageHint = formatMessage({
263
+ id: 'review-workflows.stages.single-stage',
264
+ defaultMessage: 'This workflow only has one stage. Add more stages to be able to update it here.'
265
+ });
266
+ } else {
267
+ reviewStageHint = formatMessage({
268
+ id: 'review-workflows.stages.no-transition',
269
+ defaultMessage: 'You don’t have the permission to update this stage.'
270
+ });
271
+ }
272
+ }
273
+ }
247
274
  if (isCompact) {
248
275
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
249
276
  children: [
@@ -268,7 +295,7 @@ const StageSelect = ({ isCompact })=>{
268
295
  value: activeWorkflowStage?.id,
269
296
  onChange: handleChange,
270
297
  placeholder: formatMessage({
271
- id: 'content-manager.reviewWorkflows.assignee.placeholder',
298
+ id: 'review-workflows.assignee.placeholder',
272
299
  defaultMessage: 'Select…'
273
300
  })
274
301
  })
@@ -306,7 +333,7 @@ const StageSelect = ({ isCompact })=>{
306
333
  value: activeWorkflowStage?.id,
307
334
  onChange: handleChange,
308
335
  placeholder: formatMessage({
309
- id: 'content-manager.reviewWorkflows.assignee.placeholder',
336
+ id: 'review-workflows.assignee.placeholder',
310
337
  defaultMessage: 'Select…'
311
338
  })
312
339
  }),