Skip to content

Commit

Permalink
fix(web): Fix some JS console errors in the preview page
Browse files Browse the repository at this point in the history
  • Loading branch information
MohamedBassem committed Apr 13, 2024
1 parent 4f17ea6 commit 5c9acb1
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 36 deletions.
8 changes: 4 additions & 4 deletions apps/web/components/dashboard/bookmarks/TagsEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export function TagsEditor({ bookmark }: { bookmark: ZBookmark }) {
})}
styles={{
multiValueRemove: () => ({
"background-color": "transparent",
backgroundColor: "transparent",
}),
valueContainer: (styles) => ({
...styles,
Expand All @@ -122,10 +122,10 @@ export function TagsEditor({ bookmark }: { bookmark: ZBookmark }) {
}),
control: (styles) => ({
...styles,
"background-color": "hsl(var(--background))",
"border-color": "hsl(var(--border))",
backgroundColor: "hsl(var(--background))",
borderColor: "hsl(var(--border))",
":hover": {
"border-color": "hsl(var(--border))",
borderColor: "hsl(var(--border))",
},
}),
}}
Expand Down
6 changes: 3 additions & 3 deletions apps/web/components/dashboard/preview/ActionBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export default function ActionBar({ bookmark }: { bookmark: ZBookmark }) {
return (
<div className="flex items-center justify-center gap-3">
<Tooltip delayDuration={0}>
<TooltipTrigger>
<TooltipTrigger asChild>
<ActionButton
variant="none"
className="size-14 rounded-full bg-background"
Expand All @@ -73,7 +73,7 @@ export default function ActionBar({ bookmark }: { bookmark: ZBookmark }) {
</TooltipContent>
</Tooltip>
<Tooltip delayDuration={0}>
<TooltipTrigger>
<TooltipTrigger asChild>
<ActionButton
variant="none"
loading={pendingArchive}
Expand All @@ -93,7 +93,7 @@ export default function ActionBar({ bookmark }: { bookmark: ZBookmark }) {
</TooltipContent>
</Tooltip>
<Tooltip delayDuration={0}>
<TooltipTrigger>
<TooltipTrigger asChild>
<ActionButton
loading={pendingDeletion}
className="size-14 rounded-full bg-background"
Expand Down
15 changes: 12 additions & 3 deletions apps/web/components/dashboard/preview/BookmarkPreview.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"use client";

import { useEffect, useState } from "react";
import Link from "next/link";
import { TagsEditor } from "@/components/dashboard/bookmarks/TagsEditor";
import { Separator } from "@/components/ui/separator";
Expand Down Expand Up @@ -39,15 +40,23 @@ function ContentLoading() {
}

function CreationTime({ createdAt }: { createdAt: Date }) {
const [fromNow, setFromNow] = useState("");
const [localCreatedAt, setLocalCreatedAt] = useState("");

// This is to avoid hydration errors when server and clients are in different timezones
useEffect(() => {
setFromNow(dayjs(createdAt).fromNow());
setLocalCreatedAt(createdAt.toLocaleString());
}, [createdAt]);
return (
<Tooltip delayDuration={0}>
<TooltipTrigger asChild>
<span className="flex w-fit gap-2">
<CalendarDays /> {dayjs(createdAt).fromNow()}
<CalendarDays /> {fromNow}
</span>
</TooltipTrigger>
<TooltipPortal>
<TooltipContent>{createdAt.toLocaleString()}</TooltipContent>
<TooltipContent>{localCreatedAt}</TooltipContent>
</TooltipPortal>
</Tooltip>
);
Expand Down Expand Up @@ -127,7 +136,7 @@ export default function BookmarkPreview({
);

return (
<div className="grid grid-rows-3 gap-2 overflow-hidden bg-background lg:grid-cols-3 lg:grid-rows-none">
<div className="grid h-full grid-rows-3 gap-2 overflow-hidden bg-background lg:grid-cols-3 lg:grid-rows-none">
<div className="row-span-2 h-full w-full overflow-auto p-2 md:col-span-2 lg:row-auto">
{isBookmarkStillCrawling(bookmark) ? <ContentLoading /> : content}
</div>
Expand Down
57 changes: 31 additions & 26 deletions apps/web/components/ui/action-button.tsx
Original file line number Diff line number Diff line change
@@ -1,33 +1,38 @@
import React from "react";
import { useClientConfig } from "@/lib/clientConfig";

import type { ButtonProps } from "./button";
import { Button } from "./button";
import LoadingSpinner from "./spinner";

export function ActionButton({
children,
loading,
spinner,
disabled,
ignoreDemoMode = false,
...props
}: ButtonProps & {
loading: boolean;
spinner?: React.ReactNode;
ignoreDemoMode?: boolean;
}) {
const clientConfig = useClientConfig();
spinner ||= <LoadingSpinner />;
if (!ignoreDemoMode && clientConfig.demoMode) {
disabled = true;
} else if (disabled !== undefined) {
disabled ||= loading;
} else if (loading) {
disabled = true;
const ActionButton = React.forwardRef<
HTMLButtonElement,
ButtonProps & {
loading: boolean;
spinner?: React.ReactNode;
ignoreDemoMode?: boolean;
}
return (
<Button {...props} disabled={disabled}>
{loading ? spinner : children}
</Button>
);
}
>(
(
{ children, loading, spinner, disabled, ignoreDemoMode = false, ...props },
ref,
) => {
const clientConfig = useClientConfig();
spinner ||= <LoadingSpinner />;
if (!ignoreDemoMode && clientConfig.demoMode) {
disabled = true;
} else if (disabled !== undefined) {
disabled ||= loading;
} else if (loading) {
disabled = true;
}
return (
<Button ref={ref} {...props} disabled={disabled}>
{loading ? spinner : children}
</Button>
);
},
);
ActionButton.displayName = "ActionButton";

export { ActionButton };

0 comments on commit 5c9acb1

Please sign in to comment.