index.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import moment from "moment"
  2. import React from "react"
  3. import Blankslate from "./blankslate"
  4. import CategoriesList from "./categories-list"
  5. import misago from "misago/index"
  6. import polls from "misago/services/polls"
  7. const hydrate = function(category) {
  8. return Object.assign({}, category, {
  9. last_post_on: category.last_post_on ? moment(category.last_post_on) : null,
  10. subcategories: category.subcategories.map(hydrate)
  11. })
  12. }
  13. export default class extends React.Component {
  14. constructor(props) {
  15. super(props)
  16. this.state = {
  17. categories: misago.get("CATEGORIES").map(hydrate)
  18. }
  19. this.startPolling(misago.get("CATEGORIES_API"))
  20. }
  21. startPolling(api) {
  22. polls.start({
  23. poll: "categories",
  24. url: api,
  25. frequency: 180 * 1000,
  26. update: this.update
  27. })
  28. }
  29. update = data => {
  30. this.setState({
  31. categories: data.map(hydrate)
  32. })
  33. }
  34. render() {
  35. const { categories } = this.state
  36. if (categories.length === 0) {
  37. return <Blankslate />
  38. }
  39. return <CategoriesList categories={categories} />
  40. }
  41. }
  42. export function select(store) {
  43. return {
  44. tick: store.tick.tick
  45. }
  46. }