diff --git a/src/components/CodeAndPreview.tsx b/src/components/CodeAndPreview.tsx
index 7763f928..44f01b54 100644
--- a/src/components/CodeAndPreview.tsx
+++ b/src/components/CodeAndPreview.tsx
@@ -25,6 +25,7 @@ import { useGlobalStore } from "@/hooks/use-global-store"
import { useUrlParams } from "@/hooks/use-url-params"
import { getSnippetTemplate } from "@/lib/get-snippet-template"
import "@/prettier"
+import { useImportSnippetDialog } from "./dialogs/import-snippet-dialog"
interface Props {
snippet?: Snippet | null
@@ -70,6 +71,8 @@ export function CodeAndPreview({ snippet }: Props) {
type: snippetType,
})
const qc = useQueryClient()
+ const { Dialog: ImportSnippetDialog, openDialog: openImportDialog } =
+ useImportSnippetDialog()
const updateSnippetMutation = useMutation({
mutationFn: async () => {
@@ -138,7 +141,7 @@ export function CodeAndPreview({ snippet }: Props) {
@@ -185,6 +188,7 @@ export function CodeAndPreview({ snippet }: Props) {
/>
)}
+
)
}
diff --git a/src/components/dialogs/create-use-dialog.tsx b/src/components/dialogs/create-use-dialog.tsx
new file mode 100644
index 00000000..4f889bd5
--- /dev/null
+++ b/src/components/dialogs/create-use-dialog.tsx
@@ -0,0 +1,28 @@
+import { FunctionComponent, useState } from "react"
+
+export const createUseDialog = >(
+ DialogComponent: DialogType,
+) => {
+ return () => {
+ const [open, setOpen] = useState(false)
+
+ return {
+ openDialog: () => {
+ setOpen(true)
+ },
+ closeDialog: () => {
+ setOpen(false)
+ },
+ Dialog: (
+ props: Omit, "open" | "onOpenChange">,
+ ) => (
+
+ ),
+ open,
+ }
+ }
+}
diff --git a/src/components/dialogs/import-snippet-dialog.tsx b/src/components/dialogs/import-snippet-dialog.tsx
index 77a03030..806fed82 100644
--- a/src/components/dialogs/import-snippet-dialog.tsx
+++ b/src/components/dialogs/import-snippet-dialog.tsx
@@ -5,6 +5,7 @@ import { Button } from "../ui/button"
import { useState } from "react"
import { useQuery } from "react-query"
import { useAxios } from "@/hooks/use-axios"
+import { createUseDialog } from "./create-use-dialog"
export const ImportSnippetDialog = ({
open,
@@ -12,7 +13,7 @@ export const ImportSnippetDialog = ({
onSnippetSelected,
}: {
open: boolean
- onOpenChange: (open: boolean) => void
+ onOpenChange: (open: boolean) => any
onSnippetSelected: (snippet: Snippet) => any
}) => {
const [searchText, setSearchText] = useState("")
@@ -56,3 +57,5 @@ export const ImportSnippetDialog = ({
)
}
+
+export const useImportSnippetDialog = createUseDialog(ImportSnippetDialog)