UNPKG

react-native-document-picker-v2

Version:

A react native interface to access documents from dropbox, google drive, iCloud... with MacOs support

105 lines (104 loc) 4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; exports.isCancel = isCancel; exports.isInProgress = isInProgress; exports.pick = pick; exports.pickDirectory = pickDirectory; exports.pickSingle = pickSingle; exports.releaseSecureAccess = releaseSecureAccess; exports.types = void 0; var _reactNative = require("react-native"); var _invariant = _interopRequireDefault(require("invariant")); var _fileTypes = require("./fileTypes"); var _NativeDocumentPicker = require("./NativeDocumentPicker"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const types = _fileTypes.perPlatformTypes[_reactNative.Platform.OS]; exports.types = types; async function pickDirectory(params) { if (_reactNative.Platform.OS === 'ios') { const result = await pick({ ...params, mode: 'open', allowMultiSelection: false, type: ['public.folder'] }); return { uri: result[0].uri }; } else { return _NativeDocumentPicker.NativeDocumentPicker.pickDirectory(); } } function pickSingle(opts) { const options = { ...opts, allowMultiSelection: false }; return pick(options).then(results => results[0]); } function pick(opts) { const options = { // must be false to maintain old (v5) behavior allowMultiSelection: false, type: [types.allFiles], ...opts }; const newOpts = { presentationStyle: 'formSheet', transitionStyle: 'coverVertical', ...options, type: Array.isArray(options.type) ? options.type : [options.type] }; return doPick(newOpts); } function doPick(options) { (0, _invariant.default)(!('filetype' in options), 'A `filetype` option was passed to DocumentPicker.pick, the correct option is `type`'); (0, _invariant.default)(!('types' in options), 'A `types` option was passed to DocumentPicker.pick, the correct option is `type`'); (0, _invariant.default)(options.type.every(type => typeof type === 'string'), `Unexpected type option in ${options.type}, did you try using a DocumentPicker.types.* that does not exist?`); (0, _invariant.default)(options.type.length > 0, '`type` option should not be an empty array, at least one type must be passed if the `type` option is not omitted'); (0, _invariant.default)(!options.type.includes('folder'), 'RN document picker: "folder" option was removed, use "pickDirectory()"'); if ('mode' in options && !['import', 'open'].includes(options.mode ?? '')) { throw new TypeError('Invalid mode option: ' + options.mode); } if ('copyTo' in options && !['cachesDirectory', 'documentDirectory'].includes(options.copyTo ?? '')) { throw new TypeError('Invalid copyTo option: ' + options.copyTo); } return _NativeDocumentPicker.NativeDocumentPicker.pick(options); } function releaseSecureAccess(uris) { if (_reactNative.Platform.OS !== 'ios') { return Promise.resolve(); } (0, _invariant.default)(Array.isArray(uris) && uris.every(uri => typeof uri === 'string'), `"uris" should be an array of strings, was ${uris}`); return _NativeDocumentPicker.NativeDocumentPicker.releaseSecureAccess(uris); } const E_DOCUMENT_PICKER_CANCELED = 'DOCUMENT_PICKER_CANCELED'; const E_DOCUMENT_PICKER_IN_PROGRESS = 'ASYNC_OP_IN_PROGRESS'; function isCancel(err) { return isErrorWithCode(err, E_DOCUMENT_PICKER_CANCELED); } function isInProgress(err) { return isErrorWithCode(err, E_DOCUMENT_PICKER_IN_PROGRESS); } function isErrorWithCode(err, errorCode) { if (err && typeof err === 'object' && 'code' in err) { const nativeModuleErrorInstance = err; return (nativeModuleErrorInstance === null || nativeModuleErrorInstance === void 0 ? void 0 : nativeModuleErrorInstance.code) === errorCode; } return false; } var _default = { isCancel, isInProgress, releaseSecureAccess, pickDirectory, pick, pickSingle, types, perPlatformTypes: _fileTypes.perPlatformTypes }; exports.default = _default; //# sourceMappingURL=index.js.map