antonyantonio - add priority ticket backend[skip ci]

This commit is contained in:
ivan 2016-09-29 18:27:16 -03:00
parent be8374fd9a
commit bbb1fe6111
6 changed files with 233 additions and 79 deletions

View File

@ -0,0 +1,136 @@
import React from 'react';
import i18n from 'lib-app/i18n';
import Table from 'core-components/table';
import Button from 'core-components/button';
import Tooltip from 'core-components/tooltip';
class TicketList extends React.Component {
static propTypes = {
tickets: React.PropTypes.arrayOf(React.PropTypes.object),
type: React.PropTypes.oneOf([
'primary',
'secondary'
])
};
static defaultProps = {
tickets: [],
type: 'primary'
};
render() {
return (
<div className="ticket-list">
<Table headers={this.getTableHeaders()} rows={this.getTableRows()} pageSize={10} />
</div>
);
}
getTableHeaders() {
if (this.props.type == 'primary' ) {
return [
{
key: 'number',
value: i18n('NUMBER'),
className: 'ticket-list__number col-md-1'
},
{
key: 'title',
value: i18n('TITLE'),
className: 'ticket-list__title col-md-6'
},
{
key: 'department',
value: i18n('DEPARTMENT'),
className: 'ticket-list__department col-md-3'
},
{
key: 'date',
value: i18n('DATE'),
className: 'ticket-list__date col-md-2'
}
];
} else if (this.props.type == 'secondary') {
return [
{
key: 'number',
value: i18n('NUMBER'),
className: 'ticket-list__number col-md-1'
},
{
key: 'title',
value: i18n('TITLE'),
className: 'ticket-list__title col-md-4'
},
{
key: 'priority',
value: i18n('PRIORITY'),
className: 'ticket-list__priority col-md-1'
},
{
key: 'department',
value: i18n('DEPARTMENT'),
className: 'ticket-list__department col-md-2'
},
{
key: 'author',
value: i18n('AUTHOR'),
className: 'ticket-list__author col-md-2'
},
{
key: 'date',
value: i18n('DATE'),
className: 'ticket-list__date col-md-2'
}
];
}
}
getTableRows() {
return this.props.tickets.map(this.gerTicketTableObject.bind(this));
}
gerTicketTableObject(ticket) {
let titleText = (ticket.unread) ? ticket.title + ' (1)' : ticket.title;
return {
number: (
<Tooltip content="hola">
{'#' + ticket.ticketNumber}
</Tooltip>
),
title: (
<Button className="ticket-list__title-link" type="clean" route={{to: '/dashboard/ticket/' + ticket.ticketNumber}}>
{titleText}
</Button>
),
priority: this.getTicketPriority(ticket.priority),
department: ticket.department.name,
author: ticket.author.name,
date: ticket.date,
highlighted: ticket.unread
};
}
getTicketPriority(priority){
if(priority == 'high'){
return (
<span className="ticket-list__priority-high">{i18n('HIGH')}</span>
);
}
if(priority == 'medium'){
return (
<span className="ticket-list__priority-medium">{i18n('MEDIUM')}</span>
);
}
if(priority == 'low'){
return (
<span className="ticket-list__priority-low">{i18n('LOW')}</span>
);
}
}
}
export default TicketList;

View File

@ -0,0 +1,47 @@
@import "../scss/vars";
.ticket-list {
&__number {
text-align: left;
}
&__title {
text-align: left;
}
&__department {
text-align: right;
}
&__date {
text-align: right;
}
&__title-link:hover,
&__title-link:focus {
outline: none;
text-decoration: underline;
}
&__priority-low,
&__priority-medium,
&__priority-high {
display: inline-block;
border-radius: 10px;
width: 70px;
color: white;
}
&__priority-low {
background-color: $primary-green;
}
&__priority-medium {
background-color: $secondary-blue;
}
&__priority-high {
background-color: $primary-red;
}
}

View File

@ -4,9 +4,7 @@ import {connect} from 'react-redux';
import i18n from 'lib-app/i18n'; import i18n from 'lib-app/i18n';
import Header from 'core-components/header'; import Header from 'core-components/header';
import Table from 'core-components/table'; import TicketList from 'app-components/ticket-list';
import Button from 'core-components/button';
import Tooltip from 'core-components/tooltip';
class DashboardListTicketsPage extends React.Component { class DashboardListTicketsPage extends React.Component {
static propTypes = { static propTypes = {
@ -21,59 +19,10 @@ class DashboardListTicketsPage extends React.Component {
return ( return (
<div className="dashboard-ticket-list"> <div className="dashboard-ticket-list">
<Header title={i18n('TICKET_LIST')} description={i18n('TICKET_LIST_DESCRIPTION')} /> <Header title={i18n('TICKET_LIST')} description={i18n('TICKET_LIST_DESCRIPTION')} />
<Table headers={this.getTableHeaders()} rows={this.getTableRows()} pageSize={10} /> <TicketList tickets={this.props.tickets} type="primary"/>
</div> </div>
); );
} }
getTableHeaders() {
return [
{
key: 'number',
value: 'Number',
className: 'dashboard-ticket-list__number col-md-1'
},
{
key: 'title',
value: 'Title',
className: 'dashboard-ticket-list__title col-md-6'
},
{
key: 'department',
value: 'Department',
className: 'dashboard-ticket-list__department col-md-3'
},
{
key: 'date',
value: 'Date',
className: 'dashboard-ticket-list__date col-md-2'
}
];
}
getTableRows() {
return this.props.tickets.map(this.gerTicketTableObject.bind(this));
}
gerTicketTableObject(ticket) {
let titleText = (ticket.unread) ? ticket.title + ' (1)' : ticket.title;
return {
number: (
<Tooltip content="hola">
{'#' + ticket.ticketNumber}
</Tooltip>
),
title: (
<Button className="dashboard-ticket-list__title-link" type="clean" route={{to: '/dashboard/ticket/' + ticket.ticketNumber}}>
{titleText}
</Button>
),
department: ticket.department.name,
date: ticket.date,
highlighted: ticket.unread
};
}
} }

View File

@ -1,26 +0,0 @@
@import "../../../../scss/vars";
.dashboard-ticket-list {
&__number {
text-align: left;
}
&__title {
text-align: left;
}
&__department {
text-align: right;
}
&__date {
text-align: right;
}
&__title-link:hover,
&__title-link:focus {
outline: none;
text-decoration: underline;
}
}

View File

@ -148,6 +148,7 @@ module.exports = [
language: 'en', language: 'en',
unread: true, unread: true,
closed: false, closed: false,
priority: 'low',
author: { author: {
id: 12, id: 12,
name: 'Haskell Curry', name: 'Haskell Curry',
@ -196,6 +197,47 @@ module.exports = [
language: 'en', language: 'en',
unread: false, unread: false,
closed: false, closed: false,
priority: 'medium',
author: {
name: 'Haskell Curry',
email: 'haskell@lambda.com'
},
owner: {
name: 'Steve Jobs'
},
comments: [
{
content: 'Do you have apache installed? It generally happens if you dont have apache.',
author: {
name: 'Steve Jobs',
email: 'jobs@steve.com',
staff: true
}
},
{
content: 'I have already installed apache, but the problem persists',
author: {
name: 'Haskell Curry',
steve: 'haskell@lambda.com',
staff: false
}
}
]
},
{
ticketNumber: '878552',
title: 'Lorem ipsum door',
content: 'I had a problem with the installation of the php server',
department: {
id: 2,
name: 'Environment Setup'
},
date: '15 Apr 2016',
file: 'http://www.opensupports.com/some_file.zip',
language: 'en',
unread: false,
closed: false,
priority: 'high',
author: { author: {
name: 'Haskell Curry', name: 'Haskell Curry',
email: 'haskell@lambda.com' email: 'haskell@lambda.com'

View File

@ -55,6 +55,12 @@ export default {
'USER_SYSTEM': 'User System', 'USER_SYSTEM': 'User System',
'EMAIL_TEMPLATES': 'Email Templates', 'EMAIL_TEMPLATES': 'Email Templates',
'FILTERS_CUSTOM_FIELDS': 'Filters and Custom Fields', 'FILTERS_CUSTOM_FIELDS': 'Filters and Custom Fields',
'PRIORITY': 'Priority',
'NUMBER': 'Number',
'HIGH': 'High',
'MEDIUM': 'Medium',
'LOW': 'Low',
'TITLE': 'Title',
//ERRORS //ERRORS
'EMAIL_OR_PASSWORD': 'Email or password invalid', 'EMAIL_OR_PASSWORD': 'Email or password invalid',