ThreadHeader.jsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import React from "react"
  2. import { FlexRow, FlexRowCol, FlexRowSection } from "../../FlexRow"
  3. import ThreadFlags from "../../ThreadFlags"
  4. import ThreadReplies from "../../ThreadReplies"
  5. import ThreadStarterCard from "../../ThreadStarterCard"
  6. import {
  7. PageHeader,
  8. PageHeaderBanner,
  9. PageHeaderContainer,
  10. PageHeaderDetails,
  11. } from "../../PageHeader"
  12. import ThreadModeration from "../ThreadModeration"
  13. import ThreadSubscriptionButton from "../ThreadSubscriptionButton"
  14. import ThreadHeaderBreadcrumbs from "./ThreadHeaderBreadcrumbs"
  15. const ThreadHeader = ({ styleName, thread, posts, user, moderation }) => (
  16. <PageHeaderContainer>
  17. <PageHeader styleName={styleName}>
  18. <PageHeaderBanner styleName={styleName}>
  19. <ThreadHeaderBreadcrumbs breadcrumbs={thread.path} />
  20. <h1>{thread.title}</h1>
  21. </PageHeaderBanner>
  22. <PageHeaderDetails className="page-header-thread-details">
  23. <FlexRow>
  24. <FlexRowSection auto>
  25. <FlexRowCol shrink>
  26. <ThreadStarterCard thread={thread} />
  27. </FlexRowCol>
  28. <FlexRowCol auto />
  29. {thread.replies > 0 && (
  30. <FlexRowCol shrink>
  31. <ThreadReplies thread={thread} />
  32. </FlexRowCol>
  33. )}
  34. {hasFlags(thread) && (
  35. <FlexRowCol shrink>
  36. <ThreadFlags thread={thread} />
  37. </FlexRowCol>
  38. )}
  39. </FlexRowSection>
  40. {user.is_authenticated && (
  41. <FlexRowSection>
  42. <FlexRowCol>
  43. <ThreadSubscriptionButton thread={thread} />
  44. </FlexRowCol>
  45. {moderation.enabled && (
  46. <FlexRowCol shrink>
  47. <ThreadModeration
  48. thread={thread}
  49. posts={posts}
  50. moderation={moderation}
  51. />
  52. </FlexRowCol>
  53. )}
  54. </FlexRowSection>
  55. )}
  56. </FlexRow>
  57. </PageHeaderDetails>
  58. </PageHeader>
  59. </PageHeaderContainer>
  60. )
  61. const hasFlags = (thread) => {
  62. return (
  63. thread.is_closed ||
  64. thread.is_hidden ||
  65. thread.is_unapproved ||
  66. thread.weight > 0 ||
  67. thread.best_answer ||
  68. thread.has_poll ||
  69. thread.has_unapproved_posts
  70. )
  71. }
  72. export default ThreadHeader