clicked()

in app/assets/javascripts/users_select.js [404:498]


      clicked(options) {
        const { $el, e, isMarking } = options;
        const user = options.selectedObj;

        $el.tooltip('dispose');

        if ($dropdown.hasClass('js-multiselect')) {
          const isActive = $el.hasClass('is-active');
          const previouslySelected = $dropdown
            .closest('.selectbox')
            .find(`input[name='${$dropdown.data('fieldName')}'][value!=0]`);

          // Enables support for limiting the number of users selected
          // Automatically removes the first on the list if more users are selected
          checkMaxSelect();

          if (user.beforeDivider && user.name.toLowerCase() === 'unassigned') {
            // Unassigned selected
            previouslySelected.each((index, element) => {
              element.remove();
            });
            emitSidebarEvent('sidebar.removeAllAssignees');
          } else if (isActive) {
            // user selected
            emitSidebarEvent('sidebar.addAssignee', user);

            // Remove unassigned selection (if it was previously selected)
            const unassignedSelected = $dropdown
              .closest('.selectbox')
              .find(`input[name='${$dropdown.data('fieldName')}'][value=0]`);

            if (unassignedSelected) {
              unassignedSelected.remove();
            }
          } else {
            if (previouslySelected.length === 0) {
              // Select unassigned because there is no more selected users
              this.addInput($dropdown.data('fieldName'), 0, {});
            }

            // User unselected
            emitSidebarEvent('sidebar.removeAssignee', user);
          }

          if (getSelected().find(u => u === gon.current_user_id)) {
            $('.assign-to-me-link').hide();
          } else {
            $('.assign-to-me-link').show();
          }
        }

        const page = $('body').attr('data-page');
        const isIssueIndex = page === 'projects:issues:index';
        const isMRIndex = page === page && page === 'projects:merge_requests:index';
        if (
          $dropdown.hasClass('js-filter-bulk-update') ||
          $dropdown.hasClass('js-issuable-form-dropdown')
        ) {
          e.preventDefault();

          const isSelecting = user.id !== selectedId;
          selectedId = isSelecting ? user.id : selectedIdDefault;

          if (selectedId === gon.current_user_id) {
            $('.assign-to-me-link').hide();
          } else {
            $('.assign-to-me-link').show();
          }
          return;
        }
        if ($el.closest('.add-issues-modal').length) {
          ModalStore.store.filter[$dropdown.data('fieldName')] = user.id;
        } else if (handleClick) {
          e.preventDefault();
          handleClick(user, isMarking);
        } else if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {
          return Issuable.filterResults($dropdown.closest('form'));
        } else if ($dropdown.hasClass('js-filter-submit')) {
          return $dropdown.closest('form').submit();
        } else if (!$dropdown.hasClass('js-multiselect')) {
          const selected = $dropdown
            .closest('.selectbox')
            .find(`input[name='${$dropdown.data('fieldName')}']`)
            .val();
          return assignTo(selected);
        }

        // Automatically close dropdown after assignee is selected
        // since CE has no multiple assignees
        // EE does not have a max-select
        if ($dropdown.data('maxSelect') && getSelected().length === $dropdown.data('maxSelect')) {
          // Close the dropdown
          $dropdown.dropdown('toggle');
        }
      },