directual-web-components-v2 3.11.336 → 3.11.338

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.js CHANGED
@@ -17094,33 +17094,79 @@ const iconHtml = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
17094
17094
  const iconMkd = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxMDkgMTA5IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxMDkgMTA5OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0JDM0Y4Qjt9Cgkuc3Qxe2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU+CjxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgo8ZyBpZD0iZnBzLXJpY2gtdGV4dCI+Cgk8ZyBpZD0iRkVCX3gyRl9jb21wb25lbnRfeDJGX2NhcmRzIj4KCQk8ZyBpZD0iR3JvdXAtMiI+CgkJCTxnIGlkPSJHcm91cCI+CgkJCQk8cGF0aCBpZD0iUmVjdGFuZ2xlXzFfIiBjbGFzcz0ic3QwIiBkPSJNMCwxOUMwLDguNSw4LjUsMCwxOSwwaDcxYzEwLjUsMCwxOSw4LjUsMTksMTl2NzFjMCwxMC41LTguNSwxOS0xOSwxOUgxOQoJCQkJCWMtMTAuNSwwLTE5LTguNS0xOS0xOSIvPgoJCQk8L2c+CgkJPC9nPgoJPC9nPgo8L2c+CjxnPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTE3LjYsNTYuOWgxMy43djIuOUgxNy42VjU2Ljl6IE0xOC4yLDUwLjZIMzJ2Mi45SDE4LjJWNTAuNnogTTIxLjcsNDUuNWgyLjZsLTIuNCwyMC4xaC0yLjdMMjEuNyw0NS41egoJCSBNMjcuNiw0NS41aDIuNmwtMi40LDIwLjFIMjVMMjcuNiw0NS41eiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTM1LjgsNDUuNGg0LjhsMiw3LjFsMC43LDIuOGgwLjJsMC43LTIuOGwyLTcuMWg0Ljh2MjAuMkg0N3YtNi4zYzAtMi4zLDAuNC03LjIsMC42LTkuM2gtMC4xTDQ2LDU1LjQKCQlsLTEuNiw0LjloLTIuMmwtMS42LTQuOUwzOS4zLDUwaC0wLjFjMC4yLDIuMiwwLjYsNy4xLDAuNiw5LjN2Ni4zSDM2VjQ1LjRIMzUuOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01NSw0My45aDQuNnYxMi41aDAuMmw1LjctNi4yaDQuOUw1OS41LDYxLjd2My44SDU1VjQzLjl6IE02MS4zLDU4LjZsMi42LTIuOGw2LjgsOS44aC00LjlMNjEuMyw1OC42eiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTcyLjcsNTcuOWMwLTUsMy4yLTguMSw2LjYtOC4xYzEuNiwwLDIuOCwwLjYsMy44LDEuNmgwLjFsLTAuMi0yLjR2LTUuM2g0LjZ2MjEuN2gtMy43bC0wLjMtMS42aC0wLjEKCQljLTEuMSwxLjEtMi43LDItNC4yLDJDNzUuMiw2Niw3Mi43LDYyLjksNzIuNyw1Ny45eiBNODMsNjAuOHYtNi4yYy0wLjktMC44LTEuNi0xLTIuNi0xYy0xLjYsMC0zLjEsMS4zLTMuMSw0LjJjMCwzLDEuMSw0LjQsMyw0LjQKCQlDODEuNCw2Mi4yLDgyLjIsNjEuOCw4Myw2MC44eiIvPgo8L2c+Cjwvc3ZnPgo=";
17095
17095
  function FpsHtml(props) {
17096
17096
  const {
17097
- socket
17097
+ socket,
17098
+ id,
17099
+ callEndpoint
17098
17100
  } = props;
17099
17101
  const [data, setData] = React.useState(props.data);
17100
17102
  const [renderKey, setRenderKey] = React.useState(0);
17103
+ const [hidden, setHidden] = React.useState(false);
17104
+ const wrapperRef = React.useRef(null);
17105
+ const dataRef = React.useRef(data);
17106
+ const htmlRef = React.useRef((props.data || {}).html || '');
17101
17107
  React.useEffect(() => {
17102
17108
  if (JSON.stringify(props.data) !== JSON.stringify(data)) {
17103
17109
  setData(props.data);
17104
17110
  }
17105
17111
  }, [props]);
17112
+ React.useEffect(() => {
17113
+ dataRef.current = data;
17114
+ htmlRef.current = (data || {}).html || '';
17115
+ }, [data]);
17106
17116
  React.useEffect(() => {
17107
17117
  setRenderKey(prev => prev + 1);
17108
17118
  }, [socket]);
17119
+ React.useEffect(() => {
17120
+ const componentId = _$1__default.get(data, 'params.comp_ID') || id;
17121
+ if (!componentId) return;
17122
+ if (!window.FpsHtml_API) {
17123
+ window.FpsHtml_API = {};
17124
+ }
17125
+ window.FpsHtml_API[componentId] = {
17126
+ getHtml: () => htmlRef.current,
17127
+ setHtml: newHtml => {
17128
+ setData(prev => _extends({}, prev || {}, {
17129
+ html: newHtml
17130
+ }));
17131
+ },
17132
+ rerender: () => setRenderKey(prev => prev + 1),
17133
+ show: () => setHidden(false),
17134
+ hide: () => setHidden(true),
17135
+ getData: () => dataRef.current,
17136
+ getElement: () => wrapperRef.current,
17137
+ callEndpoint: (endpoint, method, body, params, finish) => {
17138
+ if (callEndpoint) {
17139
+ callEndpoint(endpoint, method, body, params, finish);
17140
+ }
17141
+ }
17142
+ };
17143
+ return () => {
17144
+ if (window.FpsHtml_API && window.FpsHtml_API[componentId]) {
17145
+ delete window.FpsHtml_API[componentId];
17146
+ }
17147
+ };
17148
+ }, [data, id, callEndpoint]);
17109
17149
  const html = (data || {}).html || '';
17110
- if (data && data.isHidden == 'true') {
17150
+ if (hidden || data && data.isHidden == 'true') {
17111
17151
  return /*#__PURE__*/React__default.createElement("div", null);
17112
17152
  }
17113
- return /*#__PURE__*/React__default.createElement(ComponentWrapper, null, /*#__PURE__*/React__default.createElement(Article, null, html && /*#__PURE__*/React__default.createElement(InnerHTML, {
17153
+ return /*#__PURE__*/React__default.createElement("div", {
17154
+ ref: wrapperRef
17155
+ }, /*#__PURE__*/React__default.createElement(ComponentWrapper, null, /*#__PURE__*/React__default.createElement(Article, null, html && /*#__PURE__*/React__default.createElement(InnerHTML, {
17114
17156
  key: renderKey,
17115
17157
  allowRerender: true,
17116
17158
  html: html
17117
- })));
17159
+ }))));
17118
17160
  }
17119
17161
  FpsHtml.settings = {
17120
17162
  icon: iconHtml,
17121
17163
  name: "HTML code",
17122
17164
  sysName: 'FpsHtml',
17123
17165
  form: [{
17166
+ name: 'Comp ID',
17167
+ sysName: 'comp_ID',
17168
+ type: 'string'
17169
+ }, {
17124
17170
  name: "Enter your HTML-code",
17125
17171
  sysName: "html",
17126
17172
  type: "html-SLenriched"
@@ -17162,6 +17208,10 @@ FpsMarkdown.settings = {
17162
17208
  name: "Markdown text",
17163
17209
  sysName: 'FpsMarkdown',
17164
17210
  form: [{
17211
+ name: 'Comp ID',
17212
+ sysName: 'comp_ID',
17213
+ type: 'string'
17214
+ }, {
17165
17215
  name: "Enter your text",
17166
17216
  sysName: "markdown",
17167
17217
  type: "markdown-SLenriched"
@@ -20070,13 +20120,19 @@ function FpsForm2(props) {
20070
20120
  setExtendedModel(newExtendedModel);
20071
20121
  let saveSate = _extends({}, stateRef.current);
20072
20122
  const newModel = _extends({}, flatternModel(_extends({}, gatherDefaults(), _$1__default.get(data, "data[0]"), convertedDates, convertedBools)));
20073
- if (!_$1__default.isEqual(newModel, model)) {
20123
+ if (!_$1__default.isEqual(newModel, originalModelRef.current)) {
20074
20124
  submitDebouncedRef.current.cancel();
20075
- console.log('[SOCKET MODEL LOG] === МОДЕЛЬ ОБНОВЛЕНА СОКЕТОМ ===');
20076
- console.log('[SOCKET MODEL LOG] Старая модель:', JSON.parse(JSON.stringify(model)));
20077
- console.log('[SOCKET MODEL LOG] Новая модель:', JSON.parse(JSON.stringify(newModel)));
20125
+ const userChangedFields = Object.keys(model).filter(key => !_$1__default.isEqual(model[key], originalModelRef.current[key]));
20126
+ const mergedModel = _extends({}, newModel);
20127
+ userChangedFields.forEach(key => {
20128
+ mergedModel[key] = model[key];
20129
+ });
20130
+ console.log('[SOCKET MODEL LOG] === СОКЕТ: ОБНОВЛЕНИЕ МОДЕЛИ ===');
20131
+ console.log('[SOCKET MODEL LOG] Серверная модель:', JSON.parse(JSON.stringify(newModel)));
20132
+ console.log('[SOCKET MODEL LOG] Изменённые пользователем поля (сохранены):', userChangedFields);
20133
+ console.log('[SOCKET MODEL LOG] Итоговая модель:', JSON.parse(JSON.stringify(mergedModel)));
20078
20134
  isSocketUpdateRef.current = true;
20079
- setModel(newModel);
20135
+ setModel(mergedModel);
20080
20136
  setOriginalModel(newModel);
20081
20137
  }
20082
20138
  setOriginalExtendedModel(newExtendedModel);
@@ -26697,6 +26753,8 @@ function Comments(props) {
26697
26753
  handleRoute
26698
26754
  } = props;
26699
26755
  const lang = locale ? locale.length == 3 ? locale : 'ENG' : 'ENG';
26756
+ const buttonTexts = _$1__default.get(data, "params.buttonTexts") || {};
26757
+ const t = (key, fallback) => buttonTexts[key] || fallback;
26700
26758
  const [comments, setComments] = React.useState(_$1__default.get(data, "data") || []);
26701
26759
  const [loading, setLoading] = React.useState(false);
26702
26760
  const [error, setError] = React.useState('');
@@ -26749,9 +26807,10 @@ function Comments(props) {
26749
26807
  return /*#__PURE__*/React__default.createElement("div", {
26750
26808
  className: styles$N.comments + " FPS_COMMENTS"
26751
26809
  }, /*#__PURE__*/React__default.createElement(CommentsHeader, _extends({
26752
- header: dict[lang].comments.comments,
26810
+ header: t('headerText', dict[lang].comments.comments),
26753
26811
  counter: (comments || []).length
26754
26812
  }, props)), allowSend && /*#__PURE__*/React__default.createElement(AddComment, _extends({}, props, {
26813
+ t: t,
26755
26814
  lang: lang,
26756
26815
  loading: loading,
26757
26816
  sendComment: sendComment,
@@ -26763,6 +26822,7 @@ function Comments(props) {
26763
26822
  }, error), /*#__PURE__*/React__default.createElement("div", {
26764
26823
  className: styles$N.commentsList
26765
26824
  }, comments.filter(comment => !_$1__default.get(comment, _$1__default.get(data, "params._replyField")) || _$1__default.get(comment, _$1__default.get(data, "params._replyField")) == 'root').map(comment => /*#__PURE__*/React__default.createElement(Comment, _extends({}, props, {
26825
+ t: t,
26766
26826
  sendComment: sendComment,
26767
26827
  updateCommentText: updateCommentText,
26768
26828
  lang: lang,
@@ -26786,7 +26846,8 @@ function Comment(props) {
26786
26846
  allowSend,
26787
26847
  allowEdit,
26788
26848
  sendComment,
26789
- updateCommentText
26849
+ updateCommentText,
26850
+ t
26790
26851
  } = props;
26791
26852
  const [addReply, setAddReply] = React.useState(false);
26792
26853
  const [isEditing, setIsEditing] = React.useState(false);
@@ -26866,13 +26927,13 @@ function Comment(props) {
26866
26927
  className: styles$N.commentWrapperAssignTo + " " + (isResoled ? styles$N.taskResolved : "") + " FPS_COMMENT_WRAPPER__ASSIGN"
26867
26928
  }, isAssignedToMe ? /*#__PURE__*/React__default.createElement("span", null, dict[lang].comments.assignedToMe) : /*#__PURE__*/React__default.createElement("span", null, dict[lang].comments.assignedTo, " ", /*#__PURE__*/React__default.createElement("b", null, assigneName)), isResoled ? /*#__PURE__*/React__default.createElement("span", {
26868
26929
  className: "icon icon-done"
26869
- }, dict[lang].comments.taskResolved, " ", formatDate(resolvedDate, formatResolvedDate)) : isAssignedToMe ? /*#__PURE__*/React__default.createElement(Button, {
26930
+ }, t('taskResolvedText', dict[lang].comments.taskResolved), " ", formatDate(resolvedDate, formatResolvedDate)) : isAssignedToMe ? /*#__PURE__*/React__default.createElement(Button, {
26870
26931
  loading: localLoading,
26871
26932
  onClick: resolveTask,
26872
26933
  small: true,
26873
26934
  height: 32,
26874
26935
  icon: "done"
26875
- }, dict[lang].comments.resolveTask) : ''), /*#__PURE__*/React__default.createElement("div", {
26936
+ }, t('resolveTaskText', dict[lang].comments.resolveTask)) : ''), /*#__PURE__*/React__default.createElement("div", {
26876
26937
  className: styles$N.commentBody
26877
26938
  }, parent && /*#__PURE__*/React__default.createElement("div", {
26878
26939
  className: styles$N.commentParent + " icon icon-arrowRight small"
@@ -26910,11 +26971,11 @@ function Comment(props) {
26910
26971
  height: 32,
26911
26972
  accent: true,
26912
26973
  disabled: !editText
26913
- }, dict[lang].comments.save), /*#__PURE__*/React__default.createElement(Button, {
26974
+ }, t('saveText', dict[lang].comments.save)), /*#__PURE__*/React__default.createElement(Button, {
26914
26975
  onClick: cancelEdit,
26915
26976
  small: true,
26916
26977
  height: 32
26917
- }, dict[lang].comments.cancel))) : /*#__PURE__*/React__default.createElement("div", {
26978
+ }, t('cancelText', dict[lang].comments.cancel)))) : /*#__PURE__*/React__default.createElement("div", {
26918
26979
  className: styles$N.commentBodyText
26919
26980
  }, commentText), commentAttachment && commentAttachment.length > 0 && commentAttachment.map(file => {
26920
26981
  const fileName = file.split("/")[file.split("/").length - 1];
@@ -26930,10 +26991,10 @@ function Comment(props) {
26930
26991
  }, _$1__default.includes(data.writeFields, _$1__default.get(data, "params._replyField")) && allowSend && /*#__PURE__*/React__default.createElement("div", {
26931
26992
  onClick: e => setAddReply(true),
26932
26993
  className: "icon icon-bubble small " + styles$N.commentReplyButton
26933
- }, dict[lang].comments.reply), allowEdit && isAuthor && /*#__PURE__*/React__default.createElement("div", {
26994
+ }, t('replyText', dict[lang].comments.reply)), allowEdit && isAuthor && /*#__PURE__*/React__default.createElement("div", {
26934
26995
  onClick: e => setIsEditing(true),
26935
26996
  className: "icon icon-edit small " + styles$N.commentReplyButton
26936
- }, dict[lang].comments.edit)))), addReply && /*#__PURE__*/React__default.createElement("div", {
26997
+ }, t('editText', dict[lang].comments.edit))))), addReply && /*#__PURE__*/React__default.createElement("div", {
26937
26998
  className: styles$N.childComments
26938
26999
  }, /*#__PURE__*/React__default.createElement(AddComment, _extends({}, props, {
26939
27000
  parentID: commentID,
@@ -26971,7 +27032,8 @@ function AddComment(props) {
26971
27032
  sendComment,
26972
27033
  parentID,
26973
27034
  data,
26974
- loading
27035
+ loading,
27036
+ t
26975
27037
  } = props;
26976
27038
  const rolesExample = [{
26977
27039
  key: 'admin',
@@ -27013,7 +27075,7 @@ function AddComment(props) {
27013
27075
  bottom: 0
27014
27076
  },
27015
27077
  ok: true
27016
- }, dict[lang].comments.submitted);
27078
+ }, t('submittedText', dict[lang].comments.submitted));
27017
27079
  return /*#__PURE__*/React__default.createElement("div", {
27018
27080
  className: styles$N.commentsAdd
27019
27081
  }, /*#__PURE__*/React__default.createElement(Input, {
@@ -27022,7 +27084,7 @@ function AddComment(props) {
27022
27084
  defaultValue: comment[_$1__default.get(data, "params._textField")],
27023
27085
  onChange: setCommentField(_$1__default.get(data, "params._textField")),
27024
27086
  rows: "auto",
27025
- placeholder: dict[lang].comments.write
27087
+ placeholder: t('placeholderText', dict[lang].comments.write)
27026
27088
  }), /*#__PURE__*/React__default.createElement("div", {
27027
27089
  className: styles$N.commentsAdditionslControls
27028
27090
  }, addFile && allowAttachment && /*#__PURE__*/React__default.createElement(FileUpload, {
@@ -27104,9 +27166,9 @@ function AddComment(props) {
27104
27166
  accent: true,
27105
27167
  icon: "bubble",
27106
27168
  onClick: () => sendComment(comment, finish)
27107
- }, dict[lang].comments.send), onCancel && /*#__PURE__*/React__default.createElement(Button, {
27169
+ }, t('sendText', dict[lang].comments.send)), onCancel && /*#__PURE__*/React__default.createElement(Button, {
27108
27170
  onClick: onCancel
27109
- }, dict[lang].comments.cancel)));
27171
+ }, t('cancelText', dict[lang].comments.cancel))));
27110
27172
  }
27111
27173
  Comments.propTypes = {
27112
27174
  data: propTypes.object,