66 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Button } from "@/components/ui/button";
 | 
						|
import {
 | 
						|
  DropdownMenu,
 | 
						|
  DropdownMenuContent,
 | 
						|
  DropdownMenuItem,
 | 
						|
  DropdownMenuTrigger,
 | 
						|
  DropdownMenuSeparator,
 | 
						|
} from "@/components/ui/dropdown-menu";
 | 
						|
import { Loader2, RefreshCw, ChevronDown } from "lucide-react";
 | 
						|
 | 
						|
interface RequestUpdateMenuProps {
 | 
						|
  onUpdateDevice: () => void;
 | 
						|
  onUpdateRoom: () => void;
 | 
						|
  onUpdateAll: () => void;
 | 
						|
  loading?: boolean;
 | 
						|
}
 | 
						|
 | 
						|
export function RequestUpdateMenu({
 | 
						|
  onUpdateDevice,
 | 
						|
  onUpdateRoom,
 | 
						|
  onUpdateAll,
 | 
						|
  loading,
 | 
						|
}: RequestUpdateMenuProps) {
 | 
						|
  return (
 | 
						|
    <DropdownMenu>
 | 
						|
      <DropdownMenuTrigger asChild>
 | 
						|
        <Button
 | 
						|
          variant="outline"
 | 
						|
          disabled={loading}
 | 
						|
          className="group relative overflow-hidden border-2 border-gray-300 bg-white text-gray-800 font-medium px-6 py-2.5 rounded-lg transition-all duration-300 hover:border-gray-400 hover:bg-gray-50 hover:shadow-lg hover:shadow-gray-200/50 hover:-translate-y-0.5 disabled:opacity-70 disabled:cursor-not-allowed disabled:transform-none disabled:shadow-none"
 | 
						|
        >
 | 
						|
          <div className="flex items-center gap-2">
 | 
						|
            {loading ? (
 | 
						|
              <Loader2 className="h-4 w-4 animate-spin text-gray-600" />
 | 
						|
            ) : (
 | 
						|
              <RefreshCw className="h-4 w-4 text-gray-600 transition-transform duration-300 group-hover:rotate-180" />
 | 
						|
            )}
 | 
						|
            <span className="text-sm font-semibold">
 | 
						|
              {loading ? "Đang gửi..." : "Cập nhật"}
 | 
						|
            </span>
 | 
						|
            <ChevronDown className="h-4 w-4 text-gray-600 transition-transform duration-200 group-data-[state=open]:rotate-180" />
 | 
						|
          </div>
 | 
						|
 | 
						|
          <div className="absolute inset-0 -translate-x-full bg-gradient-to-r from-transparent via-gray-100/30 to-transparent transition-transform duration-700 group-hover:translate-x-full" />
 | 
						|
        </Button>
 | 
						|
      </DropdownMenuTrigger>
 | 
						|
      <DropdownMenuContent align="start" className="w-56">
 | 
						|
        <DropdownMenuItem onClick={onUpdateDevice} disabled={loading}>
 | 
						|
          <RefreshCw className="h-4 w-4 mr-2" />
 | 
						|
          <span>Cập nhật thiết bị cụ thể</span>
 | 
						|
        </DropdownMenuItem>
 | 
						|
        <DropdownMenuSeparator />
 | 
						|
        <DropdownMenuItem onClick={onUpdateRoom} disabled={loading}>
 | 
						|
          <RefreshCw className="h-4 w-4 mr-2" />
 | 
						|
          <span>Cập nhật theo phòng</span>
 | 
						|
        </DropdownMenuItem>
 | 
						|
        <DropdownMenuSeparator />
 | 
						|
        <DropdownMenuItem onClick={onUpdateAll} disabled={loading}>
 | 
						|
          <RefreshCw className="h-4 w-4 mr-2" />
 | 
						|
          <span>Cập nhật tất cả thiết bị</span>
 | 
						|
        </DropdownMenuItem>
 | 
						|
      </DropdownMenuContent>
 | 
						|
    </DropdownMenu>
 | 
						|
  );
 | 
						|
}
 |