@vitnode/blog 1.2.0-canary.75 → 1.2.0-canary.77

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.
Files changed (108) hide show
  1. package/dist/src/api/lib/categories-language.d.ts +10 -0
  2. package/dist/src/api/lib/categories-language.d.ts.map +1 -0
  3. package/dist/src/api/lib/categories-language.js +1 -0
  4. package/dist/src/api/lib/events.d.ts +28 -0
  5. package/dist/src/api/lib/events.d.ts.map +1 -0
  6. package/dist/src/api/lib/events.js +1 -0
  7. package/dist/src/api/lib/posts-language.d.ts +17 -0
  8. package/dist/src/api/lib/posts-language.d.ts.map +1 -0
  9. package/dist/src/api/lib/posts-language.js +1 -0
  10. package/dist/src/api/lib/search.d.ts +13 -0
  11. package/dist/src/api/lib/search.d.ts.map +1 -0
  12. package/dist/src/api/lib/search.js +1 -0
  13. package/dist/src/api/modules/admin/admin.module.d.ts +34 -14
  14. package/dist/src/api/modules/admin/admin.module.d.ts.map +1 -1
  15. package/dist/src/api/modules/admin/admin.module.js +1 -1
  16. package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts +10 -4
  17. package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts.map +1 -1
  18. package/dist/src/api/modules/admin/categories/routes/create.route.d.ts +10 -3
  19. package/dist/src/api/modules/admin/categories/routes/create.route.d.ts.map +1 -1
  20. package/dist/src/api/modules/admin/categories/routes/create.route.js +1 -1
  21. package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts.map +1 -1
  22. package/dist/src/api/modules/admin/categories/routes/delete.route.js +1 -1
  23. package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts +5 -2
  24. package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts.map +1 -1
  25. package/dist/src/api/modules/admin/categories/routes/edit.route.js +1 -1
  26. package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts +24 -10
  27. package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts.map +1 -1
  28. package/dist/src/api/modules/admin/posts/routes/create.route.d.ts +24 -7
  29. package/dist/src/api/modules/admin/posts/routes/create.route.d.ts.map +1 -1
  30. package/dist/src/api/modules/admin/posts/routes/create.route.js +1 -1
  31. package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts.map +1 -1
  32. package/dist/src/api/modules/admin/posts/routes/delete.route.js +1 -1
  33. package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts +12 -5
  34. package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts.map +1 -1
  35. package/dist/src/api/modules/admin/posts/routes/edit.route.js +1 -1
  36. package/dist/src/api/modules/categories/categories.module.d.ts +5 -1
  37. package/dist/src/api/modules/categories/categories.module.d.ts.map +1 -1
  38. package/dist/src/api/modules/categories/routes/get.route.d.ts +15 -1
  39. package/dist/src/api/modules/categories/routes/get.route.d.ts.map +1 -1
  40. package/dist/src/api/modules/categories/routes/get.route.js +1 -1
  41. package/dist/src/api/modules/posts/posts.module.d.ts +22 -5
  42. package/dist/src/api/modules/posts/posts.module.d.ts.map +1 -1
  43. package/dist/src/api/modules/posts/routes/get.route.d.ts +44 -10
  44. package/dist/src/api/modules/posts/routes/get.route.d.ts.map +1 -1
  45. package/dist/src/api/modules/posts/routes/get.route.js +1 -1
  46. package/dist/src/config.api.d.ts.map +1 -1
  47. package/dist/src/config.api.js +1 -1
  48. package/dist/src/config.d.ts.map +1 -1
  49. package/dist/src/config.js +1 -1
  50. package/dist/src/database/categories.d.ts +4 -23
  51. package/dist/src/database/categories.d.ts.map +1 -1
  52. package/dist/src/database/categories.js +1 -1
  53. package/dist/src/database/posts.d.ts +10 -48
  54. package/dist/src/database/posts.d.ts.map +1 -1
  55. package/dist/src/database/posts.js +1 -1
  56. package/dist/src/globals.css +44 -0
  57. package/dist/src/locales/en.json +92 -0
  58. package/dist/src/locales/index.d.ts +4 -0
  59. package/dist/src/locales/index.d.ts.map +1 -0
  60. package/dist/src/locales/index.js +1 -0
  61. package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts +2 -0
  62. package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts.map +1 -0
  63. package/dist/src/routes/breadcrumb/admin/blog/categories/page.js +1 -0
  64. package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts +2 -0
  65. package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts.map +1 -0
  66. package/dist/src/routes/breadcrumb/admin/blog/posts/page.js +1 -0
  67. package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts +2 -2
  68. package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts.map +1 -1
  69. package/dist/src/views/admin/categories/actions/create-edit/create-edit.js +1 -1
  70. package/dist/src/views/admin/categories/actions/create-edit/{mutation-api.d.ts → mutation-api.server.d.ts} +1 -1
  71. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts.map +1 -0
  72. package/dist/src/views/admin/categories/table/actions/delete/delete-action.js +1 -1
  73. package/dist/src/views/admin/{posts/table/actions/delete/mutation-api.d.ts → categories/table/actions/delete/mutation-api.server.d.ts} +1 -1
  74. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts.map +1 -0
  75. package/dist/src/views/admin/categories/table/actions/edit-action.d.ts +1 -1
  76. package/dist/src/views/admin/categories/table/actions/edit-action.d.ts.map +1 -1
  77. package/dist/src/views/admin/categories/table/actions/edit-action.js +1 -1
  78. package/dist/src/views/admin/categories/table/categories-admin-view.d.ts.map +1 -1
  79. package/dist/src/views/admin/categories/table/categories-admin-view.js +1 -1
  80. package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts +2 -1
  81. package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts.map +1 -1
  82. package/dist/src/views/admin/posts/actions/create-edit/create-edit.js +1 -1
  83. package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts +10 -0
  84. package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts.map +1 -0
  85. package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.js +1 -0
  86. package/dist/src/views/admin/posts/actions/create-edit/{mutation-api.d.ts → mutation-api.server.d.ts} +1 -1
  87. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts.map +1 -0
  88. package/dist/src/views/admin/posts/table/actions/delete/delete-action.js +1 -1
  89. package/dist/src/views/admin/{categories/table/actions/delete/mutation-api.d.ts → posts/table/actions/delete/mutation-api.server.d.ts} +1 -1
  90. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts.map +1 -0
  91. package/dist/src/views/admin/posts/table/actions/edit-action.d.ts.map +1 -1
  92. package/dist/src/views/admin/posts/table/actions/edit-action.js +1 -1
  93. package/dist/src/views/admin/posts/table/posts-admin-view.d.ts.map +1 -1
  94. package/dist/src/views/admin/posts/table/posts-admin-view.js +1 -1
  95. package/package.json +19 -19
  96. package/src/locales/en.json +17 -5
  97. package/src/locales/index.ts +11 -0
  98. package/src/routes/breadcrumb/admin/blog/categories/page.tsx +5 -0
  99. package/src/routes/breadcrumb/admin/blog/posts/page.tsx +5 -0
  100. package/tsconfig.build.json +5 -0
  101. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.d.ts.map +0 -1
  102. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.d.ts.map +0 -1
  103. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.d.ts.map +0 -1
  104. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.d.ts.map +0 -1
  105. /package/dist/src/views/admin/categories/actions/create-edit/{mutation-api.js → mutation-api.server.js} +0 -0
  106. /package/dist/src/views/admin/categories/table/actions/delete/{mutation-api.js → mutation-api.server.js} +0 -0
  107. /package/dist/src/views/admin/posts/actions/create-edit/{mutation-api.js → mutation-api.server.js} +0 -0
  108. /package/dist/src/views/admin/posts/table/actions/delete/{mutation-api.js → mutation-api.server.js} +0 -0
@@ -1 +1 @@
1
- "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{ConfirmActionAlertDialog}from"@vitnode/core/components/confirm-action/confirm-action-alert-dialog";import{useAdminStaffPermission}from"@vitnode/core/components/staff-permission/provider";import{Button}from"@vitnode/core/components/ui/button";import{Tooltip,TooltipContent,TooltipProvider,TooltipTrigger}from"@vitnode/core/components/ui/tooltip";import{Trash2Icon}from"lucide-react";import{useTranslations}from"next-intl";import{toast}from"sonner";import{CONFIG_PLUGIN}from"../../../../../../const.js";import{mutationApi}from"./mutation-api.js";export const DeleteAction=({title,id})=>{const t=useTranslations("@vitnode/blog.admin.categories.delete");const tGlobal=useTranslations("core.global");const canDelete=useAdminStaffPermission({plugin:CONFIG_PLUGIN.pluginId,module:"categories",permission:"can_delete"});if(!canDelete)return null;return _jsx(TooltipProvider,{children:_jsxs(Tooltip,{children:[_jsx(ConfirmActionAlertDialog,{description:t.rich("desc",{title:()=>_jsx("span",{className:"text-foreground font-bold",children:title})}),onSubmit:async({onClose})=>{const mutation=await mutationApi(id);if(mutation?.error){toast.error(tGlobal("errors.title"),{description:tGlobal("errors.internal_server_error")});return}toast.success(t("success"),{description:title});onClose()},textSubmit:t("confirm"),title:t("title"),children:_jsx(TooltipTrigger,{render:_jsx(Button,{"aria-label":t("title"),size:"icon",variant:"destructive",children:_jsx(Trash2Icon,{className:"size-4"})})})}),_jsx(TooltipContent,{children:t("title")})]})})};
1
+ "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{ConfirmActionAlertDialog}from"@vitnode/core/components/confirm-action/confirm-action-alert-dialog";import{useAdminStaffPermission}from"@vitnode/core/components/staff-permission/provider";import{Button}from"@vitnode/core/components/ui/button";import{Tooltip,TooltipContent,TooltipProvider,TooltipTrigger}from"@vitnode/core/components/ui/tooltip";import{Trash2Icon}from"lucide-react";import{useTranslations}from"next-intl";import{toast}from"sonner";import{CONFIG_PLUGIN}from"../../../../../../const.js";import{mutationApi}from"./mutation-api.server.js";export const DeleteAction=({title,id})=>{const t=useTranslations("@vitnode/blog.admin.categories.delete");const tGlobal=useTranslations("core.global");const canDelete=useAdminStaffPermission({plugin:CONFIG_PLUGIN.pluginId,module:"categories",permission:"can_delete"});if(!canDelete)return null;return _jsx(TooltipProvider,{children:_jsxs(Tooltip,{children:[_jsx(ConfirmActionAlertDialog,{description:t.rich("desc",{title:()=>_jsx("span",{className:"text-foreground font-bold",children:title})}),onSubmit:async({onClose})=>{const mutation=await mutationApi(id);if(mutation?.error){toast.error(tGlobal("errors.title"),{description:tGlobal("errors.internal_server_error")});return}toast.success(t("success"),{description:title});onClose()},textSubmit:t("confirm"),title:t("title"),children:_jsx(TooltipTrigger,{render:_jsx(Button,{"aria-label":t("title"),size:"icon",variant:"destructive",children:_jsx(Trash2Icon,{className:"size-4"})})})}),_jsx(TooltipContent,{children:t("title")})]})})};
@@ -1,4 +1,4 @@
1
1
  export declare const mutationApi: (id: number) => Promise<{
2
2
  error: string;
3
3
  } | undefined>;
4
- //# sourceMappingURL=mutation-api.d.ts.map
4
+ //# sourceMappingURL=mutation-api.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-api.server.d.ts","sourceRoot":"","sources":["../../../../../../../../src/views/admin/categories/table/actions/delete/mutation-api.server.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,GAAU,IAAI,MAAM;;cAqB3C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  declare const CreateEditActionCategoriesAdmin: React.ComponentType<{
3
- data?: import("zod").infer<typeof import("../../../../../api/modules/admin/categories/routes/create.route").zodCreateCategorySchema> & {
3
+ data?: import("zod").infer<typeof import("../../../../../api/modules/categories/routes/get.route").zodCategorySchema> & {
4
4
  id: number;
5
5
  };
6
6
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"edit-action.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/categories/table/actions/edit-action.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,QAAA,MAAM,+BAA+B;;;;EAIpC,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,+BAA+B,CAAC,CAAC,6BA0C9E,CAAC"}
1
+ {"version":3,"file":"edit-action.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/categories/table/actions/edit-action.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,QAAA,MAAM,+BAA+B;;;;EAIpC,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,+BAA+B,CAAC,CAAC,6BA8C9E,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useAdminStaffPermission}from"@vitnode/core/components/staff-permission/provider";import{Button}from"@vitnode/core/components/ui/button";import{Dialog,DialogContent,DialogDescription,DialogHeader,DialogTitle,DialogTrigger}from"@vitnode/core/components/ui/dialog";import{Loader}from"@vitnode/core/components/ui/loader";import{Tooltip,TooltipContent,TooltipProvider,TooltipTrigger}from"@vitnode/core/components/ui/tooltip";import{PencilIcon}from"lucide-react";import{useTranslations}from"next-intl";import dynamic from"next/dynamic";import React from"react";import{CONFIG_PLUGIN}from"../../../../../const.js";const CreateEditActionCategoriesAdmin=dynamic(async()=>import("../../actions/create-edit/create-edit.js").then(mod=>({default:mod.CreateEditActionCategoriesAdmin})));export const EditAction=props=>{const t=useTranslations("@vitnode/blog.admin.categories.edit");const canEdit=useAdminStaffPermission({plugin:CONFIG_PLUGIN.pluginId,module:"categories",permission:"can_edit"});if(!canEdit)return null;return _jsxs(Dialog,{children:[_jsx(TooltipProvider,{children:_jsxs(Tooltip,{children:[_jsx(TooltipTrigger,{render:_jsx(DialogTrigger,{render:_jsx(Button,{"aria-label":t("title"),size:"icon",variant:"ghost"}),children:_jsx(PencilIcon,{})})}),_jsx(TooltipContent,{children:t("title")})]})}),_jsxs(DialogContent,{children:[_jsxs(DialogHeader,{children:[_jsx(DialogTitle,{children:t("title")}),_jsx(DialogDescription,{children:props.data.title})]}),_jsx(React.Suspense,{fallback:_jsx(Loader,{}),children:_jsx(CreateEditActionCategoriesAdmin,{...props})})]})]})};
1
+ "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useAdminStaffPermission}from"@vitnode/core/components/staff-permission/provider";import{Button}from"@vitnode/core/components/ui/button";import{Dialog,DialogContent,DialogDescription,DialogHeader,DialogTitle,DialogTrigger}from"@vitnode/core/components/ui/dialog";import{Loader}from"@vitnode/core/components/ui/loader";import{Tooltip,TooltipContent,TooltipProvider,TooltipTrigger}from"@vitnode/core/components/ui/tooltip";import{getLangValue}from"@vitnode/core/lib/helpers/multi-lang";import{PencilIcon}from"lucide-react";import{useLocale,useTranslations}from"next-intl";import dynamic from"next/dynamic";import React from"react";import{CONFIG_PLUGIN}from"../../../../../const.js";const CreateEditActionCategoriesAdmin=dynamic(async()=>import("../../actions/create-edit/create-edit.js").then(mod=>({default:mod.CreateEditActionCategoriesAdmin})));export const EditAction=props=>{const t=useTranslations("@vitnode/blog.admin.categories.edit");const locale=useLocale();const canEdit=useAdminStaffPermission({plugin:CONFIG_PLUGIN.pluginId,module:"categories",permission:"can_edit"});if(!canEdit)return null;return _jsxs(Dialog,{children:[_jsx(TooltipProvider,{children:_jsxs(Tooltip,{children:[_jsx(TooltipTrigger,{render:_jsx(DialogTrigger,{render:_jsx(Button,{"aria-label":t("title"),size:"icon",variant:"ghost"}),children:_jsx(PencilIcon,{})})}),_jsx(TooltipContent,{children:t("title")})]})}),_jsxs(DialogContent,{children:[_jsxs(DialogHeader,{children:[_jsx(DialogTitle,{children:t("title")}),_jsx(DialogDescription,{children:getLangValue(props.data.titleTranslations,locale)||props.data.titleTranslations[0]?.value})]}),_jsx(React.Suspense,{fallback:_jsx(Loader,{}),children:_jsx(CreateEditActionCategoriesAdmin,{...props})})]})]})};
@@ -1 +1 @@
1
- {"version":3,"file":"categories-admin-view.d.ts","sourceRoot":"","sources":["../../../../../../src/views/admin/categories/table/categories-admin-view.tsx"],"names":[],"mappings":"AAUA,eAAO,MAAM,mBAAmB,GAAU,mBAEvC;IACD,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CACtE,yCA2DA,CAAC"}
1
+ {"version":3,"file":"categories-admin-view.d.ts","sourceRoot":"","sources":["../../../../../../src/views/admin/categories/table/categories-admin-view.tsx"],"names":[],"mappings":"AAWA,eAAO,MAAM,mBAAmB,GAAU,mBAEvC;IACD,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CACtE,yCAsFA,CAAC"}
@@ -1 +1 @@
1
- import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{DateFormat}from"@vitnode/core/components/date-format";import{DataTable}from"@vitnode/core/components/table/data-table";import{fetcher}from"@vitnode/core/lib/fetcher";import{getTranslations}from"next-intl/server";import{categoriesModule}from"../../../../api/modules/categories/categories.module.js";import{DeleteAction}from"./actions/delete/delete-action.js";import{EditAction}from"./actions/edit-action.js";export const CategoriesAdminView=async({searchParams})=>{const t=await getTranslations("@vitnode/blog.admin.categories.table");const query=await searchParams;const res=await fetcher(categoriesModule,{path:"/",method:"get",module:"categories",args:{query},withPagination:true,options:{cache:"force-cache"}});const data=await res.json();return _jsx(DataTable,{columns:[{id:"id",label:"ID",className:"w-24"},{id:"title",label:t("title")},{id:"updatedAt",label:t("updated_at"),className:"w-48",cell:({row})=>_jsx(DateFormat,{date:row.updatedAt})},{id:"actions",label:"",className:"w-10",cell:({row})=>_jsxs(_Fragment,{children:[_jsx(EditAction,{data:row}),_jsx(DeleteAction,{...row})]})}],edges:data.edges.map(edge=>({...edge})),id:"categories-table",order:{columns:["createdAt","updatedAt"],defaultOrder:{column:"createdAt",order:"desc"}},pageInfo:data.pageInfo})};
1
+ import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{DateFormat}from"@vitnode/core/components/date-format";import{DataTable}from"@vitnode/core/components/table/data-table";import{fetcher}from"@vitnode/core/lib/fetcher";import{getLangValue}from"@vitnode/core/lib/helpers/multi-lang";import{getLocale,getTranslations}from"next-intl/server";import{categoriesModule}from"../../../../api/modules/categories/categories.module.js";import{DeleteAction}from"./actions/delete/delete-action.js";import{EditAction}from"./actions/edit-action.js";export const CategoriesAdminView=async({searchParams})=>{const t=await getTranslations("@vitnode/blog.admin.categories.table");const locale=await getLocale();const query=await searchParams;const res=await fetcher(categoriesModule,{path:"/",method:"get",module:"categories",args:{query},withPagination:true,options:{cache:"force-cache"}});const data=await res.json();return _jsx(DataTable,{columns:[{accessorKey:"id",header:"ID",className:"w-24"},{accessorKey:"title",header:t("title")},{accessorKey:"color",header:t("color"),className:"w-32",cell:({row})=>row.color?_jsxs("div",{className:"flex items-center gap-2",children:[_jsx("span",{className:"size-4 shrink-0 rounded-full border",style:{backgroundColor:row.color}}),_jsx("span",{className:"text-muted-foreground truncate text-sm",children:row.color})]}):_jsx("span",{className:"text-muted-foreground",children:"—"})},{accessorKey:"updatedAt",header:t("updated_at"),className:"w-48",cell:({row})=>_jsx(DateFormat,{date:row.updatedAt})},{id:"actions",header:"",align:"right",className:"w-10",cell:({row})=>_jsxs(_Fragment,{children:[_jsx(EditAction,{data:row}),_jsx(DeleteAction,{...row})]})}],edges:data.edges.map(edge=>({...edge,title:getLangValue(edge.titleTranslations,locale)||edge.titleTranslations[0]?.value||""})),id:"categories-table",order:{columns:["createdAt","updatedAt"],defaultOrder:{column:"createdAt",order:"desc"}},pageInfo:data.pageInfo})};
@@ -1,8 +1,9 @@
1
+ import React from "react";
1
2
  import { z } from "zod";
2
3
  import type { zodPostSchema } from "../../../../../api/modules/posts/routes/get.route";
3
4
  export declare const CreateEditActionPostsAdmin: ({ data, }: {
4
5
  data?: z.infer<typeof zodPostSchema> & {
5
6
  id?: number;
6
7
  };
7
- }) => import("react").JSX.Element;
8
+ }) => React.JSX.Element;
8
9
  //# sourceMappingURL=create-edit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-edit.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/posts/actions/create-edit/create-edit.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAM1E,eAAO,MAAM,0BAA0B,GAAI,WAExC;IACD,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD,gCAiIA,CAAC"}
1
+ {"version":3,"file":"create-edit.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/posts/actions/create-edit/create-edit.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAO1E,eAAO,MAAM,0BAA0B,GAAI,WAExC;IACD,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD,sBAgJA,CAAC"}
@@ -1 +1 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{AutoForm}from"@vitnode/core/components/form/auto-form";import{AutoFormCombobox}from"@vitnode/core/components/form/fields/combobox";import{AutoFormInput}from"@vitnode/core/components/form/fields/input";import{AutoFormTextarea}from"@vitnode/core/components/form/fields/textarea";import{useDialog}from"@vitnode/core/components/ui/dialog";import{fetcherClient}from"@vitnode/core/lib/fetcher-client";import{usePathname,useRouter}from"@vitnode/core/lib/navigation";import{useTranslations}from"next-intl";import{toast}from"sonner";import{z}from"zod";import{categoriesModule}from"../../../../../api/modules/categories/categories.module.js";import{createMutationApi,editMutationApi}from"./mutation-api.js";export const CreateEditActionPostsAdmin=({data})=>{const t=useTranslations("@vitnode/blog.admin.posts");const tCore=useTranslations("core.global.errors");const{setOpen}=useDialog();const{push}=useRouter();const pathname=usePathname();const formSchema=z.object({title:z.string().min(3,{message:tCore("field_min_length",{min:3})}).default(data?.title??""),content:z.string().default(data?.content??""),categoryId:z.object({value:z.string(),label:z.string()}).refine(value=>value.value!=="",{message:tCore("field_required")}).default(data?.category?{value:data.category.id.toString(),label:data.category.title}:{value:"",label:""})});const onSubmit=async(values,form)=>{let error="";if(data?.id){const mutation=await editMutationApi({id:data.id,...values,categoryId:parseInt(values.categoryId.value,10)});if(mutation?.error){error=mutation.error}}else{const mutation=await createMutationApi({...values,categoryId:parseInt(values.categoryId.value,10)});if(mutation?.error){error=mutation.error}}if(error){if(error.includes("already exists")){form.setError("title",{type:"manual",message:t("create.form.title.already_exists")});return}toast.error(tCore("title"),{description:tCore("internal_server_error")});return}setOpen?.(false);push(pathname)};return _jsx(AutoForm,{fields:[{id:"title",component:props=>_jsx(AutoFormInput,{label:t("create.form.title.label"),...props})},{id:"categoryId",component:props=>_jsx(AutoFormCombobox,{fetchData:async({search})=>{const res=await fetcherClient(categoriesModule,{path:"/",method:"get",module:"categories",args:{query:{search}}});const data=await res.json();return data.edges.map(category=>({label:category.title,value:category.id.toString()}))},id:"categoryId",label:t("create.form.category"),...props})},{id:"content",component:props=>_jsx(AutoFormTextarea,{label:t("create.form.content"),rows:10,...props})}],formSchema:formSchema,onSubmit:onSubmit,submitButtonProps:{children:t(`${data?"edit":"create"}.submit`)}})};
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{AutoForm}from"@vitnode/core/components/form/auto-form";import{AutoFormCombobox}from"@vitnode/core/components/form/fields/combobox";import{AutoFormEditor}from"@vitnode/core/components/form/fields/editor";import{useDialog}from"@vitnode/core/components/ui/dialog";import{fetcherClient}from"@vitnode/core/lib/fetcher-client";import{getLangValue,multiLangValueSchema}from"@vitnode/core/lib/helpers/multi-lang";import{usePathname,useRouter}from"@vitnode/core/lib/navigation";import{useLocale,useTranslations}from"next-intl";import React from"react";import{toast}from"sonner";import{z}from"zod";import{categoriesModule}from"../../../../../api/modules/categories/categories.module.js";import{FriendlyUrlField,TitleField}from"./multi-lang-fields.js";import{createMutationApi,editMutationApi}from"./mutation-api.server.js";export const CreateEditActionPostsAdmin=({data})=>{const t=useTranslations("@vitnode/blog.admin.posts");const tCore=useTranslations("core.global.errors");const locale=useLocale();const{setOpen}=useDialog();const{push}=useRouter();const pathname=usePathname();const resolveCategoryTitle=translations=>getLangValue(translations,locale)||translations[0]?.value||"";const friendlyUrlTouchedRef=React.useRef(new Set(data?.friendlyUrlTranslations?.map(item=>item.languageCode)));const formSchema=z.object({title:multiLangValueSchema({minLength:3,maxLength:255}).min(1).default(data?.titleTranslations??[]),friendlyUrl:multiLangValueSchema({minLength:1,maxLength:255}).min(1).default(data?.friendlyUrlTranslations??[]),content:multiLangValueSchema().default(data?.contentTranslations??[]),categoryId:z.object({value:z.string(),label:z.string()}).refine(value=>value.value!=="",{message:tCore("field_required")}).default(data?.category?{value:data.category.id.toString(),label:resolveCategoryTitle(data.category.titleTranslations)}:{value:"",label:""})});const onSubmit=async(values,form)=>{const body={title:values.title,content:values.content,friendlyUrl:values.friendlyUrl,categoryId:parseInt(values.categoryId.value,10)};const mutation=data?.id?await editMutationApi({id:data.id,...body}):await createMutationApi(body);if(mutation?.error){if(mutation.error.includes("already exists")){form.setError("friendlyUrl",{type:"manual",message:t("create.form.friendly_url.already_exists")});return}toast.error(tCore("title"),{description:tCore("internal_server_error")});return}toast.success(t(data?"edit.success":"create.success"));setOpen?.(false);setTimeout(()=>push(pathname),300)};return _jsx(AutoForm,{fields:[{id:"title",component:props=>_jsx(TitleField,{friendlyUrlName:"friendlyUrl",friendlyUrlTouched:friendlyUrlTouchedRef,label:t("create.form.title.label"),...props})},{id:"friendlyUrl",component:props=>_jsx(FriendlyUrlField,{description:t("create.form.friendly_url.desc"),friendlyUrlTouched:friendlyUrlTouchedRef,label:t("create.form.friendly_url.label"),...props})},{id:"categoryId",component:props=>_jsx(AutoFormCombobox,{fetchData:async({search})=>{const res=await fetcherClient(categoriesModule,{path:"/",method:"get",module:"categories",args:{query:{search}}});const data=await res.json();return data.edges.map(category=>({label:resolveCategoryTitle(category.titleTranslations),value:category.id.toString()}))},id:"categoryId",label:t("create.form.category"),...props})},{id:"content",component:props=>_jsx(AutoFormEditor,{label:t("create.form.content"),multiLang:true,...props})}],formSchema:formSchema,onSubmit:onSubmit,submitButtonProps:{children:t(`${data?"edit":"create"}.submit`)}})};
@@ -0,0 +1,10 @@
1
+ import type { ItemAutoFormComponentProps } from "@vitnode/core/components/form/auto-form";
2
+ import React from "react";
3
+ export declare const TitleField: ({ field, label, description, friendlyUrlName, friendlyUrlTouched, }: ItemAutoFormComponentProps & {
4
+ friendlyUrlName: string;
5
+ friendlyUrlTouched: React.RefObject<Set<string>>;
6
+ }) => React.JSX.Element;
7
+ export declare const FriendlyUrlField: ({ field, label, description, friendlyUrlTouched, }: ItemAutoFormComponentProps & {
8
+ friendlyUrlTouched: React.RefObject<Set<string>>;
9
+ }) => React.JSX.Element;
10
+ //# sourceMappingURL=multi-lang-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-lang-fields.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/posts/actions/create-edit/multi-lang-fields.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAiB1F,OAAO,KAAK,MAAM,OAAO,CAAC;AA+C1B,eAAO,MAAM,UAAU,GAAI,qEAMxB,0BAA0B,GAAG;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAClD,sBA+BA,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,oDAK9B,0BAA0B,GAAG;IAC9B,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAClD,sBAsBA,CAAC"}
@@ -0,0 +1 @@
1
+ "use client";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{AutoFormDesc}from"@vitnode/core/components/form/common/desc";import{AutoFormLabel}from"@vitnode/core/components/form/common/label";import{MultiLangSelect,useMultiLangField}from"@vitnode/core/components/form/fields/multi-lang";import{FormControl,FormMessage}from"@vitnode/core/components/ui/form";import{InputGroup,InputGroupAddon,InputGroupInput}from"@vitnode/core/components/ui/input-group";import{upsertLangValue}from"@vitnode/core/lib/helpers/multi-lang";import{removeSpecialCharacters}from"@vitnode/core/lib/special-characters";import React from"react";import{useFormContext}from"react-hook-form";const MultiLangInputGroup=({currentValue,languages,onChange,onBlur,onSelect,selected,...props})=>_jsx(FormControl,{children:_jsxs(InputGroup,{children:[_jsx(InputGroupInput,{maxLength:255,onBlur:onBlur,onChange:e=>onChange(e.target.value),value:currentValue,...props}),languages.length>1&&_jsx(InputGroupAddon,{align:"inline-end",children:_jsx(MultiLangSelect,{languages:languages,onSelect:onSelect,selected:selected})})]})});export const TitleField=({field,label,description,friendlyUrlName,friendlyUrlTouched})=>{const form=useFormContext();const{languages,selected,setSelected,currentValue,setValue}=useMultiLangField(field);return _jsxs(_Fragment,{children:[label&&_jsx(AutoFormLabel,{children:label}),_jsx(MultiLangInputGroup,{currentValue:currentValue,languages:languages,onBlur:field.onBlur,onChange:value=>{setValue(value);if(friendlyUrlTouched.current?.has(selected))return;const current=form.getValues(friendlyUrlName);form.setValue(friendlyUrlName,upsertLangValue(current,selected,removeSpecialCharacters(value)),{shouldValidate:true,shouldDirty:true})},onSelect:setSelected,selected:selected}),description&&_jsx(AutoFormDesc,{children:description}),_jsx(FormMessage,{})]})};export const FriendlyUrlField=({field,label,description,friendlyUrlTouched})=>{const{languages,selected,setSelected,currentValue,setValue}=useMultiLangField(field);return _jsxs(_Fragment,{children:[label&&_jsx(AutoFormLabel,{children:label}),_jsx(MultiLangInputGroup,{currentValue:currentValue,languages:languages,onBlur:field.onBlur,onChange:value=>{friendlyUrlTouched.current?.add(selected);setValue(value)},onSelect:setSelected,selected:selected}),description&&_jsx(AutoFormDesc,{children:description}),_jsx(FormMessage,{})]})};
@@ -8,4 +8,4 @@ export declare const editMutationApi: ({ id, ...body }: z.infer<typeof zodCreate
8
8
  }) => Promise<{
9
9
  error: string;
10
10
  } | undefined>;
11
- //# sourceMappingURL=mutation-api.d.ts.map
11
+ //# sourceMappingURL=mutation-api.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-api.server.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/posts/actions/create-edit/mutation-api.server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAK7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAIzF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;cAoB1C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,iBAGnC,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;;cAsBtD,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{ConfirmActionAlertDialog}from"@vitnode/core/components/confirm-action/confirm-action-alert-dialog";import{useAdminStaffPermission}from"@vitnode/core/components/staff-permission/provider";import{Button}from"@vitnode/core/components/ui/button";import{Tooltip,TooltipContent,TooltipProvider,TooltipTrigger}from"@vitnode/core/components/ui/tooltip";import{Trash2Icon}from"lucide-react";import{useTranslations}from"next-intl";import{toast}from"sonner";import{CONFIG_PLUGIN}from"../../../../../../const.js";import{mutationApi}from"./mutation-api.js";export const DeleteAction=({title,id})=>{const t=useTranslations("@vitnode/blog.admin.posts.delete");const tGlobal=useTranslations("core.global");const canDelete=useAdminStaffPermission({plugin:CONFIG_PLUGIN.pluginId,module:"posts",permission:"can_delete"});if(!canDelete)return null;return _jsx(TooltipProvider,{children:_jsxs(Tooltip,{children:[_jsx(ConfirmActionAlertDialog,{description:t.rich("desc",{title:()=>_jsx("span",{className:"text-foreground font-bold",children:title})}),onSubmit:async({onClose})=>{const mutation=await mutationApi(id);if(mutation?.error){toast.error(tGlobal("errors.title"),{description:tGlobal("errors.internal_server_error")});return}toast.success(t("success"),{description:title});onClose()},textSubmit:t("confirm"),title:t("title"),children:_jsx(TooltipTrigger,{render:_jsx(Button,{"aria-label":t("title"),size:"icon",variant:"destructive",children:_jsx(Trash2Icon,{className:"size-4"})})})}),_jsx(TooltipContent,{children:t("title")})]})})};
1
+ "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{ConfirmActionAlertDialog}from"@vitnode/core/components/confirm-action/confirm-action-alert-dialog";import{useAdminStaffPermission}from"@vitnode/core/components/staff-permission/provider";import{Button}from"@vitnode/core/components/ui/button";import{Tooltip,TooltipContent,TooltipProvider,TooltipTrigger}from"@vitnode/core/components/ui/tooltip";import{Trash2Icon}from"lucide-react";import{useTranslations}from"next-intl";import{toast}from"sonner";import{CONFIG_PLUGIN}from"../../../../../../const.js";import{mutationApi}from"./mutation-api.server.js";export const DeleteAction=({title,id})=>{const t=useTranslations("@vitnode/blog.admin.posts.delete");const tGlobal=useTranslations("core.global");const canDelete=useAdminStaffPermission({plugin:CONFIG_PLUGIN.pluginId,module:"posts",permission:"can_delete"});if(!canDelete)return null;return _jsx(TooltipProvider,{children:_jsxs(Tooltip,{children:[_jsx(ConfirmActionAlertDialog,{description:t.rich("desc",{title:()=>_jsx("span",{className:"text-foreground font-bold",children:title})}),onSubmit:async({onClose})=>{const mutation=await mutationApi(id);if(mutation?.error){toast.error(tGlobal("errors.title"),{description:tGlobal("errors.internal_server_error")});return}toast.success(t("success"),{description:title});onClose()},textSubmit:t("confirm"),title:t("title"),children:_jsx(TooltipTrigger,{render:_jsx(Button,{"aria-label":t("title"),size:"icon",variant:"destructive",children:_jsx(Trash2Icon,{className:"size-4"})})})}),_jsx(TooltipContent,{children:t("title")})]})})};
@@ -1,4 +1,4 @@
1
1
  export declare const mutationApi: (id: number) => Promise<{
2
2
  error: string;
3
3
  } | undefined>;
4
- //# sourceMappingURL=mutation-api.d.ts.map
4
+ //# sourceMappingURL=mutation-api.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-api.server.d.ts","sourceRoot":"","sources":["../../../../../../../../src/views/admin/posts/table/actions/delete/mutation-api.server.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,GAAU,IAAI,MAAM;;cAqB3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"edit-action.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/posts/table/actions/edit-action.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,QAAA,MAAM,0BAA0B;;UAOqC,CAAC;;EAHrE,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,0BAA0B,CAAC,CAAC,6BA0CzE,CAAC"}
1
+ {"version":3,"file":"edit-action.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/posts/table/actions/edit-action.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,QAAA,MAAM,0BAA0B;;UASG,CAAC;;EALnC,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,0BAA0B,CAAC,CAAC,6BA8CzE,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useAdminStaffPermission}from"@vitnode/core/components/staff-permission/provider";import{Button}from"@vitnode/core/components/ui/button";import{Dialog,DialogContent,DialogDescription,DialogHeader,DialogTitle,DialogTrigger}from"@vitnode/core/components/ui/dialog";import{Loader}from"@vitnode/core/components/ui/loader";import{Tooltip,TooltipContent,TooltipProvider,TooltipTrigger}from"@vitnode/core/components/ui/tooltip";import{PencilIcon}from"lucide-react";import{useTranslations}from"next-intl";import dynamic from"next/dynamic";import React from"react";import{CONFIG_PLUGIN}from"../../../../../const.js";const CreateEditActionPostsAdmin=dynamic(async()=>import("../../actions/create-edit/create-edit.js").then(mod=>({default:mod.CreateEditActionPostsAdmin})));export const EditAction=props=>{const t=useTranslations("@vitnode/blog.admin.posts.edit");const canEdit=useAdminStaffPermission({plugin:CONFIG_PLUGIN.pluginId,module:"posts",permission:"can_edit"});if(!canEdit)return null;return _jsxs(Dialog,{children:[_jsx(TooltipProvider,{children:_jsxs(Tooltip,{children:[_jsx(TooltipTrigger,{render:_jsx(DialogTrigger,{render:_jsx(Button,{"aria-label":t("title"),size:"icon",variant:"ghost"}),children:_jsx(PencilIcon,{})})}),_jsx(TooltipContent,{children:t("title")})]})}),_jsxs(DialogContent,{children:[_jsxs(DialogHeader,{children:[_jsx(DialogTitle,{children:t("title")}),_jsx(DialogDescription,{children:props.data.title})]}),_jsx(React.Suspense,{fallback:_jsx(Loader,{}),children:_jsx(CreateEditActionPostsAdmin,{...props})})]})]})};
1
+ "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useAdminStaffPermission}from"@vitnode/core/components/staff-permission/provider";import{Button}from"@vitnode/core/components/ui/button";import{Dialog,DialogContent,DialogDescription,DialogHeader,DialogTitle,DialogTrigger}from"@vitnode/core/components/ui/dialog";import{Loader}from"@vitnode/core/components/ui/loader";import{Tooltip,TooltipContent,TooltipProvider,TooltipTrigger}from"@vitnode/core/components/ui/tooltip";import{getLangValue}from"@vitnode/core/lib/helpers/multi-lang";import{PencilIcon}from"lucide-react";import{useLocale,useTranslations}from"next-intl";import dynamic from"next/dynamic";import React from"react";import{CONFIG_PLUGIN}from"../../../../../const.js";const CreateEditActionPostsAdmin=dynamic(async()=>import("../../actions/create-edit/create-edit.js").then(mod=>({default:mod.CreateEditActionPostsAdmin})));export const EditAction=props=>{const t=useTranslations("@vitnode/blog.admin.posts.edit");const locale=useLocale();const canEdit=useAdminStaffPermission({plugin:CONFIG_PLUGIN.pluginId,module:"posts",permission:"can_edit"});if(!canEdit)return null;return _jsxs(Dialog,{children:[_jsx(TooltipProvider,{children:_jsxs(Tooltip,{children:[_jsx(TooltipTrigger,{render:_jsx(DialogTrigger,{render:_jsx(Button,{"aria-label":t("title"),size:"icon",variant:"ghost"}),children:_jsx(PencilIcon,{})})}),_jsx(TooltipContent,{children:t("title")})]})}),_jsxs(DialogContent,{children:[_jsxs(DialogHeader,{children:[_jsx(DialogTitle,{children:t("title")}),_jsx(DialogDescription,{children:getLangValue(props.data.titleTranslations,locale)||props.data.titleTranslations[0]?.value})]}),_jsx(React.Suspense,{fallback:_jsx(Loader,{}),children:_jsx(CreateEditActionPostsAdmin,{...props})})]})]})};
@@ -1 +1 @@
1
- {"version":3,"file":"posts-admin-view.d.ts","sourceRoot":"","sources":["../../../../../../src/views/admin/posts/table/posts-admin-view.tsx"],"names":[],"mappings":"AAUA,eAAO,MAAM,cAAc,GAAU,mBAElC;IACD,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CACtE,yCAiEA,CAAC"}
1
+ {"version":3,"file":"posts-admin-view.d.ts","sourceRoot":"","sources":["../../../../../../src/views/admin/posts/table/posts-admin-view.tsx"],"names":[],"mappings":"AAYA,eAAO,MAAM,cAAc,GAAU,mBAElC;IACD,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CACtE,yCAqFA,CAAC"}
@@ -1 +1 @@
1
- import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{DateFormat}from"@vitnode/core/components/date-format";import{DataTable}from"@vitnode/core/components/table/data-table";import{fetcher}from"@vitnode/core/lib/fetcher";import{getTranslations}from"next-intl/server";import{postsModule}from"../../../../api/modules/posts/posts.module.js";import{DeleteAction}from"./actions/delete/delete-action.js";import{EditAction}from"./actions/edit-action.js";export const PostsAdminView=async({searchParams})=>{const t=await getTranslations("@vitnode/blog.admin.posts.table");const query=await searchParams;const res=await fetcher(postsModule,{path:"/",method:"get",module:"posts",args:{query},withPagination:true,options:{cache:"force-cache"}});const data=await res.json();return _jsx(DataTable,{columns:[{id:"id",label:"ID",className:"w-24"},{id:"title",label:t("title")},{id:"category",label:t("category"),className:"w-48",cell:({row})=>row.category.title},{id:"updatedAt",label:t("updated_at"),className:"w-48",cell:({row})=>_jsx(DateFormat,{date:row.updatedAt})},{id:"actions",label:"",className:"w-10",cell:({row})=>_jsxs(_Fragment,{children:[_jsx(EditAction,{data:row}),_jsx(DeleteAction,{...row})]})}],edges:data.edges.map(edge=>({...edge})),id:"posts-table",order:{columns:["createdAt","updatedAt"],defaultOrder:{column:"createdAt",order:"desc"}},pageInfo:data.pageInfo})};
1
+ import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{Avatar}from"@vitnode/core/components/avatar";import{DateFormat}from"@vitnode/core/components/date-format";import{DataTable}from"@vitnode/core/components/table/data-table";import{fetcher}from"@vitnode/core/lib/fetcher";import{getLangValue}from"@vitnode/core/lib/helpers/multi-lang";import{getLocale,getTranslations}from"next-intl/server";import{postsModule}from"../../../../api/modules/posts/posts.module.js";import{DeleteAction}from"./actions/delete/delete-action.js";import{EditAction}from"./actions/edit-action.js";export const PostsAdminView=async({searchParams})=>{const t=await getTranslations("@vitnode/blog.admin.posts.table");const locale=await getLocale();const query=await searchParams;const res=await fetcher(postsModule,{path:"/",method:"get",module:"posts",args:{query},withPagination:true,options:{cache:"force-cache"}});const data=await res.json();return _jsx(DataTable,{columns:[{accessorKey:"title",header:t("title")},{accessorKey:"category",header:t("category"),className:"w-48",cell:({row})=>getLangValue(row.category.titleTranslations,locale)||row.category.titleTranslations[0]?.value||""},{accessorKey:"author",header:t("author"),className:"w-48",cell:({row})=>row.author?_jsxs("div",{className:"flex items-center gap-2",children:[_jsx(Avatar,{size:24,user:row.author}),_jsx("span",{children:row.author.name})]}):_jsx("span",{className:"text-muted-foreground",children:"—"})},{accessorKey:"updatedAt",header:t("updated_at"),className:"w-48",cell:({row})=>_jsx(DateFormat,{date:row.updatedAt})},{id:"actions",header:"",align:"right",className:"w-10",cell:({row})=>_jsxs(_Fragment,{children:[_jsx(EditAction,{data:row}),_jsx(DeleteAction,{...row})]})}],edges:data.edges.map(edge=>({...edge,title:getLangValue(edge.titleTranslations,locale)||edge.titleTranslations[0]?.value||""})),id:"posts-table",order:{columns:["createdAt","updatedAt"],defaultOrder:{column:"createdAt",order:"desc"}},pageInfo:data.pageInfo})};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitnode/blog",
3
- "version": "1.2.0-canary.75",
3
+ "version": "1.2.0-canary.77",
4
4
  "description": "Blog plugin for VitNode, providing a blogging platform with Next.js and Hono.js.",
5
5
  "author": "VitNode Team",
6
6
  "license": "MIT",
@@ -20,6 +20,7 @@
20
20
  ],
21
21
  "type": "module",
22
22
  "exports": {
23
+ "./locales/*.json": "./src/locales/*.json",
23
24
  "./*": {
24
25
  "import": "./dist/src/*.js",
25
26
  "types": "./dist/src/*.d.ts",
@@ -27,36 +28,35 @@
27
28
  }
28
29
  },
29
30
  "dependencies": {
30
- "@hono/zod-openapi": "^1.4.0",
31
+ "@hono/zod-openapi": "^1.5.1",
31
32
  "drizzle-kit": "^0.31.10",
32
33
  "drizzle-orm": "^0.45.2",
33
- "hono": "^4.12.27",
34
- "lucide-react": "^1.21.0",
35
- "next": "16.3.0-preview.5",
36
- "next-intl": "^4.13.0",
37
- "react": "^19.2.7",
38
- "react-dom": "^19.2.7",
39
- "react-email": "^6.6.6",
40
- "react-hook-form": "^7.80.0",
34
+ "hono": "^4.12.31",
35
+ "lucide-react": "^1.25.0",
36
+ "next": "16.3.0-preview.9",
37
+ "next-intl": "^4.13.3",
38
+ "react": "^19.2.8",
39
+ "react-dom": "^19.2.8",
40
+ "react-email": "^6.9.0",
41
+ "react-hook-form": "^7.82.0",
41
42
  "sonner": "^2.0.7",
42
43
  "zod": "^4.4.3",
43
- "@vitnode/core": "1.2.0-canary.75"
44
+ "@vitnode/core": "1.2.0-canary.77"
44
45
  },
45
46
  "devDependencies": {
46
- "@react-email/ui": "^6.6.6",
47
+ "@react-email/ui": "^6.9.0",
47
48
  "@swc/cli": "^0.8.1",
48
- "@swc/core": "^1.15.43",
49
+ "@swc/core": "^1.15.46",
49
50
  "@types/react": "^19.2.17",
50
51
  "@types/react-dom": "^19.2.3",
51
- "concurrently": "^10.0.3",
52
- "eslint": "^10.5.0",
53
- "tsc-alias": "^1.8.17",
52
+ "eslint": "^10.7.0",
53
+ "tsc-alias": "^1.9.1",
54
54
  "typescript": "^6.0.3",
55
- "@vitnode/config": "1.2.0-canary.75"
55
+ "@vitnode/config": "1.2.0-canary.77"
56
56
  },
57
57
  "scripts": {
58
- "build:plugins": "tsc && swc src -d dist --config-file .swcrc && tsc-alias -p tsconfig.json",
59
- "dev": "concurrently \"tsc -w --preserveWatchOutput\" \"swc src -d dist --config-file .swcrc -w\" \"tsc-alias -w\" \"vitnode plugin --w\"",
58
+ "build:plugins": "vitnode build",
59
+ "dev": "vitnode dev",
60
60
  "dev:email": "email dev --dir src/emails",
61
61
  "lint": "eslint .",
62
62
  "lint:fix": "eslint . --fix"
@@ -10,6 +10,7 @@
10
10
  "desc": "Manage categories for blog posts.",
11
11
  "table": {
12
12
  "title": "Title",
13
+ "color": "Color",
13
14
  "updated_at": "Updated At"
14
15
  },
15
16
  "delete": {
@@ -25,13 +26,16 @@
25
26
  "title": {
26
27
  "label": "Title",
27
28
  "already_exists": "This category title already exists."
28
- }
29
+ },
30
+ "color": "Color"
29
31
  },
30
- "submit": "Create"
32
+ "submit": "Create",
33
+ "success": "Category has been created successfully."
31
34
  },
32
35
  "edit": {
33
36
  "title": "Edit Category",
34
- "submit": "Save Changes"
37
+ "submit": "Save Changes",
38
+ "success": "Category has been updated successfully."
35
39
  }
36
40
  },
37
41
  "posts": {
@@ -39,6 +43,7 @@
39
43
  "table": {
40
44
  "title": "Title",
41
45
  "category": "Category",
46
+ "author": "Author",
42
47
  "updated_at": "Updated At"
43
48
  },
44
49
  "create": {
@@ -49,14 +54,21 @@
49
54
  "label": "Title",
50
55
  "already_exists": "This post title already exists."
51
56
  },
57
+ "friendly_url": {
58
+ "label": "Friendly URL",
59
+ "desc": "Used in the post address. Auto-filled from the title.",
60
+ "already_exists": "This friendly URL already exists."
61
+ },
52
62
  "content": "Content",
53
63
  "category": "Category"
54
64
  },
55
- "submit": "Create Post"
65
+ "submit": "Create Post",
66
+ "success": "Post has been created successfully."
56
67
  },
57
68
  "edit": {
58
69
  "title": "Edit Post",
59
- "submit": "Save Changes"
70
+ "submit": "Save Changes",
71
+ "success": "Post has been updated successfully."
60
72
  },
61
73
  "delete": {
62
74
  "title": "Delete Post",
@@ -0,0 +1,11 @@
1
+ import type { LocaleMessagesMap } from "@vitnode/core/lib/i18n/types";
2
+
3
+ /**
4
+ * Every language this plugin ships. Add a file next to this one and a line
5
+ * here to add another; apps pick it up with no copy step.
6
+ */
7
+ const messages: LocaleMessagesMap = {
8
+ en: async () => await import("./en.json", { with: { type: "json" } }),
9
+ };
10
+
11
+ export default messages;
@@ -0,0 +1,5 @@
1
+ import { BreadcrumbAdmin } from "@vitnode/core/views/admin/layouts/breadcrumb/breadcrumb-admin";
2
+
3
+ export default function BreadcrumbSlot() {
4
+ return <BreadcrumbAdmin segments={["blog", "categories"]} />;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { BreadcrumbAdmin } from "@vitnode/core/views/admin/layouts/breadcrumb/breadcrumb-admin";
2
+
3
+ export default function BreadcrumbSlot() {
4
+ return <BreadcrumbAdmin segments={["blog", "posts"]} />;
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "extends": "./tsconfig.json",
4
+ "exclude": ["node_modules", "**/*.test.ts", "**/*.test.tsx"]
5
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutation-api.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/categories/actions/create-edit/mutation-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAK7B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iEAAiE,CAAC;AAI/G,eAAO,MAAM,iBAAiB,GAC5B,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC;;cAoB9C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,iBAGnC,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;;cAsB1D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutation-api.d.ts","sourceRoot":"","sources":["../../../../../../../../src/views/admin/categories/table/actions/delete/mutation-api.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,GAAU,IAAI,MAAM;;cAqB3C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutation-api.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/posts/actions/create-edit/mutation-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAK7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAIzF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;cAoB1C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,iBAGnC,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;;cAsBtD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutation-api.d.ts","sourceRoot":"","sources":["../../../../../../../../src/views/admin/posts/table/actions/delete/mutation-api.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,GAAU,IAAI,MAAM;;cAqB3C,CAAC"}