All files / app/assets/javascripts/diffs/components virtual_scroller_scroll_sync.js

0% Statements 0/19
0% Branches 0/8
0% Functions 0/6
0% Lines 0/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59                                                                                                                     
import { handleLocationHash } from '~/lib/utils/common_utils';
 
export default {
  inject: ['vscrollParent'],
  model: {
    prop: 'index',
  },
  props: {
    index: {
      type: Number,
      required: true,
    },
  },
  watch: {
    index: {
      handler() {
        const { index } = this;
 
        if (index < 0) return;
 
        this.scrollToIndex(index);
 
        if (!this.vscrollParent.itemsWithSize[index].size) {
          this.$_itemsWithSizeWatcher = this.$watch('vscrollParent.itemsWithSize', async () => {
            await this.$nextTick();
 
            if (this.vscrollParent.itemsWithSize[index].size) {
              this.$_itemsWithSizeWatcher();
 
              await this.$nextTick();
 
              this.scrollToIndex(index);
            }
          });
        }
      },
      immediate: true,
    },
  },
  beforeDestroy() {
    if (this.$_itemsWithSizeWatcher) this.$_itemsWithSizeWatcher();
  },
  methods: {
    async scrollToIndex(index) {
      this.vscrollParent.scrollToItem(index);
      this.$emit('update', -1);
 
      await this.$nextTick();
 
      setTimeout(() => {
        handleLocationHash();
      });
    },
  },
  render(h) {
    return h(null);
  },
};