@angular-skyhook/core@angular-skyhook/sortableMake sure you have @angular-skyhook/core and a backend installed, ideally @angular-skyhook/multi-backend. Read the core docs first, and make sure you have a firm grasp on it.
yarn add @angular-skyhook/sortableThen add SkyhookSortableModule where required.
import { SkyhookSortableModule } from '@angular-skyhook/sortable';
@NgModule({
imports: [
// ...
// SkyhookDndModule.forRoot( ... ),
SkyhookSortableModule,
]
})
export class AppModule {}This is different from the hundreds of other sortable libraries, because it is extremely pared back, and makes almost no limiting choices. This is NOT opinionated software.
SortableSpec to define behaviour, much like a DragSourceSpec or DropTargetSpec but abstracted over a whole sortable and all elements in it.@angular-skyhook/core to alter visuals as you see fit.So yes, it's a bit harder to use than, say, ng2-dragula. Does the extra implementation effort pay off? There are so many cool uses, this section needs headings.
DragSource.listen(), so apply your own classes based on isDragging and friends.[dragPreview] or <skyhook-preview>) like any other Skyhook item. Useful for making multi-select. Or axis snapping. Or showing warning messages ('you can't drop that here') alongside your mouse. Go for your life.[dragSource] on something else.mat-tables, or any other list component.[ssExternal]).FormArray or Immutable.js, because the library doesn't care. (Although you can do native but immutable updates with immer instead).@ngrx/store (some helpers make this even easier).@angular-skyhook/core item, returned from beginDrag. In sortables, all these items are DraggedItem objects.<skyhook-preview> from the multi-backend.*ngFor data and index.Hint: The best way to get started is by reading the example code.
Here's a rough guide:
SortableSpec is the data backing interface for your sortable. It defines
the Skyhoook type, what happens when you hover on a new spot, drop an item,
etc. Maybe you want to overwrite a list on a single component, maybe you are
firing @ngrx/store actions. You must implement it according to the
requirements and lifecycle.
For simpler list displays, make a container with <skyhook-sortable-list>
and provide it an <ng-template ssTemplate let-context> for each element.
For more complicated rendering situations, use ssSortable directive
directly, and render an *ngFor inside it, pulling out let i = index as
well.
In both options, for each draggable element, you need an
[ssRender]="context" directive, which you need to get a reference to, and to
finally attach [dragSource]="render.source" somewhere.