root.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import React from "react"
  2. import { connect } from "react-redux"
  3. import { SideNav, CompactNav } from "misago/components/options/navs"
  4. import DeleteAccount from "misago/components/options/delete-account"
  5. import EditDetails from "misago/components/options/edit-details"
  6. import DownloadData from "misago/components/options/download-data"
  7. import ChangeForumOptions from "misago/components/options/forum-options"
  8. import ChangeUsername from "misago/components/options/change-username/root"
  9. import ChangeSignInCredentials from "misago/components/options/sign-in-credentials/root"
  10. import WithDropdown from "misago/components/with-dropdown"
  11. import misago from "misago/index"
  12. import { FlexRow, FlexRowCol, FlexRowSection } from "../FlexRow"
  13. import PageContainer from "../PageContainer"
  14. import {
  15. PageHeader,
  16. PageHeaderBanner,
  17. PageHeaderContainer,
  18. } from "../PageHeader"
  19. export default class extends WithDropdown {
  20. render() {
  21. const page = misago.get("USER_OPTIONS").filter((page) => {
  22. const url = misago.get("USERCP_URL") + page.component + "/"
  23. return this.props.location.pathname.substr(0, url.length) === url
  24. })[0]
  25. return (
  26. <div className="page page-options">
  27. <PageHeaderContainer>
  28. <PageHeader styleName="options">
  29. <PageHeaderBanner styleName="options">
  30. <FlexRow>
  31. <FlexRowSection auto>
  32. <FlexRowCol auto>
  33. <h1>{gettext("Change your options")}</h1>
  34. </FlexRowCol>
  35. <FlexRowCol className="hidden-xs hidden-md hidden-lg" shrink>
  36. <div className="dropdown">
  37. <button
  38. type="button"
  39. className="btn btn-default btn-outline btn-icon dropdown-toggle"
  40. title={gettext("Menu")}
  41. data-toggle="dropdown"
  42. aria-haspopup="true"
  43. aria-expanded="false"
  44. >
  45. <span className="material-icon">menu</span>
  46. </button>
  47. <CompactNav
  48. className="dropdown-menu dropdown-menu-right"
  49. baseUrl={misago.get("USERCP_URL")}
  50. options={misago.get("USER_OPTIONS")}
  51. />
  52. </div>
  53. </FlexRowCol>
  54. </FlexRowSection>
  55. <FlexRowSection className="hidden-sm hidden-md hidden-lg">
  56. <FlexRowCol>
  57. <div className="dropdown">
  58. <button
  59. type="button"
  60. className="btn btn-default btn-outline btn-block dropdown-toggle"
  61. data-toggle="dropdown"
  62. aria-haspopup="true"
  63. aria-expanded="false"
  64. >
  65. <span className="material-icon">{page.icon}</span>
  66. {page.name}
  67. </button>
  68. <CompactNav
  69. className="dropdown-menu"
  70. baseUrl={misago.get("USERCP_URL")}
  71. options={misago.get("USER_OPTIONS")}
  72. />
  73. </div>
  74. </FlexRowCol>
  75. </FlexRowSection>
  76. </FlexRow>
  77. </PageHeaderBanner>
  78. </PageHeader>
  79. </PageHeaderContainer>
  80. <PageContainer>
  81. <div className="row">
  82. <div className="col-md-3 hidden-xs hidden-sm">
  83. <SideNav
  84. baseUrl={misago.get("USERCP_URL")}
  85. options={misago.get("USER_OPTIONS")}
  86. />
  87. </div>
  88. <div className="col-md-9">{this.props.children}</div>
  89. </div>
  90. </PageContainer>
  91. </div>
  92. )
  93. }
  94. }
  95. export function select(store) {
  96. return {
  97. tick: store.tick.tick,
  98. user: store.auth.user,
  99. "username-history": store["username-history"],
  100. }
  101. }
  102. export function paths() {
  103. const paths = [
  104. {
  105. path: misago.get("USERCP_URL") + "forum-options/",
  106. component: connect(select)(ChangeForumOptions),
  107. },
  108. {
  109. path: misago.get("USERCP_URL") + "edit-details/",
  110. component: connect(select)(EditDetails),
  111. },
  112. ]
  113. const delegateAuth = misago.get("SETTINGS").DELEGATE_AUTH
  114. if (!delegateAuth) {
  115. paths.push({
  116. path: misago.get("USERCP_URL") + "change-username/",
  117. component: connect(select)(ChangeUsername),
  118. })
  119. paths.push({
  120. path: misago.get("USERCP_URL") + "sign-in-credentials/",
  121. component: connect(select)(ChangeSignInCredentials),
  122. })
  123. }
  124. if (misago.get("ENABLE_DOWNLOAD_OWN_DATA")) {
  125. paths.push({
  126. path: misago.get("USERCP_URL") + "download-data/",
  127. component: connect(select)(DownloadData),
  128. })
  129. }
  130. if (!delegateAuth && misago.get("ENABLE_DELETE_OWN_ACCOUNT")) {
  131. paths.push({
  132. path: misago.get("USERCP_URL") + "delete-account/",
  133. component: connect(select)(DeleteAccount),
  134. })
  135. }
  136. return paths
  137. }