<div class="status-article-compose-box">
  <ComposeBox realm="{{originalStatusId}}"
              size="slim"
              autoFocus="true"
              hideBottomBorder="true"
              replyVisibility="{{visibility}}"
              on:postedStatus="onPostedStatus()"
  />
</div>
<style>
  .status-article-compose-box {
    grid-area: compose;
    background: var(--main-bg);
  }
</style>
<script>
  import ComposeBox from '../../_components/compose/ComposeBox.html'
  import { store } from '../../_store/store'
  import debounce from 'lodash/debounce'
  import throttle from 'lodash/throttle'

  const DEBOUNCE_DELAY = 400
  const THROTTLE_DELAY = 150

  export default {
    oncreate() {
      const recalc = () => {
        requestAnimationFrame(() => {
          this.fire('recalculateHeight')
        })
      }
      // debounce AND throttle due to 333ms content warning animation
      const debounced = debounce(recalc, DEBOUNCE_DELAY)
      const throttled = throttle(() => {
        debounced()
        recalc()
      }, THROTTLE_DELAY, {
        leading: true,
        trailing: true
      })
      this.observe('composeData', throttled)
    },
    components: {
      ComposeBox
    },
    store: () => store,
    computed: {
      composeData: ($currentComposeData, originalStatusId) => $currentComposeData[originalStatusId] || {}
    },
    methods: {
      onPostedStatus() {
        requestAnimationFrame(() => {
          let uuid = this.get('uuid')
          let $repliesShown = this.store.get('repliesShown')
          $repliesShown[uuid] = false
          this.store.set({'repliesShown': $repliesShown})
          this.fire('recalculateHeight')
        })
      }
    }
  }
</script>