Confirm.vue 975 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <template>
  2. <tippy
  3. :interactive="true"
  4. :touch="true"
  5. :placement="placement"
  6. theme="confirm"
  7. ref="confirm"
  8. trigger="click"
  9. @onHide="clickedOnce = false"
  10. @hide="delayedHide()"
  11. >
  12. <div @click.shift.stop="confirm()" @click.exact="clickedOnce = true">
  13. <slot ref="trigger" />
  14. </div>
  15. <template #content>
  16. <a @click="confirm($event)">
  17. Click to Confirm
  18. </a>
  19. </template>
  20. </tippy>
  21. </template>
  22. <script>
  23. export default {
  24. props: {
  25. placement: {
  26. type: String,
  27. default: "top"
  28. }
  29. },
  30. emits: ["confirm"],
  31. data() {
  32. return {
  33. clickedOnce: false
  34. };
  35. },
  36. methods: {
  37. // eslint-disable-next-line no-unused-vars
  38. confirm(event) {
  39. if (
  40. !event ||
  41. event.type !== "click" ||
  42. event.altKey ||
  43. event.ctrlKey ||
  44. event.metaKey ||
  45. event.shiftKey
  46. )
  47. return;
  48. this.clickedOnce = false;
  49. this.$emit("confirm");
  50. },
  51. delayedHide() {
  52. setTimeout(() => {
  53. this.clickedOnce = false;
  54. }, 25);
  55. }
  56. }
  57. };
  58. </script>