diff --git a/apps/web/pages/api/generate-referral-link.ts b/apps/web/pages/api/generate-referral-link.ts index a28c252664..326874113e 100644 --- a/apps/web/pages/api/generate-referral-link.ts +++ b/apps/web/pages/api/generate-referral-link.ts @@ -16,9 +16,10 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) } try { - return await dub.links.get({ + const { shortLink } = await dub.links.get({ externalId: `ext_${session.user.id.toString()}`, }); + return res.status(200).json({ shortLink }); } catch (error) { console.log("Referral link not found, creating..."); } diff --git a/apps/web/playwright/icons.e2e.ts-snapshots/icons--calcom-web-darwin.png b/apps/web/playwright/icons.e2e.ts-snapshots/icons--calcom-web-darwin.png deleted file mode 100644 index 9ba6975127..0000000000 Binary files a/apps/web/playwright/icons.e2e.ts-snapshots/icons--calcom-web-darwin.png and /dev/null differ diff --git a/apps/web/playwright/icons.e2e.ts-snapshots/icons--calcom-web-linux.png b/apps/web/playwright/icons.e2e.ts-snapshots/icons--calcom-web-linux.png index 632c305f10..356c3d227d 100644 Binary files a/apps/web/playwright/icons.e2e.ts-snapshots/icons--calcom-web-linux.png and b/apps/web/playwright/icons.e2e.ts-snapshots/icons--calcom-web-linux.png differ diff --git a/apps/web/public/icons/sprite.svg b/apps/web/public/icons/sprite.svg index d65166c2e9..23f1abd825 100644 --- a/apps/web/public/icons/sprite.svg +++ b/apps/web/public/icons/sprite.svg @@ -92,7 +92,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -319,6 +319,12 @@ + + + + + + diff --git a/packages/features/shell/Shell.tsx b/packages/features/shell/Shell.tsx index e9aa9fb172..f336ea9179 100644 --- a/packages/features/shell/Shell.tsx +++ b/packages/features/shell/Shell.tsx @@ -55,7 +55,7 @@ import getBrandColours from "@calcom/lib/getBrandColours"; import { useBookerUrl } from "@calcom/lib/hooks/useBookerUrl"; import { useCopy } from "@calcom/lib/hooks/useCopy"; import { useLocale } from "@calcom/lib/hooks/useLocale"; -import { useNotifications, ButtonState } from "@calcom/lib/hooks/useNotifications"; +import { ButtonState, useNotifications } from "@calcom/lib/hooks/useNotifications"; import useTheme from "@calcom/lib/hooks/useTheme"; import { isKeyInObject } from "@calcom/lib/isKeyInObject"; import { localStorage } from "@calcom/lib/webstorage"; @@ -929,7 +929,7 @@ function SideBarContainer({ bannersHeight, isPlatformUser = false }: SideBarCont } function SideBar({ bannersHeight, user }: SideBarProps) { - const { isCopied, copyToClipboard, resetCopyStatus } = useCopy(); + const { copyToClipboard } = useCopy(); const { t, isLocaleReady } = useLocale(); const orgBranding = useOrgBranding(); const pathname = usePathname(); @@ -973,13 +973,12 @@ function SideBar({ bannersHeight, user }: SideBarProps) { method: "POST", }); const { shortLink } = await res.json(); - copyToClipboard(shortLink); - - if (isCopied) { - showToast(t("link_copied"), "success"); - } + copyToClipboard(shortLink, { + onSuccess: () => showToast(t("link_copied"), "success"), + onFailure: () => showToast("Copy to clipboard failed", "error"), + }); }, - icon: "copy", + icon: "gift", } : null, { diff --git a/packages/lib/hooks/useCopy.ts b/packages/lib/hooks/useCopy.ts index dd1e4fd87d..658d32d5dd 100644 --- a/packages/lib/hooks/useCopy.ts +++ b/packages/lib/hooks/useCopy.ts @@ -1,14 +1,27 @@ -import { useState, useEffect } from "react"; +import { useEffect, useState } from "react"; export function useCopy() { const [isCopied, setIsCopied] = useState(false); - const copyToClipboard = (text: string) => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const noop = () => {}; + + const copyToClipboard = ( + text: string, + options: { onSuccess?: () => void; onFailure?: () => void } = {} + ) => { + const { onSuccess = noop, onFailure = noop } = options; if (typeof navigator !== "undefined" && navigator.clipboard) { navigator.clipboard .writeText(text) - .then(() => setIsCopied(true)) - .catch((error) => console.error("Copy to clipboard failed:", error)); + .then(() => { + setIsCopied(true); + onSuccess(); + }) + .catch((error) => { + onFailure(); + console.error("Copy to clipboard failed:", error); + }); } else { console.warn( "You need to use a secure context to use clipboard \n Please use the following link: ", diff --git a/packages/ui/components/icon/IconSprites.tsx b/packages/ui/components/icon/IconSprites.tsx index 128912a786..0f388bec03 100644 --- a/packages/ui/components/icon/IconSprites.tsx +++ b/packages/ui/components/icon/IconSprites.tsx @@ -1,10 +1,13 @@ -import * as React from "react"; import SVG from "react-inlinesvg"; +// eslint-disable-next-line turbo/no-undeclared-env-vars +const vercelCommitHash = process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA; +const commitHash = vercelCommitHash ? `-${vercelCommitHash.slice(0, 7)}` : ""; + export function IconSprites() { return ( ); } diff --git a/packages/ui/components/icon/icon-list.mjs b/packages/ui/components/icon/icon-list.mjs index aca5f576c2..e706bcfb44 100644 --- a/packages/ui/components/icon/icon-list.mjs +++ b/packages/ui/components/icon/icon-list.mjs @@ -67,6 +67,7 @@ export const lucideIconList = new Set([ "fingerprint", "flag", "folder", + "gift", "git-merge", "github", "globe", diff --git a/packages/ui/components/icon/icon-names.ts b/packages/ui/components/icon/icon-names.ts index c5775f7969..edb4673d8a 100644 --- a/packages/ui/components/icon/icon-names.ts +++ b/packages/ui/components/icon/icon-names.ts @@ -67,6 +67,7 @@ export type IconName = | "fingerprint" | "flag" | "folder" + | "gift" | "git-merge" | "github" | "globe"