Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • TanStack Documentation42টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Project Overview
  • Architecture
  • Folder Structure
  • Setup Next.js
  • Axios Setup
  • API Client
  • API Types
  • Query Install
  • Query Provider
  • Query Keys
  • Data Fetching
  • States
  • Devtools
  • Create Mutation
  • Update Mutation
  • Delete Mutation
  • Cache Invalidation
  • Optimistic Update
  • Pagination
  • Search
  • Filtering
  • Sorting
  • TanStack Table
  • Table Explore
  • Table Columns
  • Table Actions
  • React Hook Form
  • Zod Validation
  • Create Form
  • Edit Form
  • Dialog Modal
  • Delete Confirmation
  • Complete CRUD Flow
  • Full Integration
  • Error Handling
  • Loading States
  • Reusable Components
  • Production
  • Complete Project
  • Common Mistakes
  • Best Practices
  • Interview Q&A
  1. Docs
  2. TanStack
  3. Dialog Modal — Create ও Edit
TanStackIntermediate

Dialog Modal — Create ও Edit

shadcn Dialog দিয়ে state management — এক dialog-ই দুই মোড — বাংলায়।

6টি অংশবাংলা ভাষায়

আমরা create ও edit-এর জন্য একটি Dialog-ই রাখব এবং mode-নির্বাহ করব state দিয়ে। অথবা দুইটি আলাদা dialog-ও চলবে — দুটিই ঠিক। এক dialog-এর পদ্ধতি দেখি।

state managementtsx
tsx
const [dialogOpen, setDialogOpen] = useState(false);
const [editingProduct, setEditingProduct] = useState<Product | null>(null);

// create button
<Button onClick={() => {
  setEditingProduct(null);   // create mode
  setDialogOpen(true);
}}>
  <Plus className="size-4" /> নতুন Product
</Button>

// row-এর edit
const openEdit = (product: Product) => {
  setEditingProduct(product);  // edit mode
  setDialogOpen(true);
};
এক Dialog-এ দুই মোডtsx
tsx
<Dialog open={dialogOpen} onOpenChange={setDialogOpen}>
  <DialogContent onPointerDownOutside={(e) => e.preventDefault()}>
    <DialogHeader>
      <DialogTitle>
        {editingProduct ? "সম্পাদনা" : "নতুন"} Product
      </DialogTitle>
      <DialogDescription>
        {editingProduct
          ? "তথ্য বদলে Save করুন"
          : "নতুন product-এর তথ্য দিন"}
      </DialogDescription>
    </DialogHeader>

    <ProductForm
      key={editingProduct?.id ?? "create"}
      defaultValues={editingProduct
        ? {
            name: editingProduct.name,
            description: editingProduct.description ?? "",
            price: editingProduct.price,
            category: editingProduct.category,
            stock: editingProduct.stock,
            status: editingProduct.status,
          }
        : undefined}
      isSubmitting={editingProduct
        ? updateProduct.isPending
        : createProduct.isPending}
      onSubmit={editingProduct
        ? (values) => {
            updateProduct.mutate(
              { id: editingProduct!.id, input: values },
              { onSuccess: () => setDialogOpen(false) },
            );
          }
        : (values) => {
            createProduct.mutate(values, {
              onSuccess: () => setDialogOpen(false),
            });
          }}
    />
  </DialogContent>
</Dialog>

কেন একটি Dialog

  • দুই code-path মিলে যাওয়ায় duplicate কম
  • editingProduct === null মানেই create — সুস্পষ্ট
  • Dialog component loop-height একবারই mount হয়
  • নতুন feature দরকার হলে (যেমন duplicate) সহজে মোড বাড়ানো যায়
loading state দুই দিক

isSubmitting আলাদা-আলাদা mutation-এর pending — dialog একটিই, কিন্তু নিশ্চিত রাখুন: create-চলাকালীন edit dialog নিজে-নিজে খুললে যেন ভুল pending না লাগে। editingProduct ? updateProduct.isPending : createProduct.isPending — এমন যুক্তি ঠিক।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরEdit Form — Pre-filledপরেরDelete Confirmation Dialog
এই পেজে
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com