Render media gallery placeholder panel
This commit is contained in:
parent
f9e4613395
commit
32a3ef518b
3 changed files with 71 additions and 0 deletions
|
@ -208,6 +208,7 @@
|
||||||
'click .update-group': 'newGroupUpdate',
|
'click .update-group': 'newGroupUpdate',
|
||||||
'click .show-identity': 'showSafetyNumber',
|
'click .show-identity': 'showSafetyNumber',
|
||||||
'click .show-members': 'showMembers',
|
'click .show-members': 'showMembers',
|
||||||
|
'click .view-all-media': 'viewAllMedia',
|
||||||
'click .conversation-menu .hamburger': 'toggleMenu',
|
'click .conversation-menu .hamburger': 'toggleMenu',
|
||||||
click: 'onClick',
|
click: 'onClick',
|
||||||
'click .bottom-bar': 'focusMessageField',
|
'click .bottom-bar': 'focusMessageField',
|
||||||
|
@ -630,6 +631,60 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
viewAllMedia() {
|
||||||
|
// We have to do this manually, since our React component will not propagate click
|
||||||
|
// events up to its parent elements in the DOM.
|
||||||
|
this.closeMenu();
|
||||||
|
|
||||||
|
const ReactWrapper = Backbone.View.extend({
|
||||||
|
initialize(options) {
|
||||||
|
const { Component, props, onClose } = options;
|
||||||
|
this.render();
|
||||||
|
this.onClose = onClose;
|
||||||
|
|
||||||
|
const updatedProps = Object.assign({}, props, {
|
||||||
|
close: () => {
|
||||||
|
if (onClose) {
|
||||||
|
onClose();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.remove();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const element = window.React.createElement(Component, updatedProps);
|
||||||
|
window.ReactDOM.render(element, this.el);
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
window.ReactDOM.unmountComponentAtNode(this.el);
|
||||||
|
Backbone.View.prototype.remove.call(this);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Next:
|
||||||
|
// pull latest media
|
||||||
|
// need a way for react component to request further data
|
||||||
|
|
||||||
|
// needed components:
|
||||||
|
// GalleryPanel
|
||||||
|
// Section - header, list of thumbnails
|
||||||
|
// Thumbnail
|
||||||
|
// Lightbox - or do we use the lightbox already in the app?
|
||||||
|
|
||||||
|
const Component = window.Signal.Components.MediaGallery;
|
||||||
|
const props = {
|
||||||
|
number: 10,
|
||||||
|
};
|
||||||
|
|
||||||
|
const view = new ReactWrapper({
|
||||||
|
Component,
|
||||||
|
props,
|
||||||
|
onClose: this.resetPanel.bind(this),
|
||||||
|
});
|
||||||
|
|
||||||
|
this.listenBack(view);
|
||||||
|
},
|
||||||
|
|
||||||
focusMessageField() {
|
focusMessageField() {
|
||||||
this.$messageField.focus();
|
this.$messageField.focus();
|
||||||
},
|
},
|
||||||
|
|
|
@ -161,9 +161,12 @@ window.Signal.Debug = require('./js/modules/debug');
|
||||||
window.Signal.HTML = require('./ts/html');
|
window.Signal.HTML = require('./ts/html');
|
||||||
window.Signal.Logs = require('./js/modules/logs');
|
window.Signal.Logs = require('./js/modules/logs');
|
||||||
|
|
||||||
|
const { MediaGallery } =
|
||||||
|
require('./ts/components/conversation/media-gallery/MediaGallery');
|
||||||
const { Quote } = require('./ts/components/conversation/Quote');
|
const { Quote } = require('./ts/components/conversation/Quote');
|
||||||
|
|
||||||
window.Signal.Components = {
|
window.Signal.Components = {
|
||||||
|
MediaGallery,
|
||||||
Quote,
|
Quote,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
13
ts/components/conversation/media-gallery/MediaGallery.tsx
Normal file
13
ts/components/conversation/media-gallery/MediaGallery.tsx
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
number: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class MediaGallery extends React.Component<Props, {}> {
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<div>Hello Media Gallery! Number: {this.props.number}</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue