diff --git a/public/images/org/imgAboutHeaderInfo.png b/public/images/org/imgAboutHeaderInfo.png new file mode 100644 index 00000000..8b4bea8c Binary files /dev/null and b/public/images/org/imgAboutHeaderInfo.png differ diff --git a/src/assets/img/latestNewsSample.png b/public/images/org/imgLatestNewsInfo.png similarity index 100% rename from src/assets/img/latestNewsSample.png rename to public/images/org/imgLatestNewsInfo.png diff --git a/src/assets/img/partIntroduceSample.png b/public/images/org/imgPartInfo.png similarity index 100% rename from src/assets/img/partIntroduceSample.png rename to public/images/org/imgPartInfo.png diff --git a/public/images/org/imgRecruitHeaderInfo.png b/public/images/org/imgRecruitHeaderInfo.png new file mode 100644 index 00000000..11e47d88 Binary files /dev/null and b/public/images/org/imgRecruitHeaderInfo.png differ diff --git a/public/images/org/imgSubColorInfo.png b/public/images/org/imgSubColorInfo.png index c7bd5a91..3484ae4b 100644 Binary files a/public/images/org/imgSubColorInfo.png and b/public/images/org/imgSubColorInfo.png differ diff --git a/src/components/org/OrgAdmin/AboutSection/CoreValue/index.tsx b/src/components/org/OrgAdmin/AboutSection/CoreValue/index.tsx index 31796b95..0e0ec0d7 100644 --- a/src/components/org/OrgAdmin/AboutSection/CoreValue/index.tsx +++ b/src/components/org/OrgAdmin/AboutSection/CoreValue/index.tsx @@ -2,6 +2,7 @@ import { useFormContext } from 'react-hook-form'; import { VALIDATION_CHECK } from '@/utils/org'; +import RequiredIcon from '../../assets/RequiredIcon'; import MyDropzone from '../../MyDropzone'; import { StDescription, @@ -22,7 +23,10 @@ const CoreValue = () => { 핵심 가치 - 핵심 가치1 + + 핵심 가치 1 + + 이미지는 380x323으로 올려주세요. { (errors as any).coreValue1?.value?.message as string } labelText="가치" + required placeholder="ex. 용기" /> { (errors as any).coreValue1?.description?.message as string } labelText="가치 설명" + required descriptionText="호버 시, 보이는 문구예요." placeholder="ex. 새로운 도전을 위해 과감히 용기내는 사람" /> @@ -61,7 +67,10 @@ const CoreValue = () => { - 핵심 가치2 + + 핵심 가치 2 + + 이미지는 380x323으로 올려주세요. { } labelText="가치" placeholder="ex. 몰입" + required /> { labelText="가치 설명" descriptionText="호버 시, 보이는 문구예요." placeholder="ex. 포기하지 않고 깊이 몰입하는 사람" + required /> - 핵심 가치3 + + 핵심 가치 3 + + 이미지는 380x323으로 올려주세요. { } labelText="가치" placeholder="ex. 화합" + required /> { labelText="가치 설명" descriptionText="호버 시, 보이는 문구예요." placeholder="ex. 서로를 배려하며 함께 화합하는 사람" + required /> diff --git a/src/components/org/OrgAdmin/AboutSection/Curriculum/index.tsx b/src/components/org/OrgAdmin/AboutSection/Curriculum/index.tsx index 7622ef5c..241798b1 100644 --- a/src/components/org/OrgAdmin/AboutSection/Curriculum/index.tsx +++ b/src/components/org/OrgAdmin/AboutSection/Curriculum/index.tsx @@ -3,8 +3,9 @@ import { useFormContext } from 'react-hook-form'; import { PART_KO, PART_LIST, VALIDATION_CHECK } from '@/utils/org'; +import RequiredIcon from '../../assets/RequiredIcon'; import PartCategory from '../../PartCategory'; -import { StInput, StTitle, StWrapper } from '../style'; +import { StInput, StInputLabel, StTitle, StWrapper } from '../style'; import { StContentWrapper, StItem, StList, StWeek } from './style'; const CURRICULUM = PART_LIST.reduce( @@ -29,7 +30,11 @@ const Curriculum = () => { return ( - 파트별 커리큘럼 + 커리큘럼 + + 파트별 커리큘럼 + + { } id={`${selectedPart} week${idx}`} style={{ width: '553px' }} - placeholder={`${selectedPart} 파트 ${idx + 1}주차 커리큘럼을 작성해주세요.`} + placeholder={`${idx + 1}주차 커리큘럼을 작성해주세요.`} /> ))} diff --git a/src/components/org/OrgAdmin/AboutSection/Executives/ExecInfo.tsx b/src/components/org/OrgAdmin/AboutSection/Executives/ExecInfo.tsx index fb229438..196fb1a7 100644 --- a/src/components/org/OrgAdmin/AboutSection/Executives/ExecInfo.tsx +++ b/src/components/org/OrgAdmin/AboutSection/Executives/ExecInfo.tsx @@ -2,6 +2,7 @@ import { useFormContext } from 'react-hook-form'; import { VALIDATION_CHECK } from '@/utils/org'; +import RequiredIcon from '../../assets/RequiredIcon'; import MyDropzone from '../../MyDropzone'; import IcBehanceLogo from '../assets/IcBehanceLogo'; import IcGithubLogo from '../assets/IcGithubLogo'; @@ -25,7 +26,10 @@ const ExecInfo = ({ selectedExec }: ExecInfoProps) => { return ( <> - 프로필 사진 + + 프로필 사진 + + 사진은 1:1 비율로 올려주세요. { } labelText="이름" placeholder="ex. 김솝트" + required /> @@ -75,6 +71,7 @@ const ExecInfo = ({ selectedExec }: ExecInfoProps) => { } labelText="한 줄 소개" placeholder="ex. 새로운 도전을 위해 과감히 용기내는 사람" + required /> SNS diff --git a/src/components/org/OrgAdmin/AboutSection/HeaderBanner/index.tsx b/src/components/org/OrgAdmin/AboutSection/HeaderBanner/index.tsx index 306f13ce..b3b0b153 100644 --- a/src/components/org/OrgAdmin/AboutSection/HeaderBanner/index.tsx +++ b/src/components/org/OrgAdmin/AboutSection/HeaderBanner/index.tsx @@ -1,28 +1,52 @@ +import { IconInfoCircle } from '@sopt-makers/icons'; import { useFormContext } from 'react-hook-form'; +import RequiredIcon from '../../assets/RequiredIcon'; +import Modal from '../../common/Modal'; +import useModal from '../../common/Modal/useModal'; import MyDropzone from '../../MyDropzone'; import { StDescription, StInputLabel, StTitle, StWrapper } from '../style'; -import { StContentWrapper } from './style'; +import { StContentWrapper, StInfoButton, StStretchContainer } from './style'; const HeaderBanner = () => { const method = useFormContext(); + const { isInfoVisible, onInfoToggle } = useModal(); + return ( - - 헤더 - - 이미지 - - 이미지는 1920*630 크기로 올려주세요. ‘소개’탭 가장 상단에 보여지는 - 이미지예요. - - - - + + + + 소개탭 헤더 + + + + + + + 이미지 + + + + 이미지는 1920*630 크기로 올려주세요. ‘소개’탭 가장 상단에 보여지는 + 이미지예요. + + + + + + ); }; diff --git a/src/components/org/OrgAdmin/AboutSection/HeaderBanner/style.ts b/src/components/org/OrgAdmin/AboutSection/HeaderBanner/style.ts index be8d8f24..0a6dc9ac 100644 --- a/src/components/org/OrgAdmin/AboutSection/HeaderBanner/style.ts +++ b/src/components/org/OrgAdmin/AboutSection/HeaderBanner/style.ts @@ -1,6 +1,17 @@ import styled from '@emotion/styled'; +import { colors } from '@sopt-makers/colors'; +export const StStretchContainer = styled.section` + display: flex; + justify-content: space-between; + align-items: baseline; +`; export const StContentWrapper = styled.div` display: flex; flex-direction: column; `; + +export const StInfoButton = styled.button` + color: ${colors.white}; + width: 20px; +`; diff --git a/src/components/org/OrgAdmin/AboutSection/style.ts b/src/components/org/OrgAdmin/AboutSection/style.ts index 0989993b..368867ed 100644 --- a/src/components/org/OrgAdmin/AboutSection/style.ts +++ b/src/components/org/OrgAdmin/AboutSection/style.ts @@ -19,12 +19,19 @@ export const StWrapper = styled.div` `; export const StTitle = styled.h2` + display: flex; + align-items: center; + gap: 8px; + ${fontsObject.TITLE_3_24_SB} margin-bottom: 10px; color: ${colors.white}; `; export const StInputLabel = styled.label` + display: flex; + align-items: center; + gap: 4px; ${fontsObject.LABEL_3_14_SB}; margin-bottom: 8px; color: ${colors.white}; @@ -45,4 +52,8 @@ export const StInput = styled(TextField)` width: 338px; color: ${({ hasValue = true }) => hasValue ? `${colors.white}` : `${colors.gray300}`}; + + & label { + gap: 8px; + } `; diff --git a/src/components/org/OrgAdmin/CommonSection/BrandingColor.tsx b/src/components/org/OrgAdmin/CommonSection/BrandingColor.tsx index 392d5013..0870367d 100644 --- a/src/components/org/OrgAdmin/CommonSection/BrandingColor.tsx +++ b/src/components/org/OrgAdmin/CommonSection/BrandingColor.tsx @@ -1,3 +1,5 @@ +import Modal from '../common/Modal'; +import useModal from '../common/Modal/useModal'; import { StDescription, StInputWrapper, @@ -7,21 +9,34 @@ import { } from '../style'; import BrandingSubColor from './BrandingSubColor'; import ColorInputField from './ColorInputField'; +import { StStretchContainer } from './style'; const BrandingColor = () => { + const { isInfoVisible, onInfoToggle } = useModal(); + return ( - - - 브랜딩 컬러 - 다크 모드를 고려하여 선정해주세요. - - - - - - - - + + + + 브랜딩 컬러 + 다크 모드를 고려하여 선정해주세요. + + + + + + + + {' '} + + ); }; diff --git a/src/components/org/OrgAdmin/CommonSection/BrandingSubColor.tsx b/src/components/org/OrgAdmin/CommonSection/BrandingSubColor.tsx index b4c6c364..7a96ac9b 100644 --- a/src/components/org/OrgAdmin/CommonSection/BrandingSubColor.tsx +++ b/src/components/org/OrgAdmin/CommonSection/BrandingSubColor.tsx @@ -1,26 +1,18 @@ import { IconInfoCircle } from '@sopt-makers/icons'; -import { type MouseEvent, useState } from 'react'; +import { type MouseEvent } from 'react'; import { useFormContext } from 'react-hook-form'; import { VALIDATION_CHECK } from '@/utils/org'; import { StInput, StInputBox } from '../style'; -import { - StColorPreview, - StColorWrapper, - StInfoButton, - StInfoCloseButton, - StInfoDescription, - StInfoImg, - StInfoSubDescription, - StInfoTitle, - StInfoWrapper, -} from './style'; +import { StColorPreview, StColorWrapper, StInfoButton } from './style'; import { expandHexColor } from './utils'; -const BrandingSubColor = () => { - const [isInfoVisible, setIsInfoVisible] = useState(false); - +const BrandingSubColor = ({ + onInfoToggle, +}: { + onInfoToggle: (e: MouseEvent) => void; +}) => { const { register, formState: { errors }, @@ -28,15 +20,10 @@ const BrandingSubColor = () => { setValue, } = useFormContext(); - const handleInfoToggle = (e: MouseEvent) => { - e.preventDefault(); - setIsInfoVisible((prev) => !prev); - }; - return ( - + { value={expandHexColor(watch('brandingColor_point'))} onChange={(e) => setValue('brandingColor_point', e.target.value)} /> - - - ⓘ 서브컬러 (강조 그레이 컬러) 예시 - - ✕ - - - - '지원하기' 탭 속 파트별 소개 '👍이런 분이면 - 좋아요!'의 백그라운 컬러예요. - - - 키컬러 저명도와 그레이 컬러 사이, 컬러를 지정해주세요. - - - ); diff --git a/src/components/org/OrgAdmin/CommonSection/style.ts b/src/components/org/OrgAdmin/CommonSection/style.ts index 4777e6b0..d2fc0fce 100644 --- a/src/components/org/OrgAdmin/CommonSection/style.ts +++ b/src/components/org/OrgAdmin/CommonSection/style.ts @@ -6,6 +6,12 @@ import zIndex from '@/utils/zIndex'; import { StInputLabel, StInputWrapper } from '../style'; +export const StStretchContainer = styled.section` + display: flex; + justify-content: space-between; + align-items: center; +`; + export const StRadioWrapper = styled.div` display: flex; align-items: center; diff --git a/src/components/org/OrgAdmin/home/ButtonSection.tsx b/src/components/org/OrgAdmin/HomeSection/ButtonSection.tsx similarity index 93% rename from src/components/org/OrgAdmin/home/ButtonSection.tsx rename to src/components/org/OrgAdmin/HomeSection/ButtonSection.tsx index 4691d095..85c8f015 100644 --- a/src/components/org/OrgAdmin/home/ButtonSection.tsx +++ b/src/components/org/OrgAdmin/HomeSection/ButtonSection.tsx @@ -1,13 +1,13 @@ import { TextField } from '@sopt-makers/ui'; import { useFormContext } from 'react-hook-form'; -import LiveAppliedButton from '@/components/org/OrgAdmin/home/LiveAppliedButton'; +import LiveAppliedButton from '@/components/org/OrgAdmin/HomeSection/LiveAppliedButton'; import { StButtonFormContainer, StContentContainer, StFirstSectionContainer, StTitle, -} from '@/components/org/OrgAdmin/home/style'; +} from '@/components/org/OrgAdmin/HomeSection/style'; type ButtonSectionProps = { mainButton?: { diff --git a/src/components/org/OrgAdmin/HomeSection/HomeSection.tsx b/src/components/org/OrgAdmin/HomeSection/HomeSection.tsx new file mode 100644 index 00000000..a0b828fa --- /dev/null +++ b/src/components/org/OrgAdmin/HomeSection/HomeSection.tsx @@ -0,0 +1,22 @@ +import NewsSection from '@/components/org/OrgAdmin/HomeSection/NewsSection'; +import PartIntroSection from '@/components/org/OrgAdmin/HomeSection/PartIntroSection'; +import { useAdminInfoQuery } from '@/components/org/OrgAdmin/HomeSection/queries'; +import { + StContainer, + StWrapper, +} from '@/components/org/OrgAdmin/HomeSection/style'; + +const HomeSection = () => { + const { data } = useAdminInfoQuery(); + + return ( + + + + + + + ); +}; + +export default HomeSection; diff --git a/src/components/org/OrgAdmin/home/ImageInput.tsx b/src/components/org/OrgAdmin/HomeSection/ImageInput.tsx similarity index 100% rename from src/components/org/OrgAdmin/home/ImageInput.tsx rename to src/components/org/OrgAdmin/HomeSection/ImageInput.tsx diff --git a/src/components/org/OrgAdmin/home/LiveAppliedButton.tsx b/src/components/org/OrgAdmin/HomeSection/LiveAppliedButton.tsx similarity index 100% rename from src/components/org/OrgAdmin/home/LiveAppliedButton.tsx rename to src/components/org/OrgAdmin/HomeSection/LiveAppliedButton.tsx diff --git a/src/components/org/OrgAdmin/home/Modal.style.ts b/src/components/org/OrgAdmin/HomeSection/Modal.style.ts similarity index 100% rename from src/components/org/OrgAdmin/home/Modal.style.ts rename to src/components/org/OrgAdmin/HomeSection/Modal.style.ts diff --git a/src/components/org/OrgAdmin/home/Modal.tsx b/src/components/org/OrgAdmin/HomeSection/Modal.tsx similarity index 94% rename from src/components/org/OrgAdmin/home/Modal.tsx rename to src/components/org/OrgAdmin/HomeSection/Modal.tsx index ea4b0393..39c1cfff 100644 --- a/src/components/org/OrgAdmin/home/Modal.tsx +++ b/src/components/org/OrgAdmin/HomeSection/Modal.tsx @@ -5,7 +5,7 @@ import { HTMLAttributes, useState } from 'react'; import { useFormContext } from 'react-hook-form'; import Modal from '@/components/common/modal'; -import ImageInput from '@/components/org/OrgAdmin/home/ImageInput'; +import ImageInput from '@/components/org/OrgAdmin/HomeSection/ImageInput'; import { StActionButton, StAddButton, @@ -14,8 +14,8 @@ import { StCancelButton, StModalBtnWrapper, StModalContainer, -} from '@/components/org/OrgAdmin/home/Modal.style'; -import { useAddNewsMutation } from '@/components/org/OrgAdmin/home/queries'; +} from '@/components/org/OrgAdmin/HomeSection/Modal.style'; +import { useAddNewsMutation } from '@/components/org/OrgAdmin/HomeSection/queries'; import { useBooleanState } from '@/hooks/useBooleanState'; /** 최신 소식 추가 모달 */ diff --git a/src/components/org/OrgAdmin/home/NewsItem.tsx b/src/components/org/OrgAdmin/HomeSection/NewsItem.tsx similarity index 87% rename from src/components/org/OrgAdmin/home/NewsItem.tsx rename to src/components/org/OrgAdmin/HomeSection/NewsItem.tsx index 49361980..7760bfea 100644 --- a/src/components/org/OrgAdmin/home/NewsItem.tsx +++ b/src/components/org/OrgAdmin/HomeSection/NewsItem.tsx @@ -1,6 +1,6 @@ import { IconTrash } from '@sopt-makers/icons'; -import { StNewsItem } from '@/components/org/OrgAdmin/home/style'; +import { StNewsItem } from '@/components/org/OrgAdmin/HomeSection/style'; type NewsItemProps = { title: string; diff --git a/src/components/org/OrgAdmin/home/NewsSection.tsx b/src/components/org/OrgAdmin/HomeSection/NewsSection.tsx similarity index 71% rename from src/components/org/OrgAdmin/home/NewsSection.tsx rename to src/components/org/OrgAdmin/HomeSection/NewsSection.tsx index 7e26e248..bde96018 100644 --- a/src/components/org/OrgAdmin/home/NewsSection.tsx +++ b/src/components/org/OrgAdmin/HomeSection/NewsSection.tsx @@ -2,24 +2,28 @@ import { IconInfoCircle, IconPlus } from '@sopt-makers/icons'; import { Button } from '@sopt-makers/ui'; import { useState } from 'react'; -import sampleImg from '@/assets/img/latestNewsSample.png'; import { ActionModal, AddNewsModal, -} from '@/components/org/OrgAdmin/home/Modal'; -import NewsItem from '@/components/org/OrgAdmin/home/NewsItem'; -import { useDeleteNewsMutation } from '@/components/org/OrgAdmin/home/queries'; -import SampleView from '@/components/org/OrgAdmin/home/SampleView'; +} from '@/components/org/OrgAdmin/HomeSection/Modal'; +import NewsItem from '@/components/org/OrgAdmin/HomeSection/NewsItem'; +import { useDeleteNewsMutation } from '@/components/org/OrgAdmin/HomeSection/queries'; import { + StIcon, + StInputLabel, StLeftColumnSection, StNewsHeader, StNewsHeaderText, StNewsList, StNewsSectionContainer, StTitleWithIcon, -} from '@/components/org/OrgAdmin/home/style'; +} from '@/components/org/OrgAdmin/HomeSection/style'; import { useBooleanState } from '@/hooks/useBooleanState'; +import RequiredIcon from '../assets/RequiredIcon'; +import Modal from '../common/Modal'; +import useModal from '../common/Modal/useModal'; + type NewsSectionProps = { latestNews?: { id: number; @@ -40,6 +44,7 @@ const NewsSection = ({ latestNews }: NewsSectionProps) => { } = useBooleanState(); const [deleteId, setDeleteId] = useState(0); + const { isInfoVisible, onInfoToggle } = useModal(); const { mutate } = useDeleteNewsMutation(); @@ -56,12 +61,18 @@ const NewsSection = ({ latestNews }: NewsSectionProps) => { 최신 소식 - + + +

'최신 소식'은 배포 버튼을 거치지 않아도 바로 저장되니, 신중하게 작성해주세요!

+ + 솝트의 최신 소식이 궁금하다면! + +