Ng2-Dragula: Enable drag at run time

527 Views Asked by At

So, I have this following template.

<div dragula="'card-images'" [dragulaModel]="images">
  <child-component [card]="imageCard" [ngClass]="cssClass(card)" *ngFor="let imageCard of images"></child-component>
</div>

The function cssClass sets the class based on the type of imageCard. So it is set to draggable and non draggable based on the type of image Card. Now, I want the child component to be draggable only if its property isSelected is true only after long press and this is done dynamically. How can I achieve this ? How to make child component draggable at run time ?

Thank you.

1

There are 1 best solutions below

0
On BEST ANSWER

You can provide moves function and put the condition when the items should be dragable.

In your case, you can do it two steps -

1. Add the class to element on the property based.

<child-component [ngClass]="{'no-drag' : card.selected != true}"></child-component>

2. drag element if doesn't have the class no-drag.

  constructor(private dragulaService: DragulaService) {
      dragulaService.setOptions('card-images', {
        moves: (el, source, handle, sibling) => !el.classList.contains('no-drag')
      });
    }