@steroidsjs/core 3.0.0-beta.113 → 3.0.0-beta.114

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.
@@ -4636,6 +4636,14 @@
4636
4636
  "required": false,
4637
4637
  "type": "string | number",
4638
4638
  "example": "2"
4639
+ },
4640
+ {
4641
+ "name": "useSameSelectedItemId",
4642
+ "decorators": [],
4643
+ "description": "При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.",
4644
+ "required": false,
4645
+ "type": "boolean",
4646
+ "example": "true"
4639
4647
  }
4640
4648
  ],
4641
4649
  "methods": [
@@ -7413,7 +7421,7 @@
7413
7421
  ]
7414
7422
  },
7415
7423
  {
7416
- "name": "onEventSubmit",
7424
+ "name": "onModalFormSubmit",
7417
7425
  "decorators": [],
7418
7426
  "description": "",
7419
7427
  "required": false,
@@ -7451,6 +7459,15 @@
7451
7459
  "IUiComponent"
7452
7460
  ],
7453
7461
  "properties": [
7462
+ {
7463
+ "name": "additionalViewProps",
7464
+ "decorators": [],
7465
+ "description": "Дополнительные свойства, которые передаются во view компонента",
7466
+ "required": false,
7467
+ "type": "Record",
7468
+ "example": null,
7469
+ "defaultValue": null
7470
+ },
7454
7471
  {
7455
7472
  "name": "calendarModalProps",
7456
7473
  "decorators": [],
@@ -7535,16 +7552,16 @@
7535
7552
  "tags": {},
7536
7553
  "defaultProps": null,
7537
7554
  "extends": [
7538
- "Omit<ICalendarSystemProps",
7539
- "'calendarGroups'>"
7555
+ "Pick<ICalendarSystemProps",
7556
+ "'className' | 'style' | 'additionalViewProps'>"
7540
7557
  ],
7541
7558
  "properties": [
7542
7559
  {
7543
- "name": "allHours",
7560
+ "name": "additionalViewProps",
7544
7561
  "decorators": [],
7545
- "description": "",
7546
- "required": true,
7547
- "type": "string[]",
7562
+ "description": "Дополнительные свойства, которые передаются во view компонента",
7563
+ "required": false,
7564
+ "type": "Record",
7548
7565
  "example": null
7549
7566
  },
7550
7567
  {
@@ -7556,11 +7573,11 @@
7556
7573
  "example": null
7557
7574
  },
7558
7575
  {
7559
- "name": "currentWeekDays",
7576
+ "name": "className",
7560
7577
  "decorators": [],
7561
- "description": "",
7562
- "required": true,
7563
- "type": "IDay[]",
7578
+ "description": "Дополнительный CSS-класс для элемента отображения",
7579
+ "required": false,
7580
+ "type": "string",
7564
7581
  "example": null
7565
7582
  },
7566
7583
  {
@@ -7588,11 +7605,11 @@
7588
7605
  "example": null
7589
7606
  },
7590
7607
  {
7591
- "name": "monthCalendarDays",
7608
+ "name": "monthGridProps",
7592
7609
  "decorators": [],
7593
7610
  "description": "",
7594
7611
  "required": true,
7595
- "type": "IDay[]",
7612
+ "type": "{monthGridCalendarDays: IDay[], monthGridWeekDays: string[], getEventsFromDate: null, openCreateModal: null, openEditModal: null}",
7596
7613
  "example": null
7597
7614
  },
7598
7615
  {
@@ -7604,25 +7621,25 @@
7604
7621
  "example": null
7605
7622
  },
7606
7623
  {
7607
- "name": "selectedCalendarGroupsIds",
7624
+ "name": "style",
7608
7625
  "decorators": [],
7609
- "description": "",
7610
- "required": true,
7611
- "type": "number[]",
7612
- "example": null
7626
+ "description": "Объект CSS стилей",
7627
+ "required": false,
7628
+ "type": "CSSProperties",
7629
+ "example": "{width: '45%'}"
7613
7630
  },
7614
7631
  {
7615
- "name": "weekDays",
7632
+ "name": "weekGridProps",
7616
7633
  "decorators": [],
7617
7634
  "description": "",
7618
7635
  "required": true,
7619
- "type": "string[]",
7636
+ "type": "{weekGridCurrentWeekDays: IDay[], weekGridTwentyFourHoursArray: string[], getEventsFromDate: null, openCreateModal: null, openEditModal: null}",
7620
7637
  "example": null
7621
7638
  }
7622
7639
  ],
7623
7640
  "methods": [
7624
7641
  {
7625
- "name": "applyControl",
7642
+ "name": "handleCalendarTypeChange",
7626
7643
  "decorators": [],
7627
7644
  "description": "",
7628
7645
  "required": false,
@@ -7630,43 +7647,17 @@
7630
7647
  "example": null,
7631
7648
  "parameters": [
7632
7649
  {
7633
- "name": "event",
7634
- "decorators": [],
7635
- "description": "",
7636
- "required": true,
7637
- "type": "MouseEvent",
7638
- "example": null
7639
- }
7640
- ]
7641
- },
7642
- {
7643
- "name": "getEventsFromDate",
7644
- "decorators": [],
7645
- "description": "",
7646
- "required": false,
7647
- "type": "IEvent[]",
7648
- "example": null,
7649
- "parameters": [
7650
- {
7651
- "name": "dateFromDay",
7652
- "decorators": [],
7653
- "description": "",
7654
- "required": true,
7655
- "type": "Date",
7656
- "example": null
7657
- },
7658
- {
7659
- "name": "currentCalendarType",
7650
+ "name": "newType",
7660
7651
  "decorators": [],
7661
7652
  "description": "",
7662
7653
  "required": true,
7663
- "type": "default",
7654
+ "type": "string",
7664
7655
  "example": null
7665
7656
  }
7666
7657
  ]
7667
7658
  },
7668
7659
  {
7669
- "name": "onChangeCalendarType",
7660
+ "name": "handleControlClick",
7670
7661
  "decorators": [],
7671
7662
  "description": "",
7672
7663
  "required": false,
@@ -7674,11 +7665,11 @@
7674
7665
  "example": null,
7675
7666
  "parameters": [
7676
7667
  {
7677
- "name": "newType",
7668
+ "name": "event",
7678
7669
  "decorators": [],
7679
7670
  "description": "",
7680
7671
  "required": true,
7681
- "type": "string",
7672
+ "type": "MouseEvent",
7682
7673
  "example": null
7683
7674
  }
7684
7675
  ]
@@ -7702,7 +7693,7 @@
7702
7693
  ]
7703
7694
  },
7704
7695
  {
7705
- "name": "onMonthChange",
7696
+ "name": "onInnerCalendarChangeMonth",
7706
7697
  "decorators": [],
7707
7698
  "description": "",
7708
7699
  "required": false,
@@ -7736,24 +7727,6 @@
7736
7727
  "example": null
7737
7728
  }
7738
7729
  ]
7739
- },
7740
- {
7741
- "name": "openEditModal",
7742
- "decorators": [],
7743
- "description": "",
7744
- "required": false,
7745
- "type": "void",
7746
- "example": null,
7747
- "parameters": [
7748
- {
7749
- "name": "event",
7750
- "decorators": [],
7751
- "description": "",
7752
- "required": true,
7753
- "type": "IEvent",
7754
- "example": null
7755
- }
7756
- ]
7757
7730
  }
7758
7731
  ]
7759
7732
  },
@@ -8282,6 +8255,82 @@
8282
8255
  ],
8283
8256
  "methods": []
8284
8257
  },
8258
+ "IChatInputViewProps": {
8259
+ "name": "IChatInputViewProps",
8260
+ "moduleName": "ui/content/Chat/Chat",
8261
+ "title": "",
8262
+ "description": "",
8263
+ "tags": {},
8264
+ "defaultProps": null,
8265
+ "extends": [
8266
+ "Pick<IChatProps",
8267
+ "'chatId' | 'fileFieldProps'>"
8268
+ ],
8269
+ "properties": [
8270
+ {
8271
+ "name": "chatId",
8272
+ "decorators": [],
8273
+ "description": "Идентификатор чата",
8274
+ "required": true,
8275
+ "type": "string",
8276
+ "example": "TaskChat"
8277
+ },
8278
+ {
8279
+ "name": "fileFieldProps",
8280
+ "decorators": [],
8281
+ "description": "Пропсы для инпута загрузки файлов",
8282
+ "required": false,
8283
+ "type": "IFileFieldProps",
8284
+ "example": null
8285
+ },
8286
+ {
8287
+ "name": "inputPlaceholder",
8288
+ "decorators": [],
8289
+ "description": "",
8290
+ "required": true,
8291
+ "type": "string",
8292
+ "example": null
8293
+ }
8294
+ ],
8295
+ "methods": [
8296
+ {
8297
+ "name": "onSendMessage",
8298
+ "decorators": [],
8299
+ "description": "",
8300
+ "required": false,
8301
+ "type": "void",
8302
+ "example": null,
8303
+ "parameters": [
8304
+ {
8305
+ "name": "data",
8306
+ "decorators": [],
8307
+ "description": "",
8308
+ "required": true,
8309
+ "type": "any",
8310
+ "example": null
8311
+ }
8312
+ ]
8313
+ },
8314
+ {
8315
+ "name": "onUploadFiles",
8316
+ "decorators": [],
8317
+ "description": "",
8318
+ "required": false,
8319
+ "type": "void",
8320
+ "example": null,
8321
+ "parameters": [
8322
+ {
8323
+ "name": "files",
8324
+ "decorators": [],
8325
+ "description": "",
8326
+ "required": true,
8327
+ "type": "any",
8328
+ "example": null
8329
+ }
8330
+ ]
8331
+ }
8332
+ ]
8333
+ },
8285
8334
  "IChatMessage": {
8286
8335
  "name": "IChatMessage",
8287
8336
  "moduleName": "ui/content/Chat/Chat",
@@ -8291,6 +8340,14 @@
8291
8340
  "defaultProps": null,
8292
8341
  "extends": [],
8293
8342
  "properties": [
8343
+ {
8344
+ "name": "files",
8345
+ "decorators": [],
8346
+ "description": "",
8347
+ "required": false,
8348
+ "type": "IMessageFile[]",
8349
+ "example": null
8350
+ },
8294
8351
  {
8295
8352
  "name": "id",
8296
8353
  "decorators": [],
@@ -8364,13 +8421,40 @@
8364
8421
  "example": "{\n id: 1,\n firstName: 'Olga',\n lastName: 'Petrova',\n avatar: {\n src: 'images.com/image.png',\n status: true,\n },\n}",
8365
8422
  "defaultValue": null
8366
8423
  },
8424
+ {
8425
+ "name": "customChatInputView",
8426
+ "decorators": [],
8427
+ "description": "Переопределение view React компонента для кастомизации отображения элемента инпута",
8428
+ "required": false,
8429
+ "type": "ReactNode",
8430
+ "example": "MyCustomView",
8431
+ "defaultValue": null
8432
+ },
8433
+ {
8434
+ "name": "customInputPlaceholder",
8435
+ "decorators": [],
8436
+ "description": "Кастомный placeholder для инпута",
8437
+ "required": false,
8438
+ "type": "string",
8439
+ "example": null,
8440
+ "defaultValue": null
8441
+ },
8442
+ {
8443
+ "name": "fileFieldProps",
8444
+ "decorators": [],
8445
+ "description": "Пропсы для инпута загрузки файлов",
8446
+ "required": false,
8447
+ "type": "IFileFieldProps",
8448
+ "example": null,
8449
+ "defaultValue": null
8450
+ },
8367
8451
  {
8368
8452
  "name": "messages",
8369
8453
  "decorators": [],
8370
8454
  "description": "Коллекция сообщений",
8371
8455
  "required": true,
8372
8456
  "type": "IChatMessage[]",
8373
- "example": "[\n {\n id: 1,\n text: 'Всем привет!',\n user: {\n id: 1,\n firstName: 'Olga',\n lastName: 'Petrova',\n avatar: {\n src: 'images.com/image.png',\n status: true,\n },\n },\n timestamp: '2023-10-25T12:38:00',\n },\n]",
8457
+ "example": "[\n {\n id: 1,\n text: 'Всем привет!',\n files: [\n {\n id: 929,\n uid: 'c46f3d14-5891-4601-9e98-06f2c1e70a07',\n title: 'image.jpg',\n url: 'https://kozhin.dev/files/uploaded/c46f3d14-5891-4601-9e98-06f2c1e70a07.jpg',\n size: 47305,\n }\n ],\n user: {\n id: 1,\n firstName: 'Olga',\n lastName: 'Petrova',\n avatar: {\n src: 'images.com/image.png',\n status: true,\n },\n },\n timestamp: '2023-10-25T12:38:00',\n },\n]",
8374
8458
  "defaultValue": null
8375
8459
  },
8376
8460
  {
@@ -8473,79 +8557,106 @@
8473
8557
  "tags": {},
8474
8558
  "defaultProps": null,
8475
8559
  "extends": [
8476
- "Omit<IChatProps",
8477
- "'messages'>"
8560
+ "Pick<IChatProps",
8561
+ "'currentUser'>"
8478
8562
  ],
8479
8563
  "properties": [
8480
8564
  {
8481
- "name": "chatId",
8565
+ "name": "currentUser",
8482
8566
  "decorators": [],
8483
- "description": "Идентификатор чата",
8567
+ "description": "Данные о текущем пользователе, нужны для отправки сообщений и определения сообщений пользователя",
8484
8568
  "required": true,
8485
- "type": "string",
8486
- "example": "TaskChat"
8569
+ "type": "IChatUser",
8570
+ "example": "{\n id: 1,\n firstName: 'Olga',\n lastName: 'Petrova',\n avatar: {\n src: 'images.com/image.png',\n status: true,\n },\n}"
8487
8571
  },
8488
8572
  {
8489
- "name": "className",
8573
+ "name": "groupedMessagesByDates",
8490
8574
  "decorators": [],
8491
- "description": "Дополнительный CSS-класс для элемента отображения",
8575
+ "description": "",
8576
+ "required": true,
8577
+ "type": "Record",
8578
+ "example": null
8579
+ }
8580
+ ],
8581
+ "methods": [
8582
+ {
8583
+ "name": "renderChatInput",
8584
+ "decorators": [],
8585
+ "description": "",
8586
+ "required": false,
8587
+ "type": "Element",
8588
+ "example": null,
8589
+ "parameters": []
8590
+ }
8591
+ ]
8592
+ },
8593
+ "IMessageFile": {
8594
+ "name": "IMessageFile",
8595
+ "moduleName": "ui/content/Chat/Chat",
8596
+ "title": "",
8597
+ "description": "",
8598
+ "tags": {},
8599
+ "defaultProps": null,
8600
+ "extends": [],
8601
+ "properties": [
8602
+ {
8603
+ "name": "downloadUrl",
8604
+ "decorators": [],
8605
+ "description": "",
8492
8606
  "required": false,
8493
8607
  "type": "string",
8494
8608
  "example": null
8495
8609
  },
8496
8610
  {
8497
- "name": "currentUser",
8611
+ "name": "fullHeight",
8498
8612
  "decorators": [],
8499
- "description": "Данные о текущем пользователе, нужны для отправки сообщений и определения сообщений пользователя",
8500
- "required": true,
8501
- "type": "IChatUser",
8502
- "example": "{\n id: 1,\n firstName: 'Olga',\n lastName: 'Petrova',\n avatar: {\n src: 'images.com/image.png',\n status: true,\n },\n}"
8613
+ "description": "",
8614
+ "required": false,
8615
+ "type": "number",
8616
+ "example": null
8503
8617
  },
8504
8618
  {
8505
- "name": "groupedMessagesByDates",
8619
+ "name": "fullWidth",
8506
8620
  "decorators": [],
8507
8621
  "description": "",
8508
- "required": true,
8509
- "type": "Record",
8622
+ "required": false,
8623
+ "type": "number",
8510
8624
  "example": null
8511
8625
  },
8512
8626
  {
8513
- "name": "style",
8627
+ "name": "size",
8514
8628
  "decorators": [],
8515
- "description": "Объект CSS стилей",
8629
+ "description": "",
8516
8630
  "required": false,
8517
- "type": "CSSProperties",
8518
- "example": "{width: '45%'}"
8631
+ "type": "number",
8632
+ "example": null
8519
8633
  },
8520
8634
  {
8521
- "name": "view",
8635
+ "name": "title",
8522
8636
  "decorators": [],
8523
- "description": "Переопределение view React компонента для кастомизации отображения",
8637
+ "description": "",
8524
8638
  "required": false,
8525
- "type": "React.ReactNode | {}",
8526
- "example": "MyCustomView"
8527
- }
8528
- ],
8529
- "methods": [
8639
+ "type": "string",
8640
+ "example": null
8641
+ },
8530
8642
  {
8531
- "name": "onSendMessage",
8643
+ "name": "uid",
8532
8644
  "decorators": [],
8533
8645
  "description": "",
8534
8646
  "required": false,
8535
- "type": "void",
8536
- "example": null,
8537
- "parameters": [
8538
- {
8539
- "name": "data",
8540
- "decorators": [],
8541
- "description": "",
8542
- "required": true,
8543
- "type": "any",
8544
- "example": null
8545
- }
8546
- ]
8647
+ "type": "string",
8648
+ "example": null
8649
+ },
8650
+ {
8651
+ "name": "url",
8652
+ "decorators": [],
8653
+ "description": "",
8654
+ "required": false,
8655
+ "type": "string",
8656
+ "example": null
8547
8657
  }
8548
- ]
8658
+ ],
8659
+ "methods": []
8549
8660
  },
8550
8661
  "IGroupedMessage": {
8551
8662
  "name": "IGroupedMessage",
@@ -8558,6 +8669,14 @@
8558
8669
  "IChatMessage"
8559
8670
  ],
8560
8671
  "properties": [
8672
+ {
8673
+ "name": "files",
8674
+ "decorators": [],
8675
+ "description": "",
8676
+ "required": false,
8677
+ "type": "IMessageFile[]",
8678
+ "example": null
8679
+ },
8561
8680
  {
8562
8681
  "name": "id",
8563
8682
  "decorators": [],
@@ -15142,7 +15261,7 @@
15142
15261
  "'items'>",
15143
15262
  "IUiComponent",
15144
15263
  "Pick<ITreeProps",
15145
- "'levelPadding' | 'alwaysOpened'>"
15264
+ "'levelPadding' | 'alwaysOpened' | 'showIcon' | 'customIcon'>"
15146
15265
  ],
15147
15266
  "properties": [
15148
15267
  {
@@ -15190,6 +15309,15 @@
15190
15309
  "example": null,
15191
15310
  "defaultValue": null
15192
15311
  },
15312
+ {
15313
+ "name": "customIcon",
15314
+ "decorators": [],
15315
+ "description": "Кастомная иконка, заменяющая иконку раскрытия по умолчанию",
15316
+ "required": false,
15317
+ "type": "string | ReactElement",
15318
+ "example": null,
15319
+ "defaultValue": null
15320
+ },
15193
15321
  {
15194
15322
  "name": "dataProvider",
15195
15323
  "decorators": [],
@@ -15406,6 +15534,15 @@
15406
15534
  "example": "[1, 4]",
15407
15535
  "defaultValue": null
15408
15536
  },
15537
+ {
15538
+ "name": "showIcon",
15539
+ "decorators": [],
15540
+ "description": "Показать иконку c лева от элемента",
15541
+ "required": false,
15542
+ "type": "boolean",
15543
+ "example": "true",
15544
+ "defaultValue": null
15545
+ },
15409
15546
  {
15410
15547
  "name": "size",
15411
15548
  "decorators": [],
@@ -15481,7 +15618,9 @@
15481
15618
  "tags": {},
15482
15619
  "defaultProps": null,
15483
15620
  "extends": [
15484
- "IFieldWrapperOutputProps"
15621
+ "IFieldWrapperOutputProps",
15622
+ "Pick<ITreeProps",
15623
+ "'levelPadding' | 'customIcon'>"
15485
15624
  ],
15486
15625
  "properties": [
15487
15626
  {
@@ -15492,6 +15631,14 @@
15492
15631
  "type": "string",
15493
15632
  "example": null
15494
15633
  },
15634
+ {
15635
+ "name": "customIcon",
15636
+ "decorators": [],
15637
+ "description": "Кастомная иконка, заменяющая иконку раскрытия по умолчанию",
15638
+ "required": false,
15639
+ "type": "string | ReactElement",
15640
+ "example": null
15641
+ },
15495
15642
  {
15496
15643
  "name": "errors",
15497
15644
  "decorators": [],
@@ -15527,10 +15674,10 @@
15527
15674
  {
15528
15675
  "name": "levelPadding",
15529
15676
  "decorators": [],
15530
- "description": "",
15531
- "required": true,
15677
+ "description": "Расстояние вложенных элементов от родителя для каждого уровня",
15678
+ "required": false,
15532
15679
  "type": "number",
15533
- "example": null
15680
+ "example": "32"
15534
15681
  },
15535
15682
  {
15536
15683
  "name": "selectedIds",
@@ -35555,7 +35702,7 @@
35555
35702
  "extends": [
35556
35703
  "IColumnViewProps",
35557
35704
  "Pick<ITreeTableProps",
35558
- "'levelPadding'>"
35705
+ "'levelPadding' | 'customIcon'>"
35559
35706
  ],
35560
35707
  "properties": [
35561
35708
  {
@@ -35574,6 +35721,14 @@
35574
35721
  "type": "string",
35575
35722
  "example": null
35576
35723
  },
35724
+ {
35725
+ "name": "customIcon",
35726
+ "decorators": [],
35727
+ "description": "",
35728
+ "required": false,
35729
+ "type": "string | ReactElement",
35730
+ "example": null
35731
+ },
35577
35732
  {
35578
35733
  "name": "diagram",
35579
35734
  "decorators": [],
@@ -35759,7 +35914,7 @@
35759
35914
  "Omit<IGridProps",
35760
35915
  "'items'>",
35761
35916
  "Pick<ITreeProps",
35762
- "'alwaysOpened' | 'levelPadding'>"
35917
+ "'alwaysOpened' | 'levelPadding' | 'customIcon'>"
35763
35918
  ],
35764
35919
  "properties": [
35765
35920
  {
@@ -35771,6 +35926,15 @@
35771
35926
  "example": null,
35772
35927
  "defaultValue": "false"
35773
35928
  },
35929
+ {
35930
+ "name": "customIcon",
35931
+ "decorators": [],
35932
+ "description": "",
35933
+ "required": false,
35934
+ "type": "string | ReactElement",
35935
+ "example": null,
35936
+ "defaultValue": null
35937
+ },
35774
35938
  {
35775
35939
  "name": "items",
35776
35940
  "decorators": [],
@@ -37639,10 +37803,20 @@
37639
37803
  "description": "",
37640
37804
  "tags": {},
37641
37805
  "defaultProps": {
37806
+ "alwaysAppendParentRoutePath": "true",
37642
37807
  "autoScrollTop": "true"
37643
37808
  },
37644
37809
  "extends": [],
37645
37810
  "properties": [
37811
+ {
37812
+ "name": "alwaysAppendParentRoutePath",
37813
+ "decorators": [],
37814
+ "description": "Флаг, который позволяет использовать вложенные роуты c указанием вложенного пути",
37815
+ "required": false,
37816
+ "type": "boolean",
37817
+ "example": "true",
37818
+ "defaultValue": "true"
37819
+ },
37646
37820
  {
37647
37821
  "name": "autoScrollTop",
37648
37822
  "decorators": [],
@@ -37751,6 +37925,14 @@
37751
37925
  "type": "string",
37752
37926
  "example": null
37753
37927
  },
37928
+ {
37929
+ "name": "customIcon",
37930
+ "decorators": [],
37931
+ "description": "Кастомная иконка, заменяющая иконку раскрытия по умолчанию",
37932
+ "required": false,
37933
+ "type": "string | ReactElement",
37934
+ "example": null
37935
+ },
37754
37936
  {
37755
37937
  "name": "hasIconExpandOnly",
37756
37938
  "decorators": [],
@@ -37823,6 +38005,22 @@
37823
38005
  "type": "string | number",
37824
38006
  "example": "2"
37825
38007
  },
38008
+ {
38009
+ "name": "showIcon",
38010
+ "decorators": [],
38011
+ "description": "Показать иконку c лева от элемента",
38012
+ "required": false,
38013
+ "type": "boolean",
38014
+ "example": "true"
38015
+ },
38016
+ {
38017
+ "name": "useSameSelectedItemId",
38018
+ "decorators": [],
38019
+ "description": "При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.",
38020
+ "required": false,
38021
+ "type": "boolean",
38022
+ "example": "true"
38023
+ },
37826
38024
  {
37827
38025
  "name": "view",
37828
38026
  "decorators": [],
@@ -37860,11 +38058,19 @@
37860
38058
  "example": null,
37861
38059
  "parameters": [
37862
38060
  {
37863
- "name": "args",
38061
+ "name": "event",
37864
38062
  "decorators": [],
37865
- "description": "\n",
38063
+ "description": "",
37866
38064
  "required": true,
37867
- "type": "any[]",
38065
+ "type": "MouseEvent",
38066
+ "example": null
38067
+ },
38068
+ {
38069
+ "name": "item",
38070
+ "decorators": [],
38071
+ "description": "",
38072
+ "required": true,
38073
+ "type": "ITreeItem",
37868
38074
  "example": null
37869
38075
  }
37870
38076
  ]
@@ -37883,7 +38089,9 @@
37883
38089
  "hasIconExpandOnly": "false",
37884
38090
  "itemsKey": "'items'",
37885
38091
  "level": "0",
37886
- "levelPadding": "32"
38092
+ "levelPadding": "32",
38093
+ "showIcon": "true",
38094
+ "useSameSelectedItemId": "true"
37887
38095
  },
37888
38096
  "extends": [
37889
38097
  "Omit<ITreeConfig",
@@ -37926,6 +38134,15 @@
37926
38134
  "example": null,
37927
38135
  "defaultValue": null
37928
38136
  },
38137
+ {
38138
+ "name": "customIcon",
38139
+ "decorators": [],
38140
+ "description": "Кастомная иконка, заменяющая иконку раскрытия по умолчанию",
38141
+ "required": false,
38142
+ "type": "string | ReactElement",
38143
+ "example": null,
38144
+ "defaultValue": null
38145
+ },
37929
38146
  {
37930
38147
  "name": "hasIconExpandOnly",
37931
38148
  "decorators": [],
@@ -37998,6 +38215,24 @@
37998
38215
  "example": "2",
37999
38216
  "defaultValue": null
38000
38217
  },
38218
+ {
38219
+ "name": "showIcon",
38220
+ "decorators": [],
38221
+ "description": "Показать иконку c лева от элемента",
38222
+ "required": false,
38223
+ "type": "boolean",
38224
+ "example": "true",
38225
+ "defaultValue": "true"
38226
+ },
38227
+ {
38228
+ "name": "useSameSelectedItemId",
38229
+ "decorators": [],
38230
+ "description": "При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.",
38231
+ "required": false,
38232
+ "type": "boolean",
38233
+ "example": "true",
38234
+ "defaultValue": "true"
38235
+ },
38001
38236
  {
38002
38237
  "name": "view",
38003
38238
  "decorators": [],
@@ -38036,11 +38271,19 @@
38036
38271
  "example": null,
38037
38272
  "parameters": [
38038
38273
  {
38039
- "name": "args",
38274
+ "name": "event",
38040
38275
  "decorators": [],
38041
- "description": "\n",
38276
+ "description": "",
38042
38277
  "required": true,
38043
- "type": "any[]",
38278
+ "type": "MouseEvent",
38279
+ "example": null
38280
+ },
38281
+ {
38282
+ "name": "item",
38283
+ "decorators": [],
38284
+ "description": "",
38285
+ "required": true,
38286
+ "type": "ITreeItem",
38044
38287
  "example": null
38045
38288
  }
38046
38289
  ]
@@ -38090,6 +38333,14 @@
38090
38333
  "type": "string",
38091
38334
  "example": null
38092
38335
  },
38336
+ {
38337
+ "name": "customIcon",
38338
+ "decorators": [],
38339
+ "description": "Кастомная иконка, заменяющая иконку раскрытия по умолчанию",
38340
+ "required": false,
38341
+ "type": "string | ReactElement",
38342
+ "example": null
38343
+ },
38093
38344
  {
38094
38345
  "name": "hasIconExpandOnly",
38095
38346
  "decorators": [],
@@ -38154,6 +38405,22 @@
38154
38405
  "type": "string | number",
38155
38406
  "example": "2"
38156
38407
  },
38408
+ {
38409
+ "name": "showIcon",
38410
+ "decorators": [],
38411
+ "description": "Показать иконку c лева от элемента",
38412
+ "required": false,
38413
+ "type": "boolean",
38414
+ "example": "true"
38415
+ },
38416
+ {
38417
+ "name": "useSameSelectedItemId",
38418
+ "decorators": [],
38419
+ "description": "При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.",
38420
+ "required": false,
38421
+ "type": "boolean",
38422
+ "example": "true"
38423
+ },
38157
38424
  {
38158
38425
  "name": "view",
38159
38426
  "decorators": [],
@@ -38191,11 +38458,19 @@
38191
38458
  "example": null,
38192
38459
  "parameters": [
38193
38460
  {
38194
- "name": "args",
38461
+ "name": "event",
38195
38462
  "decorators": [],
38196
- "description": "\n",
38463
+ "description": "",
38197
38464
  "required": true,
38198
- "type": "any[]",
38465
+ "type": "MouseEvent",
38466
+ "example": null
38467
+ },
38468
+ {
38469
+ "name": "item",
38470
+ "decorators": [],
38471
+ "description": "",
38472
+ "required": true,
38473
+ "type": "ITreeItem",
38199
38474
  "example": null
38200
38475
  }
38201
38476
  ]
package/en.json CHANGED
@@ -954,5 +954,13 @@
954
954
  "Заголовок для колонки таблицы": "",
955
955
  "Будет ли отображён item?": "",
956
956
  "Устанавливать ли фокус и показывать панель времени сразу после рендера страницы": "",
957
- "Флаг, определяющий раскрывать вложенные элементы по клику на весь элемент или только на иконку": ""
957
+ "Флаг, определяющий раскрывать вложенные элементы по клику на весь элемент или только на иконку": "",
958
+ "При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.": "",
959
+ "Дополнительные свойства, которые передаются во view компонента": "",
960
+ "Пропсы для инпута загрузки файлов": "",
961
+ "Переопределение view React компонента для кастомизации отображения элемента инпута": "",
962
+ "Кастомный placeholder для инпута": "",
963
+ "Кастомная иконка, заменяющая иконку раскрытия по умолчанию": "",
964
+ "Показать иконку c лева от элемента": "",
965
+ "Флаг, который позволяет использовать вложенные роуты c указанием вложенного пути": ""
958
966
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.0-beta.113",
3
+ "version": "3.0.0-beta.114",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { IFileFieldProps } from '../../form/FileField/FileField';
2
3
  import { IAvatarProps } from '../Avatar/Avatar';
3
4
  import { IGroupedMessagesByDates } from './hooks/useChat';
4
5
  export interface IChatUser {
@@ -7,11 +8,21 @@ export interface IChatUser {
7
8
  lastName?: string;
8
9
  avatar?: IAvatarProps;
9
10
  }
11
+ export interface IMessageFile {
12
+ uid?: string;
13
+ title?: string;
14
+ size?: number;
15
+ url?: string;
16
+ downloadUrl?: string;
17
+ fullHeight?: number;
18
+ fullWidth?: number;
19
+ }
10
20
  export interface IChatMessage {
11
21
  id: number;
12
22
  user: IChatUser;
13
23
  text: string;
14
24
  timestamp: Date | string;
25
+ files?: IMessageFile[];
15
26
  }
16
27
  /**
17
28
  * Chat
@@ -31,6 +42,15 @@ export interface IChatProps extends IUiComponent {
31
42
  * {
32
43
  * id: 1,
33
44
  * text: 'Всем привет!',
45
+ * files: [
46
+ * {
47
+ * id: 929,
48
+ * uid: 'c46f3d14-5891-4601-9e98-06f2c1e70a07',
49
+ * title: 'image.jpg',
50
+ * url: 'https://kozhin.dev/files/uploaded/c46f3d14-5891-4601-9e98-06f2c1e70a07.jpg',
51
+ * size: 47305,
52
+ * }
53
+ * ],
34
54
  * user: {
35
55
  * id: 1,
36
56
  * firstName: 'Olga',
@@ -63,9 +83,27 @@ export interface IChatProps extends IUiComponent {
63
83
  * Обработчик события отправки сообщения
64
84
  */
65
85
  onSendMessage?: (chatId: string, message: IChatMessage) => void;
86
+ /**
87
+ * Переопределение view React компонента для кастомизации отображения элемента инпута
88
+ * @example MyCustomView
89
+ */
90
+ customChatInputView?: React.ReactNode;
91
+ /**
92
+ * Кастомный placeholder для инпута
93
+ */
94
+ customInputPlaceholder?: string;
95
+ /**
96
+ * Пропсы для инпута загрузки файлов
97
+ */
98
+ fileFieldProps?: IFileFieldProps;
66
99
  }
67
- export interface IChatViewProps extends Omit<IChatProps, 'messages'> {
100
+ export interface IChatViewProps extends Pick<IChatProps, 'currentUser'> {
68
101
  groupedMessagesByDates: IGroupedMessagesByDates;
102
+ renderChatInput: () => JSX.Element;
103
+ }
104
+ export interface IChatInputViewProps extends Pick<IChatProps, 'chatId' | 'fileFieldProps'> {
69
105
  onSendMessage: (data: any) => void;
106
+ onUploadFiles: (files: any) => void;
107
+ inputPlaceholder: string;
70
108
  }
71
109
  export default function Chat(props: IChatProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
@@ -1,19 +1,32 @@
1
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);
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
12
24
  };
13
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
27
  };
16
28
  exports.__esModule = true;
29
+ var react_1 = __importStar(require("react"));
17
30
  var hooks_1 = require("../../../hooks");
18
31
  var useChat_1 = __importDefault(require("./hooks/useChat"));
19
32
  function Chat(props) {
@@ -23,7 +36,14 @@ function Chat(props) {
23
36
  messages: props.messages,
24
37
  currentUser: props.currentUser,
25
38
  onSendMessage: props.onSendMessage
26
- }), onSendMessage = _a.onSendMessage, groupedMessagesByDates = _a.groupedMessagesByDates;
27
- return components.ui.renderView(props.view || 'content.ChatView', __assign(__assign({}, props), { groupedMessagesByDates: groupedMessagesByDates, onSendMessage: onSendMessage }));
39
+ }), onSendMessage = _a.onSendMessage, onUploadFiles = _a.onUploadFiles, groupedMessagesByDates = _a.groupedMessagesByDates;
40
+ var ChatInputView = props.customChatInputView || components.ui.getView('content.ChatInputView');
41
+ var renderChatInput = (0, react_1.useCallback)(function () { return (react_1["default"].createElement(ChatInputView, { chatId: props.chatId, onSendMessage: onSendMessage, onUploadFiles: onUploadFiles, fileFieldProps: props.fileFieldProps, inputPlaceholder: props.customInputPlaceholder || __('Введите сообщение') })); }, [ChatInputView, onSendMessage, onUploadFiles, props.chatId, props.customInputPlaceholder, props.fileFieldProps]);
42
+ return components.ui.renderView(props.view || 'content.ChatView', {
43
+ currentUser: props.currentUser,
44
+ groupedMessagesByDates: groupedMessagesByDates,
45
+ onSendMessage: onSendMessage,
46
+ renderChatInput: renderChatInput
47
+ });
28
48
  }
29
49
  exports["default"] = Chat;
@@ -5,8 +5,8 @@ export interface IGroupedMessage extends IChatMessage {
5
5
  isLastMessage?: boolean;
6
6
  }
7
7
  export type IGroupedMessagesByDates = Record<string, IGroupedMessage[][]>;
8
- declare const useChat: (config: IChatConfig) => {
8
+ export default function useChat(config: IChatConfig): {
9
9
  groupedMessagesByDates: {};
10
10
  onSendMessage: (rawMessage: any) => void;
11
+ onUploadFiles: (files: any) => void;
11
12
  };
12
- export default useChat;
@@ -17,25 +17,42 @@ exports.__esModule = true;
17
17
  var react_1 = require("react");
18
18
  var dayjs_1 = __importDefault(require("dayjs"));
19
19
  var uniqueId_1 = __importDefault(require("lodash-es/uniqueId"));
20
+ var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
21
+ var File_1 = __importDefault(require("fileup-core/lib/models/File"));
20
22
  var hooks_1 = require("../../../../hooks");
21
23
  var form_1 = require("../../../../actions/form");
22
24
  var utils_1 = require("../utils");
23
25
  var timeTemplatesAndUnits_1 = require("../constants/timeTemplatesAndUnits");
24
- var useChat = function (config) {
26
+ function useChat(config) {
27
+ var dispatch = (0, hooks_1.useDispatch)();
25
28
  var _a = (0, react_1.useState)({}), groupedMessagesByDates = _a[0], setGroupedMessagesByDates = _a[1];
29
+ var _b = (0, react_1.useState)([]), uploadedFiles = _b[0], setUploadedFiles = _b[1];
26
30
  (0, react_1.useEffect)(function () { return setGroupedMessagesByDates((0, utils_1.getMessagesGroupedByDate)(config.messages)); }, [config.messages]);
27
- var dispatch = (0, hooks_1.useDispatch)();
31
+ var onUploadFiles = (0, react_1.useCallback)(function (files) {
32
+ if (!(0, isEqual_1["default"])(uploadedFiles, files)) {
33
+ setUploadedFiles(files);
34
+ }
35
+ }, [uploadedFiles]);
28
36
  var onSendMessage = (0, react_1.useCallback)(function (rawMessage) {
29
- var newMessage = __assign(__assign({}, rawMessage), { id: (0, uniqueId_1["default"])(), user: config.currentUser, timestamp: (0, dayjs_1["default"])().format(timeTemplatesAndUnits_1.ISO_TIMESTAMP_TEMPLATE) });
37
+ if (!rawMessage) {
38
+ return;
39
+ }
40
+ var newMessage = __assign(__assign({}, rawMessage), { id: (0, uniqueId_1["default"])(), user: config.currentUser, timestamp: (0, dayjs_1["default"])().format(timeTemplatesAndUnits_1.ISO_TIMESTAMP_TEMPLATE), files: (uploadedFiles === null || uploadedFiles === void 0 ? void 0 : uploadedFiles.reduce(function (acc, file) {
41
+ if (file.getResult() !== File_1["default"].RESULT_ERROR) {
42
+ acc.push(__assign({}, file._resultHttpMessage));
43
+ }
44
+ return acc;
45
+ }, [])) || null });
30
46
  if (config.onSendMessage) {
31
47
  config.onSendMessage(config.chatId, newMessage);
32
48
  }
33
49
  setGroupedMessagesByDates(function (prevGroupedMessagesByDates) { return (0, utils_1.addNewMessageIntoGroupedMessages)(newMessage, prevGroupedMessagesByDates); });
34
50
  dispatch((0, form_1.formReset)(config.chatId));
35
- }, [config, dispatch]);
51
+ }, [config, dispatch, uploadedFiles]);
36
52
  return {
37
53
  groupedMessagesByDates: groupedMessagesByDates,
38
- onSendMessage: onSendMessage
54
+ onSendMessage: onSendMessage,
55
+ onUploadFiles: onUploadFiles
39
56
  };
40
- };
57
+ }
41
58
  exports["default"] = useChat;
@@ -19,7 +19,7 @@ type CheckboxTreeItems = string | ({
19
19
  *
20
20
  * Список с вложенными чекбоксами. Используется в формах для создания иерархической структуры и выбора нескольких значений.
21
21
  */
22
- export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent, Pick<ITreeProps, 'levelPadding' | 'alwaysOpened' | 'hasIcon' | 'customIcon'> {
22
+ export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent, Pick<ITreeProps, 'levelPadding' | 'alwaysOpened' | 'showIcon' | 'customIcon'> {
23
23
  /**
24
24
  * Свойства для элемента input
25
25
  * @example { onKeyDown: ... }
@@ -38,8 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  };
39
39
  exports.__esModule = true;
40
40
  exports.getNestedItemsIds = void 0;
41
- var React = __importStar(require("react"));
42
- var react_1 = require("react");
41
+ var react_1 = __importStar(require("react"));
43
42
  var react_use_1 = require("react-use");
44
43
  var isArray_1 = __importDefault(require("lodash-es/isArray"));
45
44
  var hooks_1 = require("../../../hooks");
@@ -113,7 +112,7 @@ function CheckboxTreeField(props) {
113
112
  }
114
113
  }, [onReset, prevInputValue, props.input.value, selectedIds.length]);
115
114
  var CheckboxFieldView = components.ui.getView('form.CheckboxFieldView');
116
- var renderCheckbox = function (checkboxProps) { return (React.createElement(CheckboxFieldView, __assign({}, checkboxProps))); };
115
+ var renderCheckbox = function (checkboxProps) { return (react_1["default"].createElement(CheckboxFieldView, __assign({}, checkboxProps))); };
117
116
  return components.ui.renderView(props.view || 'form.CheckboxTreeFieldView', __assign(__assign({}, props), { items: treeItems, onItemSelect: onItemSelect, selectedIds: selectedIds, renderCheckbox: renderCheckbox }));
118
117
  }
119
118
  CheckboxTreeField.defaultProps = {
@@ -66,6 +66,11 @@ function FileFieldComponent(props) {
66
66
  props.onLoad();
67
67
  }
68
68
  }, [isFilesLoaded, props]);
69
+ (0, react_1.useEffect)(function () {
70
+ if (props.onChange) {
71
+ props.onChange(files);
72
+ }
73
+ }, [files, props]);
69
74
  return (React.createElement(FileFieldView, __assign({}, props, { buttonView: props.buttonView, buttonProps: __assign({ label: props.filesLayout === FilesLayout.wall
70
75
  ? __('Upload')
71
76
  : __('Click to Upload'), size: props.size, disabled: props.disabled, onClick: onBrowse }, props.buttonProps), itemView: FileFieldItemView, items: files.map(function (file) {
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { IPreparedTreeItem, ITreeConfig, ITreeItem } from '../../../hooks/useTree';
3
3
  export interface ITreeViewProps extends ITreeProps {
4
4
  items: IPreparedTreeItem[];