How can I write this python function in javascript?

Im currently working on this code wars pisano period.
We need to return the length of the period by which you divide the fibonacci sequence.

The python code I searched for on youtube looks like this. Also its important to note that the python function returns the entire modulo version of the fibonacci sequence instead of the length
here is the youtube video from which I got this answer from Lets Python: Pisano

def pisanoPython(divisor):
  '''Returns a modulo version of the Fibonacci sequence'''
  fib = [0,1]
  while True:
     fib.append((fib[-1]+fib[-2]) % divisor)
     if fib[-1] == 1 and fib[-2] == 0:
        return fib[:-2]

>>>pisano(3)
[0,1,1,2,0,2,2,1]

Below is my code (which is giving me the wrong output)

function pisanoJavascript(n){
  let fib = [0,1];
  let isRepeated = true;
  while(isRepeated) {
    let lastVal = fib[fib.length-1]
    let secondLastVal = fib[fib.length-2]
    let remainder = (lastVal + secondLastVal) % n
    fib.push(remainder)
    if(lastVal === 1 && secondLastVal === 0) isRepeated = false
  }
  return fib.slice(0,-2).length
}

I followed the logic and the steps from the python function but can’t figure out which part I am missing.

I find that the line
if(lastVal === 1 && secondLastVal === 0) isRepeated = false. will always hit and break out of the while loop so maybe I need to initialize fib array in a different way. Why are these two functions not the same even though I followed the logic from pisanoPython and how can I make the javascript version work

how can I toggle items in a list in javascript?

I write the toggleSelectedItems function but it did not work correctly and I could not solve the problem.

when I click on add button, I want to send the items that are in candidateItems to selectedGroups and if I click on add all, the all items in groups are added to selectedGroups.if I click on remove, the items that are in candidateItems are removed from selectedGroups . I want when I send the items to the toggleSelectedItems function, if they exist, they will be removed from the selectedGroups state, and if they don’t exist, they will be added. the items should be add to the related group. the groupId of items are equal to id of each group in selectedGroups.how can I fix the toggleSelectedItems function?

for example

const groups =[
    {
        "title": "Clusters",
        "id": "clusters",
        "items": [
            {
                "id": 1,
                "label": "cluster1",
                "groupId": "selected-clusters"
            },
            {
                "id": 2,
                "label": "cluster2",
                "groupId": "selected-clusters"
            }
        ]
    },
    {
        "title": "Rigs",
        "id": "rigs",
        "items": [
            {
                "id": 1,
                "label": "rig1",
                "groupId": "selected-rigs"
            },
            {
                "id": 2,
                "label": "rig2",
                "groupId": "selected-rigs"
            },
            {
                "id": 3,
                "label": "rig3",
                "groupId": "selected-rigs"
            }, 
        ]
    }
]
const selectedGroups=[
    {
        "title": "Selected Clusters",
        "id": "selected-clusters",
        "items": []
    },
    {
        "title": "Selected Rigs",
        "id": "selected-rigs",
        "items": []
    }
]

const candidateItems=[
    {
        "id": 1,
        "label": "cluster1",
        "groupId": "selected-clusters"
    },
    {
        "id": 2,
        "label": "cluster2",
        "groupId": "selected-clusters"
    }
]

my code :

 type GroupType = {
  title: string
  id: string
  items: GroupItemType[]
}

 type GroupItemType = {
  id: string | number
  label: string
  groupId: string | number
}

const [groups, setGroups] = useState<GroupType[]>([])
const [selectedGroups, setSelectedGroups] = useState < GroupType[] > ([])
const [candidateItems, setCandidateItems] = useState < GroupItemType[] > ([])

 const toggleSelectedItems = useCallback(
    (toggleItems: GroupItemType[]) => {
      setSelectedGroups((prevGroups) =>
        prevGroups.map((group) => {
          const groupToggleItems = toggleItems.filter(
            (toggleItem) => toggleItem.groupId === group.id
          )

          if (groupToggleItems.length === 0) return group

          const itemExists = groupToggleItems.some((toggleItem) =>
            group.items.some((item) => item.id === toggleItem.id)
          )

          const updatedItems = itemExists
            ? group.items.filter(
                (item) =>
                  !groupToggleItems.some(
                    (toggleItem) => toggleItem.id === item.id
                  )
              )
            : [...group.items, ...groupToggleItems]

          return { ...group, items: updatedItems }
        })
      )
    },
    [selectedGroups]
  )
  
  const add = useCallback(() => {
    toggleSelectedItems(candidateItems)
    setCandidateItems([])
  }, [candidateItems])
  
  const addAll = useCallback(() => {
    const allItems = groups.flatMap((item) => item.items)
    toggleSelectedItems(allItems)
  }, [groups])
 
  const remove = useCallback(() => {
    toggleSelectedItems(candidateItems)
    setCandidateItems([])
  }, [candidateItems])
 
  const removeAll = useCallback(() => {
    const allItems = selectedGroups.flatMap((item) => item.items)
    toggleSelectedItems(allItems)
  }, [selectedGroups])

css – how to align the flex centre item?

I have a React Component.
enter image description here

If the lengths of the labels(Football etc) are different, the starting position of the progress bar is different. I want to make them always start at the same position. Is it possible to do so using flex?

MyComponent.tsx

import React from "react";

const INITIAL_CATEGORIES = [
  { id: 1, label: "Football" },
  { id: 2, label: "Basketball & Baseball" },
];

const CategoryItem = ({ label }) => {
  return (
    <div className="flex justify-between items-center">
      <span>{label}</span>
      <div className="w-6/12 bg-indigo-100 rounded-full h-2.5 dark:bg-gray-700">
        <div
          className="bg-blue-600 h-2.5 rounded-full"
          style={{ width: "65%" }}
        >
          123
        </div>
      </div>
      <span>$650.00 / $ 1,000.00</span>
    </div>
  );
};

export default function Dictator() {
  return (
    <div className="px-5 py-5 bg-white rounded">
      <div className="flex flex-col gap-3 mt-4">
        {INITIAL_CATEGORIES.map(({ id, label }) => (
          <CategoryItem key={id} label={label} />
        ))}
      </div>
    </div>
  );
}

Appwrite Login Auth: TypeError: account.createEmailSession is not a function

I follow this tutorial with Vue, Appwrite
https://appwrite.io/docs/tutorials/vue/step-1

src/appwrite/index.js

import { Client, Databases, Account } from "appwrite";

const client = new Client();
client
  .setEndpoint("https://cloud.appwrite.io/v1")
  .setProject("PROJECT-ID"); // Replace with your project ID

export const account = new Account(client);
export const databases = new Databases(client);

src/store/user.js

import { ID } from 'appwrite';
import { account } from "@/appwrite";
import { reactive } from "vue";

export const user = reactive({
  current: null,
  async init() {
    try {
      this.current = await account.get();
    } catch (e) {
      this.current = null;
    }
  },
  async register(email, password) {
    await account.create(ID.unique(), email, password);
    await this.login(email, password);
  },
  async login(email, password) {
    await account.createEmailSession(email, password);
    window.location.href = "/";
  },
  async logout() {
    await account.deleteSession("current");
    this.current = null;
  },
});

src/pages/auth/Login.vue

<script setup>
import { user } from "@/store/users";
import { ref } from "vue";

const email = ref("");
const password = ref("");
</script>

<template>
  <section>
    <h1>Login or register</h1>
    <form>
      <input type="email" placeholder="Email" v-model="email" />
      <input type="password" placeholder="Password" v-model="password" />
      <div>
        <button type="button" @click="user.login(email, password)">
          Login
        </button>
        <button type="button" @click="user.register(email, password)">
          Register
        </button>
      </div>
    </form>
  </section>
</template>

Register function is OK. New user is created in Appwrite Console/Auth.
But when clicking to Login button, it throws an error
Uncaught (in promise) TypeError: account.createEmailSession is not a function

I cannot find a proper answer anywhere.
Can someone explain it?

Messy code and code returning false not working

I’m making this function where i buy a specific weapon for a specific price and if the coins aren’t enough then it wouldn’t be executed. the else isn’t working and I’m repeating the code so is there any way to write more efficient code and fixing the else code block? buyW() is the function where i buy the weapon

let xp = 0
let hp = 100
let coins = 200

const button1 = document.querySelector("#button1")
const button2 = document.querySelector("#button2")
const button3 = document.querySelector("#button3")
const button4 = document.querySelector("#button4")
const button5 = document.querySelector("#button5")

const textbox = document.querySelector("#textbox")
const textbox2 = document.querySelector("#textbox2")

const xpNum = document.querySelector("#xpNum")
const hpNum = document.querySelector("#healthNum")
const coinsNum = document.querySelector("#coinsNum")

//intiallize button functions
button1.onclick = goToStore

xpNum.innerHTML = xp
hpNum.innerHTML = hp
coinsNum.innerHTML = coins

const villains = [
    {name: "Sandman", hp:25},
    {name: "Vulture",hp:50},
    {name: "Lizard",hp:75},
    {name: "Mysterio",hp:80},
    {name: "Green Goblin",hp:120},
]

let inv = [
    {name: "Spiderweb" , damage: 2}
]

let currentWeapon = ""

inv.forEach((item,index)=>{
    currentWeapon+=`${index + 1}. ${item.name}<br>`
})

const weapons = [
    {name: "Shield", damage: 5 , price: 50},
    {name: "Gun" , damage: 10, price: 100},
    {name: "Trident", damage: 20, price: 200}
]

let weaponsList = ""

weapons.forEach((item,index)=>{
    weaponsList+=`${index + 1}. ${item.name} - ${item.price} coins<br>`
})


const scenes = [
    //start screen
    {scene:"start",
    text: "Spiderman is near a mom-and-pop shop in Queens. What should he do?",
    btnT: ["Go to store","Go to city","Go to underground","Exit"],
    btnF: [goToStore,goToCity,goToUnder,exit]
    },
    //entering store
    {scene:"store",
    text: "Spiderman is inside the store. What should he do?",
    btnT: ["Buy Weapon","Sell Weapon","Buy Health - 15 coins","Leave Store"],
    btnF: [buyW,sellW,buyH,leave]
    },
    //buy weapon
    {scene: "buy",
    text: `Spiderman currently has :<br> ${currentWeapon} Which weapon should he buy?`,
    btnT: ["Shield - 50 coins","Gun - 100 coins","Trident - 200 coins","Exit Buy"],
    btnF: [weapon("Shield"),weapon("Gun"),weapon("Trident"),exitBuy],
    text2 : weaponsList 
    }
]

function update(scene){
    button1.onclick = scene.btnF[0];
    button2.onclick = scene.btnF[1];
    button3.onclick = scene.btnF[2];
    button4.onclick = scene.btnF[3];
    
    button1.innerHTML = scene.btnT[0];
    button2.innerHTML = scene.btnT[1];
    button3.innerHTML = scene.btnT[2];
    button4.innerHTML = scene.btnT[3];

    textbox.innerHTML = scene.text

    if(Object.prototype.hasOwnProperty(scene,"text2")){
        textbox2.innerHTML = scene.text2
    } else {
        textbox2.style.display = "none"
    }
}

function goToStore(){
    update(scenes[1])
}

function goToCity(){
    update(scenes[0])
}

function goToUnder(){
    update(scenes[0])
}

function exit(){
    update(scenes[0])
}
function buyW(){
    update(scenes[2])
    textbox2.style.display = "block"
    textbox2.innerHTML = scenes[2].text2
    if(coins >= 50){
        function shield(){
            alert("Shield bought!")
            coins-=50
            coinsNum.innerHTML = coins
            inv.push(weapons[0])
            currentWeapon = ""
            inv.forEach((item,index)=>{
                currentWeapon+=`${index + 1}. ${item.name}<br>`
            })
            textbox.innerHTML = `Spiderman currently has :<br> ${currentWeapon} Which weapon should he buy?`
            button1.removeEventListener("click",shield)
        }
    } else {
        alert("Not enough coins!")
        return false
    }

    if(coins >= 100){
        function gun(){
            alert("Gun bought!")
            coins-=100
            coinsNum.innerHTML = coins
            inv.push(weapons[1])
            currentWeapon = ""
            inv.forEach((item,index)=>{
                currentWeapon+=`${index + 1}. ${item.name}<br>`
            })
            textbox.innerHTML = `Spiderman currently has :<br> ${currentWeapon} Which weapon should he buy?`
            button2.removeEventListener("click",gun)
        }
    } else {
        alert("Not enough coins!")
        return false
    }
    
    if(coins >= 200){
        function trident(){
            alert("Trident bought!")
            coins-=200
            coinsNum.innerHTML = coins
            inv.push(weapons[2])
            currentWeapon = ""
            inv.forEach((item,index)=>{
                currentWeapon+=`${index + 1}. ${item.name}<br>`
            })
            textbox.innerHTML = `Spiderman currently has :<br> ${currentWeapon} Which weapon should he buy?`
            button3.removeEventListener("click",trident)
        }
    } else {
        alert("Not enough coins!")
        return false
    }
    button1.addEventListener("click",shield)
    button2.addEventListener("click",gun)
    button3.addEventListener("click",trident)
}

function sellW(){
    
}

function buyH(){
    
}

function leave(){
    update(scenes[1])
}

function weapon(weapon){

}

function exitBuy(){

}

update(scenes[0])```

node error. I have 2 js files and on console I typed “node index.js functions.js” . Please note: im trying to use firebase

please check the error below:
node:internal/process/esm_loader:40
internalBinding(‘errors’).triggerUncaughtException(
^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module ‘D:web devscrimbamobile appfunctions’ imported from D:web devscrimbamobile appindex.js
Did you mean to import ../functions.js?

Given below is the code I’m trying to run: (Index.html, index.js, functions.js)

    <!doctype html>
<html>
    <head>
        <title>Reel Time</title>
        <link rel="preconnect" href="https://fonts.googleapis.com">
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300&family=Ultra&display=swap" rel="stylesheet">
        <link rel="stylesheet" href="index.css">
    </head>
    <body>
        <div class="container">
            <h1>Reel Time</h1>
            <div class="field">
                <input type="text" id="input-field" placeholder="Pulp Fiction">
                <button id="add-button">+</button>
            </div>
        </div>
        <script src="index.js" type="module"></script>
        <script src="functions.js" type="module"></script>
    </body>
</html>

//const readlineSync = require (readlineSync)


import { add } from "./functions"
console.log(add(20,30))

const appSettings = {
    databaseURL: "https://playground-91206-default-rtdb.asia-southeast1.firebasedatabase.app/"

}
const inputFieldEl = document.getElementById("input-field")
const addButtonEl = document.getElementById("add-button")

addButtonEl.addEventListener("click", function() {
    let inputValue = inputFieldEl.value
    
    console.log(`${inputValue} added to database`)
})

 //const readlineSync = require (readlineSync)

export function add(a,b) {
       return a + b
}

PHP post to mysql with dynamic table inside while loop

With some help, I made a truck check form with buttons for pass, warning, and fail. As well as a comment button that adds a line for a comment. This is all being done in a while loop from mysqli_fetch_array.

How do I post the data from the filled out form to the mysql db? I dont have much experience posting to mysql using dynamic table loops.

Example of my form

Here is my code:

<div class="container-xxl flex-grow-1 container-p-y">
             
<h2 align="center"><?php echo $appname?></h2><br />
   <div class="form-group">
   <form name="add_name" id="add_name">
                    
   <div class="table-responsive">
      <table class="table table-bordered" id="dynamic_field">

   <?php while ($checks = mysqli_fetch_array($checksqry)) {
            echo '<tr>';
            echo '<td style="width: 20%">'.$checks['check_name'].' <br><br> 
            <input type="radio" class="btn-check" name="btn[' . $checks['id'] . ']" id="btnpass[' . $checks['id'] . ']" value="Pass">
            <label class="btn rounded-pill btn-outline-success" for="btnpass[' . $checks['id'] . ']">Pass</label>&Tab;&Tab;

           <input type="radio" class="btn-check" name="btn[' . $checks['id'] . ']" id="btnwarning[' . $checks['id'] . ']" value="Warning">
           <label class="btn rounded-pill btn-outline-warning" for="btnwarning[' . $checks['id'] . ']">Warning</label>&Tab;&Tab;

           <input type="radio" class="btn-check" name="btn[' . $checks['id'] . ']" id="btnfail[' . $checks['id'] . ']" value="Fail">
           <label class="btn rounded-pill btn-outline-danger" for="btnfail[' . $checks['id'] . ']">Fail</label>&Tab;&Tab;

           <button onclick="myFunction('. $checks['id'] . ')" type="button" name="comment[' . $checks['id'] . ']" id="comment[' . $checks['id'] . ']" class="btn btn-info" style="float: right">Click</button> 
<br><br>
           <div style="display:none;" id="commentlinediv[' . $checks['id'] . ']">
           <input type="text" class="text-line" placeholder="Type Comment Here" id="commentline[' . $checks['id'] . ']"/>
</div>
</td>';
echo '<tr>';}?>

 </table>
<input type="button" name="submit" id="submit" class="btn btn-info" value="Submit" />
</div>
</form>
</div>
</div>

<style>
input[type="text"] {
   border:none; /* Get rid of the browser's styling */
   border-bottom:1px solid black; /* Add your own border */
}

.text-line {
   background-color: transparent;
   color: black;
   outline: none;
   outline-style: none;
   border-top: none;
   border-left: none;
   border-right: none;
   border-bottom: solid #eeeeee 1px;
   padding: 3px 10px;
   width: 300px;
}
                


</style>


<script>
function myFunction(var1) {
  
document.getElementById("commentlinediv[" + var1 + "]").style.display = "inline";
}

</script>

Exporting an auxiliar function outside the scope of a Adonis JS Controller class

I have an AdminController with a lot of backend API endpoints and there is an auxiliar function that one of the API depends upon. I need to call this auxiliar function from a Task File that runs every day in the morning. I tried exporting an object using module.exports = { AdminController, createReportAux } but that did not seem to work. How can I achieve this? Am I doing the import or export wrong?

class AdminController {

// backend API endpoint methods

    async deleteProgram({ request, params, response }) {
}

    async addProgram({ auth, request, response }) {
}

//I could call this but cannot pass auth information from the task file as it is not available there
    async createReport({ auth, params, response }) {
                        createReportAux(requestInfo, auth.user.email)
}

}


//function that I need to call which is outside AdminController class
const createReportAux = async (requestInfo, email) => {
}

module.exports = AdminController


const AdminController = use("App/Controllers/Http/AdminController")

class GetScheduledEmailForTheDay extends Task {
  static get schedule() {

  }
 await AdminController.createReportAux(requestInfo, individualEmailToSend.receiver_email)

}

Please suggest a solution, I have been stuck at it for a while. Exporting as an object seems to work but the API methods are not accessible that way.

How do i store data for HTML for file://

so I wanted to store a cookie for light mode and dark mode inside a html file in file://, NOT a webpage. file:// path, not a webpage

but then I learnt that cookies don’t actually work on file:// (or at least on chrome).
so I googled and learnt about local storage, but that too does not work….

so I wanted to know is there any other way of storing data even on a file:// path?

thank you

Slash commands not giving any response discord.js

I’ve been learning discord.js following the official docs, but I’m unable to get the bot to reply to the slash ( / ) commands

//This is the ping.js command file

const { SlashCommandBuilder } = require("discord.js");


module.exports = {
    data: new SlashCommandBuilder()
        .setName('pings')
        .setDescription('Replies with Pong!'),
    async execute(interaction) {
        await interaction.reply('Pong!');
    },
};

//This is the command handling / interaction handling


const foldersPath = path.join(__dirname, 'commands');
const commandFolders = fs.readdirSync(foldersPath);

for (const folder of commandFolders) {
    // Grab all the command files from the commands directory you created earlier
    const commandsPath = path.join(foldersPath, folder);
    const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
    // Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
    for (const file of commandFiles) {
        const filePath = path.join(commandsPath, file);
        const command = require(filePath);
        if ('data' in command && 'execute' in command) {
            commands.push(command.data.toJSON());
        } else {
            console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
        }
    }
}


//construct and prepare an instance for the REST module
const rest = new REST().setToken(discordToken);

//deploy the commands
(async () =>{
    try{
        console.log(`Started refreshing ${commands.length} application (/) commands.`);

        const data = await rest.put(
            Routes.applicationGuildCommands(discordClientID),
            {body:commands},
        )

        console.log(`Successfully reloaded ${data.length} application (/) commands.`);
    } catch (err){
        console.error(err);
    }
})

client.on(Events.InteractionCreate, async interaction =>{
    if(!interaction.isChatInputCommand()) return;
    console.log(interaction);

    const command = interaction.client.commands.get(interaction.commandName);

    if (!command){
        console.error(`No command matching ${interaction.commandName} was found`);
        return;
    }

    try{
        await command.execute(interaction);
    } catch (err){
        console.error(err);
        if (interaction.replied || interaction.deferred){
            await interaction.followUp({content: 'There was an error while executing this command', ephemeral: true});
        }else{
            await interaction.reply({content: 'There was an error while executing this command', ephemeral: true});
        }
    }
});

Sorry if the code is long, but this is all I have. So far I know that whenever I type /pings the bot should response with “Pong!” but all I see is the slash commands of the other bots I have in the server. This is not comming from the app itself, since I have added the bot with this two scopes “bot” “application.commands” as well as the “slash commands” so I guess this should be working just fine…

I was trying to find a useful answer here, but all of them are outdated, and are no longer working.

Unknown resolution: Uncaught TypeError: Cannot read properties of null (reading ‘addEventListener’)

I tried moving the script tag to the end, this did not work. I also tried adding the script to the and adding defer before the source. Nothing seems to work, is there something I am missing. Here is my code:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="onclick.css" />
    <script defer src="onclick.js"></script>
  </head>
  <body>
    <div class="rotate">
      <div class="rotate-obj">Craft</div>
      <button class="rotate-btn">Spin it</button>
    </div>
  </body>
</html>

I tried moving the script to the head and adding defer as well as moving the script tag to the bottom right before the closing body tag. I’m expecting the button to rotate the text ‘Craft’ once the button is clicked. Nothing happens and I am getting an error (stated in the title above).

Reading data from Firestore database on Web app

I am so very lost on how to simply read records from Firestore.

I have a single collection called properties. In it, I have several documents all in the same form (all have name, and category). That’s it; no subcollections or anything complex.

I have set the rules as follows (many matches for testing):

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    allow read;
    
    match /{document=**} {
        allow read;
    }
  
    match /properties/{document=**} {
        allow read;
    }
    
    match /properties/{propertyid} {
        allow read;
    }
  }
}

Then, I have my web-based Expo app with the firebase npmjs package installed. I have initialized my Firebase app, and called getFirestore to grab a database instance and all called signInWithEmailAndPassword and signed in with a test account I set up in the Firebase console.

Finally, I want to grab all documents from the properties collection and display them on screen, so I wrote the following:

const query = collection(db, "properties");
const data = await getDocs(query);

I’ve also tried getting a specific property (I copied the ID from the Firebase console, so I know it exists):

const query = doc(db, "properties", "9sRm1TLWAIpYiZLfWPvo");
 const snapshot = await getDoc(query);

I am also doing the following:

  1. Printing out the user credentials that I called signInWithEmailAndPassword. I see a large object with my uid, accessToken, etc.
  2. Printing out my db variable (comes from this.db = getFirestore(this.app);). I see the correct information: firebase start options (apiKey, authDomain, projectId), my authentication credentials (current user uid matches what I see in the previous auth log, my auth object is filled out, etc. etc. (everything looks normal)

However, whatever the heck I try, I also get “Missing or insufficient permissions”.

I’ve also checked my rules with the “Rules Playground” on any document under /properties and get successful simulated reads, both unauthenticated and authenticated.

What am I doing wrong and how can I just get a list of all documents in that collection? That’s literally all I’m trying to do.

How to convert img to Image component in next.js

I have implemented all the logic in this component. But it is according to the tag. Now, I want same logic to implement in the Image component. But doing so, it is giving me error.

TypeError: Failed to construct 'Image': Please use the 'new' operator, this DOM object constructor cannot be called as a function.

Her is the code I changed “`import React, { useState, useRef, useEffect } from “react”;

const ImageUploadCard = () => {
const componentRef = useRef(null);
const [componentWidth, setComponentWidth] = useState(0);
const [componentHeight, setComponentHeight] = useState(0);

useEffect(() => {
// Function to update component width
function updateComponentWidth() {
if (componentRef.current) {
const width = componentRef.current.getBoundingClientRect().width;
const height = componentRef.current.getBoundingClientRect().height;

    console.log("Component width:", width);
    console.log("Component width:", height);
    setComponentWidth(width);
    setComponentHeight(height);
  }
}

// Update component width initially and add event listener for window resize
updateComponentWidth();
window.addEventListener("resize", updateComponentWidth);

// Clean up event listener on component unmount
return () => {
  window.removeEventListener("resize", updateComponentWidth);
};

}, []);

const inputRef = useRef(null);
const [previewImage, setPreviewImage] = useState(null);

const handleImageChange = (event) => {
const file = event.target.files[0];
if (file && file.size > 5242880) {
// File size exceeds the maximum limit
// You can display an error message or handle it as needed
console.log(“File size exceeds the maximum limit (5MB)”);

  return;
}
if (file) {
  const reader = new FileReader();
  reader.onloadend = () => {
    setPreviewImage(reader.result);
  };
  reader.readAsDataURL(file);
} else {
  setPreviewImage(null);
}

};

return (

<div
style={{ width: componentWidth }}
className=”dark:bg-jacarta-700 dark:border-jacarta-600 border-jacarta-100 group relative flex flex-col items-center justify-center rounded-lg border-2 border-dashed bg-white py-20 px-5 text-center”
onClick={() => inputRef.current.click()} // Click event triggers file input
>

Image formats: JPEG, PNG, JPG . Max size: 5 MB

<input
type=”file”
accept=”.jpg, .jpeg, .png”
onChange={handleImageChange}
style={{ display: “none” }} // Hide the input visually
ref={inputRef}
// Set a max file size of 5MB (in bytes)
// 5MB = 5 * 1024 * 1024 bytes
// Adjust this value as needed
max=”5242880″
/>

  {previewImage && (
    <div
      className="dark:bg-jacarta-700 dark:border-jacarta-600 border-jacarta-100 group relative flex flex-col items-center justify-center rounded-lg border-2 border-dashed bg-white py-20 px-5 text-center"
      style={{ width: componentWidth, height: 400 }} // Set width dynamically
    >
      <Image
        src={previewImage}
        alt="Preview"
        style={{ maxWidth: "100%", maxHeight: "100%", objectFit: "cover" }}
      />
    </div>
  )}
</div>

);
};

export default ImageUploadCard;

<img> tag which is working 

import React, { useState, useRef, useEffect } from “react”;

const ImageUploadCard = () => {
const componentRef = useRef(null);
const [componentWidth, setComponentWidth] = useState(0);
const [componentHeight, setComponentHeight] = useState(0);

useEffect(() => {
// Function to update component width
function updateComponentWidth() {
if (componentRef.current) {
const width = componentRef.current.getBoundingClientRect().width;
const height = componentRef.current.getBoundingClientRect().height;

    console.log("Component width:", width);
    console.log("Component width:", height);
    setComponentWidth(width);
    setComponentHeight(height);
  }
}

// Update component width initially and add event listener for window resize
updateComponentWidth();
window.addEventListener("resize", updateComponentWidth);

// Clean up event listener on component unmount
return () => {
  window.removeEventListener("resize", updateComponentWidth);
};

}, []);

const inputRef = useRef(null);
const [previewImage, setPreviewImage] = useState(null);

const handleImageChange = (event) => {
const file = event.target.files[0];
if (file && file.size > 5242880) {
// File size exceeds the maximum limit
// You can display an error message or handle it as needed
console.log(“File size exceeds the maximum limit (5MB)”);

  return;
}
if (file) {
  const reader = new FileReader();
  reader.onloadend = () => {
    setPreviewImage(reader.result);
  };
  reader.readAsDataURL(file);
} else {
  setPreviewImage(null);
}

};

return (

<div
style={{ width: componentWidth }}
className=”dark:bg-jacarta-700 dark:border-jacarta-600 border-jacarta-100 group relative flex flex-col items-center justify-center rounded-lg border-2 border-dashed bg-white py-20 px-5 text-center”
onClick={() => inputRef.current.click()} // Click event triggers file input
>

Image formats: JPEG, PNG, JPG . Max size: 5 MB

<input
type=”file”
accept=”.jpg, .jpeg, .png”
onChange={handleImageChange}
style={{ display: “none” }} // Hide the input visually
ref={inputRef}
// Set a max file size of 5MB (in bytes)
// 5MB = 5 * 1024 * 1024 bytes
// Adjust this value as needed
max=”5242880″
/>

  {previewImage && (
    <div
      className="dark:bg-jacarta-700 dark:border-jacarta-600 border-jacarta-100 group relative flex flex-col items-center justify-center rounded-lg border-2 border-dashed bg-white py-20 px-5 text-center"
      style={{ width: componentWidth, height: 400 }} // Set width dynamically
    >
      <img
        src={previewImage}
        alt="Preview"
        style={{ maxWidth: "100%", maxHeight: "100%", objectFit: "cover" }}
      />
    </div>
  )}
</div>

);
};

export default ImageUploadCard;


I want to change the <img> tag to Image component so, same logic been implemented. Not Image as a legacy one. But latest one. 

Error submitting form on Discord server using my discord bot

So now my data is being saved into database but the form on discord is not submiting it shows something went wrong on form but the form doesnt close but still i get the success message on my discord channel

here is the code link
code link

screen shot link
screen shot link

see behind form it says You have been successfully registered!

I tried to see the database if it actually saves the data inside the DB and yes it does but my form is not submiting it just says something wrong but shows registration successful