@primershop/strapi-plugin-status-manager 0.0.16 → 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../server/src/permissions.ts","../../server/src/bootstrap.ts","../../server/src/content-types/status.ts","../../server/src/content-types/status-link.ts","../../server/src/content-types/index.ts","../../server/src/controllers/content.ts","../../server/src/controllers/status.ts","../../server/src/controllers/index.ts","../../server/src/pluginId.ts","../../server/src/middlewares/add-status-field.ts","../../server/src/middlewares/filter-by-status.ts","../../server/src/middlewares/filter-published.ts","../../server/src/register.ts","../../server/src/routes/status-management.ts","../../server/src/routes/content-management.ts","../../server/src/routes/index.ts","../../server/src/services/status.ts","../../server/src/services/status-link.ts","../../server/src/services/index.ts","../../server/src/index.ts"],"sourcesContent":["export default [\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","import permissions from \"./permissions\";\r\nimport type { Core } from \"@strapi/strapi\";\r\n\r\nconst bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\r\n try {\r\n strapi.admin.services.permission.actionProvider.registerMany(\r\n permissions\r\n );\r\n strapi.log.info(\r\n `[primershop-status-manager] Registered ${permissions.length} permission actions`\r\n );\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","export default {\r\n kind: \"collectionType\",\r\n collectionName: \"status\",\r\n info: {\r\n singularName: \"status\",\r\n pluralName: \"statuses\",\r\n displayName: \"Status\",\r\n description: \"Status for products\",\r\n },\r\n options: {\r\n draftAndPublish: false,\r\n },\r\n pluginOptions: {\r\n \"content-manager\": {\r\n visible: false,\r\n },\r\n \"content-type-builder\": {\r\n visible: false,\r\n },\r\n },\r\n attributes: {\r\n name: {\r\n type: \"string\",\r\n minLength: 1,\r\n maxLength: 50,\r\n required: true,\r\n configurable: false,\r\n },\r\n published: {\r\n type: \"boolean\",\r\n default: false,\r\n },\r\n order: {\r\n type: \"integer\",\r\n default: 0,\r\n },\r\n links: {\r\n type: \"relation\",\r\n relation: \"oneToMany\",\r\n target: \"plugin::primershop-status-manager.status-link\",\r\n mappedBy: \"status\",\r\n configurable: false,\r\n },\r\n },\r\n};\r\n","export default {\r\n kind: \"collectionType\",\r\n collectionName: \"status_links\",\r\n info: {\r\n singularName: \"status-link\",\r\n pluralName: \"status-links\",\r\n displayName: \"Status Link\",\r\n description:\r\n \"Association between any content type document and a single status\",\r\n },\r\n options: {\r\n draftAndPublish: false,\r\n },\r\n pluginOptions: {\r\n \"content-manager\": {\r\n visible: false,\r\n },\r\n \"content-type-builder\": {\r\n visible: false,\r\n },\r\n },\r\n attributes: {\r\n targetUid: {\r\n type: \"string\",\r\n required: true,\r\n },\r\n targetDocumentId: {\r\n type: \"string\",\r\n required: true,\r\n },\r\n status: {\r\n type: \"relation\",\r\n relation: \"manyToOne\",\r\n target: \"plugin::primershop-status-manager.status\",\r\n required: false,\r\n configurable: false,\r\n },\r\n },\r\n} as const;\r\n","import status from \"./status\";\r\nimport statusLink from \"./status-link\";\r\n\r\nexport default {\r\n status: {\r\n schema: status,\r\n },\r\n \"status-link\": {\r\n schema: statusLink,\r\n },\r\n};\r\n","import type { Core } from \"@strapi/strapi\";\r\nimport type { Schema, ContentType } from \"@strapi/types/dist/uid\";\r\nimport type { Context } from \"koa\";\r\n\r\nconst content = ({ strapi }: { strapi: Core.Strapi }): Core.Controller => ({\r\n async getStatusForTarget(ctx: Context) {\r\n const requestParams = ctx.request.URL.searchParams;\r\n const contentTypeUid = requestParams.get(\"contentTypeUid\") as Schema;\r\n if (!strapi.getModel(contentTypeUid))\r\n return ctx.notFound(\"Unknown contentTypeUid\");\r\n\r\n const contentDocumentId = requestParams.get(\"contentDocumentId\") as string;\r\n const exists = await strapi\r\n .documents(contentTypeUid as ContentType)\r\n .findOne({\r\n documentId: contentDocumentId,\r\n });\r\n if (!exists) return ctx.notFound(\"Target document not found\");\r\n\r\n const link = await strapi\r\n .plugin(\"primershop-status-manager\")\r\n .service(\"statusLink\")\r\n .getForTarget(contentTypeUid as string, contentDocumentId);\r\n return ctx.send({ status: link?.status ?? null });\r\n },\r\n\r\n async setStatusForTarget(ctx: Context) {\r\n const { contentTypeUid, contentDocumentId, statusId } = ctx.request\r\n .body as {\r\n contentTypeUid: Schema;\r\n contentDocumentId: string;\r\n statusId: string;\r\n };\r\n\r\n if (!strapi.getModel(contentTypeUid))\r\n return ctx.notFound(\"Unknown contentTypeUid\");\r\n\r\n const exists = await strapi\r\n .documents(contentTypeUid as ContentType)\r\n .findOne({\r\n documentId: contentDocumentId,\r\n });\r\n if (!exists) return ctx.notFound(\"Target document not found\");\r\n\r\n const link = await strapi\r\n .plugin(\"primershop-status-manager\")\r\n .service(\"statusLink\")\r\n .setForTarget(contentTypeUid as string, contentDocumentId, statusId);\r\n return ctx.send({ status: link.status });\r\n },\r\n});\r\n\r\nexport { content };\r\n","import type { Core } from \"@strapi/strapi\";\r\nimport type { Context } from \"koa\";\r\n\r\nconst status = ({ strapi }: { strapi: Core.Strapi }): Core.Controller => ({\r\n async listStatuses(ctx: Context) {\r\n try {\r\n const statuses = await strapi\r\n .documents(\"plugin::primershop-status-manager.status\")\r\n .findMany({\r\n sort: { order: \"asc\" },\r\n });\r\n return ctx.send(statuses);\r\n } catch (err) {\r\n console.error(\"❌ Status controller: find error:\", err);\r\n ctx.throw(500, err as string);\r\n }\r\n },\r\n\r\n async create(ctx: Context) {\r\n try {\r\n const { name, published = false } = ctx.request.body;\r\n\r\n // Validate name (only Latin characters)\r\n if (!/^[a-zA-Z\\s]+$/.test(name)) {\r\n return ctx.badRequest(\r\n \"Status name must contain only Latin characters.\"\r\n );\r\n }\r\n\r\n // Get the highest order value\r\n const existingStatuses = await strapi\r\n .documents(\"plugin::primershop-status-manager.status\")\r\n .findMany({\r\n orderBy: { order: \"desc\" },\r\n limit: 1,\r\n });\r\n\r\n const newOrder =\r\n existingStatuses.length > 0 ? existingStatuses[0].order + 1 : 0;\r\n\r\n // Create status\r\n const newStatus = await strapi\r\n .documents(\"plugin::primershop-status-manager.status\")\r\n .create({\r\n data: {\r\n name,\r\n published,\r\n order: newOrder,\r\n },\r\n });\r\n\r\n return ctx.send(newStatus);\r\n } catch (error) {\r\n console.error(\"Status controller: create error:\", error);\r\n ctx.internalServerError(`Error adding status: ${error}`);\r\n }\r\n },\r\n\r\n async reorder(ctx: Context) {\r\n try {\r\n const { statuses } = ctx.request.body;\r\n\r\n if (!Array.isArray(statuses)) {\r\n return ctx.badRequest(\"Invalid data format\");\r\n }\r\n\r\n // Update each status with new order\r\n await Promise.all(\r\n statuses.map(({ documentId, order }) =>\r\n strapi.documents(\"plugin::primershop-status-manager.status\").update({\r\n documentId,\r\n data: { order } as any,\r\n })\r\n )\r\n );\r\n\r\n ctx.send({ message: \"Order updated successfully\" });\r\n } catch (error) {\r\n console.error(\"Status controller: reorder error:\", error);\r\n ctx.internalServerError(`Error updating order: ${error}`);\r\n }\r\n },\r\n\r\n async publish(ctx: Context) {\r\n try {\r\n const { id } = ctx.params;\r\n const { published } = ctx.request.body;\r\n\r\n await strapi\r\n .documents(\"plugin::primershop-status-manager.status\")\r\n .update({\r\n documentId: id,\r\n data: { published } as any,\r\n });\r\n\r\n ctx.send({ message: \"Status updated successfully\" });\r\n } catch (error) {\r\n console.error(\"Status controller: publish error:\", error);\r\n ctx.internalServerError(`Error updating status: ${error}`);\r\n }\r\n },\r\n\r\n async delete(ctx: Context) {\r\n try {\r\n const { statusId } = ctx.request.body;\r\n\r\n if (!statusId) {\r\n return ctx.badRequest(\"Status ID is required.\");\r\n }\r\n\r\n // Delete the status\r\n await strapi\r\n .documents(\"plugin::primershop-status-manager.status\")\r\n .delete({\r\n documentId: statusId,\r\n });\r\n\r\n return ctx.send({ message: \"Status deleted successfully\" });\r\n } catch (error) {\r\n console.error(\"Status controller: delete error:\", error);\r\n ctx.internalServerError(`Error deleting status: ${error}`);\r\n }\r\n },\r\n});\r\n\r\nexport { status };\r\n","import { content } from \"./content\";\r\nimport { status } from \"./status\";\r\n\r\nexport default {\r\n status_controller: status,\r\n content_controller: content\r\n};\r\n","export const PLUGIN_ID = \"primershop-status-manager\";\r\n","import {\r\n AnyDocument,\r\n Middleware as DocumentMiddleware,\r\n} from \"@strapi/types/dist/modules/documents\";\r\n\r\nexport default async (\r\n context: DocumentMiddleware.Context,\r\n next: () => Promise<\r\n | number\r\n | AnyDocument\r\n | AnyDocument[]\r\n | { documentId: string; entries: AnyDocument[] }\r\n >\r\n) => {\r\n const uid = context.uid;\r\n if (!uid.includes(\"api::\")) {\r\n return next();\r\n }\r\n\r\n const result = await next();\r\n\r\n let documentIds: string[] = [];\r\n if (Array.isArray(result)) {\r\n documentIds = result\r\n .map((doc: AnyDocument) => doc.documentId)\r\n .filter(Boolean);\r\n } else if (result && typeof result === \"object\" && \"documentId\" in result) {\r\n documentIds = [(result as AnyDocument).documentId].filter(Boolean);\r\n }\r\n\r\n if (documentIds.length === 0) {\r\n return result;\r\n }\r\n\r\n try {\r\n const statusLinks = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status-link\")\r\n .findMany({\r\n populate: {\r\n status: true,\r\n },\r\n where: {\r\n targetUid: uid,\r\n targetDocumentId: { $in: documentIds },\r\n },\r\n });\r\n\r\n if (Array.isArray(result)) {\r\n result.forEach((doc: AnyDocument) => {\r\n doc.statusField =\r\n statusLinks.find((link) => link.targetDocumentId === doc.documentId)\r\n ?.status || undefined;\r\n });\r\n }\r\n if (result && typeof result === \"object\") {\r\n (result as AnyDocument).statusField =\r\n statusLinks.find(\r\n (link) => link.targetDocumentId === (result as AnyDocument).documentId\r\n )?.status || undefined;\r\n }\r\n } catch (error) {\r\n // If status enrichment fails, just return original result\r\n console.error(\"primershop-status-manager: status enrichment error\", error);\r\n }\r\n\r\n return result;\r\n};\r\n","import {\r\n AnyDocument,\r\n Middleware as DocumentMiddleware,\r\n} from \"@strapi/types/dist/modules/documents\";\r\nimport { errors } from \"@strapi/utils\";\r\n\r\nexport default async (\r\n context: DocumentMiddleware.Context,\r\n next: () => Promise<\r\n | number\r\n | AnyDocument\r\n | AnyDocument[]\r\n | { documentId: string; entries: AnyDocument[] }\r\n >\r\n) => {\r\n const uid = context.uid;\r\n if (!uid.includes(\"api::\")) {\r\n return next();\r\n }\r\n const paramKeys = Object.keys(context.params || {});\r\n\r\n if (!paramKeys.includes(\"statusName\")) {\r\n return next();\r\n }\r\n const desiredStatus = context.params[\"statusName\"];\r\n\r\n if (!desiredStatus || desiredStatus === \"all\") return next();\r\n\r\n const isValid = await strapi\r\n .plugin(\"primershop-status-manager\")\r\n .service(\"status\")\r\n .isValidStatus(desiredStatus);\r\n if (!isValid)\r\n throw new errors.ValidationError(`Invalid status: ${desiredStatus}`);\r\n\r\n const status = await strapi\r\n .plugin(\"primershop-status-manager\")\r\n .service(\"status\")\r\n .getStatusByName(desiredStatus);\r\n if (!status) {\r\n throw new errors.ValidationError(`Status not found: ${desiredStatus}`);\r\n }\r\n\r\n const statusLinks = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status-link\")\r\n .findMany({\r\n where: {\r\n targetUid: uid,\r\n status: status.id,\r\n },\r\n select: [\"targetDocumentId\"],\r\n });\r\n\r\n const allowedDocumentIds = statusLinks.map((link) => link.targetDocumentId);\r\n\r\n context.params[\"filters\"] = {\r\n ...context.params[\"filters\"],\r\n documentId: { $in: allowedDocumentIds },\r\n };\r\n\r\n return next();\r\n};\r\n","import {\r\n AnyDocument,\r\n Middleware as DocumentMiddleware,\r\n} from \"@strapi/types/dist/modules/documents\";\r\n\r\nexport default async (\r\n context: DocumentMiddleware.Context,\r\n next: () => Promise<\r\n | number\r\n | AnyDocument\r\n | AnyDocument[]\r\n | { documentId: string; entries: AnyDocument[] }\r\n >\r\n) => {\r\n const uid = context.uid;\r\n if (!uid.includes(\"api::\")) {\r\n return next();\r\n }\r\n\r\n const params = context.params;\r\n if ((!params && !params[\"status\"]) || params[\"statusName\"]) return next();\r\n\r\n const unpublishedStatusLinks = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status-link\")\r\n .findMany({\r\n populate: {\r\n status: true,\r\n },\r\n where: {\r\n targetUid: uid,\r\n status: {\r\n published: false,\r\n },\r\n },\r\n select: [\"targetDocumentId\"],\r\n });\r\n\r\n const unpublishedDocumentIds = unpublishedStatusLinks.map(\r\n (link) => link.targetDocumentId\r\n );\r\n\r\n context.params[\"filters\"] = {\r\n ...context.params[\"filters\"],\r\n documentId: { $notIn: unpublishedDocumentIds },\r\n };\r\n\r\n return next();\r\n};\r\n","import { PLUGIN_ID } from \"./pluginId\";\r\nimport type { Core } from \"@strapi/strapi\";\r\nimport addStatusField from \"./middlewares/add-status-field\";\r\nimport filterByStatus from \"./middlewares/filter-by-status\";\r\nimport filterPublished from \"./middlewares/filter-published\";\r\n\r\nconst register = ({ strapi }: { strapi: Core.Strapi }): void => {\r\n strapi.customFields.register({\r\n name: \"statusName\",\r\n plugin: PLUGIN_ID,\r\n type: \"string\",\r\n });\r\n\r\n strapi.documents.use(filterByStatus);\r\n strapi.documents.use(addStatusField);\r\n strapi.documents.use(filterPublished);\r\n};\r\n\r\nexport default register;","export default [\r\n {\r\n method: \"GET\",\r\n path: \"/statuses\",\r\n handler: \"status_controller.listStatuses\",\r\n config: {\r\n policies: [\r\n {\r\n name: \"admin::hasPermissions\",\r\n config: {\r\n actions: [\"plugin::primershop-status-manager.status.read\"],\r\n },\r\n },\r\n ],\r\n },\r\n description: \"Get all statuses\",\r\n tag: {\r\n plugin: \"primershop-status-manager\",\r\n name: \"statuses\",\r\n actionType: \"findMany\",\r\n },\r\n },\r\n {\r\n method: \"POST\",\r\n path: \"/status\",\r\n handler: \"status_controller.create\",\r\n config: {\r\n policies: [\r\n {\r\n name: \"admin::hasPermissions\",\r\n config: {\r\n actions: [\"plugin::primershop-status-manager.status.create\"],\r\n },\r\n },\r\n ],\r\n },\r\n description: \"Create a new status\",\r\n tag: {\r\n plugin: \"primershop-status-manager\",\r\n name: \"Status\",\r\n actionType: \"create\",\r\n },\r\n },\r\n {\r\n method: \"PUT\",\r\n path: \"/statuses/reorder\",\r\n handler: \"status_controller.reorder\",\r\n config: {\r\n policies: [\r\n {\r\n name: \"admin::hasPermissions\",\r\n config: {\r\n actions: [\"plugin::primershop-status-manager.status.update\"],\r\n },\r\n },\r\n ],\r\n description: \"Reorder statuses\",\r\n tag: {\r\n plugin: \"primershop-status-manager\",\r\n name: \"Status\",\r\n actionType: \"update\",\r\n },\r\n },\r\n },\r\n {\r\n method: \"PUT\",\r\n path: \"/statuses/delete\",\r\n handler: \"status_controller.delete\",\r\n config: {\r\n policies: [\r\n {\r\n name: \"admin::hasPermissions\",\r\n config: {\r\n actions: [\"plugin::primershop-status-manager.status.delete\"],\r\n },\r\n },\r\n ],\r\n description: \"Delete a status\",\r\n tag: {\r\n plugin: \"primershop-status-manager\",\r\n name: \"Status\",\r\n actionType: \"delete\",\r\n },\r\n },\r\n },\r\n {\r\n method: \"PUT\",\r\n path: \"/statuses/:id\",\r\n handler: \"status_controller.publish\",\r\n config: {\r\n policies: [\r\n {\r\n name: \"admin::hasPermissions\",\r\n config: {\r\n actions: [\"plugin::primershop-status-manager.status.update\"],\r\n },\r\n },\r\n ],\r\n description: \"Update status publish state\",\r\n tag: {\r\n plugin: \"primershop-status-manager\",\r\n name: \"Status\",\r\n actionType: \"update\",\r\n },\r\n },\r\n },\r\n];\r\n","export default [\r\n {\r\n method: \"GET\",\r\n path: \"/content-status\",\r\n handler: \"content_controller.getStatusForTarget\",\r\n config: {\r\n policies: [\r\n {\r\n name: \"admin::hasPermissions\",\r\n config: {\r\n actions: [\"plugin::primershop-status-manager.status.read\"],\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n method: \"PUT\",\r\n path: \"/content-status\",\r\n handler: \"content_controller.setStatusForTarget\",\r\n config: {\r\n policies: [\r\n {\r\n name: \"admin::hasPermissions\",\r\n config: {\r\n actions: [\"plugin::primershop-status-manager.status.update\"],\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n];\r\n","import statusManagement from \"./status-management\";\r\nimport contentManagement from \"./content-management\";\r\n\r\nexport default {\r\n admin: {\r\n type: \"admin\",\r\n routes: [...statusManagement, ...contentManagement],\r\n },\r\n};\r\n\r\n","import type { Core } from \"@strapi/strapi\";\r\nimport type { PluginStatusManagerStatusInput } from \"../types/contentTypes\";\r\n\r\nexport const statusService = ({ strapi }: { strapi: Core.Strapi }) => ({\r\n async isValidStatus(code: string): Promise<boolean> {\r\n try {\r\n const row = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status\")\r\n .findOne({ where: { name: code }, select: [\"id\"] } as unknown as never);\r\n return !!row;\r\n } catch {\r\n return false;\r\n }\r\n },\r\n\r\n async getStatusByName(name: string) {\r\n return strapi.db\r\n .query(\"plugin::primershop-status-manager.status\")\r\n .findOne({ where: { name } });\r\n },\r\n\r\n isStatusEnabledFor(uid: string): boolean {\r\n return !!strapi.getModel(uid as unknown as never);\r\n },\r\n async find() {\r\n const result = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status\")\r\n .findMany({\r\n orderBy: { order: \"asc\" },\r\n });\r\n\r\n return result;\r\n },\r\n\r\n async findOne(id: number) {\r\n const result = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status\")\r\n .findOne({\r\n where: { id },\r\n });\r\n return result;\r\n },\r\n\r\n async createStatus(data: PluginStatusManagerStatusInput) {\r\n const result = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status\")\r\n .create({\r\n data: {\r\n name: data.name,\r\n published: data.published ?? false,\r\n order: data.order ?? 0,\r\n },\r\n });\r\n\r\n return result;\r\n },\r\n\r\n async findProductsByStatus(statusId: number) {\r\n return strapi.db.query(\"api::product.product\").findMany({\r\n where: { status: statusId },\r\n });\r\n },\r\n\r\n async updateProductStatus(productId: number, statusId: number) {\r\n return strapi.db.query(\"api::product.product\").update({\r\n where: { id: productId },\r\n data: { status: statusId },\r\n });\r\n },\r\n\r\n async delete(id: number) {\r\n return strapi.db.query(\"plugin::primershop-status-manager.status\").delete({\r\n where: { id },\r\n });\r\n },\r\n\r\n async deleteStatus(statusId: number, replacementId?: number) {\r\n // Find status by documentId\r\n const status = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status\")\r\n .findOne({\r\n where: { documentId: statusId },\r\n });\r\n\r\n if (!status) {\r\n throw new Error(\"Status not found\");\r\n }\r\n\r\n if (replacementId) {\r\n const replacementStatus = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status\")\r\n .findOne({\r\n where: { documentId: replacementId },\r\n });\r\n\r\n if (!replacementStatus) {\r\n throw new Error(\"Replacement status not found\");\r\n }\r\n }\r\n\r\n // Delete the status\r\n await strapi.db.query(\"plugin::primershop-status-manager.status\").delete({\r\n where: { documentId: statusId },\r\n });\r\n\r\n return true;\r\n },\r\n});\r\n","import type { Core } from \"@strapi/strapi\";\r\n\r\nexport const statusLinkService = ({ strapi }: { strapi: Core.Strapi }) => ({\r\n async getForTarget(targetUid: string, targetDocumentId: string) {\r\n const link = await strapi.db\r\n .query(\"plugin::primershop-status-manager.status-link\")\r\n .findOne({\r\n where: { targetUid, targetDocumentId },\r\n populate: { status: true },\r\n });\r\n return link ?? null;\r\n },\r\n\r\n async setForTarget(\r\n targetUid: string,\r\n targetDocumentId: string,\r\n statusDocumentId: string\r\n ) {\r\n // Create status link\r\n await strapi.db\r\n .query(\"plugin::primershop-status-manager.status-link\")\r\n .deleteMany({ where: { targetUid, targetDocumentId } });\r\n\r\n const created = await strapi\r\n .documents(\"plugin::primershop-status-manager.status-link\")\r\n .create({\r\n data: {\r\n targetUid,\r\n targetDocumentId,\r\n status: {\r\n set: statusDocumentId,\r\n },\r\n },\r\n });\r\n return created;\r\n },\r\n});\r\n","import { statusService } from \"./status\";\r\nimport { statusLinkService } from \"./status-link\";\r\n\r\nexport default {\r\n status: statusService,\r\n statusLink: statusLinkService,\r\n};\r\n","import bootstrap from \"./bootstrap\";\r\nimport contentTypes from \"./content-types\";\r\nimport controllers from \"./controllers\";\r\nimport register from \"./register\";\r\nimport routes from \"./routes\";\r\nimport services from \"./services\";\r\n\r\nexport default {\r\n register,\r\n controllers,\r\n contentTypes,\r\n routes,\r\n services,\r\n bootstrap\r\n };\r\n"],"names":["strapi","status"],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "name": "@primershop/strapi-plugin-status-manager",
3
- "version": "0.0.16",
4
- "description": "Enables more status variations for Strapi (v0.0.16)",
3
+ "version": "0.0.17",
4
+ "description": "Enables more status variations for Strapi (v0.0.17)",
5
5
  "exports": {
6
6
  "./strapi-admin": {
7
7
  "import": "./dist/admin/index.mjs",
8
8
  "require": "./dist/admin/index.js",
9
+ "source": "./admin/src/index.ts",
9
10
  "default": "./dist/admin/index.js"
10
11
  },
11
12
  "./strapi-server": {
12
13
  "import": "./dist/server/index.mjs",
14
+ "source": "./server/src/index.ts",
13
15
  "require": "./dist/server/index.js",
14
16
  "default": "./dist/server/index.js"
15
17
  },
@@ -19,7 +21,8 @@
19
21
  "dist/"
20
22
  ],
21
23
  "scripts": {
22
- "build": "npm-run-all clean --parallel build:code",
24
+ "build": "pack-up build",
25
+ "check": "pack-up check",
23
26
  "build:code": "rollup -c",
24
27
  "build:dev": "rollup -c rollup.config.dev.mjs",
25
28
  "build:types": "run-p build:types:server build:types:admin",
@@ -73,9 +76,9 @@
73
76
  "@strapi/admin": "^5.29.0",
74
77
  "@strapi/content-manager": "^5.29.0",
75
78
  "@strapi/types": "^5.29.0",
79
+ "@types/node": "^25.0.2",
76
80
  "@types/react": "^18.3.1",
77
81
  "@types/react-dom": "^18.3.1",
78
- "@types/node": "^25.0.2",
79
82
  "cross-env": "^10.0.0",
80
83
  "eslint": "9.39.2",
81
84
  "jest": "^30.2.0",
@@ -92,11 +95,12 @@
92
95
  "kind": "plugin",
93
96
  "name": "primershop-status-manager",
94
97
  "displayName": "Status Manager",
95
- "description": "Manages content statuses (v0.0.16)"
98
+ "description": "Manages content statuses (v0.0.17)"
96
99
  },
97
100
  "dependencies": {
98
101
  "@strapi/design-system": "^2.0.0-rc.27",
99
102
  "@strapi/icons": "^2.0.0-rc.27",
103
+ "@strapi/pack-up": "^5.1.1",
100
104
  "@strapi/utils": "^5.29.0",
101
105
  "react": "18.3.1",
102
106
  "react-dom": "18.3.1",
@@ -1,412 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var designSystem = require('@strapi/design-system');
5
- var admin = require('@strapi/strapi/admin');
6
- var React = require('react');
7
- var combine = require('@atlaskit/pragmatic-drag-and-drop/combine');
8
- var adapter = require('@atlaskit/pragmatic-drag-and-drop/element/adapter');
9
- var pointerOutsideOfPreview = require('@atlaskit/pragmatic-drag-and-drop/element/pointer-outside-of-preview');
10
- var setCustomNativeDragPreview = require('@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview');
11
- var reorder = require('@atlaskit/pragmatic-drag-and-drop/reorder');
12
- var closestEdge = require('@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge');
13
- var icons = require('@strapi/icons');
14
- var index = require('./index-mATo7IeG.js');
15
-
16
- const StatusManager = ()=>{
17
- const [statuses, setStatuses] = React.useState([]);
18
- const [newStatus, setNewStatus] = React.useState("");
19
- const [statusToDelete, setStatusToDelete] = React.useState(null);
20
- const [replacementStatus, setReplacementStatus] = React.useState("");
21
- const { get, post, put } = admin.useFetchClient();
22
- const [instanceId] = React.useState(()=>Symbol("instance-id"));
23
- // Fetch statuses
24
- React.useEffect(()=>{
25
- const loadStatuses = async ()=>{
26
- const { data } = await get("primershop-status-manager/statuses");
27
- setStatuses(data);
28
- };
29
- loadStatuses();
30
- }, [
31
- get
32
- ]);
33
- // Validate input (Latin characters only)
34
- const validateInput = (value)=>/^[a-zA-Z\s]+$/.test(value);
35
- // Add new status
36
- const addStatus = async ()=>{
37
- if (!newStatus || !validateInput(newStatus)) return alert("Only Latin characters allowed!");
38
- try {
39
- const { data } = await post("primershop-status-manager/status", {
40
- name: newStatus,
41
- published: false
42
- });
43
- setStatuses([
44
- ...statuses,
45
- data
46
- ]);
47
- setNewStatus("");
48
- } catch (error) {
49
- console.error("Error creating status:", error);
50
- }
51
- };
52
- const reorderItem = React.useCallback(async ({ startIndex, indexOfTarget, closestEdgeOfTarget })=>{
53
- // Calculate the final index based on the target position and edge
54
- let finishIndex = indexOfTarget;
55
- if (closestEdgeOfTarget === "bottom") {
56
- finishIndex = indexOfTarget + 1;
57
- }
58
- // If moving an item down, we need to adjust for the removed item
59
- if (startIndex < finishIndex) {
60
- finishIndex--;
61
- }
62
- if (finishIndex === startIndex) {
63
- return;
64
- }
65
- const reordered = reorder.reorder({
66
- list: statuses,
67
- startIndex,
68
- finishIndex
69
- });
70
- // Send new order to API
71
- const orderedIds = reordered.map((status, index)=>({
72
- documentId: status.documentId,
73
- order: index
74
- }));
75
- await put("/primershop-status-manager/statuses/reorder", {
76
- statuses: orderedIds
77
- });
78
- setStatuses(reordered);
79
- }, [
80
- statuses,
81
- put
82
- ]);
83
- // Setup drag and drop
84
- React.useEffect(()=>{
85
- const statusElements = document.querySelectorAll("[data-status-id]");
86
- const cleanupFunctions = [];
87
- statusElements.forEach((element)=>{
88
- const statusId = element.getAttribute("data-status-id");
89
- const index = statuses.findIndex((s)=>s.documentId === statusId);
90
- const dragHandle = element.querySelector("[data-drag-handle]");
91
- if (!dragHandle) return;
92
- // Setup draggable
93
- const draggableCleanup = adapter.draggable({
94
- element: dragHandle,
95
- getInitialData: ()=>({
96
- statusId,
97
- index,
98
- instanceId
99
- }),
100
- onGenerateDragPreview ({ nativeSetDragImage }) {
101
- setCustomNativeDragPreview.setCustomNativeDragPreview({
102
- nativeSetDragImage,
103
- getOffset: pointerOutsideOfPreview.pointerOutsideOfPreview({
104
- x: "16px",
105
- y: "8px"
106
- }),
107
- render ({ container }) {
108
- const preview = document.createElement("div");
109
- preview.style.padding = "8px 16px";
110
- preview.style.backgroundColor = "#fff";
111
- preview.style.border = "1px solid #ccc";
112
- preview.style.borderRadius = "4px";
113
- preview.style.boxShadow = "0 2px 4px rgba(0,0,0,0.1)";
114
- const statusNameElement = element.querySelector("[data-status-name]");
115
- preview.textContent = statusNameElement?.textContent || "";
116
- container.appendChild(preview);
117
- return ()=>container.removeChild(preview);
118
- }
119
- });
120
- }
121
- });
122
- // Setup drop target
123
- const dropTargetCleanup = adapter.dropTargetForElements({
124
- element: element,
125
- canDrop: ({ source })=>source.data.instanceId === instanceId,
126
- getData ({ input }) {
127
- return closestEdge.attachClosestEdge({
128
- statusId,
129
- index,
130
- instanceId
131
- }, {
132
- element,
133
- input,
134
- allowedEdges: [
135
- "top",
136
- "bottom"
137
- ]
138
- });
139
- },
140
- onDrag ({ source, self }) {
141
- const isSource = source.element === dragHandle;
142
- if (isSource) return;
143
- const closestEdge$1 = closestEdge.extractClosestEdge(self.data);
144
- const sourceIndex = Number(source.data.index);
145
- const isItemBeforeSource = index === sourceIndex - 1;
146
- const isItemAfterSource = index === sourceIndex + 1;
147
- const isDropIndicatorHidden = isItemBeforeSource && closestEdge$1 === "bottom" || isItemAfterSource && closestEdge$1 === "top";
148
- if (isDropIndicatorHidden) return;
149
- // Add visual feedback for drop target
150
- element.style.background = `linear-gradient(${closestEdge$1 === "top" ? 180 : 0}deg, rgba(136,131,214,0.4) 0%, rgba(255,255,255,0) 50%)`;
151
- },
152
- onDragLeave () {
153
- element.style.background = "";
154
- },
155
- onDrop ({ source, self }) {
156
- element.style.background = "";
157
- const sourceData = source.data;
158
- const targetData = self.data;
159
- const indexOfTarget = statuses.findIndex((s)=>s.documentId === targetData.statusId);
160
- if (indexOfTarget < 0) return;
161
- const closestEdgeOfTarget = closestEdge.extractClosestEdge(targetData);
162
- reorderItem({
163
- startIndex: sourceData.index,
164
- indexOfTarget,
165
- closestEdgeOfTarget
166
- });
167
- }
168
- });
169
- // Combine cleanup functions
170
- const combinedCleanup = combine.combine(draggableCleanup, dropTargetCleanup);
171
- cleanupFunctions.push(combinedCleanup);
172
- });
173
- // Monitor for drops
174
- const monitorCleanup = adapter.monitorForElements({
175
- canMonitor: ({ source })=>source.data.instanceId === instanceId,
176
- onDrop ({ location, source }) {
177
- const target = location.current.dropTargets[0];
178
- if (!target) return;
179
- const sourceData = source.data;
180
- const targetData = target.data;
181
- const indexOfTarget = statuses.findIndex((s)=>s.documentId === targetData.statusId);
182
- if (indexOfTarget < 0) return;
183
- const closestEdgeOfTarget = closestEdge.extractClosestEdge(targetData);
184
- reorderItem({
185
- startIndex: sourceData.index,
186
- indexOfTarget,
187
- closestEdgeOfTarget
188
- });
189
- }
190
- });
191
- // Cleanup function
192
- return ()=>{
193
- cleanupFunctions.forEach((cleanup)=>cleanup());
194
- monitorCleanup();
195
- };
196
- }, [
197
- statuses,
198
- reorderItem,
199
- instanceId
200
- ]);
201
- // Open delete dialog
202
- const confirmDelete = (status)=>{
203
- setStatusToDelete(status);
204
- };
205
- // Delete status and replace with selected one
206
- const deleteStatus = async ()=>{
207
- if (!replacementStatus) return alert("Select a replacement status!");
208
- const replacementStatusObj = statuses.find((s)=>s.name === replacementStatus);
209
- if (!replacementStatusObj) return alert("Replacement status not found!");
210
- try {
211
- await put("/primershop-status-manager/statuses/delete", {
212
- statusId: statusToDelete?.documentId,
213
- replacementId: replacementStatusObj.documentId
214
- });
215
- // Remove the deleted status from the list
216
- setStatuses(statuses.filter((s)=>s.documentId !== statusToDelete?.documentId));
217
- setStatusToDelete(null);
218
- setReplacementStatus("");
219
- } catch (error) {
220
- console.error("Error deleting status:", error);
221
- }
222
- };
223
- // Toggle publish status
224
- const togglePublish = async (id, published)=>{
225
- try {
226
- await put(`/primershop-status-manager/statuses/${id}`, {
227
- published: !published
228
- });
229
- setStatuses(statuses.map((s)=>s.documentId === id ? {
230
- ...s,
231
- published: !published
232
- } : s));
233
- } catch (error) {
234
- console.error("Error toggling publish status:", error);
235
- }
236
- };
237
- return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
238
- padding: 4,
239
- children: [
240
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
241
- variant: "beta",
242
- children: "Status Manager"
243
- }),
244
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
245
- marginTop: 4,
246
- gap: 2,
247
- children: [
248
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
249
- placeholder: "Enter a status...",
250
- value: newStatus,
251
- onChange: (e)=>setNewStatus(e.target.value)
252
- }),
253
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
254
- onClick: addStatus,
255
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
256
- children: "Add Status"
257
- })
258
- ]
259
- }),
260
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
261
- marginTop: 4,
262
- children: statuses.map((status)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
263
- "data-status-id": status.documentId,
264
- alignItems: "center",
265
- gap: 2,
266
- marginBottom: 2,
267
- paddingBottom: 2,
268
- style: {
269
- borderBottom: `1px solid gray`,
270
- minWidth: 300,
271
- userSelect: "none",
272
- touchAction: "none"
273
- },
274
- children: [
275
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
276
- "data-drag-handle": true,
277
- style: {
278
- cursor: "grab",
279
- padding: "4px",
280
- display: "flex",
281
- alignItems: "center"
282
- },
283
- children: /*#__PURE__*/ jsxRuntime.jsx(icons.Drag, {})
284
- }, `dragHandle-${status.documentId}`),
285
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
286
- variant: "sigma",
287
- style: {
288
- display: "inline-block",
289
- marginRight: "auto"
290
- },
291
- "data-status-name": true,
292
- children: status.name
293
- }),
294
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
295
- variant: status.published ? "success-light" : "secondary",
296
- onClick: ()=>togglePublish(status.documentId, status.published),
297
- children: status.published ? "Published" : "Unpublished"
298
- }),
299
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Root, {
300
- onOpenChange: ()=>confirmDelete(status),
301
- children: [
302
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Trigger, {
303
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
304
- variant: "tertiary",
305
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {}),
306
- children: "Delete"
307
- })
308
- }),
309
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Content, {
310
- children: [
311
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Header, {
312
- children: "Delete status"
313
- }),
314
- statuses.length > 1 && statusToDelete && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Body, {
315
- children: [
316
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
317
- children: "Choose a replacement status before deleting:"
318
- }),
319
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
320
- onChange: (value)=>setReplacementStatus(value),
321
- placeholder: "Select replacement",
322
- children: statuses.filter((s)=>s.documentId !== statusToDelete.documentId).map((s)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
323
- value: s.name,
324
- children: s.name
325
- }, `statusChoice-${s.documentId}`))
326
- }),
327
- replacementStatus && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
328
- children: [
329
- "Replacing ",
330
- statusToDelete.name,
331
- " with ",
332
- replacementStatus
333
- ]
334
- })
335
- ]
336
- }),
337
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Footer, {
338
- children: [
339
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Cancel, {
340
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
341
- fullWidth: true,
342
- variant: "tertiary",
343
- children: "Cancel"
344
- })
345
- }),
346
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Action, {
347
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
348
- fullWidth: true,
349
- variant: "danger-light",
350
- onClick: deleteStatus,
351
- children: "Yes, delete"
352
- })
353
- })
354
- ]
355
- })
356
- ]
357
- })
358
- ]
359
- })
360
- ]
361
- }, `status-${status.documentId}`))
362
- }, statuses.length)
363
- ]
364
- });
365
- };
366
-
367
- const HomePage = ()=>{
368
- return /*#__PURE__*/ jsxRuntime.jsxs(admin.Layouts.Root, {
369
- children: [
370
- /*#__PURE__*/ jsxRuntime.jsx(admin.Page.Title, {
371
- children: "Status Manager"
372
- }),
373
- /*#__PURE__*/ jsxRuntime.jsx(admin.Page.Main, {
374
- children: /*#__PURE__*/ jsxRuntime.jsx(admin.Page.Protect, {
375
- permissions: index.pluginPermissions.accessStatusManager,
376
- children: /*#__PURE__*/ jsxRuntime.jsx(admin.Layouts.Content, {
377
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
378
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
379
- padding: 10,
380
- gap: {
381
- initial: 1,
382
- medium: 4,
383
- large: 8
384
- },
385
- direction: {
386
- initial: "column",
387
- medium: "row"
388
- },
389
- alignItems: {
390
- initial: "center",
391
- medium: "flex-start"
392
- },
393
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
394
- padding: 1,
395
- children: [
396
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
397
- variant: "alpha",
398
- children: "Status manager"
399
- }),
400
- /*#__PURE__*/ jsxRuntime.jsx(StatusManager, {})
401
- ]
402
- })
403
- })
404
- })
405
- })
406
- })
407
- })
408
- ]
409
- });
410
- };
411
-
412
- exports.HomePage = HomePage;