Skip to content

Instantly share code, notes, and snippets.

@alexesDev
Created August 3, 2025 03:24
Show Gist options
  • Save alexesDev/b721e2b0d024944d2c142900d9c89dfe to your computer and use it in GitHub Desktop.
Save alexesDev/b721e2b0d024944d2c142900d9c89dfe to your computer and use it in GitHub Desktop.
$mol_drop problem
$redraw_problemdemo $mol_view
sub /
<= drop_x \
<= DropZone $redraw_problemdemo_drop
style *
flex \1
adopt?transfer <=> transfer_adopt?transfer null
receive?obj <=> item_receive?obj null
Sub <= Content $mol_view
sub /
<= DragItem*0 $mol_drag
transfer *
text/plain <= item_plain \item
text/html <= item_html \
text/uri-list <= item_uri \
style *
width \100px
height \100px
background \#F00
border \1px solid #888
sub / \Item
$redraw_problemdemo_drop $mol_drop
namespace $.$$ {
export class $redraw_problemdemo extends $.$redraw_problemdemo {
init_db() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('Saved')
resolve({ db: 'db' })
}, 50)
})
}
@$mol_mem
db() {
return $mol_wire_sync(this).init_db()
}
async save() {
console.log(1)
const db = this.db() // вот тут теряется вызов из-за if event.defaultPrevented
console.log(2)
return new Promise<void>((resolve) => {
setTimeout(() => {
console.log(3)
resolve()
}, 50)
})
}
@$mol_mem
override drop_x(next?: string): string {
return next || `-`
}
override transfer_adopt(transfer: DataTransfer) {
return {
data: transfer.getData('text/plain'),
}
}
override item_receive( obj: any ) {
const { drop_event } = obj
$mol_wire_sync(this).save()
this.drop_x(`${drop_event.clientX}px`)
}
}
export class $redraw_problemdemo_drop extends $.$redraw_problemdemo_drop {
override drop(event: DragEvent) {
if (event.defaultPrevented) { // эта строка ломает вызов save()
return
}
event.preventDefault()
const obj = this.adopt(event.dataTransfer!)
if (!obj) {
return
}
this.receive({ ...obj, drop_event: event }) // это я в своем коде расширял, чтобы координаты получать.
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment