Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(quasar): Allow disabling VCloseDialog and VCloseMenu using value #3407

Merged
merged 4 commits into from Feb 27, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 8 additions & 2 deletions docs/src/examples/CloseDialog/Basic.vue
Expand Up @@ -9,9 +9,14 @@
<span class="q-ml-sm">You are currently not connected to any network.</span>
</q-card-section>

<q-card-section class="row items-center">
<q-toggle v-model="cancelEnabled" label="Cancel button enabled" />
</q-card-section>


<!-- Notice v-close-dialog -->
<q-card-actions align="right">
<q-btn flat label="Cancel" color="primary" v-close-dialog />
<q-btn flat label="Cancel" color="primary" v-close-dialog="cancelEnabled" :disable="!cancelEnabled" />
<q-btn flat label="Turn on Wifi" color="primary" v-close-dialog />
</q-card-actions>
</q-card>
Expand All @@ -23,7 +28,8 @@
export default {
data () {
return {
dialog: false
dialog: false,
cancelEnabled: false,
}
}
}
Expand Down
29 changes: 22 additions & 7 deletions docs/src/examples/CloseMenu/Basic.vue
Expand Up @@ -3,14 +3,22 @@
<q-btn label="Open Menu" color="primary">
<q-menu>
<q-list>
<q-item tag="label">
<q-item-section avatar>
<q-checkbox v-model="firstItemEnabled" />
</q-item-section>
<q-item-section>
<q-item-label>First Item Enabled</q-item-label>
</q-item-section>
</q-item>
<q-item
v-for="n in 5"
:key="n"
v-close-menu
clickable
v-close-menu="n > 1 || firstItemEnabled"
:clickable="n > 1 || firstItemEnabled"
@click="onClick(n)"
>
<q-item-section>Menu Item</q-item-section>
<q-item-section>Menu Item {{n}}</q-item-section>
</q-item>
</q-list>
</q-menu>
Expand All @@ -20,12 +28,19 @@

<script>
export default {
data () {
return {
firstItemEnabled: false
}
},
methods: {
onClick (index) {
this.$q.notify({
message: `Clicked on menu item #${index + 1} and closed QMenu`,
color: 'primary'
})
if (index > 1 || this.firstItemEnabled) {
this.$q.notify({
message: `Clicked on menu item #${index} and closed QMenu`,
color: 'primary'
})
}
}
}
}
Expand Down
7 changes: 6 additions & 1 deletion quasar/dev/components/global/dialog.vue
Expand Up @@ -35,8 +35,12 @@
Lorem ipsum dolor sit amet consectetur adipisicing elit. Rerum repellendus sit voluptate voluptas eveniet porro. Rerum blanditiis perferendis totam, ea at omnis vel numquam exercitationem aut, natus minima, porro labore.
</q-card-section>

<q-card-section>
<q-toggle v-model="preventCloseToggle" label="Prevent closing with button" />
</q-card-section>

<q-card-actions align="right">
<q-btn flat label="OK" color="primary" v-close-dialog />
<q-btn flat label="OK" color="primary" v-close-dialog="!preventCloseToggle" :disable="preventCloseToggle" />
</q-card-actions>
</q-card>
</q-dialog>
Expand Down Expand Up @@ -631,6 +635,7 @@ export default {
sliders: false,

maximizedToggle: true,
preventCloseToggle: false,

address: '',

Expand Down
28 changes: 17 additions & 11 deletions quasar/src/directives/CloseDialog.js
@@ -1,28 +1,34 @@
export default {
name: 'close-dialog',

bind (el, _, vnode) {
const
handler = ev => {
bind (el, { value }, vnode) {
const ctx = {
enabled: value !== false,
handler: ev => {
const vm = vnode.componentInstance.$root

if (vm.__qPortalClose !== void 0) {
if (ctx.enabled !== false && vm.__qPortalClose !== void 0) {
vm.__qPortalClose(ev)
}
},
handlerKey = ev => {
if (ev.keyCode === 13) {
handler(ev)
}
handlerKey: ev => {
ev.keyCode === 13 && ctx.handler(ev)
}
}

if (el.__qclosedialog) {
el.__qclosedialog_old = el.__qclosedialog
}

el.__qclosedialog = { handler, handlerKey }
el.addEventListener('click', handler)
el.addEventListener('keyup', handlerKey)
el.__qclosedialog = ctx
el.addEventListener('click', ctx.handler)
el.addEventListener('keyup', ctx.handlerKey)
},

update (el, { value }) {
if (el.__qclosedialog !== void 0) {
el.__qclosedialog.enabled = value !== false
}
},

unbind (el) {
Expand Down
11 changes: 10 additions & 1 deletion quasar/src/directives/CloseDialog.json
@@ -1 +1,10 @@
{}
{
"value": {
"type": "Boolean",
"desc": "If value is 'false' then directie is disabled, otherwise any other value enables it",
"examples": [
"v-close-dialog",
"v-close-dialog=\"booleanState\""
]
}
}
28 changes: 19 additions & 9 deletions quasar/src/directives/CloseMenu.js
Expand Up @@ -3,22 +3,32 @@ import { closeRootMenu } from '../components/menu/menu-tree.js'
export default {
name: 'close-menu',

bind (el, _, vnode) {
const
handler = () => {
closeRootMenu(vnode.componentInstance.$root.portalParentId)
bind (el, { value }, vnode) {
const ctx = {
enabled: value !== false,

handler: () => {
ctx.enabled !== false && closeRootMenu(vnode.componentInstance.$root.portalParentId)
},
handlerKey = evt => {
evt.keyCode === 13 && handler(evt)

handlerKey: ev => {
ev.keyCode === 13 && ctx.handler(ev)
}
}

if (el.__qclosemenu) {
el.__qclosemenu_old = el.__qclosemenu
}

el.__qclosemenu = { handler, handlerKey }
el.addEventListener('click', handler)
el.addEventListener('keyup', handlerKey)
el.__qclosemenu = ctx
el.addEventListener('click', ctx.handler)
el.addEventListener('keyup', ctx.handlerKey)
},

update (el, { value }) {
if (el.__qclosemenu !== void 0) {
el.__qclosemenu.enabled = value !== false
}
},

unbind (el) {
Expand Down
11 changes: 10 additions & 1 deletion quasar/src/directives/CloseMenu.json
@@ -1 +1,10 @@
{}
{
"value": {
"type": "Boolean",
"desc": "If value is 'false' then directie is disabled, otherwise any other value enables it",
"examples": [
"v-close-menu",
"v-close-menu=\"booleanState\""
]
}
}