@angular-skyhook/core@angular-skyhook/multi-backendThis package does two things.
First, it re-exports dnd-multi-backend, react-dnd-touch-backend and react-dnd-html5-backend.
Second, it gives you a convenient and easy way to render previews when the touch backend is in use.
yarn add @angular-skyhook/multi-backendThen import the module and change your SkyhookDndModule backend to a
backendFactory like so:
import {
SkyhookMultiBackendModule, createDefaultMultiBackend
} from '@angular-skyhook/multi-backend';
@NgModule({
imports: [
// ...,
SkyhookMultiBackendModule,
SkyhookDndModule.forRoot({ backendFactory: createDefaultMultiBackend })
]
})
export class AppModule {}You will want to render previews. The <skyhook-preview> component is very helpful.
<skyhook-preview><ng-template> inside, pulling in the item's type as let-type, and the item as let-item="item".A suggested arrangement is using an [ngSwitch] directive on the type, with one *ngSwitchCase per type.
<skyhook-preview>
<ng-template let-type let-item="item">
<ng-content [ngSwitch]="type">
<div *ngSwitchCase="'TYPE'">{{ item | json }}</div>
<your-component *ngSwitchCase="'OTHER_TYPE'">{{ item | json }}</your-component>
<ng-content *ngSwitchCase="'THIRD_TYPE'">
...
</ng-content>
</ng-content>
</ng-template>
</skyhook-preview>If you don't like putting reusable strings directly in templates, then try this:
// item-types.ts
export const ItemTypes = {
TYPE: 'TYPE',
OTHER_TYPE: 'OTHER_TYPE',
THIRD_TYPE: 'THIRD_TYPE'
};// your-component.ts
import { ItemTypes } from './item-types';
@Component({
template: `
... <div *ngSwitchCase="ItemTypes.OTHER_TYPE"> ... </div>
`
})
export class YourComponent {
// make ItemTypes a property on the class
ItemTypes = ItemTypes;
}Sometimes, it is desirable to render a totally custom drag preview even in desktop browsers. This might be because some browsers only show a small feathered section of a larged dragged element, or just because you want to show something different while an item is in flight. You will need two things:
You can attach an empty image as your drag preview. Simply:
<div [dragSource]="source" [noHTML5Preview]="true"></div>Or:
import { getEmptyImage } from 'react-dnd-html5-backend';
// ...
ngOnInit() {
source.connectDragPreview(getEmptyImage());
}Simply pass allBackends as true to the preview.
<skyhook-preview [allBackends]="true">
...
</skyhook-preview>You can also import anything from dnd-multi-backend and create your own
transitions. Refer to the original documentation, or simply to the autocomplete
through the re-exported types in this package.
Remember that you will need to create an exported function and pass it as a
backendFactory if you want to continue using Angular AOT compilation.