Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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 @@ -7,8 +7,10 @@ import usePartner from "@/lib/swr/use-partner";
import usePartnersCount from "@/lib/swr/use-partners-count";
import useWorkspace from "@/lib/swr/use-workspace";
import { EnrolledPartnerProps, PartnerPlatformProps } from "@/lib/types";
import { useApprovePartnerApplicationModal } from "@/ui/modals/approve-partner-application-modal";
import { useBulkApprovePartnersModal } from "@/ui/modals/bulk-approve-partners-modal";
import {
type BulkApprovePartnersPayload,
useBulkApprovePartnersModal,
} from "@/ui/modals/bulk-approve-partners-modal";
import { useBulkRejectPartnersModal } from "@/ui/modals/bulk-reject-partners-modal";
import { useRejectPartnerApplicationModal } from "@/ui/modals/reject-partner-application-modal";
import { GroupColorCircle } from "@/ui/partners/groups/group-color-circle";
Expand Down Expand Up @@ -139,18 +141,12 @@ export function ProgramPartnersApplicationsPageClient() {
});

// State for pending bulk actions
const [pendingApprovePartners, setPendingApprovePartners] = useState<
EnrolledPartnerProps[]
>([]);

const [pendingRejectPartners, setPendingRejectPartners] = useState<
EnrolledPartnerProps[]
>([]);

const { setShowBulkApprovePartnersModal, BulkApprovePartnersModal } =
useBulkApprovePartnersModal({
partners: pendingApprovePartners,
});
const { openBulkApprove, BulkApprovePartnersModal } =
useBulkApprovePartnersModal();

const { setShowBulkRejectPartnersModal, BulkRejectPartnersModal } =
useBulkRejectPartnersModal({
Expand Down Expand Up @@ -334,11 +330,11 @@ export function ProgramPartnersApplicationsPageClient() {
enableHiding: false,
header: ({ table }) => <EditColumnsButton table={table} />,
cell: ({ row }) => (
<RowMenuButton row={row} workspaceId={workspaceId!} />
<RowMenuButton row={row} openBulkApprove={openBulkApprove} />
),
},
],
[workspaceId, groups, platformsMapByPartnerId],
[openBulkApprove, groups, platformsMapByPartnerId],
);

const { table, ...tableProps } = useTable<EnrolledPartnerProps>({
Expand Down Expand Up @@ -382,8 +378,7 @@ export function ProgramPartnersApplicationsPageClient() {
.getSelectedRowModel()
.rows.map((row) => row.original);

setPendingApprovePartners(partners);
setShowBulkApprovePartnersModal(true);
openBulkApprove({ partners });
}}
/>
<Button
Expand Down Expand Up @@ -433,6 +428,7 @@ export function ProgramPartnersApplicationsPageClient() {
setDetailsSheetState((s) => ({ ...s, open }) as any)
}
partner={currentPartner}
onOpenBulkApprove={openBulkApprove}
onPrevious={
previousPartnerId
? () =>
Expand Down Expand Up @@ -506,24 +502,13 @@ export function ProgramPartnersApplicationsPageClient() {

function RowMenuButton({
row,
workspaceId,
openBulkApprove,
}: {
row: Row<EnrolledPartnerProps>;
workspaceId: string;
openBulkApprove: (payload: BulkApprovePartnersPayload) => void;
}) {
const [isOpen, setIsOpen] = useState(false);

const {
ApprovePartnerApplicationModal,
setShowApprovePartnerApplicationModal,
} = useApprovePartnerApplicationModal({
partner: row.original,
groupId: row.original.groupId,
onConfirm: async () => {
await mutatePrefix(["/api/partners", "/api/partners/count"]);
},
});

const {
RejectPartnerApplicationModal,
setShowRejectPartnerApplicationModal,
Expand All @@ -536,7 +521,6 @@ function RowMenuButton({

return (
<>
{ApprovePartnerApplicationModal}
{RejectPartnerApplicationModal}
<Popover
openPopover={isOpen}
Expand All @@ -549,7 +533,7 @@ function RowMenuButton({
icon={UserCheck}
onSelect={() => {
setIsOpen(false);
setShowApprovePartnerApplicationModal(true);
openBulkApprove({ partners: [row.original] });
}}
>
Approve application
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import usePartner from "@/lib/swr/use-partner";
import usePartnersCount from "@/lib/swr/use-partners-count";
import useWorkspace from "@/lib/swr/use-workspace";
import { EnrolledPartnerProps, PartnerPlatformProps } from "@/lib/types";
import { useBulkApprovePartnersModal } from "@/ui/modals/bulk-approve-partners-modal";
import { useConfirmModal } from "@/ui/modals/confirm-modal";
import { GroupColorCircle } from "@/ui/partners/groups/group-color-circle";
import { PartnerApplicationSheet } from "@/ui/partners/partner-application-sheet";
Expand Down Expand Up @@ -135,6 +136,9 @@ export function ProgramPartnersRejectedApplicationsPageClient() {
partnerId: detailsSheetState.partnerId,
});

const { openBulkApprove, BulkApprovePartnersModal } =
useBulkApprovePartnersModal();
Comment on lines +139 to +140
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Rejected-page approval is still split across two code paths.

These additions wire the bulk-approve modal into the sheet, but PartnerRowMenuButton below still approves directly via approvePartnerAction/useConfirmModal on Lines 464-488. Rejected applications can therefore still bypass the shared group-selection and post-approve flow, so this page is not actually unified yet. Please thread openBulkApprove into the row menu as well and remove the legacy direct-approve path here.

Also applies to: 385-406


const { columnVisibility, setColumnVisibility } = useColumnVisibility(
"applications-table-columns",
applicationsColumns,
Expand Down Expand Up @@ -378,6 +382,7 @@ export function ProgramPartnersRejectedApplicationsPageClient() {
setDetailsSheetState((s) => ({ ...s, open }) as any)
}
partner={currentPartner}
onOpenBulkApprove={openBulkApprove}
onPrevious={
previousPartnerId
? () =>
Expand All @@ -398,6 +403,7 @@ export function ProgramPartnersRejectedApplicationsPageClient() {
}
/>
)}
<BulkApprovePartnersModal />
<div>
<div className="flex flex-col gap-3 md:flex-row md:items-center md:justify-between">
<Filter.Select
Expand Down
Loading
Loading