Skip to content

Commit

Permalink
ELEMENTS-1672: Apply text-overflow and tooltip to multiple selected i…
Browse files Browse the repository at this point in the history
…tems in nuxeo-selectivity
  • Loading branch information
alokhyland committed Jun 19, 2024
1 parent a668257 commit b64410d
Showing 1 changed file with 71 additions and 7 deletions.
78 changes: 71 additions & 7 deletions ui/widgets/nuxeo-selectivity.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import { html } from '@polymer/polymer/lib/utils/html-tag.js';
import { mixinBehaviors } from '@polymer/polymer/lib/legacy/class.js';
import {I18nBehavior} from "../nuxeo-i18n-behavior";
import '@polymer/iron-icon/iron-icon.js';
import { IronResizableBehavior } from '@polymer/iron-resizable-behavior/iron-resizable-behavior.js';
import './nuxeo-tooltip.js';

/**
* @license
Expand Down Expand Up @@ -2440,7 +2442,6 @@ typedArrayTags[weakMapTag] = false;
} else if (!resultsHtml && !options.add) {
resultsHtml = this.selectivity.template('noResults', { term: options.term });
}

if (resultsHtml) {
this.resultsContainer.innerHTML = '';
removeElement(this.$('.selectivity-loading'));
Expand Down Expand Up @@ -3429,10 +3430,43 @@ typedArrayTags[weakMapTag] = false;
item,
),
));

this.input.parentNode.insertBefore(el, this.input);
const textElement = el.querySelector('.multipleSelectedItemText');
if(textElement){
const containerElement = this._getHTMLRootNode(textElement)
let containerElementWidth = this._calculateElementWidth(containerElement)
const childNodes = Array.from(textElement.children);
const otherElementWidth = childNodes.reduce((totalWidth, currentValue) => {
if (currentValue !== this && !currentValue.shadowRoot) {
totalWidth += currentValue.offsetWidth;
}
return totalWidth;
}, 1);
containerElementWidth -= otherElementWidth ;
el.setAttribute('style', `max-width:${containerElementWidth}px`);
}

},

_getHTMLRootNode(element){
let currentElement = element;
const parentElement = currentElement.closest(".selectivity-multiple-input-container")
return parentElement;
},



_calculateElementWidth(element){
const currrentElement = getComputedStyle(element);
const paddingX = parseFloat(currrentElement.paddingLeft) + parseFloat(currrentElement.paddingRight);
const borderX = parseFloat(currrentElement.borderLeftWidth) + parseFloat(currrentElement.borderRightWidth);
const scrollBarWidth = element.offsetWidth - element.clientWidth;
const elementWidth = (element .offsetWidth - paddingX - borderX - scrollBarWidth -2) ;
return elementWidth
},


/**
* @private
*/
Expand Down Expand Up @@ -6583,7 +6617,7 @@ typedArrayTags[weakMapTag] = false;
* @demo demo/nuxeo-selectivity/index.html
*/
class SelectivityElement
extends mixinBehaviors([I18nBehavior, IronFormElementBehavior, IronValidatableBehavior], Nuxeo.Element) {
extends mixinBehaviors([I18nBehavior, IronFormElementBehavior, IronValidatableBehavior, IronResizableBehavior], Nuxeo.Element) {

static get is() {
return 'nuxeo-selectivity';
Expand Down Expand Up @@ -7108,6 +7142,11 @@ typedArrayTags[weakMapTag] = false;
height: 2px;
background-color: var(--nuxeo-primary-color, #0066ff);
}
.selectivity-text-container {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
<nuxeo-operation id="op" op="[[operation]]" enrichers="[[enrichers]]" headers="[[headers]]"></nuxeo-operation>
Expand Down Expand Up @@ -7171,10 +7210,18 @@ typedArrayTags[weakMapTag] = false;

multipleSelectedItem: (opts) => {
const extraClass = opts.highlighted ? ' highlighted' : '';
return `<span class="selectivity-multiple-selected-item${extraClass}"
data-item-id="${escapeHTML(opts.id)}">${opts.removable ?
const toolTipElement = `<nuxeo-tooltip position="top" offset="0" animation-delay="0">
${this.selectionFormatter(opts.item || opts)}
</nuxeo-tooltip>`;
return (`<span class="selectivity-multiple-selected-item${extraClass} selectivity-text-container"
data-item-id="${escapeHTML(opts.id)}">
<span class="multipleSelectedItemText">
${opts.removable ?
`<a class="preserve-white-space selectivity-multiple-selected-item-remove"><span class="selectivity-remove" role="button" aria-label="${this.i18n('command.remove')}"></span></a>`
: ``}${this.selectionFormatter(opts.item || opts)}</span>`
: ``}${this.selectionFormatter(opts.item || opts)}
</span>
${toolTipElement}
</span>`)
},
},
};
Expand All @@ -7189,6 +7236,7 @@ typedArrayTags[weakMapTag] = false;
options.allowClear = !this.required && !this.multiple; // allowClear only works on single-value mode
}


if (this.data) {
options.items = this._wrap(this.data);
}
Expand Down Expand Up @@ -7265,18 +7313,34 @@ typedArrayTags[weakMapTag] = false;
});
this._visibilityObserver.observe(this);
this._readonlyChanged();
this.multiple && this._scrollParent.addEventListener('dialog-opened',this._reCalculateWidth.bind(this))
this.multiple && this.addEventListener('iron-resize', this._reCalculateWidth);
}



disconnectedCallback() {
this.$.input.removeEventListener('selectivity-change', this._updateSelectionHandler);
this._updateSelectionHandler = null;
this._selectivity.destroy();
this._selectivity = null;
this._visibilityObserver.unobserve(this);
this._scrollParent.removeEventListener('scroll', this._updateDropdownPosition.bind(this));
this.multiple && this._scrollParent.removeEventListener('dialog-opened',this._reCalculateWidth.bind(this))
this.multiple && this.removeEventListener('iron-resize', this._reCalculateWidth);
super.disconnectedCallback();
}


_reCalculateWidth(){
setTimeout(() => {
this.multiple &&
this._selectivity &&
this._selectivity.rerenderSelection();
}, 0);

}

_updateDropdownPosition() {
if (this._selectivity) {
this._selectivity.positionDropdown();
Expand Down Expand Up @@ -7506,4 +7570,4 @@ export function escapeHTML(markup) {
}

return String(markup).replace(/[&<>"'/\\]/g, (match) => replaceMap[match]);
};
};

0 comments on commit b64410d

Please sign in to comment.