@vitnode/blog 1.2.0-canary.76 → 1.2.0-canary.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/api/lib/categories-language.d.ts +10 -0
- package/dist/src/api/lib/categories-language.d.ts.map +1 -0
- package/dist/src/api/lib/categories-language.js +1 -0
- package/dist/src/api/lib/events.d.ts +28 -0
- package/dist/src/api/lib/events.d.ts.map +1 -0
- package/dist/src/api/lib/events.js +1 -0
- package/dist/src/api/lib/posts-language.d.ts +17 -0
- package/dist/src/api/lib/posts-language.d.ts.map +1 -0
- package/dist/src/api/lib/posts-language.js +1 -0
- package/dist/src/api/lib/search.d.ts +13 -0
- package/dist/src/api/lib/search.d.ts.map +1 -0
- package/dist/src/api/lib/search.js +1 -0
- package/dist/src/api/modules/admin/admin.module.d.ts +197 -180
- package/dist/src/api/modules/admin/admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/admin.module.js +1 -2
- package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts +83 -80
- package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/categories/categories.admin.module.js +1 -2
- package/dist/src/api/modules/admin/categories/routes/create.route.d.ts +38 -34
- package/dist/src/api/modules/admin/categories/routes/create.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/categories/routes/create.route.js +1 -2
- package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts +15 -18
- package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/categories/routes/delete.route.js +1 -2
- package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts +38 -38
- package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/categories/routes/edit.route.js +1 -2
- package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts +104 -93
- package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/posts/posts.admin.module.js +1 -2
- package/dist/src/api/modules/admin/posts/routes/create.route.d.ts +58 -44
- package/dist/src/api/modules/admin/posts/routes/create.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/posts/routes/create.route.js +1 -2
- package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts +15 -18
- package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/posts/routes/delete.route.js +1 -2
- package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts +47 -43
- package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/posts/routes/edit.route.js +1 -2
- package/dist/src/api/modules/categories/categories.module.d.ts +65 -64
- package/dist/src/api/modules/categories/categories.module.d.ts.map +1 -1
- package/dist/src/api/modules/categories/categories.module.js +1 -2
- package/dist/src/api/modules/categories/routes/get.route.d.ts +56 -45
- package/dist/src/api/modules/categories/routes/get.route.d.ts.map +1 -1
- package/dist/src/api/modules/categories/routes/get.route.js +1 -2
- package/dist/src/api/modules/categories/test.route.d.ts +20 -23
- package/dist/src/api/modules/categories/test.route.d.ts.map +1 -1
- package/dist/src/api/modules/categories/test.route.js +1 -2
- package/dist/src/api/modules/posts/posts.module.d.ts +68 -54
- package/dist/src/api/modules/posts/posts.module.d.ts.map +1 -1
- package/dist/src/api/modules/posts/posts.module.js +1 -2
- package/dist/src/api/modules/posts/routes/get.route.d.ts +97 -66
- package/dist/src/api/modules/posts/routes/get.route.d.ts.map +1 -1
- package/dist/src/api/modules/posts/routes/get.route.js +1 -2
- package/dist/src/config.api.d.ts +1 -4
- package/dist/src/config.api.d.ts.map +1 -1
- package/dist/src/config.api.js +1 -2
- package/dist/src/config.d.ts +1 -4
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +1 -2
- package/dist/src/const.d.ts +2 -5
- package/dist/src/const.d.ts.map +1 -1
- package/dist/src/const.js +1 -2
- package/dist/src/database/categories.d.ts +76 -98
- package/dist/src/database/categories.d.ts.map +1 -1
- package/dist/src/database/categories.js +1 -2
- package/dist/src/database/index.d.ts +4 -4
- package/dist/src/database/index.d.ts.map +1 -0
- package/dist/src/database/index.js +1 -1
- package/dist/src/database/posts.d.ts +91 -132
- package/dist/src/database/posts.d.ts.map +1 -1
- package/dist/src/database/posts.js +1 -2
- package/dist/src/database/relations.d.ts +4 -7
- package/dist/src/database/relations.d.ts.map +1 -1
- package/dist/src/database/relations.js +1 -2
- package/dist/src/emails/test-template.d.ts +18 -20
- package/dist/src/emails/test-template.d.ts.map +1 -1
- package/dist/src/emails/test-template.js +1 -2
- package/dist/src/globals.css +44 -0
- package/dist/src/locales/en.json +92 -0
- package/dist/src/locales/index.d.ts +4 -0
- package/dist/src/locales/index.d.ts.map +1 -0
- package/dist/src/locales/index.js +1 -0
- package/dist/src/routes/admin/blog/categories/page.d.ts +5 -7
- package/dist/src/routes/admin/blog/categories/page.d.ts.map +1 -1
- package/dist/src/routes/admin/blog/categories/page.js +1 -2
- package/dist/src/routes/admin/blog/posts/page.d.ts +5 -7
- package/dist/src/routes/admin/blog/posts/page.d.ts.map +1 -1
- package/dist/src/routes/admin/blog/posts/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.js +1 -0
- package/dist/src/views/admin/categories/actions/actions.d.ts +1 -4
- package/dist/src/views/admin/categories/actions/actions.d.ts.map +1 -1
- package/dist/src/views/admin/categories/actions/actions.js +1 -2
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts +5 -8
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts.map +1 -1
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.js +1 -2
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts +11 -0
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.js +1 -0
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.d.ts +3 -6
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.d.ts.map +1 -1
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.js +1 -2
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts +4 -0
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.js +1 -0
- package/dist/src/views/admin/categories/table/actions/edit-action.d.ts +5 -8
- package/dist/src/views/admin/categories/table/actions/edit-action.d.ts.map +1 -1
- package/dist/src/views/admin/categories/table/actions/edit-action.js +1 -2
- package/dist/src/views/admin/categories/table/categories-admin-view.d.ts +2 -5
- package/dist/src/views/admin/categories/table/categories-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/categories/table/categories-admin-view.js +1 -2
- package/dist/src/views/admin/posts/actions/actions.d.ts +1 -4
- package/dist/src/views/admin/posts/actions/actions.d.ts.map +1 -1
- package/dist/src/views/admin/posts/actions/actions.js +1 -2
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts +7 -9
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts.map +1 -1
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.js +1 -2
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts +10 -0
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts.map +1 -0
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.js +1 -0
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts +11 -0
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.js +1 -0
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.d.ts +3 -6
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.d.ts.map +1 -1
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.js +1 -2
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts +4 -0
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.js +1 -0
- package/dist/src/views/admin/posts/table/actions/edit-action.d.ts +5 -8
- package/dist/src/views/admin/posts/table/actions/edit-action.d.ts.map +1 -1
- package/dist/src/views/admin/posts/table/actions/edit-action.js +1 -2
- package/dist/src/views/admin/posts/table/posts-admin-view.d.ts +2 -5
- package/dist/src/views/admin/posts/table/posts-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/posts/table/posts-admin-view.js +1 -2
- package/package.json +20 -18
- package/src/locales/en.json +17 -5
- package/src/locales/index.ts +11 -0
- package/src/routes/breadcrumb/admin/blog/categories/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/blog/posts/page.tsx +5 -0
- package/dist/src/api/modules/admin/admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/categories/categories.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/create.route.js.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/delete.route.js.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/edit.route.js.map +0 -1
- package/dist/src/api/modules/admin/posts/posts.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/create.route.js.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/delete.route.js.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/edit.route.js.map +0 -1
- package/dist/src/api/modules/categories/categories.module.js.map +0 -1
- package/dist/src/api/modules/categories/routes/get.route.js.map +0 -1
- package/dist/src/api/modules/categories/test.route.js.map +0 -1
- package/dist/src/api/modules/posts/posts.module.js.map +0 -1
- package/dist/src/api/modules/posts/routes/get.route.js.map +0 -1
- package/dist/src/config.api.js.map +0 -1
- package/dist/src/config.js.map +0 -1
- package/dist/src/const.js.map +0 -1
- package/dist/src/database/categories.js.map +0 -1
- package/dist/src/database/posts.js.map +0 -1
- package/dist/src/database/relations.js.map +0 -1
- package/dist/src/emails/test-template.js.map +0 -1
- package/dist/src/routes/admin/blog/categories/page.js.map +0 -1
- package/dist/src/routes/admin/blog/posts/page.js.map +0 -1
- package/dist/src/views/admin/categories/actions/actions.js.map +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.js.map +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.d.ts +0 -14
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.js +0 -2
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.js.map +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.js.map +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.d.ts +0 -7
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.js +0 -2
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.js.map +0 -1
- package/dist/src/views/admin/categories/table/actions/edit-action.js.map +0 -1
- package/dist/src/views/admin/categories/table/categories-admin-view.js.map +0 -1
- package/dist/src/views/admin/posts/actions/actions.js.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.js.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.d.ts +0 -14
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.js +0 -2
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.js.map +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.js.map +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.d.ts +0 -7
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.js +0 -2
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.js.map +0 -1
- package/dist/src/views/admin/posts/table/actions/edit-action.js.map +0 -1
- package/dist/src/views/admin/posts/table/posts-admin-view.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-edit.d.ts","
|
|
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{
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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","
|
|
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{
|
|
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 @@
|
|
|
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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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","
|
|
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{
|
|
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
|
-
|
|
2
|
-
|
|
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","
|
|
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{
|
|
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
|
-
|
|
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","
|
|
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
|
|
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
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
|
|
4
|
-
declare const CreateEditActionPostsAdmin: ({ data }: {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}) =>
|
|
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","
|
|
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{
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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","
|
|
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{
|
|
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 @@
|
|
|
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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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","
|
|
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{
|
|
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
|
-
|
|
2
|
-
|
|
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","
|
|
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{
|
|
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.
|
|
3
|
+
"version": "1.2.0-canary.78",
|
|
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.
|
|
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.
|
|
34
|
-
"lucide-react": "^1.
|
|
35
|
-
"next": "16.3.0-preview.
|
|
36
|
-
"next-intl": "^4.13.
|
|
37
|
-
"react": "^19.2.
|
|
38
|
-
"react-dom": "^19.2.
|
|
39
|
-
"react-email": "^6.
|
|
40
|
-
"react-hook-form": "^7.
|
|
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.
|
|
44
|
+
"@vitnode/core": "1.2.0-canary.78"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
|
-
"@react-email/ui": "^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
|
-
"
|
|
50
|
-
"
|
|
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.
|
|
55
|
+
"@vitnode/config": "1.2.0-canary.78"
|
|
54
56
|
},
|
|
55
57
|
"scripts": {
|
|
56
|
-
"build:plugins": "
|
|
57
|
-
"dev": "
|
|
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"
|
package/src/locales/en.json
CHANGED
|
@@ -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;
|