@gisce/react-ooui 1.4.13 → 1.4.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetFactory.d.ts","sourceRoot":"","sources":["WidgetFactory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA6H1B,QAAA,MAAM,iBAAiB,UAAW,GAAG,+DAWpC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"WidgetFactory.d.ts","sourceRoot":"","sources":["WidgetFactory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgI1B,QAAA,MAAM,iBAAiB,UAAW,GAAG,+DAWpC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AAEpC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAC,MAAM,aAAa,CAAC;AAGlD,aAAK,WAAW,GAAG,WAAW,GAAG;IAC/B,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,QAAA,MAAM,MAAM,UAAW,WAAW,KAAG,MAAM,YAAY,GAAG,IAmBzD,CAAA;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AAEpC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAC,MAAM,aAAa,CAAC;AAGlD,aAAK,WAAW,GAAG,WAAW,GAAG;IAC/B,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,QAAA,MAAM,MAAM,UAAW,WAAW,KAAG,MAAM,YAAY,GAAG,IAkBzD,CAAA;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,35 @@
1
+ import React from "react";
2
+ import { WidgetProps } from '../../types';
3
+ declare type CommentDataType = {
4
+ id: number;
5
+ isSender: boolean;
6
+ isAuthor: boolean;
7
+ text: string;
8
+ email: string;
9
+ date: string;
10
+ author: string;
11
+ };
12
+ declare type CommentProps = {
13
+ data: CommentDataType;
14
+ style?: any;
15
+ };
16
+ declare type CommentsTypeProps = {
17
+ data: CommentDataType[];
18
+ };
19
+ declare type CommentsTimelineProps = {
20
+ value?: EventsType[];
21
+ };
22
+ declare type EventActionType = {
23
+ date: string;
24
+ action: string;
25
+ };
26
+ export declare type EventsType = {
27
+ type: "action" | "comment";
28
+ event: EventActionType | CommentDataType;
29
+ };
30
+ export declare const Comment: (props: CommentProps) => React.JSX.Element;
31
+ export declare const Comments: (props: CommentsTypeProps) => React.JSX.Element;
32
+ export declare const CommentsTimeline: (props: CommentsTimelineProps) => React.JSX.Element;
33
+ export declare const CommentsTimelineField: (props: WidgetProps) => React.JSX.Element;
34
+ export {};
35
+ //# sourceMappingURL=Comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Comments.d.ts","sourceRoot":"","sources":["Comments.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAoBtC,aAAK,eAAe,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAA;AAED,aAAK,YAAY,GAAG;IAClB,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAA;AAED,aAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB,CAAA;AAED,aAAK,qBAAqB,GAAG;IAC3B,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB,CAAA;AAGD,aAAK,eAAe,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAA;AAED,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,eAAe,GAAG,eAAe,CAAA;CAEzC,CAAA;AA2BD,eAAO,MAAM,OAAO,UAAW,YAAY,sBAkB1C,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,iBAAiB,sBAahD,CAAA;AAGD,eAAO,MAAM,gBAAgB,UAAW,qBAAqB,sBAiB5D,CAAA;AAED,eAAO,MAAM,qBAAqB,UAAW,WAAW,sBAMvD,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gisce/react-ooui",
3
- "version": "1.4.13",
3
+ "version": "1.4.14",
4
4
  "files": [
5
5
  "dist",
6
6
  "src",
@@ -42,6 +42,7 @@
42
42
  "buffer": "^6.0.3",
43
43
  "file-type-buffer-browser": "git+ssh://git@github.com/mguellsegarra/file-type-buffer-browser.git",
44
44
  "interweave": "^13.0.0",
45
+ "md5": "^2.3.0",
45
46
  "react": "^17.0.1",
46
47
  "react-dom": "^17.0.1",
47
48
  "react-grid-layout": "^1.3.4",
@@ -65,6 +66,7 @@
65
66
  "@tailwindcss/postcss7-compat": "^2.0.2",
66
67
  "@types/jest": "^26.0.15",
67
68
  "@types/lodash": "^4.14.170",
69
+ "@types/md5": "^2.3.2",
68
70
  "@types/node": "^12.0.0",
69
71
  "@types/react": "^17.0.1",
70
72
  "@types/react-dom": "^17.0.1",
package/src/index.ts CHANGED
@@ -45,6 +45,7 @@ import { Radio } from "@/widgets/custom/Radio";
45
45
  import { Switch } from "@/widgets/custom/Switch";
46
46
  import { Steps } from "@/widgets/custom/Steps";
47
47
  import { CodeEditor } from "@/widgets/custom/CodeEditor";
48
+ import { CommentsTimelineField } from "@/widgets/custom/Comments";
48
49
  import {
49
50
  DashboardGridItem,
50
51
  DashboardGrid,
@@ -157,6 +158,7 @@ export {
157
158
  Switch,
158
159
  Steps,
159
160
  CodeEditor,
161
+ CommentsTimelineField,
160
162
  ExportModal,
161
163
  ConfigContext,
162
164
  };
@@ -90,4 +90,5 @@ export default {
90
90
  advancedExport: "Exportació avançada",
91
91
  savedRegisters: "Registre guardat correctament",
92
92
  errorWhileSavingForm: "Error en guardar el formulari",
93
+ autor: "Autor",
93
94
  };
@@ -87,4 +87,5 @@ export default {
87
87
  advancedExport: "Advanced export",
88
88
  savedRegisters: "Record successfully saved",
89
89
  errorWhileSavingForm: "Error while saving form",
90
+ author: "Author",
90
91
  };
@@ -91,4 +91,5 @@ export default {
91
91
  advancedExport: "Exportación avanzada",
92
92
  savedRegisters: "Registro guardado correctamente",
93
93
  errorWhileSavingForm: "Error al guardar el formulario",
94
+ author: "Autor",
94
95
  };
@@ -0,0 +1,190 @@
1
+ // @ts-ignore
2
+ import React from "react";
3
+ import LocaleProvider from "../../context/LocaleContext";
4
+ import { Comments, CommentsTimeline, EventsType } from "../../widgets/custom/Comments";
5
+
6
+
7
+ export default {
8
+ title: "Components/Widgets/Custom/Comments",
9
+ };
10
+
11
+ export const Default = (): React.ReactElement => {
12
+
13
+ const data = [
14
+ {
15
+ id: 1,
16
+ text: "Totam odit eum distinctio tempore. Numquam illo dolorum laboriosam vel illum. Sunt saepe ab nihil soluta placeat ullam.\n" +
17
+ "Eius ea enim ut. Unde consequatur ducimus esse ullam. Odio fugit reprehenderit sunt.\n" +
18
+ "Recusandae a aliquid. Iusto quisquam temporibus a assumenda aut fuga. Tenetur cum quis saepe et alias delectus quos.\n" +
19
+ "Corporis adipisci eaque quod. Aperiam voluptatum doloribus accusamus suscipit.\n" +
20
+ "Iste corporis non quisquam adipisci fuga. Aperiam possimus est ratione modi dicta. Cum consequatur eius harum ea eius omnis.\n" +
21
+ "Eveniet sit iste sed commodi cumque. Quis ipsam maxime quam eveniet.\n" +
22
+ "Repellat officia praesentium adipisci aspernatur impedit. Voluptas architecto autem vero et praesentium dignissimos.\n" +
23
+ "Nisi ex sapiente incidunt eveniet mollitia. Iure libero natus perferendis voluptate iure fuga.\n" +
24
+ "Vel voluptate cumque laudantium. Reiciendis sapiente eaque neque exercitationem inventore nam.",
25
+ author: "Ciríaco Pelayo Camps",
26
+ email: "ciraco@example.com",
27
+ date: "2023-04-01 10:00:00",
28
+ isSender: true,
29
+ isAuthor: false,
30
+ },
31
+ {
32
+ id: 2,
33
+ text: "Dicta eligendi pariatur ratione ipsam accusantium. Ad minus nesciunt optio id ipsum.\n" +
34
+ "Incidunt eligendi doloremque molestias. Voluptate sapiente nulla veritatis.\n" +
35
+ "Nostrum minima ad repudiandae optio laborum.\n" +
36
+ "Adipisci sint quasi laudantium explicabo ab nostrum. Rerum nemo itaque officia. Velit accusamus itaque accusantium ducimus quidem quae cum.\n" +
37
+ "Sequi possimus harum maxime. Qui laboriosam voluptate pariatur laudantium nam quo. Vel dolorum magni nam iusto sapiente animi quaerat. Debitis minus temporibus molestias quae accusamus.\n" +
38
+ "Nobis ab adipisci laborum doloremque impedit quo. Tempore cumque accusamus voluptates. In non facere in.\n" +
39
+ "Laboriosam exercitationem possimus quo sequi. Aspernatur quia consequuntur aspernatur repudiandae molestiae modi. Vero esse nisi dicta nihil accusantium nesciunt.\n" +
40
+ "Modi voluptatem excepturi. Architecto sapiente nobis quis ipsam. Doloremque ipsum pariatur dicta at.",
41
+ author: "Plácido Baeza Vaquero",
42
+ email: "placido@example.com",
43
+ date: "2023-04-01 11:00:00",
44
+ isSender: false,
45
+ isAuthor: true,
46
+ },
47
+ {
48
+ id: 3,
49
+ text: "Amet tempora ipsum ipsum delectus.\n" +
50
+ "Autem minus magnam in eveniet. Veniam voluptas deleniti eaque sequi autem.\n" +
51
+ "Occaecati laborum ut voluptatum maxime iure cupiditate. Facere vitae aliquid.\n" +
52
+ "Nemo nihil enim quia exercitationem. Quisquam aut autem magni occaecati velit.\n" +
53
+ "Perferendis impedit iure nostrum ratione nemo distinctio.\n" +
54
+ "Facilis deserunt amet officia accusantium qui. Non corporis rerum deleniti harum optio ipsa ducimus. Veniam saepe illo aspernatur id quae omnis.\n" +
55
+ "Distinctio dolor sequi odio officia amet natus. Quidem quidem quibusdam animi alias quia distinctio.\n" +
56
+ "Eum placeat expedita possimus eveniet. Fugit earum corrupti itaque. Ab expedita officiis numquam.\n" +
57
+ "Quos optio iure quos minima deserunt assumenda beatae. Illo quod non aliquid.\n" +
58
+ "Nobis odio reprehenderit ullam numquam. Beatae molestiae aperiam ratione.\n" +
59
+ "Quidem perferendis minima animi ipsa natus aliquam. Exercitationem perferendis sequi assumenda. Eaque ducimus saepe deleniti eum iure itaque.",
60
+ author: "Jorge Acosta Valverde",
61
+ email: "jorge@example.com",
62
+ date: "2023-04-01 11:30:00",
63
+ isSender: false,
64
+ isAuthor: false,
65
+ },
66
+ {
67
+ id: 4,
68
+ text: "Esse tempora amet consectetur asperiores dicta. Quidem est harum tempora voluptatum mollitia.\n" +
69
+ "Voluptate reprehenderit sint vitae laborum animi placeat nihil. Maxime iure porro delectus voluptate. Molestiae dolorem natus alias ipsam consequuntur. Nisi nam exercitationem voluptas saepe occaecati.\n" +
70
+ "Reprehenderit quam ex est vel.\n" +
71
+ "Magnam quidem laudantium reprehenderit rerum nam ducimus perspiciatis. Vero omnis sed ducimus quidem dolores dolor illum.\n" +
72
+ "Corrupti a iste praesentium. Exercitationem cum id neque.\n" +
73
+ "Optio repellat excepturi sapiente alias iusto quaerat. Explicabo fuga cupiditate atque porro. Qui fuga ea quis porro id.\n" +
74
+ "Natus optio ab reiciendis quae aperiam tempore. Voluptatem asperiores adipisci ullam nobis. Saepe quas odit rem ad autem cum consequatur.\n" +
75
+ "Numquam deleniti veniam rem. Enim doloremque consectetur quas reprehenderit. Numquam unde a animi odio sequi.\n" +
76
+ "Cum at eos fuga.\n" +
77
+ "Vel exercitationem excepturi placeat. Quisquam neque quasi impedit at.",
78
+ author: "Ciríaco Pelayo Camps",
79
+ email: "ciraco@example.com",
80
+ date: "2023-04-01 13:00:00",
81
+ isSender: true,
82
+ isAuthor: false,
83
+ }
84
+ ]
85
+ return (
86
+ <LocaleProvider lang="es_ES">
87
+ <Comments data={data} />
88
+ </LocaleProvider>
89
+ );
90
+ };
91
+
92
+ export const Timeline = () => {
93
+ const data = [
94
+ {
95
+ type: "action",
96
+ event: {
97
+ date: "2023-04-01 10:00",
98
+ action: "Draft",
99
+ }
100
+ },
101
+ {
102
+ type: "comment",
103
+ event: {
104
+ id: 1,
105
+ text: "Totam odit eum distinctio tempore. Numquam illo dolorum laboriosam vel illum. Sunt saepe ab nihil soluta placeat ullam.\n" +
106
+ "Eius ea enim ut. Unde consequatur ducimus esse ullam. Odio fugit reprehenderit sunt.\n" +
107
+ "Recusandae a aliquid. Iusto quisquam temporibus a assumenda aut fuga. Tenetur cum quis saepe et alias delectus quos.\n" +
108
+ "Corporis adipisci eaque quod. Aperiam voluptatum doloribus accusamus suscipit.\n" +
109
+ "Iste corporis non quisquam adipisci fuga. Aperiam possimus est ratione modi dicta. Cum consequatur eius harum ea eius omnis.\n" +
110
+ "Eveniet sit iste sed commodi cumque. Quis ipsam maxime quam eveniet.\n" +
111
+ "Repellat officia praesentium adipisci aspernatur impedit. Voluptas architecto autem vero et praesentium dignissimos.\n" +
112
+ "Nisi ex sapiente incidunt eveniet mollitia. Iure libero natus perferendis voluptate iure fuga.\n" +
113
+ "Vel voluptate cumque laudantium. Reiciendis sapiente eaque neque exercitationem inventore nam.",
114
+ author: "Ciríaco Pelayo Camps",
115
+ email: "ciraco@example.com",
116
+ date: "2023-04-01 10:00:00",
117
+ isSender: true,
118
+ isAuthor: true,
119
+ }
120
+ },
121
+ {
122
+ type: "action",
123
+ event: {
124
+ date: "2023-04-01 10:10",
125
+ action: "Open",
126
+ }
127
+ },
128
+ {
129
+ type: "comment",
130
+ event: {
131
+ id: 2,
132
+ text: "Dicta eligendi pariatur ratione ipsam accusantium. Ad minus nesciunt optio id ipsum.\n" +
133
+ "Incidunt eligendi doloremque molestias. Voluptate sapiente nulla veritatis.\n" +
134
+ "Nostrum minima ad repudiandae optio laborum.\n" +
135
+ "Adipisci sint quasi laudantium explicabo ab nostrum. Rerum nemo itaque officia. Velit accusamus itaque accusantium ducimus quidem quae cum.\n" +
136
+ "Sequi possimus harum maxime. Qui laboriosam voluptate pariatur laudantium nam quo. Vel dolorum magni nam iusto sapiente animi quaerat. Debitis minus temporibus molestias quae accusamus.\n" +
137
+ "Nobis ab adipisci laborum doloremque impedit quo. Tempore cumque accusamus voluptates. In non facere in.\n" +
138
+ "Laboriosam exercitationem possimus quo sequi. Aspernatur quia consequuntur aspernatur repudiandae molestiae modi. Vero esse nisi dicta nihil accusantium nesciunt.\n" +
139
+ "Modi voluptatem excepturi. Architecto sapiente nobis quis ipsam. Doloremque ipsum pariatur dicta at.",
140
+ author: "Plácido Baeza Vaquero",
141
+ email: "placido@example.com",
142
+ date: "2023-04-01 11:00:00",
143
+ isSender: false,
144
+ isAuthor: false,
145
+ },
146
+ },
147
+ {
148
+ type: "comment",
149
+ event: {
150
+ id: 4,
151
+ text: "Esse tempora amet consectetur asperiores dicta. Quidem est harum tempora voluptatum mollitia.\n" +
152
+ "Voluptate reprehenderit sint vitae laborum animi placeat nihil. Maxime iure porro delectus voluptate. Molestiae dolorem natus alias ipsam consequuntur. Nisi nam exercitationem voluptas saepe occaecati.\n" +
153
+ "Reprehenderit quam ex est vel.\n" +
154
+ "Magnam quidem laudantium reprehenderit rerum nam ducimus perspiciatis. Vero omnis sed ducimus quidem dolores dolor illum.\n" +
155
+ "Corrupti a iste praesentium. Exercitationem cum id neque.\n" +
156
+ "Optio repellat excepturi sapiente alias iusto quaerat. Explicabo fuga cupiditate atque porro. Qui fuga ea quis porro id.\n" +
157
+ "Natus optio ab reiciendis quae aperiam tempore. Voluptatem asperiores adipisci ullam nobis. Saepe quas odit rem ad autem cum consequatur.\n" +
158
+ "Numquam deleniti veniam rem. Enim doloremque consectetur quas reprehenderit. Numquam unde a animi odio sequi.\n" +
159
+ "Cum at eos fuga.\n" +
160
+ "Vel exercitationem excepturi placeat. Quisquam neque quasi impedit at.",
161
+ author: "Ciríaco Pelayo Camps",
162
+ email: "ciraco@example.com",
163
+ date: "2023-04-01 13:00:00",
164
+ isSender: true,
165
+ isAuthor: false,
166
+ }
167
+ },
168
+ {
169
+ type: "action",
170
+ event: {
171
+ action: "Pendent",
172
+ date: "2023-04-01 13:05:00"
173
+ }
174
+ },
175
+ {
176
+ type: "action",
177
+ event: {
178
+ action: "Close",
179
+ date: "2023-04-01 13:35:00"
180
+ }
181
+ }
182
+ ] as EventsType[]
183
+ return (
184
+ <LocaleProvider lang="es_ES">
185
+ <CommentsTimeline value={data} />
186
+ </LocaleProvider>
187
+ );
188
+ }
189
+
190
+
@@ -33,6 +33,7 @@ import {
33
33
  Steps,
34
34
  Tag,
35
35
  CodeEditor,
36
+ CommentsTimelineField,
36
37
  } from "@/index";
37
38
  import { Image } from "./base/Image";
38
39
  import { FiberGrid } from "./custom/FiberGrid";
@@ -118,6 +119,8 @@ const getWidgetType = (type: string) => {
118
119
  return Steps;
119
120
  case "codeeditor":
120
121
  return CodeEditor;
122
+ case "comments_timeline":
123
+ return CommentsTimelineField;
121
124
  default:
122
125
  return undefined;
123
126
  }
@@ -10,7 +10,6 @@ type AvatarProps = WidgetProps & {
10
10
  };
11
11
 
12
12
  const Avatar = (props: AvatarProps): React.ReactElement | null => {
13
- console.log("Avatar Props", props);
14
13
  const {ooui, value} = props;
15
14
  if (!value) {
16
15
  return null;
@@ -0,0 +1,144 @@
1
+ import React, {useContext} from "react";
2
+ import Field from "@/common/Field";
3
+ import { WidgetProps } from "@/types";
4
+ import {Card, Space, Typography, Avatar, Tag, Timeline, TimelineItemProps} from "antd"
5
+ import { LocaleContext, LocaleContextType } from "@/context/LocaleContext";
6
+
7
+ const { Meta } = Card;
8
+ const { Text} = Typography;
9
+
10
+ import dayjs from "dayjs";
11
+ import relativeTime from "dayjs/plugin/relativeTime";
12
+ import md5 from "md5";
13
+
14
+
15
+ dayjs.extend(relativeTime);
16
+
17
+ type GravatarProps = {
18
+ email: string,
19
+ size?: number,
20
+ theme: string,
21
+ }
22
+
23
+ type CommentDataType = {
24
+ id: number,
25
+ isSender: boolean,
26
+ isAuthor: boolean,
27
+ text: string,
28
+ email: string,
29
+ date: string,
30
+ author: string,
31
+ }
32
+
33
+ type CommentProps = {
34
+ data: CommentDataType,
35
+ style?: any,
36
+ }
37
+
38
+ type CommentsTypeProps = {
39
+ data: CommentDataType[],
40
+ }
41
+
42
+ type CommentsTimelineProps = {
43
+ value?: EventsType[],
44
+ }
45
+
46
+
47
+ type EventActionType = {
48
+ date: string,
49
+ action: string,
50
+ }
51
+
52
+ export type EventsType = {
53
+ type: "action" | "comment",
54
+ event: EventActionType | CommentDataType
55
+
56
+ }
57
+
58
+ const Gravatar = ({ email, size = 40, theme = '' } : GravatarProps) => {
59
+ // Genera el enlace de Gravatar utilizando el email
60
+ const gravatarUrl = `https://www.gravatar.com/avatar/${md5(email)}?s=${size}&d=${theme}`;
61
+
62
+ return (
63
+ <Avatar src={gravatarUrl} size={size} />
64
+ );
65
+ };
66
+
67
+
68
+ function TextWithNewlines({ text }:{text: string}) {
69
+ const textParts = text.split('\n');
70
+
71
+ return (
72
+ <div>
73
+ {textParts.map((part, index) => (
74
+ <React.Fragment key={index}>
75
+ {part}
76
+ {index !== textParts.length - 1 && <br />}
77
+ </React.Fragment>
78
+ ))}
79
+ </div>
80
+ );
81
+ }
82
+
83
+ export const Comment = (props: CommentProps) => {
84
+ const {data, style} = props;
85
+ const { t } = useContext(LocaleContext) as LocaleContextType;
86
+ return (
87
+ <Card key={data.id} style={{...style, ...{textAlign: 'start'}}}>
88
+ <Meta avatar={<Gravatar email={data.email} theme='mp'/>}
89
+ title={data.author}
90
+ description={(
91
+ <Space direction="horizontal">
92
+ <span title={data.date}>{dayjs(data.date).fromNow()}</span>
93
+ {data.isAuthor && <Tag color="blue">{t('author')}</Tag>}
94
+ </Space>
95
+ )} style={{marginBottom: '5px'}}/>
96
+ <Text>
97
+ <TextWithNewlines text={data.text} />
98
+ </Text>
99
+ </Card>
100
+ )
101
+ }
102
+
103
+ export const Comments = (props: CommentsTypeProps) => {
104
+ const { data = [] } = props;
105
+ const comments = data.map((c) => {
106
+ const style = {float: c.isSender ? 'right' : 'left', width: '60%'};
107
+ return <Comment data={c} style={style}/>
108
+ });
109
+ return (
110
+ <div>
111
+ <Space direction="vertical" size="middle" style={{ display: 'flex' }}>
112
+ {comments}
113
+ </Space>
114
+ </div>
115
+ )
116
+ }
117
+
118
+
119
+ export const CommentsTimeline = (props: CommentsTimelineProps) => {
120
+ const { value } = props;
121
+ const items = (value || []).map(i => {
122
+ if (i.type === 'action') {
123
+ return {
124
+ children: `${i.event.date} - ${(i.event as EventActionType).action}`
125
+ }
126
+ } else if (i.type === "comment") {
127
+ return {
128
+ color: 'gray',
129
+ position: (i.event as CommentDataType).isSender ? 'left' : 'right',
130
+ label: i.event.date,
131
+ children: <Comment data={i.event as CommentDataType} />,
132
+ }
133
+ }
134
+ })
135
+ return <Timeline mode="alternate" items={items as TimelineItemProps[]} />
136
+ }
137
+
138
+ export const CommentsTimelineField = (props: WidgetProps) => {
139
+ return (
140
+ <Field {...props}>
141
+ <CommentsTimeline />
142
+ </Field>
143
+ );
144
+ }