@cisstech/nge
Version:
NG Essentials is a collection of libraries for Angular developers.
52 lines • 6.51 kB
JavaScript
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