Skip to content

Commit

Permalink
removing a player will now remove the corresponding pfp on the databa…
Browse files Browse the repository at this point in the history
…se. (#270)
  • Loading branch information
FrankreedX committed Jul 11, 2024
1 parent 227dc24 commit 9b07911
Show file tree
Hide file tree
Showing 32 changed files with 99 additions and 82 deletions.
4 changes: 4 additions & 0 deletions Utility.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,7 @@ export function getTimezoneOffsetTime(time) {
const localTime = time - timezoneOffset;
return Math.floor(localTime / 86400000) * 86400000 + timezoneOffset;
}

export function getPfpName(teamId, userId) {
return `${teamId}_${userId}`;
}
4 changes: 2 additions & 2 deletions app/content/assignments/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import ErrorComponent from "~/components/errorComponent";
import Header from "~/components/header";
import Loading from "~/components/loading";
import { useAuthContext } from "~/context/Auth";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useUserInfo } from "~/hooks/useUserInfo";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";

export default function Index() {
const { currentUserId } = useAuthContext();
Expand Down
6 changes: 3 additions & 3 deletions app/content/assignments/players.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ import RefreshInvalidate from "~/components/refreshInvalidate";
import { useAlertContext } from "~/context/Alert";
import { useAuthContext } from "~/context/Auth";
import { useTimeContext } from "~/context/Time";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";
import { invalidateMultipleKeys } from "~/dbOperations/invalidateMultipleKeys";
import { db } from "~/firebaseConfig";
import { invalidateMultipleKeys } from "~/hooks/invalidateMultipleKeys";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useUserInfo } from "~/hooks/useUserInfo";

function Index() {
const navigation = useNavigation();
Expand Down
4 changes: 2 additions & 2 deletions app/content/drill/[id]/description.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import Loading from "~/components/loading";
import RefreshInvalidate from "~/components/refreshInvalidate";

import { useAuthContext } from "~/context/Auth";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useUserInfo } from "~/hooks/useUserInfo";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";

export default function Description() {
const drillId = useLocalSearchParams()["id"];
Expand Down
4 changes: 2 additions & 2 deletions app/content/drill/[id]/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import ErrorComponent from "~/components/errorComponent";
import Header from "~/components/header";
import Loading from "~/components/loading";
import { useAuthContext } from "~/context/Auth";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useUserInfo } from "~/hooks/useUserInfo";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";

export default function Index() {
const [value, setValue] = React.useState("description");
Expand Down
8 changes: 4 additions & 4 deletions app/content/drill/[id]/leaderboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import EmptyScreen from "~/components/emptyScreen";
import ErrorComponent from "~/components/errorComponent";
import Loading from "~/components/loading";
import RefreshInvalidate from "~/components/refreshInvalidate";
import { useAllTimeRecords } from "~/hooks/useAllTimeRecords";
import { useBestAttempts } from "~/hooks/useBestAttempts";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useUserInfo } from "~/hooks/useUserInfo";
import { useAllTimeRecords } from "~/dbOperations/hooks/useAllTimeRecords";
import { useBestAttempts } from "~/dbOperations/hooks/useBestAttempts";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";

function getLeaderboardRanks(
orderedLeaderboard,
Expand Down
4 changes: 2 additions & 2 deletions app/content/drill/[id]/statistics.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import BarChartScreen from "~/components/barChart";
import ErrorComponent from "~/components/errorComponent";
import Loading from "~/components/loading";
import { useAuthContext } from "~/context/Auth";
import { useAttempts } from "~/hooks/useAttempts";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useAttempts } from "~/dbOperations/hooks/useAttempts";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";

export default function Stat() {
const drillId = useLocalSearchParams()["id"];
Expand Down
2 changes: 1 addition & 1 deletion app/content/drill/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import DrillList from "~/components/drillList";
import ErrorComponent from "~/components/errorComponent";
import Header from "~/components/header";
import Loading from "~/components/loading";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";

export default function Index() {
const { assignedTime, id: drillId, currentTime } = useLocalSearchParams();
Expand Down
4 changes: 2 additions & 2 deletions app/content/profile/drills/[id].js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import ErrorComponent from "~/components/errorComponent";
import Header from "~/components/header";
import Loading from "~/components/loading";
import { useAuthContext } from "~/context/Auth";
import { useAttempts } from "~/hooks/useAttempts";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useAttempts } from "~/dbOperations/hooks/useAttempts";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";

export default function Stat() {
const navigation = useNavigation();
Expand Down
26 changes: 10 additions & 16 deletions app/content/profile/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,11 @@ import {
Text,
TouchableOpacity,
View,
useWindowDimensions,
} from "react-native";
import { ActivityIndicator, Appbar, Switch } from "react-native-paper";
import {
SafeAreaView,
useSafeAreaInsets,
} from "react-native-safe-area-context";
import { SafeAreaView } from "react-native-safe-area-context";
import { themeColors } from "~/Constants";
import { getErrorString } from "~/Utility";
import { getErrorString, getPfpName } from "~/Utility";
import ProfilePicture from "~/components/ProfilePicture";
import BottomSheetWrapper from "~/components/bottomSheetWrapper";
import DrillList from "~/components/drillList";
Expand All @@ -38,12 +34,12 @@ import Loading from "~/components/loading";
import ProfileCard from "~/components/profileCard";
import { useAlertContext } from "~/context/Alert";
import { useAuthContext } from "~/context/Auth";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";
import { useEmailInfo } from "~/dbOperations/hooks/useEmailInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";
import { handleImageUpload } from "~/dbOperations/imageUpload";
import { invalidateMultipleKeys } from "~/dbOperations/invalidateMultipleKeys";
import { db } from "~/firebaseConfig";
import { handleImageUpload } from "~/hooks/imageUpload";
import { invalidateMultipleKeys } from "~/hooks/invalidateMultipleKeys";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useEmailInfo } from "~/hooks/useEmailInfo";
import { useUserInfo } from "~/hooks/useUserInfo";

function Index() {
const { signOut, currentUserId, currentTeamId } = useAuthContext();
Expand All @@ -52,10 +48,6 @@ function Index() {

const { showDialog, showSnackBar } = useAlertContext();

const insets = useSafeAreaInsets();

const { height, width } = useWindowDimensions();

const {
data: userData,
error: userError,
Expand Down Expand Up @@ -315,8 +307,10 @@ function Index() {
await handleImageUpload(
setImageUploading,
showSnackBar,
userId,
getPfpName(currentTeamId, userId),
userRef,
profilePicSize,
profilePicSize,
);
await invalidateMultipleKeys(queryClient, [["userInfo"]]);
} catch (e) {
Expand Down
14 changes: 8 additions & 6 deletions app/content/team/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ import Loading from "~/components/loading";
import RefreshInvalidate from "~/components/refreshInvalidate";
import { useAlertContext } from "~/context/Alert";
import { useAuthContext } from "~/context/Auth";
import { useTeamInfo } from "~/dbOperations/hooks/useTeamInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";
import { handleImageUpload } from "~/dbOperations/imageUpload";
import { invalidateMultipleKeys } from "~/dbOperations/invalidateMultipleKeys";
import { resetLeaderboards } from "~/dbOperations/resetLeaderboards";
import { db } from "~/firebaseConfig";
import { handleImageUpload } from "~/hooks/imageUpload";
import { invalidateMultipleKeys } from "~/hooks/invalidateMultipleKeys";
import { resetLeaderboards } from "~/hooks/resetLeaderboards";
import { useTeamInfo } from "~/hooks/useTeamInfo";
import { useUserInfo } from "~/hooks/useUserInfo";

function Index() {
const { currentUserId, currentTeamId } = useAuthContext();
Expand Down Expand Up @@ -216,7 +216,7 @@ function Index() {
hideResetDialog,
async () => {
try {
await resetLeaderboards();
await resetLeaderboards(currentTeamId);
await invalidateMultipleKeys(queryClient, [["best_attempts"]]);
hideResetDialog();
} catch (e) {
Expand Down Expand Up @@ -306,6 +306,8 @@ function Index() {
showSnackBar,
currentTeamId,
teamRef,
175,
100,
);
await invalidateMultipleKeys(queryClient, [["teamInfo"]]);
} catch (e) {
Expand Down
4 changes: 2 additions & 2 deletions app/content/team/users/[user]/drills/[id].js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import BarChartScreen from "~/components/barChart";
import ErrorComponent from "~/components/errorComponent";
import Header from "~/components/header";
import Loading from "~/components/loading";
import { useAttempts } from "~/hooks/useAttempts";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useAttempts } from "~/dbOperations/hooks/useAttempts";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";

export default function Stat() {
const navigation = useNavigation();
Expand Down
36 changes: 18 additions & 18 deletions app/content/team/users/[user]/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,33 +18,33 @@ import ProfileCard from "~/components/profileCard";
import RefreshInvalidate from "~/components/refreshInvalidate";
import { useAlertContext } from "~/context/Alert";
import { useAuthContext } from "~/context/Auth";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";
import { useEmailInfo } from "~/dbOperations/hooks/useEmailInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";
import { invalidateMultipleKeys } from "~/dbOperations/invalidateMultipleKeys";
import { removeUser } from "~/dbOperations/removeUser";
import { db } from "~/firebaseConfig";
import { invalidateMultipleKeys } from "~/hooks/invalidateMultipleKeys";
import { removeUser } from "~/hooks/removeUser";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useEmailInfo } from "~/hooks/useEmailInfo";
import { useUserInfo } from "~/hooks/useUserInfo";

//A function to add a user to the blacklist table with a timestamp
async function blacklistUser(userId, userInfo) {
async function blacklistUser(teamId, userId, userInfo) {
//Create new document with userId as the id and a time field

try {
await setDoc(doc(db, "teams", "1", "blacklist", userId), {
await setDoc(doc(db, "teams", teamId, "blacklist", userId), {
time: Date.now(),
name: userInfo["name"],
});
//remove users data
await removeUser(userId);
await removeUser(teamId, userId);
console.log("User Removed successfully!");
} catch (e) {
console.log("Error removing user:", e);
throw e; // Rethrow the error to handle it at the caller's level if needed
}
}

async function changeRole(userId, newRole) {
const userRef = doc(db, "teams", "1", "users", userId);
async function changeRole(teamId, userId, newRole) {
const userRef = doc(db, "teams", teamId, "users", userId);
try {
await updateDoc(userRef, { role: newRole });
console.log("User Role Changed successfully!");
Expand All @@ -70,7 +70,7 @@ function Index() {

const { showDialog, showSnackBar } = useAlertContext();

const { currentUserId } = useAuthContext();
const { currentUserId, currentTeamId } = useAuthContext();

const {
data: userInfo,
Expand Down Expand Up @@ -243,11 +243,11 @@ function Index() {
}
onPress={async () => {
try {
if (userInfo.role === "player") {
await changeRole(userId, "coach");
} else {
await changeRole(userId, "player");
}
await changeRole(
currentTeamId,
userId,
userInfo.role === "player" ? "coach" : "player",
);
await invalidateMultipleKeys(queryClient, [["userInfo"]]); //invalidate cache
showSnackBar("User role changed successfully!");
setMenuVisible(false);
Expand Down Expand Up @@ -311,7 +311,7 @@ function Index() {
hideRemoveDialog,
async () => {
try {
await removeUser(userId);
await removeUser(currentTeamId, userId);
await queryClient.removeQueries(["userInfo", userId]);
await invalidateMultipleKeys(queryClient, [
["userInfo"],
Expand All @@ -336,7 +336,7 @@ function Index() {
hideBanDialog,
async () => {
try {
await blacklistUser(userId, userInfo);
await blacklistUser(currentTeamId, userId, userInfo);
await queryClient.removeQueries(["userInfo", userId]);
await invalidateMultipleKeys(queryClient, [
["userInfo"],
Expand Down
3 changes: 2 additions & 1 deletion app/segments/(team)/chooseTeam.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import ErrorComponent from "~/components/errorComponent";
import Loading from "~/components/loading";
import { useAlertContext } from "~/context/Alert";
import { useAuthContext } from "~/context/Auth";
import { invalidateMultipleKeys } from "~/dbOperations/invalidateMultipleKeys";
import { auth, db } from "~/firebaseConfig";
import { invalidateMultipleKeys } from "~/hooks/invalidateMultipleKeys";

function ChooseTeam() {
const { signOut, currentUserId, currentUserInfo, setCurrentUserId } =
Expand Down Expand Up @@ -99,6 +99,7 @@ function ChooseTeam() {
>
<Button
onPress={async () => {
//temporary, should be replaced with multiple team functionality
await setDoc(doc(db, "teams", "1", "users", currentUserId), {
name: currentUserInfo["displayName"],
// hardcoded pfp string for now, add pfp upload to profile settings in future PR
Expand Down
4 changes: 2 additions & 2 deletions app/segments/drill/[id]/assignment/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ import Loading from "~/components/loading";
import { useAlertContext } from "~/context/Alert";
import { useAuthContext } from "~/context/Auth";
import { useTimeContext } from "~/context/Time";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";
import { invalidateMultipleKeys } from "~/dbOperations/invalidateMultipleKeys";
import { db } from "~/firebaseConfig";
import { invalidateMultipleKeys } from "~/hooks/invalidateMultipleKeys";
import { useUserInfo } from "~/hooks/useUserInfo";

export default function Index() {
const {
Expand Down
8 changes: 4 additions & 4 deletions app/segments/drill/[id]/submission/input.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ import NavigationRectangle from "~/components/input/navigationRectangle";
import Loading from "~/components/loading";
import { useAlertContext } from "~/context/Alert";
import { useAuthContext } from "~/context/Auth";
import { useBestAttempts } from "~/dbOperations/hooks/useBestAttempts";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";
import { invalidateMultipleKeys } from "~/dbOperations/invalidateMultipleKeys";
import { db } from "~/firebaseConfig";
import { invalidateMultipleKeys } from "~/hooks/invalidateMultipleKeys";
import { useBestAttempts } from "~/hooks/useBestAttempts";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useUserInfo } from "~/hooks/useUserInfo";

/***************************************
* Attempt Submission functions
Expand Down
2 changes: 1 addition & 1 deletion app/segments/drill/[id]/submission/result.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import ErrorComponent from "~/components/errorComponent";
import Header from "~/components/header";
import Loading from "~/components/loading";
import ResultScreen from "~/components/resultScreen";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";

function Result({ submission, setToggleResult }) {
const navigation = useNavigation();
Expand Down
2 changes: 1 addition & 1 deletion components/drillList.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import ErrorComponent from "~/components/errorComponent";
import Loading from "~/components/loading";
import RefreshInvalidate from "~/components/refreshInvalidate";
import { useAuthContext } from "~/context/Auth";
import { useUserInfo } from "~/hooks/useUserInfo";
import { useUserInfo } from "~/dbOperations/hooks/useUserInfo";

export default function DrillList({
drillData,
Expand Down
2 changes: 1 addition & 1 deletion components/refreshInvalidate.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useQueryClient } from "@tanstack/react-query";
import { useCallback, useState } from "react";
import { RefreshControl } from "react-native";
import { invalidateMultipleKeys } from "~/hooks/invalidateMultipleKeys";
import { invalidateMultipleKeys } from "~/dbOperations/invalidateMultipleKeys";

// extra props reason: https://stackoverflow.com/questions/69659094/react-native-custom-refreshcontrol-component-doesnt-work-in-flatlist-on-android
function RefreshInvalidate({ invalidateKeys = [], ...props }) {
Expand Down
4 changes: 2 additions & 2 deletions components/resultScreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import ErrorComponent from "~/components/errorComponent";
import Loading from "~/components/loading";
import RefreshInvalidate from "~/components/refreshInvalidate";
import ShotAccordion from "~/components/shotAccordion";
import { useAttempts } from "~/hooks/useAttempts";
import { useDrillInfo } from "~/hooks/useDrillInfo";
import { useAttempts } from "~/dbOperations/hooks/useAttempts";
import { useDrillInfo } from "~/dbOperations/hooks/useDrillInfo";

export default function ResultScreen({
drillId = null,
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit 9b07911

Please sign in to comment.