decidim-comments 0.22.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/comments/bundle.js +53 -53
  3. data/app/assets/javascripts/decidim/comments/bundle.js.map +1 -1
  4. data/app/cells/decidim/comments/comment_activity_cell.rb +2 -22
  5. data/app/cells/decidim/comments/comment_cell.rb +22 -0
  6. data/app/cells/decidim/comments/comment_m/footer.erb +5 -0
  7. data/app/cells/decidim/comments/comment_m/top.erb +7 -0
  8. data/app/cells/decidim/comments/comment_m_cell.rb +29 -0
  9. data/app/commands/decidim/comments/create_comment.rb +1 -1
  10. data/app/forms/decidim/comments/comment_form.rb +8 -1
  11. data/app/frontend/comments/add_comment_form.component.test.tsx +30 -28
  12. data/app/frontend/comments/add_comment_form.component.tsx +32 -16
  13. data/app/frontend/comments/comment.component.test.tsx +35 -4
  14. data/app/frontend/comments/comment.component.tsx +24 -15
  15. data/app/frontend/comments/comment_thread.component.test.tsx +9 -8
  16. data/app/frontend/comments/comment_thread.component.tsx +3 -1
  17. data/app/frontend/comments/comments.component.test.tsx +17 -14
  18. data/app/frontend/comments/comments.component.tsx +28 -4
  19. data/app/frontend/comments/down_vote_button.component.tsx +24 -9
  20. data/app/frontend/comments/up_vote_button.component.tsx +24 -9
  21. data/app/frontend/mutations/add_comment.mutation.graphql +2 -2
  22. data/app/frontend/mutations/down_vote.mutation.graphql +2 -2
  23. data/app/frontend/mutations/up_vote.mutation.graphql +2 -2
  24. data/app/frontend/queries/comments.query.graphql +2 -2
  25. data/app/frontend/support/schema.ts +1060 -735
  26. data/app/helpers/decidim/comments/comment_cells_helper.rb +33 -0
  27. data/app/models/decidim/comments/comment.rb +73 -20
  28. data/app/models/decidim/comments/seed.rb +1 -1
  29. data/app/types/decidim/comments/commentable_interface.rb +1 -1
  30. data/app/types/decidim/comments/commentable_mutation_type.rb +4 -1
  31. data/config/locales/am-ET.yml +1 -0
  32. data/config/locales/bg.yml +6 -0
  33. data/config/locales/ca.yml +1 -0
  34. data/config/locales/cs.yml +1 -0
  35. data/config/locales/da.yml +1 -0
  36. data/config/locales/en.yml +1 -0
  37. data/config/locales/eo.yml +1 -0
  38. data/config/locales/es-MX.yml +1 -0
  39. data/config/locales/es-PY.yml +1 -0
  40. data/config/locales/es.yml +3 -2
  41. data/config/locales/et.yml +1 -0
  42. data/config/locales/fi-plain.yml +1 -0
  43. data/config/locales/fi.yml +2 -1
  44. data/config/locales/fr-CA.yml +2 -1
  45. data/config/locales/fr.yml +2 -1
  46. data/config/locales/hr.yml +1 -0
  47. data/config/locales/hu.yml +1 -1
  48. data/config/locales/is-IS.yml +0 -2
  49. data/config/locales/is.yml +76 -0
  50. data/config/locales/ja-JP.yml +2 -2
  51. data/config/locales/ja.yml +121 -0
  52. data/config/locales/ko-KR.yml +1 -0
  53. data/config/locales/ko.yml +1 -0
  54. data/config/locales/lt.yml +1 -0
  55. data/config/locales/{lv-LV.yml → lv.yml} +0 -0
  56. data/config/locales/mt.yml +1 -0
  57. data/config/locales/nl.yml +3 -2
  58. data/config/locales/om-ET.yml +1 -0
  59. data/config/locales/pl.yml +5 -5
  60. data/config/locales/so-SO.yml +1 -0
  61. data/config/locales/sv.yml +1 -0
  62. data/config/locales/ti-ER.yml +1 -0
  63. data/config/locales/uk.yml +0 -1
  64. data/config/locales/vi-VN.yml +1 -0
  65. data/config/locales/vi.yml +1 -0
  66. data/config/locales/zh-CN.yml +121 -0
  67. data/config/locales/zh-TW.yml +1 -0
  68. data/db/migrate/20200706123136_make_comments_handle_i18n.rb +41 -0
  69. data/db/migrate/20200828101910_add_commentable_counter_cache_to_comments.rb +9 -0
  70. data/lib/decidim/comments/api/comment_type.rb +5 -1
  71. data/lib/decidim/comments/comment_serializer.rb +7 -2
  72. data/lib/decidim/comments/comment_vote_serializer.rb +5 -1
  73. data/lib/decidim/comments/commentable.rb +11 -0
  74. data/lib/decidim/comments/comments_helper.rb +28 -4
  75. data/lib/decidim/comments/engine.rb +13 -0
  76. data/lib/decidim/comments/mutation_extensions.rb +8 -0
  77. data/lib/decidim/comments/query_extensions.rb +4 -0
  78. data/lib/decidim/comments/test/factories.rb +10 -1
  79. data/lib/decidim/comments/test/shared_examples/comment_event.rb +1 -1
  80. data/lib/decidim/comments/version.rb +1 -1
  81. metadata +37 -11
@@ -4,6 +4,8 @@ import * as React from "react";
4
4
  import { graphql } from "react-apollo";
5
5
  import * as uuid from "uuid";
6
6
 
7
+ const PropTypes = require("prop-types");
8
+
7
9
  import Icon from "../application/icon.component";
8
10
 
9
11
  const { I18n, Translate } = require("react-i18nify");
@@ -27,9 +29,10 @@ interface AddCommentFormProps {
27
29
  autoFocus?: boolean;
28
30
  arguable?: boolean;
29
31
  userAllowedToComment?: boolean;
30
- addComment?: (data: { body: string, alignment: number, userGroupId?: string }) => void;
32
+ addComment?: (data: { body: string, alignment: number, userGroupId?: string }, context: any) => void;
31
33
  onCommentAdded?: () => void;
32
34
  orderBy: string;
35
+ commentsMaxLength: number;
33
36
  }
34
37
 
35
38
  interface AddCommentFormState {
@@ -39,8 +42,6 @@ interface AddCommentFormState {
39
42
  remainingCharacterCount: number;
40
43
  }
41
44
 
42
- export const MAX_LENGTH = 1000;
43
-
44
45
  /**
45
46
  * Renders a form to create new comments.
46
47
  * @class
@@ -54,6 +55,11 @@ export class AddCommentForm extends React.Component<AddCommentFormProps, AddComm
54
55
  autoFocus: false
55
56
  };
56
57
 
58
+ public static contextTypes: any = {
59
+ locale: PropTypes.string,
60
+ toggleTranslations: PropTypes.bool
61
+ };
62
+
57
63
  public bodyTextArea: HTMLTextAreaElement;
58
64
  public userGroupIdSelect: HTMLSelectElement;
59
65
 
@@ -64,7 +70,7 @@ export class AddCommentForm extends React.Component<AddCommentFormProps, AddComm
64
70
  disabled: true,
65
71
  error: false,
66
72
  alignment: 0,
67
- remainingCharacterCount: MAX_LENGTH
73
+ remainingCharacterCount: props.commentsMaxLength
68
74
  };
69
75
  }
70
76
 
@@ -176,7 +182,7 @@ export class AddCommentForm extends React.Component<AddCommentFormProps, AddComm
176
182
  * @returns {Void|DOMElement} - The heading or an empty element
177
183
  */
178
184
  private _renderTextArea() {
179
- const { commentable: { id, type }, autoFocus } = this.props;
185
+ const { commentable: { id, type }, autoFocus, commentsMaxLength } = this.props;
180
186
  const { error } = this.state;
181
187
  const className = classnames({ "is-invalid-input": error });
182
188
 
@@ -185,11 +191,11 @@ export class AddCommentForm extends React.Component<AddCommentFormProps, AddComm
185
191
  id: `add-comment-${type}-${id}`,
186
192
  className,
187
193
  rows: "4",
188
- maxLength: MAX_LENGTH,
194
+ maxLength: commentsMaxLength,
189
195
  required: "required",
190
- pattern: `^(.){0,${MAX_LENGTH}}$`,
196
+ pattern: `^(.){0,${commentsMaxLength}}$`,
191
197
  placeholder: I18n.t("components.add_comment_form.form.body.placeholder"),
192
- onChange: (evt: React.ChangeEvent<HTMLTextAreaElement>) => this._checkCommentBody(evt.target.value)
198
+ onChange: (evt: React.ChangeEvent<HTMLTextAreaElement>) => this._checkCommentBody(evt.target.value, commentsMaxLength as number)
193
199
  };
194
200
 
195
201
  if (autoFocus) {
@@ -207,12 +213,13 @@ export class AddCommentForm extends React.Component<AddCommentFormProps, AddComm
207
213
  * @returns {Void|DOMElement} - The error or an empty element
208
214
  */
209
215
  private _renderTextAreaError() {
216
+ const { commentsMaxLength } = this.props;
210
217
  const { error } = this.state;
211
218
 
212
219
  if (error) {
213
220
  return (
214
221
  <span className="form-error is-visible">
215
- {I18n.t("components.add_comment_form.form.form_error", { length: MAX_LENGTH })}
222
+ {I18n.t("components.add_comment_form.form.form_error", { length: commentsMaxLength })}
216
223
  </span>
217
224
  );
218
225
  }
@@ -317,10 +324,10 @@ export class AddCommentForm extends React.Component<AddCommentFormProps, AddComm
317
324
  * @param {string} body - The comment's body
318
325
  * @returns {Void} - Returns nothing
319
326
  */
320
- private _checkCommentBody(body: string) {
327
+ private _checkCommentBody(body: string, commentsMaxLength: number) {
321
328
  this.setState({
322
- disabled: body === "", error: body === "" || body.length > MAX_LENGTH,
323
- remainingCharacterCount: MAX_LENGTH - body.length
329
+ disabled: body === "", error: body === "" || body.length > commentsMaxLength,
330
+ remainingCharacterCount: commentsMaxLength - body.length
324
331
  });
325
332
  }
326
333
 
@@ -343,7 +350,7 @@ export class AddCommentForm extends React.Component<AddCommentFormProps, AddComm
343
350
  }
344
351
 
345
352
  if (addComment) {
346
- addComment(addCommentParams);
353
+ addComment(addCommentParams, this.context);
347
354
  }
348
355
 
349
356
  this.bodyTextArea.value = "";
@@ -360,10 +367,12 @@ const getCommentsQuery = require("../queries/comments.query.graphql");
360
367
 
361
368
  const AddCommentFormWithMutation = graphql<addCommentMutation, AddCommentFormProps>(addCommentMutation, {
362
369
  props: ({ ownProps, mutate }) => ({
363
- addComment: ({ body, alignment, userGroupId }: { body: string, alignment: number, userGroupId: string }) => {
370
+ addComment: ({ body, alignment, userGroupId }: { body: string, alignment: number, userGroupId: string }, { locale, toggleTranslations }: any) => {
364
371
  if (mutate) {
365
372
  mutate({
366
373
  variables: {
374
+ locale,
375
+ toggleTranslations,
367
376
  commentableId: ownProps.commentable.id,
368
377
  commentableType: ownProps.commentable.type,
369
378
  body,
@@ -381,10 +390,14 @@ const AddCommentFormWithMutation = graphql<addCommentMutation, AddCommentFormPro
381
390
  createdAt: new Date().toISOString(),
382
391
  body,
383
392
  formattedBody: body,
393
+ formattedCreatedAt: new Date().toISOString(),
384
394
  alignment,
385
395
  author: {
386
396
  __typename: "User",
387
397
  name: ownProps.session && ownProps.session.user.name,
398
+ nickname: ownProps.session && ownProps.session.user.name,
399
+ profilePath: null,
400
+ badge: null,
388
401
  avatarUrl: ownProps.session && ownProps.session.user.avatarUrl,
389
402
  deleted: false
390
403
  },
@@ -402,14 +415,17 @@ const AddCommentFormWithMutation = graphql<addCommentMutation, AddCommentFormPro
402
415
  },
403
416
  update: (store, { data }: { data: addCommentMutation }) => {
404
417
  const variables = {
418
+ locale,
419
+ toggleTranslations,
405
420
  commentableId: ownProps.rootCommentable.id,
406
421
  commentableType: ownProps.rootCommentable.type,
407
- orderBy: ownProps.orderBy
422
+ orderBy: ownProps.orderBy,
423
+ singleCommentId: null
408
424
  };
409
425
  const prev = store.readQuery<GetCommentsQuery>({
410
426
  query: getCommentsQuery,
411
427
  variables
412
- });
428
+ });
413
429
  const { id, type } = ownProps.commentable;
414
430
  const newComment = data.commentable && data.commentable.addComment;
415
431
  let comments = [];
@@ -1,8 +1,8 @@
1
- import { mount, shallow } from "enzyme";
1
+ import {mount, shallow} from "enzyme";
2
2
  import * as $ from "jquery";
3
3
  import * as React from "react";
4
4
 
5
- import { CommentFragment } from "../support/schema";
5
+ import {CommentFragment} from "../support/schema";
6
6
  import AddCommentForm from "./add_comment_form.component";
7
7
  import Comment from "./comment.component";
8
8
  import DownVoteButton from "./down_vote_button.component";
@@ -11,13 +11,15 @@ import UpVoteButton from "./up_vote_button.component";
11
11
  import generateCommentsData from "../support/generate_comments_data";
12
12
  import generateUserData from "../support/generate_user_data";
13
13
 
14
- import { loadLocaleTranslations } from "../support/load_translations";
14
+ import {loadLocaleTranslations} from "../support/load_translations";
15
15
 
16
16
  describe("<Comment />", () => {
17
+ const commentsMaxLength: number = 1000;
17
18
  const orderBy = "older";
18
19
  const rootCommentable = {
19
20
  id: "1",
20
- type: "Decidim::DummyResources::DummyResource"
21
+ type: "Decidim::DummyResources::DummyResource",
22
+ commentsMaxLength: 1000
21
23
  };
22
24
  let comment: CommentFragment;
23
25
  let session: any = null;
@@ -48,6 +50,7 @@ describe("<Comment />", () => {
48
50
  session={session}
49
51
  rootCommentable={rootCommentable}
50
52
  orderBy={orderBy}
53
+ commentsMaxLength={commentsMaxLength}
51
54
  />
52
55
  );
53
56
  expect(wrapper.find(".comment").exists()).toBeTruthy();
@@ -60,6 +63,7 @@ describe("<Comment />", () => {
60
63
  session={session}
61
64
  rootCommentable={rootCommentable}
62
65
  orderBy={orderBy}
66
+ commentsMaxLength={commentsMaxLength}
63
67
  />
64
68
  );
65
69
  expect(wrapper.find("time").prop("dateTime")).toEqual(comment.createdAt);
@@ -72,6 +76,7 @@ describe("<Comment />", () => {
72
76
  session={session}
73
77
  rootCommentable={rootCommentable}
74
78
  orderBy={orderBy}
79
+ commentsMaxLength={commentsMaxLength}
75
80
  />
76
81
  );
77
82
  expect(wrapper.find("span.author__name").text()).toEqual(
@@ -86,6 +91,7 @@ describe("<Comment />", () => {
86
91
  session={session}
87
92
  rootCommentable={rootCommentable}
88
93
  orderBy={orderBy}
94
+ commentsMaxLength={commentsMaxLength}
89
95
  />
90
96
  );
91
97
  expect(wrapper.find("span.author__nickname").text()).toEqual(
@@ -105,6 +111,7 @@ describe("<Comment />", () => {
105
111
  session={session}
106
112
  rootCommentable={rootCommentable}
107
113
  orderBy={orderBy}
114
+ commentsMaxLength={commentsMaxLength}
108
115
  />
109
116
  );
110
117
  expect(
@@ -120,6 +127,7 @@ describe("<Comment />", () => {
120
127
  session={session}
121
128
  rootCommentable={rootCommentable}
122
129
  orderBy={orderBy}
130
+ commentsMaxLength={commentsMaxLength}
123
131
  />
124
132
  );
125
133
  expect(wrapper.find(".author__avatar img").prop("src")).toEqual(
@@ -134,6 +142,7 @@ describe("<Comment />", () => {
134
142
  session={session}
135
143
  rootCommentable={rootCommentable}
136
144
  orderBy={orderBy}
145
+ commentsMaxLength={commentsMaxLength}
137
146
  />
138
147
  );
139
148
  expect(wrapper.find("div.comment__content").html()).toContain(
@@ -148,6 +157,7 @@ describe("<Comment />", () => {
148
157
  session={session}
149
158
  rootCommentable={rootCommentable}
150
159
  orderBy={orderBy}
160
+ commentsMaxLength={commentsMaxLength}
151
161
  />
152
162
  );
153
163
  expect(wrapper.state()).toHaveProperty("showReplyForm", false);
@@ -160,6 +170,7 @@ describe("<Comment />", () => {
160
170
  session={session}
161
171
  rootCommentable={rootCommentable}
162
172
  orderBy={orderBy}
173
+ commentsMaxLength={commentsMaxLength}
163
174
  />
164
175
  );
165
176
  expect(wrapper.find(AddCommentForm).exists()).toBeFalsy();
@@ -181,6 +192,7 @@ describe("<Comment />", () => {
181
192
  isRootComment={true}
182
193
  rootCommentable={rootCommentable}
183
194
  orderBy={orderBy}
195
+ commentsMaxLength={commentsMaxLength}
184
196
  />
185
197
  );
186
198
  expect(wrapper.find("div.comment__additionalreply").exists()).toBeFalsy();
@@ -194,6 +206,7 @@ describe("<Comment />", () => {
194
206
  session={session}
195
207
  rootCommentable={rootCommentable}
196
208
  orderBy={orderBy}
209
+ commentsMaxLength={commentsMaxLength}
197
210
  />
198
211
  );
199
212
  expect(wrapper.find("div.comment__additionalreply").exists()).toBeFalsy();
@@ -208,6 +221,7 @@ describe("<Comment />", () => {
208
221
  isRootComment={true}
209
222
  rootCommentable={rootCommentable}
210
223
  orderBy={orderBy}
224
+ commentsMaxLength={commentsMaxLength}
211
225
  />
212
226
  );
213
227
  expect(wrapper.find("div.comment__additionalreply").exists()).toBeTruthy();
@@ -221,6 +235,7 @@ describe("<Comment />", () => {
221
235
  votable={true}
222
236
  rootCommentable={rootCommentable}
223
237
  orderBy={orderBy}
238
+ commentsMaxLength={commentsMaxLength}
224
239
  />
225
240
  );
226
241
  wrapper.find(Comment).forEach((node, idx) => {
@@ -239,6 +254,7 @@ describe("<Comment />", () => {
239
254
  articleClassName="comment comment--nested"
240
255
  rootCommentable={rootCommentable}
241
256
  orderBy={orderBy}
257
+ commentsMaxLength={commentsMaxLength}
242
258
  />
243
259
  );
244
260
  wrapper.find(Comment).forEach(node => {
@@ -255,6 +271,7 @@ describe("<Comment />", () => {
255
271
  session={session}
256
272
  rootCommentable={rootCommentable}
257
273
  orderBy={orderBy}
274
+ commentsMaxLength={commentsMaxLength}
258
275
  />
259
276
  );
260
277
  expect(wrapper.prop("articleClassName")).toEqual("comment");
@@ -267,6 +284,7 @@ describe("<Comment />", () => {
267
284
  session={session}
268
285
  rootCommentable={rootCommentable}
269
286
  orderBy={orderBy}
287
+ commentsMaxLength={commentsMaxLength}
270
288
  />
271
289
  );
272
290
  expect(wrapper.prop("isRootComment")).toBeFalsy();
@@ -284,6 +302,7 @@ describe("<Comment />", () => {
284
302
  session={session}
285
303
  rootCommentable={rootCommentable}
286
304
  orderBy={orderBy}
305
+ commentsMaxLength={commentsMaxLength}
287
306
  />
288
307
  );
289
308
  expect(wrapper.find("button.comment__reply").exists()).toBeFalsy();
@@ -302,6 +321,7 @@ describe("<Comment />", () => {
302
321
  session={session}
303
322
  rootCommentable={rootCommentable}
304
323
  orderBy={orderBy}
324
+ commentsMaxLength={commentsMaxLength}
305
325
  />
306
326
  );
307
327
  expect(wrapper.find("button.comment__reply").exists()).toBeFalsy();
@@ -314,6 +334,7 @@ describe("<Comment />", () => {
314
334
  session={session}
315
335
  rootCommentable={rootCommentable}
316
336
  orderBy={orderBy}
337
+ commentsMaxLength={commentsMaxLength}
317
338
  />
318
339
  );
319
340
  expect(wrapper.find(".flag-modal").exists()).toBeFalsy();
@@ -328,6 +349,7 @@ describe("<Comment />", () => {
328
349
  session={session}
329
350
  rootCommentable={rootCommentable}
330
351
  orderBy={orderBy}
352
+ commentsMaxLength={commentsMaxLength}
331
353
  />
332
354
  );
333
355
  expect(wrapper.find("span.alignment.label").text()).toEqual("In favor");
@@ -341,6 +363,7 @@ describe("<Comment />", () => {
341
363
  session={session}
342
364
  rootCommentable={rootCommentable}
343
365
  orderBy={orderBy}
366
+ commentsMaxLength={commentsMaxLength}
344
367
  />
345
368
  );
346
369
  expect(wrapper.find("span.alert.label").text()).toEqual("Against");
@@ -353,6 +376,7 @@ describe("<Comment />", () => {
353
376
  session={session}
354
377
  rootCommentable={rootCommentable}
355
378
  orderBy={orderBy}
379
+ commentsMaxLength={commentsMaxLength}
356
380
  />
357
381
  );
358
382
  expect(wrapper.find(".flag-modal").exists()).toBeTruthy();
@@ -367,6 +391,7 @@ describe("<Comment />", () => {
367
391
  session={session}
368
392
  rootCommentable={rootCommentable}
369
393
  orderBy={orderBy}
394
+ commentsMaxLength={commentsMaxLength}
370
395
  />
371
396
  );
372
397
  expect(wrapper.find(".flag-modal form").exists()).toBeFalsy();
@@ -382,6 +407,7 @@ describe("<Comment />", () => {
382
407
  votable={true}
383
408
  rootCommentable={rootCommentable}
384
409
  orderBy={orderBy}
410
+ commentsMaxLength={commentsMaxLength}
385
411
  />
386
412
  );
387
413
  expect(wrapper.find(UpVoteButton).prop("comment")).toEqual(comment);
@@ -395,6 +421,7 @@ describe("<Comment />", () => {
395
421
  votable={true}
396
422
  rootCommentable={rootCommentable}
397
423
  orderBy={orderBy}
424
+ commentsMaxLength={commentsMaxLength}
398
425
  />
399
426
  );
400
427
  expect(wrapper.find(DownVoteButton).prop("comment")).toEqual(comment);
@@ -413,6 +440,7 @@ describe("<Comment />", () => {
413
440
  session={session}
414
441
  rootCommentable={rootCommentable}
415
442
  orderBy={orderBy}
443
+ commentsMaxLength={commentsMaxLength}
416
444
  />
417
445
  );
418
446
  expect(wrapper.find("button.comment__reply").exists()).toBeFalsy();
@@ -425,6 +453,7 @@ describe("<Comment />", () => {
425
453
  session={session}
426
454
  rootCommentable={rootCommentable}
427
455
  orderBy={orderBy}
456
+ commentsMaxLength={commentsMaxLength}
428
457
  />
429
458
  );
430
459
  expect(wrapper.find(".flag-modal").exists()).toBeFalsy();
@@ -438,6 +467,7 @@ describe("<Comment />", () => {
438
467
  votable={true}
439
468
  rootCommentable={rootCommentable}
440
469
  orderBy={orderBy}
470
+ commentsMaxLength={commentsMaxLength}
441
471
  />
442
472
  );
443
473
  expect(wrapper.find(".comment__votes--up").exists()).toBeFalsy();
@@ -451,6 +481,7 @@ describe("<Comment />", () => {
451
481
  votable={true}
452
482
  rootCommentable={rootCommentable}
453
483
  orderBy={orderBy}
484
+ commentsMaxLength={commentsMaxLength}
454
485
  />
455
486
  );
456
487
  expect(wrapper.find(".comment__votes--down").exists()).toBeFalsy();
@@ -29,6 +29,7 @@ interface CommentProps {
29
29
  votable?: boolean;
30
30
  rootCommentable: AddCommentFormCommentableFragment;
31
31
  orderBy: string;
32
+ commentsMaxLength: number;
32
33
  }
33
34
 
34
35
  interface CommentState {
@@ -451,7 +452,15 @@ class Comment extends React.Component<CommentProps, CommentState> {
451
452
  * @returns {Void|DomElement} - A wrapper element with comment's comments inside
452
453
  */
453
454
  private _renderReplies() {
454
- const { comment: { id, hasComments, comments }, session, votable, articleClassName, rootCommentable, orderBy } = this.props;
455
+ const {
456
+ comment: { id, hasComments, comments },
457
+ session,
458
+ votable,
459
+ articleClassName,
460
+ rootCommentable,
461
+ orderBy,
462
+ commentsMaxLength
463
+ } = this.props;
455
464
  const { showReplies } = this.state;
456
465
  let replyArticleClassName = "comment comment--nested";
457
466
 
@@ -462,19 +471,18 @@ class Comment extends React.Component<CommentProps, CommentState> {
462
471
  if (hasComments) {
463
472
  return (
464
473
  <div id={`comment-${id}-replies`} className={showReplies ? "" : "hide"}>
465
- {
466
- comments.map((reply: CommentFragment) => (
467
- <Comment
468
- key={`comment_${id}_reply_${reply.id}`}
469
- comment={reply}
470
- session={session}
471
- votable={votable}
472
- articleClassName={replyArticleClassName}
473
- rootCommentable={rootCommentable}
474
- orderBy={orderBy}
475
- />
476
- ))
477
- }
474
+ {comments.map((reply: CommentFragment) => (
475
+ <Comment
476
+ key={`comment_${id}_reply_${reply.id}`}
477
+ comment={reply}
478
+ session={session}
479
+ votable={votable}
480
+ articleClassName={replyArticleClassName}
481
+ rootCommentable={rootCommentable}
482
+ orderBy={orderBy}
483
+ commentsMaxLength={commentsMaxLength}
484
+ />
485
+ ))}
478
486
  </div>
479
487
  );
480
488
  }
@@ -488,7 +496,7 @@ class Comment extends React.Component<CommentProps, CommentState> {
488
496
  * @returns {Void|ReactElement} - Render the AddCommentForm component or not
489
497
  */
490
498
  private _renderReplyForm() {
491
- const { session, comment, rootCommentable, orderBy } = this.props;
499
+ const { session, comment, rootCommentable, orderBy, commentsMaxLength } = this.props;
492
500
  const { showReplyForm } = this.state;
493
501
  const {
494
502
  comment: { userAllowedToComment }
@@ -505,6 +513,7 @@ class Comment extends React.Component<CommentProps, CommentState> {
505
513
  autoFocus={true}
506
514
  rootCommentable={rootCommentable}
507
515
  orderBy={orderBy}
516
+ commentsMaxLength={commentsMaxLength}
508
517
  />
509
518
  );
510
519
  }