UNPKG

@cisstech/nge

Version:

NG Essentials is a collection of libraries for Angular developers.

52 lines 6.51 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; /** Service to programmatically open file dialog. */ export class PickerBrowserService { /** * Open file dialog to select files. * @param options picker options. * @returns A promise that resolves with the picked files or and empty array. */ pickFiles(options) { return new Promise(async (resolve) => { const input = document.createElement('input'); input.type = 'file'; input.multiple = options.multiple ?? true; input.accept = options.accept ?? '*'; input.style.visibility = 'hidden'; input.onchange = (event) => { const target = event.target || event.srcElement; if (target.value.length > 0) { input.remove(); resolve(target.files); } else { input.remove(); resolve([]); } }; // handle cancel button click. setTimeout(() => { let onfocus; onfocus = () => { if (!input.value.length) { resolve([]); input.remove(); } window.removeEventListener('click', onfocus); }; window.addEventListener('click', onfocus); }, 300); document.body.appendChild(input); input.focus(); input.click(); }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PickerBrowserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PickerBrowserService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PickerBrowserService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1waWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nZS9zZXJ2aWNlcy9zcmMvYnJvd3Nlci1waWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBOztBQUUxQyxvREFBb0Q7QUFFcEQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQjs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE9BQTZCO1FBQ3JDLE9BQU8sSUFBSSxPQUFPLENBQVMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzNDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDN0MsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7WUFDbkIsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQTtZQUN6QyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFBO1lBQ3BDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQTtZQUNqQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQTtnQkFDL0MsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFBO29CQUNkLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ3ZCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUE7b0JBQ2QsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUNiLENBQUM7WUFDSCxDQUFDLENBQUE7WUFDRCw4QkFBOEI7WUFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLE9BQVksQ0FBQTtnQkFDaEIsT0FBTyxHQUFHLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO3dCQUNYLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQTtvQkFDaEIsQ0FBQztvQkFDRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUM5QyxDQUFDLENBQUE7Z0JBQ0QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUMzQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDUCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNoQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDYixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDZixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7OEdBdkNVLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTs7MkZBQ25CLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuLyoqIFNlcnZpY2UgdG8gcHJvZ3JhbW1hdGljYWxseSBvcGVuIGZpbGUgZGlhbG9nLiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQaWNrZXJCcm93c2VyU2VydmljZSB7XG4gIC8qKlxuICAgKiBPcGVuIGZpbGUgZGlhbG9nIHRvIHNlbGVjdCBmaWxlcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgcGlja2VyIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHBpY2tlZCBmaWxlcyBvciBhbmQgZW1wdHkgYXJyYXkuXG4gICAqL1xuICBwaWNrRmlsZXMob3B0aW9uczogUGlja2VyQnJvd3Nlck9wdGlvbnMpOiBQcm9taXNlPEZpbGVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGaWxlW10+KGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICAgIGlucHV0LnR5cGUgPSAnZmlsZSdcbiAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZSA/PyB0cnVlXG4gICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLmFjY2VwdCA/PyAnKidcbiAgICAgIGlucHV0LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJ1xuICAgICAgaW5wdXQub25jaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudFxuICAgICAgICBpZiAodGFyZ2V0LnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpbnB1dC5yZW1vdmUoKVxuICAgICAgICAgIHJlc29sdmUodGFyZ2V0LmZpbGVzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0LnJlbW92ZSgpXG4gICAgICAgICAgcmVzb2x2ZShbXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaGFuZGxlIGNhbmNlbCBidXR0b24gY2xpY2suXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbGV0IG9uZm9jdXM6IGFueVxuICAgICAgICBvbmZvY3VzID0gKCkgPT4ge1xuICAgICAgICAgIGlmICghaW5wdXQudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXNvbHZlKFtdKVxuICAgICAgICAgICAgaW5wdXQucmVtb3ZlKClcbiAgICAgICAgICB9XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25mb2N1cylcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbmZvY3VzKVxuICAgICAgfSwgMzAwKVxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dClcbiAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgIGlucHV0LmNsaWNrKClcbiAgICB9KVxuICB9XG59XG5cbi8qKiBQaWNrZXIgb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyQnJvd3Nlck9wdGlvbnMge1xuICAvKiogb3B0aW9uYWwgbWltZSB0eXBlIG9mIHRoZSBmaWxlcyB0byBzZWxlY3QuIChkZWZhdWx0ICopICovXG4gIHJlYWRvbmx5IGFjY2VwdD86IHN0cmluZ1xuICAvKiogYWxsb3cgbXVsdGlwbGUgZmlsZXMgKGRlZmF1bHQgdHJ1ZS4pICovXG4gIHJlYWRvbmx5IG11bHRpcGxlPzogYm9vbGVhblxufVxuIl19