fix an assorted set of issues, more info on linear

This commit is contained in:
Amruth Pillai
2023-11-22 22:50:21 +01:00
parent 4baecb22e9
commit 4687091ebd
7 changed files with 57 additions and 50 deletions

View File

@ -58,7 +58,7 @@ export const BuilderLayout = () => {
<motion.div <motion.div
layout layout
key={pageIndex} key={pageIndex}
initial={{ opacity: 0, x: -200 }} initial={{ opacity: 0, x: -200, y: 0 }}
animate={{ opacity: 1, x: 0, transition: { delay: pageIndex * 0.3 } }} animate={{ opacity: 1, x: 0, transition: { delay: pageIndex * 0.3 } }}
exit={{ opacity: 0, x: -200 }} exit={{ opacity: 0, x: -200 }}
> >

View File

@ -48,11 +48,7 @@ export const BuilderToolbar = () => {
const onCenterView = () => frameRef?.contentWindow?.postMessage({ type: "CENTER_VIEW" }, "*"); const onCenterView = () => frameRef?.contentWindow?.postMessage({ type: "CENTER_VIEW" }, "*");
return ( return (
<motion.div <motion.div className="fixed inset-x-0 bottom-0 mx-auto hidden py-6 text-center md:block">
initial={{ opacity: 0.5 }}
whileHover={{ opacity: 1 }}
className="fixed inset-x-0 bottom-0 mx-auto pb-4 pt-6 text-center md:block"
>
<div className="inline-flex items-center justify-center rounded-full bg-background px-4 shadow-xl"> <div className="inline-flex items-center justify-center rounded-full bg-background px-4 shadow-xl">
<Tooltip content={t`Undo`}> <Tooltip content={t`Undo`}>
<Button size="icon" variant="ghost" className="rounded-none" onClick={() => undo()}> <Button size="icon" variant="ghost" className="rounded-none" onClick={() => undo()}>

View File

@ -3,11 +3,11 @@ import { CSS } from "@dnd-kit/utilities";
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { CopySimple, DotsSixVertical, PencilSimple, TrashSimple } from "@phosphor-icons/react"; import { CopySimple, DotsSixVertical, PencilSimple, TrashSimple } from "@phosphor-icons/react";
import { import {
DropdownMenu, ContextMenu,
DropdownMenuCheckboxItem, ContextMenuCheckboxItem,
DropdownMenuContent, ContextMenuContent,
DropdownMenuItem, ContextMenuItem,
DropdownMenuTrigger, ContextMenuTrigger,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { cn } from "@reactive-resume/utils"; import { cn } from "@reactive-resume/utils";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
@ -68,9 +68,10 @@ export const SectionListItem = ({
</div> </div>
{/* List Item */} {/* List Item */}
<DropdownMenu> <ContextMenu>
<DropdownMenuTrigger asChild> <ContextMenuTrigger asChild>
<div <div
onClick={onUpdate}
className={cn( className={cn(
"flex-1 cursor-context-menu p-4 hover:bg-secondary-accent", "flex-1 cursor-context-menu p-4 hover:bg-secondary-accent",
!visible && "opacity-50", !visible && "opacity-50",
@ -79,25 +80,25 @@ export const SectionListItem = ({
<h4 className="font-medium leading-relaxed">{title}</h4> <h4 className="font-medium leading-relaxed">{title}</h4>
{description && <p className="text-xs leading-relaxed opacity-50">{description}</p>} {description && <p className="text-xs leading-relaxed opacity-50">{description}</p>}
</div> </div>
</DropdownMenuTrigger> </ContextMenuTrigger>
<DropdownMenuContent> <ContextMenuContent>
<DropdownMenuCheckboxItem checked={visible} onCheckedChange={onToggleVisibility}> <ContextMenuCheckboxItem checked={visible} onCheckedChange={onToggleVisibility}>
<span className="-ml-0.5">{t`Visible`}</span> <span className="-ml-0.5">{t`Visible`}</span>
</DropdownMenuCheckboxItem> </ContextMenuCheckboxItem>
<DropdownMenuItem onClick={onUpdate}> <ContextMenuItem onClick={onUpdate}>
<PencilSimple size={14} /> <PencilSimple size={14} />
<span className="ml-2">{t`Edit`}</span> <span className="ml-2">{t`Edit`}</span>
</DropdownMenuItem> </ContextMenuItem>
<DropdownMenuItem onClick={onDuplicate}> <ContextMenuItem onClick={onDuplicate}>
<CopySimple size={14} /> <CopySimple size={14} />
<span className="ml-2">{t`Copy`}</span> <span className="ml-2">{t`Copy`}</span>
</DropdownMenuItem> </ContextMenuItem>
<DropdownMenuItem className="text-error" onClick={onDelete}> <ContextMenuItem className="text-error" onClick={onDelete}>
<TrashSimple size={14} /> <TrashSimple size={14} />
<span className="ml-2">{t`Remove`}</span> <span className="ml-2">{t`Remove`}</span>
</DropdownMenuItem> </ContextMenuItem>
</DropdownMenuContent> </ContextMenuContent>
</DropdownMenu> </ContextMenu>
</div> </div>
</motion.section> </motion.section>
); );

View File

@ -238,14 +238,16 @@ export const LayoutSection = () => {
</p> </p>
{pageIndex !== 0 && ( {pageIndex !== 0 && (
<Button <Tooltip content={t`Remove Page`}>
size="icon" <Button
variant="ghost" size="icon"
className="h-8 w-8" variant="ghost"
onClick={() => onRemovePage(pageIndex)} className="h-8 w-8"
> onClick={() => onRemovePage(pageIndex)}
<TrashSimple size={12} /> >
</Button> <TrashSimple size={12} className="text-error" />
</Button>
</Tooltip>
)} )}
</div> </div>

View File

@ -33,7 +33,7 @@ import {
Input, Input,
Tooltip, Tooltip,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { generateRandomName, kebabCase } from "@reactive-resume/utils"; import { cn, generateRandomName, kebabCase } from "@reactive-resume/utils";
import { useEffect } from "react"; import { useEffect } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import { z } from "zod";
@ -235,24 +235,31 @@ export const ResumeDialog = () => {
<DialogFooter> <DialogFooter>
<div className="flex items-center"> <div className="flex items-center">
<Button type="submit" disabled={loading} className="rounded-r-none"> <Button
type="submit"
disabled={loading}
className={cn(isCreate && "rounded-r-none")}
>
{isCreate && t`Create`} {isCreate && t`Create`}
{isUpdate && t`Save Changes`} {isUpdate && t`Save Changes`}
{isDuplicate && t`Duplicate`} {isDuplicate && t`Duplicate`}
</Button> </Button>
<DropdownMenu>
<DropdownMenuTrigger asChild> {isCreate && (
<Button type="button" size="icon" className="rounded-l-none border-l"> <DropdownMenu>
<CaretDown /> <DropdownMenuTrigger asChild>
</Button> <Button type="button" size="icon" className="rounded-l-none border-l">
</DropdownMenuTrigger> <CaretDown />
<DropdownMenuContent side="right" align="center"> </Button>
<DropdownMenuItem onClick={onCreateSample}> </DropdownMenuTrigger>
<Flask className="mr-2" /> <DropdownMenuContent side="right" align="center">
{t`Create Sample Resume`} <DropdownMenuItem onClick={onCreateSample}>
</DropdownMenuItem> <Flask className="mr-2" />
</DropdownMenuContent> {t`Create Sample Resume`}
</DropdownMenu> </DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
)}
</div> </div>
</DialogFooter> </DialogFooter>
</form> </form>

View File

@ -47,7 +47,8 @@ export const useResumeStore = create<ResumeStore>()(
}; };
set((state) => { set((state) => {
state.resume.data.metadata.layout[0][0].push(`custom.${section.id}`); const lastPageIndex = state.resume.data.metadata.layout.length - 1;
state.resume.data.metadata.layout[lastPageIndex][0].push(`custom.${section.id}`);
state.resume.data = _set(state.resume.data, `sections.custom.${section.id}`, section); state.resume.data = _set(state.resume.data, `sections.custom.${section.id}`, section);
debouncedUpdateResume(JSON.parse(JSON.stringify(state.resume))); debouncedUpdateResume(JSON.parse(JSON.stringify(state.resume)));

View File

@ -3,7 +3,7 @@ import { z } from "zod";
export const projectSchema = z.object({ export const projectSchema = z.object({
Title: z.string(), Title: z.string(),
Description: z.string(), Description: z.string(),
Url: z.string().url(), Url: z.literal("").or(z.string().url()).optional(),
"Started On": z.string(), "Started On": z.string(),
"Finished On": z.string().optional(), "Finished On": z.string().optional(),
}); });