From 74214973cf92f225b05ff3bd4e9974ba3ca94574 Mon Sep 17 00:00:00 2001 From: lolman420 Date: Sun, 9 Feb 2025 23:02:58 +0000 Subject: [PATCH 1/4] added disable to player create button after it has been pressed --- src/app/components/Player/PlayerForm/index.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/components/Player/PlayerForm/index.tsx b/src/app/components/Player/PlayerForm/index.tsx index 7c693319..78fd41e8 100644 --- a/src/app/components/Player/PlayerForm/index.tsx +++ b/src/app/components/Player/PlayerForm/index.tsx @@ -28,7 +28,9 @@ export const PlayerForm = ({ player }: Props) => { motto: player ? player.motto : "", emoji: player ? player.emoji : "", }); + const [emojiSelectorOpen, setEmojiSelectorOpen] = useState(false); + const [isButtonPressed, setButtonPressed] = useState(false); const router = useRouter(); @@ -51,6 +53,7 @@ export const PlayerForm = ({ player }: Props) => { }; const submitNewPlayer = async (newPlayer: NewPlayer) => { + setButtonPressed(!isButtonPressed); const res = await fetch("/api/player/", { method: "POST", headers: { @@ -129,7 +132,7 @@ export const PlayerForm = ({ player }: Props) => { Date: Sun, 9 Feb 2025 23:03:44 +0000 Subject: [PATCH 2/4] made the text black in the player search input box --- src/app/components/ui/PlayerSearch/PlayerSearchLink.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/ui/PlayerSearch/PlayerSearchLink.tsx b/src/app/components/ui/PlayerSearch/PlayerSearchLink.tsx index 969c03c0..f2fa8d2b 100644 --- a/src/app/components/ui/PlayerSearch/PlayerSearchLink.tsx +++ b/src/app/components/ui/PlayerSearch/PlayerSearchLink.tsx @@ -68,7 +68,7 @@ export const PlayerSearchLink = ({ visible, onClick, onBlur }: Props) => { return (
Date: Sun, 9 Feb 2025 23:09:11 +0000 Subject: [PATCH 3/4] redid search logic so it is now more logical --- src/server/db/players/index.ts | 38 ++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/server/db/players/index.ts b/src/server/db/players/index.ts index 78140f4b..4402d4f7 100644 --- a/src/server/db/players/index.ts +++ b/src/server/db/players/index.ts @@ -1,7 +1,6 @@ import { Op, QueryTypes, Sequelize } from "sequelize"; import { type NewPlayer, type Player, newPlayer, player } from "@common/types"; -import { permutator } from "@common/utils/helperFunctions"; import { PlayerModel } from "@server/models"; import dbConf from "@server/utils/dbConf"; @@ -128,23 +127,30 @@ const searchPlayers = async ( query: string, limit?: number, ): Promise => { - const colOptions = ["first_name", "last_name", "nickname", "id"]; - const permutations = permutator(colOptions); - - const options = permutations.map((perm) => { - return Sequelize.where( - Sequelize.fn("concat", ...perm.map((col) => Sequelize.col(col))), - { - [Op.iLike]: `%${query.replaceAll(" ", "%")}%`, - }, - ); - }); + const queryParts = query.split(" "); + + const conditions = queryParts.map((part) => ({ + [Op.or]: [ + Sequelize.where(Sequelize.fn("lower", Sequelize.col("first_name")), { + [Op.startsWith]: part.toLowerCase(), + }), + Sequelize.where(Sequelize.fn("lower", Sequelize.col("last_name")), { + [Op.startsWith]: part.toLowerCase(), + }), + Sequelize.where(Sequelize.fn("lower", Sequelize.col("nickname")), { + [Op.startsWith]: part.toLowerCase(), + }), + ], + })); + + const whereClause = { + [Op.and]: conditions, + }; - const players = await PlayerModel.findAll({ - where: { [Op.or]: options }, - limit: limit, + return PlayerModel.findAll({ + where: whereClause, + limit, }); - return players; }; export { From e64923eea82e3ee8c8d56d798ef00c3a298be45f Mon Sep 17 00:00:00 2001 From: lolman420 Date: Tue, 11 Feb 2025 21:51:16 +0000 Subject: [PATCH 4/4] added search by ID and fixed bugs, refactored; also redid the logic combining old and new approach --- src/server/db/players/index.ts | 58 ++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/src/server/db/players/index.ts b/src/server/db/players/index.ts index 4402d4f7..bed93585 100644 --- a/src/server/db/players/index.ts +++ b/src/server/db/players/index.ts @@ -1,6 +1,7 @@ import { Op, QueryTypes, Sequelize } from "sequelize"; import { type NewPlayer, type Player, newPlayer, player } from "@common/types"; +import { permutator } from "@common/utils/helperFunctions"; import { PlayerModel } from "@server/models"; import dbConf from "@server/utils/dbConf"; @@ -127,30 +128,41 @@ const searchPlayers = async ( query: string, limit?: number, ): Promise => { - const queryParts = query.split(" "); - - const conditions = queryParts.map((part) => ({ - [Op.or]: [ - Sequelize.where(Sequelize.fn("lower", Sequelize.col("first_name")), { - [Op.startsWith]: part.toLowerCase(), - }), - Sequelize.where(Sequelize.fn("lower", Sequelize.col("last_name")), { - [Op.startsWith]: part.toLowerCase(), + try { + const colOptions = ["first_name", "last_name", "nickname", "id"]; + const permutations = permutator(colOptions); + + const queryParts = query.split(" ").filter((part) => part.length > 0); + + const options = await Promise.all( + queryParts.map(async (part) => { + return await Promise.all( + permutations.map(async (perm) => { + return Sequelize.where( + Sequelize.fn("concat", ...perm.map((col) => Sequelize.col(col))), + { + [Op.iLike]: `${part}%`, + }, + ); + }), + ); }), - Sequelize.where(Sequelize.fn("lower", Sequelize.col("nickname")), { - [Op.startsWith]: part.toLowerCase(), - }), - ], - })); - - const whereClause = { - [Op.and]: conditions, - }; - - return PlayerModel.findAll({ - where: whereClause, - limit, - }); + ); + + const whereClause = { + [Op.and]: options.map((opts) => ({ [Op.or]: opts })), + }; + + const players = await PlayerModel.findAll({ + where: whereClause, + limit: limit, + }); + + return players; + } catch (error) { + console.error("Error in searchPlayers:", error); + throw error; + } }; export {