forked from bvaughn/react-virtualized
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathchat-no-resize.js
274 lines (260 loc) · 7.97 KB
/
chat-no-resize.js
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
var cache = new ReactVirtualized.CellMeasurerCache({
fixedWidth: true,
});
var list;
var mostRecentWidth;
function rowRenderer(params) {
var datum = chatHistory[params.index];
return React.createElement(
ReactVirtualized.CellMeasurer,
{
cache: cache,
columnIndex: 0,
key: params.key,
parent: params.parent,
rowIndex: params.index,
width: mostRecentWidth,
},
React.createElement(
'div',
{
className: 'item',
key: params.key,
style: params.style,
},
React.createElement('strong', null, datum.name),
':',
datum.text,
),
);
}
function cellRenderer(params) {
params.index = params.rowIndex;
return rowRenderer(params);
}
var App = React.createClass({
render: function() {
return React.createElement(
'div',
{
className: 'container',
},
React.createElement(ReactVirtualized.AutoSizer, {}, function(
autoSizerParams,
) {
if (mostRecentWidth && mostRecentWidth !== autoSizerParams.width) {
cache.clearAll();
list.recomputeRowHeights();
}
mostRecentWidth = autoSizerParams.width;
return React.createElement(ReactVirtualized.List, {
className: 'chat',
deferredMeasurementCache: cache,
height: autoSizerParams.height,
ref: function(ref) {
list = ref;
},
rowCount: chatHistory.length,
rowHeight: cache.rowHeight,
rowRenderer: rowRenderer,
width: autoSizerParams.width,
});
}),
);
},
});
var NAMES = [
'Peter Brimer',
'Tera Gaona',
'Kandy Liston',
'Lonna Wrede',
'Kristie Yard',
'Raul Host',
'Yukiko Binger',
'Velvet Natera',
'Donette Ponton',
'Loraine Grim',
'Shyla Mable',
'Marhta Sing',
'Alene Munden',
'Holley Pagel',
'Randell Tolman',
'Wilfred Juneau',
'Naida Madson',
'Marine Amison',
'Glinda Palazzo',
'Lupe Island',
'Cordelia Trotta',
'Samara Berrier',
'Era Stepp',
'Malka Spradlin',
'Edward Haner',
'Clemencia Feather',
'Loretta Rasnake',
'Dana Hasbrouck',
'Sanda Nery',
'Soo Reiling',
'Apolonia Volk',
'Liliana Cacho',
'Angel Couchman',
'Yvonne Adam',
'Jonas Curci',
'Tran Cesar',
'Buddy Panos',
'Rosita Ells',
'Rosalind Tavares',
'Renae Keehn',
'Deandrea Bester',
'Kelvin Lemmon',
'Guadalupe Mccullar',
'Zelma Mayers',
'Laurel Stcyr',
'Edyth Everette',
'Marylin Shevlin',
'Hsiu Blackwelder',
'Mark Ferguson',
'Winford Noggle',
'Shizuko Gilchrist',
'Roslyn Cress',
'Nilsa Lesniak',
'Agustin Grant',
'Earlie Jester',
'Libby Daigle',
'Shanna Maloy',
'Brendan Wilken',
'Windy Knittel',
'Alice Curren',
'Eden Lumsden',
'Klara Morfin',
'Sherryl Noack',
'Gala Munsey',
'Stephani Frew',
'Twana Anthony',
'Mauro Matlock',
'Claudie Meisner',
'Adrienne Petrarca',
'Pearlene Shurtleff',
'Rachelle Piro',
'Louis Cocco',
'Susann Mcsweeney',
'Mandi Kempker',
'Ola Moller',
'Leif Mcgahan',
'Tisha Wurster',
'Hector Pinkett',
'Benita Jemison',
'Kaley Findley',
'Jim Torkelson',
'Freda Okafor',
'Rafaela Markert',
'Stasia Carwile',
'Evia Kahler',
'Rocky Almon',
'Sonja Beals',
'Dee Fomby',
'Damon Eatman',
'Alma Grieve',
'Linsey Bollig',
'Stefan Cloninger',
'Giovanna Blind',
'Myrtis Remy',
'Marguerita Dostal',
'Junior Baranowski',
'Allene Seto',
'Margery Caves',
'Nelly Moudy',
'Felix Sailer',
];
var SENTENCES = [
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'Phasellus vulputate odio commodo tortor sodales, et vehicula ipsum viverra.',
'In et mollis velit, accumsan volutpat libero.',
'Nulla rutrum tellus ipsum, eget fermentum sem dictum quis.',
'Suspendisse eget vehicula elit.',
'Proin ut lacus lacus.',
'Aliquam erat volutpat.',
'Vivamus ac suscipit est, et elementum lectus.',
'Cras tincidunt nisi in urna molestie varius.',
'Integer in magna eu nibh imperdiet tristique.',
'Curabitur eu pellentesque nisl.',
'Etiam non consequat est.',
'Duis mi massa, feugiat nec molestie sit amet, suscipit et metus.',
'Curabitur ac enim dictum arcu varius fermentum vel sodales dui.',
'Ut tristique augue at congue molestie.',
'Integer semper sem lorem, scelerisque suscipit lacus consequat nec.',
'Etiam euismod efficitur magna nec dignissim.',
'Morbi vel neque lectus.',
'Etiam ac accumsan elit, et pharetra ex.',
'Suspendisse vitae gravida mauris.',
'Pellentesque sed laoreet erat.',
'Nam aliquet purus quis massa eleifend, et efficitur felis aliquam.',
'Fusce faucibus diam erat, sed consectetur urna auctor at.',
'Praesent et nulla velit.',
'Cras eget enim nec odio feugiat tristique eu quis ante.',
'Morbi blandit diam vitae odio sollicitudin finibus.',
'Integer ac ante fermentum, placerat orci vel, fermentum lacus.',
'Maecenas est elit, semper ut posuere et, congue ut orci.',
'Phasellus eget enim vitae nunc luctus sodales a eu erat.',
'Curabitur dapibus nisi sed nisi dictum, in imperdiet urna posuere.',
'Vivamus commodo odio metus, tincidunt facilisis augue dictum quis.',
'Curabitur sagittis a lectus ac sodales.',
'Nam eget eros purus.',
'Nam scelerisque et ante in porta.',
'Proin vitae augue tristique, malesuada nisl ut, fermentum nisl.',
'Nulla bibendum quam id velit blandit dictum.',
'Cras tempus ac dolor ut convallis.',
'Sed vel ipsum est.',
'Nulla ut leo vestibulum, ultricies sapien ac, pellentesque dolor.',
'Etiam ultricies maximus tempus.',
'Donec dignissim mi ac libero feugiat, vitae lacinia odio viverra.',
'Curabitur condimentum tellus sit amet neque posuere, condimentum tempus purus eleifend.',
'Donec tempus, augue id hendrerit pretium, mauris leo congue nulla, ac iaculis erat nunc in dolor.',
'Praesent vel lectus venenatis, elementum mauris vitae, ullamcorper nulla.',
'Maecenas non diam cursus, imperdiet massa eget, pellentesque ex.',
'Vestibulum luctus risus vel augue auctor blandit.',
'Nullam augue diam, pulvinar sed sapien et, hendrerit venenatis risus.',
'Quisque sollicitudin nulla nec tellus feugiat hendrerit.',
'Vestibulum a eros accumsan, lacinia eros non, pretium diam.',
'Aenean iaculis augue sit amet scelerisque aliquam.',
'Donec ornare felis et dui hendrerit, eget bibendum nibh interdum.',
'Maecenas tellus magna, tristique vitae orci vel, auctor tincidunt nisi.',
'Fusce non libero quis velit porttitor maximus at eget enim.',
'Sed in aliquet tellus.',
'Etiam a tortor erat.',
'Donec nec diam vel tellus egestas lobortis.',
'Vivamus dictum erat nulla, sit amet accumsan dolor scelerisque eu.',
'In nec eleifend ex, pellentesque dapibus sapien.',
'Duis a mollis nisi.',
'Sed ornare nisl sit amet dolor pellentesque, eu fermentum leo interdum.',
'Sed eget mauris condimentum, molestie justo eu, feugiat felis.',
'Nunc suscipit leo non dui blandit, ac malesuada ex consequat.',
'Morbi varius placerat congue.',
'Praesent id velit in nunc elementum aliquet.',
'Sed luctus justo vitae nibh bibendum blandit.',
'Sed et sapien turpis.',
'Nulla ac eros vestibulum, mollis ante eu, rutrum nulla.',
'Sed cursus magna ut vehicula rutrum.',
'Ut consectetur feugiat consectetur.',
'Nulla nec ligula posuere neque sollicitudin rutrum a a dui.',
'Nulla ut quam odio.',
'Integer dignissim sapien et orci sodales volutpat.',
'Nullam a sapien leo.',
'Praesent cursus semper purus, vitae gravida risus dapibus mattis.',
'Sed pellentesque nulla lorem, in commodo arcu feugiat sed.',
'Phasellus blandit arcu non diam varius ornare.',
];
var chatHistory = [];
for (var i = 0; i < 1000; i++) {
var name = NAMES[Math.floor(Math.random() * NAMES.length)];
var sentences = Math.ceil(Math.random() * 5);
var texts = [];
for (var x = 0; x < sentences; x++) {
texts.push(SENTENCES[Math.floor(Math.random() * SENTENCES.length)]);
}
chatHistory.push({
name,
text: texts.join(' '),
});
}
const container = document.getElementById('mount');
ReactDOM.render(React.createElement(App), container);