From fb50b4ff8d1bca88e7159869f41f87d5edaf3134 Mon Sep 17 00:00:00 2001
From: kooriookami <38392315+kooriookami@users.noreply.github.com>
Date: Thu, 3 Feb 2022 21:04:25 +0800
Subject: [PATCH] fix(components): [Dialog & MessageBox] support draggable
(#5369)
* feat: add use-draggable
* feat: msgbox add draggable
* feat: update
* feat: update
* feat: update
* feat: update
* feat: update
* feat: update
---
docs/en-US/component/dialog.md | 11 +
docs/en-US/component/message-box.md | 13 +-
docs/examples/dialog/draggable-dialog.vue | 23 ++
docs/examples/message-box/draggable.vue | 32 +++
.../dialog/__tests__/dialog.spec.ts | 17 ++
packages/components/dialog/src/dialog.ts | 4 +
packages/components/dialog/src/dialog.vue | 12 +-
packages/components/message-box/src/index.vue | 217 ++++++++++--------
.../message-box/src/message-box.type.ts | 3 +
packages/hooks/index.ts | 1 +
packages/hooks/use-draggable/index.ts | 87 +++++++
packages/theme-chalk/src/dialog.scss | 7 +
packages/theme-chalk/src/message-box.scss | 41 ++--
13 files changed, 352 insertions(+), 116 deletions(-)
create mode 100644 docs/examples/dialog/draggable-dialog.vue
create mode 100644 docs/examples/message-box/draggable.vue
create mode 100644 packages/hooks/use-draggable/index.ts
diff --git a/docs/en-US/component/dialog.md b/docs/en-US/component/dialog.md
index 5380470af9..93bbf62c0a 100644
--- a/docs/en-US/component/dialog.md
+++ b/docs/en-US/component/dialog.md
@@ -69,6 +69,16 @@ dialog/destroy-on-close
:::
+## Draggable Dialog
+
+Try to drag the `header` part.
+
+:::demo Set `draggable` to `true` to drag.
+
+dialog/draggable-dialog
+
+:::
+
:::tip
When using `modal` = false, please make sure that `append-to-body` was set to **true**, because `Dialog` was positioned by `position: relative`, when `modal` gets removed, `Dialog` will position itself based on the current position in the DOM, instead of `Document.Body`, thus the style will be messed up.
@@ -94,6 +104,7 @@ When using `modal` = false, please make sure that `append-to-body` was set to **
| close-on-press-escape | whether the Dialog can be closed by pressing ESC | boolean | — | true |
| show-close | whether to show a close button | boolean | — | true |
| before-close | callback before Dialog closes, and it will prevent Dialog from closing | function(done),done is used to close the Dialog | — | — |
+| draggable | enable dragging feature for Dialog | boolean | — | false |
| center | whether to align the header and footer in center | boolean | — | false |
| destroy-on-close | Destroy elements in Dialog when closed | boolean | — | false |
diff --git a/docs/en-US/component/message-box.md b/docs/en-US/component/message-box.md
index 62951a4d52..14ab917a72 100644
--- a/docs/en-US/component/message-box.md
+++ b/docs/en-US/component/message-box.md
@@ -89,12 +89,22 @@ message-box/distinguishable-close-cancel
Content of MessageBox can be centered.
-:::demo Setting `center` to `true` will center the content
+:::demo Setting `center` to `true` will center the content.
message-box/centered-content
:::
+## Draggable
+
+MessageBox can be draggable.
+
+:::demo Setting `draggable` to `true` allows user to drag MessageBox.
+
+message-box/draggable
+
+:::
+
## Global method
If Element Plus is fully imported, it will add the following global methods for `app.config.globalProperties`: `$msgbox`, `$alert`, `$confirm` and `$prompt`. So in a Vue instance you can call `MessageBox` like what we did in this page. The parameters are:
@@ -147,5 +157,6 @@ The corresponding methods are: `ElMessageBox`, `ElMessageBox.alert`, `ElMessageB
| input-validator | validation function for the input. Should returns a boolean or string. If a string is returned, it will be assigned to inputErrorMessage | function | — | — |
| input-error-message | error message when validation fails | string | — | Illegal input |
| center | whether to align the content in center | boolean | — | false |
+| draggable | whether MessageBox is draggable | boolean | — | false |
| round-button | whether to use round button | boolean | — | false |
| button-size | custom size of confirm and cancel buttons | string | small / default / large | default |
diff --git a/docs/examples/dialog/draggable-dialog.vue b/docs/examples/dialog/draggable-dialog.vue
new file mode 100644
index 0000000000..1ea7d390cc
--- /dev/null
+++ b/docs/examples/dialog/draggable-dialog.vue
@@ -0,0 +1,23 @@
+
+