Skip to content

Commit a0998d9

Browse files
authored
Merge pull request #16 from integer-net/14/category_selection
#14 minor improvements in scripts and styles related to category_selection
2 parents 5420e02 + e808598 commit a0998d9

2 files changed

Lines changed: 63 additions & 58 deletions

File tree

view/adminhtml/templates/form/field_type/category_selection/crumbs.phtml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ use Magento\Framework\View\Element\Template;
66
/** @var Escaper $escaper */
77
/** @var Template $block */
88
?>
9+
<style>
10+
.admin__action-multiselect-crumb + .admin__action-multiselect-crumb {
11+
margin-left: 1rem;
12+
}
13+
</style>
914
<template x-for="categoryId in selectedCategoryIds" :key="categoryId">
1015
<span class="admin__action-multiselect-crumb"
1116
x-data="CategorySelectionCrumb"
@@ -18,8 +23,7 @@ use Magento\Framework\View\Element\Template;
1823
data-action="remove-selected-item"
1924
tabindex="-1"
2025
@click="removeSelected"
21-
data-bind="click: $parent.removeSelected.bind($parent, value)
22-
">
26+
>
2327
<span class="action-close-text">
2428
<?= $escaper->escapeHtml(__('Close')) ?>
2529
</span>
@@ -38,15 +42,13 @@ use Magento\Framework\View\Element\Template;
3842
this.$nextTick(() => {
3943
this.crumbId = parseFloat(this.root.dataset.id);
4044
});
41-
4245
},
4346
crumbLabel() {
44-
return this.items[this.crumbId]?.label || '';
47+
return this.itemLabel(this.crumbId);
4548
},
4649
removeSelected() {
4750
this.$event.stopPropagation();
4851
this.unselectCategoryId(this.crumbId);
49-
console.log(this.selectedCategoryIds, this.crumbId);
5052
},
5153
};
5254
}

view/adminhtml/templates/form/field_type/category_selection/main_js.phtml

Lines changed: 56 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -32,35 +32,12 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
3232
};
3333

3434
const CategorySelectionHover = {
35-
hoverOnFirstItem() {
36-
const firstHoverItemId = this.hoverSequence[0];
37-
if (firstHoverItemId) {
38-
this.items[firstHoverItemId].hovered = true;
39-
}
40-
},
41-
getHoverSequenceByEventKey(key) {
42-
const currentHoveredItem = this.getCurrentHoverItem();
43-
const sequenceStartIndex = this.hoverSequence.findIndex((seq) => seq === currentHoveredItem.id);
44-
45-
if (sequenceStartIndex === -1) {
46-
return [];
47-
}
48-
49-
if (key === 'ArrowDown') {
50-
return this.hoverSequence.slice(sequenceStartIndex + 1);
51-
}
52-
if (key === 'ArrowUp') {
53-
return this.hoverSequence.slice(0, sequenceStartIndex).reverse();
35+
isItemHovered(id) {
36+
if (!this.items[id]) {
37+
return false;
5438
}
5539

56-
return [];
57-
},
58-
getCurrentHoverItem() {
59-
const currentHoveredItemId = Object.keys(this.items).find((itemId) => {
60-
return this.items[itemId].hovered;
61-
});
62-
63-
return this.items[currentHoveredItemId];
40+
return this.items[id].hovered;
6441
},
6542
keydownSwitcher() {
6643
this.$event.stopPropagation();
@@ -72,15 +49,15 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
7249
this.$nextTick(() => {
7350
this.$el.focus();
7451
});
75-
const currentHoveredItem = this.getCurrentHoverItem();
52+
const currentHoveredItem = this._getCurrentHoverItem();
7653

7754
if (!currentHoveredItem) {
78-
return this.hoverOnFirstItem();
55+
return this._hoverOnFirstItem();
7956
}
8057

8158
let sequenceItemUsed = false;
8259

83-
for (const seqId of this.getHoverSequenceByEventKey(this.$event.key)) {
60+
for (const seqId of this._getHoverSequenceByEventKey(this.$event.key)) {
8461
const item = this.items[seqId];
8562
if (!item) {
8663
continue;
@@ -101,7 +78,7 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
10178
}
10279
currentHoveredItem.hovered = false;
10380
if (!sequenceItemUsed) {
104-
this.hoverOnFirstItem();
81+
this._hoverOnFirstItem();
10582
}
10683
},
10784
updateItemHovered(id, hoverValue) {
@@ -111,12 +88,35 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
11188

11289
this.items[id].hovered = hoverValue;
11390
},
114-
isItemHovered(id) {
115-
if (!this.items[id]) {
116-
return false;
91+
_getHoverSequenceByEventKey(key) {
92+
const currentHoveredItem = this._getCurrentHoverItem();
93+
const sequenceStartIndex = this.hoverSequence.findIndex((seq) => seq === currentHoveredItem.id);
94+
95+
if (sequenceStartIndex === -1) {
96+
return [];
11797
}
11898

119-
return this.items[id].hovered;
99+
if (key === 'ArrowDown') {
100+
return this.hoverSequence.slice(sequenceStartIndex + 1);
101+
}
102+
if (key === 'ArrowUp') {
103+
return this.hoverSequence.slice(0, sequenceStartIndex).reverse();
104+
}
105+
106+
return [];
107+
},
108+
_getCurrentHoverItem() {
109+
const currentHoveredItemId = Object.keys(this.items).find((itemId) => {
110+
return this.items[itemId].hovered;
111+
});
112+
113+
return this.items[currentHoveredItemId];
114+
},
115+
_hoverOnFirstItem() {
116+
const firstHoverItemId = this.hoverSequence[0];
117+
if (firstHoverItemId) {
118+
this.items[firstHoverItemId].hovered = true;
119+
}
120120
},
121121
};
122122

@@ -147,8 +147,8 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
147147
classActionMenu() {
148148
return { _active: this.listVisible };
149149
},
150-
toggleListVisible() {
151-
this.listVisible = !this.listVisible;
150+
itemLabel(id) {
151+
return this.items[id]?.label || '';
152152
},
153153
isTree() {
154154
return true;
@@ -166,6 +166,9 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
166166

167167
return this.items[id].expanded;
168168
},
169+
toggleListVisible() {
170+
this.listVisible = !this.listVisible;
171+
},
169172
toggleItemExpansion(id) {
170173
if (!this.items[id]) {
171174
return;
@@ -195,19 +198,6 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
195198
function CategorySelectItemCommon() {
196199
return {
197200
data: null,
198-
toggleSelection() {
199-
if (!this.data) {
200-
return;
201-
}
202-
this.$event.stopPropagation();
203-
this.toggleItemSelection(this.data.id);
204-
},
205-
isSelected() {
206-
if (!this.data) {
207-
return false;
208-
}
209-
return this.isItemSelected(this.data.id);
210-
},
211201
classActionMenuItem() {
212202
if (!this.data) {
213203
return {};
@@ -221,6 +211,19 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
221211
'_with-checkbox': true,
222212
};
223213
},
214+
isSelected() {
215+
if (!this.data) {
216+
return false;
217+
}
218+
return this.isItemSelected(this.data.id);
219+
},
220+
toggleSelection() {
221+
if (!this.data) {
222+
return;
223+
}
224+
this.$event.stopPropagation();
225+
this.toggleItemSelection(this.data.id);
226+
},
224227
}
225228
}
226229

@@ -239,12 +242,12 @@ $maxTreeLevel = $fieldType->getMaxCategoryLevel($fieldType->getCategoryTree());
239242
get itemId() {
240243
return this.data?.id;
241244
},
242-
classInnerItem() {
243-
return { _parent: this.data.hasChildren };
244-
},
245245
itemLevel() {
246246
return this.data.level;
247247
},
248+
classInnerItem() {
249+
return { _parent: this.data.hasChildren };
250+
},
248251
dataExpanded() {
249252
return this.isItemExpanded(this.itemId) ? 'true' : 'false';
250253
},

0 commit comments

Comments
 (0)