qna 등록
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { ChangeEvent, useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { PATHS } from '@/shared/constants/paths';
|
import { PATHS } from '@/shared/constants/paths';
|
||||||
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
||||||
import { HeaderType } from '@/entities/common/model/types';
|
import { HeaderType } from '@/entities/common/model/types';
|
||||||
@@ -6,7 +6,6 @@ import { useQnaListMutation } from '@/entities/support/api/use-qna-list-mutation
|
|||||||
import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constants';
|
import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constants';
|
||||||
import { QnaItem } from '@/entities/support/model/types';
|
import { QnaItem } from '@/entities/support/model/types';
|
||||||
import { SupportQnaItem } from '@/entities/support/ui/qna-item';
|
import { SupportQnaItem } from '@/entities/support/ui/qna-item';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
useSetHeaderTitle,
|
useSetHeaderTitle,
|
||||||
useSetHeaderType,
|
useSetHeaderType,
|
||||||
@@ -18,7 +17,6 @@ export const QnaListPage = () => {
|
|||||||
const { navigate } = useNavigate();
|
const { navigate } = useNavigate();
|
||||||
|
|
||||||
const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM);
|
const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM);
|
||||||
const [searchValue, setSearchValue] = useState<string>('');
|
|
||||||
const [resultList, setResultList] = useState<Array<QnaItem>>([]);
|
const [resultList, setResultList] = useState<Array<QnaItem>>([]);
|
||||||
|
|
||||||
useSetHeaderTitle('1:1 문의');
|
useSetHeaderTitle('1:1 문의');
|
||||||
@@ -95,7 +93,7 @@ export const QnaListPage = () => {
|
|||||||
<div className="apply-row bottom-padding">
|
<div className="apply-row bottom-padding">
|
||||||
<button
|
<button
|
||||||
className="btn-50 btn-blue flex-1"
|
className="btn-50 btn-blue flex-1"
|
||||||
onClick={ () => onClickToNavigation }
|
onClick={ () => onClickToNavigation() }
|
||||||
>1:1 문의하기</button>
|
>1:1 문의하기</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
182
src/pages/support/qna/register-page.tsx
Normal file
182
src/pages/support/qna/register-page.tsx
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
import { ChangeEvent, useState } from 'react';
|
||||||
|
import { PATHS } from '@/shared/constants/paths';
|
||||||
|
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
||||||
|
import { useQnaSaveMutation } from '@/entities/support/api/use-qna-save-mutation';
|
||||||
|
import { HeaderType } from '@/entities/common/model/types';
|
||||||
|
import {
|
||||||
|
useSetHeaderTitle,
|
||||||
|
useSetHeaderType,
|
||||||
|
useSetFooterMode,
|
||||||
|
useSetOnBack
|
||||||
|
} from '@/widgets/sub-layout/use-sub-layout';
|
||||||
|
|
||||||
|
export enum QnaRegisterPropsName {
|
||||||
|
Mid = 'Mid',
|
||||||
|
CounselType = 'CounselType',
|
||||||
|
RequestName = 'RequestName',
|
||||||
|
RequestTel = 'RequestTel',
|
||||||
|
RequestEmail = 'RequestEmail',
|
||||||
|
Title = 'Title',
|
||||||
|
Contents = 'Contents',
|
||||||
|
};
|
||||||
|
|
||||||
|
export const QnaRegisterPage = () => {
|
||||||
|
const { navigate } = useNavigate();
|
||||||
|
|
||||||
|
const [mid, setMid] = useState<string>('string');
|
||||||
|
const [counselType, setCounselType] = useState<string>('st');
|
||||||
|
const [requestName, setRequestName] = useState<string>('');
|
||||||
|
const [requestTel, setRequestTel] = useState<string>('');
|
||||||
|
const [requestEmail, setRequestEmail] = useState<string>('');
|
||||||
|
const [title, setTitle] = useState<string>('');
|
||||||
|
const [contents, setContents] = useState<string>('');
|
||||||
|
|
||||||
|
useSetHeaderTitle('1:1 문의');
|
||||||
|
useSetHeaderType(HeaderType.LeftArrow);
|
||||||
|
useSetFooterMode(false);
|
||||||
|
useSetOnBack(() => {
|
||||||
|
navigate(PATHS.support.qna.list);
|
||||||
|
});
|
||||||
|
|
||||||
|
const { mutateAsync: qnaSave } = useQnaSaveMutation();
|
||||||
|
|
||||||
|
const setInputValue = (
|
||||||
|
e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>,
|
||||||
|
key: string
|
||||||
|
) => {
|
||||||
|
let value = e.target.value;
|
||||||
|
if(key === QnaRegisterPropsName.Mid){
|
||||||
|
setMid(value);
|
||||||
|
}
|
||||||
|
else if(key === QnaRegisterPropsName.CounselType){
|
||||||
|
setCounselType(value);
|
||||||
|
}
|
||||||
|
else if(key === QnaRegisterPropsName.RequestName){
|
||||||
|
setRequestName(value);
|
||||||
|
}
|
||||||
|
else if(key === QnaRegisterPropsName.RequestTel){
|
||||||
|
setRequestTel(value);
|
||||||
|
}
|
||||||
|
else if(key === QnaRegisterPropsName.RequestEmail){
|
||||||
|
setRequestEmail(value);
|
||||||
|
}
|
||||||
|
else if(key === QnaRegisterPropsName.Title){
|
||||||
|
setTitle(value);
|
||||||
|
}
|
||||||
|
else if(key === QnaRegisterPropsName.Contents){
|
||||||
|
setContents(value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const callRegister = () => {
|
||||||
|
let params = {
|
||||||
|
mid: mid,
|
||||||
|
counselType: counselType,
|
||||||
|
requestName: requestName,
|
||||||
|
requestTel: requestTel,
|
||||||
|
requestEmail: requestEmail,
|
||||||
|
title: title,
|
||||||
|
contents: contents,
|
||||||
|
};
|
||||||
|
qnaSave(params).then((rs) => {
|
||||||
|
console.log(rs);
|
||||||
|
alert('성공');
|
||||||
|
navigate(PATHS.support.qna.list);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const onClickToRegisterQna = () => {
|
||||||
|
callRegister();
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<main>
|
||||||
|
<div className="tab-content">
|
||||||
|
<div className="tab-pane active">
|
||||||
|
<div className="inq-form">
|
||||||
|
<div className="inq-field">
|
||||||
|
<div className="inq-label">
|
||||||
|
제목 <span className="red">*</span>
|
||||||
|
</div>
|
||||||
|
<div className="inq-control">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={ title }
|
||||||
|
onChange={ (e: ChangeEvent<HTMLInputElement>) => setInputValue(e, QnaRegisterPropsName.Title) }
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="inq-field">
|
||||||
|
<div className="inq-label">
|
||||||
|
문의유형 <span className="red">*</span>
|
||||||
|
</div>
|
||||||
|
<div className="inq-control">
|
||||||
|
<select
|
||||||
|
value={ counselType }
|
||||||
|
onChange={ (e: ChangeEvent<HTMLSelectElement>) => setInputValue(e, QnaRegisterPropsName.CounselType) }
|
||||||
|
>
|
||||||
|
<option>선택</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="inq-field">
|
||||||
|
<div className="inq-label">
|
||||||
|
요청자명 <span className="red">*</span>
|
||||||
|
</div>
|
||||||
|
<div className="inq-control">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={ requestName }
|
||||||
|
onChange={ (e: ChangeEvent<HTMLInputElement>) => setInputValue(e, QnaRegisterPropsName.RequestName) }
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="inq-field">
|
||||||
|
<div className="inq-label">
|
||||||
|
휴대폰번호 <span className="red">*</span>
|
||||||
|
</div>
|
||||||
|
<div className="inq-control">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="‘-’를 빼고 입력하세요"
|
||||||
|
value={ requestTel }
|
||||||
|
onChange={ (e: ChangeEvent<HTMLInputElement>) => setInputValue(e, QnaRegisterPropsName.RequestTel) }
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="inq-field">
|
||||||
|
<div className="inq-label">이메일 주소</div>
|
||||||
|
<div className="inq-control">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="TEST123@nicepay.com"
|
||||||
|
value={ requestEmail }
|
||||||
|
onChange={ (e: ChangeEvent<HTMLInputElement>) => setInputValue(e, QnaRegisterPropsName.RequestEmail) }
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="inq-text">
|
||||||
|
<div className="inq-text-label">
|
||||||
|
문의내용 <span className="red">*</span>
|
||||||
|
</div>
|
||||||
|
<div className="inq-text-body">
|
||||||
|
<textarea
|
||||||
|
value={ contents }
|
||||||
|
onChange={ (e: ChangeEvent<HTMLTextAreaElement>) => setInputValue(e, QnaRegisterPropsName.Contents) }
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="apply-row">
|
||||||
|
<button
|
||||||
|
className="btn-50 btn-blue flex-1"
|
||||||
|
onClick={ () => onClickToRegisterQna() }
|
||||||
|
>요청</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -7,6 +7,7 @@ import { FaqListPage } from './faq/list-page';
|
|||||||
import { FaqDetailPage } from './faq/detail-page';
|
import { FaqDetailPage } from './faq/detail-page';
|
||||||
import { QnaListPage } from './qna/list-page';
|
import { QnaListPage } from './qna/list-page';
|
||||||
import { QnaDetailPage } from './qna/detail-page';
|
import { QnaDetailPage } from './qna/detail-page';
|
||||||
|
import { QnaRegisterPage } from './qna/register-page';
|
||||||
|
|
||||||
export const SupportPages = () => {
|
export const SupportPages = () => {
|
||||||
return (
|
return (
|
||||||
@@ -23,6 +24,7 @@ export const SupportPages = () => {
|
|||||||
<Route path={ROUTE_NAMES.support.qna.base}>
|
<Route path={ROUTE_NAMES.support.qna.base}>
|
||||||
<Route path={ROUTE_NAMES.support.qna.list} element={<QnaListPage />} />
|
<Route path={ROUTE_NAMES.support.qna.list} element={<QnaListPage />} />
|
||||||
<Route path={ROUTE_NAMES.support.qna.detail} element={<QnaDetailPage />} />
|
<Route path={ROUTE_NAMES.support.qna.detail} element={<QnaDetailPage />} />
|
||||||
|
<Route path={ROUTE_NAMES.support.qna.register} element={<QnaRegisterPage />} />
|
||||||
</Route>
|
</Route>
|
||||||
</SentryRoutes>
|
</SentryRoutes>
|
||||||
</>
|
</>
|
||||||
|
|||||||
Reference in New Issue
Block a user