Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import {
BoxArchive,
ChevronRight,
CircleXmark,
Copy,
EnvelopeArrowRight,
InvoiceDollar,
LoadingSpinner,
Expand Down Expand Up @@ -290,126 +291,145 @@ function PageControls({ partner }: { partner: EnrolledPartnerProps }) {
openPopover={isOpen}
setOpenPopover={setIsOpen}
content={
<div className="grid w-full grid-cols-1 gap-px p-2 md:w-48">
<div className="w-full md:w-48">
{partner.status === "invited" ? (
<MenuItem
icon={isDeletingInvite ? LoadingSpinner : Trash}
onClick={async () => {
if (partner.status !== "invited" || !workspaceId) {
return;
}
if (
!window.confirm(
"Are you sure you want to delete this invite? This action cannot be undone.",
)
) {
return;
}

await deleteInvite({
workspaceId,
partnerId: partner.id,
});
}}
variant="danger"
>
Delete invite
</MenuItem>
) : (
<>
<MenuItem
as={Link}
href={`/${workspaceSlug}/program/messages/${partner.id}`}
target="_blank"
icon={Msgs}
onClick={() => setIsOpen(false)}
className="md:hidden"
>
Message
</MenuItem>
<div className="grid gap-px p-2">
<MenuItem
icon={InvoiceDollar}
onClick={() => {
setCreateCommissionSheetOpen(true);
setIsOpen(false);
}}
className="md:hidden"
>
Create commission
</MenuItem>
<MenuItem
icon={Refresh2}
onClick={() => {
setClawbackSheetOpen(true);
setIsOpen(false);
}}
>
Create clawback
</MenuItem>
<MenuItem
icon={PenWriting}
onClick={() => {
setShowPartnerAdvancedSettingsModal(true);
setIsOpen(false);
icon={isDeletingInvite ? LoadingSpinner : Trash}
onClick={async () => {
if (partner.status !== "invited" || !workspaceId) {
return;
}
if (
!window.confirm(
"Are you sure you want to delete this invite? This action cannot be undone.",
)
) {
return;
}

await deleteInvite({
workspaceId,
partnerId: partner.id,
});
}}
variant="danger"
>
Advanced settings
Delete invite
</MenuItem>
{!["banned", "deactivated"].includes(partner.status) && (
</div>
) : (
<>
<div className="grid gap-px p-2">
<MenuItem
icon={BoxArchive}
onClick={() => {
setShowArchivePartnerModal(true);
setIsOpen(false);
}}
as={Link}
href={`/${workspaceSlug}/program/messages/${partner.id}`}
target="_blank"
icon={Msgs}
onClick={() => setIsOpen(false)}
className="md:hidden"
>
{partner.status === "archived" ? "Unarchive" : "Archive"}{" "}
partner
Message
</MenuItem>
)}
{partner.status === "deactivated" ? (
<MenuItem
icon={LockOpen}
icon={InvoiceDollar}
onClick={() => {
setShowReactivatePartnerModal(true);
setCreateCommissionSheetOpen(true);
setIsOpen(false);
}}
className="md:hidden"
>
Reactivate partner
Create commission
</MenuItem>
) : partner.status !== "banned" ? (
<MenuItem
icon={CircleXmark}
icon={Refresh2}
onClick={() => {
setShowDeactivatePartnerModal(true);
setClawbackSheetOpen(true);
setIsOpen(false);
}}
>
Deactivate partner
Create clawback
</MenuItem>
) : null}
{partner.status === "banned" ? (
<MenuItem
icon={UserCheck}
icon={PenWriting}
onClick={() => {
setShowUnbanPartnerModal(true);
setShowPartnerAdvancedSettingsModal(true);
setIsOpen(false);
}}
>
Unban partner
Advanced settings
</MenuItem>
) : (
<MenuItem
icon={UserDelete}
variant="danger"
icon={Copy}
onClick={() => {
setShowBanPartnerModal(true);
navigator.clipboard.writeText(partner.id);
toast.success("Partner ID copied!");
setIsOpen(false);
}}
>
Ban partner
Copy Partner ID
</MenuItem>
)}
</div>
<div className="border-t border-neutral-200" />
<div className="grid gap-px p-2">
{!["banned", "deactivated"].includes(partner.status) && (
<MenuItem
icon={BoxArchive}
onClick={() => {
setShowArchivePartnerModal(true);
setIsOpen(false);
}}
>
{partner.status === "archived"
? "Unarchive"
: "Archive"}{" "}
partner
</MenuItem>
)}
{partner.status === "deactivated" ? (
<MenuItem
icon={LockOpen}
onClick={() => {
setShowReactivatePartnerModal(true);
setIsOpen(false);
}}
>
Reactivate partner
</MenuItem>
) : partner.status !== "banned" ? (
<MenuItem
icon={CircleXmark}
onClick={() => {
setShowDeactivatePartnerModal(true);
setIsOpen(false);
}}
>
Deactivate partner
</MenuItem>
) : null}
{partner.status === "banned" ? (
<MenuItem
icon={UserCheck}
onClick={() => {
setShowUnbanPartnerModal(true);
setIsOpen(false);
}}
>
Unban partner
</MenuItem>
) : (
<MenuItem
icon={UserDelete}
variant="danger"
onClick={() => {
setShowBanPartnerModal(true);
setIsOpen(false);
}}
>
Ban partner
</MenuItem>
)}
</div>
</>
)}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,12 @@ export function WorkspaceMembersClient() {
},
);

const { data: invitesForCount } = useSWR<WorkspaceUserProps[]>(
workspaceId ? `/api/workspaces/${workspaceId}/invites` : null,
fetcher,
);
const inviteCount = invitesForCount?.length ?? 0;

const availableRolesForPlan = useMemo(() => {
return getAvailableRolesForPlan(plan);
}, [plan]);
Expand Down Expand Up @@ -279,14 +285,33 @@ export function WorkspaceMembersClient() {
</div>
}
>
<PageWidthWrapper className="mb-20 flex flex-col gap-4">
<PageWidthWrapper className="mb-20 flex flex-col gap-2">
<div className="flex justify-between gap-3">
<Filter.Select
filters={filters}
activeFilters={activeFilters}
onSelect={onSelect}
onRemove={onRemove}
/>
<div className="flex items-center gap-2">
<Filter.Select
filters={filters}
activeFilters={activeFilters}
onSelect={onSelect}
onRemove={onRemove}
/>
{inviteCount > 0 && status !== "invited" && (
<Button
text="View pending invites"
variant="secondary"
className="w-fit"
right={
inviteCount > 0 ? (
<span className="rounded-full bg-neutral-200 px-1.5 py-0.5 text-xs font-medium text-neutral-700">
{inviteCount}
</span>
) : undefined
}
onClick={() =>
queryParams({ set: { status: "invited" }, del: "page" })
}
/>
)}
</div>
<SearchBoxPersisted
placeholder="Search by name or email"
inputClassName="w-full md:w-[20rem]"
Expand Down
12 changes: 0 additions & 12 deletions apps/web/app/app.dub.co/(dashboard)/[slug]/links/page-client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,24 +36,12 @@ import {
useRouterStuff,
} from "@dub/ui";
import { Download, Globe, TableIcon, Tag } from "@dub/ui/icons";
import { useSession } from "next-auth/react";
import { useRouter, useSearchParams } from "next/navigation";
import posthog from "posthog-js";
import { ReactNode, useEffect, useState } from "react";

export default function WorkspaceLinksClient() {
const { data: session } = useSession();
const { folderId } = useCurrentFolderId();

useEffect(() => {
if (session?.user) {
posthog.identify(session.user["id"], {
email: session.user.email,
name: session.user.name,
});
}
}, [session?.user]);

return (
<PageContentWithSidePanel
title={
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { mutatePrefix } from "@/lib/swr/mutate";
import { Button, useKeyboardShortcut } from "@dub/ui";
import { useSession } from "next-auth/react";
import { useParams, useRouter } from "next/navigation";
import posthog from "posthog-js";
import { useState } from "react";
import { toast } from "sonner";

Expand All @@ -31,17 +30,6 @@ export function AcceptInviteButton() {
return;
}

if (session?.user) {
posthog.identify(session.user["id"], {
email: session.user.email,
name: session.user.name,
});
}

posthog.capture("accepted_workspace_invite", {
workspace: slug,
});

await mutatePrefix(["/api/workspaces", "/api/programs"]);
router.replace(`/${slug}`);
toast.success("You now are a part of this workspace!");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import { useSession } from "next-auth/react";
import { usePlausible } from "next-plausible";
import posthog from "posthog-js";
import { useEffect } from "react";

export default function TrackSignup() {
Expand All @@ -11,13 +10,6 @@ export default function TrackSignup() {

useEffect(() => {
plausible("Signed Up");
if (session?.user) {
posthog.identify(session.user["id"], {
email: session.user.email,
name: session.user.name,
});
posthog.capture("user_signed_up");
}
}, [session?.user]);

return null;
Expand Down
Loading