From 1cfaef76838b02694d58096bfbe93061eb27518c Mon Sep 17 00:00:00 2001 From: Jordi Enric Date: Sat, 2 Nov 2024 17:54:30 +0100 Subject: [PATCH] wip --- apps/web/app/api/public/[...route]/route.ts | 2 +- apps/web/package.json | 3 + .../src/components/Editor/Editor.queries.ts | 4 +- .../src/components/Editor/EditorSettings.tsx | 129 +-- .../web/src/components/Editor/ZendoEditor.tsx | 322 +++++-- .../Editor/editor-category-picker.tsx | 93 ++ apps/web/src/components/ui/calendar.tsx | 65 ++ apps/web/src/components/ui/collapsible.tsx | 9 + apps/web/src/components/ui/dropdown-menu.tsx | 2 +- .../src/components/ui/editor-date-input.tsx | 128 +++ .../src/pages/blogs/[blogId]/categories.tsx | 60 +- .../pages/blogs/[blogId]/post/[postSlug].tsx | 9 +- apps/web/src/queries/tags.ts | 9 +- apps/web/src/types/supabase.ts | 855 ------------------ package-lock.json | 176 ++++ 15 files changed, 788 insertions(+), 1078 deletions(-) create mode 100644 apps/web/src/components/Editor/editor-category-picker.tsx create mode 100644 apps/web/src/components/ui/calendar.tsx create mode 100644 apps/web/src/components/ui/collapsible.tsx create mode 100644 apps/web/src/components/ui/editor-date-input.tsx diff --git a/apps/web/app/api/public/[...route]/route.ts b/apps/web/app/api/public/[...route]/route.ts index caafbee..69335ba 100644 --- a/apps/web/app/api/public/[...route]/route.ts +++ b/apps/web/app/api/public/[...route]/route.ts @@ -101,7 +101,7 @@ app.get(tags.path, async (c) => { } const { data: tags, error } = await supabase - .from("blog_tags") + .from("tags") .select("name, slug") .eq("blog_id", blogId); diff --git a/apps/web/package.json b/apps/web/package.json index e57d4bb..4c2b01c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -27,6 +27,7 @@ "@next/mdx": "^14.2.15", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-checkbox": "^1.0.4", + "@radix-ui/react-collapsible": "^1.1.1", "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-label": "^2.0.2", @@ -79,6 +80,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "cmdk": "^0.2.1", + "date-fns": "^3.6.0", "dotenv": "^16.4.4", "embla-carousel-react": "^8.0.0", "formidable": "^3.5.1", @@ -98,6 +100,7 @@ "react": "18.2.0", "react-confetti": "^6.1.0", "react-datetime-picker": "^5.6.0", + "react-day-picker": "^8.10.1", "react-dom": "18.2.0", "react-hook-form": "^7.43.9", "react-icons": "^4.8.0", diff --git a/apps/web/src/components/Editor/Editor.queries.ts b/apps/web/src/components/Editor/Editor.queries.ts index eaa2047..f4a6805 100644 --- a/apps/web/src/components/Editor/Editor.queries.ts +++ b/apps/web/src/components/Editor/Editor.queries.ts @@ -13,7 +13,7 @@ export const useBlogTags = ({ blogId }: UseTags) => { queryKey: ["tags"], queryFn: async () => { const { data, error } = await sb - .from("blog_tags") + .from("tags") .select("*") .eq("blog_id", blogId); if (error) { @@ -37,7 +37,7 @@ export const useCreateBlogTag = () => { slug: string; blog_id: string; }) => { - const { data, error } = await sb.from("blog_tags").insert(category); + const { data, error } = await sb.from("tags").insert(category); if (error) { throw error; } diff --git a/apps/web/src/components/Editor/EditorSettings.tsx b/apps/web/src/components/Editor/EditorSettings.tsx index 51fd3ff..04d4bed 100644 --- a/apps/web/src/components/Editor/EditorSettings.tsx +++ b/apps/web/src/components/Editor/EditorSettings.tsx @@ -21,6 +21,7 @@ import { useRouter } from "next/router"; import { Label } from "../ui/label"; import Spinner from "../Spinner"; import { IS_DEV } from "@/lib/constants"; +import { EditorDateInput } from "../ui/editor-date-input"; type Tag = { id: string; @@ -90,20 +91,20 @@ const EditorSettings = (props: Props) => { ).toISOString(); } - useEffect(() => { - try { - const date = publishedAtToDate(); + // useEffect(() => { + // try { + // const date = publishedAtToDate(); - props.onChange({ - tags: selectedTags, - metadata, - category_id: props.category_id || null, - published_at: date, - }); - } catch (error) { - toast.error("Invalid date"); - } - }, [publishedAt]); + // props.onChange({ + // tags: selectedTags, + // metadata, + // category_id: props.category_id || null, + // published_at: date, + // }); + // } catch (error) { + // toast.error("Invalid date"); + // } + // }, [publishedAt]); function addMetadata() { setMetadata([...metadata, { key: "", value: "" }]); @@ -240,107 +241,7 @@ const EditorSettings = (props: Props) => {

Published date

-
-
- -
- { - setPublishedAt({ - ...publishedAt, - day: parseInt(e.target.value), - }); - }} - /> - - { - setPublishedAt({ - ...publishedAt, - year: parseInt(e.target.value), - }); - }} - /> -
-
-
- -
- { - setPublishedAt({ - ...publishedAt, - hour: parseInt(e.target.value), - }); - }} - /> - { - setPublishedAt({ - ...publishedAt, - minute: parseInt(e.target.value), - }); - }} - /> -
-
-
+
{IS_DEV && ( diff --git a/apps/web/src/components/Editor/ZendoEditor.tsx b/apps/web/src/components/Editor/ZendoEditor.tsx index 9f8f4f3..13f3ccb 100644 --- a/apps/web/src/components/Editor/ZendoEditor.tsx +++ b/apps/web/src/components/Editor/ZendoEditor.tsx @@ -1,8 +1,19 @@ /* eslint-disable @next/next/no-img-element */ import { EditorContent, useEditor } from "@tiptap/react"; +import { motion, AnimatePresence } from "framer-motion"; import React, { useEffect, useState } from "react"; import { Button } from "../ui/button"; -import { SaveIcon, Settings2, List, CornerUpLeft, Tag, X } from "lucide-react"; +import { + SaveIcon, + Settings2, + List, + CornerUpLeft, + Tag, + X, + ChevronUp, + Copy, + Info, +} from "lucide-react"; import { z } from "zod"; import { useForm } from "react-hook-form"; import { ImagePicker } from "../Images/ImagePicker"; @@ -23,6 +34,7 @@ import { DropdownMenuTrigger, DropdownMenuSeparator, } from "../ui/dropdown-menu"; +import { Calendar } from "../ui/calendar"; import { usePostsQuery } from "@/queries/posts"; import { IoClose } from "react-icons/io5"; import { Sheet, SheetContent, SheetTrigger } from "../ui/sheet"; @@ -44,6 +56,14 @@ import { Dialog, DialogContent } from "../ui/dialog"; import { getHostedBlogUrl } from "@/utils/get-hosted-blog-url"; import { useCategories } from "@/queries/categories"; import Image from "next/image"; +import { EditorDateInput } from "../ui/editor-date-input"; +import { EditorCategoryPicker } from "./editor-category-picker"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "../ui/tooltip"; const formSchema = z.object({ title: z.string(), @@ -101,13 +121,11 @@ export const ZendoEditor = (props: Props) => { const [published, setPublished] = React.useState( props.post?.published || false ); - const { data: categories, isLoading: categoriesLoading } = + const { data: categories, isLoading: isCategoriesLoading } = useCategories(blogId); - const selectedCategory = categories?.find( - (c) => c.id === getValues("category_id") - ); const [metadata, setMetadata] = React.useState(props.post?.metadata || []); + console.log(props.tags); const [tags, setTags] = React.useState(props.tags || []); const [publishedAt, setPublishedAt] = React.useState( props.post?.published_at || "" @@ -290,6 +308,10 @@ export const ZendoEditor = (props: Props) => { titleEl.style.height = titleEl?.scrollHeight + "px"; }, [title]); + const [showPublishedAtDropdown, setShowPublishedAtDropdown] = useState(false); + + const [showPropertyList, setShowPropertyList] = useState(true); + return (
{ Settings - + { )}
-
- +
{ >