mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-30 18:17:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import Component from '@ember/component';
 | |
| import { computed } from '@ember/object';
 | |
| import { htmlSafe } from '@ember/template';
 | |
| import layout from '../templates/components/confirm';
 | |
| import { next } from '@ember/runloop';
 | |
| 
 | |
| /**
 | |
|  * @module Confirm
 | |
|  * `Confirm` components prevent users from performing actions they do not intend to by showing a confirmation message as an overlay. This is a contextual component that should always be rendered with a `Message` which triggers the message.
 | |
|  *
 | |
|  * @example
 | |
|  * ```js
 | |
|  * <div class="box">
 | |
|  * <Confirm as |c|>
 | |
|  *   <c.Message
 | |
|  *     @id={{item.id}}
 | |
|  *     @triggerText="Delete"
 | |
|  *     @message="This will permanently delete this secret and all its versions."
 | |
|  *     @onConfirm={{action "delete" item "secret"}}
 | |
|  *     />
 | |
|  * </Confirm>
 | |
|  * </div>
 | |
|  * ```
 | |
|  */
 | |
| 
 | |
| export default Component.extend({
 | |
|   layout,
 | |
|   openTrigger: null,
 | |
|   height: 0,
 | |
|   focusTrigger: null,
 | |
|   style: computed('height', function () {
 | |
|     return htmlSafe(`height: ${this.height}px`);
 | |
|   }),
 | |
|   wormholeReference: null,
 | |
|   wormholeId: computed('elementId', function () {
 | |
|     return `confirm-${this.elementId}`;
 | |
|   }),
 | |
|   didInsertElement() {
 | |
|     this._super(...arguments);
 | |
|     this.set('wormholeReference', this.element.querySelector(`#${this.wormholeId}`));
 | |
|   },
 | |
|   didRender() {
 | |
|     this._super(...arguments);
 | |
|     this.updateHeight();
 | |
|   },
 | |
|   updateHeight: function () {
 | |
|     const height = this.openTrigger
 | |
|       ? this.element.querySelector('.confirm-overlay').clientHeight
 | |
|       : this.element.querySelector('.confirm').clientHeight;
 | |
|     this.set('height', height);
 | |
|   },
 | |
|   actions: {
 | |
|     onTrigger: function (itemId, e) {
 | |
|       this.set('openTrigger', itemId);
 | |
| 
 | |
|       // store a reference to the trigger so we can focus the element
 | |
|       // after clicking cancel
 | |
|       this.set('focusTrigger', e.target);
 | |
|       this.updateHeight();
 | |
|     },
 | |
|     onCancel: function () {
 | |
|       this.set('openTrigger', '');
 | |
|       this.updateHeight();
 | |
| 
 | |
|       next(() => {
 | |
|         this.focusTrigger.focus();
 | |
|         this.set('focusTrigger', null);
 | |
|       });
 | |
|     },
 | |
|   },
 | |
| });
 | 
