Skip to content

Commit ad89d2e

Browse files
committed
Progress drag/drop. Arg.
1 parent 6cc50bd commit ad89d2e

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

src/pg/tree/tree.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,19 @@ export default class PgTree extends HTMLElement {
7373
});*/
7474
}
7575
});
76+
this.addEventListener('itemdragstart', (e: any) => {
77+
const { indexes, callback, ctrlKey, shiftKey } = e.detail;
78+
console.log('testing', indexes);
79+
const item = this.#getItem(indexes);
80+
const unproxyItem = getProxyValue(item);
81+
if (!ctrlKey && this.#selectedIndexes.size) {
82+
this.#selectedIndexes.forEach((x: any) => this.#getItem(x).selected = false);
83+
this.#selectedIndexes.clear();
84+
}
85+
item.selected = true;
86+
this.#selectedIndexes.set(unproxyItem, indexes);
87+
callback(this.#selectedIndexes.size);
88+
});
7689
}
7790

7891
#getItem(indexes: number[]) {

src/pg/treeItem/treeItem.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,7 @@
88
<span part="label"></span>
99
</button>
1010
<div part="actions"></div>
11+
<div part="dropon"></div>
12+
<div part="dropbelow"></div>
1113
</div>
1214
<div part="items"></div>

src/pg/treeItem/treeItem.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,14 @@ export default class PgTreeItem extends HTMLElement {
4747
this.$item.addEventListener('contextmenu', this.#handleContextMenu.bind(this));
4848
this.$input.addEventListener('blur', this.#handleBlur.bind(this));
4949
this.$input.addEventListener('keydown', this.#handleInputKeyDown.bind(this));
50+
// Append Indexes
5051
this.$items.addEventListener('toggle', this.#handleToggle.bind(this));
5152
this.$items.addEventListener('select', this.#handleSelect.bind(this));
5253
this.$items.addEventListener('rename', this.#handleRename.bind(this));
5354
this.$items.addEventListener('up', this.#handleUp.bind(this));
5455
this.$items.addEventListener('down', this.#handleDown.bind(this));
56+
this.$items.addEventListener('itemdragstart', this.#handleItemDragStart.bind(this));
57+
this.$items.addEventListener('itemdragend', this.#handleItemDragEnd.bind(this));
5558
forEach({
5659
container: this.$actions,
5760
items: this.actions,
@@ -307,6 +310,19 @@ export default class PgTreeItem extends HTMLElement {
307310
}
308311

309312
#handleDragStart(event) {
313+
let dragCount = 0;
314+
this.dispatchEvent(new CustomEvent('itemdragstart', {
315+
bubbles: true,
316+
composed: true,
317+
detail: {
318+
ctrlKey: event.ctrlKey,
319+
shiftKey: event.shiftKey,
320+
indexes: [this.index],
321+
callback: (count) => {
322+
dragCount = count;
323+
}
324+
}
325+
}));
310326
this.$item.classList.toggle('dragging', true);
311327
// Generate drag image showing selected item count
312328
const size = window.devicePixelRatio;
@@ -323,7 +339,7 @@ export default class PgTreeItem extends HTMLElement {
323339
const paddingInline = 6;
324340
var ctx = canvas.getContext('2d');
325341
if (ctx) {
326-
const text = '0';
342+
const text = `${dragCount}`;
327343
ctx.font = `bold ${fontSize * size}px Segoe UI`;
328344
const textSize = ctx.measureText(text);
329345
ctx.fillStyle = '#453C4F';
@@ -353,12 +369,25 @@ export default class PgTreeItem extends HTMLElement {
353369
(fontSize + paddingBlock - 2) * size
354370
);
355371
}
356-
357372
event.dataTransfer.setDragImage(canvas, 0, 0);
358373
}
359374

360375
#handleDragEnd(event) {
376+
this.dispatchEvent(new CustomEvent('itemdragend', {
377+
bubbles: true,
378+
composed: true,
379+
detail: { indexes: [this.index] }
380+
}));
361381
this.$item.classList.toggle('dragging', false);
362382
}
363383

384+
385+
#handleItemDragStart(e: any) {
386+
e.detail.indexes.unshift(this.index);
387+
}
388+
389+
#handleItemDragEnd(e: any) {
390+
e.detail.indexes.unshift(this.index);
391+
}
392+
364393
}

0 commit comments

Comments
 (0)