Skip to content

Commit 8546781

Browse files
authored
Merge pull request #1295 from maxceem/files-date
issue #1289 - added date and user tooltip to FileListItem component
2 parents 1ed7554 + 123d54e commit 8546781

File tree

4 files changed

+52
-6
lines changed

4 files changed

+52
-6
lines changed

src/components/FileList/FileList.scss

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,17 @@
5959
font-size: 15px;
6060
color: $tc-gray-60;
6161
margin-left: auto;
62+
text-align: right;
63+
64+
.Tooltip {
65+
line-height: 100%;
66+
}
67+
68+
.date {
69+
font-size: 9px;
70+
line-height: normal;
71+
margin-top: 5px;
72+
}
6273
}
6374

6475
.edit-icons {

src/components/FileList/FileListItem.jsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import _ from 'lodash'
22
import React, {PropTypes} from 'react'
33
import filesize from 'filesize'
4-
import { Icons } from 'appirio-tech-react-components'
4+
import moment from 'moment'
5+
import { Icons, Tooltip } from 'appirio-tech-react-components'
6+
import UserWithName from '../User/UserWithName'
7+
import { TOOLTIP_DEFAULT_DELAY } from '../../config/constants'
58

69
const { TrashIcon, CloseIcon, EditIcon, SaveIcon } = Icons
710

@@ -88,13 +91,22 @@ export default class FileListItem extends React.Component {
8891
}
8992

9093
renderReadOnly() {
91-
const {title, downloadUrl, description, size, isEditable} = this.props
94+
const {title, downloadUrl, description, size, isEditable, updatedAt, createdAt, createdByUser, updatedByUser} = this.props
95+
9296
return (
9397
<div>
9498
<div className="title">
9599
<h4><a href={downloadUrl} target="_blank" rel="noopener noreferrer">{title}</a></h4>
96100
<div className="size">
97101
{filesize(size)}
102+
<Tooltip theme="light" tooltipDelay={TOOLTIP_DEFAULT_DELAY}>
103+
<div className="tooltip-target">
104+
<p className="date">{moment(updatedAt || createdAt).format('MMM DD, YYYY')}</p>
105+
</div>
106+
<div className="tooltip-body">
107+
<UserWithName {...(updatedByUser || createdByUser)} />
108+
</div>
109+
</Tooltip>
98110
</div>
99111
{isEditable && <div className="edit-icons">
100112
<i className="icon-edit" onClick={this.startEdit}><EditIcon /></i>
@@ -136,6 +148,10 @@ FileListItem.propTypes = {
136148
size: PropTypes.number.isRequired,
137149
contentType: PropTypes.string,
138150
isEditable: PropTypes.bool,
151+
updatedAt: PropTypes.string,
152+
createdAt: PropTypes.string.isRequired,
153+
updatedByUser: PropTypes.object,
154+
createdByUser: PropTypes.object.isRequired,
139155

140156
/**
141157
* Callback fired when a save button is clicked

src/config/constants.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,4 +264,7 @@ export const NEW_PROJECT_PATH = '/new-project'
264264

265265
// Analytics constants
266266
export const GA_CLICK_ID = '_gclid'
267-
export const GA_CLIENT_ID = '_gacid'
267+
export const GA_CLIENT_ID = '_gacid'
268+
269+
// ToolTip
270+
export const TOOLTIP_DEFAULT_DELAY = 300 // in ms

src/projects/detail/components/FileListContainer.jsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,18 @@ class FileListContainer extends Component {
3838
}
3939

4040
render() {
41-
const { files, projectId } = this.props
41+
const { files, projectId, allMembers } = this.props
4242
const storePath = `${PROJECT_ATTACHMENTS_FOLDER}/${projectId}/`
43+
files.forEach(file => {
44+
if (allMembers[file.updatedBy]) {
45+
file.updatedByUser = allMembers[file.updatedBy]
46+
}
47+
48+
if (allMembers[file.createdBy]) {
49+
file.createdByUser = allMembers[file.createdBy]
50+
}
51+
})
52+
4353
return (
4454
<div>
4555
<FileList files={files} onDelete={ this.deleteFile } onSave={ this.updateFile } />
@@ -51,10 +61,16 @@ class FileListContainer extends Component {
5161

5262
const mapDispatchToProps = {addProjectAttachment, updateProjectAttachment, removeProjectAttachment}
5363

64+
const mapStateToProps = ({ members }) => {
65+
return {
66+
allMembers : members.members
67+
}
68+
}
5469

5570
FileListContainer.propTypes = {
5671
projectId: PropTypes.number.isRequired,
57-
files: PropTypes.arrayOf(PropTypes.object).isRequired
72+
files: PropTypes.arrayOf(PropTypes.object).isRequired,
73+
allMembers: PropTypes.object.isRequired
5874
}
5975

60-
export default connect(null, mapDispatchToProps)(FileListContainer)
76+
export default connect(mapStateToProps, mapDispatchToProps)(FileListContainer)

0 commit comments

Comments
 (0)