defaultPage.php.widget-msgs.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. var DBG = DBG || 0;
  2. var DBG1 = true;
  3. if (!NAMESPACE) throw "Missing NAMESPACE";
  4. if (!USER_LOGIN) throw "Missing USER_LOGIN";
  5. if (!HTML_NODE_ID) throw "Missing HTML_NODE_ID";
  6. if (!VIEW_ALL_LINK) throw "Missing VIEW_ALL_LINK";
  7. if (!global.p5VendorJs) throw "Missing vendor.js";
  8. if (!global.p5WFS_GetFeature) throw "Missing p5WFS_GetFeature";
  9. var REQUEST_LIMIT = (REQUEST_LIMIT) ? REQUEST_LIMIT : 10;
  10. var createReactClass = global.p5VendorJs.createReactClass;
  11. var h = global.p5VendorJs.React.createElement;
  12. var ReactDOM = global.p5VendorJs.ReactDOM;
  13. var p5WFS_GetFeature = global.p5WFS_GetFeature;
  14. var P5UI__WidgetMsgs = createReactClass({
  15. getInitialState: function () {
  16. return {
  17. response: [],
  18. isLoading: false,
  19. }
  20. },
  21. componentDidMount: function() {
  22. DBG && console.log('DBG:P5UI__WidgetMsgs:componentDidMount');
  23. this.setState({ isLoading: true })
  24. p5WFS_GetFeature(this.props.namespace, {
  25. sortBy: 'L_APPOITMENT_DATE+A',
  26. maxFeatures: REQUEST_LIMIT,
  27. }).then(this.handleWfsResponse.bind(this))
  28. .catch(this.handleWfsError.bind(this))
  29. },
  30. handleWfsResponse: function (response) {
  31. DBG && console.log('DBG:P5UI__WidgetMsgs:handleWfsResponse', { response });
  32. this.setState({
  33. isLoading: false,
  34. response: response,
  35. })
  36. },
  37. handleWfsError: function (error) {
  38. DBG && console.log('DBG:P5UI__WidgetMsgs:handleWfsError', { error });
  39. this.setState({
  40. isLoading: false,
  41. errorMsg: '' + error,
  42. })
  43. },
  44. renderLoading: function () {
  45. return h('p', {}, "loading...");
  46. },
  47. renderEmpty: function () {
  48. if (this.state.errorMsg) return this.renderErrorMsg();
  49. return h('p', {}, "Brak danych");
  50. },
  51. renderErrorMsg: function () {
  52. return h('div', { className: "alert alert-danger" }, this.state.errorMsg);
  53. },
  54. renderRow: function (row) {
  55. // A_STATUS: "NORMAL"
  56. // ID: "985"
  57. // actionExecutedTime: "2019-03-13 15:16:23"
  58. // app_className: "TableMsgs"
  59. // idReplyTo: "0"
  60. // idThread: "0"
  61. // msg: "..."
  62. // msgType: "info"
  63. // uiTargetName: "IN7_DZIENNIK_KORESP.64417"
  64. // uiTargetType: "default_db_table_record"
  65. // userTargetType: "everyone"
  66. // A_RECORD_CREATE_AUTHOR: "..."
  67. // A_RECORD_CREATE_DATE: "2019-03-13 14:58:22"
  68. // A_RECORD_UPDATE_DATE: "2019-03-13 15:16:23"
  69. // A_RECORD_UPDATE_AUTHOR: "..."
  70. row._read = ('WAITING' != row.A_STATUS);
  71. row._readByUser = ('WAITING' != row.A_STATUS);
  72. if ('WAITING' == row.A_STATUS && USER_LOGIN == row.A_RECORD_CREATE_AUTHOR) {
  73. if ('user' == row.userTargetType && USER_LOGIN == row.userTargetName) {
  74. row._readByUser = false;
  75. } else {
  76. row._readByUser = true;
  77. }
  78. }
  79. if (row._read) {
  80. if (row.A_RECORD_UPDATE_DATE) row._readDate = row.A_RECORD_UPDATE_DATE;
  81. if (row.A_RECORD_UPDATE_AUTHOR) row._readBy = row.A_RECORD_UPDATE_AUTHOR;
  82. }
  83. return h('div', {
  84. className: "message", // message-read
  85. 'data-messageid': row.ID,
  86. style: {
  87. borderTop: "1px solid #ddd",
  88. padding: "6px 12px",
  89. backgroundColor: (row._readByUser) ? "#eee" : "#fff",
  90. cursor: "pointer",
  91. },
  92. onClick: function () {
  93. window.location.href = 'index.php?_route=UserMsgs&id=' + row.ID + '&usrLogin=' + USER_LOGIN + '&_task=read'
  94. }
  95. }, [
  96. row.msg,
  97. h('div', { className: "text-muted", style: { fontStyle: "italic", fontSize: "x-small" } }, [
  98. row.A_RECORD_CREATE_DATE.substr(0, 10) + " od " + row.A_RECORD_CREATE_AUTHOR + " do " + this.renderMsgTo(row),
  99. ]),
  100. ]);
  101. },
  102. renderMsgTo: function (row) {
  103. switch (row.userTargetType) {
  104. case 'everyone': return "wszystkich";
  105. case 'user': return row.userTargetName;
  106. case 'group': return "grupy " + row.userTargetName;
  107. }
  108. },
  109. render: function () {
  110. DBG && console.log('DBG:P5UI__WidgetMsgs:render', { props: this.props, state: this.state });
  111. if (this.state.isLoading) return this.renderLoading();
  112. if (!this.state.response.length) return this.renderEmpty();
  113. return h('div', {}, [
  114. h('div', { style: { border: "1px solid #ddd" } }, this.state.response.map(this.renderRow)),
  115. h('div', { style: { border: "1px solid #ddd", padding: "12px", textAlign: "center" } }, [
  116. h('a', {
  117. href: VIEW_ALL_LINK,
  118. }, "przeglądaj wszystkie")
  119. ]),
  120. ]);
  121. }
  122. });
  123. ReactDOM.render(
  124. h(P5UI__WidgetMsgs, {
  125. namespace: NAMESPACE,
  126. login: USER_LOGIN,
  127. }),
  128. document.getElementById(HTML_NODE_ID)
  129. );