Source: volume/editAccess.js

/**
 * The volume manage access tab functionalities
 * @module
 */

'use strict';

app.directive('volumeEditAccessForm', [
  '$q', '$location', 'constantService', 'modelService', 'messageService', 'displayService',
  function ($q, $location, constants, models, messages, display) {
    var link = function ($scope) {
      var volume = $scope.volume;
      var form = $scope.volumeEditAccessForm;

      form.preset = volume.accessPreset;
      form.data = _.values(volume.access);

      var presetForm = $scope.accessPresetForm;
      var subforms = [];

      $scope.permissionName = function (p) {
        return constants.permission[p];
      };

      function savePreset() {
        if (form.preset == null)
          return;
        form.$setSubmitted();
        var sharefull = false;
        $q.all(constants.accessPreset[form.preset].map(function (a, pi) {
          if (form.preset === 2) {
            sharefull = true;
          }
          volume.accessSave(constants.accessPreset.parties[pi], a, sharefull);
        })).then(function () {
          messages.add({
            body: constants.message('access.preset.save.success'),
            type: 'green',
            owner: form
          });
          form.$setPristine();
        }, function (res) {
          form.$setUnsubmitted();
          messages.addError({
            body: constants.message('access.preset.save.error'),
            report: res,
            owner: form
          });
        });
      }

      form.saveAll = function () {
        messages.clear(form);
        subforms.forEach(function (subform) {
          if (subform.$dirty)
            subform.save(false);
        });
        if (presetForm.$dirty)
          savePreset();
      };

      $scope.$on('accessGrantForm-init', function (event, grantForm) {
        subforms.push(grantForm);

        grantForm.removeSuccessFn = function (access) {
          form.data.remove(access);
          subforms.remove(grantForm);
        };
      });

      $scope.selectFn = function (p) {
        if (form.data.some(function (a) { return a.party.id === p.id; })) {
          display.scrollTo("#access-"+p.id);
        } else {
          form.data.push({
            new: true,
            party: p,
            individual: 0,
            children: 0
          });
          display.scrollTo('fieldset .access-grant:last');
        }
      };

      var p = $location.search().party;
      if (p !== undefined) {
        $location.search('party', null);
        models.Party.get(p).then($scope.selectFn);
      }
    };

    return {
      restrict: 'E',
      templateUrl: 'volume/editAccess.html',
      link: link
    };
  }
]);