Skip to content

Commit 4443323

Browse files
authored
Merge pull request #469 from micaelbergeron/own_table
Match vision tab overhaul
2 parents 93ee09d + 8b2de47 commit 4443323

File tree

15 files changed

+715
-194
lines changed

15 files changed

+715
-194
lines changed

.eslintrc.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"settings": {
1313
"import/resolver": "webpack"
1414
},
15+
"globals": {
16+
"API_HOST": true
17+
},
1518
"extends": "airbnb",
1619
"rules": {
1720
"max-len": ["error", 150],

index.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,4 @@
4343
</script>
4444
<script src="/build/bundle.js"></script>
4545
</body>
46-
4746
</html>

package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"flexboxgrid": "6.3.1",
3030
"heatmap.js": "2.0.5",
3131
"isomorphic-fetch": "2.2.1",
32+
"lodash": "^4.16.4",
3233
"material-ui": "0.16.1",
3334
"node-uuid": "1.4.7",
3435
"postcss-browser-reporter": "0.5.0",
@@ -38,8 +39,10 @@
3839
"postcss-loader": "1.1.1",
3940
"postcss-reporter": "2.0.0",
4041
"react": "15.3.2",
42+
"react-addons-css-transition-group": "^15.3.2",
4143
"react-dom": "15.3.2",
4244
"react-flexbox-grid": "0.10.2",
45+
"react-measure": "^1.3.1",
4346
"react-redux": "4.4.5",
4447
"react-router": "3.0.0",
4548
"react-router-redux": "4.0.7",
@@ -50,6 +53,7 @@
5053
"redux-responsive": "3.2.0",
5154
"redux-thunk": "2.1.0",
5255
"reselect": "2.5.4",
56+
"seamless-immutable": "^6.3.0",
5357
"webpack": "2.1.0-beta.22",
5458
"webpack-dashboard": "0.2.0",
5559
"webpack-dev-server": "1.16.2",
@@ -71,6 +75,8 @@
7175
"eslint-plugin-react": "6.6.0",
7276
"file-loader": "0.9.0",
7377
"json-loader": "0.5.4",
78+
"react-addons-perf": "^15.3.2",
79+
"react-perf-tool": "^0.1.7",
7480
"style-loader": "0.13.1",
7581
"url-loader": "0.5.7"
7682
},

src/components/App/App.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ const muiTheme = {
2020
palette: {
2121
textColor: palette.textColorPrimary,
2222
primary1Color: palette.blue,
23+
canvasColor: palette.primarySurfaceColor,
24+
borderColor: palette.dividerColor,
2325
},
2426
button: { height: 38 },
2527
};

src/components/Match/Match.css

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
@import "../palette.css";
22

3+
:root {
4+
--ward-log-height: 50px;
5+
}
6+
7+
:export {
8+
wardLogRowOddSurfaceColor: var(--tableRowOddSurfaceColor);
9+
wardLogRowEvenSurfaceColor: var(--tableRowEvenSurfaceColor);
10+
}
11+
312
.Header {
413
text-align: center;
514
display: block;
@@ -148,6 +157,117 @@
148157
vertical-align: middle;
149158
}
150159

160+
.wardLog {
161+
width: 100%;
162+
font-size: var(--fontSizeSmall);
163+
164+
& .wardLogHeader {
165+
background-color: var(--tableHeaderSurfaceColor);
166+
border-bottom: 1px solid var(--dividerLightColor);
167+
text-transform: uppercase;
168+
height: 58px;
169+
}
170+
171+
& .wardLogList {
172+
padding: 0;
173+
margin: 0;
174+
}
175+
176+
& .timespan {
177+
text-align: right;
178+
}
179+
}
180+
181+
.wardLogItem {
182+
height: var(--ward-log-height);
183+
background: rgb(31, 33, 45);
184+
border-bottom: 1px solid var(--dividerColor);
185+
}
186+
187+
.trans-table-row-enter {
188+
height: 0;
189+
opacity: 0;
190+
191+
&.trans-table-row-enter-active {
192+
height: var(--ward-log-height);
193+
opacity: 1;
194+
transition: height 300ms ease, opacity 300ms ease;
195+
}
196+
}
197+
198+
.trans-table-row-leave {
199+
height: var(--ward-log-height);
200+
opacity: 1;
201+
202+
&.trans-table-row-leave-active {
203+
height: 0px;
204+
opacity: 0;
205+
transition: height 300ms ease, opacity 300ms ease;
206+
}
207+
}
208+
209+
.ward-pin-enter {
210+
opacity: 0;
211+
212+
&.ward-pin-enter-active {
213+
opacity: 1;
214+
transition: opacity 150ms ease;
215+
}
216+
}
217+
218+
.ward-pin-leave {
219+
opacity: 1;
220+
221+
&.ward-pin-leave-active {
222+
opacity: 0;
223+
transition: opacity 150ms ease;
224+
}
225+
}
226+
227+
.sliderTicks {
228+
position: relative;
229+
height: 30px;
230+
margin-top: 33px;
231+
margin-bottom: -33px;
232+
font-size: var(--fontSizeTiny);
233+
border-color: var(--sliderTicksColor);
234+
color: var(--sliderTicksColor);
235+
236+
& .sliderTick {
237+
position: absolute;
238+
display: inline-block;
239+
height: 100%;
240+
padding: 0 0.4em;
241+
border-width: 0px;
242+
border-color: inherit;
243+
border-style: solid;
244+
border-left-width: 1px;
245+
cursor: pointer;
246+
247+
transition: color 150ms ease, border-color 150ms ease;
248+
249+
&.active {
250+
border-color: var(--sliderTicksColorActive);
251+
color: var(--sliderTicksColorActive);
252+
}
253+
}
254+
}
255+
256+
.wardLogPlayerFilter {
257+
padding: 0 .5rem;
258+
font-size: var(--fontSizeSmall);
259+
260+
& .filterHeader {
261+
padding: .5rem;
262+
border-bottom: 1px solid var(--dividerLightColor);
263+
}
264+
265+
& .filterRow {
266+
padding: .5em;
267+
margin: 0 0;
268+
}
269+
}
270+
151271
.cosmetics {
152272
display: inline-block;
153273
margin: 5px;
@@ -222,3 +342,4 @@
222342
}
223343
}
224344
}
345+
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import React from 'react';
2+
import {
3+
Row,
4+
Col,
5+
} from 'react-flexbox-grid';
6+
import Avatar from 'material-ui/Avatar';
7+
import Button from 'material-ui/RaisedButton';
8+
import {
9+
grey800 as filterOff,
10+
blueGrey700 as filterOn,
11+
} from 'material-ui/styles/colors';
12+
import styles from '../Match.css'; // extract filters from there
13+
14+
import { heroTd } from '../matchColumns';
15+
16+
17+
export default class PlayerFilter extends React.PureComponent {
18+
constructor(props) {
19+
super(props);
20+
this.getObserverCount = () => this.props.player.obs_log.length;
21+
this.getSentryCount = () => this.props.player.sen_log.length;
22+
this.getMuiThemeProps = () => ({
23+
fullWidth: true,
24+
disabledBackgroundColor: filterOff,
25+
});
26+
}
27+
28+
generateFilterKey(type) {
29+
return `${this.props.player.player_slot}-${type}`;
30+
}
31+
32+
render() {
33+
const {
34+
player,
35+
onFilterClick,
36+
} = this.props;
37+
const obsCount = this.getObserverCount();
38+
const senCount = this.getSentryCount();
39+
const [opacityOn, opacityOff] = [1, 0.4];
40+
return (
41+
<Row
42+
className={styles.filterRow}
43+
middle="xs"
44+
between="xs"
45+
>
46+
<Col xs={12} sm={7}>
47+
<Row xs>
48+
<Col>{heroTd(player)}</Col>
49+
</Row>
50+
</Col>
51+
<Col xs={12} sm={5}>
52+
<Row>
53+
<Col xs>
54+
<Button
55+
{...this.getMuiThemeProps()}
56+
label={obsCount}
57+
disabled={!obsCount}
58+
backgroundColor={this.generateFilterKey('observer') in this.props.activeFilters ? filterOff : filterOn}
59+
style={{ opacity: obsCount > 0 ? opacityOn : opacityOff }}
60+
onClick={() => onFilterClick(this.generateFilterKey('observer'), player.player_slot, 'observer')}
61+
icon={<Avatar size={24} src={`${API_HOST}/apps/dota2/images/items/ward_observer_lg.png`} />}
62+
/>
63+
</Col>
64+
<Col xs>
65+
<Button
66+
{...this.getMuiThemeProps()}
67+
label={senCount}
68+
disabled={!senCount}
69+
backgroundColor={this.generateFilterKey('sentry') in this.props.activeFilters ? filterOff : filterOn}
70+
style={{ opacity: senCount > 0 ? opacityOn : opacityOff }}
71+
onClick={() => onFilterClick(this.generateFilterKey('sentry'), player.player_slot, 'sentry')}
72+
icon={<Avatar size={24} src={`${API_HOST}/apps/dota2/images/items/ward_sentry_lg.png`} />}
73+
/>
74+
</Col>
75+
</Row>
76+
</Col>
77+
</Row>
78+
);
79+
}
80+
}

0 commit comments

Comments
 (0)