@slan-health/taro-vueuse
Version:
taro vue版本hooks
157 lines (156 loc) • 4.01 kB
JavaScript
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