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"