@vitnode/blog 1.2.0-canary.76 → 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 (194) 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 +197 -180
  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 -2
  16. package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts +83 -80
  17. package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts.map +1 -1
  18. package/dist/src/api/modules/admin/categories/categories.admin.module.js +1 -2
  19. package/dist/src/api/modules/admin/categories/routes/create.route.d.ts +38 -34
  20. package/dist/src/api/modules/admin/categories/routes/create.route.d.ts.map +1 -1
  21. package/dist/src/api/modules/admin/categories/routes/create.route.js +1 -2
  22. package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts +15 -18
  23. package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts.map +1 -1
  24. package/dist/src/api/modules/admin/categories/routes/delete.route.js +1 -2
  25. package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts +38 -38
  26. package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts.map +1 -1
  27. package/dist/src/api/modules/admin/categories/routes/edit.route.js +1 -2
  28. package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts +104 -93
  29. package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts.map +1 -1
  30. package/dist/src/api/modules/admin/posts/posts.admin.module.js +1 -2
  31. package/dist/src/api/modules/admin/posts/routes/create.route.d.ts +58 -44
  32. package/dist/src/api/modules/admin/posts/routes/create.route.d.ts.map +1 -1
  33. package/dist/src/api/modules/admin/posts/routes/create.route.js +1 -2
  34. package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts +15 -18
  35. package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts.map +1 -1
  36. package/dist/src/api/modules/admin/posts/routes/delete.route.js +1 -2
  37. package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts +47 -43
  38. package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts.map +1 -1
  39. package/dist/src/api/modules/admin/posts/routes/edit.route.js +1 -2
  40. package/dist/src/api/modules/categories/categories.module.d.ts +65 -64
  41. package/dist/src/api/modules/categories/categories.module.d.ts.map +1 -1
  42. package/dist/src/api/modules/categories/categories.module.js +1 -2
  43. package/dist/src/api/modules/categories/routes/get.route.d.ts +56 -45
  44. package/dist/src/api/modules/categories/routes/get.route.d.ts.map +1 -1
  45. package/dist/src/api/modules/categories/routes/get.route.js +1 -2
  46. package/dist/src/api/modules/categories/test.route.d.ts +20 -23
  47. package/dist/src/api/modules/categories/test.route.d.ts.map +1 -1
  48. package/dist/src/api/modules/categories/test.route.js +1 -2
  49. package/dist/src/api/modules/posts/posts.module.d.ts +68 -54
  50. package/dist/src/api/modules/posts/posts.module.d.ts.map +1 -1
  51. package/dist/src/api/modules/posts/posts.module.js +1 -2
  52. package/dist/src/api/modules/posts/routes/get.route.d.ts +97 -66
  53. package/dist/src/api/modules/posts/routes/get.route.d.ts.map +1 -1
  54. package/dist/src/api/modules/posts/routes/get.route.js +1 -2
  55. package/dist/src/config.api.d.ts +1 -4
  56. package/dist/src/config.api.d.ts.map +1 -1
  57. package/dist/src/config.api.js +1 -2
  58. package/dist/src/config.d.ts +1 -4
  59. package/dist/src/config.d.ts.map +1 -1
  60. package/dist/src/config.js +1 -2
  61. package/dist/src/const.d.ts +2 -5
  62. package/dist/src/const.d.ts.map +1 -1
  63. package/dist/src/const.js +1 -2
  64. package/dist/src/database/categories.d.ts +76 -98
  65. package/dist/src/database/categories.d.ts.map +1 -1
  66. package/dist/src/database/categories.js +1 -2
  67. package/dist/src/database/index.d.ts +4 -4
  68. package/dist/src/database/index.d.ts.map +1 -0
  69. package/dist/src/database/index.js +1 -1
  70. package/dist/src/database/posts.d.ts +91 -132
  71. package/dist/src/database/posts.d.ts.map +1 -1
  72. package/dist/src/database/posts.js +1 -2
  73. package/dist/src/database/relations.d.ts +4 -7
  74. package/dist/src/database/relations.d.ts.map +1 -1
  75. package/dist/src/database/relations.js +1 -2
  76. package/dist/src/emails/test-template.d.ts +18 -20
  77. package/dist/src/emails/test-template.d.ts.map +1 -1
  78. package/dist/src/emails/test-template.js +1 -2
  79. package/dist/src/globals.css +44 -0
  80. package/dist/src/locales/en.json +92 -0
  81. package/dist/src/locales/index.d.ts +4 -0
  82. package/dist/src/locales/index.d.ts.map +1 -0
  83. package/dist/src/locales/index.js +1 -0
  84. package/dist/src/routes/admin/blog/categories/page.d.ts +5 -7
  85. package/dist/src/routes/admin/blog/categories/page.d.ts.map +1 -1
  86. package/dist/src/routes/admin/blog/categories/page.js +1 -2
  87. package/dist/src/routes/admin/blog/posts/page.d.ts +5 -7
  88. package/dist/src/routes/admin/blog/posts/page.d.ts.map +1 -1
  89. package/dist/src/routes/admin/blog/posts/page.js +1 -2
  90. package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts +2 -0
  91. package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts.map +1 -0
  92. package/dist/src/routes/breadcrumb/admin/blog/categories/page.js +1 -0
  93. package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts +2 -0
  94. package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts.map +1 -0
  95. package/dist/src/routes/breadcrumb/admin/blog/posts/page.js +1 -0
  96. package/dist/src/views/admin/categories/actions/actions.d.ts +1 -4
  97. package/dist/src/views/admin/categories/actions/actions.d.ts.map +1 -1
  98. package/dist/src/views/admin/categories/actions/actions.js +1 -2
  99. package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts +5 -8
  100. package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts.map +1 -1
  101. package/dist/src/views/admin/categories/actions/create-edit/create-edit.js +1 -2
  102. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts +11 -0
  103. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts.map +1 -0
  104. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.js +1 -0
  105. package/dist/src/views/admin/categories/table/actions/delete/delete-action.d.ts +3 -6
  106. package/dist/src/views/admin/categories/table/actions/delete/delete-action.d.ts.map +1 -1
  107. package/dist/src/views/admin/categories/table/actions/delete/delete-action.js +1 -2
  108. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts +4 -0
  109. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts.map +1 -0
  110. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.js +1 -0
  111. package/dist/src/views/admin/categories/table/actions/edit-action.d.ts +5 -8
  112. package/dist/src/views/admin/categories/table/actions/edit-action.d.ts.map +1 -1
  113. package/dist/src/views/admin/categories/table/actions/edit-action.js +1 -2
  114. package/dist/src/views/admin/categories/table/categories-admin-view.d.ts +2 -5
  115. package/dist/src/views/admin/categories/table/categories-admin-view.d.ts.map +1 -1
  116. package/dist/src/views/admin/categories/table/categories-admin-view.js +1 -2
  117. package/dist/src/views/admin/posts/actions/actions.d.ts +1 -4
  118. package/dist/src/views/admin/posts/actions/actions.d.ts.map +1 -1
  119. package/dist/src/views/admin/posts/actions/actions.js +1 -2
  120. package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts +7 -9
  121. package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts.map +1 -1
  122. package/dist/src/views/admin/posts/actions/create-edit/create-edit.js +1 -2
  123. package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts +10 -0
  124. package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts.map +1 -0
  125. package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.js +1 -0
  126. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts +11 -0
  127. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts.map +1 -0
  128. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.js +1 -0
  129. package/dist/src/views/admin/posts/table/actions/delete/delete-action.d.ts +3 -6
  130. package/dist/src/views/admin/posts/table/actions/delete/delete-action.d.ts.map +1 -1
  131. package/dist/src/views/admin/posts/table/actions/delete/delete-action.js +1 -2
  132. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts +4 -0
  133. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts.map +1 -0
  134. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.js +1 -0
  135. package/dist/src/views/admin/posts/table/actions/edit-action.d.ts +5 -8
  136. package/dist/src/views/admin/posts/table/actions/edit-action.d.ts.map +1 -1
  137. package/dist/src/views/admin/posts/table/actions/edit-action.js +1 -2
  138. package/dist/src/views/admin/posts/table/posts-admin-view.d.ts +2 -5
  139. package/dist/src/views/admin/posts/table/posts-admin-view.d.ts.map +1 -1
  140. package/dist/src/views/admin/posts/table/posts-admin-view.js +1 -2
  141. package/package.json +20 -18
  142. package/src/locales/en.json +17 -5
  143. package/src/locales/index.ts +11 -0
  144. package/src/routes/breadcrumb/admin/blog/categories/page.tsx +5 -0
  145. package/src/routes/breadcrumb/admin/blog/posts/page.tsx +5 -0
  146. package/dist/src/api/modules/admin/admin.module.js.map +0 -1
  147. package/dist/src/api/modules/admin/categories/categories.admin.module.js.map +0 -1
  148. package/dist/src/api/modules/admin/categories/routes/create.route.js.map +0 -1
  149. package/dist/src/api/modules/admin/categories/routes/delete.route.js.map +0 -1
  150. package/dist/src/api/modules/admin/categories/routes/edit.route.js.map +0 -1
  151. package/dist/src/api/modules/admin/posts/posts.admin.module.js.map +0 -1
  152. package/dist/src/api/modules/admin/posts/routes/create.route.js.map +0 -1
  153. package/dist/src/api/modules/admin/posts/routes/delete.route.js.map +0 -1
  154. package/dist/src/api/modules/admin/posts/routes/edit.route.js.map +0 -1
  155. package/dist/src/api/modules/categories/categories.module.js.map +0 -1
  156. package/dist/src/api/modules/categories/routes/get.route.js.map +0 -1
  157. package/dist/src/api/modules/categories/test.route.js.map +0 -1
  158. package/dist/src/api/modules/posts/posts.module.js.map +0 -1
  159. package/dist/src/api/modules/posts/routes/get.route.js.map +0 -1
  160. package/dist/src/config.api.js.map +0 -1
  161. package/dist/src/config.js.map +0 -1
  162. package/dist/src/const.js.map +0 -1
  163. package/dist/src/database/categories.js.map +0 -1
  164. package/dist/src/database/posts.js.map +0 -1
  165. package/dist/src/database/relations.js.map +0 -1
  166. package/dist/src/emails/test-template.js.map +0 -1
  167. package/dist/src/routes/admin/blog/categories/page.js.map +0 -1
  168. package/dist/src/routes/admin/blog/posts/page.js.map +0 -1
  169. package/dist/src/views/admin/categories/actions/actions.js.map +0 -1
  170. package/dist/src/views/admin/categories/actions/create-edit/create-edit.js.map +0 -1
  171. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.d.ts +0 -14
  172. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.d.ts.map +0 -1
  173. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.js +0 -2
  174. package/dist/src/views/admin/categories/actions/create-edit/mutation-api.js.map +0 -1
  175. package/dist/src/views/admin/categories/table/actions/delete/delete-action.js.map +0 -1
  176. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.d.ts +0 -7
  177. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.d.ts.map +0 -1
  178. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.js +0 -2
  179. package/dist/src/views/admin/categories/table/actions/delete/mutation-api.js.map +0 -1
  180. package/dist/src/views/admin/categories/table/actions/edit-action.js.map +0 -1
  181. package/dist/src/views/admin/categories/table/categories-admin-view.js.map +0 -1
  182. package/dist/src/views/admin/posts/actions/actions.js.map +0 -1
  183. package/dist/src/views/admin/posts/actions/create-edit/create-edit.js.map +0 -1
  184. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.d.ts +0 -14
  185. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.d.ts.map +0 -1
  186. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.js +0 -2
  187. package/dist/src/views/admin/posts/actions/create-edit/mutation-api.js.map +0 -1
  188. package/dist/src/views/admin/posts/table/actions/delete/delete-action.js.map +0 -1
  189. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.d.ts +0 -7
  190. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.d.ts.map +0 -1
  191. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.js +0 -2
  192. package/dist/src/views/admin/posts/table/actions/delete/mutation-api.js.map +0 -1
  193. package/dist/src/views/admin/posts/table/actions/edit-action.js.map +0 -1
  194. package/dist/src/views/admin/posts/table/posts-admin-view.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"create-edit.d.ts","names":[],"sources":["../../../../../../../src/views/admin/categories/actions/create-edit/create-edit.tsx"],"mappings":";;;cAea,oCAAmC;EAG9C,OAAO,EAAE,aAAa;IAA6B;;sBACpD,IAAA"}
1
+ {"version":3,"file":"create-edit.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/categories/actions/create-edit/create-edit.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAInF,eAAO,MAAM,+BAA+B,GAAI,WAE7C;IACD,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D,gCAiEA,CAAC"}
@@ -1,2 +1 @@
1
- import{createMutationApi as e,editMutationApi as t}from"./mutation-api.js";import{z as n}from"zod";import{jsx as r}from"react/jsx-runtime";import{useDialog as i}from"@vitnode/core/components/ui/dialog";import{useTranslations as a}from"next-intl";import{toast as o}from"sonner";import{AutoForm as s}from"@vitnode/core/components/form/auto-form";import{AutoFormInput as c}from"@vitnode/core/components/form/fields/input";import{usePathname as l,useRouter as u}from"@vitnode/core/lib/navigation";const d=({data:d})=>{let f=a(`@vitnode/blog.admin.categories`),p=a(`core.global.errors`),{setOpen:m}=i(),{push:h}=u(),g=l();return r(s,{fields:[{id:`title`,component:e=>r(c,{label:f(`create.form.title.label`),...e})}],formSchema:n.object({title:n.string().default(d?.title??``)}),onSubmit:async(n,r)=>{let i=``;if(d?.id){let e=await t({id:d.id,...n});e?.error&&(i=e.error)}else{let t=await e(n);t?.error&&(i=t.error)}if(i){if(i.includes(`already exists`)){r.setError(`title`,{type:`manual`,message:f(`create.form.title.already_exists`)});return}o.error(p(`title`),{description:p(`internal_server_error`)});return}m?.(!1),h(g)},submitButtonProps:{children:f(`${d?`edit`:`create`}.submit`)}})};export{d as CreateEditActionCategoriesAdmin};
2
- //# sourceMappingURL=create-edit.js.map
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{AutoForm}from"@vitnode/core/components/form/auto-form";import{AutoFormColor}from"@vitnode/core/components/form/fields/color";import{AutoFormInput}from"@vitnode/core/components/form/fields/input";import{useDialog}from"@vitnode/core/components/ui/dialog";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{toast}from"sonner";import{z}from"zod";import{createMutationApi,editMutationApi}from"./mutation-api.server.js";export const CreateEditActionCategoriesAdmin=({data})=>{const t=useTranslations("@vitnode/blog.admin.categories");const tCore=useTranslations("core.global.errors");const{setOpen}=useDialog();const{push}=useRouter();const pathname=usePathname();const locale=useLocale();const formSchema=z.object({title:multiLangValueSchema({minLength:1,maxLength:100}).min(1).default(data?.titleTranslations??[]),color:z.string().default(data?.color??"")});const onSubmit=async values=>{const mutation=data?.id?await editMutationApi({id:data.id,...values}):await createMutationApi(values);if(mutation?.error){toast.error(tCore("title"),{description:tCore("internal_server_error")});return}toast.success(t(data?"edit.success":"create.success"),{description:getLangValue(values.title,locale)||values.title[0]?.value});setOpen?.(false);push(pathname)};return _jsx(AutoForm,{fields:[{id:"title",component:props=>_jsx(AutoFormInput,{label:t("create.form.title.label"),multiLang:true,...props})},{id:"color",component:props=>_jsx(AutoFormColor,{allowRemoveColor:true,label:t("create.form.color"),...props})}],formSchema:formSchema,onSubmit:onSubmit,submitButtonProps:{children:t(`${data?"edit":"create"}.submit`)}})};
@@ -0,0 +1,11 @@
1
+ import type { z } from "zod";
2
+ import type { zodCreateCategorySchema } from "../../../../../api/modules/admin/categories/routes/create.route";
3
+ export declare const createMutationApi: (body: z.infer<typeof zodCreateCategorySchema>) => Promise<{
4
+ error: string;
5
+ } | undefined>;
6
+ export declare const editMutationApi: ({ id, ...body }: z.infer<typeof zodCreateCategorySchema> & {
7
+ id: number;
8
+ }) => Promise<{
9
+ error: string;
10
+ } | undefined>;
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/categories/actions/create-edit/mutation-api.server.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"}
@@ -0,0 +1 @@
1
+ "use server";import{fetcher}from"@vitnode/core/lib/fetcher";import{revalidatePath}from"next/cache";import{categoriesAdminModule}from"../../../../../api/modules/admin/categories/categories.admin.module.js";export const createMutationApi=async body=>{const res=await fetcher(categoriesAdminModule,{prefixPath:"/admin",method:"post",module:"categories",path:"/",args:{body}});if(res.status!==201){return{error:await res.text()}}revalidatePath("/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories","page")};export const editMutationApi=async({id,...body})=>{const res=await fetcher(categoriesAdminModule,{prefixPath:"/admin",method:"put",module:"categories",path:"/{id}",args:{params:{id},body}});if(res.status!==200){return{error:await res.text()}}revalidatePath("/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories","page")};
@@ -1,8 +1,5 @@
1
- //#region src/views/admin/categories/table/actions/delete/delete-action.d.ts
2
- declare const DeleteAction: ({ title, id }: {
3
- id: number;
4
- title: string;
1
+ export declare const DeleteAction: ({ title, id }: {
2
+ id: number;
3
+ title: string;
5
4
  }) => import("react").JSX.Element | null;
6
- //#endregion
7
- export { DeleteAction };
8
5
  //# sourceMappingURL=delete-action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-action.d.ts","names":[],"sources":["../../../../../../../../src/views/admin/categories/table/actions/delete/delete-action.tsx"],"mappings":";cAmBa,iBAAgB,OAAA;EAAiB;EAAY;sBAAe,IAAA"}
1
+ {"version":3,"file":"delete-action.d.ts","sourceRoot":"","sources":["../../../../../../../../src/views/admin/categories/table/actions/delete/delete-action.tsx"],"names":[],"mappings":"AAmBA,eAAO,MAAM,YAAY,GAAI,eAAe;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,uCAmDxE,CAAC"}
@@ -1,2 +1 @@
1
- "use client";import{CONFIG_PLUGIN as e}from"../../../../../../const.js";import{mutationApi as t}from"./mutation-api.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{Trash2Icon as i}from"lucide-react";import{Button as a}from"@vitnode/core/components/ui/button";import{useTranslations as o}from"next-intl";import{ConfirmActionAlertDialog as s}from"@vitnode/core/components/confirm-action/confirm-action-alert-dialog";import{useAdminStaffPermission as c}from"@vitnode/core/components/staff-permission/provider";import{Tooltip as l,TooltipContent as u,TooltipProvider as d,TooltipTrigger as f}from"@vitnode/core/components/ui/tooltip";import{toast as p}from"sonner";const m=({title:m,id:h})=>{let g=o(`@vitnode/blog.admin.categories.delete`),_=o(`core.global`);return c({plugin:e.pluginId,module:`categories`,permission:`can_delete`})?n(d,{children:r(l,{children:[n(s,{description:g.rich(`desc`,{title:()=>n(`span`,{className:`text-foreground font-bold`,children:m})}),onSubmit:async({onClose:e})=>{if((await t(h))?.error){p.error(_(`errors.title`),{description:_(`errors.internal_server_error`)});return}p.success(g(`success`),{description:m}),e()},textSubmit:g(`confirm`),title:g(`title`),children:n(f,{render:n(a,{"aria-label":g(`title`),size:`icon`,variant:`destructive`,children:n(i,{className:`size-4`})})})}),n(u,{children:g(`title`)})]})}):null};export{m as DeleteAction};
2
- //# sourceMappingURL=delete-action.js.map
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")})]})})};
@@ -0,0 +1,4 @@
1
+ export declare const mutationApi: (id: number) => Promise<{
2
+ error: string;
3
+ } | undefined>;
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"}
@@ -0,0 +1 @@
1
+ "use server";import{fetcher}from"@vitnode/core/lib/fetcher";import{revalidatePath}from"next/cache";import{categoriesAdminModule}from"../../../../../../api/modules/admin/categories/categories.admin.module.js";export const mutationApi=async id=>{const res=await fetcher(categoriesAdminModule,{prefixPath:"/admin",method:"delete",path:"/{id}",module:"categories",args:{params:{id}}});if(!res.ok){return{error:await res.text()}}revalidatePath("/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/categories","page")};
@@ -1,12 +1,9 @@
1
- import { zodCreateCategorySchema } from "../../../../../api/modules/admin/categories/routes/create.route.js";
2
1
  import React from "react";
3
- //#region src/views/admin/categories/table/actions/edit-action.d.ts
4
2
  declare const CreateEditActionCategoriesAdmin: React.ComponentType<{
5
- data?: import("zod").infer<typeof zodCreateCategorySchema> & {
6
- id: number;
7
- };
3
+ data?: import("zod").infer<typeof import("../../../../../api/modules/categories/routes/get.route").zodCategorySchema> & {
4
+ id: number;
5
+ };
8
6
  }>;
9
- declare const EditAction: (props: Required<React.ComponentProps<typeof CreateEditActionCategoriesAdmin>>) => React.JSX.Element | null;
10
- //#endregion
11
- export { EditAction };
7
+ export declare const EditAction: (props: Required<React.ComponentProps<typeof CreateEditActionCategoriesAdmin>>) => React.JSX.Element | null;
8
+ export {};
12
9
  //# sourceMappingURL=edit-action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"edit-action.d.ts","names":[],"sources":["../../../../../../../src/views/admin/categories/table/actions/edit-action.tsx"],"mappings":";;;cA0BM,iCAA+B,MAAA;oCAA/B;;;;cAMO,aACX,OAAO,SAAS,MAAM,sBAAsB,sCAAiC,MAAA,IAAA"}
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,2 +1 @@
1
- "use client";import{CONFIG_PLUGIN as e}from"../../../../../const.js";import{jsx as t,jsxs as n}from"react/jsx-runtime";import{PencilIcon as r}from"lucide-react";import i from"next/dynamic";import a from"react";import{Button as o}from"@vitnode/core/components/ui/button";import{Dialog as s,DialogContent as c,DialogDescription as l,DialogHeader as u,DialogTitle as d,DialogTrigger as f}from"@vitnode/core/components/ui/dialog";import{Loader as p}from"@vitnode/core/components/ui/loader";import{useTranslations as m}from"next-intl";import{useAdminStaffPermission as h}from"@vitnode/core/components/staff-permission/provider";import{Tooltip as g,TooltipContent as _,TooltipProvider as v,TooltipTrigger as y}from"@vitnode/core/components/ui/tooltip";const b=i(async()=>import(`../../actions/create-edit/create-edit.js`).then(e=>({default:e.CreateEditActionCategoriesAdmin}))),x=i=>{let x=m(`@vitnode/blog.admin.categories.edit`);return h({plugin:e.pluginId,module:`categories`,permission:`can_edit`})?n(s,{children:[t(v,{children:n(g,{children:[t(y,{render:t(f,{render:t(o,{"aria-label":x(`title`),size:`icon`,variant:`ghost`}),children:t(r,{})})}),t(_,{children:x(`title`)})]})}),n(c,{children:[n(u,{children:[t(d,{children:x(`title`)}),t(l,{children:i.data.title})]}),t(a.Suspense,{fallback:t(p,{}),children:t(b,{...i})})]})]}):null};export{x as EditAction};
2
- //# sourceMappingURL=edit-action.js.map
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,7 +1,4 @@
1
- //#region src/views/admin/categories/table/categories-admin-view.d.ts
2
- declare const CategoriesAdminView: ({ searchParams }: {
3
- searchParams: Promise<Record<string, string | string[] | undefined>>;
1
+ export declare const CategoriesAdminView: ({ searchParams, }: {
2
+ searchParams: Promise<Record<string, string | string[] | undefined>>;
4
3
  }) => Promise<import("react").JSX.Element>;
5
- //#endregion
6
- export { CategoriesAdminView };
7
4
  //# sourceMappingURL=categories-admin-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"categories-admin-view.d.ts","names":[],"sources":["../../../../../../src/views/admin/categories/table/categories-admin-view.tsx"],"mappings":";cAUa,wBAA6B;EAGxC,cAAc,QAAQ;MACvB,wBAAA,IAAA"}
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,2 +1 @@
1
- import{categoriesModule as e}from"../../../../api/modules/categories/categories.module.js";import{DeleteAction as t}from"./actions/delete/delete-action.js";import{EditAction as n}from"./actions/edit-action.js";import{Fragment as r,jsx as i,jsxs as a}from"react/jsx-runtime";import{DataTable as o}from"@vitnode/core/components/table/data-table";import{getTranslations as s}from"next-intl/server";import{DateFormat as c}from"@vitnode/core/components/date-format";import{fetcher as l}from"@vitnode/core/lib/fetcher";const u=async({searchParams:u})=>{let d=await s(`@vitnode/blog.admin.categories.table`),f=await(await l(e,{path:`/`,method:`get`,module:`categories`,args:{query:await u},withPagination:!0,options:{cache:`force-cache`}})).json();return i(o,{columns:[{accessorKey:`id`,header:`ID`,className:`w-24`},{accessorKey:`title`,header:d(`title`)},{accessorKey:`updatedAt`,header:d(`updated_at`),className:`w-48`,cell:({row:e})=>i(c,{date:e.updatedAt})},{id:`actions`,header:``,align:`right`,className:`w-10`,cell:({row:e})=>a(r,{children:[i(n,{data:e}),i(t,{...e})]})}],edges:f.edges.map(e=>({...e})),id:`categories-table`,order:{columns:[`createdAt`,`updatedAt`],defaultOrder:{column:`createdAt`,order:`desc`}},pageInfo:f.pageInfo})};export{u as CategoriesAdminView};
2
- //# sourceMappingURL=categories-admin-view.js.map
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,6 +1,3 @@
1
1
  import React from "react";
2
- //#region src/views/admin/posts/actions/actions.d.ts
3
- declare const ActionsPostsAdmin: () => React.JSX.Element;
4
- //#endregion
5
- export { ActionsPostsAdmin };
2
+ export declare const ActionsPostsAdmin: () => React.JSX.Element;
6
3
  //# sourceMappingURL=actions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","names":[],"sources":["../../../../../../src/views/admin/posts/actions/actions.tsx"],"mappings":";;cAuBa,yBAAiB,MAAA,IAAA"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../../../../src/views/admin/posts/actions/actions.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,eAAO,MAAM,iBAAiB,yBAsB7B,CAAC"}
@@ -1,2 +1 @@
1
- "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import{PlusIcon as n}from"lucide-react";import r from"next/dynamic";import i from"react";import{Button as a}from"@vitnode/core/components/ui/button";import{Dialog as o,DialogContent as s,DialogDescription as c,DialogHeader as l,DialogTitle as u,DialogTrigger as d}from"@vitnode/core/components/ui/dialog";import{Loader as f}from"@vitnode/core/components/ui/loader";import{useTranslations as p}from"next-intl";const m=r(async()=>import(`./create-edit/create-edit.js`).then(e=>({default:e.CreateEditActionPostsAdmin}))),h=()=>{let r=p(`@vitnode/blog.admin.posts.create`);return t(o,{children:[t(d,{render:e(a,{}),children:[e(n,{}),r(`title`)]}),t(s,{children:[t(l,{children:[e(u,{children:r(`title`)}),e(c,{children:r(`desc`)})]}),e(i.Suspense,{fallback:e(f,{}),children:e(m,{})})]})]})};export{h as ActionsPostsAdmin};
2
- //# sourceMappingURL=actions.js.map
1
+ "use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";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{PlusIcon}from"lucide-react";import{useTranslations}from"next-intl";import dynamic from"next/dynamic";import React from"react";const CreateEditActionPostsAdmin=dynamic(async()=>import("./create-edit/create-edit.js").then(module=>({default:module.CreateEditActionPostsAdmin})));export const ActionsPostsAdmin=()=>{const t=useTranslations("@vitnode/blog.admin.posts.create");return _jsxs(Dialog,{children:[_jsxs(DialogTrigger,{render:_jsx(Button,{}),children:[_jsx(PlusIcon,{}),t("title")]}),_jsxs(DialogContent,{children:[_jsxs(DialogHeader,{children:[_jsx(DialogTitle,{children:t("title")}),_jsx(DialogDescription,{children:t("desc")})]}),_jsx(React.Suspense,{fallback:_jsx(Loader,{}),children:_jsx(CreateEditActionPostsAdmin,{})})]})]})};
@@ -1,11 +1,9 @@
1
- import { zodPostSchema } from "../../../../../api/modules/posts/routes/get.route.js";
1
+ import React from "react";
2
2
  import { z } from "zod";
3
- //#region src/views/admin/posts/actions/create-edit/create-edit.d.ts
4
- declare const CreateEditActionPostsAdmin: ({ data }: {
5
- data?: z.infer<typeof zodPostSchema> & {
6
- id?: number;
7
- };
8
- }) => import("react").JSX.Element;
9
- //#endregion
10
- export { CreateEditActionPostsAdmin };
3
+ import type { zodPostSchema } from "../../../../../api/modules/posts/routes/get.route";
4
+ export declare const CreateEditActionPostsAdmin: ({ data, }: {
5
+ data?: z.infer<typeof zodPostSchema> & {
6
+ id?: number;
7
+ };
8
+ }) => React.JSX.Element;
11
9
  //# sourceMappingURL=create-edit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-edit.d.ts","names":[],"sources":["../../../../../../../src/views/admin/posts/actions/create-edit/create-edit.tsx"],"mappings":";;;cAoBa,+BAA8B;EAGzC,OAAO,EAAE,aAAa;IAAmB;;sBAC1C,IAAA"}
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,2 +1 @@
1
- import{categoriesModule as e}from"../../../../../api/modules/categories/categories.module.js";import{createMutationApi as t,editMutationApi as n}from"./mutation-api.js";import{z as r}from"zod";import{jsx as i}from"react/jsx-runtime";import{useDialog as a}from"@vitnode/core/components/ui/dialog";import{useTranslations as o}from"next-intl";import{toast as s}from"sonner";import{AutoForm as c}from"@vitnode/core/components/form/auto-form";import{AutoFormInput as l}from"@vitnode/core/components/form/fields/input";import{usePathname as u,useRouter as d}from"@vitnode/core/lib/navigation";import{AutoFormCombobox as f}from"@vitnode/core/components/form/fields/combobox";import{AutoFormTextarea as p}from"@vitnode/core/components/form/fields/textarea";import{fetcherClient as m}from"@vitnode/core/lib/fetcher-client";const h=({data:h})=>{let g=o(`@vitnode/blog.admin.posts`),_=o(`core.global.errors`),{setOpen:v}=a(),{push:y}=d(),b=u();return i(c,{fields:[{id:`title`,component:e=>i(l,{label:g(`create.form.title.label`),...e})},{id:`categoryId`,component:t=>i(f,{fetchData:async({search:t})=>(await(await m(e,{path:`/`,method:`get`,module:`categories`,args:{query:{search:t}}})).json()).edges.map(e=>({label:e.title,value:e.id.toString()})),id:`categoryId`,label:g(`create.form.category`),...t})},{id:`content`,component:e=>i(p,{label:g(`create.form.content`),rows:10,...e})}],formSchema:r.object({title:r.string().min(3,{message:_(`field_min_length`,{min:3})}).default(h?.title??``),content:r.string().default(h?.content??``),categoryId:r.object({value:r.string(),label:r.string()}).refine(e=>e.value!==``,{message:_(`field_required`)}).default(h?.category?{value:h.category.id.toString(),label:h.category.title}:{value:``,label:``})}),onSubmit:async(e,r)=>{let i=``;if(h?.id){let t=await n({id:h.id,...e,categoryId:parseInt(e.categoryId.value,10)});t?.error&&(i=t.error)}else{let n=await t({...e,categoryId:parseInt(e.categoryId.value,10)});n?.error&&(i=n.error)}if(i){if(i.includes(`already exists`)){r.setError(`title`,{type:`manual`,message:g(`create.form.title.already_exists`)});return}s.error(_(`title`),{description:_(`internal_server_error`)});return}v?.(!1),y(b)},submitButtonProps:{children:g(`${h?`edit`:`create`}.submit`)}})};export{h as CreateEditActionPostsAdmin};
2
- //# sourceMappingURL=create-edit.js.map
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,{})]})};
@@ -0,0 +1,11 @@
1
+ import type { z } from "zod";
2
+ import type { zodCreatePostSchema } from "../../../../../api/modules/admin/posts/routes/create.route";
3
+ export declare const createMutationApi: (body: z.infer<typeof zodCreatePostSchema>) => Promise<{
4
+ error: string;
5
+ } | undefined>;
6
+ export declare const editMutationApi: ({ id, ...body }: z.infer<typeof zodCreatePostSchema> & {
7
+ id: number;
8
+ }) => Promise<{
9
+ error: string;
10
+ } | undefined>;
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"}
@@ -0,0 +1 @@
1
+ "use server";import{fetcher}from"@vitnode/core/lib/fetcher";import{revalidatePath}from"next/cache";import{postsAdminModule}from"../../../../../api/modules/admin/posts/posts.admin.module.js";export const createMutationApi=async body=>{const res=await fetcher(postsAdminModule,{prefixPath:"/admin",method:"post",module:"posts",path:"/",args:{body}});if(res.status!==201){return{error:await res.text()}}revalidatePath("/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts","page")};export const editMutationApi=async({id,...body})=>{const res=await fetcher(postsAdminModule,{prefixPath:"/admin",method:"put",module:"posts",path:"/{id}",args:{params:{id},body}});if(res.status!==200){return{error:await res.text()}}revalidatePath("/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts","page")};
@@ -1,8 +1,5 @@
1
- //#region src/views/admin/posts/table/actions/delete/delete-action.d.ts
2
- declare const DeleteAction: ({ title, id }: {
3
- id: number;
4
- title: string;
1
+ export declare const DeleteAction: ({ title, id }: {
2
+ id: number;
3
+ title: string;
5
4
  }) => import("react").JSX.Element | null;
6
- //#endregion
7
- export { DeleteAction };
8
5
  //# sourceMappingURL=delete-action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-action.d.ts","names":[],"sources":["../../../../../../../../src/views/admin/posts/table/actions/delete/delete-action.tsx"],"mappings":";cAmBa,iBAAgB,OAAA;EAAiB;EAAY;sBAAe,IAAA"}
1
+ {"version":3,"file":"delete-action.d.ts","sourceRoot":"","sources":["../../../../../../../../src/views/admin/posts/table/actions/delete/delete-action.tsx"],"names":[],"mappings":"AAmBA,eAAO,MAAM,YAAY,GAAI,eAAe;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,uCAmDxE,CAAC"}
@@ -1,2 +1 @@
1
- "use client";import{CONFIG_PLUGIN as e}from"../../../../../../const.js";import{mutationApi as t}from"./mutation-api.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{Trash2Icon as i}from"lucide-react";import{Button as a}from"@vitnode/core/components/ui/button";import{useTranslations as o}from"next-intl";import{ConfirmActionAlertDialog as s}from"@vitnode/core/components/confirm-action/confirm-action-alert-dialog";import{useAdminStaffPermission as c}from"@vitnode/core/components/staff-permission/provider";import{Tooltip as l,TooltipContent as u,TooltipProvider as d,TooltipTrigger as f}from"@vitnode/core/components/ui/tooltip";import{toast as p}from"sonner";const m=({title:m,id:h})=>{let g=o(`@vitnode/blog.admin.posts.delete`),_=o(`core.global`);return c({plugin:e.pluginId,module:`posts`,permission:`can_delete`})?n(d,{children:r(l,{children:[n(s,{description:g.rich(`desc`,{title:()=>n(`span`,{className:`text-foreground font-bold`,children:m})}),onSubmit:async({onClose:e})=>{if((await t(h))?.error){p.error(_(`errors.title`),{description:_(`errors.internal_server_error`)});return}p.success(g(`success`),{description:m}),e()},textSubmit:g(`confirm`),title:g(`title`),children:n(f,{render:n(a,{"aria-label":g(`title`),size:`icon`,variant:`destructive`,children:n(i,{className:`size-4`})})})}),n(u,{children:g(`title`)})]})}):null};export{m as DeleteAction};
2
- //# sourceMappingURL=delete-action.js.map
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")})]})})};
@@ -0,0 +1,4 @@
1
+ export declare const mutationApi: (id: number) => Promise<{
2
+ error: string;
3
+ } | undefined>;
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"}
@@ -0,0 +1 @@
1
+ "use server";import{fetcher}from"@vitnode/core/lib/fetcher";import{revalidatePath}from"next/cache";import{postsAdminModule}from"../../../../../../api/modules/admin/posts/posts.admin.module.js";export const mutationApi=async id=>{const res=await fetcher(postsAdminModule,{prefixPath:"/admin",method:"delete",path:"/{id}",module:"posts",args:{params:{id}}});if(!res.ok){return{error:await res.text()}}revalidatePath("/[locale]/admin/(auth)/(plugins)/(vitnode-blog)/blog/posts","page")};
@@ -1,12 +1,9 @@
1
- import { zodPostSchema } from "../../../../../api/modules/posts/routes/get.route.js";
2
1
  import React from "react";
3
- //#region src/views/admin/posts/table/actions/edit-action.d.ts
4
2
  declare const CreateEditActionPostsAdmin: React.ComponentType<{
5
- data?: import("zod").infer<typeof zodPostSchema> & {
6
- id?: number;
7
- };
3
+ data?: import("zod").infer<typeof import("../../../../../api/modules/posts/routes/get.route").zodPostSchema> & {
4
+ id?: number;
5
+ };
8
6
  }>;
9
- declare const EditAction: (props: Required<React.ComponentProps<typeof CreateEditActionPostsAdmin>>) => React.JSX.Element | null;
10
- //#endregion
11
- export { EditAction };
7
+ export declare const EditAction: (props: Required<React.ComponentProps<typeof CreateEditActionPostsAdmin>>) => React.JSX.Element | null;
8
+ export {};
12
9
  //# sourceMappingURL=edit-action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"edit-action.d.ts","names":[],"sources":["../../../../../../../src/views/admin/posts/table/actions/edit-action.tsx"],"mappings":";;;cA0BM,4BAA0B,MAAA;oCAA1B;;;;cAMO,aACX,OAAO,SAAS,MAAM,sBAAsB,iCAA4B,MAAA,IAAA"}
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,2 +1 @@
1
- "use client";import{CONFIG_PLUGIN as e}from"../../../../../const.js";import{jsx as t,jsxs as n}from"react/jsx-runtime";import{PencilIcon as r}from"lucide-react";import i from"next/dynamic";import a from"react";import{Button as o}from"@vitnode/core/components/ui/button";import{Dialog as s,DialogContent as c,DialogDescription as l,DialogHeader as u,DialogTitle as d,DialogTrigger as f}from"@vitnode/core/components/ui/dialog";import{Loader as p}from"@vitnode/core/components/ui/loader";import{useTranslations as m}from"next-intl";import{useAdminStaffPermission as h}from"@vitnode/core/components/staff-permission/provider";import{Tooltip as g,TooltipContent as _,TooltipProvider as v,TooltipTrigger as y}from"@vitnode/core/components/ui/tooltip";const b=i(async()=>import(`../../actions/create-edit/create-edit.js`).then(e=>({default:e.CreateEditActionPostsAdmin}))),x=i=>{let x=m(`@vitnode/blog.admin.posts.edit`);return h({plugin:e.pluginId,module:`posts`,permission:`can_edit`})?n(s,{children:[t(v,{children:n(g,{children:[t(y,{render:t(f,{render:t(o,{"aria-label":x(`title`),size:`icon`,variant:`ghost`}),children:t(r,{})})}),t(_,{children:x(`title`)})]})}),n(c,{children:[n(u,{children:[t(d,{children:x(`title`)}),t(l,{children:i.data.title})]}),t(a.Suspense,{fallback:t(p,{}),children:t(b,{...i})})]})]}):null};export{x as EditAction};
2
- //# sourceMappingURL=edit-action.js.map
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,7 +1,4 @@
1
- //#region src/views/admin/posts/table/posts-admin-view.d.ts
2
- declare const PostsAdminView: ({ searchParams }: {
3
- searchParams: Promise<Record<string, string | string[] | undefined>>;
1
+ export declare const PostsAdminView: ({ searchParams, }: {
2
+ searchParams: Promise<Record<string, string | string[] | undefined>>;
4
3
  }) => Promise<import("react").JSX.Element>;
5
- //#endregion
6
- export { PostsAdminView };
7
4
  //# sourceMappingURL=posts-admin-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"posts-admin-view.d.ts","names":[],"sources":["../../../../../../src/views/admin/posts/table/posts-admin-view.tsx"],"mappings":";cAUa,mBAAwB;EAGnC,cAAc,QAAQ;MACvB,wBAAA,IAAA"}
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,2 +1 @@
1
- import{postsModule as e}from"../../../../api/modules/posts/posts.module.js";import{DeleteAction as t}from"./actions/delete/delete-action.js";import{EditAction as n}from"./actions/edit-action.js";import{Fragment as r,jsx as i,jsxs as a}from"react/jsx-runtime";import{DataTable as o}from"@vitnode/core/components/table/data-table";import{getTranslations as s}from"next-intl/server";import{DateFormat as c}from"@vitnode/core/components/date-format";import{fetcher as l}from"@vitnode/core/lib/fetcher";const u=async({searchParams:u})=>{let d=await s(`@vitnode/blog.admin.posts.table`),f=await(await l(e,{path:`/`,method:`get`,module:`posts`,args:{query:await u},withPagination:!0,options:{cache:`force-cache`}})).json();return i(o,{columns:[{accessorKey:`id`,header:`ID`,className:`w-24`},{accessorKey:`title`,header:d(`title`)},{accessorKey:`category`,header:d(`category`),className:`w-48`,cell:({row:e})=>e.category.title},{accessorKey:`updatedAt`,header:d(`updated_at`),className:`w-48`,cell:({row:e})=>i(c,{date:e.updatedAt})},{id:`actions`,header:``,align:`right`,className:`w-10`,cell:({row:e})=>a(r,{children:[i(n,{data:e}),i(t,{...e})]})}],edges:f.edges.map(e=>({...e})),id:`posts-table`,order:{columns:[`createdAt`,`updatedAt`],defaultOrder:{column:`createdAt`,order:`desc`}},pageInfo:f.pageInfo})};export{u as PostsAdminView};
2
- //# sourceMappingURL=posts-admin-view.js.map
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.76",
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,34 +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.76"
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",
48
+ "@swc/cli": "^0.8.1",
49
+ "@swc/core": "^1.15.46",
47
50
  "@types/react": "^19.2.17",
48
51
  "@types/react-dom": "^19.2.3",
49
- "concurrently": "^10.0.3",
50
- "eslint": "^10.5.0",
51
- "tsdown": "^0.22.4",
52
+ "eslint": "^10.7.0",
53
+ "tsc-alias": "^1.9.1",
52
54
  "typescript": "^6.0.3",
53
- "@vitnode/config": "1.2.0-canary.76"
55
+ "@vitnode/config": "1.2.0-canary.77"
54
56
  },
55
57
  "scripts": {
56
- "build:plugins": "tsdown",
57
- "dev": "concurrently \"tsdown --watch\" \"vitnode plugin --w\"",
58
+ "build:plugins": "vitnode build",
59
+ "dev": "vitnode dev",
58
60
  "dev:email": "email dev --dir src/emails",
59
61
  "lint": "eslint .",
60
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
+ }