48 lines
		
	
	
		
			870 B
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			870 B
		
	
	
	
		
			Vue
		
	
	
	
<script>
 | 
						|
export default {
 | 
						|
  name: 'FileTree',
 | 
						|
  props: {
 | 
						|
    fileRowComponent: {
 | 
						|
      type: Object,
 | 
						|
      required: true,
 | 
						|
    },
 | 
						|
    level: {
 | 
						|
      type: Number,
 | 
						|
      required: true,
 | 
						|
    },
 | 
						|
    file: {
 | 
						|
      type: Object,
 | 
						|
      required: true,
 | 
						|
    },
 | 
						|
  },
 | 
						|
  computed: {
 | 
						|
    childFilesLevel() {
 | 
						|
      return this.file.isHeader ? 0 : this.level + 1;
 | 
						|
    },
 | 
						|
  },
 | 
						|
};
 | 
						|
</script>
 | 
						|
 | 
						|
<template>
 | 
						|
  <div>
 | 
						|
    <component
 | 
						|
      :is="fileRowComponent"
 | 
						|
      :level="level"
 | 
						|
      :file="file"
 | 
						|
      v-bind="$attrs"
 | 
						|
      v-on="$listeners"
 | 
						|
    />
 | 
						|
    <template v-if="file.opened || file.isHeader">
 | 
						|
      <file-tree
 | 
						|
        v-for="childFile in file.tree"
 | 
						|
        :key="childFile.key"
 | 
						|
        :file-row-component="fileRowComponent"
 | 
						|
        :level="childFilesLevel"
 | 
						|
        :file="childFile"
 | 
						|
        v-bind="$attrs"
 | 
						|
        v-on="$listeners"
 | 
						|
      />
 | 
						|
    </template>
 | 
						|
  </div>
 | 
						|
</template>
 |