@vitnode/blog 1.2.0-canary.76 → 1.2.0-canary.78
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/src/api/lib/categories-language.d.ts +10 -0
- package/dist/src/api/lib/categories-language.d.ts.map +1 -0
- package/dist/src/api/lib/categories-language.js +1 -0
- package/dist/src/api/lib/events.d.ts +28 -0
- package/dist/src/api/lib/events.d.ts.map +1 -0
- package/dist/src/api/lib/events.js +1 -0
- package/dist/src/api/lib/posts-language.d.ts +17 -0
- package/dist/src/api/lib/posts-language.d.ts.map +1 -0
- package/dist/src/api/lib/posts-language.js +1 -0
- package/dist/src/api/lib/search.d.ts +13 -0
- package/dist/src/api/lib/search.d.ts.map +1 -0
- package/dist/src/api/lib/search.js +1 -0
- package/dist/src/api/modules/admin/admin.module.d.ts +197 -180
- package/dist/src/api/modules/admin/admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/admin.module.js +1 -2
- package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts +83 -80
- package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/categories/categories.admin.module.js +1 -2
- package/dist/src/api/modules/admin/categories/routes/create.route.d.ts +38 -34
- package/dist/src/api/modules/admin/categories/routes/create.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/categories/routes/create.route.js +1 -2
- package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts +15 -18
- package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/categories/routes/delete.route.js +1 -2
- package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts +38 -38
- package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/categories/routes/edit.route.js +1 -2
- package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts +104 -93
- package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/posts/posts.admin.module.js +1 -2
- package/dist/src/api/modules/admin/posts/routes/create.route.d.ts +58 -44
- package/dist/src/api/modules/admin/posts/routes/create.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/posts/routes/create.route.js +1 -2
- package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts +15 -18
- package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/posts/routes/delete.route.js +1 -2
- package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts +47 -43
- package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/posts/routes/edit.route.js +1 -2
- package/dist/src/api/modules/categories/categories.module.d.ts +65 -64
- package/dist/src/api/modules/categories/categories.module.d.ts.map +1 -1
- package/dist/src/api/modules/categories/categories.module.js +1 -2
- package/dist/src/api/modules/categories/routes/get.route.d.ts +56 -45
- package/dist/src/api/modules/categories/routes/get.route.d.ts.map +1 -1
- package/dist/src/api/modules/categories/routes/get.route.js +1 -2
- package/dist/src/api/modules/categories/test.route.d.ts +20 -23
- package/dist/src/api/modules/categories/test.route.d.ts.map +1 -1
- package/dist/src/api/modules/categories/test.route.js +1 -2
- package/dist/src/api/modules/posts/posts.module.d.ts +68 -54
- package/dist/src/api/modules/posts/posts.module.d.ts.map +1 -1
- package/dist/src/api/modules/posts/posts.module.js +1 -2
- package/dist/src/api/modules/posts/routes/get.route.d.ts +97 -66
- package/dist/src/api/modules/posts/routes/get.route.d.ts.map +1 -1
- package/dist/src/api/modules/posts/routes/get.route.js +1 -2
- package/dist/src/config.api.d.ts +1 -4
- package/dist/src/config.api.d.ts.map +1 -1
- package/dist/src/config.api.js +1 -2
- package/dist/src/config.d.ts +1 -4
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +1 -2
- package/dist/src/const.d.ts +2 -5
- package/dist/src/const.d.ts.map +1 -1
- package/dist/src/const.js +1 -2
- package/dist/src/database/categories.d.ts +76 -98
- package/dist/src/database/categories.d.ts.map +1 -1
- package/dist/src/database/categories.js +1 -2
- package/dist/src/database/index.d.ts +4 -4
- package/dist/src/database/index.d.ts.map +1 -0
- package/dist/src/database/index.js +1 -1
- package/dist/src/database/posts.d.ts +91 -132
- package/dist/src/database/posts.d.ts.map +1 -1
- package/dist/src/database/posts.js +1 -2
- package/dist/src/database/relations.d.ts +4 -7
- package/dist/src/database/relations.d.ts.map +1 -1
- package/dist/src/database/relations.js +1 -2
- package/dist/src/emails/test-template.d.ts +18 -20
- package/dist/src/emails/test-template.d.ts.map +1 -1
- package/dist/src/emails/test-template.js +1 -2
- package/dist/src/globals.css +44 -0
- package/dist/src/locales/en.json +92 -0
- package/dist/src/locales/index.d.ts +4 -0
- package/dist/src/locales/index.d.ts.map +1 -0
- package/dist/src/locales/index.js +1 -0
- package/dist/src/routes/admin/blog/categories/page.d.ts +5 -7
- package/dist/src/routes/admin/blog/categories/page.d.ts.map +1 -1
- package/dist/src/routes/admin/blog/categories/page.js +1 -2
- package/dist/src/routes/admin/blog/posts/page.d.ts +5 -7
- package/dist/src/routes/admin/blog/posts/page.d.ts.map +1 -1
- package/dist/src/routes/admin/blog/posts/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.js +1 -0
- package/dist/src/views/admin/categories/actions/actions.d.ts +1 -4
- package/dist/src/views/admin/categories/actions/actions.d.ts.map +1 -1
- package/dist/src/views/admin/categories/actions/actions.js +1 -2
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts +5 -8
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts.map +1 -1
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.js +1 -2
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts +11 -0
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.js +1 -0
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.d.ts +3 -6
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.d.ts.map +1 -1
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.js +1 -2
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts +4 -0
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.js +1 -0
- package/dist/src/views/admin/categories/table/actions/edit-action.d.ts +5 -8
- package/dist/src/views/admin/categories/table/actions/edit-action.d.ts.map +1 -1
- package/dist/src/views/admin/categories/table/actions/edit-action.js +1 -2
- package/dist/src/views/admin/categories/table/categories-admin-view.d.ts +2 -5
- package/dist/src/views/admin/categories/table/categories-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/categories/table/categories-admin-view.js +1 -2
- package/dist/src/views/admin/posts/actions/actions.d.ts +1 -4
- package/dist/src/views/admin/posts/actions/actions.d.ts.map +1 -1
- package/dist/src/views/admin/posts/actions/actions.js +1 -2
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts +7 -9
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts.map +1 -1
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.js +1 -2
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts +10 -0
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts.map +1 -0
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.js +1 -0
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts +11 -0
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.js +1 -0
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.d.ts +3 -6
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.d.ts.map +1 -1
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.js +1 -2
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts +4 -0
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.js +1 -0
- package/dist/src/views/admin/posts/table/actions/edit-action.d.ts +5 -8
- package/dist/src/views/admin/posts/table/actions/edit-action.d.ts.map +1 -1
- package/dist/src/views/admin/posts/table/actions/edit-action.js +1 -2
- package/dist/src/views/admin/posts/table/posts-admin-view.d.ts +2 -5
- package/dist/src/views/admin/posts/table/posts-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/posts/table/posts-admin-view.js +1 -2
- package/package.json +20 -18
- package/src/locales/en.json +17 -5
- package/src/locales/index.ts +11 -0
- package/src/routes/breadcrumb/admin/blog/categories/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/blog/posts/page.tsx +5 -0
- package/dist/src/api/modules/admin/admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/categories/categories.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/create.route.js.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/delete.route.js.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/edit.route.js.map +0 -1
- package/dist/src/api/modules/admin/posts/posts.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/create.route.js.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/delete.route.js.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/edit.route.js.map +0 -1
- package/dist/src/api/modules/categories/categories.module.js.map +0 -1
- package/dist/src/api/modules/categories/routes/get.route.js.map +0 -1
- package/dist/src/api/modules/categories/test.route.js.map +0 -1
- package/dist/src/api/modules/posts/posts.module.js.map +0 -1
- package/dist/src/api/modules/posts/routes/get.route.js.map +0 -1
- package/dist/src/config.api.js.map +0 -1
- package/dist/src/config.js.map +0 -1
- package/dist/src/const.js.map +0 -1
- package/dist/src/database/categories.js.map +0 -1
- package/dist/src/database/posts.js.map +0 -1
- package/dist/src/database/relations.js.map +0 -1
- package/dist/src/emails/test-template.js.map +0 -1
- package/dist/src/routes/admin/blog/categories/page.js.map +0 -1
- package/dist/src/routes/admin/blog/posts/page.js.map +0 -1
- package/dist/src/views/admin/categories/actions/actions.js.map +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.js.map +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.d.ts +0 -14
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.js +0 -2
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.js.map +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.js.map +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.d.ts +0 -7
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.js +0 -2
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.js.map +0 -1
- package/dist/src/views/admin/categories/table/actions/edit-action.js.map +0 -1
- package/dist/src/views/admin/categories/table/categories-admin-view.js.map +0 -1
- package/dist/src/views/admin/posts/actions/actions.js.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.js.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.d.ts +0 -14
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.js +0 -2
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.js.map +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.js.map +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.d.ts +0 -7
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.js +0 -2
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.js.map +0 -1
- package/dist/src/views/admin/posts/table/actions/edit-action.js.map +0 -1
- package/dist/src/views/admin/posts/table/posts-admin-view.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin.module.js","names":[],"sources":["../../../../../src/api/modules/admin/admin.module.ts"],"sourcesContent":["import { buildModule } from \"@vitnode/core/api/lib/module\";\n\nimport { CONFIG_PLUGIN } from \"../../../const\";\nimport { categoriesAdminModule } from \"./categories/categories.admin.module\";\nimport { postsAdminModule } from \"./posts/posts.admin.module\";\n\nexport const adminModule = buildModule({\n pluginId: CONFIG_PLUGIN.pluginId,\n name: \"admin\",\n modules: [categoriesAdminModule, postsAdminModule],\n routes: [],\n});\n"],"mappings":"8PAMA,MAAa,EAAc,EAAY,CACrC,SAAU,EAAc,SACxB,KAAM,QACN,QAAS,CAAC,EAAuB,CAAgB,EACjD,OAAQ,CAAC,CACX,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"categories.admin.module.js","names":[],"sources":["../../../../../../src/api/modules/admin/categories/categories.admin.module.ts"],"sourcesContent":["import { buildModule } from \"@vitnode/core/api/lib/module\";\n\nimport { CONFIG_PLUGIN } from \"../../../../const\";\nimport { createCategoryRoute } from \"./routes/create.route\";\nimport { deleteCategoryRoute } from \"./routes/delete.route\";\nimport { editCategoryRoute } from \"./routes/edit.route\";\n\nexport const categoriesAdminModule = buildModule({\n pluginId: CONFIG_PLUGIN.pluginId,\n name: \"categories\",\n routes: [createCategoryRoute, editCategoryRoute, deleteCategoryRoute],\n});\n"],"mappings":"ySAOA,MAAa,EAAwB,EAAY,CAC/C,SAAU,EAAc,SACxB,KAAM,aACN,OAAQ,CAAC,EAAqB,EAAmB,CAAmB,CACtE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.route.js","names":[],"sources":["../../../../../../../src/api/modules/admin/categories/routes/create.route.ts"],"sourcesContent":["import { z } from \"@hono/zod-openapi\";\nimport { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport { removeSpecialCharacters } from \"@vitnode/core/lib/special-characters\";\nimport { eq } from \"drizzle-orm\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { blog_categories } from \"@/database/categories\";\n\nconst zodCategoryResponseSchema = z.object({\n id: z.number(),\n title: z.string(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\nexport const zodCreateCategorySchema = z.object({\n title: z.string(),\n});\n\nexport const createCategoryRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n adminStaffPermission: { module: \"categories\", permission: \"can_create\" },\n route: {\n method: \"post\",\n path: \"/\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: zodCreateCategorySchema,\n },\n },\n },\n },\n responses: {\n 201: {\n content: {\n \"application/json\": {\n schema: zodCategoryResponseSchema,\n },\n },\n description: \"Category created successfully\",\n },\n 400: {\n description: \"Bad request - Invalid input data\",\n },\n },\n },\n handler: async c => {\n const { title } = c.req.valid(\"json\");\n const titleSeo = removeSpecialCharacters(title);\n const [titleSEODuplocate] = await c\n .get(\"db\")\n .select({\n titleSeo: blog_categories.titleSeo,\n })\n .from(blog_categories)\n .where(eq(blog_categories.titleSeo, titleSeo))\n .limit(1);\n\n if (titleSEODuplocate?.titleSeo === titleSeo) {\n throw new HTTPException(400, {\n message: \"Category with this title already exists.\",\n });\n }\n\n const [category] = await c\n .get(\"db\")\n .insert(blog_categories)\n .values({\n title,\n titleSeo: removeSpecialCharacters(title),\n })\n .returning();\n\n return c.json(category, 201);\n },\n});\n"],"mappings":"mYASA,MAAM,EAA4B,EAAE,OAAO,CACzC,GAAI,EAAE,OAAO,EACb,MAAO,EAAE,OAAO,EAChB,UAAW,EAAE,KAAK,EAClB,UAAW,EAAE,KAAK,CACpB,CAAC,EAEY,EAA0B,EAAE,OAAO,CAC9C,MAAO,EAAE,OAAO,CAClB,CAAC,EAEY,EAAsB,EAAW,CAC5C,SAAU,EAAc,SACxB,qBAAsB,CAAE,OAAQ,aAAc,WAAY,YAAa,EACvE,MAAO,CACL,OAAQ,OACR,KAAM,IACN,QAAS,CACP,KAAM,CACJ,QAAS,CACP,mBAAoB,CAClB,OAAQ,CACV,CACF,CACF,CACF,EACA,UAAW,CACT,IAAK,CACH,QAAS,CACP,mBAAoB,CAClB,OAAQ,CACV,CACF,EACA,YAAa,+BACf,EACA,IAAK,CACH,YAAa,kCACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,GAAM,CAAE,SAAU,EAAE,IAAI,MAAM,MAAM,EAC9B,EAAW,EAAwB,CAAK,EACxC,CAAC,GAAqB,MAAM,EAC/B,IAAI,IAAI,CAAC,CACT,OAAO,CACN,SAAU,EAAgB,QAC5B,CAAC,CAAC,CACD,KAAK,CAAe,CAAC,CACrB,MAAM,EAAG,EAAgB,SAAU,CAAQ,CAAC,CAAC,CAC7C,MAAM,CAAC,EAEV,GAAI,GAAmB,WAAa,EAClC,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,0CACX,CAAC,EAGH,GAAM,CAAC,GAAY,MAAM,EACtB,IAAI,IAAI,CAAC,CACT,OAAO,CAAe,CAAC,CACvB,OAAO,CACN,QACA,SAAU,EAAwB,CAAK,CACzC,CAAC,CAAC,CACD,UAAU,EAEb,OAAO,EAAE,KAAK,EAAU,GAAG,CAC7B,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delete.route.js","names":[],"sources":["../../../../../../../src/api/modules/admin/categories/routes/delete.route.ts"],"sourcesContent":["import { z } from \"@hono/zod-openapi\";\nimport { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport { eq } from \"drizzle-orm\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { blog_categories } from \"@/database/categories\";\n\nexport const deleteCategoryRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n adminStaffPermission: { module: \"categories\", permission: \"can_delete\" },\n route: {\n method: \"delete\",\n path: \"/{id}\",\n request: {\n params: z.object({\n id: z.string().transform(Number),\n }),\n },\n responses: {\n 204: {\n description: \"Category deleted successfully\",\n },\n 404: {\n description: \"Category not found\",\n },\n },\n },\n handler: async c => {\n const { id } = c.req.valid(\"param\");\n\n const result = await c\n .get(\"db\")\n .delete(blog_categories)\n .where(eq(blog_categories.id, id))\n .returning();\n\n if (result.length === 0) {\n throw new HTTPException(404);\n }\n\n return c.body(null, 204);\n },\n});\n"],"mappings":"oTAQA,MAAa,EAAsB,EAAW,CAC5C,SAAU,EAAc,SACxB,qBAAsB,CAAE,OAAQ,aAAc,WAAY,YAAa,EACvE,MAAO,CACL,OAAQ,SACR,KAAM,QACN,QAAS,CACP,OAAQ,EAAE,OAAO,CACf,GAAI,EAAE,OAAO,CAAC,CAAC,UAAU,MAAM,CACjC,CAAC,CACH,EACA,UAAW,CACT,IAAK,CACH,YAAa,+BACf,EACA,IAAK,CACH,YAAa,oBACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,GAAM,CAAE,MAAO,EAAE,IAAI,MAAM,OAAO,EAQlC,IAAI,MANiB,EAClB,IAAI,IAAI,CAAC,CACT,OAAO,CAAe,CAAC,CACvB,MAAM,EAAG,EAAgB,GAAI,CAAE,CAAC,CAAC,CACjC,UAAU,EAAA,CAEF,SAAW,EACpB,MAAM,IAAI,EAAc,GAAG,EAG7B,OAAO,EAAE,KAAK,KAAM,GAAG,CACzB,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edit.route.js","names":[],"sources":["../../../../../../../src/api/modules/admin/categories/routes/edit.route.ts"],"sourcesContent":["import { z } from \"@hono/zod-openapi\";\nimport { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport { removeSpecialCharacters } from \"@vitnode/core/lib/special-characters\";\nimport { eq } from \"drizzle-orm\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { blog_categories } from \"@/database/categories\";\n\nimport { zodCreateCategorySchema } from \"./create.route\";\n\nconst zodCategoryResponseSchema = z.object({\n id: z.number(),\n title: z.string(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\nexport const editCategoryRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n adminStaffPermission: { module: \"categories\", permission: \"can_edit\" },\n route: {\n method: \"put\",\n path: \"/{id}\",\n request: {\n params: z.object({\n id: z.string().transform(Number),\n }),\n body: {\n content: {\n \"application/json\": {\n schema: zodCreateCategorySchema,\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: zodCategoryResponseSchema,\n },\n },\n description: \"Category updated successfully\",\n },\n 400: {\n description: \"Bad request - Invalid input data\",\n },\n 404: {\n description: \"Category not found\",\n },\n },\n },\n handler: async c => {\n const { id } = c.req.valid(\"param\");\n const { title } = c.req.valid(\"json\");\n const titleSeo = removeSpecialCharacters(title);\n const [editData] = await c\n .get(\"db\")\n .select({\n titleSeo: blog_categories.titleSeo,\n })\n .from(blog_categories)\n .where(eq(blog_categories.id, id))\n .limit(1);\n\n if (!editData) {\n throw new HTTPException(404);\n }\n\n const [titleSEODuplocate] = await c\n .get(\"db\")\n .select({\n titleSeo: blog_categories.titleSeo,\n })\n .from(blog_categories)\n .where(eq(blog_categories.titleSeo, titleSeo))\n .limit(1);\n\n if (\n titleSEODuplocate?.titleSeo === titleSeo &&\n titleSEODuplocate.titleSeo !== editData.titleSeo\n ) {\n throw new HTTPException(400, {\n message: \"Category with this title already exists.\",\n });\n }\n\n const [category] = await c\n .get(\"db\")\n .update(blog_categories)\n .set({\n title,\n titleSeo: removeSpecialCharacters(title),\n })\n .where(eq(blog_categories.id, id))\n .returning();\n\n return c.json(category);\n },\n});\n"],"mappings":"+bAWA,MAAM,EAA4B,EAAE,OAAO,CACzC,GAAI,EAAE,OAAO,EACb,MAAO,EAAE,OAAO,EAChB,UAAW,EAAE,KAAK,EAClB,UAAW,EAAE,KAAK,CACpB,CAAC,EAEY,EAAoB,EAAW,CAC1C,SAAU,EAAc,SACxB,qBAAsB,CAAE,OAAQ,aAAc,WAAY,UAAW,EACrE,MAAO,CACL,OAAQ,MACR,KAAM,QACN,QAAS,CACP,OAAQ,EAAE,OAAO,CACf,GAAI,EAAE,OAAO,CAAC,CAAC,UAAU,MAAM,CACjC,CAAC,EACD,KAAM,CACJ,QAAS,CACP,mBAAoB,CAClB,OAAQ,CACV,CACF,CACF,CACF,EACA,UAAW,CACT,IAAK,CACH,QAAS,CACP,mBAAoB,CAClB,OAAQ,CACV,CACF,EACA,YAAa,+BACf,EACA,IAAK,CACH,YAAa,kCACf,EACA,IAAK,CACH,YAAa,oBACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,GAAM,CAAE,MAAO,EAAE,IAAI,MAAM,OAAO,EAC5B,CAAE,SAAU,EAAE,IAAI,MAAM,MAAM,EAC9B,EAAW,EAAwB,CAAK,EACxC,CAAC,GAAY,MAAM,EACtB,IAAI,IAAI,CAAC,CACT,OAAO,CACN,SAAU,EAAgB,QAC5B,CAAC,CAAC,CACD,KAAK,CAAe,CAAC,CACrB,MAAM,EAAG,EAAgB,GAAI,CAAE,CAAC,CAAC,CACjC,MAAM,CAAC,EAEV,GAAI,CAAC,EACH,MAAM,IAAI,EAAc,GAAG,EAG7B,GAAM,CAAC,GAAqB,MAAM,EAC/B,IAAI,IAAI,CAAC,CACT,OAAO,CACN,SAAU,EAAgB,QAC5B,CAAC,CAAC,CACD,KAAK,CAAe,CAAC,CACrB,MAAM,EAAG,EAAgB,SAAU,CAAQ,CAAC,CAAC,CAC7C,MAAM,CAAC,EAEV,GACE,GAAmB,WAAa,GAChC,EAAkB,WAAa,EAAS,SAExC,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,0CACX,CAAC,EAGH,GAAM,CAAC,GAAY,MAAM,EACtB,IAAI,IAAI,CAAC,CACT,OAAO,CAAe,CAAC,CACvB,IAAI,CACH,QACA,SAAU,EAAwB,CAAK,CACzC,CAAC,CAAC,CACD,MAAM,EAAG,EAAgB,GAAI,CAAE,CAAC,CAAC,CACjC,UAAU,EAEb,OAAO,EAAE,KAAK,CAAQ,CACxB,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"posts.admin.module.js","names":[],"sources":["../../../../../../src/api/modules/admin/posts/posts.admin.module.ts"],"sourcesContent":["import { buildModule } from \"@vitnode/core/api/lib/module\";\n\nimport { CONFIG_PLUGIN } from \"../../../../const\";\nimport { createPostRoute } from \"./routes/create.route\";\nimport { deletePostRoute } from \"./routes/delete.route\";\nimport { editPostRoute } from \"./routes/edit.route\";\n\nexport const postsAdminModule = buildModule({\n pluginId: CONFIG_PLUGIN.pluginId,\n name: \"posts\",\n routes: [editPostRoute, createPostRoute, deletePostRoute],\n});\n"],"mappings":"6RAOA,MAAa,EAAmB,EAAY,CAC1C,SAAU,EAAc,SACxB,KAAM,QACN,OAAQ,CAAC,EAAe,EAAiB,CAAe,CAC1D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.route.js","names":[],"sources":["../../../../../../../src/api/modules/admin/posts/routes/create.route.ts"],"sourcesContent":["import { z } from \"@hono/zod-openapi\";\nimport { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport { removeSpecialCharacters } from \"@vitnode/core/lib/special-characters\";\nimport { eq } from \"drizzle-orm\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { blog_categories } from \"@/database/categories\";\nimport { blog_posts } from \"@/database/posts\";\n\nconst zodPostResponseSchema = z.object({\n id: z.number(),\n title: z.string(),\n titleSeo: z.string(),\n content: z.string(),\n categoryId: z.number(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\nexport const zodCreatePostSchema = z.object({\n title: z\n .string()\n .min(3, \"Title must be at least 3 characters long\")\n .max(255, \"Title must not exceed 255 characters\"),\n content: z.string(),\n categoryId: z.number(),\n});\n\nexport const createPostRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n adminStaffPermission: { module: \"posts\", permission: \"can_create\" },\n route: {\n method: \"post\",\n path: \"/\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: zodCreatePostSchema,\n },\n },\n },\n },\n responses: {\n 201: {\n content: {\n \"application/json\": {\n schema: zodPostResponseSchema,\n },\n },\n description: \"Post created successfully\",\n },\n 400: {\n description: \"Bad request - Invalid input data\",\n },\n 404: {\n description: \"Category not found\",\n },\n },\n },\n handler: async c => {\n const { title, content, categoryId } = c.req.valid(\"json\");\n const titleSeo = removeSpecialCharacters(title);\n\n // Check if category exists\n const [category] = await c\n .get(\"db\")\n .select({ id: blog_categories.id })\n .from(blog_categories)\n .where(eq(blog_categories.id, categoryId))\n .limit(1);\n\n if (!category) {\n throw new HTTPException(404, {\n message: \"Category not found.\",\n });\n }\n\n // Check if title SEO already exists\n const [titleSEODuplicate] = await c\n .get(\"db\")\n .select({ titleSeo: blog_posts.titleSeo })\n .from(blog_posts)\n .where(eq(blog_posts.titleSeo, titleSeo))\n .limit(1);\n\n if (titleSEODuplicate?.titleSeo === titleSeo) {\n throw new HTTPException(400, {\n message: \"Post with this title already exists.\",\n });\n }\n\n const [post] = await c\n .get(\"db\")\n .insert(blog_posts)\n .values({\n title,\n titleSeo,\n content,\n categoryId,\n })\n .returning();\n\n return c.json(post, 201);\n },\n});\n"],"mappings":"icAUA,MAAM,EAAwB,EAAE,OAAO,CACrC,GAAI,EAAE,OAAO,EACb,MAAO,EAAE,OAAO,EAChB,SAAU,EAAE,OAAO,EACnB,QAAS,EAAE,OAAO,EAClB,WAAY,EAAE,OAAO,EACrB,UAAW,EAAE,KAAK,EAClB,UAAW,EAAE,KAAK,CACpB,CAAC,EAEY,EAAsB,EAAE,OAAO,CAC1C,MAAO,EACJ,OAAO,CAAC,CACR,IAAI,EAAG,0CAA0C,CAAC,CAClD,IAAI,IAAK,sCAAsC,EAClD,QAAS,EAAE,OAAO,EAClB,WAAY,EAAE,OAAO,CACvB,CAAC,EAEY,EAAkB,EAAW,CACxC,SAAU,EAAc,SACxB,qBAAsB,CAAE,OAAQ,QAAS,WAAY,YAAa,EAClE,MAAO,CACL,OAAQ,OACR,KAAM,IACN,QAAS,CACP,KAAM,CACJ,QAAS,CACP,mBAAoB,CAClB,OAAQ,CACV,CACF,CACF,CACF,EACA,UAAW,CACT,IAAK,CACH,QAAS,CACP,mBAAoB,CAClB,OAAQ,CACV,CACF,EACA,YAAa,2BACf,EACA,IAAK,CACH,YAAa,kCACf,EACA,IAAK,CACH,YAAa,oBACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,GAAM,CAAE,QAAO,UAAS,cAAe,EAAE,IAAI,MAAM,MAAM,EACnD,EAAW,EAAwB,CAAK,EAGxC,CAAC,GAAY,MAAM,EACtB,IAAI,IAAI,CAAC,CACT,OAAO,CAAE,GAAI,EAAgB,EAAG,CAAC,CAAC,CAClC,KAAK,CAAe,CAAC,CACrB,MAAM,EAAG,EAAgB,GAAI,CAAU,CAAC,CAAC,CACzC,MAAM,CAAC,EAEV,GAAI,CAAC,EACH,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,qBACX,CAAC,EAIH,GAAM,CAAC,GAAqB,MAAM,EAC/B,IAAI,IAAI,CAAC,CACT,OAAO,CAAE,SAAU,EAAW,QAAS,CAAC,CAAC,CACzC,KAAK,CAAU,CAAC,CAChB,MAAM,EAAG,EAAW,SAAU,CAAQ,CAAC,CAAC,CACxC,MAAM,CAAC,EAEV,GAAI,GAAmB,WAAa,EAClC,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,sCACX,CAAC,EAGH,GAAM,CAAC,GAAQ,MAAM,EAClB,IAAI,IAAI,CAAC,CACT,OAAO,CAAU,CAAC,CAClB,OAAO,CACN,QACA,WACA,UACA,YACF,CAAC,CAAC,CACD,UAAU,EAEb,OAAO,EAAE,KAAK,EAAM,GAAG,CACzB,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delete.route.js","names":[],"sources":["../../../../../../../src/api/modules/admin/posts/routes/delete.route.ts"],"sourcesContent":["import { z } from \"@hono/zod-openapi\";\nimport { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport { eq } from \"drizzle-orm\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { blog_posts } from \"@/database/posts\";\n\nexport const deletePostRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n adminStaffPermission: { module: \"posts\", permission: \"can_delete\" },\n route: {\n method: \"delete\",\n path: \"/{id}\",\n request: {\n params: z.object({\n id: z.string().transform(Number),\n }),\n },\n responses: {\n 204: {\n description: \"Post deleted successfully\",\n },\n 404: {\n description: \"Post not found\",\n },\n },\n },\n handler: async c => {\n const { id } = c.req.valid(\"param\");\n\n const result = await c\n .get(\"db\")\n .delete(blog_posts)\n .where(eq(blog_posts.id, id))\n .returning();\n\n if (result.length === 0) {\n throw new HTTPException(404);\n }\n\n return c.body(null, 204);\n },\n});\n"],"mappings":"0SAQA,MAAa,EAAkB,EAAW,CACxC,SAAU,EAAc,SACxB,qBAAsB,CAAE,OAAQ,QAAS,WAAY,YAAa,EAClE,MAAO,CACL,OAAQ,SACR,KAAM,QACN,QAAS,CACP,OAAQ,EAAE,OAAO,CACf,GAAI,EAAE,OAAO,CAAC,CAAC,UAAU,MAAM,CACjC,CAAC,CACH,EACA,UAAW,CACT,IAAK,CACH,YAAa,2BACf,EACA,IAAK,CACH,YAAa,gBACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,GAAM,CAAE,MAAO,EAAE,IAAI,MAAM,OAAO,EAQlC,IAAI,MANiB,EAClB,IAAI,IAAI,CAAC,CACT,OAAO,CAAU,CAAC,CAClB,MAAM,EAAG,EAAW,GAAI,CAAE,CAAC,CAAC,CAC5B,UAAU,EAAA,CAEF,SAAW,EACpB,MAAM,IAAI,EAAc,GAAG,EAG7B,OAAO,EAAE,KAAK,KAAM,GAAG,CACzB,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edit.route.js","names":[],"sources":["../../../../../../../src/api/modules/admin/posts/routes/edit.route.ts"],"sourcesContent":["import { z } from \"@hono/zod-openapi\";\nimport { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport { removeSpecialCharacters } from \"@vitnode/core/lib/special-characters\";\nimport { eq } from \"drizzle-orm\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { blog_categories } from \"@/database/categories\";\nimport { blog_posts } from \"@/database/posts\";\n\nimport { zodCreatePostSchema } from \"./create.route\";\n\nconst zodPostResponseSchema = z.object({\n id: z.number(),\n title: z.string(),\n titleSeo: z.string(),\n content: z.string(),\n categoryId: z.number(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\nexport const editPostRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n adminStaffPermission: { module: \"posts\", permission: \"can_edit\" },\n route: {\n method: \"put\",\n path: \"/{id}\",\n request: {\n params: z.object({\n id: z.string().transform(Number),\n }),\n body: {\n content: {\n \"application/json\": {\n schema: zodCreatePostSchema,\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: zodPostResponseSchema,\n },\n },\n description: \"Post updated successfully\",\n },\n 400: {\n description: \"Bad request - Invalid input data\",\n },\n 404: {\n description: \"Post or category not found\",\n },\n },\n },\n handler: async c => {\n const { id } = c.req.valid(\"param\");\n const { title, content, categoryId } = c.req.valid(\"json\");\n const titleSeo = removeSpecialCharacters(title);\n\n // Check if post exists\n const [existingPost] = await c\n .get(\"db\")\n .select({ titleSeo: blog_posts.titleSeo })\n .from(blog_posts)\n .where(eq(blog_posts.id, id))\n .limit(1);\n\n if (!existingPost) {\n throw new HTTPException(404, { message: \"Post not found.\" });\n }\n\n // Check if category exists\n const [category] = await c\n .get(\"db\")\n .select({ id: blog_categories.id })\n .from(blog_categories)\n .where(eq(blog_categories.id, categoryId))\n .limit(1);\n\n if (!category) {\n throw new HTTPException(404, { message: \"Category not found.\" });\n }\n\n // Check if title SEO already exists (but not for the current post)\n const [titleSEODuplicate] = await c\n .get(\"db\")\n .select({ titleSeo: blog_posts.titleSeo })\n .from(blog_posts)\n .where(eq(blog_posts.titleSeo, titleSeo))\n .limit(1);\n\n if (\n titleSEODuplicate?.titleSeo === titleSeo &&\n titleSEODuplicate.titleSeo !== existingPost.titleSeo\n ) {\n throw new HTTPException(400, {\n message: \"Post with this title already exists.\",\n });\n }\n\n const [post] = await c\n .get(\"db\")\n .update(blog_posts)\n .set({\n title,\n titleSeo,\n content,\n categoryId,\n })\n .where(eq(blog_posts.id, id))\n .returning();\n\n return c.json(post);\n },\n});\n"],"mappings":"yfAYA,MAAM,EAAwB,EAAE,OAAO,CACrC,GAAI,EAAE,OAAO,EACb,MAAO,EAAE,OAAO,EAChB,SAAU,EAAE,OAAO,EACnB,QAAS,EAAE,OAAO,EAClB,WAAY,EAAE,OAAO,EACrB,UAAW,EAAE,KAAK,EAClB,UAAW,EAAE,KAAK,CACpB,CAAC,EAEY,EAAgB,EAAW,CACtC,SAAU,EAAc,SACxB,qBAAsB,CAAE,OAAQ,QAAS,WAAY,UAAW,EAChE,MAAO,CACL,OAAQ,MACR,KAAM,QACN,QAAS,CACP,OAAQ,EAAE,OAAO,CACf,GAAI,EAAE,OAAO,CAAC,CAAC,UAAU,MAAM,CACjC,CAAC,EACD,KAAM,CACJ,QAAS,CACP,mBAAoB,CAClB,OAAQ,CACV,CACF,CACF,CACF,EACA,UAAW,CACT,IAAK,CACH,QAAS,CACP,mBAAoB,CAClB,OAAQ,CACV,CACF,EACA,YAAa,2BACf,EACA,IAAK,CACH,YAAa,kCACf,EACA,IAAK,CACH,YAAa,4BACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,GAAM,CAAE,MAAO,EAAE,IAAI,MAAM,OAAO,EAC5B,CAAE,QAAO,UAAS,cAAe,EAAE,IAAI,MAAM,MAAM,EACnD,EAAW,EAAwB,CAAK,EAGxC,CAAC,GAAgB,MAAM,EAC1B,IAAI,IAAI,CAAC,CACT,OAAO,CAAE,SAAU,EAAW,QAAS,CAAC,CAAC,CACzC,KAAK,CAAU,CAAC,CAChB,MAAM,EAAG,EAAW,GAAI,CAAE,CAAC,CAAC,CAC5B,MAAM,CAAC,EAEV,GAAI,CAAC,EACH,MAAM,IAAI,EAAc,IAAK,CAAE,QAAS,iBAAkB,CAAC,EAI7D,GAAM,CAAC,GAAY,MAAM,EACtB,IAAI,IAAI,CAAC,CACT,OAAO,CAAE,GAAI,EAAgB,EAAG,CAAC,CAAC,CAClC,KAAK,CAAe,CAAC,CACrB,MAAM,EAAG,EAAgB,GAAI,CAAU,CAAC,CAAC,CACzC,MAAM,CAAC,EAEV,GAAI,CAAC,EACH,MAAM,IAAI,EAAc,IAAK,CAAE,QAAS,qBAAsB,CAAC,EAIjE,GAAM,CAAC,GAAqB,MAAM,EAC/B,IAAI,IAAI,CAAC,CACT,OAAO,CAAE,SAAU,EAAW,QAAS,CAAC,CAAC,CACzC,KAAK,CAAU,CAAC,CAChB,MAAM,EAAG,EAAW,SAAU,CAAQ,CAAC,CAAC,CACxC,MAAM,CAAC,EAEV,GACE,GAAmB,WAAa,GAChC,EAAkB,WAAa,EAAa,SAE5C,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,sCACX,CAAC,EAGH,GAAM,CAAC,GAAQ,MAAM,EAClB,IAAI,IAAI,CAAC,CACT,OAAO,CAAU,CAAC,CAClB,IAAI,CACH,QACA,WACA,UACA,YACF,CAAC,CAAC,CACD,MAAM,EAAG,EAAW,GAAI,CAAE,CAAC,CAAC,CAC5B,UAAU,EAEb,OAAO,EAAE,KAAK,CAAI,CACpB,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"categories.module.js","names":[],"sources":["../../../../../src/api/modules/categories/categories.module.ts"],"sourcesContent":["import { buildModule } from \"@vitnode/core/api/lib/module\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\n\nimport { categoriesRoute } from \"./routes/get.route\";\nimport { testRoute } from \"./test.route\";\n\nexport const categoriesModule = buildModule({\n pluginId: CONFIG_PLUGIN.pluginId,\n name: \"categories\",\n routes: [categoriesRoute, testRoute],\n});\n"],"mappings":"iNAOA,MAAa,EAAmB,EAAY,CAC1C,SAAU,EAAc,SACxB,KAAM,aACN,OAAQ,CAAC,EAAiB,CAAS,CACrC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get.route.js","names":[],"sources":["../../../../../../src/api/modules/categories/routes/get.route.ts"],"sourcesContent":["import { z } from \"@hono/zod-openapi\";\nimport { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport {\n withPagination,\n zodPaginationPageInfo,\n zodPaginationQuery,\n} from \"@vitnode/core/api/lib/with-pagination\";\nimport { and, ilike, type SQL } from \"drizzle-orm\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { blog_categories } from \"@/database/categories\";\n\nconst zodCategorySchema = z.object({\n id: z.number(),\n title: z.string(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\nexport const categoriesRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n route: {\n method: \"get\",\n path: \"/\",\n request: {\n query: zodPaginationQuery.extend({\n order: z.enum([\"asc\", \"desc\"]).optional(),\n orderBy: z.enum([\"updatedAt\"]).optional(),\n search: z.string().optional(),\n }),\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: z.object({\n edges: z.array(zodCategorySchema),\n pageInfo: zodPaginationPageInfo,\n }),\n },\n },\n description: \"Categories retrieved successfully\",\n },\n },\n },\n handler: async c => {\n const query = c.req.valid(\"query\");\n\n const data = await withPagination({\n c,\n params: {\n query,\n },\n primaryCursor: blog_categories.id,\n query: async ({ limit, where, orderBy }) => {\n const searchCondition = query.search\n ? ilike(blog_categories.title, `%${query.search}%`)\n : undefined;\n\n let combinedWhere: SQL | undefined;\n if (searchCondition) {\n if (where) {\n combinedWhere = and(where, searchCondition);\n } else {\n combinedWhere = searchCondition;\n }\n } else {\n combinedWhere = where;\n }\n\n return await c\n .get(\"db\")\n .select()\n .from(blog_categories)\n .where(combinedWhere)\n .orderBy(orderBy)\n .limit(limit);\n },\n table: blog_categories,\n orderBy: {\n column: query.orderBy\n ? blog_categories[query.orderBy]\n : blog_categories.updatedAt,\n order: query.order ?? \"desc\",\n },\n });\n\n return c.json(data);\n },\n});\n"],"mappings":"gYAYA,MAAM,EAAoB,EAAE,OAAO,CACjC,GAAI,EAAE,OAAO,EACb,MAAO,EAAE,OAAO,EAChB,UAAW,EAAE,KAAK,EAClB,UAAW,EAAE,KAAK,CACpB,CAAC,EAEY,EAAkB,EAAW,CACxC,SAAU,EAAc,SACxB,MAAO,CACL,OAAQ,MACR,KAAM,IACN,QAAS,CACP,MAAO,EAAmB,OAAO,CAC/B,MAAO,EAAE,KAAK,CAAC,MAAO,MAAM,CAAC,CAAC,CAAC,SAAS,EACxC,QAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EACxC,OAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,CAC9B,CAAC,CACH,EACA,UAAW,CACT,IAAK,CACH,QAAS,CACP,mBAAoB,CAClB,OAAQ,EAAE,OAAO,CACf,MAAO,EAAE,MAAM,CAAiB,EAChC,SAAU,CACZ,CAAC,CACH,CACF,EACA,YAAa,mCACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,IAAM,EAAQ,EAAE,IAAI,MAAM,OAAO,EAE3B,EAAO,MAAM,EAAe,CAChC,IACA,OAAQ,CACN,OACF,EACA,cAAe,EAAgB,GAC/B,MAAO,MAAO,CAAE,QAAO,QAAO,aAAc,CAC1C,IAAM,EAAkB,EAAM,OAC1B,EAAM,EAAgB,MAAO,IAAI,EAAM,OAAO,EAAE,EAChD,IAAA,GAEA,EAWJ,MAVA,CAOE,EAPE,EACE,EACc,EAAI,EAAO,CAAe,EAE1B,EAGF,EAGX,MAAM,EACV,IAAI,IAAI,CAAC,CACT,OAAO,CAAC,CACR,KAAK,CAAe,CAAC,CACrB,MAAM,CAAa,CAAC,CACpB,QAAQ,CAAO,CAAC,CAChB,MAAM,CAAK,CAChB,EACA,MAAO,EACP,QAAS,CACP,OAAQ,EAAM,QACV,EAAgB,EAAM,SACtB,EAAgB,UACpB,MAAO,EAAM,OAAS,MACxB,CACF,CAAC,EAED,OAAO,EAAE,KAAK,CAAI,CACpB,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test.route.js","names":[],"sources":["../../../../../src/api/modules/categories/test.route.ts"],"sourcesContent":["import { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport { UserModel } from \"@vitnode/core/api/models/user\";\nimport { z } from \"zod\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport TestTemplateEmail from \"@/emails/test-template\";\n\nexport const testRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n route: {\n method: \"post\",\n description: \"Test route\",\n path: \"/test\",\n responses: {\n 200: {\n content: {\n \"text/plain\": {\n schema: z.string(),\n },\n },\n description: \"User\",\n },\n 201: {\n content: {\n \"text/plain\": {\n schema: z.string(),\n },\n },\n description: \"User\",\n },\n },\n },\n handler: async c => {\n const user = await new UserModel().getUserById({\n id: 2,\n c,\n });\n\n if (!user) throw new Error(\"User not found\");\n\n await c.get(\"email\").send({\n subject: \"Test Email\",\n content: TestTemplateEmail,\n user,\n });\n\n await c.get(\"log\").warn(\"This is a test warn log\");\n\n return c.text(\"test\");\n },\n});\n"],"mappings":"6OAOA,MAAa,EAAY,EAAW,CAClC,SAAU,EAAc,SACxB,MAAO,CACL,OAAQ,OACR,YAAa,aACb,KAAM,QACN,UAAW,CACT,IAAK,CACH,QAAS,CACP,aAAc,CACZ,OAAQ,EAAE,OAAO,CACnB,CACF,EACA,YAAa,MACf,EACA,IAAK,CACH,QAAS,CACP,aAAc,CACZ,OAAQ,EAAE,OAAO,CACnB,CACF,EACA,YAAa,MACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,IAAM,EAAO,MAAM,IAAI,EAAU,CAAC,CAAC,YAAY,CAC7C,GAAI,EACJ,GACF,CAAC,EAED,GAAI,CAAC,EAAM,MAAU,MAAM,gBAAgB,EAU3C,OARA,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,KAAK,CACxB,QAAS,aACT,QAAS,EACT,MACF,CAAC,EAED,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,KAAK,yBAAyB,EAE1C,EAAE,KAAK,MAAM,CACtB,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"posts.module.js","names":[],"sources":["../../../../../src/api/modules/posts/posts.module.ts"],"sourcesContent":["import { buildModule } from \"@vitnode/core/api/lib/module\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\n\nimport { postsRoute } from \"./routes/get.route\";\n\nexport const postsModule = buildModule({\n pluginId: CONFIG_PLUGIN.pluginId,\n name: \"posts\",\n routes: [postsRoute],\n});\n"],"mappings":"gKAMA,MAAa,EAAc,EAAY,CACrC,SAAU,EAAc,SACxB,KAAM,QACN,OAAQ,CAAC,CAAU,CACrB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get.route.js","names":[],"sources":["../../../../../../src/api/modules/posts/routes/get.route.ts"],"sourcesContent":["import { z } from \"@hono/zod-openapi\";\nimport { buildRoute } from \"@vitnode/core/api/lib/route\";\nimport {\n withPagination,\n zodPaginationPageInfo,\n zodPaginationQuery,\n} from \"@vitnode/core/api/lib/with-pagination\";\nimport { eq } from \"drizzle-orm\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { blog_categories } from \"@/database/categories\";\nimport { blog_posts } from \"@/database/posts\";\n\nexport const zodPostSchema = z.object({\n id: z.number(),\n title: z.string(),\n titleSeo: z.string(),\n content: z.string(),\n categoryId: z.number(),\n createdAt: z.date(),\n updatedAt: z.date(),\n category: z.object({\n id: z.number(),\n title: z.string(),\n titleSeo: z.string(),\n }),\n});\n\nexport const postsRoute = buildRoute({\n pluginId: CONFIG_PLUGIN.pluginId,\n route: {\n method: \"get\",\n path: \"/\",\n request: {\n query: zodPaginationQuery.extend({\n order: z.enum([\"asc\", \"desc\"]).optional(),\n orderBy: z.enum([\"updatedAt\", \"createdAt\"]).optional(),\n categoryId: z.string().transform(Number).optional(),\n }),\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: z.object({\n edges: z.array(zodPostSchema),\n pageInfo: zodPaginationPageInfo,\n }),\n },\n },\n description: \"Posts retrieved successfully\",\n },\n },\n },\n handler: async c => {\n const query = c.req.valid(\"query\");\n\n const data = await withPagination({\n c,\n params: {\n query,\n },\n primaryCursor: blog_posts.id,\n query: async ({ limit, where, orderBy }) =>\n await c\n .get(\"db\")\n .select({\n id: blog_posts.id,\n title: blog_posts.title,\n titleSeo: blog_posts.titleSeo,\n content: blog_posts.content,\n categoryId: blog_posts.categoryId,\n createdAt: blog_posts.createdAt,\n updatedAt: blog_posts.updatedAt,\n category: {\n id: blog_categories.id,\n title: blog_categories.title,\n titleSeo: blog_categories.titleSeo,\n },\n })\n .from(blog_posts)\n .innerJoin(\n blog_categories,\n eq(blog_posts.categoryId, blog_categories.id),\n )\n .where(\n query.categoryId\n ? eq(blog_posts.categoryId, query.categoryId)\n : where,\n )\n .orderBy(orderBy)\n .limit(limit),\n table: blog_posts,\n orderBy: {\n column: query.orderBy\n ? blog_posts[query.orderBy]\n : blog_posts.updatedAt,\n order: query.order ?? \"desc\",\n },\n });\n\n return c.json(data);\n },\n});\n"],"mappings":"+aAaA,MAAa,EAAgB,EAAE,OAAO,CACpC,GAAI,EAAE,OAAO,EACb,MAAO,EAAE,OAAO,EAChB,SAAU,EAAE,OAAO,EACnB,QAAS,EAAE,OAAO,EAClB,WAAY,EAAE,OAAO,EACrB,UAAW,EAAE,KAAK,EAClB,UAAW,EAAE,KAAK,EAClB,SAAU,EAAE,OAAO,CACjB,GAAI,EAAE,OAAO,EACb,MAAO,EAAE,OAAO,EAChB,SAAU,EAAE,OAAO,CACrB,CAAC,CACH,CAAC,EAEY,EAAa,EAAW,CACnC,SAAU,EAAc,SACxB,MAAO,CACL,OAAQ,MACR,KAAM,IACN,QAAS,CACP,MAAO,EAAmB,OAAO,CAC/B,MAAO,EAAE,KAAK,CAAC,MAAO,MAAM,CAAC,CAAC,CAAC,SAAS,EACxC,QAAS,EAAE,KAAK,CAAC,YAAa,WAAW,CAAC,CAAC,CAAC,SAAS,EACrD,WAAY,EAAE,OAAO,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,SAAS,CACpD,CAAC,CACH,EACA,UAAW,CACT,IAAK,CACH,QAAS,CACP,mBAAoB,CAClB,OAAQ,EAAE,OAAO,CACf,MAAO,EAAE,MAAM,CAAa,EAC5B,SAAU,CACZ,CAAC,CACH,CACF,EACA,YAAa,8BACf,CACF,CACF,EACA,QAAS,KAAM,IAAK,CAClB,IAAM,EAAQ,EAAE,IAAI,MAAM,OAAO,EAE3B,EAAO,MAAM,EAAe,CAChC,IACA,OAAQ,CACN,OACF,EACA,cAAe,EAAW,GAC1B,MAAO,MAAO,CAAE,QAAO,QAAO,aAC5B,MAAM,EACH,IAAI,IAAI,CAAC,CACT,OAAO,CACN,GAAI,EAAW,GACf,MAAO,EAAW,MAClB,SAAU,EAAW,SACrB,QAAS,EAAW,QACpB,WAAY,EAAW,WACvB,UAAW,EAAW,UACtB,UAAW,EAAW,UACtB,SAAU,CACR,GAAI,EAAgB,GACpB,MAAO,EAAgB,MACvB,SAAU,EAAgB,QAC5B,CACF,CAAC,CAAC,CACD,KAAK,CAAU,CAAC,CAChB,UACC,EACA,EAAG,EAAW,WAAY,EAAgB,EAAE,CAC9C,CAAC,CACA,MACC,EAAM,WACF,EAAG,EAAW,WAAY,EAAM,UAAU,EAC1C,CACN,CAAC,CACA,QAAQ,CAAO,CAAC,CAChB,MAAM,CAAK,EAChB,MAAO,EACP,QAAS,CACP,OAAQ,EAAM,QACV,EAAW,EAAM,SACjB,EAAW,UACf,MAAO,EAAM,OAAS,MACxB,CACF,CAAC,EAED,OAAO,EAAE,KAAK,CAAI,CACpB,CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.api.js","names":[],"sources":["../../src/config.api.ts"],"sourcesContent":["import { buildApiPlugin } from \"@vitnode/core/api/lib/plugin\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\n\nimport { adminModule } from \"./api/modules/admin/admin.module\";\nimport { categoriesModule } from \"./api/modules/categories/categories.module\";\nimport { postsModule } from \"./api/modules/posts/posts.module\";\n\nexport const blogApiPlugin = () => {\n return buildApiPlugin({\n pluginId: CONFIG_PLUGIN.pluginId,\n modules: [adminModule, categoriesModule, postsModule],\n permissionStaff: {\n moderator: {\n posts: [\"can_edit\", \"can_delete\"],\n },\n admin: {\n posts: [\n \"can_view\",\n {\n permission: \"can_create\",\n dependsOn: [\"can_view\"],\n },\n \"can_edit\",\n \"can_delete\",\n ],\n categories: [\"can_view\", \"can_create\", \"can_edit\", \"can_delete\"],\n },\n },\n });\n};\n"],"mappings":"8TAQA,MAAa,MACJ,EAAe,CACpB,SAAU,EAAc,SACxB,QAAS,CAAC,EAAa,EAAkB,CAAW,EACpD,gBAAiB,CACf,UAAW,CACT,MAAO,CAAC,WAAY,YAAY,CAClC,EACA,MAAO,CACL,MAAO,CACL,WACA,CACE,WAAY,aACZ,UAAW,CAAC,UAAU,CACxB,EACA,WACA,YACF,EACA,WAAY,CAAC,WAAY,aAAc,WAAY,YAAY,CACjE,CACF,CACF,CAAC"}
|
package/dist/src/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../../src/config.tsx"],"sourcesContent":["import { buildPlugin } from \"@vitnode/core/lib/plugin\";\nimport { ListIcon, NotebookPenIcon } from \"lucide-react\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\n\nexport const blogPlugin = () => {\n return buildPlugin({\n pluginId: CONFIG_PLUGIN.pluginId,\n admin: {\n nav: [\n {\n id: \"posts\",\n href: \"/admin/blog/posts\",\n icon: <NotebookPenIcon />,\n permission: { module: \"posts\", permission: \"can_view\" },\n },\n {\n id: \"categories\",\n href: \"/admin/blog/categories\",\n icon: <ListIcon />,\n permission: { module: \"categories\", permission: \"can_view\" },\n },\n ],\n },\n });\n};\n"],"mappings":"uMAKA,MAAa,MACJ,EAAY,CACjB,SAAU,EAAc,SACxB,MAAO,CACL,IAAK,CACH,CACE,GAAI,QACJ,KAAM,oBACN,KAAM,EAAC,EAAD,CAAkB,CAAA,EACxB,WAAY,CAAE,OAAQ,QAAS,WAAY,UAAW,CACxD,EACA,CACE,GAAI,aACJ,KAAM,yBACN,KAAM,EAAC,EAAD,CAAW,CAAA,EACjB,WAAY,CAAE,OAAQ,aAAc,WAAY,UAAW,CAC7D,CACF,CACF,CACF,CAAC"}
|
package/dist/src/const.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","names":[],"sources":["../../src/const.ts"],"sourcesContent":["export const CONFIG_PLUGIN = {\n pluginId: \"@vitnode/blog\" as const,\n};\n"],"mappings":"AAAA,MAAa,EAAgB,CAC3B,SAAU,eACZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"categories.js","names":[],"sources":["../../../src/database/categories.ts"],"sourcesContent":["import { pgTable } from \"drizzle-orm/pg-core\";\n\nexport const blog_categories = pgTable(\"blog_categories\", t => ({\n id: t.serial().primaryKey(),\n title: t.varchar({ length: 100 }).notNull(),\n createdAt: t.timestamp().notNull().defaultNow(),\n updatedAt: t\n .timestamp()\n .notNull()\n .$onUpdate(() => new Date()),\n titleSeo: t.varchar({ length: 100 }).notNull().unique().default(\"\"),\n})).enableRLS();\n"],"mappings":"8CAEA,MAAa,EAAkB,EAAQ,kBAAmB,IAAM,CAC9D,GAAI,EAAE,OAAO,CAAC,CAAC,WAAW,EAC1B,MAAO,EAAE,QAAQ,CAAE,OAAQ,GAAI,CAAC,CAAC,CAAC,QAAQ,EAC1C,UAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAC9C,UAAW,EACR,UAAU,CAAC,CACX,QAAQ,CAAC,CACT,cAAgB,IAAI,IAAM,EAC7B,SAAU,EAAE,QAAQ,CAAE,OAAQ,GAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CACpE,EAAE,CAAC,CAAC,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"posts.js","names":[],"sources":["../../../src/database/posts.ts"],"sourcesContent":["import { pgTable } from \"drizzle-orm/pg-core\";\n\nimport { blog_categories } from \"./categories\";\n\nexport const blog_posts = pgTable(\"blog_posts\", t => ({\n id: t.serial().primaryKey(),\n title: t.varchar({ length: 255 }).notNull(),\n titleSeo: t.varchar({ length: 255 }).notNull().unique(),\n content: t.text().notNull(),\n categoryId: t\n .integer()\n .references(() => blog_categories.id)\n .notNull(),\n createdAt: t.timestamp().notNull().defaultNow(),\n updatedAt: t\n .timestamp()\n .notNull()\n .$onUpdate(() => new Date()),\n})).enableRLS();\n"],"mappings":"gGAIA,MAAa,EAAa,EAAQ,aAAc,IAAM,CACpD,GAAI,EAAE,OAAO,CAAC,CAAC,WAAW,EAC1B,MAAO,EAAE,QAAQ,CAAE,OAAQ,GAAI,CAAC,CAAC,CAAC,QAAQ,EAC1C,SAAU,EAAE,QAAQ,CAAE,OAAQ,GAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,EACtD,QAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,EAC1B,WAAY,EACT,QAAQ,CAAC,CACT,eAAiB,EAAgB,EAAE,CAAC,CACpC,QAAQ,EACX,UAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAC9C,UAAW,EACR,UAAU,CAAC,CACX,QAAQ,CAAC,CACT,cAAgB,IAAI,IAAM,CAC/B,EAAE,CAAC,CAAC,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"relations.js","names":[],"sources":["../../../src/database/relations.ts"],"sourcesContent":["import { relations } from \"drizzle-orm\";\n\nimport { blog_categories } from \"./categories\";\nimport { blog_posts } from \"./posts\";\n\nexport const blog_posts_relations = relations(blog_posts, ({ one }) => ({\n category: one(blog_categories, {\n fields: [blog_posts.categoryId],\n references: [blog_categories.id],\n }),\n}));\n\nexport const blog_categories_relations = relations(\n blog_categories,\n ({ many }) => ({\n posts: many(blog_posts),\n }),\n);\n"],"mappings":"kIAKA,MAAa,EAAuB,EAAU,GAAa,CAAE,UAAW,CACtE,SAAU,EAAI,EAAiB,CAC7B,OAAQ,CAAC,EAAW,UAAU,EAC9B,WAAY,CAAC,EAAgB,EAAE,CACjC,CAAC,CACH,EAAE,EAEW,EAA4B,EACvC,GACC,CAAE,WAAY,CACb,MAAO,EAAK,CAAU,CACxB,EACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-template.js","names":[],"sources":["../../../src/emails/test-template.tsx"],"sourcesContent":["import DefaultTemplateEmail, {\n type DefaultTemplateEmailProps,\n} from \"@vitnode/core/emails/default-template\";\nimport { Text } from \"react-email\";\n\nTestTemplateEmail.PreviewProps =\n DefaultTemplateEmail.PreviewProps satisfies DefaultTemplateEmailProps;\n\nexport default function TestTemplateEmail({\n user,\n ...props\n}: DefaultTemplateEmailProps) {\n if (!user) return null;\n\n return (\n <DefaultTemplateEmail {...props}>\n <Text>This message is for {user.name}</Text>\n </DefaultTemplateEmail>\n );\n}\n"],"mappings":"0IAKA,EAAkB,aAChB,EAAqB,aAEvB,SAAwB,EAAkB,CACxC,OACA,GAAG,GACyB,CAG5B,OAFK,EAGH,EAAC,EAAD,CAAsB,GAAI,WACxB,EAAC,EAAD,CAAA,SAAA,CAAM,uBAAqB,EAAK,IAAW,CAAA,CAAA,CACvB,CAAA,EALN,IAOpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","names":[],"sources":["../../../../../../src/routes/admin/blog/categories/page.tsx"],"sourcesContent":["import type { Metadata } from \"next\";\n\nimport { I18nProvider } from \"@vitnode/core/components/i18n-provider\";\nimport { DataTableSkeleton } from \"@vitnode/core/components/table/data-table\";\nimport { HeaderContent } from \"@vitnode/core/components/ui/header-content\";\nimport { checkAdminPermissionApi } from \"@vitnode/core/lib/api/get-session-admin-api\";\nimport { getTranslations } from \"next-intl/server\";\nimport dynamic from \"next/dynamic\";\nimport { notFound } from \"next/navigation\";\nimport React from \"react\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { ActionsCategoriesAdmin } from \"@/views/admin/categories/actions/actions\";\n\nconst CategoriesAdminView = dynamic(async () =>\n import(\"@/views/admin/categories/table/categories-admin-view\").then(mod => ({\n default: mod.CategoriesAdminView,\n })),\n);\n\nexport const generateMetadata = async (): Promise<Metadata> => {\n const t = await getTranslations(\"@vitnode/blog.admin.nav\");\n\n return {\n title: t(\"categories\"),\n };\n};\n\nexport default async function CategoriesPage(\n params: React.ComponentProps<typeof CategoriesAdminView>,\n) {\n const [t, tNav, canView, canCreate] = await Promise.all([\n getTranslations(\"@vitnode/blog.admin.categories\"),\n getTranslations(\"@vitnode/blog.admin.nav\"),\n checkAdminPermissionApi({\n plugin: CONFIG_PLUGIN.pluginId,\n module: \"categories\",\n permission: \"can_view\",\n }),\n checkAdminPermissionApi({\n plugin: CONFIG_PLUGIN.pluginId,\n module: \"categories\",\n permission: \"can_create\",\n }),\n ]);\n\n if (!canView) {\n notFound();\n }\n\n return (\n <I18nProvider namespaces={[\"@vitnode/blog.admin.categories\"]}>\n <div className=\"p-4\">\n <HeaderContent desc={t(\"desc\")} h1={tNav(\"categories\")}>\n {canCreate && <ActionsCategoriesAdmin />}\n </HeaderContent>\n\n <React.Suspense fallback={<DataTableSkeleton columns={4} />}>\n <CategoriesAdminView {...params} />\n </React.Suspense>\n </div>\n </I18nProvider>\n );\n}\n"],"mappings":"0oBAcA,MAAM,EAAsB,EAAQ,SAClC,OAAO,oEAAuD,CAAC,KAAK,IAAQ,CAC1E,QAAS,EAAI,mBACf,EAAE,CACJ,EAEa,EAAmB,UAGvB,CACL,OAAO,MAHO,EAAgB,yBAAyB,EAAA,CAG9C,YAAY,CACvB,GAGF,eAA8B,EAC5B,EACA,CACA,GAAM,CAAC,EAAG,EAAM,EAAS,GAAa,MAAM,QAAQ,IAAI,CACtD,EAAgB,gCAAgC,EAChD,EAAgB,yBAAyB,EACzC,EAAwB,CACtB,OAAQ,EAAc,SACtB,OAAQ,aACR,WAAY,UACd,CAAC,EACD,EAAwB,CACtB,OAAQ,EAAc,SACtB,OAAQ,aACR,WAAY,YACd,CAAC,CACH,CAAC,EAMD,OAJK,GACH,EAAS,EAIT,EAAC,EAAD,CAAc,WAAY,CAAC,gCAAgC,WACzD,EAAC,MAAD,CAAK,UAAU,eAAf,CACE,EAAC,EAAD,CAAe,KAAM,EAAE,MAAM,EAAG,GAAI,EAAK,YAAY,WAClD,GAAa,EAAC,EAAD,CAAyB,CAAA,CAC1B,CAAA,EAEf,EAAC,EAAM,SAAP,CAAgB,SAAU,EAAC,EAAD,CAAmB,QAAS,CAAI,CAAA,WACxD,EAAC,EAAD,CAAqB,GAAI,CAAS,CAAA,CACpB,CAAA,CACb,GACO,CAAA,CAElB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","names":[],"sources":["../../../../../../src/routes/admin/blog/posts/page.tsx"],"sourcesContent":["import type { Metadata } from \"next\";\n\nimport { I18nProvider } from \"@vitnode/core/components/i18n-provider\";\nimport { DataTableSkeleton } from \"@vitnode/core/components/table/data-table\";\nimport { HeaderContent } from \"@vitnode/core/components/ui/header-content\";\nimport { checkAdminPermissionApi } from \"@vitnode/core/lib/api/get-session-admin-api\";\nimport { getTranslations } from \"next-intl/server\";\nimport dynamic from \"next/dynamic\";\nimport { notFound } from \"next/navigation\";\nimport React from \"react\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\nimport { ActionsPostsAdmin } from \"@/views/admin/posts/actions/actions\";\n\nconst PostsAdminView = dynamic(async () =>\n import(\"@/views/admin/posts/table/posts-admin-view\").then(mod => ({\n default: mod.PostsAdminView,\n })),\n);\n\nexport const generateMetadata = async (): Promise<Metadata> => {\n const t = await getTranslations(\"@vitnode/blog.admin.nav\");\n\n return {\n title: t(\"posts\"),\n };\n};\n\nexport default async function PostsPage(\n params: React.ComponentProps<typeof PostsAdminView>,\n) {\n const [t, tNav, canView, canCreate] = await Promise.all([\n getTranslations(\"@vitnode/blog.admin.posts\"),\n getTranslations(\"@vitnode/blog.admin.nav\"),\n checkAdminPermissionApi({\n plugin: CONFIG_PLUGIN.pluginId,\n module: \"posts\",\n permission: \"can_view\",\n }),\n checkAdminPermissionApi({\n plugin: CONFIG_PLUGIN.pluginId,\n module: \"posts\",\n permission: \"can_create\",\n }),\n ]);\n\n if (!canView) {\n notFound();\n }\n\n return (\n <I18nProvider namespaces={[\"@vitnode/blog.admin.posts\"]}>\n <div className=\"p-4\">\n <HeaderContent desc={t(\"desc\")} h1={tNav(\"posts\")}>\n {canCreate && <ActionsPostsAdmin />}\n </HeaderContent>\n\n <React.Suspense fallback={<DataTableSkeleton columns={5} />}>\n <PostsAdminView {...params} />\n </React.Suspense>\n </div>\n </I18nProvider>\n );\n}\n"],"mappings":"goBAcA,MAAM,EAAiB,EAAQ,SAC7B,OAAO,0DAA6C,CAAC,KAAK,IAAQ,CAChE,QAAS,EAAI,cACf,EAAE,CACJ,EAEa,EAAmB,UAGvB,CACL,OAAO,MAHO,EAAgB,yBAAyB,EAAA,CAG9C,OAAO,CAClB,GAGF,eAA8B,EAC5B,EACA,CACA,GAAM,CAAC,EAAG,EAAM,EAAS,GAAa,MAAM,QAAQ,IAAI,CACtD,EAAgB,2BAA2B,EAC3C,EAAgB,yBAAyB,EACzC,EAAwB,CACtB,OAAQ,EAAc,SACtB,OAAQ,QACR,WAAY,UACd,CAAC,EACD,EAAwB,CACtB,OAAQ,EAAc,SACtB,OAAQ,QACR,WAAY,YACd,CAAC,CACH,CAAC,EAMD,OAJK,GACH,EAAS,EAIT,EAAC,EAAD,CAAc,WAAY,CAAC,2BAA2B,WACpD,EAAC,MAAD,CAAK,UAAU,eAAf,CACE,EAAC,EAAD,CAAe,KAAM,EAAE,MAAM,EAAG,GAAI,EAAK,OAAO,WAC7C,GAAa,EAAC,EAAD,CAAoB,CAAA,CACrB,CAAA,EAEf,EAAC,EAAM,SAAP,CAAgB,SAAU,EAAC,EAAD,CAAmB,QAAS,CAAI,CAAA,WACxD,EAAC,EAAD,CAAgB,GAAI,CAAS,CAAA,CACf,CAAA,CACb,GACO,CAAA,CAElB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","names":[],"sources":["../../../../../../src/views/admin/categories/actions/actions.tsx"],"sourcesContent":["\"use client\";\n\nimport { Button } from \"@vitnode/core/components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@vitnode/core/components/ui/dialog\";\nimport { Loader } from \"@vitnode/core/components/ui/loader\";\nimport { PlusIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport dynamic from \"next/dynamic\";\nimport React from \"react\";\n\nconst CreateEditActionCategoriesAdmin = dynamic(async () =>\n import(\"./create-edit/create-edit\").then(mod => ({\n default: mod.CreateEditActionCategoriesAdmin,\n })),\n);\n\nexport const ActionsCategoriesAdmin = () => {\n const t = useTranslations(\"@vitnode/blog.admin.categories.create\");\n\n return (\n <Dialog>\n <DialogTrigger render={<Button />}>\n <PlusIcon />\n {t(\"title\")}\n </DialogTrigger>\n\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t(\"title\")}</DialogTitle>\n <DialogDescription>{t(\"desc\")}</DialogDescription>\n </DialogHeader>\n\n <React.Suspense fallback={<Loader />}>\n <CreateEditActionCategoriesAdmin />\n </React.Suspense>\n </DialogContent>\n </Dialog>\n );\n};\n"],"mappings":"wdAiBA,MAAM,EAAkC,EAAQ,SAC9C,OAAO,+BAA4B,CAAC,KAAK,IAAQ,CAC/C,QAAS,EAAI,+BACf,EAAE,CACJ,EAEa,MAA+B,CAC1C,IAAM,EAAI,EAAgB,uCAAuC,EAEjE,OACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAe,OAAQ,EAAC,EAAD,CAAS,CAAA,WAAhC,CACE,EAAC,EAAD,CAAW,CAAA,EACV,EAAE,OAAO,CACG,IAEf,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAc,EAAE,OAAO,CAAe,CAAA,EACtC,EAAC,EAAD,CAAA,SAAoB,EAAE,MAAM,CAAqB,CAAA,CACrC,CAAA,CAAA,EAEd,EAAC,EAAM,SAAP,CAAgB,SAAU,EAAC,EAAD,CAAS,CAAA,WACjC,EAAC,EAAD,CAAkC,CAAA,CACpB,CAAA,CACH,CAAA,CAAA,CACT,CAAA,CAAA,CAEZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-edit.js","names":[],"sources":["../../../../../../../src/views/admin/categories/actions/create-edit/create-edit.tsx"],"sourcesContent":["import {\n AutoForm,\n type AutoFormOnSubmit,\n} from \"@vitnode/core/components/form/auto-form\";\nimport { AutoFormInput } from \"@vitnode/core/components/form/fields/input\";\nimport { useDialog } from \"@vitnode/core/components/ui/dialog\";\nimport { usePathname, useRouter } from \"@vitnode/core/lib/navigation\";\nimport { useTranslations } from \"next-intl\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\n\nimport type { zodCreateCategorySchema } from \"@/api/modules/admin/categories/routes/create.route\";\n\nimport { createMutationApi, editMutationApi } from \"./mutation-api\";\n\nexport const CreateEditActionCategoriesAdmin = ({\n data,\n}: {\n data?: z.infer<typeof zodCreateCategorySchema> & { id: number };\n}) => {\n const t = useTranslations(\"@vitnode/blog.admin.categories\");\n const tCore = useTranslations(\"core.global.errors\");\n const { setOpen } = useDialog();\n const { push } = useRouter();\n const pathname = usePathname();\n const formSchema = z.object({\n title: z.string().default(data?.title ?? \"\"),\n });\n\n const onSubmit: AutoFormOnSubmit<typeof formSchema> = async (\n values,\n form,\n ) => {\n let error = \"\";\n if (data?.id) {\n const mutation = await editMutationApi({\n id: data.id,\n ...values,\n });\n\n if (mutation?.error) {\n error = mutation.error;\n }\n } else {\n const mutation = await createMutationApi(values);\n\n if (mutation?.error) {\n error = mutation.error;\n }\n }\n\n if (error) {\n if (error.includes(\"already exists\")) {\n form.setError(\"title\", {\n type: \"manual\",\n message: t(\"create.form.title.already_exists\"),\n });\n\n return;\n }\n\n toast.error(tCore(\"title\"), {\n description: tCore(\"internal_server_error\"),\n });\n\n return;\n }\n setOpen?.(false);\n push(pathname);\n };\n\n return (\n <AutoForm\n fields={[\n {\n id: \"title\",\n component: props => (\n <AutoFormInput label={t(\"create.form.title.label\")} {...props} />\n ),\n },\n ]}\n formSchema={formSchema}\n onSubmit={onSubmit}\n submitButtonProps={{\n children: t(`${data ? \"edit\" : \"create\"}.submit`),\n }}\n />\n );\n};\n"],"mappings":"6eAeA,MAAa,GAAmC,CAC9C,UAGI,CACJ,IAAM,EAAI,EAAgB,gCAAgC,EACpD,EAAQ,EAAgB,oBAAoB,EAC5C,CAAE,WAAY,EAAU,EACxB,CAAE,QAAS,EAAU,EACrB,EAAW,EAAY,EA+C7B,OACE,EAAC,EAAD,CACE,OAAQ,CACN,CACE,GAAI,QACJ,UAAW,GACT,EAAC,EAAD,CAAe,MAAO,EAAE,yBAAyB,EAAG,GAAI,CAAQ,CAAA,CAEpE,CACF,EACY,WAxDG,EAAE,OAAO,CAC1B,MAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,GAAM,OAAS,EAAE,CAC7C,CAsDgB,EACF,eApDZ,EACA,IACG,CACH,IAAI,EAAQ,GACZ,GAAI,GAAM,GAAI,CACZ,IAAM,EAAW,MAAM,EAAgB,CACrC,GAAI,EAAK,GACT,GAAG,CACL,CAAC,EAEG,GAAU,QACZ,EAAQ,EAAS,MAErB,KAAO,CACL,IAAM,EAAW,MAAM,EAAkB,CAAM,EAE3C,GAAU,QACZ,EAAQ,EAAS,MAErB,CAEA,GAAI,EAAO,CACT,GAAI,EAAM,SAAS,gBAAgB,EAAG,CACpC,EAAK,SAAS,QAAS,CACrB,KAAM,SACN,QAAS,EAAE,kCAAkC,CAC/C,CAAC,EAED,MACF,CAEA,EAAM,MAAM,EAAM,OAAO,EAAG,CAC1B,YAAa,EAAM,uBAAuB,CAC5C,CAAC,EAED,MACF,CACA,IAAU,EAAK,EACf,EAAK,CAAQ,CACf,EAcI,kBAAmB,CACjB,SAAU,EAAE,GAAG,EAAO,OAAS,SAAS,QAAQ,CAClD,CACD,CAAA,CAEL"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { zodCreateCategorySchema } from "../../../../../api/modules/admin/categories/routes/create.route.js";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
//#region src/views/admin/categories/actions/create-edit/mutation-api.d.ts
|
|
4
|
-
declare const createMutationApi: (body: z.infer<typeof zodCreateCategorySchema>) => Promise<{
|
|
5
|
-
error: string;
|
|
6
|
-
} | undefined>;
|
|
7
|
-
declare const editMutationApi: ({ id, ...body }: z.infer<typeof zodCreateCategorySchema> & {
|
|
8
|
-
id: number;
|
|
9
|
-
}) => Promise<{
|
|
10
|
-
error: string;
|
|
11
|
-
} | undefined>;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { createMutationApi, editMutationApi };
|
|
14
|
-
//# sourceMappingURL=mutation-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-api.d.ts","names":[],"sources":["../../../../../../../src/views/admin/categories/actions/create-edit/mutation-api.ts"],"mappings":";;;cAWa,oBACX,MAAM,EAAE,aAAa,6BAAwB;;;cAsBlC,oBAAyB,OAAA,QAGnC,EAAE,aAAa;EAA6B;MAAY"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use server";import{categoriesAdminModule as e}from"../../../../../api/modules/admin/categories/categories.admin.module.js";import{fetcher as t}from"@vitnode/core/lib/fetcher";import{revalidatePath as n}from"next/cache";const r=async r=>{let i=await t(e,{prefixPath:`/admin`,method:`post`,module:`categories`,path:`/`,args:{body:r}});if(i.status!==201)return{error:await i.text()};n(`/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories`,`page`)},i=async({id:r,...i})=>{let a=await t(e,{prefixPath:`/admin`,method:`put`,module:`categories`,path:`/{id}`,args:{params:{id:r},body:i}});if(a.status!==200)return{error:await a.text()};n(`/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories`,`page`)};export{r as createMutationApi,i as editMutationApi};
|
|
2
|
-
//# sourceMappingURL=mutation-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-api.js","names":[],"sources":["../../../../../../../src/views/admin/categories/actions/create-edit/mutation-api.ts"],"sourcesContent":["\"use server\";\n\nimport type { z } from \"zod\";\n\nimport { fetcher } from \"@vitnode/core/lib/fetcher\";\nimport { revalidatePath } from \"next/cache\";\n\nimport type { zodCreateCategorySchema } from \"../../../../../api/modules/admin/categories/routes/create.route\";\n\nimport { categoriesAdminModule } from \"../../../../../api/modules/admin/categories/categories.admin.module\";\n\nexport const createMutationApi = async (\n body: z.infer<typeof zodCreateCategorySchema>,\n) => {\n const res = await fetcher(categoriesAdminModule, {\n prefixPath: \"/admin\",\n method: \"post\",\n module: \"categories\",\n path: \"/\",\n args: {\n body,\n },\n });\n\n if (res.status !== 201) {\n return { error: await res.text() };\n }\n\n revalidatePath(\n \"/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories\",\n \"page\",\n );\n};\n\nexport const editMutationApi = async ({\n id,\n ...body\n}: z.infer<typeof zodCreateCategorySchema> & { id: number }) => {\n const res = await fetcher(categoriesAdminModule, {\n prefixPath: \"/admin\",\n method: \"put\",\n module: \"categories\",\n path: \"/{id}\",\n args: {\n params: {\n id,\n },\n body,\n },\n });\n\n if (res.status !== 200) {\n return { error: await res.text() };\n }\n\n revalidatePath(\n \"/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories\",\n \"page\",\n );\n};\n"],"mappings":"4NAWA,MAAa,EAAoB,KAC/B,IACG,CACH,IAAM,EAAM,MAAM,EAAQ,EAAuB,CAC/C,WAAY,SACZ,OAAQ,OACR,OAAQ,aACR,KAAM,IACN,KAAM,CACJ,MACF,CACF,CAAC,EAED,GAAI,EAAI,SAAW,IACjB,MAAO,CAAE,MAAO,MAAM,EAAI,KAAK,CAAE,EAGnC,EACE,kEACA,MACF,CACF,EAEa,EAAkB,MAAO,CACpC,KACA,GAAG,KAC2D,CAC9D,IAAM,EAAM,MAAM,EAAQ,EAAuB,CAC/C,WAAY,SACZ,OAAQ,MACR,OAAQ,aACR,KAAM,QACN,KAAM,CACJ,OAAQ,CACN,IACF,EACA,MACF,CACF,CAAC,EAED,GAAI,EAAI,SAAW,IACjB,MAAO,CAAE,MAAO,MAAM,EAAI,KAAK,CAAE,EAGnC,EACE,kEACA,MACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delete-action.js","names":[],"sources":["../../../../../../../../src/views/admin/categories/table/actions/delete/delete-action.tsx"],"sourcesContent":["\"use client\";\n\nimport { ConfirmActionAlertDialog } from \"@vitnode/core/components/confirm-action/confirm-action-alert-dialog\";\nimport { useAdminStaffPermission } from \"@vitnode/core/components/staff-permission/provider\";\nimport { Button } from \"@vitnode/core/components/ui/button\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@vitnode/core/components/ui/tooltip\";\nimport { Trash2Icon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { toast } from \"sonner\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\n\nimport { mutationApi } from \"./mutation-api\";\n\nexport const DeleteAction = ({ title, id }: { id: number; title: string }) => {\n const t = useTranslations(\"@vitnode/blog.admin.categories.delete\");\n const tGlobal = useTranslations(\"core.global\");\n const canDelete = useAdminStaffPermission({\n plugin: CONFIG_PLUGIN.pluginId,\n module: \"categories\",\n permission: \"can_delete\",\n });\n\n if (!canDelete) return null;\n\n return (\n <TooltipProvider>\n <Tooltip>\n <ConfirmActionAlertDialog\n description={t.rich(\"desc\", {\n title: () => (\n <span className=\"text-foreground font-bold\">{title}</span>\n ),\n })}\n onSubmit={async ({ onClose }) => {\n const mutation = await mutationApi(id);\n if (mutation?.error) {\n toast.error(tGlobal(\"errors.title\"), {\n description: tGlobal(\"errors.internal_server_error\"),\n });\n\n return;\n }\n\n toast.success(t(\"success\"), {\n description: title,\n });\n onClose();\n }}\n textSubmit={t(\"confirm\")}\n title={t(\"title\")}\n >\n <TooltipTrigger\n render={\n <Button aria-label={t(\"title\")} size=\"icon\" variant=\"destructive\">\n <Trash2Icon className=\"size-4\" />\n </Button>\n }\n />\n </ConfirmActionAlertDialog>\n\n <TooltipContent>{t(\"title\")}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n"],"mappings":"kqBAmBA,MAAa,GAAgB,CAAE,QAAO,QAAwC,CAC5E,IAAM,EAAI,EAAgB,uCAAuC,EAC3D,EAAU,EAAgB,aAAa,EAS7C,OARkB,EAAwB,CACxC,OAAQ,EAAc,SACtB,OAAQ,aACR,WAAY,YACd,CAEa,EAGX,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CACE,YAAa,EAAE,KAAK,OAAQ,CAC1B,UACE,EAAC,OAAD,CAAM,UAAU,qCAA6B,CAAY,CAAA,CAE7D,CAAC,EACD,SAAU,MAAO,CAAE,aAAc,CAE/B,IAAI,MADmB,EAAY,CAAE,EAAA,EACvB,MAAO,CACnB,EAAM,MAAM,EAAQ,cAAc,EAAG,CACnC,YAAa,EAAQ,8BAA8B,CACrD,CAAC,EAED,MACF,CAEA,EAAM,QAAQ,EAAE,SAAS,EAAG,CAC1B,YAAa,CACf,CAAC,EACD,EAAQ,CACV,EACA,WAAY,EAAE,SAAS,EACvB,MAAO,EAAE,OAAO,WAEhB,EAAC,EAAD,CACE,OACE,EAAC,EAAD,CAAQ,aAAY,EAAE,OAAO,EAAG,KAAK,OAAO,QAAQ,uBAClD,EAAC,EAAD,CAAY,UAAU,QAAU,CAAA,CAC1B,CAAA,CAEX,CAAA,CACuB,CAAA,EAE1B,EAAC,EAAD,CAAA,SAAiB,EAAE,OAAO,CAAkB,CAAA,CACrC,CAAA,CAAA,CACM,CAAA,EAxCI,IA0CzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-api.d.ts","names":[],"sources":["../../../../../../../../src/views/admin/categories/table/actions/delete/mutation-api.ts"],"mappings":";cAOa,cAAqB,eAAU"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use server";import{categoriesAdminModule as e}from"../../../../../../api/modules/admin/categories/categories.admin.module.js";import{fetcher as t}from"@vitnode/core/lib/fetcher";import{revalidatePath as n}from"next/cache";const r=async r=>{let i=await t(e,{prefixPath:`/admin`,method:`delete`,path:`/{id}`,module:`categories`,args:{params:{id:r}}});if(!i.ok)return{error:await i.text()};n(`/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories`,`page`)};export{r as mutationApi};
|
|
2
|
-
//# sourceMappingURL=mutation-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-api.js","names":[],"sources":["../../../../../../../../src/views/admin/categories/table/actions/delete/mutation-api.ts"],"sourcesContent":["\"use server\";\n\nimport { fetcher } from \"@vitnode/core/lib/fetcher\";\nimport { revalidatePath } from \"next/cache\";\n\nimport { categoriesAdminModule } from \"@/api/modules/admin/categories/categories.admin.module\";\n\nexport const mutationApi = async (id: number) => {\n const res = await fetcher(categoriesAdminModule, {\n prefixPath: \"/admin\",\n method: \"delete\",\n path: \"/{id}\",\n module: \"categories\",\n args: {\n params: {\n id,\n },\n },\n });\n\n if (!res.ok) {\n return { error: await res.text() };\n }\n\n revalidatePath(\n \"/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories\",\n \"page\",\n );\n};\n"],"mappings":"+NAOA,MAAa,EAAc,KAAO,IAAe,CAC/C,IAAM,EAAM,MAAM,EAAQ,EAAuB,CAC/C,WAAY,SACZ,OAAQ,SACR,KAAM,QACN,OAAQ,aACR,KAAM,CACJ,OAAQ,CACN,IACF,CACF,CACF,CAAC,EAED,GAAI,CAAC,EAAI,GACP,MAAO,CAAE,MAAO,MAAM,EAAI,KAAK,CAAE,EAGnC,EACE,kEACA,MACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edit-action.js","names":[],"sources":["../../../../../../../src/views/admin/categories/table/actions/edit-action.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAdminStaffPermission } from \"@vitnode/core/components/staff-permission/provider\";\nimport { Button } from \"@vitnode/core/components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@vitnode/core/components/ui/dialog\";\nimport { Loader } from \"@vitnode/core/components/ui/loader\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@vitnode/core/components/ui/tooltip\";\nimport { PencilIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport dynamic from \"next/dynamic\";\nimport React from \"react\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\n\nconst CreateEditActionCategoriesAdmin = dynamic(async () =>\n import(\"../..//actions/create-edit/create-edit\").then(mod => ({\n default: mod.CreateEditActionCategoriesAdmin,\n })),\n);\n\nexport const EditAction = (\n props: Required<React.ComponentProps<typeof CreateEditActionCategoriesAdmin>>,\n) => {\n const t = useTranslations(\"@vitnode/blog.admin.categories.edit\");\n const canEdit = useAdminStaffPermission({\n plugin: CONFIG_PLUGIN.pluginId,\n module: \"categories\",\n permission: \"can_edit\",\n });\n\n if (!canEdit) return null;\n\n return (\n <Dialog>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger\n render={\n <DialogTrigger\n render={\n <Button aria-label={t(\"title\")} size=\"icon\" variant=\"ghost\" />\n }\n >\n <PencilIcon />\n </DialogTrigger>\n }\n />\n <TooltipContent>{t(\"title\")}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t(\"title\")}</DialogTitle>\n <DialogDescription>{props.data.title}</DialogDescription>\n </DialogHeader>\n\n <React.Suspense fallback={<Loader />}>\n <CreateEditActionCategoriesAdmin {...props} />\n </React.Suspense>\n </DialogContent>\n </Dialog>\n );\n};\n"],"mappings":"0uBA0BA,MAAM,EAAkC,EAAQ,SAC9C,OAAO,2CAAyC,CAAC,KAAK,IAAQ,CAC5D,QAAS,EAAI,+BACf,EAAE,CACJ,EAEa,EACX,GACG,CACH,IAAM,EAAI,EAAgB,qCAAqC,EAS/D,OARgB,EAAwB,CACtC,OAAQ,EAAc,SACtB,OAAQ,aACR,WAAY,UACd,CAEW,EAGT,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CACE,OACE,EAAC,EAAD,CACE,OACE,EAAC,EAAD,CAAQ,aAAY,EAAE,OAAO,EAAG,KAAK,OAAO,QAAQ,OAAS,CAAA,WAG/D,EAAC,EAAD,CAAa,CAAA,CACA,CAAA,CAElB,CAAA,EACD,EAAC,EAAD,CAAA,SAAiB,EAAE,OAAO,CAAkB,CAAA,CACrC,CAAA,CAAA,CACM,CAAA,EAEjB,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAc,EAAE,OAAO,CAAe,CAAA,EACtC,EAAC,EAAD,CAAA,SAAoB,EAAM,KAAK,KAAyB,CAAA,CAC5C,CAAA,CAAA,EAEd,EAAC,EAAM,SAAP,CAAgB,SAAU,EAAC,EAAD,CAAS,CAAA,WACjC,EAAC,EAAD,CAAiC,GAAI,CAAQ,CAAA,CAC/B,CAAA,CACH,CAAA,CAAA,CACT,CAAA,CAAA,EA/BW,IAiCvB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"categories-admin-view.js","names":[],"sources":["../../../../../../src/views/admin/categories/table/categories-admin-view.tsx"],"sourcesContent":["import { DateFormat } from \"@vitnode/core/components/date-format\";\nimport { DataTable } from \"@vitnode/core/components/table/data-table\";\nimport { fetcher } from \"@vitnode/core/lib/fetcher\";\nimport { getTranslations } from \"next-intl/server\";\n\nimport { categoriesModule } from \"@/api/modules/categories/categories.module\";\n\nimport { DeleteAction } from \"./actions/delete/delete-action\";\nimport { EditAction } from \"./actions/edit-action\";\n\nexport const CategoriesAdminView = async ({\n searchParams,\n}: {\n searchParams: Promise<Record<string, string | string[] | undefined>>;\n}) => {\n const t = await getTranslations(\"@vitnode/blog.admin.categories.table\");\n const query = await searchParams;\n const res = await fetcher(categoriesModule, {\n path: \"/\",\n method: \"get\",\n module: \"categories\",\n args: {\n query,\n },\n withPagination: true,\n options: {\n cache: \"force-cache\",\n },\n });\n const data = await res.json();\n\n return (\n <DataTable\n columns={[\n {\n accessorKey: \"id\",\n header: \"ID\",\n className: \"w-24\",\n },\n {\n accessorKey: \"title\",\n header: t(\"title\"),\n },\n {\n accessorKey: \"updatedAt\",\n header: t(\"updated_at\"),\n className: \"w-48\",\n cell: ({ row }) => <DateFormat date={row.updatedAt} />,\n },\n {\n id: \"actions\",\n header: \"\",\n align: \"right\",\n className: \"w-10\",\n cell: ({ row }) => (\n <>\n <EditAction data={row} />\n <DeleteAction {...row} />\n </>\n ),\n },\n ]}\n edges={data.edges.map(edge => ({ ...edge }))}\n id=\"categories-table\"\n order={{\n columns: [\"createdAt\", \"updatedAt\"],\n defaultOrder: {\n column: \"createdAt\",\n order: \"desc\",\n },\n }}\n pageInfo={data.pageInfo}\n />\n );\n};\n"],"mappings":"igBAUA,MAAa,EAAsB,MAAO,CACxC,kBAGI,CACJ,IAAM,EAAI,MAAM,EAAgB,sCAAsC,EAchE,EAAO,MAAM,MAZD,EAAQ,EAAkB,CAC1C,KAAM,IACN,OAAQ,MACR,OAAQ,aACR,KAAM,CACJ,MAAA,MANgB,CAOlB,EACA,eAAgB,GAChB,QAAS,CACP,MAAO,aACT,CACF,CAAC,EAAA,CACsB,KAAK,EAE5B,OACE,EAAC,EAAD,CACE,QAAS,CACP,CACE,YAAa,KACb,OAAQ,KACR,UAAW,MACb,EACA,CACE,YAAa,QACb,OAAQ,EAAE,OAAO,CACnB,EACA,CACE,YAAa,YACb,OAAQ,EAAE,YAAY,EACtB,UAAW,OACX,MAAO,CAAE,SAAU,EAAC,EAAD,CAAY,KAAM,EAAI,SAAY,CAAA,CACvD,EACA,CACE,GAAI,UACJ,OAAQ,GACR,MAAO,QACP,UAAW,OACX,MAAO,CAAE,SACP,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,EAAD,CAAY,KAAM,CAAM,CAAA,EACxB,EAAC,EAAD,CAAc,GAAI,CAAM,CAAA,CACxB,CAAA,CAAA,CAEN,CACF,EACA,MAAO,EAAK,MAAM,IAAI,IAAS,CAAE,GAAG,CAAK,EAAE,EAC3C,GAAG,mBACH,MAAO,CACL,QAAS,CAAC,YAAa,WAAW,EAClC,aAAc,CACZ,OAAQ,YACR,MAAO,MACT,CACF,EACA,SAAU,EAAK,QAChB,CAAA,CAEL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","names":[],"sources":["../../../../../../src/views/admin/posts/actions/actions.tsx"],"sourcesContent":["\"use client\";\n\nimport { Button } from \"@vitnode/core/components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@vitnode/core/components/ui/dialog\";\nimport { Loader } from \"@vitnode/core/components/ui/loader\";\nimport { PlusIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport dynamic from \"next/dynamic\";\nimport React from \"react\";\n\nconst CreateEditActionPostsAdmin = dynamic(async () =>\n import(\"./create-edit/create-edit\").then(module => ({\n default: module.CreateEditActionPostsAdmin,\n })),\n);\n\nexport const ActionsPostsAdmin = () => {\n const t = useTranslations(\"@vitnode/blog.admin.posts.create\");\n\n return (\n <Dialog>\n <DialogTrigger render={<Button />}>\n <PlusIcon />\n {t(\"title\")}\n </DialogTrigger>\n\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t(\"title\")}</DialogTitle>\n <DialogDescription>{t(\"desc\")}</DialogDescription>\n </DialogHeader>\n\n <React.Suspense fallback={<Loader />}>\n <CreateEditActionPostsAdmin />\n </React.Suspense>\n </DialogContent>\n </Dialog>\n );\n};\n"],"mappings":"wdAiBA,MAAM,EAA6B,EAAQ,SACzC,OAAO,+BAA4B,CAAC,KAAK,IAAW,CAClD,QAAS,EAAO,0BAClB,EAAE,CACJ,EAEa,MAA0B,CACrC,IAAM,EAAI,EAAgB,kCAAkC,EAE5D,OACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAe,OAAQ,EAAC,EAAD,CAAS,CAAA,WAAhC,CACE,EAAC,EAAD,CAAW,CAAA,EACV,EAAE,OAAO,CACG,IAEf,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAc,EAAE,OAAO,CAAe,CAAA,EACtC,EAAC,EAAD,CAAA,SAAoB,EAAE,MAAM,CAAqB,CAAA,CACrC,CAAA,CAAA,EAEd,EAAC,EAAM,SAAP,CAAgB,SAAU,EAAC,EAAD,CAAS,CAAA,WACjC,EAAC,EAAD,CAA6B,CAAA,CACf,CAAA,CACH,CAAA,CAAA,CACT,CAAA,CAAA,CAEZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-edit.js","names":[],"sources":["../../../../../../../src/views/admin/posts/actions/create-edit/create-edit.tsx"],"sourcesContent":["import {\n AutoForm,\n type AutoFormOnSubmit,\n} from \"@vitnode/core/components/form/auto-form\";\nimport { AutoFormCombobox } from \"@vitnode/core/components/form/fields/combobox\";\nimport { AutoFormInput } from \"@vitnode/core/components/form/fields/input\";\nimport { AutoFormTextarea } from \"@vitnode/core/components/form/fields/textarea\";\nimport { useDialog } from \"@vitnode/core/components/ui/dialog\";\nimport { fetcherClient } from \"@vitnode/core/lib/fetcher-client\";\nimport { usePathname, useRouter } from \"@vitnode/core/lib/navigation\";\nimport { useTranslations } from \"next-intl\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\n\nimport type { zodPostSchema } from \"@/api/modules/posts/routes/get.route\";\n\nimport { categoriesModule } from \"@/api/modules/categories/categories.module\";\n\nimport { createMutationApi, editMutationApi } from \"./mutation-api\";\n\nexport const CreateEditActionPostsAdmin = ({\n data,\n}: {\n data?: z.infer<typeof zodPostSchema> & { id?: number };\n}) => {\n const t = useTranslations(\"@vitnode/blog.admin.posts\");\n const tCore = useTranslations(\"core.global.errors\");\n const { setOpen } = useDialog();\n const { push } = useRouter();\n const pathname = usePathname();\n const formSchema = z.object({\n title: z\n .string()\n .min(3, {\n message: tCore(\"field_min_length\", {\n min: 3,\n }),\n })\n .default(data?.title ?? \"\"),\n content: z.string().default(data?.content ?? \"\"),\n categoryId: z\n .object({ value: z.string(), label: z.string() })\n .refine(value => value.value !== \"\", {\n message: tCore(\"field_required\"),\n })\n .default(\n data?.category\n ? { value: data.category.id.toString(), label: data.category.title }\n : { value: \"\", label: \"\" },\n ),\n });\n\n const onSubmit: AutoFormOnSubmit<typeof formSchema> = async (\n values,\n form,\n ) => {\n let error = \"\";\n if (data?.id) {\n const mutation = await editMutationApi({\n id: data.id,\n ...values,\n categoryId: parseInt(values.categoryId.value, 10),\n });\n\n if (mutation?.error) {\n error = mutation.error;\n }\n } else {\n const mutation = await createMutationApi({\n ...values,\n categoryId: parseInt(values.categoryId.value, 10),\n });\n\n if (mutation?.error) {\n error = mutation.error;\n }\n }\n\n if (error) {\n if (error.includes(\"already exists\")) {\n form.setError(\"title\", {\n type: \"manual\",\n message: t(\"create.form.title.already_exists\"),\n });\n\n return;\n }\n\n toast.error(tCore(\"title\"), {\n description: tCore(\"internal_server_error\"),\n });\n\n return;\n }\n setOpen?.(false);\n push(pathname);\n };\n\n return (\n <AutoForm\n fields={[\n {\n id: \"title\",\n component: props => (\n <AutoFormInput label={t(\"create.form.title.label\")} {...props} />\n ),\n },\n {\n id: \"categoryId\",\n component: props => (\n <AutoFormCombobox\n fetchData={async ({ search }) => {\n const res = await fetcherClient(categoriesModule, {\n path: \"/\",\n method: \"get\",\n module: \"categories\",\n args: {\n query: {\n search,\n },\n },\n });\n const data = await res.json();\n\n return data.edges.map(category => ({\n label: category.title,\n value: category.id.toString(),\n }));\n }}\n id=\"categoryId\"\n label={t(\"create.form.category\")}\n {...props}\n />\n ),\n },\n {\n id: \"content\",\n component: props => (\n <AutoFormTextarea\n label={t(\"create.form.content\")}\n rows={10}\n {...props}\n />\n ),\n },\n ]}\n formSchema={formSchema}\n onSubmit={onSubmit}\n submitButtonProps={{\n children: t(`${data ? \"edit\" : \"create\"}.submit`),\n }}\n />\n );\n};\n"],"mappings":"8yBAoBA,MAAa,GAA8B,CACzC,UAGI,CACJ,IAAM,EAAI,EAAgB,2BAA2B,EAC/C,EAAQ,EAAgB,oBAAoB,EAC5C,CAAE,WAAY,EAAU,EACxB,CAAE,QAAS,EAAU,EACrB,EAAW,EAAY,EAqE7B,OACE,EAAC,EAAD,CACE,OAAQ,CACN,CACE,GAAI,QACJ,UAAW,GACT,EAAC,EAAD,CAAe,MAAO,EAAE,yBAAyB,EAAG,GAAI,CAAQ,CAAA,CAEpE,EACA,CACE,GAAI,aACJ,UAAW,GACT,EAAC,EAAD,CACE,UAAW,MAAO,CAAE,aAaX,MAFY,MAVD,EAAc,EAAkB,CAChD,KAAM,IACN,OAAQ,MACR,OAAQ,aACR,KAAM,CACJ,MAAO,CACL,QACF,CACF,CACF,CAAC,EAAA,CACsB,KAAK,EAAA,CAEhB,MAAM,IAAI,IAAa,CACjC,MAAO,EAAS,MAChB,MAAO,EAAS,GAAG,SAAS,CAC9B,EAAE,EAEJ,GAAG,aACH,MAAO,EAAE,sBAAsB,EAC/B,GAAI,CACL,CAAA,CAEL,EACA,CACE,GAAI,UACJ,UAAW,GACT,EAAC,EAAD,CACE,MAAO,EAAE,qBAAqB,EAC9B,KAAM,GACN,GAAI,CACL,CAAA,CAEL,CACF,EACY,WApHG,EAAE,OAAO,CAC1B,MAAO,EACJ,OAAO,CAAC,CACR,IAAI,EAAG,CACN,QAAS,EAAM,mBAAoB,CACjC,IAAK,CACP,CAAC,CACH,CAAC,CAAC,CACD,QAAQ,GAAM,OAAS,EAAE,EAC5B,QAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,GAAM,SAAW,EAAE,EAC/C,WAAY,EACT,OAAO,CAAE,MAAO,EAAE,OAAO,EAAG,MAAO,EAAE,OAAO,CAAE,CAAC,CAAC,CAChD,OAAO,GAAS,EAAM,QAAU,GAAI,CACnC,QAAS,EAAM,gBAAgB,CACjC,CAAC,CAAC,CACD,QACC,GAAM,SACF,CAAE,MAAO,EAAK,SAAS,GAAG,SAAS,EAAG,MAAO,EAAK,SAAS,KAAM,EACjE,CAAE,MAAO,GAAI,MAAO,EAAG,CAC7B,CACJ,CAgGgB,EACF,eA9FZ,EACA,IACG,CACH,IAAI,EAAQ,GACZ,GAAI,GAAM,GAAI,CACZ,IAAM,EAAW,MAAM,EAAgB,CACrC,GAAI,EAAK,GACT,GAAG,EACH,WAAY,SAAS,EAAO,WAAW,MAAO,EAAE,CAClD,CAAC,EAEG,GAAU,QACZ,EAAQ,EAAS,MAErB,KAAO,CACL,IAAM,EAAW,MAAM,EAAkB,CACvC,GAAG,EACH,WAAY,SAAS,EAAO,WAAW,MAAO,EAAE,CAClD,CAAC,EAEG,GAAU,QACZ,EAAQ,EAAS,MAErB,CAEA,GAAI,EAAO,CACT,GAAI,EAAM,SAAS,gBAAgB,EAAG,CACpC,EAAK,SAAS,QAAS,CACrB,KAAM,SACN,QAAS,EAAE,kCAAkC,CAC/C,CAAC,EAED,MACF,CAEA,EAAM,MAAM,EAAM,OAAO,EAAG,CAC1B,YAAa,EAAM,uBAAuB,CAC5C,CAAC,EAED,MACF,CACA,IAAU,EAAK,EACf,EAAK,CAAQ,CACf,EAoDI,kBAAmB,CACjB,SAAU,EAAE,GAAG,EAAO,OAAS,SAAS,QAAQ,CAClD,CACD,CAAA,CAEL"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { zodCreatePostSchema } from "../../../../../api/modules/admin/posts/routes/create.route.js";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
//#region src/views/admin/posts/actions/create-edit/mutation-api.d.ts
|
|
4
|
-
declare const createMutationApi: (body: z.infer<typeof zodCreatePostSchema>) => Promise<{
|
|
5
|
-
error: string;
|
|
6
|
-
} | undefined>;
|
|
7
|
-
declare const editMutationApi: ({ id, ...body }: z.infer<typeof zodCreatePostSchema> & {
|
|
8
|
-
id: number;
|
|
9
|
-
}) => Promise<{
|
|
10
|
-
error: string;
|
|
11
|
-
} | undefined>;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { createMutationApi, editMutationApi };
|
|
14
|
-
//# sourceMappingURL=mutation-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-api.d.ts","names":[],"sources":["../../../../../../../src/views/admin/posts/actions/create-edit/mutation-api.ts"],"mappings":";;;cAWa,oBACX,MAAM,EAAE,aAAa,yBAAoB;;;cAsB9B,oBAAyB,OAAA,QAGnC,EAAE,aAAa;EAAyB;MAAY"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use server";import{postsAdminModule as e}from"../../../../../api/modules/admin/posts/posts.admin.module.js";import{fetcher as t}from"@vitnode/core/lib/fetcher";import{revalidatePath as n}from"next/cache";const r=async r=>{let i=await t(e,{prefixPath:`/admin`,method:`post`,module:`posts`,path:`/`,args:{body:r}});if(i.status!==201)return{error:await i.text()};n(`/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts`,`page`)},i=async({id:r,...i})=>{let a=await t(e,{prefixPath:`/admin`,method:`put`,module:`posts`,path:`/{id}`,args:{params:{id:r},body:i}});if(a.status!==200)return{error:await a.text()};n(`/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts`,`page`)};export{r as createMutationApi,i as editMutationApi};
|
|
2
|
-
//# sourceMappingURL=mutation-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-api.js","names":[],"sources":["../../../../../../../src/views/admin/posts/actions/create-edit/mutation-api.ts"],"sourcesContent":["\"use server\";\n\nimport type { z } from \"zod\";\n\nimport { fetcher } from \"@vitnode/core/lib/fetcher\";\nimport { revalidatePath } from \"next/cache\";\n\nimport type { zodCreatePostSchema } from \"@/api/modules/admin/posts/routes/create.route\";\n\nimport { postsAdminModule } from \"@/api/modules/admin/posts/posts.admin.module\";\n\nexport const createMutationApi = async (\n body: z.infer<typeof zodCreatePostSchema>,\n) => {\n const res = await fetcher(postsAdminModule, {\n prefixPath: \"/admin\",\n method: \"post\",\n module: \"posts\",\n path: \"/\",\n args: {\n body,\n },\n });\n\n if (res.status !== 201) {\n return { error: await res.text() };\n }\n\n revalidatePath(\n \"/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts\",\n \"page\",\n );\n};\n\nexport const editMutationApi = async ({\n id,\n ...body\n}: z.infer<typeof zodCreatePostSchema> & { id: number }) => {\n const res = await fetcher(postsAdminModule, {\n prefixPath: \"/admin\",\n method: \"put\",\n module: \"posts\",\n path: \"/{id}\",\n args: {\n params: {\n id,\n },\n body,\n },\n });\n\n if (res.status !== 200) {\n return { error: await res.text() };\n }\n\n revalidatePath(\n \"/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts\",\n \"page\",\n );\n};\n"],"mappings":"6MAWA,MAAa,EAAoB,KAC/B,IACG,CACH,IAAM,EAAM,MAAM,EAAQ,EAAkB,CAC1C,WAAY,SACZ,OAAQ,OACR,OAAQ,QACR,KAAM,IACN,KAAM,CACJ,MACF,CACF,CAAC,EAED,GAAI,EAAI,SAAW,IACjB,MAAO,CAAE,MAAO,MAAM,EAAI,KAAK,CAAE,EAGnC,EACE,6DACA,MACF,CACF,EAEa,EAAkB,MAAO,CACpC,KACA,GAAG,KACuD,CAC1D,IAAM,EAAM,MAAM,EAAQ,EAAkB,CAC1C,WAAY,SACZ,OAAQ,MACR,OAAQ,QACR,KAAM,QACN,KAAM,CACJ,OAAQ,CACN,IACF,EACA,MACF,CACF,CAAC,EAED,GAAI,EAAI,SAAW,IACjB,MAAO,CAAE,MAAO,MAAM,EAAI,KAAK,CAAE,EAGnC,EACE,6DACA,MACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delete-action.js","names":[],"sources":["../../../../../../../../src/views/admin/posts/table/actions/delete/delete-action.tsx"],"sourcesContent":["\"use client\";\n\nimport { ConfirmActionAlertDialog } from \"@vitnode/core/components/confirm-action/confirm-action-alert-dialog\";\nimport { useAdminStaffPermission } from \"@vitnode/core/components/staff-permission/provider\";\nimport { Button } from \"@vitnode/core/components/ui/button\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@vitnode/core/components/ui/tooltip\";\nimport { Trash2Icon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { toast } from \"sonner\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\n\nimport { mutationApi } from \"./mutation-api\";\n\nexport const DeleteAction = ({ title, id }: { id: number; title: string }) => {\n const t = useTranslations(\"@vitnode/blog.admin.posts.delete\");\n const tGlobal = useTranslations(\"core.global\");\n const canDelete = useAdminStaffPermission({\n plugin: CONFIG_PLUGIN.pluginId,\n module: \"posts\",\n permission: \"can_delete\",\n });\n\n if (!canDelete) return null;\n\n return (\n <TooltipProvider>\n <Tooltip>\n <ConfirmActionAlertDialog\n description={t.rich(\"desc\", {\n title: () => (\n <span className=\"text-foreground font-bold\">{title}</span>\n ),\n })}\n onSubmit={async ({ onClose }) => {\n const mutation = await mutationApi(id);\n if (mutation?.error) {\n toast.error(tGlobal(\"errors.title\"), {\n description: tGlobal(\"errors.internal_server_error\"),\n });\n\n return;\n }\n\n toast.success(t(\"success\"), {\n description: title,\n });\n onClose();\n }}\n textSubmit={t(\"confirm\")}\n title={t(\"title\")}\n >\n <TooltipTrigger\n render={\n <Button aria-label={t(\"title\")} size=\"icon\" variant=\"destructive\">\n <Trash2Icon className=\"size-4\" />\n </Button>\n }\n />\n </ConfirmActionAlertDialog>\n\n <TooltipContent>{t(\"title\")}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n"],"mappings":"kqBAmBA,MAAa,GAAgB,CAAE,QAAO,QAAwC,CAC5E,IAAM,EAAI,EAAgB,kCAAkC,EACtD,EAAU,EAAgB,aAAa,EAS7C,OARkB,EAAwB,CACxC,OAAQ,EAAc,SACtB,OAAQ,QACR,WAAY,YACd,CAEa,EAGX,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CACE,YAAa,EAAE,KAAK,OAAQ,CAC1B,UACE,EAAC,OAAD,CAAM,UAAU,qCAA6B,CAAY,CAAA,CAE7D,CAAC,EACD,SAAU,MAAO,CAAE,aAAc,CAE/B,IAAI,MADmB,EAAY,CAAE,EAAA,EACvB,MAAO,CACnB,EAAM,MAAM,EAAQ,cAAc,EAAG,CACnC,YAAa,EAAQ,8BAA8B,CACrD,CAAC,EAED,MACF,CAEA,EAAM,QAAQ,EAAE,SAAS,EAAG,CAC1B,YAAa,CACf,CAAC,EACD,EAAQ,CACV,EACA,WAAY,EAAE,SAAS,EACvB,MAAO,EAAE,OAAO,WAEhB,EAAC,EAAD,CACE,OACE,EAAC,EAAD,CAAQ,aAAY,EAAE,OAAO,EAAG,KAAK,OAAO,QAAQ,uBAClD,EAAC,EAAD,CAAY,UAAU,QAAU,CAAA,CAC1B,CAAA,CAEX,CAAA,CACuB,CAAA,EAE1B,EAAC,EAAD,CAAA,SAAiB,EAAE,OAAO,CAAkB,CAAA,CACrC,CAAA,CAAA,CACM,CAAA,EAxCI,IA0CzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-api.d.ts","names":[],"sources":["../../../../../../../../src/views/admin/posts/table/actions/delete/mutation-api.ts"],"mappings":";cAOa,cAAqB,eAAU"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use server";import{postsAdminModule as e}from"../../../../../../api/modules/admin/posts/posts.admin.module.js";import{fetcher as t}from"@vitnode/core/lib/fetcher";import{revalidatePath as n}from"next/cache";const r=async r=>{let i=await t(e,{prefixPath:`/admin`,method:`delete`,path:`/{id}`,module:`posts`,args:{params:{id:r}}});if(!i.ok)return{error:await i.text()};n(`/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts`,`page`)};export{r as mutationApi};
|
|
2
|
-
//# sourceMappingURL=mutation-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-api.js","names":[],"sources":["../../../../../../../../src/views/admin/posts/table/actions/delete/mutation-api.ts"],"sourcesContent":["\"use server\";\n\nimport { fetcher } from \"@vitnode/core/lib/fetcher\";\nimport { revalidatePath } from \"next/cache\";\n\nimport { postsAdminModule } from \"@/api/modules/admin/posts/posts.admin.module\";\n\nexport const mutationApi = async (id: number) => {\n const res = await fetcher(postsAdminModule, {\n prefixPath: \"/admin\",\n method: \"delete\",\n path: \"/{id}\",\n module: \"posts\",\n args: {\n params: {\n id,\n },\n },\n });\n\n if (!res.ok) {\n return { error: await res.text() };\n }\n\n revalidatePath(\n \"/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts\",\n \"page\",\n );\n};\n"],"mappings":"gNAOA,MAAa,EAAc,KAAO,IAAe,CAC/C,IAAM,EAAM,MAAM,EAAQ,EAAkB,CAC1C,WAAY,SACZ,OAAQ,SACR,KAAM,QACN,OAAQ,QACR,KAAM,CACJ,OAAQ,CACN,IACF,CACF,CACF,CAAC,EAED,GAAI,CAAC,EAAI,GACP,MAAO,CAAE,MAAO,MAAM,EAAI,KAAK,CAAE,EAGnC,EACE,6DACA,MACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edit-action.js","names":[],"sources":["../../../../../../../src/views/admin/posts/table/actions/edit-action.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAdminStaffPermission } from \"@vitnode/core/components/staff-permission/provider\";\nimport { Button } from \"@vitnode/core/components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@vitnode/core/components/ui/dialog\";\nimport { Loader } from \"@vitnode/core/components/ui/loader\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@vitnode/core/components/ui/tooltip\";\nimport { PencilIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport dynamic from \"next/dynamic\";\nimport React from \"react\";\n\nimport { CONFIG_PLUGIN } from \"@/const\";\n\nconst CreateEditActionPostsAdmin = dynamic(async () =>\n import(\"../../actions/create-edit/create-edit\").then(mod => ({\n default: mod.CreateEditActionPostsAdmin,\n })),\n);\n\nexport const EditAction = (\n props: Required<React.ComponentProps<typeof CreateEditActionPostsAdmin>>,\n) => {\n const t = useTranslations(\"@vitnode/blog.admin.posts.edit\");\n const canEdit = useAdminStaffPermission({\n plugin: CONFIG_PLUGIN.pluginId,\n module: \"posts\",\n permission: \"can_edit\",\n });\n\n if (!canEdit) return null;\n\n return (\n <Dialog>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger\n render={\n <DialogTrigger\n render={\n <Button aria-label={t(\"title\")} size=\"icon\" variant=\"ghost\" />\n }\n >\n <PencilIcon />\n </DialogTrigger>\n }\n />\n <TooltipContent>{t(\"title\")}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t(\"title\")}</DialogTitle>\n <DialogDescription>{props.data.title}</DialogDescription>\n </DialogHeader>\n\n <React.Suspense fallback={<Loader />}>\n <CreateEditActionPostsAdmin {...props} />\n </React.Suspense>\n </DialogContent>\n </Dialog>\n );\n};\n"],"mappings":"0uBA0BA,MAAM,EAA6B,EAAQ,SACzC,OAAO,2CAAwC,CAAC,KAAK,IAAQ,CAC3D,QAAS,EAAI,0BACf,EAAE,CACJ,EAEa,EACX,GACG,CACH,IAAM,EAAI,EAAgB,gCAAgC,EAS1D,OARgB,EAAwB,CACtC,OAAQ,EAAc,SACtB,OAAQ,QACR,WAAY,UACd,CAEW,EAGT,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CACE,OACE,EAAC,EAAD,CACE,OACE,EAAC,EAAD,CAAQ,aAAY,EAAE,OAAO,EAAG,KAAK,OAAO,QAAQ,OAAS,CAAA,WAG/D,EAAC,EAAD,CAAa,CAAA,CACA,CAAA,CAElB,CAAA,EACD,EAAC,EAAD,CAAA,SAAiB,EAAE,OAAO,CAAkB,CAAA,CACrC,CAAA,CAAA,CACM,CAAA,EAEjB,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAc,EAAE,OAAO,CAAe,CAAA,EACtC,EAAC,EAAD,CAAA,SAAoB,EAAM,KAAK,KAAyB,CAAA,CAC5C,CAAA,CAAA,EAEd,EAAC,EAAM,SAAP,CAAgB,SAAU,EAAC,EAAD,CAAS,CAAA,WACjC,EAAC,EAAD,CAA4B,GAAI,CAAQ,CAAA,CAC1B,CAAA,CACH,CAAA,CAAA,CACT,CAAA,CAAA,EA/BW,IAiCvB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"posts-admin-view.js","names":[],"sources":["../../../../../../src/views/admin/posts/table/posts-admin-view.tsx"],"sourcesContent":["import { DateFormat } from \"@vitnode/core/components/date-format\";\nimport { DataTable } from \"@vitnode/core/components/table/data-table\";\nimport { fetcher } from \"@vitnode/core/lib/fetcher\";\nimport { getTranslations } from \"next-intl/server\";\n\nimport { postsModule } from \"@/api/modules/posts/posts.module\";\n\nimport { DeleteAction } from \"./actions/delete/delete-action\";\nimport { EditAction } from \"./actions/edit-action\";\n\nexport const PostsAdminView = async ({\n searchParams,\n}: {\n searchParams: Promise<Record<string, string | string[] | undefined>>;\n}) => {\n const t = await getTranslations(\"@vitnode/blog.admin.posts.table\");\n const query = await searchParams;\n const res = await fetcher(postsModule, {\n path: \"/\",\n method: \"get\",\n module: \"posts\",\n args: {\n query,\n },\n withPagination: true,\n options: {\n cache: \"force-cache\",\n },\n });\n const data = await res.json();\n\n return (\n <DataTable\n columns={[\n {\n accessorKey: \"id\",\n header: \"ID\",\n className: \"w-24\",\n },\n {\n accessorKey: \"title\",\n header: t(\"title\"),\n },\n {\n accessorKey: \"category\",\n header: t(\"category\"),\n className: \"w-48\",\n cell: ({ row }) => row.category.title,\n },\n {\n accessorKey: \"updatedAt\",\n header: t(\"updated_at\"),\n className: \"w-48\",\n cell: ({ row }) => <DateFormat date={row.updatedAt} />,\n },\n {\n id: \"actions\",\n header: \"\",\n align: \"right\",\n className: \"w-10\",\n cell: ({ row }) => (\n <>\n <EditAction data={row} />\n <DeleteAction {...row} />\n </>\n ),\n },\n ]}\n edges={data.edges.map(edge => ({ ...edge }))}\n id=\"posts-table\"\n order={{\n columns: [\"createdAt\", \"updatedAt\"],\n defaultOrder: {\n column: \"createdAt\",\n order: \"desc\",\n },\n }}\n pageInfo={data.pageInfo}\n />\n );\n};\n"],"mappings":"kfAUA,MAAa,EAAiB,MAAO,CACnC,kBAGI,CACJ,IAAM,EAAI,MAAM,EAAgB,iCAAiC,EAc3D,EAAO,MAAM,MAZD,EAAQ,EAAa,CACrC,KAAM,IACN,OAAQ,MACR,OAAQ,QACR,KAAM,CACJ,MAAA,MANgB,CAOlB,EACA,eAAgB,GAChB,QAAS,CACP,MAAO,aACT,CACF,CAAC,EAAA,CACsB,KAAK,EAE5B,OACE,EAAC,EAAD,CACE,QAAS,CACP,CACE,YAAa,KACb,OAAQ,KACR,UAAW,MACb,EACA,CACE,YAAa,QACb,OAAQ,EAAE,OAAO,CACnB,EACA,CACE,YAAa,WACb,OAAQ,EAAE,UAAU,EACpB,UAAW,OACX,MAAO,CAAE,SAAU,EAAI,SAAS,KAClC,EACA,CACE,YAAa,YACb,OAAQ,EAAE,YAAY,EACtB,UAAW,OACX,MAAO,CAAE,SAAU,EAAC,EAAD,CAAY,KAAM,EAAI,SAAY,CAAA,CACvD,EACA,CACE,GAAI,UACJ,OAAQ,GACR,MAAO,QACP,UAAW,OACX,MAAO,CAAE,SACP,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,EAAD,CAAY,KAAM,CAAM,CAAA,EACxB,EAAC,EAAD,CAAc,GAAI,CAAM,CAAA,CACxB,CAAA,CAAA,CAEN,CACF,EACA,MAAO,EAAK,MAAM,IAAI,IAAS,CAAE,GAAG,CAAK,EAAE,EAC3C,GAAG,cACH,MAAO,CACL,QAAS,CAAC,YAAa,WAAW,EAClC,aAAc,CACZ,OAAQ,YACR,MAAO,MACT,CACF,EACA,SAAU,EAAK,QAChB,CAAA,CAEL"}
|