|
@@ -1,19 +1,22 @@
|
|
|
from __future__ import annotations
|
|
|
|
|
|
-from typing import Optional
|
|
|
+from typing import Callable, Optional
|
|
|
|
|
|
from nicegui import ui
|
|
|
|
|
|
+dragged: Optional[card] = None
|
|
|
+
|
|
|
|
|
|
class column(ui.column):
|
|
|
|
|
|
- def __init__(self, name: str) -> None:
|
|
|
+ def __init__(self, name: str, on_drop: Callable = None) -> None:
|
|
|
super().__init__()
|
|
|
with self.classes('bg-grey-5 w-60 p-4 rounded shadow-2'):
|
|
|
ui.label(name).classes('text-bold ml-1')
|
|
|
self.on('dragover.prevent', self.highlight)
|
|
|
self.on('dragleave', self.unhighlight)
|
|
|
self.on('drop', self.move_card)
|
|
|
+ self.on_drop = on_drop
|
|
|
|
|
|
def highlight(self) -> None:
|
|
|
self.classes(add='bg-grey-2')
|
|
@@ -22,14 +25,16 @@ class column(ui.column):
|
|
|
self.classes(remove='bg-grey-2')
|
|
|
|
|
|
def move_card(self) -> None:
|
|
|
+ global dragged
|
|
|
self.unhighlight()
|
|
|
- card.dragged.parent_slot.parent.remove(card.dragged)
|
|
|
+ dragged.parent_slot.parent.remove(dragged)
|
|
|
with self:
|
|
|
- card(card.dragged.text)
|
|
|
+ card(dragged.text)
|
|
|
+ self.on_drop(dragged)
|
|
|
+ dragged = None
|
|
|
|
|
|
|
|
|
class card(ui.card):
|
|
|
- dragged: Optional[card] = None
|
|
|
|
|
|
def __init__(self, text: str) -> None:
|
|
|
super().__init__()
|
|
@@ -39,4 +44,5 @@ class card(ui.card):
|
|
|
self.on('dragstart', self.handle_dragstart)
|
|
|
|
|
|
def handle_dragstart(self) -> None:
|
|
|
- card.dragged = self
|
|
|
+ global dragged
|
|
|
+ dragged = self
|