github.com/outbrain/consul@v1.4.5/ui-v2/app/controllers/dc/acls/tokens/edit.js (about)

     1  import Controller from '@ember/controller';
     2  import { inject as service } from '@ember/service';
     3  import { get, set } from '@ember/object';
     4  export default Controller.extend({
     5    dom: service('dom'),
     6    builder: service('form'),
     7    isScoped: false,
     8    init: function() {
     9      this._super(...arguments);
    10      this.form = get(this, 'builder').form('token');
    11    },
    12    setProperties: function(model) {
    13      // essentially this replaces the data with changesets
    14      this._super(
    15        Object.keys(model).reduce((prev, key, i) => {
    16          switch (key) {
    17            case 'item':
    18              prev[key] = this.form.setData(prev[key]).getData();
    19              break;
    20            case 'policy':
    21              prev[key] = this.form
    22                .form(key)
    23                .setData(prev[key])
    24                .getData();
    25              break;
    26          }
    27          return prev;
    28        }, model)
    29      );
    30    },
    31    actions: {
    32      sendClearPolicy: function(item) {
    33        set(this, 'isScoped', false);
    34        this.send('clearPolicy');
    35      },
    36      sendCreatePolicy: function(item, policies, success) {
    37        this.send('createPolicy', item, policies, success);
    38      },
    39      refreshCodeEditor: function(selector, parent) {
    40        if (parent.target) {
    41          parent = undefined;
    42        }
    43        get(this, 'dom')
    44          .component(selector, parent)
    45          .didAppear();
    46      },
    47      change: function(e, value, item) {
    48        const form = get(this, 'form');
    49        const event = get(this, 'dom').normalizeEvent(e, value);
    50        try {
    51          form.handleEvent(event);
    52        } catch (err) {
    53          const target = event.target;
    54          switch (target.name) {
    55            case 'policy[isScoped]':
    56              set(this, 'isScoped', !get(this, 'isScoped'));
    57              set(this.policy, 'Datacenters', null);
    58              break;
    59            case 'Policy':
    60              set(value, 'CreateTime', new Date().getTime());
    61              get(this, 'item.Policies').pushObject(value);
    62              break;
    63            case 'Details':
    64              // the Details expander toggle
    65              // only load on opening
    66              if (target.checked) {
    67                this.send('refreshCodeEditor', '.code-editor', target.parentNode);
    68                if (!get(value, 'Rules')) {
    69                  this.send('loadPolicy', value, get(this, 'item.Policies'));
    70                }
    71              }
    72              break;
    73            default:
    74              throw err;
    75          }
    76        }
    77      },
    78    },
    79  });