Browse Source

fix(dashboard): Disable removing from default channel

Michael Bromley 3 months ago
parent
commit
cf1479da89

+ 11 - 9
packages/dashboard/src/lib/components/data-table/data-table-bulk-action-item.tsx

@@ -1,6 +1,6 @@
 import { usePermissions } from '@/vdb/hooks/use-permissions.js';
-import { Trans } from '@lingui/react/macro';
 import { cn } from '@/vdb/lib/utils.js';
+import { Trans } from '@lingui/react/macro';
 import { LucideIcon } from 'lucide-react';
 import { useState } from 'react';
 import {
@@ -30,6 +30,7 @@ export interface DataTableBulkActionItemProps {
     onClick: () => void;
     className?: string;
     requiresPermission?: string[];
+    disabled?: boolean;
 }
 
 /**
@@ -63,13 +64,14 @@ export interface DataTableBulkActionItemProps {
  * @since 3.4.0
  */
 export function DataTableBulkActionItem({
-                                            label,
-                                            icon: Icon,
-                                            confirmationText,
-                                            className,
-                                            onClick,
-                                            requiresPermission,
-                                        }: Readonly<DataTableBulkActionItemProps>) {
+    label,
+    icon: Icon,
+    confirmationText,
+    className,
+    onClick,
+    requiresPermission,
+    disabled,
+}: Readonly<DataTableBulkActionItemProps>) {
     const [isOpen, setIsOpen] = useState(false);
     const { hasPermissions } = usePermissions();
     const userHasPermission = hasPermissions(requiresPermission ?? []);
@@ -100,7 +102,7 @@ export function DataTableBulkActionItem({
         return (
             <AlertDialog open={isOpen} onOpenChange={setIsOpen}>
                 <AlertDialogTrigger asChild>
-                    <DropdownMenuItem onClick={handleClick} disabled={!userHasPermission}>
+                    <DropdownMenuItem onClick={handleClick} disabled={!userHasPermission || disabled}>
                         {Icon && <Icon className={cn('mr-1 h-4 w-4', className)} />}
                         <span className={cn('text-sm', className)}>
                             <Trans>{label}</Trans>

+ 2 - 0
packages/dashboard/src/lib/components/shared/remove-from-channel-bulk-action.tsx

@@ -4,6 +4,7 @@ import { toast } from 'sonner';
 
 import { DataTableBulkActionItem } from '@/vdb/components/data-table/data-table-bulk-action-item.js';
 import { usePaginatedList } from '@/vdb/components/shared/paginated-list-data-table.js';
+import { DEFAULT_CHANNEL_CODE } from '@/vdb/constants.js';
 import { ResultOf } from '@/vdb/graphql/graphql.js';
 import { useChannel } from '@/vdb/hooks/use-channel.js';
 import { Trans, useLingui } from '@lingui/react/macro';
@@ -86,6 +87,7 @@ export function RemoveFromChannelBulkAction({
             }
             icon={LayersIcon}
             className="text-warning"
+            disabled={activeChannel.code === DEFAULT_CHANNEL_CODE}
         />
     );
 }