From c63fce6a26aa1f2379c0201da43e6f916197bd06 Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 30 Sep 2016 18:54:29 -0300 Subject: [PATCH 1/2] Maxi - Add table sorter [skip ci] --- client/src/app-components/ticket-list.js | 43 +++++++++++++++++++-- client/src/app/demo/components-demo-page.js | 37 +++++++++++------- client/src/core-components/table.js | 12 +++++- client/src/data/fixtures/user-fixtures.js | 14 +++---- client/src/lib-core/date-transformer.js | 12 ++++++ 5 files changed, 91 insertions(+), 27 deletions(-) create mode 100644 client/src/lib-core/date-transformer.js diff --git a/client/src/app-components/ticket-list.js b/client/src/app-components/ticket-list.js index 6bf7f885..99f54638 100644 --- a/client/src/app-components/ticket-list.js +++ b/client/src/app-components/ticket-list.js @@ -6,6 +6,8 @@ import Table from 'core-components/table'; import Button from 'core-components/button'; import Tooltip from 'core-components/tooltip'; +import DateTransformer from 'lib-core/date-transformer'; + class TicketList extends React.Component { static propTypes = { tickets: React.PropTypes.arrayOf(React.PropTypes.object), @@ -23,7 +25,7 @@ class TicketList extends React.Component { render() { return (
- +
); } @@ -109,11 +111,13 @@ class TicketList extends React.Component { priority: this.getTicketPriority(ticket.priority), department: ticket.department.name, author: ticket.author.name, - date: ticket.date, + date: DateTransformer.transformToString(ticket.date), + unread: ticket.unread, highlighted: ticket.unread }; } - getTicketPriority(priority){ + + getTicketPriority(priority) { if(priority == 'high'){ return ( {i18n('HIGH')} @@ -130,6 +134,39 @@ class TicketList extends React.Component { ); } } + + compareFunction(row1, row2) { + let ans = 0; + + if (row1.closed == row2.closed) { + if (row1.unread == row2.unread) { + let s1 = row1.date; + let s2 = row2.date; + + let y1 = s1.substring(0, 4); + let y2 = s2.substring(0, 4); + + if (y1 == y2) { + let m1 = s1.substring(4, 6); + let m2 = s2.substring(4, 6); + + if (m1 == m2) { + let d1 = s1.substring(6, 8); + let d2 = s2.substring(6, 8); + + if (d1 == d2) { + return 0; + } + return d1 > d2 ? -1 : 1; + } + return m1 > m2 ? -1 : 1; + } + return y1 > y2 ? -1 : 1; + } + return row1.unread ? -1 : 1; + } + return row1.closed ? -1 : 1; + } } diff --git a/client/src/app/demo/components-demo-page.js b/client/src/app/demo/components-demo-page.js index 122bff4a..e1f724f1 100644 --- a/client/src/app/demo/components-demo-page.js +++ b/client/src/app/demo/components-demo-page.js @@ -128,21 +128,28 @@ let DemoPage = React.createClass({ {value:'Title First', key: 'title1'}, {value:'Title Second', key: 'title2'} ]} rows={[ - {title1: 'Row1', title2: 'Example'}, - {title1: 'Row2', title2: 'Example'}, - {title1: 'Row3', title2: 'Example'}, - {title1: 'Row4', title2: 'Example'}, - {title1: 'Row5', title2: 'Example'}, - {title1: 'Row6', title2: 'Example'}, - {title1: 'Row7', title2: 'Example'}, - {title1: 'Row8', title2: 'Example'}, - {title1: 'Row9', title2: 'Example'}, - {title1: 'Row10', title2: 'Example'}, - {title1: 'Row11', title2: 'Example'}, - {title1: 'Row12', title2: 'Example'}, - {title1: 'Row13', title2: 'Example'}, - {title1: 'Row14', title2: 'Example'} - ]} pageSize={3}/> + {title1: 'Row1', title2: 'Example', n: 1}, + {title1: 'Row2', title2: 'Example', n: 2}, + {title1: 'Row3', title2: 'Example', n: 3}, + {title1: 'Row4', title2: 'Example', n: 4}, + {title1: 'Row5', title2: 'Example', n: 5}, + {title1: 'Row6', title2: 'Example', n: 6}, + {title1: 'Row7', title2: 'Example', n: 7}, + {title1: 'Row8', title2: 'Example', n: 8}, + {title1: 'Row9', title2: 'Example', n: 9}, + {title1: 'Row10', title2: 'Example', n: 10}, + {title1: 'Row11', title2: 'Example', n: 11}, + {title1: 'Row12', title2: 'Example', n: 12}, + {title1: 'Row13', title2: 'Example', n: 13}, + {title1: 'Row14', title2: 'Example', n: 14} + ]} pageSize={3} comp={function (a, b) { + let ans = 0; + if(a.title1 < b.title1) + ans = -1; + else if(a.title1 > b.title1) + ans = 1; + return ans; + }}/> ) } ], diff --git a/client/src/core-components/table.js b/client/src/core-components/table.js index d63d40aa..72bc875b 100644 --- a/client/src/core-components/table.js +++ b/client/src/core-components/table.js @@ -13,7 +13,8 @@ class Table extends React.Component { })), rows: React.PropTypes.arrayOf(React.PropTypes.object), pageSize: React.PropTypes.number, - type: React.PropTypes.oneOf(['default']) + type: React.PropTypes.oneOf(['default']), + comp: React.PropTypes.func }; static defaultProps = { @@ -34,7 +35,7 @@ class Table extends React.Component { - {this.props.rows.map(this.renderRow.bind(this))} + {this.getRows().map(this.renderRow.bind(this))}
{(this.props.pageSize && this.props.rows.length > this.props.pageSize) ? this.renderNavigation() : null} @@ -100,6 +101,13 @@ class Table extends React.Component { return classNames(classes); } + + getRows() { + let v = _.clone(this.props.rows); + v.sort(this.props.comp); + return v; + } + } export default Table; \ No newline at end of file diff --git a/client/src/data/fixtures/user-fixtures.js b/client/src/data/fixtures/user-fixtures.js index 529789bc..d0b2cf36 100644 --- a/client/src/data/fixtures/user-fixtures.js +++ b/client/src/data/fixtures/user-fixtures.js @@ -143,10 +143,10 @@ module.exports = [ id: 2, name: 'Environment Setup' }, - date: '15 Apr 2016', + date: '20140415', file: 'http://www.opensupports.com/some_file.zip', language: 'en', - unread: true, + unread: false, closed: false, priority: 'low', author: { @@ -168,7 +168,7 @@ module.exports = [ email: 'jobs@steve.com', staff: true }, - date: '12 Dec 2016', + date: '20161212', file: '' }, { @@ -179,7 +179,7 @@ module.exports = [ steve: 'haskell@lambda.com', staff: false }, - date: '12 Dec 2016', + date: '20161212', file: '' } ] @@ -192,7 +192,7 @@ module.exports = [ id: 2, name: 'Environment Setup' }, - date: '15 Apr 2016', + date: '20170415', file: 'http://www.opensupports.com/some_file.zip', language: 'en', unread: false, @@ -232,10 +232,10 @@ module.exports = [ id: 2, name: 'Environment Setup' }, - date: '15 Apr 2016', + date: '20160415', file: 'http://www.opensupports.com/some_file.zip', language: 'en', - unread: false, + unread: true, closed: false, priority: 'high', author: { diff --git a/client/src/lib-core/date-transformer.js b/client/src/lib-core/date-transformer.js new file mode 100644 index 00000000..9c036994 --- /dev/null +++ b/client/src/lib-core/date-transformer.js @@ -0,0 +1,12 @@ +let month = ["", "Jan", "Feb", "Mar", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + +export default { + transformToString (date) { + let y = date.substring(0, 4); + let m = date.substring(4, 6); + let d = date.substring(6, 8); + m = (m[0] - '0') * 10 + (m[1] - '0'); + + return d + " " + month[m] + " " + y; + } +}; \ No newline at end of file From 3f9df559db515d7beb14f8d68c111f64f45ade4b Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 20 Oct 2016 15:57:40 -0300 Subject: [PATCH 2/2] Ivan - Change dates from int to strings [skip ci] --- client/src/data/fixtures/user-fixtures.js | 63 +++++++++++------------ 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/client/src/data/fixtures/user-fixtures.js b/client/src/data/fixtures/user-fixtures.js index bbd87aa0..dcb09daf 100644 --- a/client/src/data/fixtures/user-fixtures.js +++ b/client/src/data/fixtures/user-fixtures.js @@ -90,7 +90,6 @@ module.exports = [ path: '/user/signup', time: 1000, response: function (data) { - if (data.email.length > 15) { return { status: 'success', @@ -143,7 +142,7 @@ module.exports = [ id: 2, name: 'Environment Setup' }, - date: '15 Apr 2016', + date: '20160416', file: 'http://www.opensupports.com/some_file.zip', language: 'en', unread: true, @@ -162,7 +161,7 @@ module.exports = [ actions: [ { type: 'ASSIGN', - date: 20150409, + date: '20150409', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -172,7 +171,7 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150409, + date: '20150409', content: 'Do you have apache installed? It generally happens if you dont have apache.', author: { name: 'Emilia Clarke', @@ -183,7 +182,7 @@ module.exports = [ }, { type: 'UN_ASSIGN', - date: 20150410, + date: '20150410', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -193,7 +192,7 @@ module.exports = [ }, { type: 'DEPARTMENT_CHANGED', - date: 20150411, + date: '20150411', content: 'System support', author: { name: 'Emilia Clarke', @@ -204,7 +203,7 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150412, + date: '20150412', content: 'I have already installed apache, but the problem persists', author: { name: 'Haskell Curry', @@ -214,7 +213,7 @@ module.exports = [ }, { type: 'PRIORITY_CHANGED', - date: 20150413, + date: '20150413', content: 'MEDIUM', author: { name: 'Emilia Clarke', @@ -225,8 +224,8 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150511, - content: 'Thanks!, I soved it by myself', + date: '20150511', + content: 'Thanks!, I solved it by myself', author: { name: 'Haskell Curry', steve: 'haskell@lambda.com', @@ -235,7 +234,7 @@ module.exports = [ }, { type: 'CLOSE', - date: 20150513, + date: '20150513', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -245,7 +244,7 @@ module.exports = [ }, { type: 'RE_OPEN', - date: 20151018, + date: '20151018', author: { name: 'Haskell Curry', email: 'haskell@lambda.com', @@ -262,7 +261,7 @@ module.exports = [ id: 2, name: 'Environment Setup' }, - date: '15 Apr 2016', + date: '20160415', file: 'http://www.opensupports.com/some_file.zip', language: 'en', unread: false, @@ -278,7 +277,7 @@ module.exports = [ actions: [ { type: 'ASSIGN', - date: 20150409, + date: '20150409', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -288,7 +287,7 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150409, + date: '20150409', content: 'Do you have apache installed? It generally happens if you dont have apache.', author: { name: 'Emilia Clarke', @@ -299,7 +298,7 @@ module.exports = [ }, { type: 'UN_ASSIGN', - date: 20150410, + date: '20150410', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -309,7 +308,7 @@ module.exports = [ }, { type: 'DEPARTMENT_CHANGED', - date: 20150411, + date: '20150411', content: 'System support', author: { name: 'Emilia Clarke', @@ -320,7 +319,7 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150412, + date: '20150412', content: 'I have already installed apache, but the problem persists', author: { name: 'Haskell Curry', @@ -330,7 +329,7 @@ module.exports = [ }, { type: 'PRIORITY_CHANGED', - date: 20150413, + date: '20150413', content: 'MEDIUM', author: { name: 'Emilia Clarke', @@ -341,7 +340,7 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150511, + date: '20150511', content: 'Thanks!, I soved it by myself', author: { name: 'Haskell Curry', @@ -351,7 +350,7 @@ module.exports = [ }, { type: 'CLOSE', - date: 20150513, + date: '20150513', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -361,7 +360,7 @@ module.exports = [ }, { type: 'RE_OPEN', - date: 20151018, + date: '20151018', author: { name: 'Haskell Curry', email: 'haskell@lambda.com', @@ -378,7 +377,7 @@ module.exports = [ id: 2, name: 'Environment Setup' }, - date: 20150409, + date: '20150409', file: 'http://www.opensupports.com/some_file.zip', language: 'en', unread: false, @@ -394,7 +393,7 @@ module.exports = [ actions: [ { type: 'ASSIGN', - date: 20150409, + date: '20150409', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -404,7 +403,7 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150409, + date: '20150409', content: 'Do you have apache installed? It generally happens if you dont have apache.', author: { name: 'Emilia Clarke', @@ -415,7 +414,7 @@ module.exports = [ }, { type: 'UN_ASSIGN', - date: 20150410, + date: '20150410', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -425,7 +424,7 @@ module.exports = [ }, { type: 'DEPARTMENT_CHANGED', - date: 20150411, + date: '20150411', content: 'System support', author: { name: 'Emilia Clarke', @@ -436,7 +435,7 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150412, + date: '20150412', content: 'I have already installed apache, but the problem persists', author: { name: 'Haskell Curry', @@ -446,7 +445,7 @@ module.exports = [ }, { type: 'PRIORITY_CHANGED', - date: 20150413, + date: '20150413', content: 'MEDIUM', author: { name: 'Emilia Clarke', @@ -457,7 +456,7 @@ module.exports = [ }, { type: 'COMMENT', - date: 20150511, + date: '20150511', content: 'Thanks!, I soved it by myself', author: { name: 'Haskell Curry', @@ -467,7 +466,7 @@ module.exports = [ }, { type: 'CLOSE', - date: 20150513, + date: '20150513', author: { name: 'Emilia Clarke', email: 'jobs@steve.com', @@ -477,7 +476,7 @@ module.exports = [ }, { type: 'RE_OPEN', - date: 20151018, + date: '20151018', author: { name: 'Haskell Curry', email: 'haskell@lambda.com',