diff --git a/package-lock.json b/package-lock.json
index ce71b1a..c24f578 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -23,6 +23,7 @@
"react": "^18.2.0",
"react-cookie": "^6.1.1",
"react-dom": "^18.2.0",
+ "react-ga4": "^2.1.0",
"react-hook-form": "^7.51.0",
"react-infinite-scroller": "^1.2.6",
"react-query": "^3.39.3",
@@ -13492,6 +13493,11 @@
}
}
},
+ "node_modules/react-ga4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz",
+ "integrity": "sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ=="
+ },
"node_modules/react-hook-form": {
"version": "7.51.0",
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.0.tgz",
diff --git a/package.json b/package.json
index 40acb7a..db52b56 100644
--- a/package.json
+++ b/package.json
@@ -19,6 +19,7 @@
"react": "^18.2.0",
"react-cookie": "^6.1.1",
"react-dom": "^18.2.0",
+ "react-ga4": "^2.1.0",
"react-hook-form": "^7.51.0",
"react-infinite-scroller": "^1.2.6",
"react-query": "^3.39.3",
diff --git a/src/App.jsx b/src/App.jsx
index 951e6dd..4dabcaf 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -5,6 +5,7 @@ import { CookiesProvider } from 'react-cookie';
import { ChakraProvider } from '@chakra-ui/react';
import spinner from './assets/spinner.gif';
import Router from './shared/components/common/Router';
+import { BrowserRouter } from 'react-router-dom';
const queryClient = new QueryClient({
defaultOptions: {
@@ -30,7 +31,9 @@ function App() {
}>
-
+
+
+
diff --git a/src/index.jsx b/src/index.jsx
index dac4ede..d50e690 100644
--- a/src/index.jsx
+++ b/src/index.jsx
@@ -2,6 +2,11 @@ import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
+import ReactGA from "react-ga4";
+
+if (import.meta.env.VITE_GOOGLE_ANALYTICS) {
+ ReactGA.initialize(import.meta.env.VITE_GOOGLE_ANALYTICS);
+}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
diff --git a/src/pages/MakeStudy/components/steps/AddStudyMember.jsx b/src/pages/MakeStudy/components/steps/AddStudyMember.jsx
index 339ea13..db16337 100644
--- a/src/pages/MakeStudy/components/steps/AddStudyMember.jsx
+++ b/src/pages/MakeStudy/components/steps/AddStudyMember.jsx
@@ -1,16 +1,18 @@
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
import { BaekjoonIdTag } from '../../../../shared/components/Tag';
import ModalLayout from '../../../../shared/layout/ModalLayout';
import InputContainer from '../../../../shared/components/InputContainer';
import Input from '../../../../shared/components/Input';
import useCheckId from '../../../../shared/hooks/api/useCheckId';
-import { useStudyStore, useStudyActions } from '../../../../store/studyStore';
+import { useStudyStore } from '../../../../store/studyStore';
import usePostStudy from '../../hooks/api/usePostStudy';
import { makeStudyStepTitle } from '../../../../shared/constants/steps';
import { useQueryClient } from 'react-query';
+import useSearchUserId from '../../../../shared/hooks/api/useSearchUserId';
const AddStudyMember = ({ onPrev, clickHandler }) => {
const [term, setTerm] = useState('');
+ const [bjId, setBjId] = useState('')
const {
studyName,
description,
@@ -26,12 +28,19 @@ const AddStudyMember = ({ onPrev, clickHandler }) => {
members,
} = useStudyStore();
- const { addMember } = useStudyActions();
+ const { refetch: refetchSearchUserId } = useSearchUserId(bjId)
const onCheckIdSuccessCallback = data => {
if (data.valid) {
- addMember(data.bjname);
+ setBjId(data.bjname)
}
};
+
+ useEffect(() => {
+ if (bjId) {
+ refetchSearchUserId();
+ }
+ }, [bjId])
+
const { refetch } = useCheckId(term, onCheckIdSuccessCallback);
const handleKeyDown = e => {
@@ -62,7 +71,7 @@ const AddStudyMember = ({ onPrev, clickHandler }) => {
openchat: kakaoUrl,
main_language: language,
level,
- members,
+ members: members.map(item => item.userId),
area: studyArea.area === '전국' ? 'ALL' : studyArea.area,
city: studyArea.city === '전체' ? 'ALL' : studyArea.city,
how_many: solvedProblemNumber,
@@ -92,7 +101,7 @@ const AddStudyMember = ({ onPrev, clickHandler }) => {
{members &&
members.map((member, idx) => (
- {member}
+ {member.bjId}
))}
diff --git a/src/shared/components/common/Router.jsx b/src/shared/components/common/Router.jsx
index 885a8af..3f1ca54 100644
--- a/src/shared/components/common/Router.jsx
+++ b/src/shared/components/common/Router.jsx
@@ -1,7 +1,7 @@
import { lazy, useEffect } from 'react';
import useGetUserInfo from '../../hooks/api/useGetUserInfo';
import { useUserActions } from '../../../store/userStore';
-import { BrowserRouter, Routes, Route } from 'react-router-dom';
+import { Routes, Route } from 'react-router-dom';
import { getAccessToken } from '../../utils/auth';
const Landing = lazy(() => import('../../../pages/Landing'));
@@ -36,7 +36,7 @@ const Router = () => {
}, [userInfo]);
return (
-
+
} />
} />
@@ -53,7 +53,7 @@ const Router = () => {
} />
} />
-
+
);
};
diff --git a/src/shared/hooks/api/useSearchUserId.js b/src/shared/hooks/api/useSearchUserId.js
new file mode 100644
index 0000000..352dff6
--- /dev/null
+++ b/src/shared/hooks/api/useSearchUserId.js
@@ -0,0 +1,25 @@
+import { useQuery } from 'react-query';
+import { api } from '.';
+import { useStudyActions } from '../../../store/studyStore';
+
+const useSearchUserId = bjId => {
+ const { addMember } = useStudyActions();
+ return useQuery(
+ 'searchUserId',
+ async () => {
+ const response = await api.get(`/api/user/search/userId?bjId=${bjId}`);
+ return response.data;
+ },
+ {
+ enabled: false,
+ onSuccess: data => {
+ addMember({
+ userId: data.userId,
+ bjId: bjId,
+ });
+ },
+ },
+ );
+};
+
+export default useSearchUserId;