export default {
    inject: ['openmct'],
    props: {
        'objectPath': {
            type: Array,
            default() {
                return [];
            }
        }
    },
    data() {
        return {
            contextClickActive: false
        };
    },
    mounted() {
        //TODO: touch support
        this.$el.addEventListener('contextmenu', this.showContextMenu);

        function updateObject(oldObject, newObject) {
            Object.assign(oldObject, newObject);
        }

        this.objectPath.forEach(object => {
            if (object) {
                this.$once('hook:destroyed',
                    this.openmct.objects.observe(object, '*', updateObject.bind(this, object)));
            }
        });
    },
    destroyed() {
        this.$el.removeEventListener('contextMenu', this.showContextMenu);
    },
    methods: {
        showContextMenu(event) {
            event.preventDefault();
            event.stopPropagation();

            let actionsCollection = this.openmct.actions.getActionsCollection(this.objectPath);
            let actions = actionsCollection.getVisibleActions();
            let sortedActions = this.openmct.actions._groupAndSortActions(actions);

            const menuOptions = {
                onDestroy: this.onContextMenuDestroyed
            };

            const menuItems = this.openmct.menus.actionsToMenuItems(sortedActions, actionsCollection.objectPath, actionsCollection.view);
            this.openmct.menus.showMenu(event.clientX, event.clientY, menuItems, menuOptions);
            this.contextClickActive = true;
            this.$emit('context-click-active', true);
        },
        onContextMenuDestroyed() {
            this.contextClickActive = false;
            this.$emit('context-click-active', false);
        }
    }
};
