UNPKG

@ng-dnd/sortable

Version:
38 lines 5.49 kB
import { Subject } from 'rxjs'; import { distinctUntilChanged, filter } from 'rxjs/operators'; export const SPILLED_LIST_ID = Symbol('SPILLED_LIST_ID'); export function spillTarget(dnd, types, config) { const mutate = (item) => { if (!item) return null; item.hover = { listId: SPILLED_LIST_ID, index: -1 }; return { ...item }; }; const hover$ = new Subject(); const target = dnd.dropTarget(types, { hover: monitor => { if (monitor.canDrop() && monitor.isOver({ shallow: true })) { const item = mutate(monitor.getItem()); hover$.next(item); } else { hover$.next(null); } }, drop: (config.drop && (monitor => { const item = mutate(monitor.getItem()); if (!monitor.didDrop()) { item && config.drop?.(item); } })) || undefined, }); const spilled$ = hover$.pipe(distinctUntilChanged(), filter(a => !!a)); const subs = spilled$.subscribe(item => { item && config.hover?.(item); }); target.add(subs); return target; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpbGxUYXJnZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3BpbGxUYXJnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFXLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBT2pFLE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQWUsRUFDZixLQUFzRCxFQUN0RCxNQUFnQztJQUVoQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQThCLEVBQUUsRUFBRTtRQUNoRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUE0QixDQUFDO0lBRXZELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQW9CLEtBQUssRUFBRTtRQUN0RCxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDZixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxFQUNGLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDVixDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNULE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUN2QixJQUFJLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxTQUFTO0tBQ1osQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDMUIsb0JBQW9CLEVBQUUsRUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG5kU2VydmljZSwgRHJvcFRhcmdldCB9IGZyb20gJ0BuZy1kbmQvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRHJhZ2dlZEl0ZW0gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IFNQSUxMRURfTElTVF9JRDogc3ltYm9sID0gU3ltYm9sKCdTUElMTEVEX0xJU1RfSUQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGlsbENvbmZpZ3VyYXRpb248RGF0YT4ge1xuICBkcm9wPzogKGl0ZW06IERyYWdnZWRJdGVtPERhdGE+KSA9PiB2b2lkO1xuICBob3Zlcj86IChpdGVtOiBEcmFnZ2VkSXRlbTxEYXRhPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwaWxsVGFyZ2V0PERhdGE+KFxuICBkbmQ6IERuZFNlcnZpY2UsXG4gIHR5cGVzOiBzdHJpbmcgfCBzeW1ib2wgfCBBcnJheTxzdHJpbmcgfCBzeW1ib2w+IHwgbnVsbCxcbiAgY29uZmlnOiBTcGlsbENvbmZpZ3VyYXRpb248RGF0YT5cbik6IERyb3BUYXJnZXQ8RHJhZ2dlZEl0ZW08RGF0YT4+IHtcbiAgY29uc3QgbXV0YXRlID0gKGl0ZW06IERyYWdnZWRJdGVtPERhdGE+IHwgbnVsbCkgPT4ge1xuICAgIGlmICghaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgaXRlbS5ob3ZlciA9IHsgbGlzdElkOiBTUElMTEVEX0xJU1RfSUQsIGluZGV4OiAtMSB9O1xuICAgIHJldHVybiB7IC4uLml0ZW0gfTtcbiAgfTtcblxuICBjb25zdCBob3ZlciQgPSBuZXcgU3ViamVjdDxEcmFnZ2VkSXRlbTxEYXRhPiB8IG51bGw+KCk7XG5cbiAgY29uc3QgdGFyZ2V0ID0gZG5kLmRyb3BUYXJnZXQ8RHJhZ2dlZEl0ZW08RGF0YT4+KHR5cGVzLCB7XG4gICAgaG92ZXI6IG1vbml0b3IgPT4ge1xuICAgICAgaWYgKG1vbml0b3IuY2FuRHJvcCgpICYmIG1vbml0b3IuaXNPdmVyKHsgc2hhbGxvdzogdHJ1ZSB9KSkge1xuICAgICAgICBjb25zdCBpdGVtID0gbXV0YXRlKG1vbml0b3IuZ2V0SXRlbSgpKTtcbiAgICAgICAgaG92ZXIkLm5leHQoaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBob3ZlciQubmV4dChudWxsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRyb3A6XG4gICAgICAoY29uZmlnLmRyb3AgJiZcbiAgICAgICAgKG1vbml0b3IgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBtdXRhdGUobW9uaXRvci5nZXRJdGVtKCkpO1xuICAgICAgICAgIGlmICghbW9uaXRvci5kaWREcm9wKCkpIHtcbiAgICAgICAgICAgIGl0ZW0gJiYgY29uZmlnLmRyb3A/LihpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKSB8fFxuICAgICAgdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBzcGlsbGVkJCA9IGhvdmVyJC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgZmlsdGVyKGEgPT4gISFhKVxuICApO1xuXG4gIGNvbnN0IHN1YnMgPSBzcGlsbGVkJC5zdWJzY3JpYmUoaXRlbSA9PiB7XG4gICAgaXRlbSAmJiBjb25maWcuaG92ZXI/LihpdGVtKTtcbiAgfSk7XG5cbiAgdGFyZ2V0LmFkZChzdWJzKTtcbiAgcmV0dXJuIHRhcmdldDtcbn1cbiJdfQ==