@primershop/strapi-plugin-status-manager 0.0.14 → 0.0.16

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 (127) hide show
  1. package/dist/admin/{components/StatusManager.js → HomePage-Bez9ZXv-.js} +49 -4
  2. package/dist/admin/{components/StatusManager.mjs → HomePage-Dx9N0awm.mjs} +49 -4
  3. package/dist/admin/index-BVybZ6IA.mjs +280 -0
  4. package/dist/admin/index-mATo7IeG.js +283 -0
  5. package/dist/admin/index.js +8 -45
  6. package/dist/admin/index.mjs +6 -47
  7. package/dist/server/index.js +747 -18
  8. package/dist/server/index.mjs +747 -18
  9. package/package.json +3 -3
  10. package/dist/admin/components/Initializer.js +0 -17
  11. package/dist/admin/components/Initializer.js.map +0 -1
  12. package/dist/admin/components/Initializer.mjs +0 -15
  13. package/dist/admin/components/Initializer.mjs.map +0 -1
  14. package/dist/admin/components/PluginIcon.js +0 -9
  15. package/dist/admin/components/PluginIcon.js.map +0 -1
  16. package/dist/admin/components/PluginIcon.mjs +0 -7
  17. package/dist/admin/components/PluginIcon.mjs.map +0 -1
  18. package/dist/admin/components/ProductStatusField.js +0 -104
  19. package/dist/admin/components/ProductStatusField.js.map +0 -1
  20. package/dist/admin/components/ProductStatusField.mjs +0 -102
  21. package/dist/admin/components/ProductStatusField.mjs.map +0 -1
  22. package/dist/admin/components/StatusManager.js.map +0 -1
  23. package/dist/admin/components/StatusManager.mjs.map +0 -1
  24. package/dist/admin/index.js.map +0 -1
  25. package/dist/admin/index.mjs.map +0 -1
  26. package/dist/admin/listView/StatusFilter.js +0 -76
  27. package/dist/admin/listView/StatusFilter.js.map +0 -1
  28. package/dist/admin/listView/StatusFilter.mjs +0 -74
  29. package/dist/admin/listView/StatusFilter.mjs.map +0 -1
  30. package/dist/admin/listView/add-status-column-hook.js +0 -34
  31. package/dist/admin/listView/add-status-column-hook.js.map +0 -1
  32. package/dist/admin/listView/add-status-column-hook.mjs +0 -32
  33. package/dist/admin/listView/add-status-column-hook.mjs.map +0 -1
  34. package/dist/admin/listView/status-cell.js +0 -28
  35. package/dist/admin/listView/status-cell.js.map +0 -1
  36. package/dist/admin/listView/status-cell.mjs +0 -26
  37. package/dist/admin/listView/status-cell.mjs.map +0 -1
  38. package/dist/admin/pages/HomePage.js +0 -55
  39. package/dist/admin/pages/HomePage.js.map +0 -1
  40. package/dist/admin/pages/HomePage.mjs +0 -53
  41. package/dist/admin/pages/HomePage.mjs.map +0 -1
  42. package/dist/admin/permissions.js +0 -16
  43. package/dist/admin/permissions.js.map +0 -1
  44. package/dist/admin/permissions.mjs +0 -14
  45. package/dist/admin/permissions.mjs.map +0 -1
  46. package/dist/admin/pluginId.js +0 -6
  47. package/dist/admin/pluginId.js.map +0 -1
  48. package/dist/admin/pluginId.mjs +0 -4
  49. package/dist/admin/pluginId.mjs.map +0 -1
  50. package/dist/server/bootstrap.js +0 -35
  51. package/dist/server/bootstrap.js.map +0 -1
  52. package/dist/server/bootstrap.mjs +0 -33
  53. package/dist/server/bootstrap.mjs.map +0 -1
  54. package/dist/server/content-types/index.js +0 -16
  55. package/dist/server/content-types/index.js.map +0 -1
  56. package/dist/server/content-types/index.mjs +0 -14
  57. package/dist/server/content-types/index.mjs.map +0 -1
  58. package/dist/server/content-types/status-link.js +0 -43
  59. package/dist/server/content-types/status-link.js.map +0 -1
  60. package/dist/server/content-types/status-link.mjs +0 -41
  61. package/dist/server/content-types/status-link.mjs.map +0 -1
  62. package/dist/server/content-types/status.js +0 -50
  63. package/dist/server/content-types/status.js.map +0 -1
  64. package/dist/server/content-types/status.mjs +0 -48
  65. package/dist/server/content-types/status.mjs.map +0 -1
  66. package/dist/server/controllers/content.js +0 -33
  67. package/dist/server/controllers/content.js.map +0 -1
  68. package/dist/server/controllers/content.mjs +0 -31
  69. package/dist/server/controllers/content.mjs.map +0 -1
  70. package/dist/server/controllers/index.js +0 -12
  71. package/dist/server/controllers/index.js.map +0 -1
  72. package/dist/server/controllers/index.mjs +0 -10
  73. package/dist/server/controllers/index.mjs.map +0 -1
  74. package/dist/server/controllers/status.js +0 -106
  75. package/dist/server/controllers/status.js.map +0 -1
  76. package/dist/server/controllers/status.mjs +0 -104
  77. package/dist/server/controllers/status.mjs.map +0 -1
  78. package/dist/server/index.js.map +0 -1
  79. package/dist/server/index.mjs.map +0 -1
  80. package/dist/server/middlewares/add-status-field.js +0 -48
  81. package/dist/server/middlewares/add-status-field.js.map +0 -1
  82. package/dist/server/middlewares/add-status-field.mjs +0 -46
  83. package/dist/server/middlewares/add-status-field.mjs.map +0 -1
  84. package/dist/server/middlewares/filter-by-status.js +0 -42
  85. package/dist/server/middlewares/filter-by-status.js.map +0 -1
  86. package/dist/server/middlewares/filter-by-status.mjs +0 -40
  87. package/dist/server/middlewares/filter-by-status.mjs.map +0 -1
  88. package/dist/server/middlewares/filter-published.js +0 -35
  89. package/dist/server/middlewares/filter-published.js.map +0 -1
  90. package/dist/server/middlewares/filter-published.mjs +0 -33
  91. package/dist/server/middlewares/filter-published.mjs.map +0 -1
  92. package/dist/server/permissions.js +0 -51
  93. package/dist/server/permissions.js.map +0 -1
  94. package/dist/server/permissions.mjs +0 -49
  95. package/dist/server/permissions.mjs.map +0 -1
  96. package/dist/server/pluginId.js +0 -6
  97. package/dist/server/pluginId.js.map +0 -1
  98. package/dist/server/pluginId.mjs +0 -4
  99. package/dist/server/pluginId.mjs.map +0 -1
  100. package/dist/server/register.js +0 -20
  101. package/dist/server/register.js.map +0 -1
  102. package/dist/server/register.mjs +0 -18
  103. package/dist/server/register.mjs.map +0 -1
  104. package/dist/server/routes/content-management.js +0 -41
  105. package/dist/server/routes/content-management.js.map +0 -1
  106. package/dist/server/routes/content-management.mjs +0 -39
  107. package/dist/server/routes/content-management.mjs.map +0 -1
  108. package/dist/server/routes/index.js +0 -17
  109. package/dist/server/routes/index.js.map +0 -1
  110. package/dist/server/routes/index.mjs +0 -15
  111. package/dist/server/routes/index.mjs.map +0 -1
  112. package/dist/server/routes/status-management.js +0 -122
  113. package/dist/server/routes/status-management.js.map +0 -1
  114. package/dist/server/routes/status-management.mjs +0 -120
  115. package/dist/server/routes/status-management.mjs.map +0 -1
  116. package/dist/server/services/index.js +0 -12
  117. package/dist/server/services/index.js.map +0 -1
  118. package/dist/server/services/index.mjs +0 -10
  119. package/dist/server/services/index.mjs.map +0 -1
  120. package/dist/server/services/status-link.js +0 -38
  121. package/dist/server/services/status-link.js.map +0 -1
  122. package/dist/server/services/status-link.mjs +0 -36
  123. package/dist/server/services/status-link.mjs.map +0 -1
  124. package/dist/server/services/status.js +0 -110
  125. package/dist/server/services/status.js.map +0 -1
  126. package/dist/server/services/status.mjs +0 -108
  127. package/dist/server/services/status.mjs.map +0 -1
@@ -0,0 +1,283 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var icons = require('@strapi/icons');
6
+ var designSystem = require('@strapi/design-system');
7
+ var admin = require('@strapi/strapi/admin');
8
+
9
+ const PLUGIN_ID = "primershop-status-manager";
10
+
11
+ /**
12
+ * @type {import('react').FC<{ setPlugin: (id: string) => void }>}
13
+ */ const Initializer = ({ setPlugin })=>{
14
+ const ref = React.useRef(setPlugin);
15
+ React.useEffect(()=>{
16
+ ref.current(PLUGIN_ID);
17
+ }, []);
18
+ return null;
19
+ };
20
+
21
+ const PluginIcon = ()=>/*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {});
22
+
23
+ const ProductStatusField = ()=>{
24
+ const { contentType, id } = admin.unstable_useContentManagerContext();
25
+ const [statuses, setStatuses] = React.useState([]);
26
+ const [currentStatus, setCurrentStatus] = React.useState("");
27
+ const [message, setMessage] = React.useState("");
28
+ const { get, put } = admin.useFetchClient();
29
+ const handleStatusChange = React.useCallback(async (newStatus)=>{
30
+ if (!id) {
31
+ setMessage("Save the product first and then change the status");
32
+ return;
33
+ }
34
+ try {
35
+ await put(`primershop-status-manager/content-status`, {
36
+ contentTypeUid: "api::product.product",
37
+ contentDocumentId: id,
38
+ statusId: statuses.find((status)=>status.name === newStatus)?.documentId
39
+ });
40
+ setMessage(`Status updated ${currentStatus ? `from ${currentStatus}` : ""} to ${newStatus}`);
41
+ setCurrentStatus(newStatus || "");
42
+ } catch (error) {
43
+ setMessage("Error updating status");
44
+ console.error("Error updating status:", error);
45
+ }
46
+ }, [
47
+ id,
48
+ statuses,
49
+ currentStatus,
50
+ put
51
+ ]);
52
+ React.useEffect(()=>{
53
+ async function fetchCurrentStatus() {
54
+ try {
55
+ const { data: productData } = await get(`primershop-status-manager/content-status?contentDocumentId=${id}&contentTypeUid=api::product.product`);
56
+ const status = productData?.status;
57
+ if (status && status.name) return setCurrentStatus(status.name);
58
+ if (statuses.length) return handleStatusChange(statuses[0].name);
59
+ } catch (error) {
60
+ console.error("Error fetching product status:", error);
61
+ }
62
+ }
63
+ if (id && !currentStatus.length) fetchCurrentStatus();
64
+ if (!id && statuses.length) setCurrentStatus(statuses[0].name);
65
+ }, [
66
+ id,
67
+ statuses,
68
+ get
69
+ ]);
70
+ React.useEffect(()=>{
71
+ async function fetchStatuses() {
72
+ try {
73
+ const { data } = await get("primershop-status-manager/statuses");
74
+ setStatuses(data);
75
+ } catch (error) {
76
+ console.error("Error fetching statuses:", error);
77
+ }
78
+ }
79
+ fetchStatuses();
80
+ }, [
81
+ get
82
+ ]);
83
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
84
+ direction: "column",
85
+ justifyContent: "center",
86
+ alignItems: "stretch",
87
+ width: "100%",
88
+ children: [
89
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
90
+ padding: 2,
91
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
92
+ variant: "sigma",
93
+ children: [
94
+ contentType?.info.displayName,
95
+ " status"
96
+ ]
97
+ })
98
+ }),
99
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
100
+ placeholder: currentStatus,
101
+ onChange: handleStatusChange,
102
+ children: statuses.map((status)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
103
+ value: status.name,
104
+ children: status.name
105
+ }, status.documentId))
106
+ }),
107
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
108
+ padding: 2,
109
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
110
+ variant: "sigma",
111
+ children: message
112
+ })
113
+ })
114
+ ]
115
+ });
116
+ };
117
+
118
+ const StatusCell = ({ row })=>{
119
+ const [status, setStatus] = React.useState(null);
120
+ React.useEffect(()=>{
121
+ setStatus(row.statusField);
122
+ }, [
123
+ row
124
+ ]);
125
+ if (!status) return null;
126
+ return /*#__PURE__*/ jsxRuntime.jsx("span", {
127
+ style: {
128
+ padding: "4px 8px",
129
+ borderRadius: 4,
130
+ background: status.published ? "#eafbe7" : "#f0f0ff",
131
+ color: status.published ? "#2f6846" : "#271fe0",
132
+ border: `1px solid ${status.published ? "#2f6846" : "#271fe0"}`,
133
+ fontSize: 14
134
+ },
135
+ children: status.name
136
+ });
137
+ };
138
+
139
+ const addStatusColumnHook = ({ displayedHeaders, layout })=>{
140
+ const statusHeader = {
141
+ attribute: {
142
+ type: "custom"
143
+ },
144
+ name: "statusLabel",
145
+ label: {
146
+ id: "primershop-status-manager.status",
147
+ defaultMessage: "Status"
148
+ },
149
+ searchable: false,
150
+ sortable: false,
151
+ cellFormatter: (row)=>{
152
+ return React.createElement(StatusCell, {
153
+ row
154
+ });
155
+ }
156
+ };
157
+ return {
158
+ displayedHeaders: [
159
+ ...displayedHeaders,
160
+ statusHeader
161
+ ],
162
+ layout
163
+ };
164
+ };
165
+
166
+ /**
167
+ * Admin permission actions for use in addMenuLink, Page.Protect, and useRBAC.
168
+ * Action IDs must match uids registered in server bootstrap (registerMany).
169
+ */ const pluginPermissions = {
170
+ accessStatusManager: [
171
+ {
172
+ action: "plugin::primershop-status-manager.main",
173
+ subject: null
174
+ }
175
+ ]
176
+ };
177
+
178
+ const StatusFilter = ()=>{
179
+ const { contentType } = admin.unstable_useContentManagerContext();
180
+ const [statuses, setStatuses] = React.useState([]);
181
+ const [selected, setSelected] = React.useState("");
182
+ const { get } = admin.useFetchClient();
183
+ const [{ query }, setQuery] = admin.useQueryParams();
184
+ const handleStatusChange = React.useCallback((name)=>{
185
+ setQuery({
186
+ page: 1,
187
+ plugins: {
188
+ ...query.plugins,
189
+ "primershop-status-manager": {
190
+ statusName: name.toLowerCase()
191
+ }
192
+ }
193
+ }, "push", true);
194
+ }, [
195
+ query.plugins,
196
+ setQuery
197
+ ]);
198
+ React.useEffect(()=>{
199
+ const selectedStatusName = query.plugins?.["primershop-status-manager"]?.statusName;
200
+ if (!selectedStatusName) return;
201
+ const status = statuses.find((status)=>status.name.toLowerCase() === selectedStatusName);
202
+ if (status) {
203
+ setSelected(status.name);
204
+ }
205
+ }, [
206
+ query,
207
+ statuses
208
+ ]);
209
+ React.useEffect(()=>{
210
+ async function fetchStatuses() {
211
+ try {
212
+ const { data } = await get("primershop-status-manager/statuses");
213
+ const allStatusesObject = {
214
+ documentId: "all",
215
+ name: "All"
216
+ };
217
+ setStatuses([
218
+ allStatusesObject,
219
+ ...data
220
+ ]);
221
+ } catch (error) {
222
+ console.error("Error fetching statuses:", error);
223
+ }
224
+ }
225
+ fetchStatuses();
226
+ }, [
227
+ get
228
+ ]);
229
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
230
+ direction: "column",
231
+ justifyContent: "center",
232
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
233
+ size: "S",
234
+ placeholder: `${contentType?.info.displayName} status`,
235
+ value: selected,
236
+ onChange: handleStatusChange,
237
+ children: statuses.map((status)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
238
+ value: status.name,
239
+ children: status.name
240
+ }, status.documentId))
241
+ })
242
+ });
243
+ };
244
+
245
+ const plugin = {
246
+ register (app) {
247
+ app.registerPlugin({
248
+ id: PLUGIN_ID,
249
+ initializer: Initializer,
250
+ isReady: true,
251
+ name: PLUGIN_ID
252
+ });
253
+ app.addMenuLink({
254
+ to: `plugins/${PLUGIN_ID}`,
255
+ icon: PluginIcon,
256
+ intlLabel: {
257
+ id: `${PLUGIN_ID}.plugin.name`,
258
+ defaultMessage: "Status manager"
259
+ },
260
+ permissions: [
261
+ pluginPermissions.accessStatusManager[0]
262
+ ],
263
+ Component: ()=>Promise.resolve().then(function () { return require('./HomePage-Bez9ZXv-.js'); }).then((module)=>({
264
+ default: module.HomePage
265
+ }))
266
+ });
267
+ },
268
+ bootstrap (app) {
269
+ app.getPlugin("content-manager").injectComponent("editView", "right-links", {
270
+ name: "Status",
271
+ Component: ProductStatusField
272
+ });
273
+ app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addStatusColumnHook);
274
+ const contentManager = app.getPlugin('content-manager');
275
+ contentManager.injectComponent('listView', 'actions', {
276
+ name: 'status-filter',
277
+ Component: StatusFilter
278
+ });
279
+ }
280
+ };
281
+
282
+ exports.plugin = plugin;
283
+ exports.pluginPermissions = pluginPermissions;
@@ -1,49 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var Initializer = require('./components/Initializer.js');
4
- var PluginIcon = require('./components/PluginIcon.js');
5
- var ProductStatusField = require('./components/ProductStatusField.js');
6
- var pluginId = require('./pluginId.js');
7
- var addStatusColumnHook = require('./listView/add-status-column-hook.js');
8
- var permissions = require('./permissions.js');
9
- var StatusFilter = require('./listView/StatusFilter.js');
3
+ var index = require('./index-mATo7IeG.js');
4
+ require('react');
5
+ require('react/jsx-runtime');
6
+ require('@strapi/icons');
7
+ require('@strapi/design-system');
8
+ require('@strapi/strapi/admin');
10
9
 
11
- const plugin = {
12
- register (app) {
13
- app.registerPlugin({
14
- id: pluginId.PLUGIN_ID,
15
- initializer: Initializer.Initializer,
16
- isReady: true,
17
- name: pluginId.PLUGIN_ID
18
- });
19
- app.addMenuLink({
20
- to: `plugins/${pluginId.PLUGIN_ID}`,
21
- icon: PluginIcon.PluginIcon,
22
- intlLabel: {
23
- id: `${pluginId.PLUGIN_ID}.plugin.name`,
24
- defaultMessage: "Status manager"
25
- },
26
- permissions: [
27
- permissions.accessStatusManager[0]
28
- ],
29
- Component: ()=>Promise.resolve().then(function () { return require('./pages/HomePage.js'); }).then((module)=>({
30
- default: module.HomePage
31
- }))
32
- });
33
- },
34
- bootstrap (app) {
35
- app.getPlugin("content-manager").injectComponent("editView", "right-links", {
36
- name: "Status",
37
- Component: ProductStatusField.ProductStatusField
38
- });
39
- app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addStatusColumnHook.addStatusColumnHook);
40
- const contentManager = app.getPlugin('content-manager');
41
- contentManager.injectComponent('listView', 'actions', {
42
- name: 'status-filter',
43
- Component: StatusFilter.StatusFilter
44
- });
45
- }
46
- };
47
10
 
48
- module.exports = plugin;
49
- //# sourceMappingURL=index.js.map
11
+
12
+ module.exports = index.plugin;
@@ -1,47 +1,6 @@
1
- import { Initializer } from './components/Initializer.mjs';
2
- import { PluginIcon } from './components/PluginIcon.mjs';
3
- import { ProductStatusField } from './components/ProductStatusField.mjs';
4
- import { PLUGIN_ID } from './pluginId.mjs';
5
- import { addStatusColumnHook } from './listView/add-status-column-hook.mjs';
6
- import pluginPermissions from './permissions.mjs';
7
- import { StatusFilter } from './listView/StatusFilter.mjs';
8
-
9
- const plugin = {
10
- register (app) {
11
- app.registerPlugin({
12
- id: PLUGIN_ID,
13
- initializer: Initializer,
14
- isReady: true,
15
- name: PLUGIN_ID
16
- });
17
- app.addMenuLink({
18
- to: `plugins/${PLUGIN_ID}`,
19
- icon: PluginIcon,
20
- intlLabel: {
21
- id: `${PLUGIN_ID}.plugin.name`,
22
- defaultMessage: "Status manager"
23
- },
24
- permissions: [
25
- pluginPermissions.accessStatusManager[0]
26
- ],
27
- Component: ()=>import('./pages/HomePage.mjs').then((module)=>({
28
- default: module.HomePage
29
- }))
30
- });
31
- },
32
- bootstrap (app) {
33
- app.getPlugin("content-manager").injectComponent("editView", "right-links", {
34
- name: "Status",
35
- Component: ProductStatusField
36
- });
37
- app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addStatusColumnHook);
38
- const contentManager = app.getPlugin('content-manager');
39
- contentManager.injectComponent('listView', 'actions', {
40
- name: 'status-filter',
41
- Component: StatusFilter
42
- });
43
- }
44
- };
45
-
46
- export { plugin as default };
47
- //# sourceMappingURL=index.mjs.map
1
+ export { a as default } from './index-BVybZ6IA.mjs';
2
+ import 'react';
3
+ import 'react/jsx-runtime';
4
+ import '@strapi/icons';
5
+ import '@strapi/design-system';
6
+ import '@strapi/strapi/admin';