diff --git a/src/App.test.jsx b/src/App.test.jsx
index 009cfd4..154a9b9 100644
--- a/src/App.test.jsx
+++ b/src/App.test.jsx
@@ -35,7 +35,7 @@ describe('App', () => {
it('renders the study list page', () => {
const { container } = renderApp({ path: '/' });
- expect(container).toHaveTextContent('스터디 목록');
+ expect(container).toHaveTextContent('지금 바로 시작하세요!');
});
});
diff --git a/src/components/common/Tags.jsx b/src/components/common/Tags.jsx
index 28d9ca9..501ad44 100644
--- a/src/components/common/Tags.jsx
+++ b/src/components/common/Tags.jsx
@@ -2,7 +2,29 @@ import React from 'react';
import styled from '@emotion/styled';
-const TagsWrapper = styled.div``;
+import { Link } from 'react-router-dom';
+
+import palette from '../../styles/palette';
+
+const TagsWrapper = styled.div`
+ margin-top: 1rem;
+ .lang {
+ display: inline-flex;
+ align-items: center;
+ padding-left: .6em;
+ padding-right: .6em;
+ height: 3em;
+ font-weight: bold;
+ font-size: .6em;
+ border-radius: .6em;
+ margin-right: 0.5rem;
+ color: ${palette.teal[7]};
+ background:${palette.gray[1]};
+ &:hover {
+ color: ${palette.teal[5]};
+ }
+ }
+`;
const Tags = ({ tags }) => {
if (!tags || !tags.length) {
@@ -12,7 +34,13 @@ const Tags = ({ tags }) => {
return (
{tags.map((tag) => (
- {`#${tag}`}
+
+ {`#${tag}`}
+
))}
);
diff --git a/src/components/common/Tags.test.jsx b/src/components/common/Tags.test.jsx
index c2e4b68..cd31af0 100644
--- a/src/components/common/Tags.test.jsx
+++ b/src/components/common/Tags.test.jsx
@@ -1,14 +1,18 @@
import React from 'react';
+import { MemoryRouter } from 'react-router-dom';
+
import { render } from '@testing-library/react';
import Tags from './Tags';
describe('Tags', () => {
const renderTags = (tags) => render((
-
+
+
+
));
context('with tags', () => {
diff --git a/src/components/introduce/StudyIntroduceForm.test.jsx b/src/components/introduce/StudyIntroduceForm.test.jsx
index 8c6b47a..573cd68 100644
--- a/src/components/introduce/StudyIntroduceForm.test.jsx
+++ b/src/components/introduce/StudyIntroduceForm.test.jsx
@@ -1,14 +1,18 @@
import React from 'react';
+import { MemoryRouter } from 'react-router-dom';
+
import { render } from '@testing-library/react';
import StudyIntroduceForm from './StudyIntroduceForm';
describe('StudyIntroduceForm', () => {
const renderStudyIntroduceForm = ({ group }) => render((
-
+
+
+
));
it('renders study group title and contents', () => {
diff --git a/src/components/main/StudyGroup.jsx b/src/components/main/StudyGroup.jsx
index 2de0d8f..38bc4bb 100644
--- a/src/components/main/StudyGroup.jsx
+++ b/src/components/main/StudyGroup.jsx
@@ -1,21 +1,55 @@
import React from 'react';
+
import { Link } from 'react-router-dom';
import styled from '@emotion/styled';
+
import Tags from '../common/Tags';
+import palette from '../../styles/palette';
-const StudyGroupWrapper = styled.div``;
+const StudyGroupWrapper = styled.div`
+ margin: 1em .5em 1em .5em;
+ padding: 2em 0 1em 1em;
+ width: 28%;
+ border: 2px solid ${palette.gray[4]};
+ border-radius: 1rem;
+`;
const HeaderLink = styled(Link)`
- font-size: 1.5em;
- margin-bottom: 0;
- margin-top: 0;
- font-weight: bold;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 2rem;
+ font-weight: 500;
+ font-family: 'Nanum Pen Script', cursive;
&:hover {
- color: gray;
+ color: ${palette.gray[6]};
+ }
+`;
+
+const StudyInfoWrapper = styled.div`
+ margin: 1rem 0 1rem 0;
+ .moderator{
+ margin-bottom: 1rem;
+ color: ${palette.gray[5]};
+ font-weight: bold;
}
`;
+const DateTimeChange = styled.div`
+ margin-left: 1.5rem;
+ font-weight: 600;
+ font-size: 1.1rem;
+ font-family: 'Gamja Flower', cursive;
+ padding: .1rem .5rem .1rem .5rem;
+ display: inline-flex;
+ color: white;
+ border-radius: 0.5rem;
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+ background: ${palette.cyan[4]};
+`;
+
const StudyGroup = ({ group }) => {
const {
id, moderatorId, title, personnel, applyEndDate, tags, participants,
@@ -26,14 +60,17 @@ const StudyGroup = ({ group }) => {
{title}
-
-
{moderatorId}
-
{`모집 인원: ${participants.length} / ${personnel}`}
+
+ {moderatorId}
+
+ {`모집 인원: ${participants.length} / ${personnel}`}
+ 모집중
+
-
{`마감 일자: ${applyEndDate}`}
+ {`마감 일자: ${applyEndDate}`}
-
+
);
};
diff --git a/src/components/main/StudyGroups.jsx b/src/components/main/StudyGroups.jsx
index 4a4cd56..f608ea2 100644
--- a/src/components/main/StudyGroups.jsx
+++ b/src/components/main/StudyGroups.jsx
@@ -4,7 +4,12 @@ import styled from '@emotion/styled';
import StudyGroup from './StudyGroup';
-const StudyGroupsWrapper = styled.div``;
+const StudyGroupsWrapper = styled.div`
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-content: space-between;
+`;
const StudyGroups = ({ groups }) => (
diff --git a/src/containers/groups/StudyGroupsContainer.jsx b/src/containers/groups/StudyGroupsContainer.jsx
index 3f5a6a3..6301726 100644
--- a/src/containers/groups/StudyGroupsContainer.jsx
+++ b/src/containers/groups/StudyGroupsContainer.jsx
@@ -2,13 +2,9 @@ import React from 'react';
import { useSelector } from 'react-redux';
-import styled from '@emotion/styled';
-
import StudyGroups from '../../components/main/StudyGroups';
import { get } from '../../../utils';
-const StudyGroupsContainerBlock = styled.div``;
-
const StudyGroupsContainer = () => {
const groups = useSelector(get('groups'));
@@ -17,9 +13,7 @@ const StudyGroupsContainer = () => {
}
return (
-
-
-
+
);
};
diff --git a/src/containers/introduce/IntroduceContainer.test.jsx b/src/containers/introduce/IntroduceContainer.test.jsx
index 9b3da5f..ceda2e0 100644
--- a/src/containers/introduce/IntroduceContainer.test.jsx
+++ b/src/containers/introduce/IntroduceContainer.test.jsx
@@ -4,6 +4,7 @@ import { useDispatch, useSelector } from 'react-redux';
import { render } from '@testing-library/react';
+import { MemoryRouter } from 'react-router-dom';
import IntroduceContainer from './IntroduceContainer';
describe('IntroduceContainer', () => {
@@ -19,9 +20,11 @@ describe('IntroduceContainer', () => {
}));
});
- const renderIntroduceContainer = ({ id }) => render(
- ,
- );
+ const renderIntroduceContainer = ({ id }) => render((
+
+
+
+ ));
context('with group', () => {
given('group', () => ({
diff --git a/src/index.css b/src/index.css
index 6a1bd83..5b22029 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,3 +1,9 @@
+@import url('https://fonts.googleapis.com/css2?family=Gamja+Flower&family=Nanum+Pen+Script&display=swap');
+/*
+font-family: 'Gamja Flower', cursive;
+font-family: 'Nanum Pen Script', cursive;
+*/
+
* {
box-sizing: inherit;
}
@@ -6,3 +12,7 @@ a {
color: inherit;
text-decoration: none;
}
+
+body {
+ margin: 0;
+}
\ No newline at end of file
diff --git a/src/pages/IntroducePage.jsx b/src/pages/IntroducePage.jsx
index 13b650e..c90d91b 100644
--- a/src/pages/IntroducePage.jsx
+++ b/src/pages/IntroducePage.jsx
@@ -3,6 +3,7 @@ import React from 'react';
import { useParams } from 'react-router-dom';
import styled from '@emotion/styled';
+
import IntroduceContainer from '../containers/introduce/IntroduceContainer';
const IntroducePageWrapper = styled.div``;
diff --git a/src/pages/IntroducePage.test.jsx b/src/pages/IntroducePage.test.jsx
index ea45f0f..f182541 100644
--- a/src/pages/IntroducePage.test.jsx
+++ b/src/pages/IntroducePage.test.jsx
@@ -33,9 +33,11 @@ describe('IntroducePage', () => {
it('renders title', () => {
const params = { id: '1' };
- const { container } = render(
- ,
- );
+ const { container } = render((
+
+
+
+ ));
expect(container).toHaveTextContent('스터디를 소개합니다. 1');
});
diff --git a/src/pages/MainPage.jsx b/src/pages/MainPage.jsx
index cd873ae..457f483 100644
--- a/src/pages/MainPage.jsx
+++ b/src/pages/MainPage.jsx
@@ -6,8 +6,11 @@ import styled from '@emotion/styled';
import { loadStudyGroups } from '../reducers/slice';
import StudyGroupsContainer from '../containers/groups/StudyGroupsContainer';
+import Responsive from '../styles/Responsive';
-const MainPageWrapper = styled.div``;
+const MainPageWrapper = styled(Responsive)`
+
+`;
const MainPage = () => {
const dispatch = useDispatch();
@@ -18,7 +21,7 @@ const MainPage = () => {
return (
- 스터디 목록
+ 지금 바로 시작하세요!
);
diff --git a/src/pages/MainPage.test.jsx b/src/pages/MainPage.test.jsx
index 6718c95..a7bd0ed 100644
--- a/src/pages/MainPage.test.jsx
+++ b/src/pages/MainPage.test.jsx
@@ -27,7 +27,7 @@ describe('MainPage', () => {
it('renders Main Page Title', () => {
const { container } = renderMainPage();
- expect(container).toHaveTextContent('스터디 목록');
+ expect(container).toHaveTextContent('지금 바로 시작하세요!');
});
it('calls dispatch with loadStudyGroups action', () => {
diff --git a/src/styles/Responsive.jsx b/src/styles/Responsive.jsx
new file mode 100644
index 0000000..d580c64
--- /dev/null
+++ b/src/styles/Responsive.jsx
@@ -0,0 +1,26 @@
+/* eslint-disable react/jsx-props-no-spreading */
+import React from 'react';
+
+import styled from '@emotion/styled';
+
+const ResponsiveContainer = styled.div`
+ padding-left: 1rem;
+ padding-right: 1rem;
+ width: 1024px;
+ margin: 0 auto;
+
+ @media (max-width: 1024px) {
+ width: 768px;
+ }
+ @media (max-width: 768px) {
+ width: 100%;
+ }
+`;
+
+const Responsive = ({ children, ...rest }) => (
+
+ {children}
+
+);
+
+export default Responsive;
diff --git a/src/styles/palette.js b/src/styles/palette.js
new file mode 100644
index 0000000..df2a8c3
--- /dev/null
+++ b/src/styles/palette.js
@@ -0,0 +1,64 @@
+const palette = {
+ gray: [
+ '#f8f9fa',
+ '#f1f3f5',
+ '#e9ecef',
+ '#dee2e6',
+ '#ced4da',
+ '#adb5bd',
+ '#868e96',
+ '#495057',
+ '#343a40',
+ '#212529',
+ ],
+ cyan: [
+ '#e3fafc',
+ '#c5f6fa',
+ '#99e9f2',
+ '#66d9e8',
+ '#3bc9db',
+ '#22b8cf',
+ '#15aabf',
+ '#1098ad',
+ '#0c8599',
+ '#0b7285',
+ ],
+ orange: [
+ '#fff4e6',
+ '#ffe8cc',
+ '#ffd8a8',
+ '#ffc078',
+ '#ffa94d',
+ '#ff922b',
+ '#fd7e14',
+ '#f76707',
+ '#e8590c',
+ '#d9480f',
+ ],
+ teal: [
+ '#e6fcf5',
+ '#c3fae8',
+ '#96f2d7',
+ '#63e6be',
+ '#38d9a9',
+ '#20c997',
+ '#12b886',
+ '#0ca678',
+ '#099268',
+ '#087f5b',
+ ],
+ violet: [
+ '#f3f0ff',
+ '#e5dbff',
+ '#d0bfff',
+ '#b197fc',
+ '#9775fa',
+ '#845ef7',
+ '#7950f2',
+ '#7048e8',
+ '#6741d9',
+ '#5f3dc4',
+ ],
+};
+
+export default palette;