Socket
Socket
Sign inDemoInstall

ng-reorder

Package Overview
Dependencies
5
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    ng-reorder

Sort elements within a list by using drag-n-drop interface without any restrictions by direction


Version published
Weekly downloads
7
decreased by-50%
Maintainers
1
Install size
372 kB
Created
Weekly downloads
 

Readme

Source

NgReorder

This module provides a way to sort elements within a list by using drag-n-drop interface without any restrictions by direction.

see live example

Instalation

npm install ng-reorder

API

DragUnitDirective

Dragable element
selector: dragUnit

Inputs
InputTypeDefault valueDescription
disabledbooleanfalseAn element will not response for dragging while this property it's true

Outputs

OutputTypeDescription
unitTaken:EventEmitter<UnitTaken>Emits when the dragging sequence successfully started and an element is taken
unitMoved:EventEmitter<UnitMoved>Emits when an element is moved on a page while user is dragging it
unitReleased:EventEmitter<UnitReleased>Emits when an element is being released
DragCollectionDirective

Collection for dragable elements
selector: dragCollection

Inputs
InputTypeDefault valueDescription
disabledbooleanfalseDragging sequence will not starts at all when true
Outputs
OutputTypeDescription
dropCompletedEventEmitter<CollectionSorted>Emits when drag-n-drop sequence is totaly comleted
DragHandleDirective

An element which will start drag sequence in case whether you don't want to use the entire field of DragUnitDirective parent
selector: dragHandle

DragRegectorDirective

An element which will not start drag sequence in case whether you need to exclude some element from that(buttons, inputs, ect.)
selector: dragRejector

Interfaces

UnitTaken
DataTypeDescription
elementDragUnitDirectiveSource element
eventMouseEvent | TouchEventNative event
UnitMoved
DataTypeDescription
elementDragUnitDirectiveSource element
distancePointDistance in pixels from the position where the source element was taken
eventMouseEvent | TouchEventNative event
UnitReleased
DataTypeDescription
elementDragUnitDirectiveSource element
eventMouseEvent | TouchEventNative event
CollectionSorted
DataTypeDescription
collectionDragCollectionDirectiveCollection which contain the source element
elementDragUnitDirectiveSource element
previousIndexnumberOrigin index of the element in the collection
currentIndexnumberNew index of the element where it was moved to within the collection
Point
DataTypeDescription
xnumberPixel's amount along X-axis
ynumberPixel's amount along Y-axis

Usage

  1. Register NgReorderModule in your app module or any module you'd like
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { BrowserModule } from '@angular/platform-browser';
import { NgReorderModule } from 'ng-reorder';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    NgReorderModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
import { Component } from '@angular/core';
import { CollectionSorted, reorderItems } from 'ng-reorder';

@Component({
	selector: 'my-app',
	templateUrl: './app.component.html',
	styleUrls: ['./app.component.scss']
})
export class AppComponent {

	test: Array<number>;

	k: number;

	constructor() {
		this.test = this.getTest(30);
	}

	private getTest(x: number): Array<number> {
		const j = new Array<number>();
		for (let i = 0; i < x; ++i) {
			j.push(i);
		}
		this.k = x;
		return j;
	}

	public sort(e: CollectionSorted) {
		this.test = reorderItems(this.test, e.previousIndex, e.currentIndex);
	}

	public add() {
		this.test.push(this.k++);
	}
	public remove() {
		this.test.pop();
		--this.k;
	}

}
  1. Use dragCollection directive for wrapper of collection of your elements (ul, ol, or just div for instance)
<div id="buttons">
	<button id="add" (click)="add()">add</button>
	<button id="remove" (click)="remove()">remove</button>
</div>

<ul id="collection" dragCollection (dropCompleted)="sort($event)">
	<li *ngFor="let item of test" dragUnit [value]=item>
		<div class="handle" dragHandle></div>
		<span>{{item}}</span>
        <!-- THIS ELEMENT WILL NOT RESPOND FOR DRAG-N-DROP -->
		<div class="rejector" dragRejector></div> 
	</li>
</ul>
  1. Style your elements
div#buttons {
    display: flex;
    justify-content: space-around;
}

div#buttons button {
    color: white;
    border: none;
    background: none;
    padding: 0.5em;
    cursor: pointer;
    font-family: sans-serif;
    text-transform: uppercase;
    min-width: 150px;
}

div#buttons button:focus {
    outline: none;
}

div#buttons button#add {
    background: #58c292;
}

div#buttons button#remove {
    background: #cd3a3a;
}

ul#collection {
    display: flex;
    flex-wrap: wrap;
    flex-direction: row;
    justify-content: space-evenly;
    margin: 1em 0;
    padding: 0;
}

ul#collection li.drag-unit {
    list-style: none;
    position: relative;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    width: 4em;
    height: 4em;
    box-shadow: 0px 0px 2px #333;
    background-color: white;
    color: #333;
    text-align: center;
    margin: 0.5em;
    user-select: none;
    transition: box-shadow 250ms ease;
}

ul#collection.in-action li.drag-unit:not(.active) {
    transition: 300ms transform cubic-bezier(0.2, 0, 0.2, 1);
}

ul#collection.in-action .drag-unit.active {
    z-index: 2000;
    box-shadow: 0px 0px 4px #333;
}

ul#collection.in-action .drag-unit.dropped {
    box-shadow: 0px 0px #333;
    transition: transform 250ms cubic-bezier(0.5, 0, 0.2, 1), box-shadow 250ms ease;
    z-index: 2000;
}

.handle,
.rejector {
    width: 100%;
    height: 1em;
}

.handle {
    background: #58c292;
    cursor: move;
}

.rejector {
    background: #cd3a3a;
    cursor: not-allowed;
}

Credits

This project is based on Angular's Drag-and-drop module and I really want to thanks everyone Angular team member for creating this awesome framework.

Keywords

FAQs

Last updated on 12 Sep 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc