@primershop/strapi-plugin-status-manager 0.0.6 → 0.0.8
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/admin/{components/StatusManager.mjs → HomePage-C4rwBBWf.mjs} +50 -4
- package/dist/admin/HomePage-C4rwBBWf.mjs.map +1 -0
- package/dist/admin/{components/StatusManager.js → HomePage-CgBU0RrT.js} +50 -4
- package/dist/admin/HomePage-CgBU0RrT.js.map +1 -0
- package/dist/admin/index-BaesChab.mjs +279 -0
- package/dist/admin/index-BaesChab.mjs.map +1 -0
- package/dist/admin/index-C5VrYoqI.js +282 -0
- package/dist/admin/index-C5VrYoqI.js.map +1 -0
- package/dist/admin/index.js +8 -41
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +6 -43
- package/dist/admin/index.mjs.map +1 -1
- package/dist/server/bootstrap.js +7 -2
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +7 -2
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +1 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/permissions.js +6 -1
- package/dist/server/permissions.js.map +1 -1
- package/dist/server/permissions.mjs +6 -1
- package/dist/server/permissions.mjs.map +1 -1
- package/dist/server/register.js +0 -7
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +0 -7
- package/dist/server/register.mjs.map +1 -1
- package/package.json +106 -102
- 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.map +0 -1
- 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 -51
- package/dist/admin/pages/HomePage.js.map +0 -1
- package/dist/admin/pages/HomePage.mjs +0 -49
- package/dist/admin/pages/HomePage.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
|
@@ -0,0 +1,282 @@
|
|
|
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: pluginPermissions.accessStatusManager,
|
|
261
|
+
Component: ()=>Promise.resolve().then(function () { return require('./HomePage-CgBU0RrT.js'); }).then((module)=>({
|
|
262
|
+
default: module.HomePage
|
|
263
|
+
}))
|
|
264
|
+
});
|
|
265
|
+
},
|
|
266
|
+
bootstrap (app) {
|
|
267
|
+
app.getPlugin("content-manager").injectComponent("editView", "right-links", {
|
|
268
|
+
name: "Status",
|
|
269
|
+
Component: ProductStatusField
|
|
270
|
+
});
|
|
271
|
+
app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addStatusColumnHook);
|
|
272
|
+
const contentManager = app.getPlugin('content-manager');
|
|
273
|
+
contentManager.injectComponent('listView', 'actions', {
|
|
274
|
+
name: 'status-filter',
|
|
275
|
+
Component: StatusFilter
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
exports.plugin = plugin;
|
|
281
|
+
exports.pluginPermissions = pluginPermissions;
|
|
282
|
+
//# sourceMappingURL=index-C5VrYoqI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C5VrYoqI.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,\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":["PLUGIN_ID","Initializer","setPlugin","ref","useRef","useEffect","current","PluginIcon","_jsx","CheckCircle","ProductStatusField","contentType","id","useContentManagerContext","statuses","setStatuses","useState","currentStatus","setCurrentStatus","message","setMessage","get","put","useFetchClient","handleStatusChange","useCallback","newStatus","contentTypeUid","contentDocumentId","statusId","find","status","name","documentId","error","console","fetchCurrentStatus","data","productData","length","fetchStatuses","_jsxs","Flex","direction","justifyContent","alignItems","width","Box","padding","Typography","variant","info","displayName","SingleSelect","placeholder","onChange","map","SingleSelectOption","value","StatusCell","row","setStatus","statusField","span","style","borderRadius","background","published","color","border","fontSize","addStatusColumnHook","displayedHeaders","layout","statusHeader","attribute","type","label","defaultMessage","searchable","sortable","cellFormatter","React","createElement","pluginPermissions","accessStatusManager","action","subject","StatusFilter","selected","setSelected","query","setQuery","useQueryParams","page","plugins","statusName","toLowerCase","selectedStatusName","allStatusesObject","size","plugin","register","app","registerPlugin","initializer","isReady","addMenuLink","to","icon","intlLabel","permissions","Component","then","module","default","HomePage","bootstrap","getPlugin","injectComponent","registerHook","contentManager"],"mappings":"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"}
|
package/dist/admin/index.js
CHANGED
|
@@ -1,46 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
var index = require('./index-C5VrYoqI.js');
|
|
4
|
+
require('react');
|
|
5
|
+
require('react/jsx-runtime');
|
|
6
|
+
require('@strapi/icons');
|
|
7
|
+
require('@strapi/design-system');
|
|
8
|
+
require('@strapi/strapi/admin');
|
|
9
9
|
|
|
10
|
-
const plugin = {
|
|
11
|
-
register (app) {
|
|
12
|
-
app.registerPlugin({
|
|
13
|
-
id: pluginId.PLUGIN_ID,
|
|
14
|
-
initializer: Initializer.Initializer,
|
|
15
|
-
isReady: true,
|
|
16
|
-
name: pluginId.PLUGIN_ID
|
|
17
|
-
});
|
|
18
|
-
app.addMenuLink({
|
|
19
|
-
to: `plugins/${pluginId.PLUGIN_ID}`,
|
|
20
|
-
icon: PluginIcon.PluginIcon,
|
|
21
|
-
intlLabel: {
|
|
22
|
-
id: `${pluginId.PLUGIN_ID}.plugin.name`,
|
|
23
|
-
defaultMessage: "Status manager"
|
|
24
|
-
},
|
|
25
|
-
permissions: [],
|
|
26
|
-
Component: ()=>Promise.resolve().then(function () { return require('./pages/HomePage.js'); }).then((module)=>({
|
|
27
|
-
default: module.HomePage
|
|
28
|
-
}))
|
|
29
|
-
});
|
|
30
|
-
},
|
|
31
|
-
bootstrap (app) {
|
|
32
|
-
app.getPlugin("content-manager").injectComponent("editView", "right-links", {
|
|
33
|
-
name: "Status",
|
|
34
|
-
Component: ProductStatusField.ProductStatusField
|
|
35
|
-
});
|
|
36
|
-
app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addStatusColumnHook.addStatusColumnHook);
|
|
37
|
-
const contentManager = app.getPlugin('content-manager');
|
|
38
|
-
contentManager.injectComponent('listView', 'actions', {
|
|
39
|
-
name: 'status-filter',
|
|
40
|
-
Component: StatusFilter.StatusFilter
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
10
|
|
|
45
|
-
|
|
11
|
+
|
|
12
|
+
module.exports = index.plugin;
|
|
46
13
|
//# 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,44 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
const plugin = {
|
|
9
|
-
register (app) {
|
|
10
|
-
app.registerPlugin({
|
|
11
|
-
id: PLUGIN_ID,
|
|
12
|
-
initializer: Initializer,
|
|
13
|
-
isReady: true,
|
|
14
|
-
name: PLUGIN_ID
|
|
15
|
-
});
|
|
16
|
-
app.addMenuLink({
|
|
17
|
-
to: `plugins/${PLUGIN_ID}`,
|
|
18
|
-
icon: PluginIcon,
|
|
19
|
-
intlLabel: {
|
|
20
|
-
id: `${PLUGIN_ID}.plugin.name`,
|
|
21
|
-
defaultMessage: "Status manager"
|
|
22
|
-
},
|
|
23
|
-
permissions: [],
|
|
24
|
-
Component: ()=>import('./pages/HomePage.mjs').then((module)=>({
|
|
25
|
-
default: module.HomePage
|
|
26
|
-
}))
|
|
27
|
-
});
|
|
28
|
-
},
|
|
29
|
-
bootstrap (app) {
|
|
30
|
-
app.getPlugin("content-manager").injectComponent("editView", "right-links", {
|
|
31
|
-
name: "Status",
|
|
32
|
-
Component: ProductStatusField
|
|
33
|
-
});
|
|
34
|
-
app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addStatusColumnHook);
|
|
35
|
-
const contentManager = app.getPlugin('content-manager');
|
|
36
|
-
contentManager.injectComponent('listView', 'actions', {
|
|
37
|
-
name: 'status-filter',
|
|
38
|
-
Component: StatusFilter
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export { plugin as default };
|
|
1
|
+
export { a as default } from './index-BaesChab.mjs';
|
|
2
|
+
import 'react';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import '@strapi/icons';
|
|
5
|
+
import '@strapi/design-system';
|
|
6
|
+
import '@strapi/strapi/admin';
|
|
44
7
|
//# 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":";;;;;"}
|
package/dist/server/bootstrap.js
CHANGED
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
var permissions = require('./permissions.js');
|
|
4
4
|
|
|
5
5
|
const bootstrap = async ({ strapi })=>{
|
|
6
|
-
|
|
6
|
+
try {
|
|
7
|
+
await strapi.service("admin::permission").actionProvider.registerMany(permissions.actions);
|
|
8
|
+
} catch (error) {
|
|
9
|
+
strapi.log.error("[primershop-status-manager] Failed to register permissions:", error);
|
|
10
|
+
throw error;
|
|
11
|
+
}
|
|
7
12
|
// Register lifecycle hooks for status filtering
|
|
8
13
|
strapi.db?.lifecycles?.subscribe?.({
|
|
9
14
|
// catch all models
|
|
@@ -25,5 +30,5 @@ const bootstrap = async ({ strapi })=>{
|
|
|
25
30
|
});
|
|
26
31
|
};
|
|
27
32
|
|
|
28
|
-
exports
|
|
33
|
+
module.exports = bootstrap;
|
|
29
34
|
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import statusActions from \"./permissions\";\r\nimport type { Core } from \"@strapi/strapi\";\r\n\r\
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import statusActions from \"./permissions\";\r\nimport type { Core } from \"@strapi/strapi\";\r\n\r\nconst bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\r\n try {\r\n await strapi\r\n .service(\"admin::permission\")\r\n .actionProvider.registerMany(statusActions.actions);\r\n } catch (error) {\r\n strapi.log.error(\r\n \"[primershop-status-manager] Failed to register permissions:\",\r\n error\r\n );\r\n throw error;\r\n }\r\n\r\n // Register lifecycle hooks for status filtering\r\n strapi.db?.lifecycles?.subscribe?.({\r\n // catch all models\r\n models: [\"*\"],\r\n\r\n async afterDelete(event: {\r\n model?: { uid: string };\r\n result?: { documentId: string };\r\n }) {\r\n const modelUid = event?.model?.uid;\r\n const deleted = event?.result;\r\n const documentId = deleted?.documentId;\r\n if (!modelUid || !documentId) return;\r\n\r\n await strapi.db\r\n .query(\"plugin::primershop-status-manager.status-link\")\r\n .deleteMany({\r\n where: { targetUid: modelUid, targetDocumentId: documentId },\r\n });\r\n },\r\n });\r\n};\r\n\r\nexport default bootstrap;\r\n"],"names":["bootstrap","strapi","service","actionProvider","registerMany","statusActions","actions","error","log","db","lifecycles","subscribe","models","afterDelete","event","modelUid","model","uid","deleted","result","documentId","query","deleteMany","where","targetUid","targetDocumentId"],"mappings":";;;;AAGA,MAAMA,SAAAA,GAAY,OAAO,EAAEC,MAAM,EAA2B,GAAA;IAC1D,IAAI;QACF,MAAMA,MAAAA,CACHC,OAAO,CAAC,mBAAA,CAAA,CACRC,cAAc,CAACC,YAAY,CAACC,WAAAA,CAAcC,OAAO,CAAA;AACtD,IAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACdN,QAAAA,MAAAA,CAAOO,GAAG,CAACD,KAAK,CACd,6DAAA,EACAA,KAAAA,CAAAA;QAEF,MAAMA,KAAAA;AACR,IAAA;;IAGAN,MAAAA,CAAOQ,EAAE,EAAEC,UAAAA,EAAYC,SAAAA,GAAY;;QAEjCC,MAAAA,EAAQ;AAAC,YAAA;AAAI,SAAA;AAEb,QAAA,MAAMC,aAAYC,KAGjB,EAAA;YACC,MAAMC,QAAAA,GAAWD,OAAOE,KAAAA,EAAOC,GAAAA;AAC/B,YAAA,MAAMC,UAAUJ,KAAAA,EAAOK,MAAAA;AACvB,YAAA,MAAMC,aAAaF,OAAAA,EAASE,UAAAA;YAC5B,IAAI,CAACL,QAAAA,IAAY,CAACK,UAAAA,EAAY;AAE9B,YAAA,MAAMnB,OAAOQ,EAAE,CACZY,KAAK,CAAC,+CAAA,CAAA,CACNC,UAAU,CAAC;gBACVC,KAAAA,EAAO;oBAAEC,SAAAA,EAAWT,QAAAA;oBAAUU,gBAAAA,EAAkBL;AAAW;AAC7D,aAAA,CAAA;AACJ,QAAA;AACF,KAAA,CAAA;AACF;;;;"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import statusActions from './permissions.mjs';
|
|
2
2
|
|
|
3
3
|
const bootstrap = async ({ strapi })=>{
|
|
4
|
-
|
|
4
|
+
try {
|
|
5
|
+
await strapi.service("admin::permission").actionProvider.registerMany(statusActions.actions);
|
|
6
|
+
} catch (error) {
|
|
7
|
+
strapi.log.error("[primershop-status-manager] Failed to register permissions:", error);
|
|
8
|
+
throw error;
|
|
9
|
+
}
|
|
5
10
|
// Register lifecycle hooks for status filtering
|
|
6
11
|
strapi.db?.lifecycles?.subscribe?.({
|
|
7
12
|
// catch all models
|
|
@@ -23,5 +28,5 @@ const bootstrap = async ({ strapi })=>{
|
|
|
23
28
|
});
|
|
24
29
|
};
|
|
25
30
|
|
|
26
|
-
export { bootstrap };
|
|
31
|
+
export { bootstrap as default };
|
|
27
32
|
//# sourceMappingURL=bootstrap.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.mjs","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import statusActions from \"./permissions\";\r\nimport type { Core } from \"@strapi/strapi\";\r\n\r\
|
|
1
|
+
{"version":3,"file":"bootstrap.mjs","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["import statusActions from \"./permissions\";\r\nimport type { Core } from \"@strapi/strapi\";\r\n\r\nconst bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\r\n try {\r\n await strapi\r\n .service(\"admin::permission\")\r\n .actionProvider.registerMany(statusActions.actions);\r\n } catch (error) {\r\n strapi.log.error(\r\n \"[primershop-status-manager] Failed to register permissions:\",\r\n error\r\n );\r\n throw error;\r\n }\r\n\r\n // Register lifecycle hooks for status filtering\r\n strapi.db?.lifecycles?.subscribe?.({\r\n // catch all models\r\n models: [\"*\"],\r\n\r\n async afterDelete(event: {\r\n model?: { uid: string };\r\n result?: { documentId: string };\r\n }) {\r\n const modelUid = event?.model?.uid;\r\n const deleted = event?.result;\r\n const documentId = deleted?.documentId;\r\n if (!modelUid || !documentId) return;\r\n\r\n await strapi.db\r\n .query(\"plugin::primershop-status-manager.status-link\")\r\n .deleteMany({\r\n where: { targetUid: modelUid, targetDocumentId: documentId },\r\n });\r\n },\r\n });\r\n};\r\n\r\nexport default bootstrap;\r\n"],"names":["bootstrap","strapi","service","actionProvider","registerMany","statusActions","actions","error","log","db","lifecycles","subscribe","models","afterDelete","event","modelUid","model","uid","deleted","result","documentId","query","deleteMany","where","targetUid","targetDocumentId"],"mappings":";;AAGA,MAAMA,SAAAA,GAAY,OAAO,EAAEC,MAAM,EAA2B,GAAA;IAC1D,IAAI;QACF,MAAMA,MAAAA,CACHC,OAAO,CAAC,mBAAA,CAAA,CACRC,cAAc,CAACC,YAAY,CAACC,aAAAA,CAAcC,OAAO,CAAA;AACtD,IAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACdN,QAAAA,MAAAA,CAAOO,GAAG,CAACD,KAAK,CACd,6DAAA,EACAA,KAAAA,CAAAA;QAEF,MAAMA,KAAAA;AACR,IAAA;;IAGAN,MAAAA,CAAOQ,EAAE,EAAEC,UAAAA,EAAYC,SAAAA,GAAY;;QAEjCC,MAAAA,EAAQ;AAAC,YAAA;AAAI,SAAA;AAEb,QAAA,MAAMC,aAAYC,KAGjB,EAAA;YACC,MAAMC,QAAAA,GAAWD,OAAOE,KAAAA,EAAOC,GAAAA;AAC/B,YAAA,MAAMC,UAAUJ,KAAAA,EAAOK,MAAAA;AACvB,YAAA,MAAMC,aAAaF,OAAAA,EAASE,UAAAA;YAC5B,IAAI,CAACL,QAAAA,IAAY,CAACK,UAAAA,EAAY;AAE9B,YAAA,MAAMnB,OAAOQ,EAAE,CACZY,KAAK,CAAC,+CAAA,CAAA,CACNC,UAAU,CAAC;gBACVC,KAAAA,EAAO;oBAAEC,SAAAA,EAAWT,QAAAA;oBAAUU,gBAAAA,EAAkBL;AAAW;AAC7D,aAAA,CAAA;AACJ,QAAA;AACF,KAAA,CAAA;AACF;;;;"}
|
package/dist/server/index.js
CHANGED
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../server/src/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../server/src/index.ts"],"sourcesContent":["import bootstrap from \"./bootstrap\";\r\nimport contentTypes from \"./content-types/index\";\r\nimport { controllers } from \"./controllers\";\r\nimport { register } from \"./register\";\r\nimport { routes } from \"./routes\";\r\nimport { services } from \"./services\";\r\n\r\nconst plugin = () => {\r\n const pluginConfig = {\r\n register,\r\n controllers,\r\n contentTypes,\r\n routes,\r\n services,\r\n bootstrap,\r\n };\r\n\r\n return pluginConfig;\r\n};\r\n\r\nexport default plugin;\r\n"],"names":["plugin","pluginConfig","register","controllers","contentTypes","routes","services","bootstrap"],"mappings":";;;;;;;;;AAOA,MAAMA,MAAAA,GAAS,IAAA;AACb,IAAA,MAAMC,YAAAA,GAAe;AACnBC,kBAAAA,iBAAAA;AACAC,qBAAAA,mBAAAA;AACAC,sBAAAA,OAAAA;AACAC,gBAAAA,cAAAA;AACAC,kBAAAA,cAAAA;AACAC,QAAAA;AACF,KAAA;IAEA,OAAON,YAAAA;AACT;;;;"}
|
package/dist/server/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../server/src/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../server/src/index.ts"],"sourcesContent":["import bootstrap from \"./bootstrap\";\r\nimport contentTypes from \"./content-types/index\";\r\nimport { controllers } from \"./controllers\";\r\nimport { register } from \"./register\";\r\nimport { routes } from \"./routes\";\r\nimport { services } from \"./services\";\r\n\r\nconst plugin = () => {\r\n const pluginConfig = {\r\n register,\r\n controllers,\r\n contentTypes,\r\n routes,\r\n services,\r\n bootstrap,\r\n };\r\n\r\n return pluginConfig;\r\n};\r\n\r\nexport default plugin;\r\n"],"names":["plugin","pluginConfig","register","controllers","contentTypes","routes","services","bootstrap"],"mappings":";;;;;;;AAOA,MAAMA,MAAAA,GAAS,IAAA;AACb,IAAA,MAAMC,YAAAA,GAAe;AACnBC,QAAAA,QAAAA;AACAC,QAAAA,WAAAA;AACAC,QAAAA,YAAAA;AACAC,QAAAA,MAAAA;AACAC,QAAAA,QAAAA;AACAC,QAAAA;AACF,KAAA;IAEA,OAAON,YAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sources":["../../server/src/permissions.ts"],"sourcesContent":["export default {\r\n actions: [\r\n {\r\n
|
|
1
|
+
{"version":3,"file":"permissions.js","sources":["../../server/src/permissions.ts"],"sourcesContent":["export default {\r\n actions: [\r\n {\r\n section: \"plugins\",\r\n displayName: \"Access Status Manager\",\r\n uid: \"main\",\r\n pluginName: \"primershop-status-manager\",\r\n },\r\n {\r\n section: \"plugins\",\r\n displayName: \"Create\",\r\n uid: \"status.create\",\r\n subCategory: \"status\",\r\n pluginName: \"primershop-status-manager\",\r\n },\r\n {\r\n section: \"plugins\",\r\n displayName: \"Read\",\r\n uid: \"status.read\",\r\n subCategory: \"status\",\r\n pluginName: \"primershop-status-manager\",\r\n aliases: [\r\n {\r\n actionId: \"plugin::content-manager.explorer.read\",\r\n subjects: [\"plugin::primershop-status-manager.status\"],\r\n },\r\n ],\r\n },\r\n {\r\n section: \"plugins\",\r\n displayName: \"Update\",\r\n uid: \"status.update\",\r\n subCategory: \"status\",\r\n pluginName: \"primershop-status-manager\",\r\n },\r\n {\r\n section: \"plugins\",\r\n displayName: \"Delete\",\r\n uid: \"status.delete\",\r\n subCategory: \"status\",\r\n pluginName: \"primershop-status-manager\",\r\n },\r\n ],\r\n};\r\n"],"names":["actions","section","displayName","uid","pluginName","subCategory","aliases","actionId","subjects"],"mappings":";;AAAA,oBAAe;IACbA,OAAAA,EAAS;AACP,QAAA;YACEC,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,uBAAA;YACbC,GAAAA,EAAK,MAAA;YACLC,UAAAA,EAAY;AACd,SAAA;AACA,QAAA;YACEH,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,QAAA;YACbC,GAAAA,EAAK,eAAA;YACLE,WAAAA,EAAa,QAAA;YACbD,UAAAA,EAAY;AACd,SAAA;AACA,QAAA;YACEH,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,MAAA;YACbC,GAAAA,EAAK,aAAA;YACLE,WAAAA,EAAa,QAAA;YACbD,UAAAA,EAAY,2BAAA;YACZE,OAAAA,EAAS;AACP,gBAAA;oBACEC,QAAAA,EAAU,uCAAA;oBACVC,QAAAA,EAAU;AAAC,wBAAA;AAA2C;AACxD;AACD;AACH,SAAA;AACA,QAAA;YACEP,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,QAAA;YACbC,GAAAA,EAAK,eAAA;YACLE,WAAAA,EAAa,QAAA;YACbD,UAAAA,EAAY;AACd,SAAA;AACA,QAAA;YACEH,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,QAAA;YACbC,GAAAA,EAAK,eAAA;YACLE,WAAAA,EAAa,QAAA;YACbD,UAAAA,EAAY;AACd;AACD;AACH,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.mjs","sources":["../../server/src/permissions.ts"],"sourcesContent":["export default {\r\n actions: [\r\n {\r\n
|
|
1
|
+
{"version":3,"file":"permissions.mjs","sources":["../../server/src/permissions.ts"],"sourcesContent":["export default {\r\n actions: [\r\n {\r\n section: \"plugins\",\r\n displayName: \"Access Status Manager\",\r\n uid: \"main\",\r\n pluginName: \"primershop-status-manager\",\r\n },\r\n {\r\n section: \"plugins\",\r\n displayName: \"Create\",\r\n uid: \"status.create\",\r\n subCategory: \"status\",\r\n pluginName: \"primershop-status-manager\",\r\n },\r\n {\r\n section: \"plugins\",\r\n displayName: \"Read\",\r\n uid: \"status.read\",\r\n subCategory: \"status\",\r\n pluginName: \"primershop-status-manager\",\r\n aliases: [\r\n {\r\n actionId: \"plugin::content-manager.explorer.read\",\r\n subjects: [\"plugin::primershop-status-manager.status\"],\r\n },\r\n ],\r\n },\r\n {\r\n section: \"plugins\",\r\n displayName: \"Update\",\r\n uid: \"status.update\",\r\n subCategory: \"status\",\r\n pluginName: \"primershop-status-manager\",\r\n },\r\n {\r\n section: \"plugins\",\r\n displayName: \"Delete\",\r\n uid: \"status.delete\",\r\n subCategory: \"status\",\r\n pluginName: \"primershop-status-manager\",\r\n },\r\n ],\r\n};\r\n"],"names":["actions","section","displayName","uid","pluginName","subCategory","aliases","actionId","subjects"],"mappings":"AAAA,oBAAe;IACbA,OAAAA,EAAS;AACP,QAAA;YACEC,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,uBAAA;YACbC,GAAAA,EAAK,MAAA;YACLC,UAAAA,EAAY;AACd,SAAA;AACA,QAAA;YACEH,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,QAAA;YACbC,GAAAA,EAAK,eAAA;YACLE,WAAAA,EAAa,QAAA;YACbD,UAAAA,EAAY;AACd,SAAA;AACA,QAAA;YACEH,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,MAAA;YACbC,GAAAA,EAAK,aAAA;YACLE,WAAAA,EAAa,QAAA;YACbD,UAAAA,EAAY,2BAAA;YACZE,OAAAA,EAAS;AACP,gBAAA;oBACEC,QAAAA,EAAU,uCAAA;oBACVC,QAAAA,EAAU;AAAC,wBAAA;AAA2C;AACxD;AACD;AACH,SAAA;AACA,QAAA;YACEP,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,QAAA;YACbC,GAAAA,EAAK,eAAA;YACLE,WAAAA,EAAa,QAAA;YACbD,UAAAA,EAAY;AACd,SAAA;AACA,QAAA;YACEH,OAAAA,EAAS,SAAA;YACTC,WAAAA,EAAa,QAAA;YACbC,GAAAA,EAAK,eAAA;YACLE,WAAAA,EAAa,QAAA;YACbD,UAAAA,EAAY;AACd;AACD;AACH,CAAA;;;;"}
|