Newer
Older
vmk-ui-kit / src / vue / components / GnDropdownItem.js
/**
 * GnDropdownItem - Dropdown menu item.
 */

import { defineComponent, h, computed, inject } from "vue";
import { cx, iconNode } from "../utils.js";
import { dropdownKey } from "./GnDropdown.js";

export default defineComponent({
	name: "GnDropdownItem",
	props: {
		icon: { type: String, default: "" },
		active: { type: Boolean, default: false },
		disabled: { type: Boolean, default: false }
	},
	emits: ["click"],
	setup(props, { slots, emit }) {
		const dropdown = inject(dropdownKey, null);

		const classes = computed(() => cx("dropdown-item", {
			"is-active": props.active,
			"is-disabled": props.disabled
		}));

		return () => h("button", {
			type: "button",
			class: classes.value,
			disabled: props.disabled,
			onClick: () => {
				if (props.disabled) return;
				dropdown?.close?.();
				emit("click");
			}
		}, [
			props.icon && h("span", { class: "dropdown-item-icon" }, [iconNode(props.icon)]),
			h("span", { class: "dropdown-item-content" }, slots.default?.())
		]);
	}
});