ShareLinkSetting.jsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { withUnstatedContainers } from '../../UnstatedUtils';
  5. import PaginationWrapper from '../../PaginationWrapper';
  6. import AppContainer from '../../../services/AppContainer';
  7. import AdminGeneralSecurityContainer from '../../../services/AdminGeneralSecurityContainer';
  8. import { toastError } from '../../../util/apiNotification';
  9. class ShareLinkSetting extends React.Component {
  10. constructor(props) {
  11. super();
  12. this.state = {
  13. };
  14. this.handlePage = this.handlePage.bind(this);
  15. }
  16. componentWillMount() {
  17. this.handlePage(1);
  18. }
  19. async handlePage(page) {
  20. try {
  21. await this.props.adminGeneralSecurityContainer.retrieveShareLinksByPagingNum(page);
  22. }
  23. catch (err) {
  24. toastError(err);
  25. }
  26. }
  27. render() {
  28. const { adminGeneralSecurityContainer } = this.props;
  29. const pager = (
  30. <div className="pull-right my-3">
  31. <PaginationWrapper
  32. activePage={adminGeneralSecurityContainer.state.activePage}
  33. changePage={this.handlePage}
  34. totalItemsCount={adminGeneralSecurityContainer.state.totalshareLinks}
  35. pagingLimit={adminGeneralSecurityContainer.state.pagingLimit}
  36. />
  37. </div>
  38. );
  39. const deleteAllButton = (
  40. adminGeneralSecurityContainer.state.shareLinks.length > 0
  41. ? (
  42. <button
  43. className="pull-right btn btn-danger"
  44. type="button"
  45. >
  46. Delete all links
  47. </button>
  48. )
  49. : (
  50. <p className="pull-right mr-2">No share links</p>
  51. )
  52. );
  53. return (
  54. <Fragment>
  55. <div className="mb-3">
  56. {deleteAllButton}
  57. <h2 className="alert-anchor border-bottom">Shared Link List</h2>
  58. </div>
  59. {pager}
  60. <div className="table-responsive">
  61. <table className="table table-bordered">
  62. <thead>
  63. <tr>
  64. <th>Link</th>
  65. <th>PagePath</th>
  66. <th>Expiration</th>
  67. <th>Description</th>
  68. <th>Order</th>
  69. </tr>
  70. </thead>
  71. <tbody>
  72. {adminGeneralSecurityContainer.state.shareLinks.map((sharelink) => {
  73. return (
  74. <tr key={sharelink._id}>
  75. <td>{sharelink._id}</td>
  76. <td><a href={sharelink.relatedPage.path}>{sharelink.relatedPage.path}</a></td>
  77. <td>{sharelink.expiredAt}</td>
  78. <td>{sharelink.description}</td>
  79. <td>
  80. <button className="btn btn-outline-warning" type="button">
  81. <i className="icon-trash mr-2"></i>Delete
  82. </button>
  83. </td>
  84. </tr>
  85. );
  86. })}
  87. </tbody>
  88. </table>
  89. </div>
  90. </Fragment>
  91. );
  92. }
  93. }
  94. const ShareLinkSettingWrapper = withUnstatedContainers(ShareLinkSetting, [AppContainer, AdminGeneralSecurityContainer]);
  95. ShareLinkSetting.propTypes = {
  96. t: PropTypes.func.isRequired, // i18next
  97. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  98. adminGeneralSecurityContainer: PropTypes.instanceOf(AdminGeneralSecurityContainer).isRequired,
  99. };
  100. export default withTranslation()(ShareLinkSettingWrapper);