ThreadsToolbar.jsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import React from "react"
  2. import posting from "../../services/posting"
  3. import Button from "../button"
  4. import { Toolbar, ToolbarItem, ToolbarSection, ToolbarSpacer } from "../Toolbar"
  5. import ThreadsCategoryPicker from "./ThreadsCategoryPicker"
  6. import ThreadsListPicker from "./ThreadsListPicker"
  7. import ThreadsToolbarModeration from "./ThreadsToolbarModeration"
  8. const ThreadsToolbar = ({
  9. api,
  10. baseUrl,
  11. category,
  12. categories,
  13. categoriesMap,
  14. topCategory,
  15. topCategories,
  16. subCategory,
  17. subCategories,
  18. list,
  19. lists,
  20. threads,
  21. addThreads,
  22. startThread,
  23. freezeThread,
  24. updateThread,
  25. deleteThread,
  26. selection,
  27. moderation,
  28. route,
  29. user,
  30. disabled,
  31. }) => (
  32. <Toolbar>
  33. {topCategories.length > 0 && (
  34. <ToolbarSection>
  35. <ToolbarItem>
  36. <ThreadsCategoryPicker
  37. allItems={gettext("All categories")}
  38. parentUrl={list.path}
  39. category={topCategory}
  40. categories={topCategories}
  41. list={list}
  42. />
  43. </ToolbarItem>
  44. {topCategory && subCategories.length > 0 && (
  45. <ToolbarItem>
  46. <ThreadsCategoryPicker
  47. allItems={gettext("All subcategories")}
  48. parentUrl={topCategory.url.index}
  49. category={subCategory}
  50. categories={subCategories}
  51. list={list}
  52. />
  53. </ToolbarItem>
  54. )}
  55. </ToolbarSection>
  56. )}
  57. {lists.length > 1 && (
  58. <ToolbarSection className="hidden-xs">
  59. <ToolbarItem>
  60. <ThreadsListPicker baseUrl={baseUrl} list={list} lists={lists} />
  61. </ToolbarItem>
  62. </ToolbarSection>
  63. )}
  64. <ToolbarSpacer />
  65. {!!user.id && (
  66. <ToolbarSection>
  67. <ToolbarItem>
  68. <Button
  69. className="btn-primary btn-outline btn-block"
  70. disabled={disabled}
  71. onClick={() => {
  72. posting.open(
  73. startThread || {
  74. mode: "START",
  75. config: misago.get("THREAD_EDITOR_API"),
  76. submit: misago.get("THREADS_API"),
  77. category: category.id,
  78. }
  79. )
  80. }}
  81. >
  82. <span className="material-icon">chat</span>
  83. {gettext("Start thread")}
  84. </Button>
  85. </ToolbarItem>
  86. {moderation.allow && (
  87. <ToolbarItem shrink>
  88. <ThreadsToolbarModeration
  89. api={api}
  90. categories={categories}
  91. categoriesMap={categoriesMap}
  92. threads={threads.filter(
  93. (thread) => selection.indexOf(thread.id) !== -1
  94. )}
  95. addThreads={addThreads}
  96. freezeThread={freezeThread}
  97. updateThread={updateThread}
  98. deleteThread={deleteThread}
  99. selection={selection}
  100. moderation={moderation}
  101. route={route}
  102. user={user}
  103. disabled={disabled}
  104. />
  105. </ToolbarItem>
  106. )}
  107. </ToolbarSection>
  108. )}
  109. </Toolbar>
  110. )
  111. export default ThreadsToolbar