Skip to content

Commit

Permalink
fix: adjust type to api scheme
Browse files Browse the repository at this point in the history
  • Loading branch information
ooooorobo committed Dec 22, 2024
1 parent da4be84 commit e675a53
Show file tree
Hide file tree
Showing 14 changed files with 87 additions and 68 deletions.
10 changes: 4 additions & 6 deletions src/entities/ideal_partner/api/__mock__/idealPartner.mock.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
import { IdealPartner } from 'src/entities/ideal_partner/model/idealPartnerStore';

export const MockIdealPartner: IdealPartner = {
imageDtoList: [],
ageRange: { max: 25, min: 20 },
drinking: { drinkingAmount: '주 1-2회 가볍게는 괜찮아요', drinkingCategory: 'ONE_TWO_TIMES_A_WEEK' },
heightRange: { max: 180, min: 175 },
hobbies: [{ name: '맛집탐방' }, { name: '뜨개질' }],
hobbies: 'NOT_IMPORTANT',
images: [],
locations: [
{ city: { cityName: '서울시', city: 'SEOUL' }, town: [{ town: 'GANGNAM', townName: '강남구' }] },
{ city: { cityName: '경기도', city: 'GYEONGGI' }, town: [{ town: 'SUWON', townName: '수원시' }] },
],
locations: 'IMPORTANT',
religion: { religionCategory: 'ETC', religionName: '' },
requiredOptions: [],
smoking: { smokingAmount: '', smokingCategory: 'NON_SMOKER' },
smoking: { smokingAmount: '', smokingCategory: 'DOESNT_MATTER' },
style: '눈이 크신 분',
toMatchMaker: '잘 부탁드립니다 !',
};
16 changes: 6 additions & 10 deletions src/entities/ideal_partner/model/convertIdealPartnerToDto.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import { IdealPartner } from 'src/entities/ideal_partner/model/idealPartnerStore';
import { DetailedInfoIdealPartner, IdealPartnerRequest, ImageDto } from 'src/types';
import { convertDtoToLocation } from 'src/entities/profile/model/convertProfileToDto';

export const convertIdealPartnerToDto = (idealPartner: IdealPartner, images: ImageDto[]): IdealPartnerRequest => {
return {
ageRange: idealPartner.ageRange,
heightRange: idealPartner.heightRange,
ageRange: idealPartner.ageRange || undefined,
heightRange: idealPartner.heightRange || undefined,
style: idealPartner.style,
images,
location: {
cities: idealPartner.locations.map((l) => l.city.city),
towns: idealPartner.locations.flatMap((l) => l.town.map((t) => t.town)),
},
hobbies: idealPartner.hobbies.map((h) => h.name),
location: idealPartner.locations,
hobbies: idealPartner.hobbies,
drinking: idealPartner.drinking,
religion: idealPartner.religion,
smoking: idealPartner.smoking,
Expand All @@ -26,10 +22,10 @@ export const convertDtoToIdealPartner = (dto: DetailedInfoIdealPartner): IdealPa
ageRange: dto.ageRange,
drinking: dto.drinking,
heightRange: dto.heightRange,
hobbies: dto.hobbies?.map((h) => ({ name: h })) ?? [],
hobbies: dto.hobbies,
images: [],
imageDtoList: dto.images ?? [],
locations: dto.location ? convertDtoToLocation(dto.location) : [],
locations: dto.location ?? 'NOT_IMPORTANT',
religion: dto.religion,
requiredOptions: dto.requiredOptions ?? [],
smoking: dto.smoking,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { IdealPartner, useIdealPartnerImages } from 'src/entities/ideal_partner/model/idealPartnerStore';
import { AvatarList } from 'src/shared/ui/AvatarList/AvatarList';
import { Chip } from 'src/shared/ui/Chip/Chip';
import { ProfileCellHeader } from 'src/shared/ui/Profile/ProfileCellHeader';
import styles from 'src/shared/ui/Profile/Profile.module.css';
import { getSmokingText } from '../../../profile/lib/getSmokingText';
import { getDrinkingText } from '../../../profile/lib/getDrinkingText';
import { getReligionText } from '../../../profile/lib/getReligionText';
import { getLocationText } from '../../../profile/lib/getLocationText';
import { useProfileEditContext } from 'src/features/EditInfo/ProfileEditContext';

export const IdealPartnerProfile = ({ profile }: { profile: IdealPartner }) => {
Expand Down Expand Up @@ -49,22 +47,14 @@ export const IdealPartnerProfile = ({ profile }: { profile: IdealPartner }) => {
</span>
</div>
)}
{(showBlankValue || profile.locations.length > 0) && (
<div className={styles.Cell}>
<ProfileCellHeader title={'희망 지역'} onClickEdit={() => onClickEdit?.('IDEAL_LOCATION')} />
<span>{profile.locations.map(getLocationText).join(', ')}</span>
</div>
)}
{(showBlankValue || profile.hobbies.length > 0) && (
<div className={styles.Cell}>
<ProfileCellHeader title={'취미'} onClickEdit={() => onClickEdit?.('IDEAL_HOBBY')} />
<div className={styles.ChipList}>
{profile.hobbies.map((hobby) => (
<Chip key={hobby.name}>{hobby.name}</Chip>
))}
</div>
</div>
)}
<div className={styles.Cell}>
<ProfileCellHeader title={'희망 지역'} onClickEdit={() => onClickEdit?.('IDEAL_LOCATION')} />
<span>{profile.locations}</span>
</div>
<div className={styles.Cell}>
<ProfileCellHeader title={'취미'} onClickEdit={() => onClickEdit?.('IDEAL_HOBBY')} />
<div className={styles.ChipList}>{profile.hobbies}</div>
</div>
{(showBlankValue || profile.religion) && (
<div className={styles.Cell}>
<ProfileCellHeader title={'종교'} onClickEdit={() => onClickEdit?.('IDEAL_RELIGION')} />
Expand Down
6 changes: 3 additions & 3 deletions src/entities/location/types/location.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { LocationCitiesItem, LocationTownsItem } from 'src/types';
import { UserInfoLocationCitiesItem, UserInfoLocationTownsItem } from 'src/types';

export type Location = {
city: City;
town: Town[];
};

export type City = {
city: LocationCitiesItem;
city: UserInfoLocationCitiesItem;
cityName: string;
};

export type Town = {
town: LocationTownsItem;
town: UserInfoLocationTownsItem;
townName: string;
};
5 changes: 4 additions & 1 deletion src/entities/profile/api/__mock__/fullProfile.mock.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { MyProfile } from 'src/entities/profile/model/myProfileStore';

export const fullProfileMock: MyProfile = {
imageDtoList: [],
name: '김감자',
gender: 'FEMALE',
birthDate: {
Expand All @@ -24,7 +25,9 @@ export const fullProfileMock: MyProfile = {
religionName: '',
},
hobbies: [{ name: '🧗 클라이밍' }, { name: '🥐 맛집탐방' }, { name: '🎬 영화보기' }],
drinking: '아주 가끔',
drinking: {
drinkingCategory: 'DRINKER',
},
smoking: {
smokingCategory: 'NON_SMOKER',
},
Expand Down
6 changes: 3 additions & 3 deletions src/entities/profile/lib/getDrinkingText.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Drinking } from '../../../types';
import { t } from 'i18next';
import { IdealPartnerDrinking, UserInfoDrinking } from 'src/types';

export const getDrinkingText = (drinking: Drinking) => {
return drinking.drinkingCategory === 'ETC' ? drinking.drinkingAmount : t(`DRINKING_${drinking.drinkingCategory}`);
export const getDrinkingText = (drinking: UserInfoDrinking | IdealPartnerDrinking) => {
return t(`DRINKING_${drinking.drinkingCategory}`);
};
4 changes: 2 additions & 2 deletions src/entities/profile/lib/getSmokingText.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Smoking } from 'src/types';
import { IdealPartnerSmoking, UserInfoSmoking } from 'src/types';
import { t } from 'i18next';

export const getSmokingText = (smoking: Smoking, type: 'IDEAL' | 'INFO') => {
export const getSmokingText = (smoking: UserInfoSmoking | IdealPartnerSmoking, type: 'IDEAL' | 'INFO') => {
if (smoking.smokingCategory === 'ETC') {
return smoking.smokingAmount;
}
Expand Down
2 changes: 1 addition & 1 deletion src/entities/profile/model/convertProfileToDto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { MyProfile } from 'src/entities/profile/model/myProfileStore';
import {
DetailedInfoUserInfo,
ImageDto,
Location as LocationDto,
UserInfoLocation as LocationDto,
UserInfoRequest,
UserInfoRequestMbti,
} from 'src/types';
Expand Down
25 changes: 18 additions & 7 deletions src/entities/profile/model/myProfileStore.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,15 @@ import { DateObj } from 'src/shared/vo/date';
import { Mbti } from 'src/shared/vo/mbti';
import { Hobby } from 'src/entities/hobby/types/hobby';
import { createStoreContext } from 'src/shared/functions/createStoreContext';
import { Book, ImageDto, JobJobCategory, Movie, ReligionReligionCategory, SmokingSmokingCategory } from 'src/types';
import {
Book,
ImageDto,
JobJobCategory,
Movie,
ReligionReligionCategory,
UserInfoDrinkingDrinkingCategory,
UserInfoSmokingSmokingCategory,
} from 'src/types';
import { useCallback, useMemo } from 'react';
import { useDataUrlListFromFiles } from 'src/shared/functions/useDataUrlListFromFiles';

Expand All @@ -27,9 +35,12 @@ export type MyProfile = {
religionName?: string;
};
hobbies: Hobby[];
drinking: string;
drinking: {
drinkingCategory: UserInfoDrinkingDrinkingCategory;
drinkingAmount?: string;
};
smoking: {
smokingCategory: SmokingSmokingCategory;
smokingCategory: UserInfoSmokingSmokingCategory;
smokingAmount?: string;
};
introduction: string;
Expand Down Expand Up @@ -57,8 +68,8 @@ type Action = {
setReligionCategory: (job: ReligionReligionCategory) => void;
setReligionName: (description: string) => void;
setHobbies: (hobbies: Hobby[]) => void;
setDrinking: (value: string) => void;
setSmokingCategory: (value: SmokingSmokingCategory) => void;
setDrinkingCategory: (value: UserInfoDrinkingDrinkingCategory) => void;
setSmokingCategory: (value: UserInfoSmokingSmokingCategory) => void;
setSmokingAmount: (value: string) => void;
setIntroduction: (value: string) => void;
setBookName: (value: string) => void;
Expand Down Expand Up @@ -113,8 +124,8 @@ const createStoreHook = (initialState?: MyProfile) =>
setReligionName: (desc) => set({ religion: { ...get().religion, religionName: desc } }),
hobbies: [],
setHobbies: (hobbies) => set({ hobbies: hobbies }),
drinking: '',
setDrinking: (value) => set({ drinking: value }),
drinking: { drinkingCategory: 'DRINKER', drinkingAmount: '' },
setDrinkingCategory: (value) => set({ drinking: { drinkingCategory: value } }),
smoking: {
smokingCategory: 'ETC',
smokingAmount: '',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ProfileCellHeader } from 'src/shared/ui/Profile/ProfileCellHeader';
import { Chip } from 'src/shared/ui/Chip/Chip';
import { getSmokingText } from 'src/entities/profile/lib/getSmokingText';
import { EditProfileFunction } from 'src/features/EditInfo/ProfileEditContext';
import { getDrinkingText } from 'src/entities/profile/lib/getDrinkingText';

export const TasteInfoGrid = ({ profile, onClickEdit }: { profile: MyProfile; onClickEdit?: EditProfileFunction }) => {
const showBlankValue = Boolean(onClickEdit);
Expand Down Expand Up @@ -32,7 +33,7 @@ export const TasteInfoGrid = ({ profile, onClickEdit }: { profile: MyProfile; on
{(showBlankValue || profile.drinking) && (
<div className={styles.Cell}>
<ProfileCellHeader title={'음주 빈도'} onClickEdit={() => onClickEdit?.('PROFILE_SMOKE_ALCOHOL')} />
<span>{profile.drinking}</span>
<span>{getDrinkingText(profile.drinking)}</span>
</div>
)}
</div>
Expand Down
3 changes: 2 additions & 1 deletion src/entities/profile/ui/ProfileCard/ProfileCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { getJobText } from 'src/entities/profile/lib/getJobText';
import { Avatar } from 'src/shared/ui/Avatar/Avatar';
import { getLocationText } from 'src/entities/profile/lib/getLocationText';
import { convertDtoToLocation } from 'src/entities/profile/model/convertProfileToDto';
import { getDrinkingText } from 'src/entities/profile/lib/getDrinkingText';

type Props = {
profile: ProfileSummary;
Expand Down Expand Up @@ -62,7 +63,7 @@ export const ProfileCard = ({ profile, headerRightSlot }: Props) => {
</tr>
<tr>
<th scope={'row'}>음주</th>
<td>{profile.drinking}</td>
<td>{getDrinkingText(profile.drinking)}</td>
<th scope={'row'}>흡연</th>
<td>{getSmokingText(profile.smoking, 'INFO')}</td>
</tr>
Expand Down
43 changes: 30 additions & 13 deletions src/processes/my_profile/SmokeAlcoholForm/SmokeAlcoholForm.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
import { Input } from 'src/shared/ui/Input/Input';
import styles from './SmokeAlcoholForm.module.css';
import { RadioList, RadioMeta } from 'src/shared/ui/RadioList/RadioList';
import { useMyProfileStore } from 'src/entities/profile/model/myProfileStore';
import { SmokingSmokingCategory } from 'src/types';
import { DistributedOmit } from '../../../shared/types/distributedOmit';
import { useTranslation } from 'react-i18next';
import { useMemo } from 'react';
import { useMyProfileFormProcessStore } from '../_store/myProfileFormProcessStore';
import { UserInfoDrinkingDrinkingCategory, UserInfoSmokingSmokingCategory } from 'src/types';

const smokingRadioMeta: DistributedOmit<RadioMeta<SmokingSmokingCategory>, 'name'>[] = [
const smokingRadioMeta: DistributedOmit<RadioMeta<UserInfoSmokingSmokingCategory>, 'name'>[] = [
{ key: 'SMOKER', allowInput: false },
{ key: 'NON_SMOKER', allowInput: false },
{ key: 'ETC', allowInput: true, placeholder: '기타 의견을 입력해주세요.' },
];

const drinkingRadioMeta: DistributedOmit<RadioMeta<UserInfoDrinkingDrinkingCategory>, 'name'>[] = [
{ key: 'DRINKER', allowInput: false },
{ key: 'NON_DRINKER', allowInput: false },
];

export const SmokeAlcoholForm = () => {
const drinking = useMyProfileStore((state) => state.drinking);
const setDrinking = useMyProfileStore((state) => state.setDrinking);
const drinkingCategory = useMyProfileStore((state) => state.drinking.drinkingCategory);
const setDrinkingCategory = useMyProfileStore((state) => state.setDrinkingCategory);
const smokingCategory = useMyProfileStore((state) => state.smoking.smokingCategory);
const smokingAmount = useMyProfileStore((state) => state.smoking.smokingAmount);
const setSmokingCategory = useMyProfileStore((state) => state.setSmokingCategory);
Expand All @@ -31,32 +35,45 @@ export const SmokeAlcoholForm = () => {
})),
[t],
);
const drinkingMeta = useMemo(
() =>
drinkingRadioMeta.map((m) => ({
...m,
name: t(`INFO_DRINKING_${m.key}`),
})),
[t],
);

const addTouchedStep = useMyProfileFormProcessStore((state) => state.addTouchedStep);
const touchedSteps = useMyProfileFormProcessStore((state) => state.touchedSteps);

const onSelect = (category: SmokingSmokingCategory) => {
const onSelectDrinking = (category: UserInfoDrinkingDrinkingCategory) => {
setDrinkingCategory(category);
addTouchedStep('PROFILE_SMOKE_ALCOHOL');
};

const onSelectSmoking = (category: UserInfoSmokingSmokingCategory) => {
setSmokingCategory(category);
addTouchedStep('PROFILE_SMOKE_ALCOHOL');
};

return (
<section className={styles.Container}>
<fieldset>
<legend className={`strong ${styles.Legend}`}>술자리 빈도</legend>
<Input
placeholder={'ex. 가볍게 주 2회, 친구들과 주 1회, 회식 매 달 1회...'}
value={drinking}
onChange={(e) => setDrinking(e.target.value)}
<legend className={`strong ${styles.Legend}`}>음주 여부</legend>
<RadioList
radioMetaList={drinkingMeta}
selected={touchedSteps.has('PROFILE_SMOKE_ALCOHOL') ? drinkingCategory : null}
onSelect={onSelectDrinking}
/>
</fieldset>
</fieldset>{' '}
<fieldset>
<legend className={`strong ${styles.Legend}`}>흡연 여부</legend>
<RadioList
radioMetaList={meta}
selected={touchedSteps.has('PROFILE_SMOKE_ALCOHOL') ? smokingCategory : null}
inputValue={smokingAmount}
onSelect={onSelect}
onSelect={onSelectSmoking}
onChangeInputValue={setSmokingAmount}
/>
</fieldset>
Expand Down
2 changes: 2 additions & 0 deletions src/shared/lib/kakao/KakaoSdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ export class KakaoSdk {
integrity: 'sha384-TiCUE00h649CAMonG018J2ujOgDKW/kVWlChEuu4jK2vxfAAD0eZxzCKakxg55G4',
crossOrigin: 'anonymous',
});
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
KakaoSdk.sdkInstance = window.Kakao;
KakaoSdk.sdkInstance.init(import.meta.env.VITE_KAKAO_SDK_KEY);
KakaoSdk.sdkInstance.isInitialized();
Expand Down
4 changes: 2 additions & 2 deletions src/shared/ui/AvatarList/AvatarList.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ export default meta;
type Story = StoryObj<typeof AvatarList>;

function AvatarListStory() {
const [files, setFiles] = useState<File[]>([]);
return <AvatarList files={files} setFiles={setFiles} />;
const [, setFiles] = useState<File[]>([]);
return <AvatarList imageDtoList={[]} setFiles={setFiles} />;
}

export const Default: Story = {
Expand Down

0 comments on commit e675a53

Please sign in to comment.