@primershop/strapi-plugin-status-manager 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/dist/admin/components/Initializer.js +17 -0
- package/dist/admin/components/Initializer.js.map +1 -0
- package/dist/admin/components/Initializer.mjs +15 -0
- package/dist/admin/components/Initializer.mjs.map +1 -0
- package/dist/admin/components/PluginIcon.js +9 -0
- package/dist/admin/components/PluginIcon.js.map +1 -0
- package/dist/admin/components/PluginIcon.mjs +7 -0
- package/dist/admin/components/PluginIcon.mjs.map +1 -0
- package/dist/admin/components/ProductStatusField.js +104 -0
- package/dist/admin/components/ProductStatusField.js.map +1 -0
- package/dist/admin/components/ProductStatusField.mjs +102 -0
- package/dist/admin/components/ProductStatusField.mjs.map +1 -0
- package/dist/admin/components/StatusManager.js +367 -0
- package/dist/admin/components/StatusManager.js.map +1 -0
- package/dist/admin/components/StatusManager.mjs +365 -0
- package/dist/admin/components/StatusManager.mjs.map +1 -0
- package/dist/admin/index.js +46 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/index.mjs +44 -0
- package/dist/admin/index.mjs.map +1 -0
- package/dist/admin/listView/StatusFilter.js +76 -0
- package/dist/admin/listView/StatusFilter.js.map +1 -0
- package/dist/admin/listView/StatusFilter.mjs +74 -0
- package/dist/admin/listView/StatusFilter.mjs.map +1 -0
- package/dist/admin/listView/add-status-column-hook.js +34 -0
- package/dist/admin/listView/add-status-column-hook.js.map +1 -0
- package/dist/admin/listView/add-status-column-hook.mjs +32 -0
- package/dist/admin/listView/add-status-column-hook.mjs.map +1 -0
- package/dist/admin/listView/status-cell.js +28 -0
- package/dist/admin/listView/status-cell.js.map +1 -0
- package/dist/admin/listView/status-cell.mjs +26 -0
- package/dist/admin/listView/status-cell.mjs.map +1 -0
- package/dist/admin/pages/HomePage.js +51 -0
- package/dist/admin/pages/HomePage.js.map +1 -0
- package/dist/admin/pages/HomePage.mjs +49 -0
- package/dist/admin/pages/HomePage.mjs.map +1 -0
- package/dist/admin/pluginId.js +6 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +4 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/src/components/Initializer.js +13 -0
- package/dist/admin/src/components/PluginIcon.js +4 -0
- package/dist/admin/src/components/ProductStatusField.js +64 -0
- package/dist/admin/src/components/StatusManager.js +239 -0
- package/dist/admin/src/index.js +43 -0
- package/dist/admin/src/listView/StatusFilter.js +47 -0
- package/dist/admin/src/listView/add-status-column-hook.js +18 -0
- package/dist/admin/src/listView/status-cell.js +18 -0
- package/dist/admin/src/pages/HomePage.js +18 -0
- package/dist/admin/src/pluginId.js +1 -0
- package/dist/server/bootstrap.js +29 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +27 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/content-types/index.js +16 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +14 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/content-types/status-link.js +43 -0
- package/dist/server/content-types/status-link.js.map +1 -0
- package/dist/server/content-types/status-link.mjs +41 -0
- package/dist/server/content-types/status-link.mjs.map +1 -0
- package/dist/server/content-types/status.js +50 -0
- package/dist/server/content-types/status.js.map +1 -0
- package/dist/server/content-types/status.mjs +48 -0
- package/dist/server/content-types/status.mjs.map +1 -0
- package/dist/server/controllers/content.js +33 -0
- package/dist/server/controllers/content.js.map +1 -0
- package/dist/server/controllers/content.mjs +31 -0
- package/dist/server/controllers/content.mjs.map +1 -0
- package/dist/server/controllers/index.js +12 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +10 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/status.js +106 -0
- package/dist/server/controllers/status.js.map +1 -0
- package/dist/server/controllers/status.mjs +104 -0
- package/dist/server/controllers/status.mjs.map +1 -0
- package/dist/server/index.js +23 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +21 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/middlewares/add-status-field.js +48 -0
- package/dist/server/middlewares/add-status-field.js.map +1 -0
- package/dist/server/middlewares/add-status-field.mjs +46 -0
- package/dist/server/middlewares/add-status-field.mjs.map +1 -0
- package/dist/server/middlewares/filter-by-status.js +42 -0
- package/dist/server/middlewares/filter-by-status.js.map +1 -0
- package/dist/server/middlewares/filter-by-status.mjs +40 -0
- package/dist/server/middlewares/filter-by-status.mjs.map +1 -0
- package/dist/server/middlewares/filter-published.js +35 -0
- package/dist/server/middlewares/filter-published.js.map +1 -0
- package/dist/server/middlewares/filter-published.mjs +33 -0
- package/dist/server/middlewares/filter-published.mjs.map +1 -0
- package/dist/server/permissions.js +46 -0
- package/dist/server/permissions.js.map +1 -0
- package/dist/server/permissions.mjs +44 -0
- package/dist/server/permissions.mjs.map +1 -0
- package/dist/server/pluginId.js +6 -0
- package/dist/server/pluginId.js.map +1 -0
- package/dist/server/pluginId.mjs +4 -0
- package/dist/server/pluginId.mjs.map +1 -0
- package/dist/server/register.js +27 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +25 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/content-management.js +41 -0
- package/dist/server/routes/content-management.js.map +1 -0
- package/dist/server/routes/content-management.mjs +39 -0
- package/dist/server/routes/content-management.mjs.map +1 -0
- package/dist/server/routes/index.js +17 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +15 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/routes/status-management.js +122 -0
- package/dist/server/routes/status-management.js.map +1 -0
- package/dist/server/routes/status-management.mjs +120 -0
- package/dist/server/routes/status-management.mjs.map +1 -0
- package/dist/server/services/index.js +12 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +10 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/status-link.js +38 -0
- package/dist/server/services/status-link.js.map +1 -0
- package/dist/server/services/status-link.mjs +36 -0
- package/dist/server/services/status-link.mjs.map +1 -0
- package/dist/server/services/status.js +110 -0
- package/dist/server/services/status.js.map +1 -0
- package/dist/server/services/status.mjs +108 -0
- package/dist/server/services/status.mjs.map +1 -0
- package/dist/server/src/bootstrap.js +32 -0
- package/dist/server/src/config/dev.js +13 -0
- package/dist/server/src/content-types/index.js +15 -0
- package/dist/server/src/content-types/status-link.js +40 -0
- package/dist/server/src/content-types/status.js +47 -0
- package/dist/server/src/controllers/content.js +44 -0
- package/dist/server/src/controllers/index.js +9 -0
- package/dist/server/src/controllers/status.js +106 -0
- package/dist/server/src/index.js +23 -0
- package/dist/server/src/middlewares/add-status-field.js +51 -0
- package/dist/server/src/middlewares/filter-by-status.js +44 -0
- package/dist/server/src/middlewares/filter-published.js +31 -0
- package/dist/server/src/permissions.js +41 -0
- package/dist/server/src/pluginId.js +4 -0
- package/dist/server/src/register.js +28 -0
- package/dist/server/src/routes/content-management.js +34 -0
- package/dist/server/src/routes/index.js +15 -0
- package/dist/server/src/routes/status-management.js +109 -0
- package/dist/server/src/services/index.js +9 -0
- package/dist/server/src/services/status-link.js +33 -0
- package/dist/server/src/services/status.js +96 -0
- package/package.json +104 -0
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# @primershop/strapi-plugin-status-manager
|
|
2
|
+
|
|
3
|
+
A Strapi plugin that enables more status variations for your content.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @primershop/strapi-plugin-status-manager
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
1. Install the plugin in your Strapi project
|
|
14
|
+
2. The plugin will automatically register and provide additional status management functionality
|
|
15
|
+
3. Configure the plugin through the Strapi admin panel
|
|
16
|
+
|
|
17
|
+
## Development
|
|
18
|
+
|
|
19
|
+
### Prerequisites
|
|
20
|
+
|
|
21
|
+
- Node.js >= 18.0.0
|
|
22
|
+
- npm >= 6.0.0
|
|
23
|
+
|
|
24
|
+
### Setup
|
|
25
|
+
|
|
26
|
+
1. Clone the repository
|
|
27
|
+
2. Install dependencies:
|
|
28
|
+
```bash
|
|
29
|
+
npm install
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Build
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm run build
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Development Mode
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm run dev
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Publishing
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm publish
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## License
|
|
51
|
+
|
|
52
|
+
MIT
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var pluginId = require('../pluginId.js');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @type {import('react').FC<{ setPlugin: (id: string) => void }>}
|
|
8
|
+
*/ const Initializer = ({ setPlugin })=>{
|
|
9
|
+
const ref = React.useRef(setPlugin);
|
|
10
|
+
React.useEffect(()=>{
|
|
11
|
+
ref.current(pluginId.PLUGIN_ID);
|
|
12
|
+
}, []);
|
|
13
|
+
return null;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
exports.Initializer = Initializer;
|
|
17
|
+
//# sourceMappingURL=Initializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Initializer.js","sources":["../../../admin/src/components/Initializer.tsx"],"sourcesContent":["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"],"names":["Initializer","setPlugin","ref","useRef","useEffect","current","PLUGIN_ID"],"mappings":";;;;;AAIA;;AAEC,IACD,MAAMA,WAAAA,GAAc,CAAC,EAAEC,SAAS,EAAuC,GAAA;AACrE,IAAA,MAAMC,MAAMC,YAAAA,CAAOF,SAAAA,CAAAA;IAEnBG,eAAAA,CAAU,IAAA;AACRF,QAAAA,GAAAA,CAAIG,OAAO,CAACC,kBAAAA,CAAAA;AACd,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,OAAO,IAAA;AACT;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useRef, useEffect } from 'react';
|
|
2
|
+
import { PLUGIN_ID } from '../pluginId.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @type {import('react').FC<{ setPlugin: (id: string) => void }>}
|
|
6
|
+
*/ const Initializer = ({ setPlugin })=>{
|
|
7
|
+
const ref = useRef(setPlugin);
|
|
8
|
+
useEffect(()=>{
|
|
9
|
+
ref.current(PLUGIN_ID);
|
|
10
|
+
}, []);
|
|
11
|
+
return null;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { Initializer };
|
|
15
|
+
//# sourceMappingURL=Initializer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Initializer.mjs","sources":["../../../admin/src/components/Initializer.tsx"],"sourcesContent":["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"],"names":["Initializer","setPlugin","ref","useRef","useEffect","current","PLUGIN_ID"],"mappings":";;;AAIA;;AAEC,IACD,MAAMA,WAAAA,GAAc,CAAC,EAAEC,SAAS,EAAuC,GAAA;AACrE,IAAA,MAAMC,MAAMC,MAAAA,CAAOF,SAAAA,CAAAA;IAEnBG,SAAAA,CAAU,IAAA;AACRF,QAAAA,GAAAA,CAAIG,OAAO,CAACC,SAAAA,CAAAA;AACd,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,OAAO,IAAA;AACT;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginIcon.js","sources":["../../../admin/src/components/PluginIcon.tsx"],"sourcesContent":["import { CheckCircle } from \"@strapi/icons\";\r\n\r\nconst PluginIcon = () => <CheckCircle />;\r\n\r\nexport { PluginIcon };\r\n"],"names":["PluginIcon","_jsx","CheckCircle"],"mappings":";;;;;AAEA,MAAMA,UAAAA,GAAa,kBAAMC,cAAA,CAACC,iBAAAA,EAAAA,EAAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginIcon.mjs","sources":["../../../admin/src/components/PluginIcon.tsx"],"sourcesContent":["import { CheckCircle } from \"@strapi/icons\";\r\n\r\nconst PluginIcon = () => <CheckCircle />;\r\n\r\nexport { PluginIcon };\r\n"],"names":["PluginIcon","_jsx","CheckCircle"],"mappings":";;;AAEA,MAAMA,UAAAA,GAAa,kBAAMC,GAAA,CAACC,WAAAA,EAAAA,EAAAA;;;;"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var designSystem = require('@strapi/design-system');
|
|
6
|
+
var admin = require('@strapi/strapi/admin');
|
|
7
|
+
|
|
8
|
+
const ProductStatusField = ()=>{
|
|
9
|
+
const { contentType, id } = admin.unstable_useContentManagerContext();
|
|
10
|
+
const [statuses, setStatuses] = React.useState([]);
|
|
11
|
+
const [currentStatus, setCurrentStatus] = React.useState("");
|
|
12
|
+
const [message, setMessage] = React.useState("");
|
|
13
|
+
const { get, put } = admin.useFetchClient();
|
|
14
|
+
const handleStatusChange = React.useCallback(async (newStatus)=>{
|
|
15
|
+
if (!id) {
|
|
16
|
+
setMessage("Save the product first and then change the status");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
await put(`primershop-status-manager/content-status`, {
|
|
21
|
+
contentTypeUid: "api::product.product",
|
|
22
|
+
contentDocumentId: id,
|
|
23
|
+
statusId: statuses.find((status)=>status.name === newStatus)?.documentId
|
|
24
|
+
});
|
|
25
|
+
setMessage(`Status updated ${currentStatus ? `from ${currentStatus}` : ""} to ${newStatus}`);
|
|
26
|
+
setCurrentStatus(newStatus || "");
|
|
27
|
+
} catch (error) {
|
|
28
|
+
setMessage("Error updating status");
|
|
29
|
+
console.error("Error updating status:", error);
|
|
30
|
+
}
|
|
31
|
+
}, [
|
|
32
|
+
id,
|
|
33
|
+
statuses,
|
|
34
|
+
currentStatus,
|
|
35
|
+
put
|
|
36
|
+
]);
|
|
37
|
+
React.useEffect(()=>{
|
|
38
|
+
async function fetchCurrentStatus() {
|
|
39
|
+
try {
|
|
40
|
+
const { data: productData } = await get(`primershop-status-manager/content-status?contentDocumentId=${id}&contentTypeUid=api::product.product`);
|
|
41
|
+
const status = productData?.status;
|
|
42
|
+
if (status && status.name) return setCurrentStatus(status.name);
|
|
43
|
+
if (statuses.length) return handleStatusChange(statuses[0].name);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
console.error("Error fetching product status:", error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (id && !currentStatus.length) fetchCurrentStatus();
|
|
49
|
+
if (!id && statuses.length) setCurrentStatus(statuses[0].name);
|
|
50
|
+
}, [
|
|
51
|
+
id,
|
|
52
|
+
statuses,
|
|
53
|
+
get
|
|
54
|
+
]);
|
|
55
|
+
React.useEffect(()=>{
|
|
56
|
+
async function fetchStatuses() {
|
|
57
|
+
try {
|
|
58
|
+
const { data } = await get("primershop-status-manager/statuses");
|
|
59
|
+
setStatuses(data);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error("Error fetching statuses:", error);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
fetchStatuses();
|
|
65
|
+
}, [
|
|
66
|
+
get
|
|
67
|
+
]);
|
|
68
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
69
|
+
direction: "column",
|
|
70
|
+
justifyContent: "center",
|
|
71
|
+
alignItems: "stretch",
|
|
72
|
+
width: "100%",
|
|
73
|
+
children: [
|
|
74
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
75
|
+
padding: 2,
|
|
76
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
|
|
77
|
+
variant: "sigma",
|
|
78
|
+
children: [
|
|
79
|
+
contentType?.info.displayName,
|
|
80
|
+
" status"
|
|
81
|
+
]
|
|
82
|
+
})
|
|
83
|
+
}),
|
|
84
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
|
|
85
|
+
placeholder: currentStatus,
|
|
86
|
+
onChange: handleStatusChange,
|
|
87
|
+
children: statuses.map((status)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
|
|
88
|
+
value: status.name,
|
|
89
|
+
children: status.name
|
|
90
|
+
}, status.documentId))
|
|
91
|
+
}),
|
|
92
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
93
|
+
padding: 2,
|
|
94
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
95
|
+
variant: "sigma",
|
|
96
|
+
children: message
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
]
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
exports.ProductStatusField = ProductStatusField;
|
|
104
|
+
//# sourceMappingURL=ProductStatusField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductStatusField.js","sources":["../../../admin/src/components/ProductStatusField.tsx"],"sourcesContent":["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"],"names":["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","useEffect","fetchCurrentStatus","data","productData","length","fetchStatuses","_jsxs","Flex","direction","justifyContent","alignItems","width","_jsx","Box","padding","Typography","variant","info","displayName","SingleSelect","placeholder","onChange","map","SingleSelectOption","value"],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
3
|
+
import { Flex, Box, Typography, SingleSelect, SingleSelectOption } from '@strapi/design-system';
|
|
4
|
+
import { unstable_useContentManagerContext, useFetchClient } from '@strapi/strapi/admin';
|
|
5
|
+
|
|
6
|
+
const ProductStatusField = ()=>{
|
|
7
|
+
const { contentType, id } = unstable_useContentManagerContext();
|
|
8
|
+
const [statuses, setStatuses] = useState([]);
|
|
9
|
+
const [currentStatus, setCurrentStatus] = useState("");
|
|
10
|
+
const [message, setMessage] = useState("");
|
|
11
|
+
const { get, put } = useFetchClient();
|
|
12
|
+
const handleStatusChange = useCallback(async (newStatus)=>{
|
|
13
|
+
if (!id) {
|
|
14
|
+
setMessage("Save the product first and then change the status");
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
await put(`primershop-status-manager/content-status`, {
|
|
19
|
+
contentTypeUid: "api::product.product",
|
|
20
|
+
contentDocumentId: id,
|
|
21
|
+
statusId: statuses.find((status)=>status.name === newStatus)?.documentId
|
|
22
|
+
});
|
|
23
|
+
setMessage(`Status updated ${currentStatus ? `from ${currentStatus}` : ""} to ${newStatus}`);
|
|
24
|
+
setCurrentStatus(newStatus || "");
|
|
25
|
+
} catch (error) {
|
|
26
|
+
setMessage("Error updating status");
|
|
27
|
+
console.error("Error updating status:", error);
|
|
28
|
+
}
|
|
29
|
+
}, [
|
|
30
|
+
id,
|
|
31
|
+
statuses,
|
|
32
|
+
currentStatus,
|
|
33
|
+
put
|
|
34
|
+
]);
|
|
35
|
+
useEffect(()=>{
|
|
36
|
+
async function fetchCurrentStatus() {
|
|
37
|
+
try {
|
|
38
|
+
const { data: productData } = await get(`primershop-status-manager/content-status?contentDocumentId=${id}&contentTypeUid=api::product.product`);
|
|
39
|
+
const status = productData?.status;
|
|
40
|
+
if (status && status.name) return setCurrentStatus(status.name);
|
|
41
|
+
if (statuses.length) return handleStatusChange(statuses[0].name);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.error("Error fetching product status:", error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (id && !currentStatus.length) fetchCurrentStatus();
|
|
47
|
+
if (!id && statuses.length) setCurrentStatus(statuses[0].name);
|
|
48
|
+
}, [
|
|
49
|
+
id,
|
|
50
|
+
statuses,
|
|
51
|
+
get
|
|
52
|
+
]);
|
|
53
|
+
useEffect(()=>{
|
|
54
|
+
async function fetchStatuses() {
|
|
55
|
+
try {
|
|
56
|
+
const { data } = await get("primershop-status-manager/statuses");
|
|
57
|
+
setStatuses(data);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error("Error fetching statuses:", error);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
fetchStatuses();
|
|
63
|
+
}, [
|
|
64
|
+
get
|
|
65
|
+
]);
|
|
66
|
+
return /*#__PURE__*/ jsxs(Flex, {
|
|
67
|
+
direction: "column",
|
|
68
|
+
justifyContent: "center",
|
|
69
|
+
alignItems: "stretch",
|
|
70
|
+
width: "100%",
|
|
71
|
+
children: [
|
|
72
|
+
/*#__PURE__*/ jsx(Box, {
|
|
73
|
+
padding: 2,
|
|
74
|
+
children: /*#__PURE__*/ jsxs(Typography, {
|
|
75
|
+
variant: "sigma",
|
|
76
|
+
children: [
|
|
77
|
+
contentType?.info.displayName,
|
|
78
|
+
" status"
|
|
79
|
+
]
|
|
80
|
+
})
|
|
81
|
+
}),
|
|
82
|
+
/*#__PURE__*/ jsx(SingleSelect, {
|
|
83
|
+
placeholder: currentStatus,
|
|
84
|
+
onChange: handleStatusChange,
|
|
85
|
+
children: statuses.map((status)=>/*#__PURE__*/ jsx(SingleSelectOption, {
|
|
86
|
+
value: status.name,
|
|
87
|
+
children: status.name
|
|
88
|
+
}, status.documentId))
|
|
89
|
+
}),
|
|
90
|
+
/*#__PURE__*/ jsx(Box, {
|
|
91
|
+
padding: 2,
|
|
92
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
93
|
+
variant: "sigma",
|
|
94
|
+
children: message
|
|
95
|
+
})
|
|
96
|
+
})
|
|
97
|
+
]
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export { ProductStatusField };
|
|
102
|
+
//# sourceMappingURL=ProductStatusField.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductStatusField.mjs","sources":["../../../admin/src/components/ProductStatusField.tsx"],"sourcesContent":["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"],"names":["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","useEffect","fetchCurrentStatus","data","productData","length","fetchStatuses","_jsxs","Flex","direction","justifyContent","alignItems","width","_jsx","Box","padding","Typography","variant","info","displayName","SingleSelect","placeholder","onChange","map","SingleSelectOption","value"],"mappings":"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"}
|