summaryrefslogtreecommitdiffstats
path: root/web/react/components/file_attachment_list.jsx
blob: 212d4a9580fcd21114bb52638f176c1d17f35525 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.

var ViewImageModal = require('./view_image.jsx');
var FileAttachment = require('./file_attachment.jsx');
var Constants = require('../utils/constants.jsx');

export default class FileAttachmentList extends React.Component {
    constructor(props) {
        super(props);

        this.handleImageClick = this.handleImageClick.bind(this);

        this.state = {showPreviewModal: false, startImgId: 0};
    }
    handleImageClick(indexClicked) {
        this.setState({showPreviewModal: true, startImgId: indexClicked});
    }
    render() {
        var filenames = this.props.filenames;

        var postFiles = [];
        for (var i = 0; i < filenames.length && i < Constants.MAX_DISPLAY_FILES; i++) {
            postFiles.push(
                <FileAttachment
                    key={'file_attachment_' + i}
                    filename={filenames[i]}
                    index={i}
                    handleImageClick={this.handleImageClick}
                />
            );
        }

        return (
            <div>
                <div className='post-image__columns'>
                    {postFiles}
                </div>
                <ViewImageModal
                    show={this.state.showPreviewModal}
                    onModalDismissed={() => this.setState({showPreviewModal: false})}
                    channelId={this.props.channelId}
                    userId={this.props.userId}
                    startId={this.state.startImgId}
                    filenames={filenames}
                />
            </div>
        );
    }
}

FileAttachmentList.propTypes = {

    // a list of file pathes displayed by this
    filenames: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,

    // the channel that this is part of
    channelId: React.PropTypes.string,

    // the user that owns the post that this is attached to
    userId: React.PropTypes.string
};