qna 등록

This commit is contained in:
focp212@naver.com
2025-09-08 17:59:55 +09:00
parent 5d37dfb253
commit 484c06fba0
3 changed files with 186 additions and 4 deletions

View File

@@ -1,4 +1,4 @@
import { ChangeEvent, useEffect, useState } from 'react';
import { useEffect, useState } from 'react';
import { PATHS } from '@/shared/constants/paths';
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
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 { QnaItem } from '@/entities/support/model/types';
import { SupportQnaItem } from '@/entities/support/ui/qna-item';
import {
useSetHeaderTitle,
useSetHeaderType,
@@ -18,7 +17,6 @@ export const QnaListPage = () => {
const { navigate } = useNavigate();
const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM);
const [searchValue, setSearchValue] = useState<string>('');
const [resultList, setResultList] = useState<Array<QnaItem>>([]);
useSetHeaderTitle('1:1 문의');
@@ -95,7 +93,7 @@ export const QnaListPage = () => {
<div className="apply-row bottom-padding">
<button
className="btn-50 btn-blue flex-1"
onClick={ () => onClickToNavigation }
onClick={ () => onClickToNavigation() }
>1:1 </button>
</div>
</div>

View 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>
</>
);
};

View File

@@ -7,6 +7,7 @@ import { FaqListPage } from './faq/list-page';
import { FaqDetailPage } from './faq/detail-page';
import { QnaListPage } from './qna/list-page';
import { QnaDetailPage } from './qna/detail-page';
import { QnaRegisterPage } from './qna/register-page';
export const SupportPages = () => {
return (
@@ -23,6 +24,7 @@ export const SupportPages = () => {
<Route path={ROUTE_NAMES.support.qna.base}>
<Route path={ROUTE_NAMES.support.qna.list} element={<QnaListPage />} />
<Route path={ROUTE_NAMES.support.qna.detail} element={<QnaDetailPage />} />
<Route path={ROUTE_NAMES.support.qna.register} element={<QnaRegisterPage />} />
</Route>
</SentryRoutes>
</>