There are a number of requirements a SortableSpec implementation must satisfy.
beginDrag, the element you picked up (= transit) must still be
under the mouse;hover, the element you picked up (= transit) must be:item.hover.index in the list identified by
item.hover.listIdThe previews can be anywhere; it is the transit elements that must move,
because they carry the ssRender directives that can produce further
reordering, and if those directives are out of order, your sortable won't make
sense.
The specific meaning of 'at the index' in 2b is that the index property of
the context passed to ssRender is the same as the hover.index on the
item passed to hover(item). In general, this means you will be re-rendering
your list to match, and the NgForOf gives you new indexes.
You are free to implement drop and endDrag as you wish, but they should
probably involve 'save the temporary order' and 'set temporary = saved'
respectively.
The following diagram summarises the calls made to SortableSpec during a drag.
You should not reorder anything within beginDrag. This would probably violate Requirement #1; moreover, it doesn't make any sense.
The particular item that got picked up will be able to react, because
ssRender.isDragging$ will emit true.
You can implement this at the most basic level by setting variables on a
component that isn't OnPush; you could also use RxJS, @ngrx and other more
powerful solutions.