35 lines
		
	
	
		
			739 B
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			739 B
		
	
	
	
		
			JavaScript
		
	
	
	
import {computed, ref, inject} from 'vue';
 | 
						|
 | 
						|
export default function (init) {
 | 
						|
    const axios = inject('axios');
 | 
						|
 | 
						|
    const children = ref(init);
 | 
						|
 | 
						|
    function isOpen(child) {
 | 
						|
        return child in children.value;
 | 
						|
    }
 | 
						|
 | 
						|
    async function toggle(parent) {
 | 
						|
        if (isOpen(parent.id)) {
 | 
						|
            delete children.value[parent.id];
 | 
						|
        } else {
 | 
						|
            children.value[parent.id] = (await axios.get(parent.links.children)).data.data;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    function childrenOf(parentId) {
 | 
						|
        return children.value[parentId] ? children.value[parentId] : [];
 | 
						|
    }
 | 
						|
 | 
						|
    function clearToggle() {
 | 
						|
        children.value = {};
 | 
						|
    }
 | 
						|
 | 
						|
    return {
 | 
						|
        isOpen,
 | 
						|
        toggle,
 | 
						|
        childrenOf,
 | 
						|
        clearToggle,
 | 
						|
    };
 | 
						|
}
 |