decidim-comments 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  }