Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
'type': 'button',
'command': '--move-first',
'commandfor': 'DYNAMICALLY_SET_BY_JS',
'data-close-popover-on-click': 'true',
}
}) }}
{{ rz_dropdown_menu.item({
Expand All @@ -43,6 +44,7 @@
'type': 'button',
'command': '--move-last',
'commandfor': 'DYNAMICALLY_SET_BY_JS',
'data-close-popover-on-click': 'true',
}
}) }}
{%- endif -%}
Expand All @@ -59,6 +61,7 @@
'type': 'button',
'command': '--copy',
'commandfor': 'DYNAMICALLY_SET_BY_JS',
'data-close-popover-on-click': 'true',
}
}) }}
{{ rz_dropdown_menu.item({
Expand All @@ -68,6 +71,7 @@
'type': 'button',
'command': '--paste-inside',
'commandfor': 'DYNAMICALLY_SET_BY_JS',
'data-close-popover-on-click': 'true',
disabled: 'true',
}
}) }}
Expand All @@ -78,6 +82,7 @@
'type': 'button',
'command': '--paste-after',
'commandfor': 'DYNAMICALLY_SET_BY_JS',
'data-close-popover-on-click': 'true',
disabled: 'true',
}
}) }}
Expand All @@ -88,6 +93,7 @@
'type': 'button',
'command': '--duplicate',
'commandfor': 'DYNAMICALLY_SET_BY_JS',
'data-close-popover-on-click': 'true',
}
}) }}
</menu>
Expand All @@ -106,6 +112,7 @@
'data-status': "visible",
'data-value': "0",
'type': "button",
'data-close-popover-on-click': 'true',
}
}) }}
{% else %}
Expand All @@ -119,6 +126,7 @@
'data-status': "visible",
'data-value': "1",
'type': "button",
'data-close-popover-on-click': 'true',
}
}) }}
{% endif %}
Expand All @@ -132,6 +140,7 @@
'data-status': "status",
'data-value': "publish",
'type': "button",
'data-close-popover-on-click': 'true',
}
}) }}
{% elseif node.published and workflow_can(node, 'reject') %}
Expand All @@ -144,6 +153,7 @@
'data-status': "status",
'data-value': "reject",
'type': "button",
'data-close-popover-on-click': 'true',
}
}) }}
{% endif %}
Expand Down
78 changes: 51 additions & 27 deletions lib/Rozier/app/custom-elements/RzNodeTreeContextualMenu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@ type UpdatePayloadDict = Record<string, string | number | boolean | null>
export default class RzNodeTreeContextualMenu extends HTMLElement {
popoverInstance: Popover | null = null

private hidePopover() {
const popover = this.popoverElement as unknown as {
hidePopover?: () => void
} | null
popover?.hidePopover?.()
}

private closePopoverIfRequested(source: HTMLElement | null) {
if (!source) return
if (source.getAttribute('data-close-popover-on-click') !== 'true') {
return
}

this.hidePopover()
}

static get observedAttributes() {
return [...ATTRIBUTES_OPTIONS]
}
Expand Down Expand Up @@ -163,28 +179,32 @@ export default class RzNodeTreeContextualMenu extends HTMLElement {

window.dispatchEvent(new CustomEvent('requestLoaderShow'))

switch (event.command) {
case '--duplicate':
await this.duplicateNode()
break
case '--copy':
this.copyNode()
break
case '--paste-inside':
await this.pasteInsideNode()
break
case '--paste-after':
await this.pasteAfterNode()
break
case '--update-status':
await this.changeStatus(event)
break
case '--move-first':
await this.moveNodeToPosition('first', event)
break
case '--move-last':
await this.moveNodeToPosition('last', event)
break
try {
switch (event.command) {
case '--duplicate':
await this.duplicateNode()
break
case '--copy':
this.copyNode()
break
case '--paste-inside':
await this.pasteInsideNode()
break
case '--paste-after':
await this.pasteAfterNode()
break
case '--update-status':
await this.changeStatus(event)
break
case '--move-first':
await this.moveNodeToPosition('first', event)
break
case '--move-last':
await this.moveNodeToPosition('last', event)
break
}
} finally {
this.closePopoverIfRequested(event.source)
}
}

Expand Down Expand Up @@ -283,14 +303,18 @@ export default class RzNodeTreeContextualMenu extends HTMLElement {
window.dispatchEvent(new CustomEvent('requestLoaderShow'))

const nodeTreeElement = (event.currentTarget as HTMLElement).closest(
'.nodetree-element',
'.nodetree-element, .rz-tree__item',
)

const parentNodeId = parseInt(
const parentNodeTreeElement =
nodeTreeElement
.closest('ul')
?.getAttribute('data-parent-node-id') || '',
)
?.closest('ul')
?.getAttribute('data-parent-node-id') ??
nodeTreeElement?.closest('ul')?.getAttribute('data-parent-id')

const parentNodeId = parentNodeTreeElement
? parseInt(parentNodeTreeElement)
: null

const postData: UpdatePayloadDict = {
csrfToken: window.RozierConfig.ajaxToken,
Expand Down
Loading