popover-with-form-demo

PreviousNext
Docs
pureuiexample

Preview

Loading preview…
registry/pure-ui/examples/popover/popover-with-form-demo.tsx
"use client";

import { useState, useTransition } from "react";

import {
  Popover,
  PopoverPopup,
  PopoverTrigger,
} from "@/registry/pure-ui/ui/popover";
import { Button } from "@/registry/pure-ui/ui/button";
import { Input } from "@/registry/pure-ui/ui/input";

export const PopoverWithFormDemo = () => {
  const [open, setOpen] = useState(false);

  const [isSubmitting, startSubmitting] = useTransition();

  const handleSubmit = () => {
    startSubmitting(async () => {
      await new Promise((resolve) => setTimeout(resolve, 2000));
      setOpen(false);
    });
  };

  return (
    <div className="flex flex-col gap-4">
      <Popover open={open} onOpenChange={setOpen}>
        <PopoverTrigger
          render={<Button size="sm" radius="none" variant="outline" />}
        >
          <span>Customize</span>
        </PopoverTrigger>
        <PopoverPopup>
          <div className="flex flex-col gap-2">
            <Input defaultValue="100%" size="sm" />
            <Input defaultValue="300px" size="sm" />
            <Input defaultValue="24px" size="sm" />
            <Input defaultValue="30px" size="sm" />
            <Button
              className="w-full"
              size="sm"
              onClick={handleSubmit}
              disabled={isSubmitting}
            >
              Submit
            </Button>
          </div>
        </PopoverPopup>
      </Popover>
    </div>
  );
};

Installation

npx shadcn@latest add @pureui/popover-with-form-demo

Usage

import { PopoverWithFormDemo } from "@/components/popover-with-form-demo"
<PopoverWithFormDemo />