From 7f03c1800742bb2f08adff865ace13e87af03547 Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Mon, 27 Nov 2023 22:49:53 +0700 Subject: [PATCH] UBERF-4413: Kanban with huge data sets (#4076) Signed-off-by: Andrey Sobolev --- packages/kanban/src/components/Kanban.svelte | 47 +++- .../kanban/src/components/KanbanRow.svelte | 118 +++++--- .../src/components/KanbanView.svelte | 38 ++- .../src/components/kanban/KanbanView.svelte | 251 +++++++++--------- plugins/task-resources/src/index.ts | 1 + plugins/task-resources/src/utils.ts | 84 ++++++ .../src/components/issues/KanbanView.svelte | 208 ++++++++------- plugins/view-resources/src/plugin.ts | 1 - plugins/view-resources/src/utils.ts | 56 ++++ plugins/view/src/index.ts | 3 +- 10 files changed, 513 insertions(+), 294 deletions(-) create mode 100644 plugins/task-resources/src/utils.ts diff --git a/packages/kanban/src/components/Kanban.svelte b/packages/kanban/src/components/Kanban.svelte index 256f668427..6a19f658c1 100644 --- a/packages/kanban/src/components/Kanban.svelte +++ b/packages/kanban/src/components/Kanban.svelte @@ -13,16 +13,33 @@ // limitations under the License. --> -{#each limitedObjects as object, i (object._id)} - {@const dragged = isDragging && object._id === dragCard?._id} - -
{ - cardDragOver(evt, object) - }} - on:drop|preventDefault={(evt) => { - cardDrop(evt, object) - }} - > +{#each stateObjects as objectRef, i (objectRef._id)} + {@const dragged = isDragging && objectRef._id === dragCard?._id} + {@const object = limitedObjects.get(objectRef._id) ?? (objectRef._id === dragCard?._id ? dragCard : undefined)} + {#if object !== undefined} +
dispatch('obj-focus', object))} - on:mouseenter={mouseAttractor(() => dispatch('obj-focus', object))} - on:focus={() => {}} - on:contextmenu={(evt) => { - showMenu(evt, object) + bind:this={stateRefs[i]} + transition:slideD|local={{ isDragging }} + class="p-1 flex-no-shrink border-radius-1 clear-mins" + on:dragover|preventDefault={(evt) => { + cardDragOver(evt, object) }} - draggable={true} - class:draggable={true} - on:dragstart - on:dragend - class:dragged - on:dragstart={() => { - onDragStart(object, state) - }} - on:dragend={() => { - isDragging = false + on:drop|preventDefault={(evt) => { + cardDrop(evt, object) }} > - - - +
dispatch('obj-focus', object))} + on:mouseenter={mouseAttractor(() => dispatch('obj-focus', object))} + on:focus={() => {}} + on:contextmenu={(evt) => { + showMenu(evt, object) + }} + draggable={true} + class:draggable={true} + on:dragstart + on:dragend + class:dragged + on:dragstart={() => { + onDragStart(object, state) + }} + on:dragend={() => { + isDragging = false + }} + > + + + +
-
+ {/if} {/each} -{#if stateObjects.length > limitedObjects.length} +{#if stateObjects.length > limitedObjects.size + (isDragging ? 1 : 0)}
- {limitedObjects.length} / {stateObjects.length} + {limitedObjects.size} / {stateObjects.length}