private void CreateDefaultItem(DefaultItemData defaultItemData)
    {
        Item   itemAsset = ScriptableObject.CreateInstance <Item>();
        string itemSlug  = ConvertToSlug(defaultItemData.itemName);

        // TODO: If the item already exists in the item database, just cancel the whole process.

        //if(itemDatabase.CheckDatabaseContain(itemSlug))
        //{
        //    // Show pop up dialog Choices[Create new item, Close editor window]
        //    DestroyImmediate(itemAsset);
        //    Debug.Log("Item already exists in database");
        //    return;
        //}

        // Configure new scriptable object
        itemAsset.itemName        = defaultItemData.itemName;
        itemAsset.itemSlug        = itemSlug;
        itemAsset.itemDescription = defaultItemData.itemDescription;
        itemAsset.itemValue       = defaultItemData.itemValue;
        itemAsset.itemType        = defaultItemData.itemType;
        itemAsset.rarityType      = defaultItemData.rarityType;
        itemAsset.itemIcon        = defaultItemData.itemIcon;

        // Save new asset.
        string formattedName = defaultItemData.itemName;

        if (defaultItemData.itemName.Contains(" "))
        {
            formattedName = defaultItemData.itemName.Replace(' ', '_');
        }

        string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath($"{assetStoragePath}/Item{formattedName}.asset");

        AssetDatabase.CreateAsset(itemAsset, assetPathAndName);
        AddNewItemToDatabase <Item>(itemAsset);
        AssetDatabase.Refresh();
        Selection.activeObject = itemAsset;
    }
    private void ShowDefaultItemEditor()
    {
        rootVisualElement.Clear();

        var visualTree = Resources.Load <VisualTreeAsset>(defaultItemTreePath);

        visualTree.CloneTree(rootVisualElement);

        // Setup default item editor screen
        Button       createItemButton = rootVisualElement.Q(name: "base-item-data-create-button") as Button;
        TextField    itemNameField    = rootVisualElement.Q(name: "item-data-name") as TextField;
        IntegerField itemValueField   = rootVisualElement.Q(name: "item-data-value") as IntegerField;
        TextField    itemDescField    = rootVisualElement.Q(name: "item-data-desc") as TextField;

        EnumField itemTypeField = rootVisualElement.Q(name: "item-data-type") as EnumField;

        itemTypeField.Init(workingItemType);
        Debug.Log(itemTypeField.childCount);

        EnumField itemRarityField = rootVisualElement.Q(name: "item-data-rarity") as EnumField;

        itemRarityField.Init(RarityType.Common);

        ObjectField itemIconField = rootVisualElement.Q(name: "item-data-icon") as ObjectField;

        itemIconField.objectType = typeof(Sprite); // Set the object fields type.

        if (createItemButton != null)
        {
            createItemButton.clickable.clicked += () =>
            {
                DefaultItemData itemData = new DefaultItemData(itemNameField.value, itemDescField.value, itemValueField.value, workingItemType, (RarityType)itemRarityField.value, (Sprite)itemIconField.value);
                CreateDefaultItem(itemData);
            };
        }
    }