Skip to content

Commit

Permalink
fix(Dialog): 类型提取导出
Browse files Browse the repository at this point in the history
  • Loading branch information
irisSong committed Jan 18, 2024
1 parent 531ee8a commit b4685ce
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 22 deletions.
16 changes: 9 additions & 7 deletions src/packages/dialog/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ export type DialogConfigType = {
simple?: boolean
}

export interface BasicDialogProps extends BasicComponent {
export type DialogCloseIconPositionType = 'top-right' | 'top-left'

export interface DialogBasicProps extends BasicComponent {
visible?: boolean
title?: ReactNode
content?: ReactNode
Expand All @@ -22,7 +24,7 @@ export interface BasicDialogProps extends BasicComponent {
closeOnOverlayClick?: boolean
footerDirection?: string
lockScroll?: boolean
closeIconPosition?: 'top-right' | 'top-left'
closeIconPosition?: DialogCloseIconPositionType
closeIcon?: boolean | ReactNode
beforeClose?: () => boolean
beforeCancel?: () => boolean
Expand All @@ -34,21 +36,21 @@ export interface BasicDialogProps extends BasicComponent {
}

export type DialogReturnProps = {
update: (newConfig: ConfirmProps) => void
update: (newConfig: DialogConfirmProps) => void
close: () => void
}

export interface ConfirmProps extends BasicDialogProps {
export interface DialogConfirmProps extends DialogBasicProps {
content?: ReactNode
icon?: ReactNode | null
isNotice?: boolean
noticeType?: string
}

export interface DialogComponent
extends ForwardRefExoticComponent<PropsWithChildren<BasicDialogProps>> {
confirm: (props: ConfirmProps) => DialogReturnProps
alert: (props: ConfirmProps) => DialogReturnProps
extends ForwardRefExoticComponent<PropsWithChildren<DialogBasicProps>> {
confirm: (props: DialogConfirmProps) => DialogReturnProps
alert: (props: DialogConfirmProps) => DialogReturnProps
config: (config: DialogConfigType) => void
destroyAll: () => void
}
Expand Down
18 changes: 10 additions & 8 deletions src/packages/dialog/confirm.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import React from 'react'
import { Dialog } from './dialog'
import { destroyList, ConfirmProps, DialogReturnProps } from './config'
import { destroyList, DialogConfirmProps, DialogReturnProps } from './config'
import { render as reactRender, unmount } from '@/utils/render'

function ConfirmDialog(props: ConfirmProps) {
function ConfirmDialog(props: DialogConfirmProps) {
return <Dialog {...props}>{props.content}</Dialog>
}

// 如果是消息提示型弹出框,那么只有确认按钮
export const normalizeConfig = (config: ConfirmProps): ConfirmProps => {
export const normalizeConfig = (
config: DialogConfirmProps
): DialogConfirmProps => {
if (config.isNotice) {
let { icon } = config
if (!icon && icon !== null) {
Expand All @@ -26,18 +28,18 @@ export const normalizeConfig = (config: ConfirmProps): ConfirmProps => {
}

const confirm = (
config: ConfirmProps,
renderFunc?: (props: ConfirmProps) => void
config: DialogConfirmProps,
renderFunc?: (props: DialogConfirmProps) => void
): DialogReturnProps => {
const div = document.createElement('div')
document.body.appendChild(div)

let dialogConfig: ConfirmProps = {
let dialogConfig: DialogConfirmProps = {
...config,
visible: false,
}

const render = (props: ConfirmProps, callback?: () => any) => {
const render = (props: DialogConfirmProps, callback?: () => any) => {
reactRender(<ConfirmDialog {...props} onCancel={() => onCancel()} />, div)
callback && callback()
}
Expand Down Expand Up @@ -95,7 +97,7 @@ const confirm = (
})
}

const update = (newConfig: ConfirmProps) => {
const update = (newConfig: DialogConfirmProps) => {
dialogConfig = {
...dialogConfig,
title: config.title, // 避免 newConfig 未传递 title 时,icon 出现多个的问题
Expand Down
4 changes: 2 additions & 2 deletions src/packages/dialog/dialog.taro.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { CSSTransition } from 'react-transition-group'
import { View } from '@tarojs/components'
import { Close } from '@nutui/icons-react-taro'
import Button from '@/packages/button/index.taro'
import { BasicDialogProps } from './config'
import { DialogBasicProps } from './config'
import { Content } from './content.taro'
import { useConfig } from '@/packages/configprovider/configprovider.taro'
import Overlay from '@/packages/overlay/index.taro'
Expand All @@ -18,7 +18,7 @@ import {
import { BasicComponent } from '@/utils/typings'
import { useLockScrollTaro } from '@/utils/use-lock-scoll-taro'

export type DialogProps = BasicDialogProps & BasicComponent
export type DialogProps = DialogBasicProps & BasicComponent
const defaultProps = {
title: '',
content: '',
Expand Down
10 changes: 5 additions & 5 deletions src/packages/dialog/dialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import confirm from './confirm'
import { DialogWrap } from './dialogwrap'
import { useConfig } from '@/packages/configprovider'
import {
BasicDialogProps,
DialogBasicProps,
DialogReturnProps,
DialogComponent,
ConfirmProps,
DialogConfirmProps,
} from './config'
import { ComponentDefaults } from '@/utils/typings'

export type DialogProps = BasicDialogProps
export type DialogProps = DialogBasicProps
const defaultProps = {
...ComponentDefaults,
confirmText: '',
Expand Down Expand Up @@ -140,11 +140,11 @@ const BaseDialog: ForwardRefRenderFunction<unknown, Partial<DialogProps>> = (

export const Dialog: DialogComponent = forwardRef(BaseDialog) as DialogComponent

Dialog.confirm = (props: ConfirmProps): DialogReturnProps => {
Dialog.confirm = (props: DialogConfirmProps): DialogReturnProps => {
return confirm(props)
}
;['alert'].forEach((type) => {
;(Dialog as any)[type] = (props: ConfirmProps) => {
;(Dialog as any)[type] = (props: DialogConfirmProps) => {
return confirm({
...props,
isNotice: false,
Expand Down
8 changes: 8 additions & 0 deletions src/packages/dialog/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
import { Dialog } from './dialog'

export type {
DialogConfigType,
DialogCloseIconPositionType,
DialogBasicProps,
DialogConfirmProps,
DialogReturnProps,
} from './config'

export type { DialogProps } from './dialog'
export default Dialog

0 comments on commit b4685ce

Please sign in to comment.