@asadi/angular-date-components
Version:
`Angular Date Components` is a comprehensive angular library of date-related components designed to meet the needs of applications that require localization based on various calendar systems. While the package currently includes two powerful components (S
81 lines • 11.8 kB
JavaScript
import { Subject } from "rxjs";
export class TableSelection {
init(tableViewController) {
tableViewController.cellChanges().subscribe(cells => {
this.tableCells = cells;
this.checkForInvalidCells();
this.applyHoverEvent();
this.applyClickEvent();
});
}
constructor(dateFilter = () => true) {
this.dateFilter = dateFilter;
this.selectedCell = null;
this.tableCells = [];
this.selectionSubject = new Subject();
this.cellSelectionStream = this.selectionSubject.asObservable();
}
checkForInvalidCells() {
if (this.selectedCell == null)
return;
const selected = this.tableCells.find(c => c.columnValue == this.selectedCell?.columnValue && c.rowValue == this.selectedCell?.rowValue);
if (selected != null) {
this.selectedCell = selected;
this.selectedCell.markAsSelected();
}
this.tableCells.forEach(c => {
if (!this.dateFilter(this.selectedCell?.asTableCell(), c.asTableCell())) {
c.markAsInvalid();
}
});
}
applyClickEvent() {
this.tableCells.forEach((c, i) => {
c.element.addEventListener('click', () => this.onSelect(i));
});
}
applyHoverEvent() {
this.tableCells.forEach((c, i) => {
c.element.addEventListener('pointerover', () => this.onHover(i));
});
}
onSelect(index) {
const cell = this.tableCells[index];
if (this.selectedCell == null) {
this.selectedCell = cell;
this.selectedCell.markAsSelected();
this.tableCells.forEach(c => {
if (!this.dateFilter(this.selectedCell, c))
c.markAsInvalid();
});
return;
}
if (!cell.invalid) {
this.selectionSubject.next({ start: this.selectedCell.asTableCell(), end: cell.asTableCell() });
}
this.clearSelectionState();
}
onHover(index) {
const cell = this.tableCells[index];
if (this.selectedCell == null || cell.invalid)
return;
this.tableCells.forEach(c => c.removeState('pointed'));
let startCellIndex = this.tableCells.findIndex(c => c.rowValue == this.selectedCell?.rowValue && c.columnValue == this.selectedCell?.columnValue);
if (startCellIndex == -1)
startCellIndex = 0;
this.tableCells.forEach((c, i) => {
if (c.invalid)
return;
if ((i > index || i < startCellIndex) && index >= startCellIndex)
return;
if ((i < index || i > startCellIndex) && index < startCellIndex)
return;
c.markAsPointed();
});
}
clearSelectionState() {
this.selectedCell = null;
this.tableCells.forEach(c => c.resetState());
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNhZGkvYW5ndWxhci1kYXRlLWNvbXBvbmVudHMvY29yZS9zcmMvdGFibGUtc2VsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsTUFBTSxPQUFPLGNBQWM7SUFRekIsSUFBSSxDQUFDLG1CQUFzQztRQUV6QyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFFbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFeEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUNVLGFBQWlGLEdBQUcsRUFBRSxDQUFDLElBQUk7UUFBM0YsZUFBVSxHQUFWLFVBQVUsQ0FBaUY7UUFwQjdGLGlCQUFZLEdBQXdCLElBQUksQ0FBQztRQUN6QyxlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUNoQyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBOEMsQ0FBQztRQUU1RSx3QkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFpQmhFLENBQUM7SUFFRyxvQkFBb0I7UUFFMUIsSUFBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUk7WUFBRSxPQUFPO1FBRXJDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUMsUUFB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LENBQUM7UUFFbEosSUFBRyxjQUFjLElBQUksQ0FBQyxDQUFDO1lBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUUvQixJQUFHLENBQUMsQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFFckIsSUFBRyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEtBQUssSUFBSSxjQUFjO2dCQUFFLE9BQU87WUFFeEUsSUFBRyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEtBQUssR0FBRyxjQUFjO2dCQUFFLE9BQU87WUFFdkUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLG1CQUFtQjtRQUV6QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBBRENJVGFibGVDZWxsLCBBRENJVGFibGVWaWV3Q1RSTCB9IGZyb20gXCIuL2ludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBBRENUYWJsZUNlbGwgfSBmcm9tIFwiLi91dGlscy90YWJsZS1jZWxsLnRvb2xzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVTZWxlY3Rpb25cclxue1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRDZWxsOiBBRENUYWJsZUNlbGwgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHRhYmxlQ2VsbHM6IEFEQ1RhYmxlQ2VsbFtdID0gW107XHJcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8e3N0YXJ0OiBBRENJVGFibGVDZWxsLCBlbmQ6IEFEQ0lUYWJsZUNlbGx9PigpO1xyXG5cclxuICByZWFkb25seSBjZWxsU2VsZWN0aW9uU3RyZWFtID0gdGhpcy5zZWxlY3Rpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBpbml0KHRhYmxlVmlld0NvbnRyb2xsZXI6IEFEQ0lUYWJsZVZpZXdDVFJMKTogdm9pZFxyXG4gIHtcclxuICAgIHRhYmxlVmlld0NvbnRyb2xsZXIuY2VsbENoYW5nZXMoKS5zdWJzY3JpYmUoY2VsbHMgPT4ge1xyXG5cclxuICAgICAgdGhpcy50YWJsZUNlbGxzID0gY2VsbHM7XHJcblxyXG4gICAgICB0aGlzLmNoZWNrRm9ySW52YWxpZENlbGxzKCk7XHJcblxyXG4gICAgICB0aGlzLmFwcGx5SG92ZXJFdmVudCgpO1xyXG4gICAgICB0aGlzLmFwcGx5Q2xpY2tFdmVudCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGF0ZUZpbHRlcjogKHNlbGVjdGVkQ2VsbDogQURDSVRhYmxlQ2VsbCwgdGFibGVDZWxsOiBBRENJVGFibGVDZWxsKSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tGb3JJbnZhbGlkQ2VsbHMoKTogdm9pZFxyXG4gIHtcclxuICAgIGlmKHRoaXMuc2VsZWN0ZWRDZWxsID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudGFibGVDZWxscy5maW5kKGMgPT4gYy5jb2x1bW5WYWx1ZSA9PSB0aGlzLnNlbGVjdGVkQ2VsbD8uY29sdW1uVmFsdWUgJiYgYy5yb3dWYWx1ZSA9PSB0aGlzLnNlbGVjdGVkQ2VsbD8ucm93VmFsdWUpXHJcblxyXG4gICAgaWYoc2VsZWN0ZWQgIT0gbnVsbClcclxuICAgIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENlbGwgPSBzZWxlY3RlZDtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsLm1hcmtBc1NlbGVjdGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50YWJsZUNlbGxzLmZvckVhY2goYyA9PiB7XHJcblxyXG4gICAgICBpZighdGhpcy5kYXRlRmlsdGVyKHRoaXMuc2VsZWN0ZWRDZWxsPy5hc1RhYmxlQ2VsbCgpISwgYy5hc1RhYmxlQ2VsbCgpKSlcclxuICAgICAge1xyXG4gICAgICAgIGMubWFya0FzSW52YWxpZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNsaWNrRXZlbnQoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMudGFibGVDZWxscy5mb3JFYWNoKChjLCBpKSA9PiB7XHJcbiAgICAgIGMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMub25TZWxlY3QoaSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5SG92ZXJFdmVudCgpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy50YWJsZUNlbGxzLmZvckVhY2goKGMsIGkpID0+IHtcclxuICAgICAgYy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJvdmVyJywgKCkgPT4gdGhpcy5vbkhvdmVyKGkpKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VsZWN0KGluZGV4OiBudW1iZXIpOiBhbnlcclxuICB7XHJcbiAgICBjb25zdCBjZWxsID0gdGhpcy50YWJsZUNlbGxzW2luZGV4XTtcclxuXHJcbiAgICBpZih0aGlzLnNlbGVjdGVkQ2VsbCA9PSBudWxsKVxyXG4gICAge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2VsbCA9IGNlbGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsLm1hcmtBc1NlbGVjdGVkKCk7XHJcblxyXG4gICAgICB0aGlzLnRhYmxlQ2VsbHMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICBpZighdGhpcy5kYXRlRmlsdGVyKHRoaXMuc2VsZWN0ZWRDZWxsISwgYykpXHJcbiAgICAgICAgICBjLm1hcmtBc0ludmFsaWQoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWNlbGwuaW52YWxpZClcclxuICAgIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb25TdWJqZWN0Lm5leHQoe3N0YXJ0OiB0aGlzLnNlbGVjdGVkQ2VsbC5hc1RhYmxlQ2VsbCgpLCBlbmQ6IGNlbGwuYXNUYWJsZUNlbGwoKX0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkhvdmVyKGluZGV4OiBudW1iZXIpOiB2b2lkXHJcbiAge1xyXG4gICAgY29uc3QgY2VsbCA9IHRoaXMudGFibGVDZWxsc1tpbmRleF07XHJcblxyXG4gICAgaWYodGhpcy5zZWxlY3RlZENlbGwgPT0gbnVsbCB8fCBjZWxsLmludmFsaWQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnRhYmxlQ2VsbHMuZm9yRWFjaChjID0+IGMucmVtb3ZlU3RhdGUoJ3BvaW50ZWQnKSk7XHJcblxyXG4gICAgbGV0IHN0YXJ0Q2VsbEluZGV4ID0gdGhpcy50YWJsZUNlbGxzLmZpbmRJbmRleChjID0+IGMucm93VmFsdWUgPT0gdGhpcy5zZWxlY3RlZENlbGw/LnJvd1ZhbHVlICYmIGMuY29sdW1uVmFsdWUgPT0gdGhpcy5zZWxlY3RlZENlbGw/LmNvbHVtblZhbHVlKTtcclxuXHJcbiAgICBpZihzdGFydENlbGxJbmRleCA9PSAtMSkgc3RhcnRDZWxsSW5kZXggPSAwO1xyXG5cclxuICAgIHRoaXMudGFibGVDZWxscy5mb3JFYWNoKChjLCBpKSA9PiB7XHJcblxyXG4gICAgICBpZihjLmludmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgIGlmKChpID4gaW5kZXggfHwgaSA8IHN0YXJ0Q2VsbEluZGV4KSAmJiBpbmRleCA+PSBzdGFydENlbGxJbmRleCkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYoKGkgPCBpbmRleCB8fCBpID4gc3RhcnRDZWxsSW5kZXgpICYmIGluZGV4IDwgc3RhcnRDZWxsSW5kZXgpIHJldHVybjtcclxuXHJcbiAgICAgIGMubWFya0FzUG9pbnRlZCgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTZWxlY3Rpb25TdGF0ZSgpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5zZWxlY3RlZENlbGwgPSBudWxsO1xyXG4gICAgdGhpcy50YWJsZUNlbGxzLmZvckVhY2goYyA9PiBjLnJlc2V0U3RhdGUoKSk7XHJcbiAgfVxyXG59Il19