UNPKG

@slan-health/taro-vueuse

Version:

taro vue版本hooks

157 lines (156 loc) 4.01 kB
import Taro, { getEnv, getImageInfo, saveImageToPhotosAlbum, previewImage, chooseImage } from "@tarojs/taro"; import { ref } from "vue"; import { downloadImage, compressForH5, saveImageForH5 } from "./utils.js"; import { ENV_TYPE } from "../constant.js"; function useImage(options) { const fileInfoRef = ref({}); const env = getEnv(); const chooseImageAsync = (option = {}) => { const { count, sizeType, sourceType } = options; const finalOptions = Object.assign( {}, Object.fromEntries( [ ["count", count], ["sizeType", sizeType], ["sourceType", sourceType] ].filter((v) => v[1]) || [] ), option || {} ); return new Promise((resolve, reject) => { try { chooseImage({ ...finalOptions, success: (res) => { const { errMsg, ...fileInfo } = res; fileInfoRef.value = fileInfo; resolve(res); }, fail: reject }).catch(reject); } catch (e) { reject(e); } }); }; const previewImageAsync = (option) => { return new Promise((resolve, reject) => { try { previewImage({ ...option, success: resolve, fail: reject }).catch(reject); } catch (e) { reject(e); } }); }; const saveImageToPhotosAlbumAsync = (filePath) => { return new Promise(async (resolve, reject) => { if (!filePath) { reject("you must provide filePath"); } else { try { if (env === ENV_TYPE.WEB) { const result = await saveImageForH5(filePath); if (result) { resolve({ errMsg: "save success" }); } else { reject("save fail"); } } else { saveImageToPhotosAlbum({ filePath, success: resolve, fail: reject }).catch(reject); } } catch (e) { reject(e); } } }); }; const getImageInfoAsync = (src) => { return new Promise((resolve, reject) => { if (!src) { reject("please enter a valid path"); } else { try { getImageInfo({ src, success: resolve, fail: reject }).catch(reject); } catch (e) { reject(e); } } }); }; const chooseMessageFileAsync = (count, type, extension) => { return new Promise((resolve, reject) => { if (!count || env !== ENV_TYPE.WEAPP) { reject("you must provide count"); } else { try { const payload = Object.fromEntries( [ ["type", type], ["extension", extension] ].filter((v) => v[1]) || [] ); Taro.chooseMessageFile({ count, ...payload, success: resolve, fail: reject }); } catch (e) { reject(e); } } }); }; const compressImageAsync = (src, quality) => { return new Promise(async (resolve, reject) => { if (!src) { reject("you must provide src"); } try { if (env === ENV_TYPE.WEB) { const blob = await downloadImage(src); compressForH5(blob, quality).then(resolve, reject); } else { Taro.compressImage({ src, ...quality ? { quality } : {}, success: resolve, fail: reject }).catch(reject); } } catch (e) { reject(e); } }); }; return [ fileInfoRef, { choose: chooseImageAsync, chooseMessageFile: chooseMessageFileAsync, preview: previewImageAsync, save: saveImageToPhotosAlbumAsync, getInfo: getImageInfoAsync, compress: compressImageAsync } ]; } export { useImage as default }; //# sourceMappingURL=index.js.map