UNPKG

vantui-edit

Version:

一套适用于Taro3及React的vantui组件库

143 lines (129 loc) 3.65 kB
import { chooseImage, chooseMedia, chooseVideo, chooseMessageFile } from '@tarojs/taro'; import { pickExclude } from '../common/utils'; import { isImageUrl, isVideoUrl } from '../common/validator'; export function isImageFile(item) { if (item.isImage != null) { return item.isImage; } if (item.type) { return item.type === 'image'; } if (item.url) { return isImageUrl(item.url); } return false; } export function isVideoFile(item) { if (item.isVideo != null) { return item.isVideo; } if (item.type) { return item.type === 'video'; } if (item.url) { return isVideoUrl(item.url); } return false; } function formatImage(res) { if (res.tempFiles) { return res.tempFiles.map(function (item) { return Object.assign(Object.assign({}, pickExclude(item, ['path'])), { type: 'image', url: item.path, thumb: item.path }); }); } else if (res.tempFilePaths) { return res.tempFilePaths.map(function (item) { return { type: 'image', url: item, thumb: item }; }); } } function formatVideo(res) { return [Object.assign(Object.assign({}, pickExclude(res, ['tempFilePath', 'thumbTempFilePath', 'errMsg'])), { type: 'video', url: res.tempFilePath, thumb: res.thumbTempFilePath })]; } function formatMedia(res) { return res.tempFiles.map(function (item) { return Object.assign(Object.assign({}, pickExclude(item, ['fileType', 'thumbTempFilePath', 'tempFilePath'])), { type: res.type, url: item.tempFilePath, thumb: res.type === 'video' ? item.thumbTempFilePath : item.tempFilePath }); }); } function formatFile(res) { return res.tempFiles.map(function (item) { return Object.assign(Object.assign({}, pickExclude(item, ['path'])), { url: item.path }); }); } export function chooseFile(_ref) { var accept = _ref.accept, multiple = _ref.multiple, capture = _ref.capture, compressed = _ref.compressed, maxDuration = _ref.maxDuration, sizeType = _ref.sizeType, camera = _ref.camera, maxCount = _ref.maxCount; return new Promise(function (resolve, reject) { switch (accept) { case 'image': chooseImage({ count: multiple ? Math.min(maxCount, 9) : 1, sourceType: capture || ['album', 'camera'], sizeType: sizeType || ['original', 'compressed'], success: function success(res) { return resolve(formatImage(res)); }, fail: reject }); break; case 'media': chooseMedia({ count: multiple ? Math.min(maxCount, 9) : 1, sourceType: capture || ['album', 'camera'], maxDuration: maxDuration, sizeType: sizeType || ['original', 'compressed'], camera: camera || 'back', success: function success(res) { return resolve(formatMedia(res)); }, fail: reject }); break; case 'video': chooseVideo({ sourceType: capture || ['album', 'camera'], compressed: compressed, maxDuration: maxDuration || 60, camera: camera || 'back', success: function success(res) { return resolve(formatVideo(res)); }, fail: reject }); break; default: chooseMessageFile({ count: multiple ? maxCount : 1, type: accept, success: function success(res) { return resolve(formatFile(res)); }, fail: reject }); break; } }); }