Skip to content

refactor: align all inputs to use same CSS for styling #793

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Sep 30, 2019
4 changes: 3 additions & 1 deletion packages/main/src/DatePicker.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@
<ui5-icon
slot="icon"
src="sap-icon://appointment-2"
class="{{classes.icon}} ui5-datepicker-icon"
tabindex="-1"
accessible-name="{{openIconTitle}}"
show-tooltip
@click="{{togglePicker}}"
input-icon
?pressed="{{_isPickerOpen}}"
dir="{{dir}}"
></ui5-icon>
{{/unless}}
</ui5-input>
Expand Down
13 changes: 5 additions & 8 deletions packages/main/src/DatePicker.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import CalendarType from "@ui5/webcomponents-base/dist/dates/CalendarType.js";
import CalendarDate from "@ui5/webcomponents-base/dist/dates/CalendarDate.js";
import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
import { isShow } from "@ui5/webcomponents-base/dist/events/PseudoEvents.js";
import { getRTL } from "@ui5/webcomponents-base/dist/config/RTL.js";
import "./icons/appointment-2.js";
import { fetchI18nBundle, getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
import { DATEPICKER_OPEN_ICON_TITLE, DATEPICKER_DATE_ACC_TEXT } from "./generated/i18n/i18n-defaults.js";
Expand Down Expand Up @@ -419,6 +420,10 @@ class DatePicker extends UI5Element {
return this.i18nBundle.getText(DATEPICKER_DATE_ACC_TEXT);
}

get dir() {
return getRTL() ? "rtl" : "ltr";
}

_getPopover() {
return this.shadowRoot.querySelector("ui5-popover");
}
Expand Down Expand Up @@ -539,14 +544,6 @@ class DatePicker extends UI5Element {
return this.getFormat().parse(this.value);
}

get classes() {
return {
icon: {
"ui5-datepicker-icon--pressed": this._isPickerOpen,
},
};
}

get styles() {
return {
main: {
Expand Down
65 changes: 37 additions & 28 deletions packages/main/src/MultiComboBox.hbs
Original file line number Diff line number Diff line change
@@ -1,37 +1,46 @@
<div class="ui5-multi-combobox-root">
<ui5-input id="ui5-multi-combobox-input"
<div class="ui5-multi-combobox-root"
@focusin={{rootFocusIn}}
@focusout={{rootFocusOut}}
>
<ui5-tokenizer slot="_beginContent"
show-more
class="ui5-multi-combobox-tokenizer"
?disabled="{{disabled}}"
@ui5-showMoreItemsPress="{{_showMorePopover}}"
@ui5-tokenDelete="{{_tokenDelete}}"
@focusout="{{_tokenizerFocusOut}}"
?expanded="{{expandedTokenizer}}"
>
{{#each items}}
{{#if this.selected}}
<ui5-token ?readonly="{{../readonly}}" class="ui5-multi-combobox-token" data-ui5-id="{{this._id}}" >{{this.textContent}}</ui5-token>
{{/if}}
{{/each}}
</ui5-tokenizer>

<input id="ui5-multi-combobox-input"
value="{{value}}"
placeholder="{{placeholder}}"
?disabled={{disabled}}
?readonly={{readonly}}
value-state="{{valueState}}"
@ui5-input="{{_inputLiveChange}}"
@ui5-change={{_inputChange}}
@keydown="{{_keydown}}">

<ui5-tokenizer slot="_beginContent"
show-more
class="ui5-multi-combobox-tokenizer"
?disabled="{{disabled}}"
@ui5-showMoreItemsPress="{{_showMorePopover}}"
@ui5-tokenDelete="{{_tokenDelete}}"
@focusout="{{_tokenizerFocusOut}}"
>
{{#each items}}
{{#if this.selected}}
<ui5-token ?readonly="{{../readonly}}" class="ui5-multi-combobox-token" data-ui5-id="{{this._id}}" >{{this.textContent}}</ui5-token>
{{/if}}
{{/each}}
</ui5-tokenizer>
@input="{{_inputLiveChange}}"
@change={{_inputChange}}
@keydown="{{_keydown}}"
@focusin="{{_focusin}}"
@focusout="{{_focusout}}">
</input>

{{#unless readonly}}
<ui5-icon src="sap-icon://slim-arrow-down"
slot="icon"
@click={{_showAllItemsPopover}}
class="{{classes.icon}}"
></ui5-icon>
{{/unless}}
</ui5-input>
{{#unless readonly}}
<ui5-icon src="sap-icon://slim-arrow-down"
input-icon
slot="icon"
tabindex="-1"
@click={{_showAllItemsPopover}}
?pressed="{{_iconPressed}}"
dir="{{dir}}"
></ui5-icon>
{{/unless}}

<ui5-popover
class="ui5-multi-combobox-selected-items-popover"
Expand Down
91 changes: 74 additions & 17 deletions packages/main/src/MultiComboBox.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
import { isShow, isDown } from "@ui5/webcomponents-base/dist/events/PseudoEvents.js";
import { isShow, isDown, isBackSpace } from "@ui5/webcomponents-base/dist/events/PseudoEvents.js";
import "./icons/slim-arrow-down.js";
import { getRTL } from "@ui5/webcomponents-base/dist/config/RTL.js";
import MultiComboBoxTemplate from "./generated/templates/MultiComboBoxTemplate.lit.js";
import Input from "./Input.js";
import Tokenizer from "./Tokenizer.js";
Expand Down Expand Up @@ -119,6 +120,14 @@ const metadata = {
type: Boolean,
},

/**
* Indicates whether the input is focssed
* @private
*/
focused: {
type: Boolean,
},

_filteredItems: {
type: Object,
},
Expand All @@ -127,6 +136,14 @@ const metadata = {
type: Boolean,
noAttribute: true,
},

/**
* Indicates whether the tokenizer is expanded or collapsed(shows the n more label)
* @private
*/
expandedTokenizer: {
type: Boolean,
},
},
events: /** @lends sap.ui.webcomponents.main.MultiComboBox.prototype */ {
/**
Expand Down Expand Up @@ -234,6 +251,7 @@ class MultiComboBox extends UI5Element {
this._filteredItems = [];
this._inputLastValue = "";
this._deleting = false;
this._validationTimeout = null;
}

_inputChange() {
Expand All @@ -246,6 +264,12 @@ class MultiComboBox extends UI5Element {

_showAllItemsPopover() {
this._togglePopover(false);

this._inputDom.focus();
}

get _inputDom() {
return this.shadowRoot.querySelector("#ui5-multi-combobox-input");
}

_inputLiveChange(event) {
Expand All @@ -254,12 +278,17 @@ class MultiComboBox extends UI5Element {
const filteredItems = this._filterItems(value);
const oldValueState = this.valueState;

if (this._validationTimeout) {
return;
}

if (!filteredItems.length && value && !this.allowCustomValues) {
input.value = this._inputLastValue;
input.valueState = "Error";
this.valueState = "Error";

setTimeout(() => {
input.valueState = oldValueState;
this._validationTimeout = setTimeout(() => {
this.valueState = oldValueState;
this._validationTimeout = null;
}, 2000);
return;
}
Expand Down Expand Up @@ -296,11 +325,10 @@ class MultiComboBox extends UI5Element {

if (tokensCount === 0 && this._deleting) {
setTimeout(() => {
this.shadowRoot.querySelector("ui5-input").focus();
this.shadowRoot.querySelector("input").focus();
this._deleting = false;
}, 0);
}

this._deleting = false;
}

_keydown(event) {
Expand All @@ -315,6 +343,19 @@ class MultiComboBox extends UI5Element {
list._itemNavigation.current = 0;
list.items[0].focus();
}

if (isBackSpace(event) && event.target.value === "") {
event.preventDefault();

const lastTokenIndex = this._tokenizer.tokens.length - 1;

if (lastTokenIndex < 0) {
return;
}

this._tokenizer.tokens[lastTokenIndex].focus();
this._tokenizer._itemNav.currentIndex = lastTokenIndex;
}
}

_filterItems(value) {
Expand Down Expand Up @@ -360,6 +401,14 @@ class MultiComboBox extends UI5Element {
popover && popover.openBy(this);
}

_focusin() {
this.focused = true;
}

_focusout() {
this.focused = false;
}

onBeforeRendering() {
this._inputLastValue = this.value;

Expand All @@ -371,7 +420,7 @@ class MultiComboBox extends UI5Element {
morePopover && morePopover.close();
}

const input = this.shadowRoot.querySelector("ui5-input");
const input = this.shadowRoot.querySelector("input");

if (input && !input.value) {
this._filteredItems = this.items;
Expand All @@ -381,22 +430,30 @@ class MultiComboBox extends UI5Element {
this._filteredItems = filteredItems;
}

get _tokenizer() {
return this.shadowRoot.querySelector("ui5-tokenizer");
}

rootFocusIn() {
this.expandedTokenizer = true;
}

rootFocusOut(event) {
if (!this.shadowRoot.contains(event.relatedTarget) && !this._deleting) {
this.expandedTokenizer = false;
}
}

get editable() {
return !this.readonly;
}

get selectedItemsListMode() {
return this.readonly ? "None" : "MultiSelect";
get dir() {
return getRTL() ? "rtl" : "ltr";
}

get classes() {
return {
icon: {
[`ui5-multi-combobox-icon-root-pressed`]: this._iconPressed,
[`ui5-multi-combobox-icon`]: true,
},
};
get selectedItemsListMode() {
return this.readonly ? "None" : "MultiSelect";
}

static async define(...params) {
Expand Down
11 changes: 7 additions & 4 deletions packages/main/src/Select.hbs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<div
class="ui5-select-root"
tabindex="{{tabIndex}}"
dir="{{rtl}}"
dir="{{dir}}"
@keydown="{{_keydown}}"
@keyup="{{_keyup}}"
@focusin="{{onfocusin}}"
Expand Down Expand Up @@ -33,10 +33,13 @@
</ui5-popover>
{{/if}}

<div class="ui5-select-icon-root" @click="{{_togglePopover}}">
<ui5-icon src="sap-icon://slim-arrow-down" class="ui5-select-icon"
<ui5-icon
@click="{{_togglePopover}}"
src="sap-icon://slim-arrow-down"
input-icon
?pressed="{{_iconPressed}}"
dir="{{dir}}"
></ui5-icon>
</div>

<slot name="formSupport"></slot>
</div>
17 changes: 15 additions & 2 deletions packages/main/src/Select.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,11 @@ const metadata = {
noAttribute: true,
},

_iconPressed: {
type: Boolean,
noAttribute: true,
},

/**
* @private
*/
Expand Down Expand Up @@ -312,6 +317,8 @@ class Select extends UI5Element {
}

_applyFocusAfterOpen() {
this._toggleIcon();

if (!this._currentlySelectedOption) {
return;
}
Expand Down Expand Up @@ -371,6 +378,8 @@ class Select extends UI5Element {
}

_afterClose() {
this._toggleIcon();

if (this._escapePressed) {
this._select(this._selectedIndexBeforeOpen);
this._escapePressed = false;
Expand All @@ -380,6 +389,10 @@ class Select extends UI5Element {
}
}

_toggleIcon() {
this._iconPressed = !this._iconPressed;
}

get _currentSelectedItem() {
return this.shadowRoot.querySelector(`#${this.options[this._selectedIndex]._id}-li`);
}
Expand All @@ -392,8 +405,8 @@ class Select extends UI5Element {
return this.disabled ? "-1" : "0";
}

get rtl() {
return getRTL() ? "rtl" : undefined;
get dir() {
return getRTL() ? "rtl" : "ltr";
}

static async define(...params) {
Expand Down
2 changes: 2 additions & 0 deletions packages/main/src/Token.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ const metadata = {
readonly: { type: Boolean },

_tabIndex: { type: String, defaultValue: "-1", noAttribute: true },

overflows: { type: Boolean },
},

events: /** @lends sap.ui.webcomponents.main.Token.prototype */ {
Expand Down
Loading