directual-web-components-v2 3.11.322 → 3.11.324

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.
package/dist/index.css CHANGED
@@ -8410,6 +8410,7 @@ div._x81-m._xmAnF h2 {
8410
8410
  ._3g99w ._2QfjE ._rwMv- ._1RsJD {
8411
8411
  font-size: var(--text-small-size);
8412
8412
  opacity: 0.5;
8413
+ margin-right: 10px;
8413
8414
  transition: 0.5s;
8414
8415
  cursor: pointer;
8415
8416
  }
package/dist/index.js CHANGED
@@ -1829,7 +1829,9 @@ const dict = {
1829
1829
  assignedToMe: "Assigned to me",
1830
1830
  assignedTo: "Assigned to",
1831
1831
  taskResolved: "Task is resolved",
1832
- resolveTask: "Resolve task"
1832
+ resolveTask: "Resolve task",
1833
+ edit: "Edit",
1834
+ save: "Save"
1833
1835
  },
1834
1836
  sortField: 'Sort field',
1835
1837
  error: 'Error',
@@ -2322,7 +2324,9 @@ const dict = {
2322
2324
  assignedToMe: "Назначено на меня",
2323
2325
  assignedTo: "Назначено на",
2324
2326
  taskResolved: "Задача закрыта",
2325
- resolveTask: "Закрыть задачу"
2327
+ resolveTask: "Закрыть задачу",
2328
+ edit: "Редактировать",
2329
+ save: "Сохранить"
2326
2330
  },
2327
2331
  success: 'Успех',
2328
2332
  "auth": {
@@ -19939,31 +19943,23 @@ function FpsForm2(props) {
19939
19943
  const newModel = _extends({}, flatternModel(_extends({}, gatherDefaults(), _$1__default.get(data, "data[0]"), convertedDates, convertedBools)));
19940
19944
  if (!_$1__default.isEqual(newModel, model)) {
19941
19945
  submitDebouncedRef.current.cancel();
19946
+ console.log('[SOCKET MODEL LOG] === МОДЕЛЬ ОБНОВЛЕНА СОКЕТОМ ===');
19947
+ console.log('[SOCKET MODEL LOG] Старая модель:', JSON.parse(JSON.stringify(model)));
19948
+ console.log('[SOCKET MODEL LOG] Новая модель:', JSON.parse(JSON.stringify(newModel)));
19942
19949
  isSocketUpdateRef.current = true;
19943
19950
  setModel(newModel);
19944
19951
  setOriginalModel(newModel);
19945
19952
  }
19946
19953
  setOriginalExtendedModel(newExtendedModel);
19947
- console.log('[SOCKET/RESTORE LOG] === НАЧАЛО СОКЕТНОГО ОБНОВЛЕНИЯ ===');
19948
- console.log('[SOCKET/RESTORE LOG] текущий state ДО перезаписи:', JSON.parse(JSON.stringify(state)));
19949
- console.log('[SOCKET/RESTORE LOG] saveSate перед templateState:', JSON.parse(JSON.stringify(saveSate)));
19950
19954
  const templatedState = templateState(_$1__default.get(data, "params.state"), newModel);
19951
- console.log('[SOCKET/RESTORE LOG] params.state:', _$1__default.get(data, "params.state"));
19952
- console.log('[SOCKET/RESTORE LOG] templateState вернул:', JSON.parse(JSON.stringify(templatedState)));
19953
19955
  saveSate = _extends({}, saveSate, templatedState);
19954
- console.log('[SOCKET/RESTORE LOG] saveSate после templateState:', JSON.parse(JSON.stringify(saveSate)));
19955
19956
  if (_$1__default.get(params, "general.restoreState") && _$1__default.get(params, "general.saveStateTo")) {
19956
19957
  const fieldName = _$1__default.get(params, "general.saveStateTo");
19957
19958
  const fieldValue = newModel[fieldName];
19958
- console.log('[SOCKET/RESTORE LOG] Восстанавливаем state из поля:', fieldName);
19959
- console.log('[SOCKET/RESTORE LOG] Значение поля:', fieldValue);
19960
19959
  const restoredState = parseJson(fieldValue);
19961
- console.log('[SOCKET/RESTORE LOG] restoredState (распарсенный):', JSON.parse(JSON.stringify(restoredState)));
19962
19960
  saveSate = _extends({}, saveSate, restoredState);
19963
19961
  restoredStepRef.current = restoredState.step;
19964
19962
  }
19965
- console.log('[SOCKET/RESTORE LOG] ИТОГОВЫЙ setState с:', JSON.parse(JSON.stringify(saveSate)));
19966
- console.log('[SOCKET/RESTORE LOG] === КОНЕЦ СОКЕТНОГО ОБНОВЛЕНИЯ ===');
19967
19963
  setState(saveSate);
19968
19964
  setInitialized(true);
19969
19965
  }
@@ -20213,14 +20209,10 @@ function FpsForm2(props) {
20213
20209
  submitMapping = [];
20214
20210
  }
20215
20211
  if (autoSubmit && isAutoSubmittingRef.current) {
20216
- console.log('[AUTOSUBMIT LOG] Заблокирован параллельный автосабмит');
20217
20212
  finish && finish(false);
20218
20213
  return;
20219
20214
  }
20220
20215
  if (autoSubmit) {
20221
- console.log('[AUTOSUBMIT LOG] === НАЧАЛО АВТОСАБМИТА ===');
20222
- console.log('[AUTOSUBMIT LOG] state ДО сабмита:', JSON.parse(JSON.stringify(stateRef.current)));
20223
- console.log('[AUTOSUBMIT LOG] model:', JSON.parse(JSON.stringify(currentModel || modelRef.current)));
20224
20216
  isAutoSubmittingRef.current = true;
20225
20217
  }
20226
20218
  newExtendedModel = newExtendedModel || extendedModelRef.current;
@@ -26340,6 +26332,7 @@ function Comments(props) {
26340
26332
  }
26341
26333
  const allowAttachment = _$1__default.includes(data.writeFields, _$1__default.get(data, "params._fileField"));
26342
26334
  const allowSend = _$1__default.includes(data.writeFields, _$1__default.get(data, "params._textField"));
26335
+ const allowEdit = _$1__default.get(data, "params.general.allowEdit");
26343
26336
  return /*#__PURE__*/React__default.createElement("div", {
26344
26337
  className: styles$N.comments + " FPS_COMMENTS"
26345
26338
  }, /*#__PURE__*/React__default.createElement(CommentsHeader, _extends({
@@ -26360,6 +26353,7 @@ function Comments(props) {
26360
26353
  sendComment: sendComment,
26361
26354
  lang: lang,
26362
26355
  allowSend: allowSend,
26356
+ allowEdit: allowEdit,
26363
26357
  loading: loading,
26364
26358
  allowAttachment: allowAttachment,
26365
26359
  comments: comments,
@@ -26376,9 +26370,16 @@ function Comment(props) {
26376
26370
  comments,
26377
26371
  parent,
26378
26372
  allowSend,
26373
+ allowEdit,
26379
26374
  sendComment
26380
26375
  } = props;
26381
26376
  const [addReply, setAddReply] = React.useState(false);
26377
+ const [isEditing, setIsEditing] = React.useState(false);
26378
+ const [editText, setEditText] = React.useState("");
26379
+ React.useEffect(() => {
26380
+ const commentText = _$1__default.get(comment, _$1__default.get(data, "params._textField"));
26381
+ setEditText(commentText || "");
26382
+ }, [_$1__default.get(comment, _$1__default.get(data, "params._textField"))]);
26382
26383
  const formatDate = (value, formatOptions) => {
26383
26384
  if (!value) {
26384
26385
  return null;
@@ -26412,6 +26413,7 @@ function Comment(props) {
26412
26413
  }
26413
26414
  const isTask = !!_$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_assignee"));
26414
26415
  const isAssignedToMe = (_$1__default.get(auth, "user") == _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_assignee")) || _$1__default.get(auth, "user") == _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_assignee") + ".id")) && _$1__default.get(auth, "isAuth");
26416
+ const isAuthor = (_$1__default.get(auth, "user") == _$1__default.get(comment, _$1__default.get(data, "params._userField")) || _$1__default.get(auth, "user") == _$1__default.get(comment, _$1__default.get(data, "params._userField") + ".id")) && _$1__default.get(auth, "isAuth");
26415
26417
  const assigneName = isTask ? _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_assignee") + ".firstName") ? _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_assignee") + ".firstName") + ' ' + _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_assignee") + ".lastName") : _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_assignee") + ".id") || _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_assignee")) : '';
26416
26418
  const isResoled = isTask && _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_bool"));
26417
26419
  const resolvedDate = _$1__default.get(comment, _$1__default.get(data, "params.assignmentOn_dateClosed"));
@@ -26428,6 +26430,22 @@ function Comment(props) {
26428
26430
  _$1__default.get(data, "params.assignmentOn_dateClosed") && _$1__default.set(payload, _$1__default.get(data, "params.assignmentOn_dateClosed"), moment__default().toISOString());
26429
26431
  sendComment(payload, () => setLocalLoading(false), true);
26430
26432
  };
26433
+ const saveEdit = () => {
26434
+ if (!comment.id) return;
26435
+ setLocalLoading(true);
26436
+ let payload = {
26437
+ id: comment.id
26438
+ };
26439
+ _$1__default.set(payload, _$1__default.get(data, "params._textField"), editText);
26440
+ sendComment(payload, () => {
26441
+ setLocalLoading(false);
26442
+ setIsEditing(false);
26443
+ }, true);
26444
+ };
26445
+ const cancelEdit = () => {
26446
+ setEditText(commentText);
26447
+ setIsEditing(false);
26448
+ };
26431
26449
  return /*#__PURE__*/React__default.createElement("div", null, /*#__PURE__*/React__default.createElement("div", {
26432
26450
  className: styles$N.commentWrapper + " FPS_COMMENT_WRAPPER"
26433
26451
  }, isTask && /*#__PURE__*/React__default.createElement("div", {
@@ -26459,7 +26477,31 @@ function Comment(props) {
26459
26477
  }
26460
26478
  }, dict[lang].comments.anon), /*#__PURE__*/React__default.createElement("div", {
26461
26479
  className: styles$N.commentBodyHeaderDate
26462
- }, formatDate(commentDate, formatCommentDate))), /*#__PURE__*/React__default.createElement("div", {
26480
+ }, formatDate(commentDate, formatCommentDate))), isEditing ? /*#__PURE__*/React__default.createElement("div", {
26481
+ className: styles$N.commentBodyText
26482
+ }, /*#__PURE__*/React__default.createElement(Input, {
26483
+ type: "textarea",
26484
+ defaultValue: editText,
26485
+ onChange: setEditText,
26486
+ rows: "auto"
26487
+ }), /*#__PURE__*/React__default.createElement("div", {
26488
+ style: {
26489
+ marginTop: '8px',
26490
+ display: 'flex',
26491
+ gap: '8px'
26492
+ }
26493
+ }, /*#__PURE__*/React__default.createElement(Button, {
26494
+ loading: localLoading,
26495
+ onClick: saveEdit,
26496
+ small: true,
26497
+ height: 32,
26498
+ accent: true,
26499
+ disabled: !editText
26500
+ }, dict[lang].comments.save), /*#__PURE__*/React__default.createElement(Button, {
26501
+ onClick: cancelEdit,
26502
+ small: true,
26503
+ height: 32
26504
+ }, dict[lang].comments.cancel))) : /*#__PURE__*/React__default.createElement("div", {
26463
26505
  className: styles$N.commentBodyText
26464
26506
  }, commentText), commentAttachment && commentAttachment.length > 0 && commentAttachment.map(file => {
26465
26507
  const fileName = file.split("/")[file.split("/").length - 1];
@@ -26470,12 +26512,15 @@ function Comment(props) {
26470
26512
  href: file,
26471
26513
  className: "icon icon-clip small " + styles$N.commentFileLink
26472
26514
  }, fileName));
26473
- }), _$1__default.includes(data.writeFields, _$1__default.get(data, "params._replyField")) && allowSend && /*#__PURE__*/React__default.createElement("div", {
26515
+ }), !isEditing && (_$1__default.includes(data.writeFields, _$1__default.get(data, "params._replyField")) && allowSend || allowEdit && isAuthor) && /*#__PURE__*/React__default.createElement("div", {
26474
26516
  className: styles$N.commentBodyFooter
26475
- }, /*#__PURE__*/React__default.createElement("div", {
26517
+ }, _$1__default.includes(data.writeFields, _$1__default.get(data, "params._replyField")) && allowSend && /*#__PURE__*/React__default.createElement("div", {
26476
26518
  onClick: e => setAddReply(true),
26477
26519
  className: "icon icon-bubble small " + styles$N.commentReplyButton
26478
- }, dict[lang].comments.reply)))), addReply && /*#__PURE__*/React__default.createElement("div", {
26520
+ }, dict[lang].comments.reply), allowEdit && isAuthor && /*#__PURE__*/React__default.createElement("div", {
26521
+ onClick: e => setIsEditing(true),
26522
+ className: "icon icon-edit small " + styles$N.commentReplyButton
26523
+ }, dict[lang].comments.edit)))), addReply && /*#__PURE__*/React__default.createElement("div", {
26479
26524
  className: styles$N.childComments
26480
26525
  }, /*#__PURE__*/React__default.createElement(AddComment, _extends({}, props, {
26481
26526
  parentID: commentID,