From 257c7aa7041cb5a4a69f3a210dcb86b3259e6c85 Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 9 Jun 2024 10:22:36 +0200 Subject: [PATCH] examples: add confirm delete example (#1466) * examples: add confirm delete example * docs: add confirm delete example --- docs/examples/confirm-delete/App.vue | 69 +++++++++++++++++++ docs/examples/confirm-delete/Dialog.vue | 57 +++++++++++++++ docs/examples/confirm-delete/index.ts | 3 + docs/examples/confirm-delete/useDialog.js | 29 ++++++++ docs/examples/index.ts | 6 ++ docs/src/.vitepress/config.mts | 1 + docs/src/examples/confirm.md | 9 +++ examples/vite/router.ts | 4 ++ .../ConfirmDelete/ConfirmDeleteExample.vue | 69 +++++++++++++++++++ examples/vite/src/ConfirmDelete/Dialog.vue | 57 +++++++++++++++ examples/vite/src/ConfirmDelete/useDialog.ts | 30 ++++++++ .../vite/src/CustomNode/ColorSelectorNode.vue | 6 +- 12 files changed, 339 insertions(+), 1 deletion(-) create mode 100644 docs/examples/confirm-delete/App.vue create mode 100644 docs/examples/confirm-delete/Dialog.vue create mode 100644 docs/examples/confirm-delete/index.ts create mode 100644 docs/examples/confirm-delete/useDialog.js create mode 100644 docs/src/examples/confirm.md create mode 100644 examples/vite/src/ConfirmDelete/ConfirmDeleteExample.vue create mode 100644 examples/vite/src/ConfirmDelete/Dialog.vue create mode 100644 examples/vite/src/ConfirmDelete/useDialog.ts diff --git a/docs/examples/confirm-delete/App.vue b/docs/examples/confirm-delete/App.vue new file mode 100644 index 00000000..b77b6dbd --- /dev/null +++ b/docs/examples/confirm-delete/App.vue @@ -0,0 +1,69 @@ + + + + + + + + + diff --git a/docs/examples/confirm-delete/Dialog.vue b/docs/examples/confirm-delete/Dialog.vue new file mode 100644 index 00000000..1f0d8c1e --- /dev/null +++ b/docs/examples/confirm-delete/Dialog.vue @@ -0,0 +1,57 @@ + + + + + + {{ message }} + + + Confirm + Cancel + + + + + + diff --git a/docs/examples/confirm-delete/index.ts b/docs/examples/confirm-delete/index.ts new file mode 100644 index 00000000..a63b5812 --- /dev/null +++ b/docs/examples/confirm-delete/index.ts @@ -0,0 +1,3 @@ +export { default as ConfirmApp } from './App.vue?raw' +export { default as ConfirmDialog } from './Dialog.vue?raw' +export { default as useDialog } from './useDialog.js?raw' diff --git a/docs/examples/confirm-delete/useDialog.js b/docs/examples/confirm-delete/useDialog.js new file mode 100644 index 00000000..6147b07e --- /dev/null +++ b/docs/examples/confirm-delete/useDialog.js @@ -0,0 +1,29 @@ +import { ref } from 'vue' + +const isVisible = ref(false) +const message = ref('') +let resolveCallback + +export function useDialogState() { + return { + isVisible, + message, + resolve: (value) => { + if (resolveCallback) { + resolveCallback(value) + } + }, + } +} + +export function useDialog() { + return { + confirm(msg) { + isVisible.value = true + message.value = msg + return new Promise((resolve) => { + resolveCallback = resolve + }) + }, + } +} diff --git a/docs/examples/index.ts b/docs/examples/index.ts index 859496b6..86bac902 100644 --- a/docs/examples/index.ts +++ b/docs/examples/index.ts @@ -20,6 +20,7 @@ import { NodeResizerApp, ResizableNode } from './node-resizer' import { ToolbarApp, ToolbarNode } from './node-toolbar' import { LayoutApp, LayoutEdge, LayoutElements, LayoutIcon, LayoutNode, useLayout, useRunProcess, useShuffle } from './layout' import { MathApp, MathCSS, MathElements, MathIcon, MathOperatorNode, MathResultNode, MathValueNode } from './math' +import { ConfirmApp, ConfirmDialog, useDialog } from './confirm-delete' export const exampleImports = { basic: { @@ -150,4 +151,9 @@ export const exampleImports = { 'style.css': MathCSS, 'initial-elements.js': MathElements, }, + confirmDelete: { + 'App.vue': ConfirmApp, + 'Dialog.vue': ConfirmDialog, + 'useDialog.js': useDialog, + }, } diff --git a/docs/src/.vitepress/config.mts b/docs/src/.vitepress/config.mts index 4832f6f2..5dd642c7 100644 --- a/docs/src/.vitepress/config.mts +++ b/docs/src/.vitepress/config.mts @@ -208,6 +208,7 @@ export default defineConfigWithTheme({ { text: 'Save & Restore', link: '/examples/save' }, { text: 'Math Operation Flow', link: '/examples/math' }, { text: 'Screenshot', link: '/examples/screenshot' }, + { text: 'Confirm Delete', link: '/examples/confirm' }, { text: 'Node Visibility', link: '/examples/hidden' }, { text: 'Node Intersections', link: '/examples/intersection' }, { text: 'Multiple Flows', link: '/examples/multi' }, diff --git a/docs/src/examples/confirm.md b/docs/src/examples/confirm.md new file mode 100644 index 00000000..42ad42a1 --- /dev/null +++ b/docs/src/examples/confirm.md @@ -0,0 +1,9 @@ +# Confirm Delete + +Sometimes you want to confirm a delete action before it happens. Here's how you can do that with a simple dialog. + +This example also demonstrates how to take-over the application of changes to the graph. This is useful when you want to confirm changes before they are applied. + + + + diff --git a/examples/vite/router.ts b/examples/vite/router.ts index 9e8a9f58..a1f4180b 100644 --- a/examples/vite/router.ts +++ b/examples/vite/router.ts @@ -134,6 +134,10 @@ export const routes: RouterOptions['routes'] = [ path: '/screenshot', component: () => import('./src/Screenshot/ScreenshotExample.vue'), }, + { + path: '/confirm-delete', + component: () => import('./src/ConfirmDelete/ConfirmDeleteExample.vue'), + }, ] export const router = createRouter({ diff --git a/examples/vite/src/ConfirmDelete/ConfirmDeleteExample.vue b/examples/vite/src/ConfirmDelete/ConfirmDeleteExample.vue new file mode 100644 index 00000000..86c38245 --- /dev/null +++ b/examples/vite/src/ConfirmDelete/ConfirmDeleteExample.vue @@ -0,0 +1,69 @@ + + + + + + + + + diff --git a/examples/vite/src/ConfirmDelete/Dialog.vue b/examples/vite/src/ConfirmDelete/Dialog.vue new file mode 100644 index 00000000..667242e3 --- /dev/null +++ b/examples/vite/src/ConfirmDelete/Dialog.vue @@ -0,0 +1,57 @@ + + + + + + {{ message }} + + + Confirm + Cancel + + + + + + diff --git a/examples/vite/src/ConfirmDelete/useDialog.ts b/examples/vite/src/ConfirmDelete/useDialog.ts new file mode 100644 index 00000000..3cf031db --- /dev/null +++ b/examples/vite/src/ConfirmDelete/useDialog.ts @@ -0,0 +1,30 @@ +import { ref } from 'vue' + +const isVisible = ref(false) +const message = ref('') +let resolveCallback: (value: boolean) => void + +export function useDialogState() { + return { + isVisible, + message, + resolve: (value: boolean) => { + if (resolveCallback) { + resolveCallback(value) + } + }, + } +} + +export function useDialog(opts: { message?: string }) { + message.value = opts.message || 'Are you sure?' + + return { + confirm(): Promise { + isVisible.value = true + return new Promise((resolve) => { + resolveCallback = resolve + }) + }, + } +} diff --git a/examples/vite/src/CustomNode/ColorSelectorNode.vue b/examples/vite/src/CustomNode/ColorSelectorNode.vue index f4bd0bf1..411d7e32 100644 --- a/examples/vite/src/CustomNode/ColorSelectorNode.vue +++ b/examples/vite/src/CustomNode/ColorSelectorNode.vue @@ -26,7 +26,11 @@ export default { - + + + + + Custom Color Picker Node: {{ data.color }}
{{ message }}