{"version":3,"file":"scroller_item.vue.cjs","sources":["../../../../components/scroller/modules/scroller_item.vue"],"sourcesContent":["<script>\n/*\nThis is a code from external library (https://github.com/Akryum/vue-virtual-scroller/blob/master/packages/vue-virtual-scroller/src/components/DynamicScrollerItem.vue)\nWe have modified it for our own specific use.\n*/\nimport { h } from 'vue';\nimport { returnFirstEl } from '@/common/utils';\n\nexport default {\n  name: 'DtScrollerItem',\n\n  inject: [\n    'vscrollData',\n    'vscrollParent',\n    'vscrollResizeObserver',\n  ],\n\n  props: {\n    // eslint-disable-next-line vue/require-prop-types\n    item: {\n      required: true,\n    },\n\n    watchData: {\n      type: Boolean,\n      default: false,\n    },\n\n    /**\n     * Indicates if the view is actively used to display an item.\n     */\n    active: {\n      type: Boolean,\n      required: true,\n    },\n\n    index: {\n      type: Number,\n      default: undefined,\n    },\n\n    sizeDependencies: {\n      type: [Array, Object],\n      default: null,\n    },\n\n    tag: {\n      type: String,\n      default: 'div',\n    },\n  },\n\n  computed: {\n    id () {\n      if (this.vscrollData.simpleArray) return this.index;\n      // eslint-disable-next-line no-prototype-builtins\n      if (this.vscrollData.keyField in this.item) return this.item[this.vscrollData.keyField];\n      throw new Error(`keyField '${this.vscrollData.keyField}' not found in your item. You should set a valid keyField prop on your Scroller`);\n    },\n\n    size () {\n      return this.vscrollData.sizes[this.id] || 0;\n    },\n\n    finalActive () {\n      return this.active && this.vscrollData.active;\n    },\n  },\n\n  watch: {\n    watchData: 'updateWatchData',\n\n    id (value, oldValue) {\n      returnFirstEl(this.$el).$_vs_id = this.id;\n      if (!this.size) {\n        this.onDataUpdate();\n      }\n\n      if (this.$_sizeObserved) {\n        // In case the old item had the same size, it won't trigger the ResizeObserver\n        // since we are reusing the same DOM node\n        const oldSize = this.vscrollData.sizes[oldValue];\n        const size = this.vscrollData.sizes[value];\n        if (oldSize != null && oldSize !== size) {\n          this.applySize(oldSize);\n        }\n      }\n    },\n\n    finalActive (value) {\n      if (!this.size) {\n        if (value) {\n          if (!this.vscrollParent.$_undefinedMap[this.id]) {\n            this.vscrollParent.$_undefinedSizes++;\n            this.vscrollParent.$_undefinedMap[this.id] = true;\n          }\n        } else {\n          if (this.vscrollParent.$_undefinedMap[this.id]) {\n            this.vscrollParent.$_undefinedSizes--;\n            this.vscrollParent.$_undefinedMap[this.id] = false;\n          }\n        }\n      }\n\n      if (this.vscrollResizeObserver) {\n        if (value) {\n          this.observeSize();\n        } else {\n          this.unobserveSize();\n        }\n      } else if (value && this.$_pendingVScrollUpdate === this.id) {\n        this.updateSize();\n      }\n    },\n  },\n\n  created () {\n    if (this.$isServer) return;\n\n    this.$_forceNextVScrollUpdate = null;\n    this.updateWatchData();\n\n    if (!this.vscrollResizeObserver) {\n      for (const k in this.sizeDependencies) {\n        this.$watch(() => this.sizeDependencies[k], this.onDataUpdate);\n      }\n    }\n  },\n\n  mounted () {\n    if (this.finalActive) {\n      this.updateSize();\n      this.observeSize();\n    }\n  },\n\n  beforeUnmount () {\n    this.unobserveSize();\n  },\n\n  methods: {\n    updateSize () {\n      if (this.finalActive) {\n        if (this.$_pendingSizeUpdate !== this.id) {\n          this.$_pendingSizeUpdate = this.id;\n          this.$_forceNextVScrollUpdate = null;\n          this.$_pendingVScrollUpdate = null;\n          this.computeSize(this.id);\n        }\n      } else {\n        this.$_forceNextVScrollUpdate = this.id;\n      }\n    },\n\n    updateWatchData () {\n      if (this.watchData && !this.vscrollResizeObserver) {\n        this.$_watchData = this.$watch('item', () => {\n          this.onDataUpdate();\n        }, {\n          deep: true,\n        });\n      } else if (this.$_watchData) {\n        this.$_watchData();\n        this.$_watchData = null;\n      }\n    },\n\n    onVscrollUpdate ({ force }) {\n      // If not active, sechedule a size update when it becomes active\n      if (!this.finalActive && force) {\n        this.$_pendingVScrollUpdate = this.id;\n      }\n\n      if (this.$_forceNextVScrollUpdate === this.id || force || !this.size) {\n        this.updateSize();\n      }\n    },\n\n    onDataUpdate () {\n      this.updateSize();\n    },\n\n    computeSize (id) {\n      this.$nextTick(() => {\n        if (this.id === id) {\n          const width = returnFirstEl(this.$el).offsetWidth;\n          const height = returnFirstEl(this.$el).offsetHeight;\n          this.applyWidthHeight(width, height);\n        }\n        this.$_pendingSizeUpdate = null;\n      });\n    },\n\n    applyWidthHeight (width, height) {\n      const size = ~~(this.vscrollParent.direction === 'vertical' ? height : width);\n      if (size && this.size !== size) {\n        this.applySize(size);\n      }\n    },\n\n    applySize (size) {\n      if (this.vscrollParent.$_undefinedMap[this.id]) {\n        this.vscrollParent.$_undefinedSizes--;\n        this.vscrollParent.$_undefinedMap[this.id] = undefined;\n      }\n      this.vscrollData.sizes[this.id] = size;\n    },\n\n    observeSize () {\n      if (!this.vscrollResizeObserver) return;\n      if (this.$_sizeObserved) return;\n      this.vscrollResizeObserver.observe(returnFirstEl(this.$el));\n      this.$el.$_vs_id = this.id;\n      this.$el.$_vs_onResize = this.onResize;\n      this.$_sizeObserved = true;\n    },\n\n    unobserveSize () {\n      if (!this.vscrollResizeObserver) return;\n      if (!this.$_sizeObserved) return;\n      this.vscrollResizeObserver.unobserve(returnFirstEl(this.$el));\n      this.$el.$_vs_onResize = undefined;\n      this.$_sizeObserved = false;\n    },\n\n    onResize (id, width, height) {\n      if (this.id === id) {\n        this.applyWidthHeight(width, height);\n      }\n    },\n  },\n\n  render () {\n    return h(this.tag, this.$slots.default());\n  },\n};\n</script>\n"],"names":["returnFirstEl","h"],"mappings":"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"}