From 27bd95aa117836ea5371f6457ce04d92706d484b Mon Sep 17 00:00:00 2001 From: Emil Nielsen Date: Wed, 22 Mar 2023 12:21:33 +0700 Subject: [PATCH] wip: stakingSources, startStake --- src/app/Components/InventoryItem.tsx | 15 ++++++++++--- src/app/Components/InventoryItemView.tsx | 5 +++-- src/app/Components/StakingSource.tsx | 4 +++- src/app/Components/StakingSourcesView.tsx | 2 +- src/app/page.tsx | 3 +-- src/pages/api/user/[userId]/stakes/index.ts | 7 +++++- .../api/user/[userId]/staking-sources.ts | 13 ++--------- src/utils/helpers.ts | 22 +++++++++++++++++++ 8 files changed, 50 insertions(+), 21 deletions(-) diff --git a/src/app/Components/InventoryItem.tsx b/src/app/Components/InventoryItem.tsx index 03da04d..e7e9a08 100644 --- a/src/app/Components/InventoryItem.tsx +++ b/src/app/Components/InventoryItem.tsx @@ -1,14 +1,23 @@ import React from "react"; -import { IInventoryItem } from "typings"; +import { IInventoryItem, IStake } from "typings"; import CardLayout from "../Layouts/CardLayout"; const InventoryItem = (props: { inventoryItem: IInventoryItem; + stakes: IStake[] | null; upgradeInventoryItem: (itemId: number) => void; }) => { const getCurrentTier = (index: number) => { return props.inventoryItem.storeItem.upgrades[index].tier; }; + + const isInUse = () => { + if (!props.stakes) return false; + return props.stakes.some((stake) => { + stake.inventoryItemId === props.inventoryItem.id; + }); + }; + return (

@@ -28,9 +37,9 @@ const InventoryItem = (props: {
{/* { Check if the item is in use } */} - {false ? ( + {isInUse() ? ( ) : (
diff --git a/src/app/Components/StakingSource.tsx b/src/app/Components/StakingSource.tsx index 4350fd1..a3f14d3 100644 --- a/src/app/Components/StakingSource.tsx +++ b/src/app/Components/StakingSource.tsx @@ -60,6 +60,7 @@ const StakingSource = (props: { }; const RenderButtonOrCountdown = (props: { stake: IStake }) => { + console.log(props.stake); if (!props.stake.remainingTime) return

Error

; if (!props.stake.unclaimed) return

Claimed

; @@ -88,7 +89,8 @@ const StakingSource = (props: { const isActive = (item: IInventoryItem): boolean => { return props.stakingSource.activeStakes.some((obj) => obj.id === item.id); }; - + console.log(activeStakes); + console.log(props.stakingSource); return (

{props.stakingSource.name}

diff --git a/src/app/Components/StakingSourcesView.tsx b/src/app/Components/StakingSourcesView.tsx index e00f425..30b4dad 100644 --- a/src/app/Components/StakingSourcesView.tsx +++ b/src/app/Components/StakingSourcesView.tsx @@ -1,6 +1,6 @@ "use client"; import React from "react"; -import { IInventoryItem, IStakingSource, IStake, IGameConfig } from "typings"; +import { IInventoryItem, IStakingSource } from "typings"; import StakingSource from "./StakingSource"; const StakingSourcesView = (props: { diff --git a/src/app/page.tsx b/src/app/page.tsx index d5af349..dfbad34 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -267,7 +267,6 @@ export default function Home() { }; if (!userId) return

Please login

; - return ( <> {notification && ( @@ -294,7 +293,7 @@ export default function Home() { startStake={startStake} /> diff --git a/src/pages/api/user/[userId]/stakes/index.ts b/src/pages/api/user/[userId]/stakes/index.ts index e6f9291..beeb204 100644 --- a/src/pages/api/user/[userId]/stakes/index.ts +++ b/src/pages/api/user/[userId]/stakes/index.ts @@ -1,6 +1,7 @@ import { dbConnection } from "db"; import type { NextApiRequest, NextApiResponse } from "next"; import { IInventoryItem } from "typings"; +import { updateAllToCamelCase } from "@/utils/helpers"; export default async function handler( req: NextApiRequest, @@ -20,7 +21,11 @@ export default async function handler( LEFT JOIN claim_event ON staking_event.id = claim_event.staking_event_id WHERE staking_event.user_id = ?`; const inventoryItems = await db.all(inventorySql, [userId]); - return res.status(200).json(inventoryItems); + + // Change all keys to camelCase + const updatedInventoryItems = updateAllToCamelCase(inventoryItems) + + return res.status(200).json(updatedInventoryItems); } } catch (error) { res.status(500).json(error); diff --git a/src/pages/api/user/[userId]/staking-sources.ts b/src/pages/api/user/[userId]/staking-sources.ts index 5c1e531..99b03c7 100644 --- a/src/pages/api/user/[userId]/staking-sources.ts +++ b/src/pages/api/user/[userId]/staking-sources.ts @@ -2,6 +2,7 @@ import { dbConnection } from "db"; import type { NextApiRequest, NextApiResponse } from "next"; import { IStakingSource } from "typings"; import { gameConfig } from "@/utils/gameLogic"; +import { updateAllToCamelCase } from "@/utils/helpers"; import { generateRandomBase64String, } from "../../../../utils/helpers"; @@ -36,18 +37,8 @@ export default async function handler( const activeStakes = await db.all(stakesSql, [source.id]); source.activeStakes = activeStakes; } - const typedStakingSources: IStakingSource[] = stakingSources.map(source => ({ - ...source, - // Emil: The variable names are messed up so i'm renaming them - activeStakes: source.activeStakes.map((stake) => ({ - ...stake, - inventoryItemId: stake.inventory_item_id, - durationInMins: stake.duration_in_mins, - stakeAmount: stake.stake_amount - })) - })) - return res.status(200).json(typedStakingSources); + return res.status(200).json(stakingSources); } if (req.method === "POST") { const { userId } = req.query; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index d081d69..29aa4c6 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -78,3 +78,25 @@ export const generateRandomBase64String = (length: number) => { return base64String; } + +export function toSnakeCase(str: string) { + return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`); +} + +export function toCamelCase(str: string) { + return str.replace(/([-_][a-z])/g, (group) => + group.toUpperCase().replace("-", "").replace("_", "") + ); +} + +export const updateAllToCamelCase = (array) => { + const updatedArray = array.map(obj => { + const newObj = {} + Object.keys(obj).forEach(key => { + const camelCaseKey = toCamelCase(key); + newObj[camelCaseKey] = obj[key]; + }); + return newObj; + }) + return updatedArray +} \ No newline at end of file