oak-general-business/lib/components/extraFile/forUrl/index.js

294 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var uuid_1 = require("oak-domain/lib/utils/uuid");
var assert_1 = tslib_1.__importDefault(require("assert"));
var lodash_1 = require("oak-domain/lib/utils/lodash");
exports.default = OakComponent({
entity: 'extraFile',
isList: true,
projection: {
id: 1,
tag1: 1,
tag2: 1,
origin: 1,
bucket: 1,
objectId: 1,
filename: 1,
extra1: 1,
extension: 1,
type: 1,
entity: 1,
entityId: 1,
fileType: 1,
sort: 1,
isBridge: 1,
},
filters: [
{
filter: function () {
var _a = this.props, tag1 = _a.tag1, tag2 = _a.tag2;
var filter1 = {};
if (tag1) {
Object.assign(filter1, { tag1: tag1 });
}
if (tag2) {
Object.assign(filter1, { tag2: tag2 });
}
return filter1;
},
},
],
formData: function (_a) {
var _this = this;
var _b, _c;
var originalFiles = _a.data, features = _a.features;
var file;
var notDeleteFiles = originalFiles === null || originalFiles === void 0 ? void 0 : originalFiles.filter(function (ele) { return !ele.$$deleteAt$$; });
if (this.props.tag1) {
file = (_b = notDeleteFiles === null || notDeleteFiles === void 0 ? void 0 : notDeleteFiles.filter(function (ele) { return (ele === null || ele === void 0 ? void 0 : ele.tag1) === _this.props.tag1; })) === null || _b === void 0 ? void 0 : _b[0];
}
if (this.props.tag2) {
file = (_c = notDeleteFiles === null || notDeleteFiles === void 0 ? void 0 : notDeleteFiles.filter(function (ele) { return (ele === null || ele === void 0 ? void 0 : ele.tag2) === _this.props.tag2; })) === null || _c === void 0 ? void 0 : _c[0];
}
return {
file: file,
src: features.extraFile.getUrl(file),
isBridge: file === null || file === void 0 ? void 0 : file.isBridge,
};
},
data: {
isModalOpen: false,
isModalOpen1: false,
renderImgs: [],
methodsType: '',
bridgeUrl: '',
selectedId: -1,
},
properties: {
type: '',
tag1: '',
tag2: '',
entity: '',
entityId: '',
imgUrls: [],
},
lifetimes: {},
listeners: {
imgUrls: function (prev, next) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
// 因为imgUrls是从请求来的 它有可能比上边的src listener中的getBridgeUrl慢
// 所以此处增加前后项imgUrls里都有值且不等的条件再去clean
if ((prev === null || prev === void 0 ? void 0 : prev.imgUrls.length) && (next === null || next === void 0 ? void 0 : next.imgUrls.length) && !(0, lodash_1.isEqual)(prev.imgUrls, next.imgUrls)) {
this.clean();
}
return [2 /*return*/];
});
});
}
},
methods: {
chooseMethod: function (method) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var fileInput_1, imgElement, imgUrls, renderImgs, renderImgs2, i, renderUrl, isWechatUrl;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (method) {
case 'uploadLocalImg':
fileInput_1 = document.createElement('input');
imgElement = document.getElementById('previewImg');
fileInput_1.type = 'file';
fileInput_1.accept = 'image/png, image/jpeg';
fileInput_1.style.display = 'none';
fileInput_1.addEventListener('change', function (e) {
if (!fileInput_1.files || fileInput_1.files.length === 0) {
return;
}
_this.myUpdateItem(fileInput_1.files[0]);
});
fileInput_1.click();
this.setState({
methodsType: method
});
this.setSelectedId(-1);
break;
case 'url':
this.setState({
isModalOpen: true,
methodsType: method
});
break;
case 'original':
this.setState({
isModalOpen1: true,
methodsType: method
});
imgUrls = this.props.imgUrls;
renderImgs = this.state.renderImgs;
renderImgs2 = new (Array.bind.apply(Array, tslib_1.__spreadArray([void 0], tslib_1.__read(renderImgs), false)))();
if (imgUrls && imgUrls.length) {
for (i = 0; i < imgUrls.length; i++) {
if (renderImgs2[i] && renderImgs2[i].originUrl === imgUrls[i]) {
return [2 /*return*/];
}
else if (renderImgs2[i] && renderImgs2[i].originUrl !== imgUrls[i]) {
renderImgs2 = [];
}
renderUrl = void 0;
isWechatUrl = this.isWechatUrlFn(imgUrls[i]);
if (isWechatUrl) {
renderUrl = this.features.extraFile.getUrl({ isBridge: true, extra1: imgUrls[i] });
}
else {
renderUrl = imgUrls[i];
}
renderImgs2.push({
renderUrl: renderUrl,
originUrl: imgUrls[i],
id: i,
isBridge: isWechatUrl
});
}
this.setState({
renderImgs: renderImgs2,
});
}
break;
}
return [2 /*return*/];
});
});
},
closeModal: function () {
this.setState({
isModalOpen: false,
});
},
closeModal1: function () {
this.setState({
isModalOpen1: false,
});
},
createExtraFileData: function (params) {
var methodsType = this.state.methodsType;
var _a = this.props, tag1 = _a.tag1, tag2 = _a.tag2, entity = _a.entity, entityId = _a.entityId;
var extension = '';
var filename = '';
var createData = {
extra1: params,
entity: entity,
entityId: entityId,
type: 'image',
tag1: tag1,
tag2: tag2,
objectId: (0, uuid_1.generateNewId)(),
bucket: '',
id: (0, uuid_1.generateNewId)(),
};
(0, assert_1.default)(entity, '必须传入entity');
switch (methodsType) {
case 'uploadLocalImg':
var _b = params, name_1 = _b.name, size = _b.size, type = _b.type;
extension = name_1.substring(name_1.lastIndexOf('.') + 1);
filename = name_1.substring(0, name_1.lastIndexOf('.'));
Object.assign(createData, {
origin: 'qiniu',
extension: extension,
filename: filename,
size: size,
fileType: type,
});
break;
case 'url':
Object.assign(createData, {
origin: 'unknown',
extension: extension,
filename: filename,
isBridge: this.isWechatUrlFn(params)
});
break;
case 'original':
Object.assign(createData, {
origin: 'unknown',
extension: extension,
filename: filename,
isBridge: this.isWechatUrlFn(params)
});
break;
}
return createData;
},
myAddItem: function (createData) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var methodsType;
var _this = this;
return tslib_1.__generator(this, function (_a) {
methodsType = this.state.methodsType;
this.addItem(createData, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var bucket;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (createData.bucket) {
// 说明本函数已经执行过了
return [2 /*return*/];
}
if (!(methodsType === 'uploadLocalImg')) return [3 /*break*/, 2];
return [4 /*yield*/, this.features.extraFile.upload(createData)];
case 1:
bucket = (_a.sent()).bucket;
Object.assign(createData, {
bucket: bucket,
extra1: null,
});
_a.label = 2;
case 2: return [2 /*return*/];
}
});
}); });
return [2 /*return*/];
});
});
},
myUpdateItem: function (params) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var file, createData;
return tslib_1.__generator(this, function (_a) {
file = this.state.file;
if (file) {
this.removeItem(file.id);
}
if (!!params) {
createData = this.createExtraFileData(params);
this.myAddItem(createData);
}
return [2 /*return*/];
});
});
},
onModalConfirm: function (value) {
var reg = new RegExp(/(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/);
if (!reg.test(value)) {
return;
}
this.myUpdateItem(value);
this.setSelectedId(-1);
},
onModal1Confirm: function (value) {
var renderImgs = this.state.renderImgs;
var img = renderImgs.find(function (ele) { return ele.id === value; });
this.myUpdateItem(img === null || img === void 0 ? void 0 : img.originUrl);
this.closeModal1();
},
isWechatUrlFn: function (url) {
return (url.startsWith('https://mmbiz.qpic.cn') || url.startsWith('http://mmbiz.qpic.cn'));
},
setSelectedId: function (id) {
this.setState({
selectedId: id
});
}
}
});