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