@steroidsjs/core 3.0.0-beta.98 → 3.0.0-beta.99

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.
@@ -4179,6 +4179,163 @@
4179
4179
  }
4180
4180
  ]
4181
4181
  },
4182
+ "CalendarSystemEventGroupModalViewProps": {
4183
+ "name": "CalendarSystemEventGroupModalViewProps",
4184
+ "moduleName": "ui/content/CalendarSystem/CalendarSystem",
4185
+ "title": "",
4186
+ "description": "",
4187
+ "tags": {},
4188
+ "defaultProps": null,
4189
+ "extends": [
4190
+ "IModalProps"
4191
+ ],
4192
+ "properties": [
4193
+ {
4194
+ "name": "buttons",
4195
+ "decorators": [],
4196
+ "description": "Коллекция кнопок, которая отобразится в нижней секции Modal",
4197
+ "required": false,
4198
+ "type": "IButtonProps[]",
4199
+ "example": "[{label: __(('Закрыть')), onClick: () => props.onClose()}]"
4200
+ },
4201
+ {
4202
+ "name": "children",
4203
+ "decorators": [],
4204
+ "description": "Вложенные элементы",
4205
+ "required": false,
4206
+ "type": "any",
4207
+ "example": null
4208
+ },
4209
+ {
4210
+ "name": "className",
4211
+ "decorators": [],
4212
+ "description": "Кастомный CSS-класс",
4213
+ "required": false,
4214
+ "type": "string",
4215
+ "example": "'CustomCssClassName'"
4216
+ },
4217
+ {
4218
+ "name": "closeAfterMs",
4219
+ "decorators": [],
4220
+ "description": "Время в миллисекундах, через которое автоматически произойдет закрытие Modal.",
4221
+ "required": false,
4222
+ "type": "number",
4223
+ "example": "1000"
4224
+ },
4225
+ {
4226
+ "name": "closeTimeoutMs",
4227
+ "decorators": [],
4228
+ "description": "Время, в течение которого будет происходить анимация закрытия Modal.\nПереопределяет отрезок времени, заданный в ModalPortal",
4229
+ "required": false,
4230
+ "type": "number",
4231
+ "example": "300"
4232
+ },
4233
+ {
4234
+ "name": "component",
4235
+ "decorators": [],
4236
+ "description": "Компонент, который отрендерится внутри Modal",
4237
+ "required": false,
4238
+ "type": "{}",
4239
+ "example": "() => <InnerModalComponent />"
4240
+ },
4241
+ {
4242
+ "name": "componentProps",
4243
+ "decorators": [],
4244
+ "description": "Свойства для внутреннего компонента",
4245
+ "required": false,
4246
+ "type": "any",
4247
+ "example": null
4248
+ },
4249
+ {
4250
+ "name": "group",
4251
+ "decorators": [],
4252
+ "description": "Группа Modal",
4253
+ "required": false,
4254
+ "type": "string",
4255
+ "example": "'modal'"
4256
+ },
4257
+ {
4258
+ "name": "index",
4259
+ "decorators": [],
4260
+ "description": "Порядковый номер Modal",
4261
+ "required": false,
4262
+ "type": "number",
4263
+ "example": "0"
4264
+ },
4265
+ {
4266
+ "name": "isClosing",
4267
+ "decorators": [],
4268
+ "description": "Значение свойства отслеживается для показа/закрытия Modal.\nЕсли для компонента ModalPortal установлено значение задержки (animationDelayMc), то после закрытия\nпользователем Modal, оно исчезнет не сразу, а через указанный в animationDelayMc промежуток времени.\nВ течение этого времени флаг isClosing будет равен true.\nЕсли задержка не установлена, Modal закроется сразу же и флаг isClosing всегда будет равен false.",
4269
+ "required": false,
4270
+ "type": "boolean",
4271
+ "example": "true"
4272
+ },
4273
+ {
4274
+ "name": "isCreate",
4275
+ "decorators": [],
4276
+ "description": "",
4277
+ "required": true,
4278
+ "type": "boolean",
4279
+ "example": null
4280
+ },
4281
+ {
4282
+ "name": "onClose",
4283
+ "decorators": [],
4284
+ "description": "Обработчик срабатывает при закрытии Modal",
4285
+ "required": false,
4286
+ "type": "{}",
4287
+ "example": null
4288
+ },
4289
+ {
4290
+ "name": "onEventGroupSubmit",
4291
+ "decorators": [],
4292
+ "description": "",
4293
+ "required": true,
4294
+ "type": "{}",
4295
+ "example": null
4296
+ },
4297
+ {
4298
+ "name": "shouldCloseOnEsc",
4299
+ "decorators": [],
4300
+ "description": "Закрытие Modal при нажатии на клавишу 'ESC'",
4301
+ "required": false,
4302
+ "type": "boolean",
4303
+ "example": "true"
4304
+ },
4305
+ {
4306
+ "name": "shouldCloseOnOverlayClick",
4307
+ "decorators": [],
4308
+ "description": "Закрытие Modal при клике на компонент overlay внутри Modal (темный фон, отделяющий контент страницы от Modal)",
4309
+ "required": false,
4310
+ "type": "boolean",
4311
+ "example": "true"
4312
+ },
4313
+ {
4314
+ "name": "size",
4315
+ "decorators": [],
4316
+ "description": "Размер Modal",
4317
+ "required": false,
4318
+ "type": "string",
4319
+ "example": "'middle'"
4320
+ },
4321
+ {
4322
+ "name": "title",
4323
+ "decorators": [],
4324
+ "description": "Заголовок Modal",
4325
+ "required": false,
4326
+ "type": "string",
4327
+ "example": "'Заявка отправлена на модерацию'"
4328
+ },
4329
+ {
4330
+ "name": "view",
4331
+ "decorators": [],
4332
+ "description": "Переопределение React-компонента для кастомизации view-отображения",
4333
+ "required": false,
4334
+ "type": "React.ReactNode | {}",
4335
+ "example": "MyCustomView"
4336
+ }
4337
+ ]
4338
+ },
4182
4339
  "ICalendarSystemModalViewProps": {
4183
4340
  "name": "ICalendarSystemModalViewProps",
4184
4341
  "moduleName": "ui/content/CalendarSystem/CalendarSystem",
@@ -4355,7 +4512,7 @@
4355
4512
  "ICalendarSystemProps": {
4356
4513
  "name": "ICalendarSystemProps",
4357
4514
  "moduleName": "ui/content/CalendarSystem/CalendarSystem",
4358
- "title": "",
4515
+ "title": "Комплексный календарь",
4359
4516
  "description": "",
4360
4517
  "tags": {},
4361
4518
  "defaultProps": null,
@@ -4366,7 +4523,7 @@
4366
4523
  {
4367
4524
  "name": "calendarModalProps",
4368
4525
  "decorators": [],
4369
- "description": "",
4526
+ "description": "Свойства для модального окна",
4370
4527
  "required": false,
4371
4528
  "type": "IModalProps",
4372
4529
  "example": null
@@ -4382,23 +4539,23 @@
4382
4539
  {
4383
4540
  "name": "eventBlock",
4384
4541
  "decorators": [],
4385
- "description": "",
4542
+ "description": "Параметры для групп событий",
4386
4543
  "required": true,
4387
4544
  "type": "{eventGroups: IEventGroup[], title: string}",
4388
4545
  "example": null
4389
4546
  },
4390
4547
  {
4391
- "name": "onChangeCalendarType",
4548
+ "name": "eventGroupModalProps",
4392
4549
  "decorators": [],
4393
- "description": "",
4550
+ "description": "Свойства для модалного окна группы событий",
4394
4551
  "required": false,
4395
- "type": "{}",
4552
+ "type": "IModalProps",
4396
4553
  "example": null
4397
4554
  },
4398
4555
  {
4399
- "name": "onCreateEvent",
4556
+ "name": "onChangeCalendarType",
4400
4557
  "decorators": [],
4401
- "description": "",
4558
+ "description": "Функция, которая вызовется при смене типа календаря",
4402
4559
  "required": false,
4403
4560
  "type": "{}",
4404
4561
  "example": null
@@ -4529,6 +4686,14 @@
4529
4686
  "type": "{}",
4530
4687
  "example": null
4531
4688
  },
4689
+ {
4690
+ "name": "openCreateEventGroupModal",
4691
+ "decorators": [],
4692
+ "description": "",
4693
+ "required": true,
4694
+ "type": "VoidFunction",
4695
+ "example": null
4696
+ },
4532
4697
  {
4533
4698
  "name": "openCreateModal",
4534
4699
  "decorators": [],
@@ -4617,7 +4782,7 @@
4617
4782
  "IEvent": {
4618
4783
  "name": "IEvent",
4619
4784
  "moduleName": "ui/content/CalendarSystem/CalendarSystem",
4620
- "title": "",
4785
+ "title": "Событие",
4621
4786
  "description": "",
4622
4787
  "tags": {},
4623
4788
  "defaultProps": null,
@@ -4626,7 +4791,7 @@
4626
4791
  {
4627
4792
  "name": "color",
4628
4793
  "decorators": [],
4629
- "description": "",
4794
+ "description": "Цвет",
4630
4795
  "required": false,
4631
4796
  "type": "string",
4632
4797
  "example": null
@@ -4634,7 +4799,7 @@
4634
4799
  {
4635
4800
  "name": "date",
4636
4801
  "decorators": [],
4637
- "description": "",
4802
+ "description": "Дата",
4638
4803
  "required": true,
4639
4804
  "type": "Date",
4640
4805
  "example": null
@@ -4642,7 +4807,7 @@
4642
4807
  {
4643
4808
  "name": "description",
4644
4809
  "decorators": [],
4645
- "description": "",
4810
+ "description": "Внутреннее описания события",
4646
4811
  "required": false,
4647
4812
  "type": "string",
4648
4813
  "example": null
@@ -4650,7 +4815,7 @@
4650
4815
  {
4651
4816
  "name": "id",
4652
4817
  "decorators": [],
4653
- "description": "",
4818
+ "description": "Идентификатор",
4654
4819
  "required": true,
4655
4820
  "type": "number",
4656
4821
  "example": null
@@ -4658,7 +4823,7 @@
4658
4823
  {
4659
4824
  "name": "title",
4660
4825
  "decorators": [],
4661
- "description": "",
4826
+ "description": "Заголовок",
4662
4827
  "required": true,
4663
4828
  "type": "string",
4664
4829
  "example": null
@@ -4668,7 +4833,7 @@
4668
4833
  "IEventGroup": {
4669
4834
  "name": "IEventGroup",
4670
4835
  "moduleName": "ui/content/CalendarSystem/CalendarSystem",
4671
- "title": "",
4836
+ "title": "Группа событий",
4672
4837
  "description": "",
4673
4838
  "tags": {},
4674
4839
  "defaultProps": null,
@@ -4677,15 +4842,15 @@
4677
4842
  {
4678
4843
  "name": "color",
4679
4844
  "decorators": [],
4680
- "description": "",
4845
+ "description": "Цвет",
4681
4846
  "required": false,
4682
4847
  "type": "string",
4683
- "example": null
4848
+ "example": "'#000000'"
4684
4849
  },
4685
4850
  {
4686
4851
  "name": "events",
4687
4852
  "decorators": [],
4688
- "description": "",
4853
+ "description": "События группы",
4689
4854
  "required": true,
4690
4855
  "type": "Omit[]",
4691
4856
  "example": null
@@ -4693,7 +4858,7 @@
4693
4858
  {
4694
4859
  "name": "id",
4695
4860
  "decorators": [],
4696
- "description": "",
4861
+ "description": "Идентификатор",
4697
4862
  "required": true,
4698
4863
  "type": "number",
4699
4864
  "example": null
@@ -4701,7 +4866,7 @@
4701
4866
  {
4702
4867
  "name": "label",
4703
4868
  "decorators": [],
4704
- "description": "",
4869
+ "description": "Название группы",
4705
4870
  "required": true,
4706
4871
  "type": "string",
4707
4872
  "example": null
@@ -4722,7 +4887,7 @@
4722
4887
  {
4723
4888
  "name": "color",
4724
4889
  "decorators": [],
4725
- "description": "",
4890
+ "description": "Цвет",
4726
4891
  "required": false,
4727
4892
  "type": "string",
4728
4893
  "example": null
@@ -4730,7 +4895,7 @@
4730
4895
  {
4731
4896
  "name": "date",
4732
4897
  "decorators": [],
4733
- "description": "",
4898
+ "description": "Дата",
4734
4899
  "required": true,
4735
4900
  "type": "Date",
4736
4901
  "example": null
@@ -4738,7 +4903,7 @@
4738
4903
  {
4739
4904
  "name": "description",
4740
4905
  "decorators": [],
4741
- "description": "",
4906
+ "description": "Внутреннее описания события",
4742
4907
  "required": false,
4743
4908
  "type": "string",
4744
4909
  "example": null
@@ -4754,7 +4919,7 @@
4754
4919
  {
4755
4920
  "name": "id",
4756
4921
  "decorators": [],
4757
- "description": "",
4922
+ "description": "Идентификатор",
4758
4923
  "required": true,
4759
4924
  "type": "number",
4760
4925
  "example": null
@@ -4762,7 +4927,7 @@
4762
4927
  {
4763
4928
  "name": "title",
4764
4929
  "decorators": [],
4765
- "description": "",
4930
+ "description": "Заголовок",
4766
4931
  "required": true,
4767
4932
  "type": "string",
4768
4933
  "example": null
@@ -30830,6 +30995,14 @@
30830
30995
  "type": "AvatarGroupProps",
30831
30996
  "example": null
30832
30997
  },
30998
+ "CalendarSystemEventGroupModalFields": {
30999
+ "name": "CalendarSystemEventGroupModalFields",
31000
+ "decorators": [],
31001
+ "description": "",
31002
+ "required": true,
31003
+ "type": "\"label\" | \"color\"",
31004
+ "example": null
31005
+ },
30833
31006
  "CalendarSystemModalFields": {
30834
31007
  "name": "CalendarSystemModalFields",
30835
31008
  "decorators": [],
package/en.json CHANGED
@@ -906,5 +906,13 @@
906
906
  "\nКомпонент в котором можно расположить различные элементы, например графики, таблицы на доске\n": "",
907
907
  "Заголовок для элемента": "",
908
908
  "Кастомная вьюшка для элемента": "",
909
- "Элементы дашборда": ""
909
+ "Элементы дашборда": "",
910
+ "Свойства для модального окна": "",
911
+ "Параметры для групп событий": "",
912
+ "Свойства для модалного окна группы событий": "",
913
+ "Функция, которая вызовется при смене типа календаря": "",
914
+ "Внутреннее описания события": "",
915
+ "Идентификатор": "",
916
+ "События группы": "",
917
+ "Название группы": ""
910
918
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.0-beta.98",
3
+ "version": "3.0.0-beta.99",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -18,26 +18,81 @@ export interface IPresentDateInfo {
18
18
  currentMonth: number;
19
19
  dateToDisplay: string;
20
20
  }
21
+ /**
22
+ * Событие
23
+ */
21
24
  export interface IEvent {
25
+ /**
26
+ * Идентификатор
27
+ */
22
28
  id: number;
29
+ /**
30
+ * Дата
31
+ */
23
32
  date: Date;
33
+ /**
34
+ * Заголовок
35
+ */
24
36
  title: string;
37
+ /**
38
+ * Цвет
39
+ */
25
40
  color?: string;
41
+ /**
42
+ * Внутреннее описания события
43
+ */
26
44
  description?: string;
27
45
  [key: string]: any;
28
46
  }
47
+ /**
48
+ * Группа событий
49
+ */
29
50
  export interface IEventGroup {
51
+ /**
52
+ * Идентификатор
53
+ */
30
54
  id: number;
55
+ /**
56
+ * Название группы
57
+ */
31
58
  label: string;
59
+ /**
60
+ * Цвет
61
+ * @example '#000000'
62
+ */
32
63
  color?: string;
64
+ /**
65
+ * События группы
66
+ */
33
67
  events: Omit<IEvent, 'color'>[];
34
68
  }
69
+ /**
70
+ * Комплексный календарь
71
+ **/
35
72
  export interface ICalendarSystemProps extends IUiComponent {
36
- onCreateEvent?: () => void;
73
+ /**
74
+ * Функция, которая вызовется при смене типа календаря
75
+ */
37
76
  onChangeCalendarType?: (newType: string) => void;
77
+ /**
78
+ * Свойства для модального окна
79
+ */
38
80
  calendarModalProps?: IModalProps;
81
+ /**
82
+ * Свойства для модалного окна группы событий
83
+ */
84
+ eventGroupModalProps?: IModalProps;
85
+ /**
86
+ * Параметры для групп событий
87
+ */
39
88
  eventBlock: {
89
+ /**
90
+ * Заголовок, который используется для обозначения групп событий
91
+ */
40
92
  title: string;
93
+ /**
94
+ * Группы событий
95
+ */
41
96
  eventGroups: IEventGroup[];
42
97
  };
43
98
  [key: string]: any;
@@ -57,7 +112,7 @@ export interface ICalendarSystemViewProps extends Omit<ICalendarSystemProps, 'ca
57
112
  openCreateModal: (eventInitialDay?: IDay) => void;
58
113
  openCreateEventGroupModal: VoidFunction;
59
114
  openEditModal: (event: IEvent) => void;
60
- getEventsFromDate: (dateFromDay: Date, isMonth: boolean) => IEvent[];
115
+ getEventsFromDate: (dateFromDay: Date, currentCalendarType: CalendarEnum) => IEvent[];
61
116
  onChangeEventGroupsIds: (selectedIds: number[]) => void;
62
117
  weekDays: string[];
63
118
  }
@@ -43,7 +43,7 @@ function CalendarSystem(props) {
43
43
  var _f = (0, hooks_1.useWeekCalendar)(currentMonthDate), currentWeekDays = _f.currentWeek, weekControls = _f.weekControls, forceUpdateWeekOnMonthChange = _f.forceUpdateWeekOnMonthChange;
44
44
  var applyControl = (0, useCalendarControls_1["default"])(calendarType, weekControls);
45
45
  var _g = (0, useCalendarSystemModals_1["default"])(props.calendarModalProps, innerEventGroups, setInnerEventGroups), openCreateModal = _g.openCreateModal, openEditModal = _g.openEditModal;
46
- var openCreateEventGroupModal = (0, useCalendarSystemEventGroupModals_1.useCalendarSystemEventGroupModals)(innerEventGroups, setInnerEventGroups).openCreateEventGroupModal;
46
+ var openCreateEventGroupModal = (0, useCalendarSystemEventGroupModals_1.useCalendarSystemEventGroupModals)(innerEventGroups, setInnerEventGroups, props.eventGroupModalProps).openCreateEventGroupModal;
47
47
  var onChangeCalendarType = react_1["default"].useCallback(function (newType) {
48
48
  setCalendarType(newType);
49
49
  if (props.onChangeCalendarType) {
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { IEventGroup } from '../CalendarSystem';
3
- export declare const useCalendarSystemEventGroupModals: (innerEventGroups: IEventGroup[], setInnerEventGroups: React.Dispatch<React.SetStateAction<IEventGroup[]>>) => {
3
+ import { IModalProps } from '../../../modal/Modal/Modal';
4
+ export declare const useCalendarSystemEventGroupModals: (innerEventGroups: IEventGroup[], setInnerEventGroups: React.Dispatch<React.SetStateAction<IEventGroup[]>>, eventGroupModalProps: IModalProps) => {
4
5
  openCreateEventGroupModal: () => void;
5
6
  };
@@ -19,10 +19,10 @@ var react_1 = __importDefault(require("react"));
19
19
  var modal_1 = require("../../../../actions/modal");
20
20
  var useComponents_1 = __importDefault(require("../../../../hooks/useComponents"));
21
21
  var DEFAULT_ID = 1;
22
- var useCalendarSystemEventGroupModals = function (innerEventGroups, setInnerEventGroups) {
22
+ var useCalendarSystemEventGroupModals = function (innerEventGroups, setInnerEventGroups, eventGroupModalProps) {
23
23
  var dispatch = (0, react_redux_1.useDispatch)();
24
24
  var components = (0, useComponents_1["default"])();
25
- var calendarModalView = components.ui.getView('content.CalendarSystemEventGroupModalView');
25
+ var calendarModalView = (eventGroupModalProps === null || eventGroupModalProps === void 0 ? void 0 : eventGroupModalProps.component) || components.ui.getView('content.CalendarSystemEventGroupModalView');
26
26
  var onEventGroupSubmit = react_1["default"].useCallback(function (fields) {
27
27
  var _a;
28
28
  var newEventGroup = {
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { IAvatarProps } from '../Avatar/Avatar';
3
+ import { IChatConfig, IGroupedMessagesByDates } from './hooks/useChat';
4
+ export interface IChatUser {
5
+ id: number;
6
+ firstName?: string;
7
+ lastName?: string;
8
+ avatar?: IAvatarProps;
9
+ }
10
+ export interface IChatMessage {
11
+ id: number;
12
+ user: IChatUser;
13
+ text: string;
14
+ timestamp: Date;
15
+ }
16
+ interface IChatProps extends IChatConfig, IUiComponent {
17
+ chatId: string;
18
+ currentUser: IChatUser;
19
+ }
20
+ export interface IChatViewProps extends Omit<IChatProps, 'messages'> {
21
+ groupedMessagesByDates: IGroupedMessagesByDates;
22
+ }
23
+ export default function Chat(props: IChatProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
24
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ exports.__esModule = true;
17
+ var hooks_1 = require("../../../hooks");
18
+ var useChat_1 = __importDefault(require("./hooks/useChat"));
19
+ function Chat(props) {
20
+ var components = (0, hooks_1.useComponents)();
21
+ var groupedMessagesByDates = (0, useChat_1["default"])({
22
+ messages: props.messages
23
+ }).groupedMessagesByDates;
24
+ return components.ui.renderView(props.view || 'content.ChatView', __assign(__assign({}, props), { groupedMessagesByDates: groupedMessagesByDates }));
25
+ }
26
+ exports["default"] = Chat;
@@ -0,0 +1,7 @@
1
+ export declare const MONTH_AND_DAY_TEMPLATE = "MMMM DD";
2
+ export declare const HOURS_AND_MINUTES_TEMPLATE = "HH:mm";
3
+ export declare const MINUTE_UNIT = "minute";
4
+ export declare const HOUR_UNIT = "hour";
5
+ export declare const SECONDS_IN_MINUTE_VALUE = 60000;
6
+ export declare const MINUTES_IN_HOUR_VALUE = 60;
7
+ export declare const HOURS_IN_DAY_VALUE = 24;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.HOURS_IN_DAY_VALUE = exports.MINUTES_IN_HOUR_VALUE = exports.SECONDS_IN_MINUTE_VALUE = exports.HOUR_UNIT = exports.MINUTE_UNIT = exports.HOURS_AND_MINUTES_TEMPLATE = exports.MONTH_AND_DAY_TEMPLATE = void 0;
4
+ exports.MONTH_AND_DAY_TEMPLATE = 'MMMM DD';
5
+ exports.HOURS_AND_MINUTES_TEMPLATE = 'HH:mm';
6
+ exports.MINUTE_UNIT = 'minute';
7
+ exports.HOUR_UNIT = 'hour';
8
+ exports.SECONDS_IN_MINUTE_VALUE = 60000;
9
+ exports.MINUTES_IN_HOUR_VALUE = 60;
10
+ exports.HOURS_IN_DAY_VALUE = 24;
@@ -0,0 +1,13 @@
1
+ import { IChatMessage } from '../Chat';
2
+ export interface IChatConfig {
3
+ messages: IChatMessage[];
4
+ }
5
+ export interface IGroupedMessage extends IChatMessage {
6
+ isFirstMessage?: boolean;
7
+ isLastMessage?: boolean;
8
+ }
9
+ export type IGroupedMessagesByDates = Record<string, IGroupedMessage[][]>;
10
+ declare const useChat: (config: IChatConfig) => {
11
+ groupedMessagesByDates: {};
12
+ };
13
+ export default useChat;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ var react_1 = require("react");
4
+ var utils_1 = require("../utils");
5
+ var useChat = function (config) {
6
+ var _a = (0, react_1.useState)({}), groupedMessagesByDates = _a[0], setGroupedMessagesByDates = _a[1];
7
+ (0, react_1.useEffect)(function () { return setGroupedMessagesByDates((0, utils_1.getMessagesGroupedByDate)(config.messages)); }, [config.messages]);
8
+ return {
9
+ groupedMessagesByDates: groupedMessagesByDates
10
+ };
11
+ };
12
+ exports["default"] = useChat;
@@ -0,0 +1,2 @@
1
+ import Chat from './Chat';
2
+ export default Chat;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ var Chat_1 = __importDefault(require("./Chat"));
7
+ exports["default"] = Chat_1["default"];
@@ -0,0 +1 @@
1
+ export declare const calculateMessageTimeAgo: (timestamp: any) => string;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.calculateMessageTimeAgo = void 0;
7
+ var dayjs_1 = __importDefault(require("dayjs"));
8
+ var timeTemplatesAndUnits_1 = require("../constants/timeTemplatesAndUnits");
9
+ var calculateMessageTimeAgo = function (timestamp) {
10
+ var now = (0, dayjs_1["default"])();
11
+ var messageTime = (0, dayjs_1["default"])(timestamp);
12
+ var diffInMinutes = now.diff(messageTime, timeTemplatesAndUnits_1.MINUTE_UNIT);
13
+ var diffInHours = now.diff(messageTime, timeTemplatesAndUnits_1.HOUR_UNIT);
14
+ var timeAgo = '';
15
+ if (diffInMinutes < timeTemplatesAndUnits_1.MINUTES_IN_HOUR_VALUE) {
16
+ timeAgo = __("".concat(diffInMinutes, " \u043C\u0438\u043D. \u043D\u0430\u0437\u0430\u0434"), { diffInMinutes: diffInMinutes });
17
+ }
18
+ else if (diffInHours < timeTemplatesAndUnits_1.HOURS_IN_DAY_VALUE) {
19
+ timeAgo = __("".concat(diffInHours, " \u0447. \u043D\u0430\u0437\u0430\u0434"), { diffInHours: diffInHours });
20
+ }
21
+ else {
22
+ timeAgo = messageTime.format(timeTemplatesAndUnits_1.HOURS_AND_MINUTES_TEMPLATE);
23
+ }
24
+ return timeAgo;
25
+ };
26
+ exports.calculateMessageTimeAgo = calculateMessageTimeAgo;
@@ -0,0 +1,3 @@
1
+ import { IGroupedMessagesByDates } from '../hooks/useChat';
2
+ import { IChatMessage } from '../Chat';
3
+ export declare const getMessagesGroupedByDate: (messages: IChatMessage[]) => IGroupedMessagesByDates;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.getMessagesGroupedByDate = void 0;
7
+ var first_1 = __importDefault(require("lodash-es/first"));
8
+ var last_1 = __importDefault(require("lodash-es/last"));
9
+ var dayjs_1 = __importDefault(require("dayjs"));
10
+ var timeTemplatesAndUnits_1 = require("../constants/timeTemplatesAndUnits");
11
+ var isWithinTimeThreshold = function (firstMessage, secondMessage) {
12
+ var firstMessageTime = new Date(firstMessage.timestamp).getTime();
13
+ var secondMessageTime = new Date(secondMessage.timestamp).getTime();
14
+ return firstMessage.user.id === secondMessage.user.id && Math.abs(firstMessageTime - secondMessageTime) <= timeTemplatesAndUnits_1.SECONDS_IN_MINUTE_VALUE;
15
+ };
16
+ var addFirstAndLastKeyForMessageGroup = function (messageGroup) {
17
+ (0, first_1["default"])(messageGroup).isFirstMessage = true;
18
+ (0, last_1["default"])(messageGroup).isLastMessage = true;
19
+ };
20
+ var getMessagesGroupedByDate = function (messages) {
21
+ var groupedMessages = {};
22
+ var prevDateKey = null;
23
+ messages.forEach(function (message) {
24
+ var dateKey = (0, dayjs_1["default"])(message.timestamp).format(timeTemplatesAndUnits_1.MONTH_AND_DAY_TEMPLATE);
25
+ if (!groupedMessages[dateKey]) {
26
+ groupedMessages[dateKey] = [];
27
+ }
28
+ // array of grouped messages for dateKey
29
+ var messagesGroupFromDate = groupedMessages[dateKey];
30
+ // last group of messages
31
+ var lastMessageGroup = (0, last_1["default"])(messagesGroupFromDate);
32
+ // add fields to the last group of messages for the previous date
33
+ if (!lastMessageGroup && prevDateKey) {
34
+ addFirstAndLastKeyForMessageGroup((0, last_1["default"])(groupedMessages[prevDateKey]));
35
+ }
36
+ var lastMessageFromGroup = (0, last_1["default"])(lastMessageGroup);
37
+ // if time difference between messages is less than a minute, and they are from the same user
38
+ if (lastMessageFromGroup && isWithinTimeThreshold(lastMessageFromGroup, message)) {
39
+ lastMessageGroup.push(message);
40
+ }
41
+ else if (lastMessageGroup) {
42
+ // add fields to the previous group of messages for the same date
43
+ addFirstAndLastKeyForMessageGroup(lastMessageGroup);
44
+ messagesGroupFromDate.push([message]);
45
+ }
46
+ else {
47
+ prevDateKey = dateKey;
48
+ messagesGroupFromDate.push([message]);
49
+ }
50
+ });
51
+ // add fields to the last group of messages
52
+ addFirstAndLastKeyForMessageGroup((0, last_1["default"])(groupedMessages[prevDateKey]));
53
+ return groupedMessages;
54
+ };
55
+ exports.getMessagesGroupedByDate = getMessagesGroupedByDate;
@@ -0,0 +1,3 @@
1
+ import { getMessagesGroupedByDate } from './getMessagesGroupedByDate';
2
+ import { calculateMessageTimeAgo } from './calculateMessageTimeAgo';
3
+ export { getMessagesGroupedByDate, calculateMessageTimeAgo, };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.calculateMessageTimeAgo = exports.getMessagesGroupedByDate = void 0;
4
+ var getMessagesGroupedByDate_1 = require("./getMessagesGroupedByDate");
5
+ exports.getMessagesGroupedByDate = getMessagesGroupedByDate_1.getMessagesGroupedByDate;
6
+ var calculateMessageTimeAgo_1 = require("./calculateMessageTimeAgo");
7
+ exports.calculateMessageTimeAgo = calculateMessageTimeAgo_1.calculateMessageTimeAgo;
@@ -12,4 +12,5 @@ import CopyToClipboard from './CopyToClipboard';
12
12
  import Chart from './Chart';
13
13
  import Slider from './Slider';
14
14
  import CalendarSystem from './CalendarSystem';
15
- export { Avatar, AvatarGroup, Accordion, AccordionItem, Alert, Card, DropDown, Badge, Detail, DetailItem, Icon, Kanban, Menu, CopyToClipboard, Chart, Slider, CalendarSystem, };
15
+ import Chat from './Chat';
16
+ export { Avatar, AvatarGroup, Accordion, AccordionItem, Alert, Card, DropDown, Badge, Detail, DetailItem, Icon, Kanban, Menu, CopyToClipboard, Chart, Slider, CalendarSystem, Chat, };
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  exports.__esModule = true;
6
- exports.CalendarSystem = exports.Slider = exports.Chart = exports.CopyToClipboard = exports.Menu = exports.Kanban = exports.Icon = exports.DetailItem = exports.Detail = exports.Badge = exports.DropDown = exports.Card = exports.Alert = exports.AccordionItem = exports.Accordion = exports.AvatarGroup = exports.Avatar = void 0;
6
+ exports.Chat = exports.CalendarSystem = exports.Slider = exports.Chart = exports.CopyToClipboard = exports.Menu = exports.Kanban = exports.Icon = exports.DetailItem = exports.Detail = exports.Badge = exports.DropDown = exports.Card = exports.Alert = exports.AccordionItem = exports.Accordion = exports.AvatarGroup = exports.Avatar = void 0;
7
7
  var Avatar_1 = require("./Avatar");
8
8
  exports.Avatar = Avatar_1.Avatar;
9
9
  exports.AvatarGroup = Avatar_1.AvatarGroup;
@@ -35,3 +35,5 @@ var Slider_1 = __importDefault(require("./Slider"));
35
35
  exports.Slider = Slider_1["default"];
36
36
  var CalendarSystem_1 = __importDefault(require("./CalendarSystem"));
37
37
  exports.CalendarSystem = CalendarSystem_1["default"];
38
+ var Chat_1 = __importDefault(require("./Chat"));
39
+ exports.Chat = Chat_1["default"];