ngx-bootstrap
Version:
Native Angular Bootstrap Components
549 lines (542 loc) • 16.3 kB
JavaScript
import { Injectable, EventEmitter, Component, forwardRef, Input, Output, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { __spread } from 'tslib';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { Subject } from 'rxjs';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var DraggableItemService = /** @class */ (function () {
function DraggableItemService() {
this.onCapture = new Subject();
}
/**
* @param {?} item
* @return {?}
*/
DraggableItemService.prototype.dragStart = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.draggableItem = item;
};
/**
* @return {?}
*/
DraggableItemService.prototype.getItem = /**
* @return {?}
*/
function () {
return this.draggableItem;
};
/**
* @param {?} overZoneIndex
* @param {?} newIndex
* @return {?}
*/
DraggableItemService.prototype.captureItem = /**
* @param {?} overZoneIndex
* @param {?} newIndex
* @return {?}
*/
function (overZoneIndex, newIndex) {
if (this.draggableItem.overZoneIndex !== overZoneIndex) {
this.draggableItem.lastZoneIndex = this.draggableItem.overZoneIndex;
this.draggableItem.overZoneIndex = overZoneIndex;
this.onCapture.next(this.draggableItem);
this.draggableItem = Object.assign({}, this.draggableItem, {
overZoneIndex: overZoneIndex,
i: newIndex
});
}
return this.draggableItem;
};
/**
* @return {?}
*/
DraggableItemService.prototype.onCaptureItem = /**
* @return {?}
*/
function () {
return this.onCapture;
};
DraggableItemService.decorators = [
{ type: Injectable }
];
return DraggableItemService;
}());
if (false) {
/**
* @type {?}
* @private
*/
DraggableItemService.prototype.draggableItem;
/**
* @type {?}
* @private
*/
DraggableItemService.prototype.onCapture;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/* tslint:disable */
var SortableComponent = /** @class */ (function () {
function SortableComponent(transfer) {
var _this = this;
/**
* class name for items wrapper
*/
this.wrapperClass = '';
/**
* style object for items wrapper
*/
this.wrapperStyle = {};
/**
* class name for item
*/
this.itemClass = '';
/**
* style object for item
*/
this.itemStyle = {};
/**
* class name for active item
*/
this.itemActiveClass = '';
/**
* style object for active item
*/
this.itemActiveStyle = {};
/**
* class name for placeholder
*/
this.placeholderClass = '';
/**
* style object for placeholder
*/
this.placeholderStyle = {};
/**
* placeholder item which will be shown if collection is empty
*/
this.placeholderItem = '';
/**
* fired on array change (reordering, insert, remove), same as <code>ngModelChange</code>.
* Returns new items collection as a payload.
*/
/* tslint:disable-next-line: no-any */
this.onChange = new EventEmitter();
this.showPlaceholder = false;
this.activeItem = -1;
/* tslint:disable-next-line: no-any */
this.onTouched = Function.prototype;
/* tslint:disable-next-line: no-any */
this.onChanged = Function.prototype;
this.transfer = transfer;
this.currentZoneIndex = SortableComponent.globalZoneIndex++;
this.transfer
.onCaptureItem()
.subscribe((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.onDrop(item); }));
}
Object.defineProperty(SortableComponent.prototype, "items", {
get: /**
* @return {?}
*/
function () {
return this._items;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._items = value;
/** @type {?} */
var out = this.items.map((/**
* @param {?} x
* @return {?}
*/
function (x) { return x.initData; }));
this.onChanged(out);
this.onChange.emit(out);
},
enumerable: true,
configurable: true
});
/**
* @param {?} event
* @param {?} item
* @param {?} i
* @return {?}
*/
SortableComponent.prototype.onItemDragstart = /**
* @param {?} event
* @param {?} item
* @param {?} i
* @return {?}
*/
function (event, item, i) {
this.initDragstartEvent(event);
this.onTouched();
this.transfer.dragStart({
event: event,
item: item,
i: i,
initialIndex: i,
lastZoneIndex: this.currentZoneIndex,
overZoneIndex: this.currentZoneIndex
});
};
/**
* @param {?} event
* @param {?} i
* @return {?}
*/
SortableComponent.prototype.onItemDragover = /**
* @param {?} event
* @param {?} i
* @return {?}
*/
function (event, i) {
if (!this.transfer.getItem()) {
return;
}
event.preventDefault();
/** @type {?} */
var dragItem = this.transfer.captureItem(this.currentZoneIndex, this.items.length);
/* tslint:disable-next-line: no-any */
/** @type {?} */
var newArray = [];
if (!this.items.length) {
newArray = [dragItem.item];
}
else if (dragItem.i > i) {
newArray = __spread(this.items.slice(0, i), [
dragItem.item
], this.items.slice(i, dragItem.i), this.items.slice(dragItem.i + 1));
}
else {
// this.draggedItem.i < i
newArray = __spread(this.items.slice(0, dragItem.i), this.items.slice(dragItem.i + 1, i + 1), [
dragItem.item
], this.items.slice(i + 1));
}
this.items = newArray;
dragItem.i = i;
this.activeItem = i;
this.updatePlaceholderState();
};
/**
* @param {?} event
* @return {?}
*/
SortableComponent.prototype.cancelEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (!this.transfer.getItem() || !event) {
return;
}
event.preventDefault();
};
/**
* @param {?} item
* @return {?}
*/
SortableComponent.prototype.onDrop = /**
* @param {?} item
* @return {?}
*/
function (item) {
if (item &&
item.overZoneIndex !== this.currentZoneIndex &&
item.lastZoneIndex === this.currentZoneIndex) {
this.items = this.items.filter((/**
* @param {?} x
* @param {?} i
* @return {?}
*/
function (x, i) { return i !== item.i; }));
this.updatePlaceholderState();
}
this.resetActiveItem(undefined);
};
/**
* @param {?} event
* @return {?}
*/
SortableComponent.prototype.resetActiveItem = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.cancelEvent(event);
this.activeItem = -1;
};
/**
* @param {?} callback
* @return {?}
*/
SortableComponent.prototype.registerOnChange = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
this.onChanged = callback;
};
/**
* @param {?} callback
* @return {?}
*/
SortableComponent.prototype.registerOnTouched = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
this.onTouched = callback;
};
/* tslint:disable-next-line: no-any */
/* tslint:disable-next-line: no-any */
/**
* @param {?} value
* @return {?}
*/
SortableComponent.prototype.writeValue = /* tslint:disable-next-line: no-any */
/**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
if (value) {
/* tslint:disable-next-line: no-any */
this.items = value.map((/**
* @param {?} x
* @param {?} i
* @return {?}
*/
function (x, i) { return ({
id: i,
initData: x,
value: _this.fieldName ? x[_this.fieldName] : x
}); }));
}
else {
this.items = [];
}
this.updatePlaceholderState();
};
/**
* @return {?}
*/
SortableComponent.prototype.updatePlaceholderState = /**
* @return {?}
*/
function () {
this.showPlaceholder = !this._items.length;
};
/**
* @param {?} isActive
* @return {?}
*/
SortableComponent.prototype.getItemStyle = /**
* @param {?} isActive
* @return {?}
*/
function (isActive) {
return isActive
? Object.assign({}, this.itemStyle, this.itemActiveStyle)
: this.itemStyle;
};
// tslint:disable-next-line
// tslint:disable-next-line
/**
* @private
* @param {?} event
* @return {?}
*/
SortableComponent.prototype.initDragstartEvent =
// tslint:disable-next-line
/**
* @private
* @param {?} event
* @return {?}
*/
function (event) {
// it is necessary for mozilla
// data type should be 'Text' instead of 'text/plain' to keep compatibility
// with IE
event.dataTransfer.setData('Text', 'placeholder');
};
SortableComponent.globalZoneIndex = 0;
SortableComponent.decorators = [
{ type: Component, args: [{
selector: 'bs-sortable',
exportAs: 'bs-sortable',
template: "\n<div\n [ngClass]=\"wrapperClass\"\n [ngStyle]=\"wrapperStyle\"\n (dragover)=\"cancelEvent($event)\"\n (dragenter)=\"cancelEvent($event)\"\n (drop)=\"resetActiveItem($event)\"\n (mouseleave)=\"resetActiveItem($event)\">\n <div\n *ngIf=\"showPlaceholder\"\n [ngClass]=\"placeholderClass\"\n [ngStyle]=\"placeholderStyle\"\n (dragover)=\"onItemDragover($event, 0)\"\n (dragenter)=\"cancelEvent($event)\"\n >{{placeholderItem}}</div>\n <div\n *ngFor=\"let item of items; let i=index;\"\n [ngClass]=\"[ itemClass, i === activeItem ? itemActiveClass : '' ]\"\n [ngStyle]=\"getItemStyle(i === activeItem)\"\n draggable=\"true\"\n (dragstart)=\"onItemDragstart($event, item, i)\"\n (dragend)=\"resetActiveItem($event)\"\n (dragover)=\"onItemDragover($event, i)\"\n (dragenter)=\"cancelEvent($event)\"\n aria-dropeffect=\"move\"\n [attr.aria-grabbed]=\"i === activeItem\"\n ><ng-template [ngTemplateOutlet]=\"itemTemplate || defItemTemplate\"\n [ngTemplateOutletContext]=\"{item:item, index: i}\"></ng-template></div>\n</div>\n\n<ng-template #defItemTemplate let-item=\"item\">{{item.value}}</ng-template> \n",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return SortableComponent; })),
multi: true
}
]
}] }
];
/** @nocollapse */
SortableComponent.ctorParameters = function () { return [
{ type: DraggableItemService }
]; };
SortableComponent.propDecorators = {
fieldName: [{ type: Input }],
wrapperClass: [{ type: Input }],
wrapperStyle: [{ type: Input }],
itemClass: [{ type: Input }],
itemStyle: [{ type: Input }],
itemActiveClass: [{ type: Input }],
itemActiveStyle: [{ type: Input }],
placeholderClass: [{ type: Input }],
placeholderStyle: [{ type: Input }],
placeholderItem: [{ type: Input }],
itemTemplate: [{ type: Input }],
onChange: [{ type: Output }]
};
return SortableComponent;
}());
if (false) {
/**
* @type {?}
* @private
*/
SortableComponent.globalZoneIndex;
/**
* field name if input array consists of objects
* @type {?}
*/
SortableComponent.prototype.fieldName;
/**
* class name for items wrapper
* @type {?}
*/
SortableComponent.prototype.wrapperClass;
/**
* style object for items wrapper
* @type {?}
*/
SortableComponent.prototype.wrapperStyle;
/**
* class name for item
* @type {?}
*/
SortableComponent.prototype.itemClass;
/**
* style object for item
* @type {?}
*/
SortableComponent.prototype.itemStyle;
/**
* class name for active item
* @type {?}
*/
SortableComponent.prototype.itemActiveClass;
/**
* style object for active item
* @type {?}
*/
SortableComponent.prototype.itemActiveStyle;
/**
* class name for placeholder
* @type {?}
*/
SortableComponent.prototype.placeholderClass;
/**
* style object for placeholder
* @type {?}
*/
SortableComponent.prototype.placeholderStyle;
/**
* placeholder item which will be shown if collection is empty
* @type {?}
*/
SortableComponent.prototype.placeholderItem;
/**
* used to specify a custom item template. Template variables: item and index;
* @type {?}
*/
SortableComponent.prototype.itemTemplate;
/**
* fired on array change (reordering, insert, remove), same as <code>ngModelChange</code>.
* Returns new items collection as a payload.
* @type {?}
*/
SortableComponent.prototype.onChange;
/** @type {?} */
SortableComponent.prototype.showPlaceholder;
/** @type {?} */
SortableComponent.prototype.activeItem;
/** @type {?} */
SortableComponent.prototype.onTouched;
/** @type {?} */
SortableComponent.prototype.onChanged;
/**
* @type {?}
* @private
*/
SortableComponent.prototype.transfer;
/**
* @type {?}
* @private
*/
SortableComponent.prototype.currentZoneIndex;
/**
* @type {?}
* @private
*/
SortableComponent.prototype._items;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var SortableModule = /** @class */ (function () {
function SortableModule() {
}
/**
* @return {?}
*/
SortableModule.forRoot = /**
* @return {?}
*/
function () {
return { ngModule: SortableModule, providers: [DraggableItemService] };
};
SortableModule.decorators = [
{ type: NgModule, args: [{
declarations: [SortableComponent],
imports: [CommonModule],
exports: [SortableComponent]
},] }
];
return SortableModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { DraggableItemService, SortableComponent, SortableModule };
//# sourceMappingURL=ngx-bootstrap-sortable.js.map