stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
118 lines • 4.24 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setupVideoAttachmentPreviewMiddleware = exports.localAttachmentToAttachment = exports.createDraftAttachmentsCompositionMiddleware = exports.createAttachmentsCompositionMiddleware = void 0;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _streamChat = require("stream-chat");
var _utils = require("../utils/utils");
var _excluded = ["localMetadata"];
var localAttachmentToAttachment = localAttachment => {
var localMetadata = localAttachment.localMetadata,
attachment = (0, _objectWithoutProperties2.default)(localAttachment, _excluded);
if ((0, _streamChat.isLocalImageAttachment)(localAttachment)) {
var isRemoteUri = !!attachment.image_url && !(0, _utils.isLocalUrl)(attachment.image_url);
if (isRemoteUri) return attachment;
return {
...attachment,
image_url: localMetadata?.previewUri,
localId: localMetadata?.id,
originalFile: localMetadata.file
};
} else {
var _isRemoteUri = !!attachment.asset_url && !(0, _utils.isLocalUrl)(attachment.asset_url);
if (_isRemoteUri) return attachment;
return {
...attachment,
asset_url: localMetadata.file.uri,
localId: localMetadata?.id,
originalFile: localMetadata.file
};
}
};
exports.localAttachmentToAttachment = localAttachmentToAttachment;
var createAttachmentsCompositionMiddleware = composer => ({
handlers: {
compose: ({
state,
next,
forward
}) => {
var attachmentManager = composer.attachmentManager;
if (!attachmentManager) return forward();
var attachments = (state.message.attachments ?? []).concat(attachmentManager.attachments.filter(attachment => attachment.localMetadata.uploadState !== 'blocked').map(localAttachmentToAttachment));
if (!attachments.length) return forward();
return next({
...state,
localMessage: {
...state.localMessage,
attachments: [...attachments]
},
message: {
...state.message,
attachments: [...attachments]
}
});
}
},
id: 'stream-io/message-composer-middleware/attachments'
});
exports.createAttachmentsCompositionMiddleware = createAttachmentsCompositionMiddleware;
var createDraftAttachmentsCompositionMiddleware = composer => ({
handlers: {
compose: ({
state,
next,
forward
}) => {
var attachmentManager = composer.attachmentManager;
if (!attachmentManager) return forward();
var attachments = (state.draft.attachments ?? []).concat(attachmentManager.attachments.filter(attachment => attachment.localMetadata.uploadState !== 'blocked').map(localAttachmentToAttachment));
return next({
...state,
draft: {
...state.draft,
attachments
}
});
}
},
id: 'stream-io/message-composer-middleware/draft-attachments'
});
exports.createDraftAttachmentsCompositionMiddleware = createDraftAttachmentsCompositionMiddleware;
var createVideoAttachmentPreviewMiddleware = () => ({
id: 'stream-io/message-composer-ui-middleware/video-attachment-preview',
handlers: {
prepare: ({
next,
forward,
state
}) => {
var attachment = state.attachment;
if (!attachment || !(0, _streamChat.isLocalVideoAttachment)(attachment)) {
return forward();
}
return next({
...state,
attachment: {
...attachment,
localMetadata: {
...attachment.localMetadata,
previewUri: attachment.thumb_url
}
}
});
}
}
});
var setupVideoAttachmentPreviewMiddleware = messageComposer => {
messageComposer.attachmentManager.preUploadMiddlewareExecutor.insert({
middleware: [createVideoAttachmentPreviewMiddleware()],
position: {
after: 'stream-io/attachment-manager-middleware/file-upload-config-check'
},
unique: true
});
};
exports.setupVideoAttachmentPreviewMiddleware = setupVideoAttachmentPreviewMiddleware;
//# sourceMappingURL=attachments.js.map