From 49ccc4d973d723bac0bc51f7a69c21d4d2d1e86d Mon Sep 17 00:00:00 2001 From: ditiqi Date: Wed, 22 Jan 2025 23:32:49 +0800 Subject: [PATCH] add 2025-0122-2332 --- apps/server/src/models/post/post.router.ts | 5 ++ .../models/post/detail/PostDetail.tsx | 12 ++++ .../post/detail/context/PostDetailContext.tsx | 57 ++++++++----------- .../post/detail/layout/PostDetailLayout.tsx | 12 ++++ 4 files changed, 53 insertions(+), 33 deletions(-) create mode 100644 apps/web/src/components/models/post/detail/PostDetail.tsx create mode 100644 apps/web/src/components/models/post/detail/layout/PostDetailLayout.tsx diff --git a/apps/server/src/models/post/post.router.ts b/apps/server/src/models/post/post.router.ts index 3181ae7..7766164 100755 --- a/apps/server/src/models/post/post.router.ts +++ b/apps/server/src/models/post/post.router.ts @@ -68,6 +68,11 @@ export class PostRouter { const { staff } = ctx; return await this.postService.findById(input.id, input.args); }), + findFirst: this.trpc.procedure + .input(PostFindFirstArgsSchema) // Assuming StaffMethodSchema.findMany is the Zod schema for finding staffs by keyword + .query(async ({ input }) => { + return await this.postService.findFirst(input); + }), deleteMany: this.trpc.protectProcedure .input(PostDeleteManyArgsSchema) .mutation(async ({ input }) => { diff --git a/apps/web/src/components/models/post/detail/PostDetail.tsx b/apps/web/src/components/models/post/detail/PostDetail.tsx new file mode 100644 index 0000000..74eea24 --- /dev/null +++ b/apps/web/src/components/models/post/detail/PostDetail.tsx @@ -0,0 +1,12 @@ +import { PostDetailProvider } from "./context/PostDetailContext"; +import PostDetailLayout from "./layout/PostDetailLayout"; + +export default function PostDetail({ id }: { id?: string }) { + return ( + <> + + + + + ); +} diff --git a/apps/web/src/components/models/post/detail/context/PostDetailContext.tsx b/apps/web/src/components/models/post/detail/context/PostDetailContext.tsx index 974d390..0632ef4 100644 --- a/apps/web/src/components/models/post/detail/context/PostDetailContext.tsx +++ b/apps/web/src/components/models/post/detail/context/PostDetailContext.tsx @@ -1,54 +1,45 @@ import { api, usePost } from "@nice/client"; -import {} from "@nice/common"; +import { Post } from "@nice/common"; import React, { createContext, ReactNode, useState } from "react"; import { string } from "zod"; interface PostDetailContextType { editId?: string; // 添加 editId - course?: CourseDto; - selectedLectureId?: string | undefined; - setSelectedLectureId?: React.Dispatch>; + post?: Post; isLoading?: boolean; - isHeaderVisible: boolean; // 新增 - setIsHeaderVisible: (visible: boolean) => void; // 新增 } -interface CourseFormProviderProps { +interface PostFormProviderProps { children: ReactNode; editId?: string; // 添加 editId 参数 } -export const CourseDetailContext = - createContext(null); -export function CourseDetailProvider({ +export const PostDetailContext = createContext( + null +); +export function PostDetailProvider({ children, editId, -}: CourseFormProviderProps) { - const { data: course, isLoading }: { data: CourseDto; isLoading: boolean } = - api.course.findFirst.useQuery( - { - where: { id: editId }, - include: { - sections: { include: { lectures: true } }, - enrollments: true, - }, - }, - { enabled: Boolean(editId) } - ); - const [selectedLectureId, setSelectedLectureId] = useState< - string | undefined - >(undefined); - const [isHeaderVisible, setIsHeaderVisible] = useState(true); // 新增 +}: PostFormProviderProps) { + const { data: post, isLoading }: { data: Post; isLoading: boolean } = ( + api.post.findFirst as any + ).useQuery( + { + where: { id: editId }, + }, + { enabled: Boolean(editId) } + ); + // const {}:{} =( + // api.post.fin as any + // ) + return ( - {children} - + ); } diff --git a/apps/web/src/components/models/post/detail/layout/PostDetailLayout.tsx b/apps/web/src/components/models/post/detail/layout/PostDetailLayout.tsx new file mode 100644 index 0000000..d762aa9 --- /dev/null +++ b/apps/web/src/components/models/post/detail/layout/PostDetailLayout.tsx @@ -0,0 +1,12 @@ +import { motion } from "framer-motion"; +import { useContext } from "react"; +import { PostDetailContext } from "../context/PostDetailContext"; + +export default function PostDetailLayout() { + const { post } = useContext(PostDetailContext); + + return
+ + +
; +}