This is my main.js code
const serverUrl = "https://m6dzfhl2ot7y.usemoralis.com:2053/server";
const appId = "VsOmsC3GSBUsbLDUK2ocfo8l66kYdXfVaZUWwMiF";
Moralis.start({ serverUrl, appId });
const TOKEN_CONTRACT_ADDRESS = "0x51e7b6E77B9fa3F3B525161c5eDfCF1C8Df32818";
// Moralis Connection
async function hide_buttons() {
let user = await Moralis.User.current();
if (!user) {
document.getElementById("btnConnect").style.display = "block";
document.getElementById("btnUserInfo").style.display = "none";
document.getElementById("btnLogout").style.display = "none";
document.getElementById("userInfo").style.display = "none";
document.getElementById("btnOpenCreateItem").style.display = "none";
document.getElementById("createItem").style.display = "none";
} else {
document.getElementById("btnUserInfo").style.display = "block";
document.getElementById("btnConnect").style.display = "none";
document.getElementById("btnLogout").style.display = "block";
document.getElementById("btnOpenCreateItem").style.display = "block";
document.getElementById("createItem").style.display = "none";
}
}
hide_buttons();
//LOGIN BUTTON
async function login() {
web3 = await Moralis.enableWeb3();
window.tokenContract = new web3.eth.Contract(tokenContractAbi, TOKEN_CONTRACT_ADDRESS);
let user = Moralis.User.current();
if (!user) {
try {
user = await Moralis.authenticate({
signingMessage: "Welcome to GrandPaDoge NFT MarketPlace",
});
} catch (error) {
alert(
(error = /*jshint -W022 */
"Please consider installing Metamask to connect to MrGrandPaDoge NFT MarketPlace")
);
}
}
console.log("logged in user:", user);
hide_buttons();
const isWeb3Active = Moralis.ensureWeb3IsInstalled();
if (isWeb3Active) {
//const chainId = 43114;
//const chainName = "Avalanche Mainnet";
//const currencyName = "AVAX";
//const currencySymbol = "AVAX";
//const rpcUrl = "https://api.avax.network/ext/bc/C/rpc";
//const blockExplorerUrl = "https://cchain.explorer.avax.network/";
//await Moralis.addNetwork(
//chainId,
//chainName,
//currencyName,
//currencySymbol,
//rpcUrl,
//blockExplorerUrl
//);
console.log("Activated");
} else {
{
enable();
await Moralis.enable();
}
}
}
// LOGOUT BUTTON
async function logOut() {
await Moralis.User.logOut();
console.log("logged out");
hide_buttons();
}
// OPEN USER INFO FIELD
async function openuserInfo() {
const user = Moralis.User.current();
hide_buttons();
console.log("User Profile Opened ");
if (user) {
const email = user.get("email");
if (email) {
userEmailField.value = email;
} else {
userEmailField.value = "";
}
userUsernameField.value = user.get("username");
const userAvatar = user.get("avatar");
if (userAvatar) {
console.log(userAvatar);
imgAvatar.src = userAvatar.url();
document.getElementById("imgAvatar").style.display = "block"; //display avatar
} else {
document.getElementById("imgAvatar").style.display = "none"; //hide avatar when user is connected
}
document.getElementById("userInfo").style.display = "block"; //Hide userinfo
} else {
login(); //if not,then login
}
}
// SAVE USER INFO FIELD
async function saveUserInfo() {
let user = await Moralis.User.current();
user.set("email", userEmailField.value);
user.set("username", userUsernameField.value);
if (fileAvatar.files.length > 0) {
//get user avatar
const avatar = new Moralis.File("avatar.jpg", fileAvatar.files[0]);
console.log(fileAvatar.files);
x = await avatar.save();
console.log(x);
user.set("avatar", x);
}
alert("User info saved successfully!");
console.log("User Info Saved");
openuserInfo();
}
async function closeuserInfo() {
user = await Moralis.User.current();
hide_buttons();
if (user) {
document.getElementById("userInfo").style.display = "none";
console.log("User Info closed");
} else {
logOut();
}
}
async function createItem() {
if (createItemFile.files.Length == 0) {
alert("Please select a file!");
return;
} else if (createItemNameField.value.length == 0) {
alert("Please give the item a name!");
return;
}
const nftFile = new Moralis.File("nftFile.jpg", createItemFile.files[0]);
await nftFile.saveIPFS();
const nftFilePath = nftFile.ipfs();
const nftFileHash = nftFile.hash();
const metadata = {
name: createItemNameField.value,
description: createItemDescriptionField.value,
image: nftFilePath,
};
const nftFileMetadataFile = new Moralis.File("metadata.json", {
base64: btoa(JSON.stringify(metadata))
});
await nftFileMetadataFile.saveIPFS();
const nftFileMetadataFilePath = nftFileMetadataFile.ipfs();
const nftFileMetadataFileHash = nftFileMetadataFile.hash();
const nftId = await mintNft(nftFileMetadataFilePath);
const Item = Moralis.Object.extend("Item");
// Create a new istance of that class
const item = new Item();
item.set('name', createItemNameField.value);
item.set('description', createItemDescriptionField.value);
item.set('nftFilePath', nftFilePath);
item.set('nftFileHash', nftFileHash);
item.set('MetadataFilePath', nftFileMetadataFilePath);
item.set('MetadataFileHash', nftFileMetadataFileHash);
item.set('nftId', nftId);
item.set('nftContractAddress', TOKEN_CONTRACT_ADDRESS);
await item.save();
console.log(item);
}
mintNft = async(metadataUrl) => {
const receipt = await tokenContract.methods.createItem(metadataUrl).send({ from: ethereum.selectedAddress });
console.log(receipt);
return receipt.events.Transfer.returnValue.tokenId;
};
// NavBar OnClick Buttons
document.getElementById("btnConnect").onclick = login;
document.getElementById("btnLogout").onclick = logOut;
// USER PROFILE
document.getElementById("btnUserInfo").onclick = openuserInfo;
document.getElementById("btnCloseUserInfo").onclick = closeuserInfo;
document.getElementById("btnSaveUserInfo").onclick = saveUserInfo;
document.getElementById("btnCreateItem").onclick = createItem;
const userUsernameField = document.getElementById("txtUsername");
const userEmailField = document.getElementById("txtEmail");
const userAvatarImg = document.getElementById("imgAvatar");
const userAvatarFile = document.getElementById("fileAvatar");
// Refereces & Item Creation
const openCreateItemButton = document.getElementById("btnOpenCreateItem");
const btnCloseCreateItem = document.getElementById("btnCloseCreateItem");
const btnCreateItem = document.getElementById("btnCreateItem");
openCreateItemButton.onclick = async function openCreateItemButton() {
if (!user) {
document.getElementById("createItem").style.display = "block";
console.log("Create Item Opened");
} else {
document.getElementById("createItem").style.display = "none";
}
};
btnCloseCreateItem.onclick = async function btnCloseCreateItem() {
if (user) {
document.getElementById("createItem").style.display = "none";
console.log("itemclosed");
} else {
document.getElementById("createItem").style.display = "block";
}
};
const createItemNameField = document.getElementById("txtCreateItemName");
const createItemDescriptionField = document.getElementById(
"txtCreateItemDescription"
);
const createItemPriceField = document.getElementById("numCreateItemPrice");
const createItemStatusField = document.getElementById("selectCreateItemStatus");
const createItemFile = document.getElementById("fileCreateItemFile");
const createItemForm = document.getElementById("createItem");
const SaveCreateItem = document.getElementById("btnCreateItem");```