UNPKG

nxt-sortablejs

Version:
1 lines 18.8 kB
{"version":3,"file":"nxt-sortablejs.mjs","sources":["../../../packages/sortablejs/src/lib/globals.ts","../../../packages/sortablejs/src/lib/sortablejs-binding.ts","../../../packages/sortablejs/src/lib/sortablejs-bindings.ts","../../../packages/sortablejs/src/lib/sortablejs.service.ts","../../../packages/sortablejs/src/lib/sortablejs.directive.ts","../../../packages/sortablejs/src/nxt-sortablejs.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core'\r\nimport { Options } from 'sortablejs'\r\n\r\n/** @internal */\r\nexport const GLOBALS: InjectionToken<Options> = new InjectionToken('Global config for sortablejs')\r\n\r\nexport function provideGlobalSortableOptions(globalOptions: Options): Provider[] {\r\n return [\r\n {\r\n provide: GLOBALS,\r\n useValue: globalOptions\r\n }\r\n ]\r\n}\r\n","import { type FormArray } from '@angular/forms'\nimport { SortableData } from './sortablejs.directive'\n\n/** @internal */\nfunction isFormArray<T>(target: SortableData<T>): target is (SortableData<T> & FormArray<any>) {\n // we need this to identify that the target is a FormArray\n // we don't want to have a dependency on @angular/forms just for that\n // just checking for random FormArray methods not available on a standard array\n return !!target.at && !!(target as FormArray).insert && !!(target as FormArray).reset\n}\n\n/** @internal */\nexport class SortablejsBinding<T> {\n\n constructor(\n private readonly target: SortableData<T>\n ) { }\n\n insert(index: number, item: any) {\n if (isFormArray(this.target)) {\n this.target.insert(index, item)\n } else {\n (this.target as T[]).splice(index, 0, item)\n }\n }\n\n get(index: number) {\n return isFormArray(this.target) ? this.target.at(index) as T : (this.target as T[])[index]\n }\n\n remove(index: number) {\n let item\n\n if (isFormArray(this.target)) {\n item = this.target.at(index)\n this.target.removeAt(index)\n } else {\n item = (this.target as T[]).splice(index, 1)[0]\n }\n\n return item\n }\n\n}\n","import { SortablejsBinding } from './sortablejs-binding'\r\nimport { SortableData } from './sortablejs.directive'\r\n\r\n/** @internal */\r\nexport class SortablejsBindings<T> {\r\n\r\n bindings: Array<SortablejsBinding<T>>\r\n\r\n constructor(bindingTargets: Array<SortableData<T>>) {\r\n this.bindings = bindingTargets.map(target => new SortablejsBinding<T>(target))\r\n }\r\n\r\n injectIntoEvery(index: number, items: any[]) {\r\n this.bindings.forEach((b, i) => b.insert(index, items[i]))\r\n }\r\n\r\n getFromEvery(index: number) {\r\n return this.bindings.map(b => b.get(index))\r\n }\r\n\r\n extractFromEvery(index: number) {\r\n return this.bindings.map(b => b.remove(index))\r\n }\r\n\r\n get provided() {\r\n return !!this.bindings.length\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core'\r\n\r\n/** @internal */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SortablejsService {\r\n\r\n // original library calls the events in unnatural order\r\n // first the item is added, then removed from the previous array\r\n // this is a temporary event to work this around\r\n // as long as only one sortable takes place at a certain time\r\n // this is enough to have a single `global` event\r\n transfer?: (items: any[]) => void\r\n\r\n}\r\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n NgZone,\n OnChanges,\n OnDestroy,\n Renderer2,\n SimpleChange,\n computed,\n inject,\n input,\n output\n} from '@angular/core'\nimport { type AbstractControl, type FormArray } from '@angular/forms'\nimport Sortable, { Options, SortableEvent } from 'sortablejs'\nimport { GLOBALS } from './globals'\nimport { SortablejsBindings } from './sortablejs-bindings'\nimport { SortablejsService } from './sortablejs.service'\n\nexport type SortableData<T> = [T] extends [AbstractControl] ? (FormArray<T> | T[]) : T[]\nexport type CloneFunction<T> = (item: T) => T\n\n@Directive({ selector: '[nxtSortablejs]' })\nexport class SortablejsDirective<T> implements OnChanges, OnDestroy, AfterViewInit {\n\n private readonly globalConfig = inject(GLOBALS, { optional: true })\n private readonly service = inject(SortablejsService)\n private readonly element = inject(ElementRef)\n private readonly cdRef = inject(ChangeDetectorRef)\n private readonly zone = inject(NgZone)\n private readonly renderer = inject(Renderer2)\n\n /** Input data, can be Array or FormArray */\n readonly data = input<SortableData<T>>(undefined, { alias: 'nxtSortablejs' })\n\n /**\n * CSS selector for the sortable container\n *\n * Mostly required when used with custom components which wrap items in multiple containers. In that case,\n * this should be the selector for the direct HTML parent of sortable items.\n */\n readonly sortablejsContainer = input<string>()\n\n /** Sortablejs configuration */\n readonly config = input<Options>()\n\n /** A function invoked when cloning items from template dataset into target dataset */\n readonly cloneFunction = input<CloneFunction<T>>()\n\n /** Initialised a new Sortablejs instance */\n readonly init = output<Sortable>()\n\n private sortableInstance?: Sortable\n\n private readonly bindings = computed(() => {\n const data = this.data()\n if (!data) {\n return new SortablejsBindings([])\n } else if (data instanceof SortablejsBindings) {\n return data\n } else {\n return new SortablejsBindings([data])\n }\n })\n\n private readonly optionsWithoutEvents = computed(() => ({ ...(this.globalConfig || {}), ...(this.config() || {}) }))\n private readonly overridenOptions = computed<Options>(() => ({\n // always intercept standard events but act only in case items are set (bindingEnabled)\n // allows to forget about tracking this.items changes\n onAdd: (event: SortableEvent) => {\n this.service.transfer = (items: any[]) => {\n this.bindings().injectIntoEvery(event.newIndex!, items)\n this.proxyEvent('onAdd', event)\n }\n\n this.proxyEvent('onAddOriginal', event)\n this.cdRef.detectChanges()\n },\n onRemove: (event: SortableEvent) => {\n const bindings = this.bindings()\n\n if (bindings.provided) {\n if (this.isCloning) {\n this.service.transfer?.(bindings.getFromEvery(event.oldIndex!).map(item => this.clone(item)))\n\n // great thanks to https://github.com/tauu\n // event.item is the original item from the source list which is moved to the target list\n // event.clone is a clone of the original item and will be added to source list\n // If bindings are provided, adding the item dom element to the target list causes artifacts\n // as it interferes with the rendering performed by the angular template.\n // Therefore we remove it immediately and also move the original item back to the source list.\n // (event handler may be attached to the original item and not its clone, therefore keeping\n // the original dom node, circumvents side effects )\n this.renderer.removeChild(event.item.parentNode, event.item)\n this.renderer.insertBefore(event.clone.parentNode, event.item, event.clone)\n this.renderer.removeChild(event.clone.parentNode, event.clone)\n } else {\n this.service.transfer?.(bindings.extractFromEvery(event.oldIndex!))\n }\n\n this.service.transfer = undefined\n }\n\n this.proxyEvent('onRemove', event)\n this.cdRef.detectChanges()\n },\n onUpdate: (event: SortableEvent) => {\n const bindings = this.bindings()\n\n bindings.injectIntoEvery(event.newIndex!, bindings.extractFromEvery(event.oldIndex!))\n this.proxyEvent('onUpdate', event)\n this.cdRef.detectChanges()\n }\n }))\n\n private readonly options = computed(() => ({ ...this.optionsWithoutEvents(), ...this.overridenOptions() }))\n\n /** @internal */\n ngAfterViewInit() {\n if (Sortable?.create!) { // Sortable does not exist in angular universal (SSR)\n this.create()\n }\n }\n\n /** @internal */\n ngOnChanges(changes: { [prop in keyof SortablejsDirective<T>]: SimpleChange }) {\n const optionsChange = changes.config\n\n if (optionsChange && !optionsChange.isFirstChange()) {\n const previousOptions: Options = optionsChange.previousValue\n const currentOptions: Options = optionsChange.currentValue\n\n Object.keys(currentOptions).forEach(optionName => {\n if (currentOptions[optionName as keyof Options] !== previousOptions[optionName as keyof Options]) {\n // use low-level option setter\n this.sortableInstance?.option(optionName as keyof Options, this.options()[optionName as keyof Options])\n }\n })\n }\n }\n\n /** @internal */\n ngOnDestroy() {\n if (this.sortableInstance) {\n this.sortableInstance.destroy()\n }\n }\n\n private create() {\n const sortablejsContainer = this.sortablejsContainer()\n const container = sortablejsContainer ? this.element.nativeElement.querySelector(sortablejsContainer) : this.element.nativeElement\n\n setTimeout(() => {\n if (typeof window != 'undefined') {\n this.sortableInstance = Sortable.create(container, this.options())\n this.init.emit(this.sortableInstance)\n }\n }, 0)\n }\n\n private proxyEvent(eventName: string, ...params: any[]) {\n this.zone.run(() => { // re-entering zone, see https://github.com/SortableJS/angular-sortablejs/issues/110#issuecomment-408874600\n const opts = this.optionsWithoutEvents()\n if (opts?.[eventName as keyof typeof opts]) {\n (opts[eventName as keyof typeof opts] as (...params: any[]) => void)(...params)\n }\n })\n }\n\n private get isCloning() {\n const groupOptions = this.sortableInstance?.options.group\n return groupOptions && (typeof groupOptions != 'string')\n ? groupOptions.checkPull?.(this.sortableInstance!, this.sortableInstance!, undefined as any, undefined as any) === 'clone'\n : groupOptions === 'clone'\n }\n\n private clone(item: T): T {\n // by default pass the item through, no cloning performed\n return (this.cloneFunction() || (subitem => subitem))(item)\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}