mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-11-04 04:28:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * Copyright (c) HashiCorp, Inc.
 | 
						|
 * SPDX-License-Identifier: MPL-2.0
 | 
						|
 */
 | 
						|
 | 
						|
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);
 | 
						|
      });
 | 
						|
    },
 | 
						|
  },
 | 
						|
});
 |