toto10's picture
Upload folder using huggingface_hub (#4)
ea35075
raw
history blame
3.12 kB
import React from 'react'
import * as Dialog from '@radix-ui/react-dialog'
import { Cross2Icon } from '@radix-ui/react-icons'
import classes from './styles.module.css'
import NiceModal, { useModal } from '@ebay/nice-modal-react'
import { debounce } from 'lodash-es'
import classNames from 'classnames'
const {
DialogOverlay,
DialogContent,
DialogTitle,
DialogDescription,
Button,
IconButton,
green,
} = classes
const MyDialog = NiceModal.create<{
title?: string
description?: string
children?: React.ReactNode
button?: string
}>(({ title, description, children, button }) => {
const modal = useModal()
return (
<Dialog.Root
defaultOpen={true}
open={modal.visible}
onOpenChange={(value) => {
if (value) modal.show()
else modal.hide()
}}
>
<Dialog.Portal>
<Dialog.Overlay className={DialogOverlay} />
<Dialog.Content className={DialogContent}>
<Dialog.Title className={DialogTitle}>{title}</Dialog.Title>
<Dialog.Description className={DialogDescription}>
{description}
</Dialog.Description>
<div> {children}</div>
<div
style={{
display: 'flex',
marginTop: 25,
justifyContent: 'flex-end',
}}
>
<Dialog.Close asChild>
<button
className={classNames(Button, green)}
onClick={() => {
modal.resolve('action')
}}
>
{button}
</button>
</Dialog.Close>
</div>
<Dialog.Close asChild>
<button className={IconButton}>
<Cross2Icon />
</button>
</Dialog.Close>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
)
})
declare type NiceModalArgs<T> = T extends
| keyof JSX.IntrinsicElements
| React.JSXElementConstructor<any>
? Omit<React.ComponentProps<T>, 'id'>
: Record<string, unknown>
export type ShowProps = NiceModalArgs<typeof MyDialog>
export function GetDialog(wait = 0) {
const show = debounce((props: ShowProps) => {
NiceModal.show(MyDialog, props)
}, wait)
return {
show: (props: ShowProps) => {
show(props)
},
hide: () => {
show.cancel()
HideDialog()
},
}
}
export async function ShowDialog(props: ShowProps): Promise<string> {
console.log(props)
return await NiceModal.show(MyDialog, props)
}
export function HideDialog() {
return NiceModal.hide(MyDialog)
}