Merge branch 'ui' of git.backyard.segmentfault.com:opensource/answer into ui

This commit is contained in:
shuai 2022-09-29 12:34:42 +08:00
commit 7e6de19f1c
16 changed files with 47 additions and 45 deletions

View File

@ -80,7 +80,7 @@ export interface RegisterReqParams extends LoginReqParams {
name: string;
}
export interface ModifyPassReq {
export interface ModifyPasswordReq {
old_pass: string;
pass: string;
}
@ -137,7 +137,7 @@ export interface ImgCodeRes {
verify: boolean;
}
export interface PssRetReq extends ImgCodeReq {
export interface PasswordResetReq extends ImgCodeReq {
e_mail: string;
}
@ -145,11 +145,11 @@ export interface CheckImgReq {
action: 'login' | 'e_mail' | 'find_pass';
}
export interface NoticeSetReq {
export interface SetNoticeReq {
notice_switch: boolean;
}
export interface QuDetailRes {
export interface QuestionDetailRes {
id: string;
title: string;
content: string;

View File

@ -36,7 +36,7 @@ const Form = ({
<Mentions pageUsers={pageUsers.getUsers()}>
<TextArea size="sm" value={value} onChange={handleChange} />
</Mentions>
<div className="text-muted fs-14">{t(`tip_${mode}`)}</div>
<div className="form-text">{t(`tip_${mode}`)}</div>
</div>
{type === 'edit' ? (
<div className="d-flex flex-column">

View File

@ -22,7 +22,7 @@ const Form = ({ userName, onSendReply, onCancel, mode }) => {
<Mentions pageUsers={pageUsers.getUsers()}>
<TextArea size="sm" value={value} onChange={handleChange} />
</Mentions>
<div className="text-muted fs-14">{t(`tip_${mode}`)}</div>
<div className="form-text">{t(`tip_${mode}`)}</div>
</div>
<div className="d-flex flex-column">
<Button

View File

@ -14,7 +14,7 @@ import { useSearchParams, NavLink, Link, useNavigate } from 'react-router-dom';
import { Avatar, Icon } from '@answer/components';
import { userInfoStore, siteInfoStore, interfaceStore } from '@answer/stores';
import { logout, useQueryNotificationRedDot } from '@answer/api';
import { logout, useQueryNotificationStatus } from '@answer/api';
import Storage from '@answer/utils/storage';
import './index.scss';
@ -28,7 +28,7 @@ const Header: FC = () => {
const [searchStr, setSearch] = useState('');
const siteInfo = siteInfoStore((state) => state.siteInfo);
const { interface: interfaceInfo } = interfaceStore();
const { data: redDot } = useQueryNotificationRedDot();
const { data: redDot } = useQueryNotificationStatus();
const handleInput = (val) => {
setSearch(val);
};

View File

@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
import { Modal } from '@answer/components';
import { useReportModal, useToast } from '@answer/hooks';
import { questionDelete, answerDelete } from '@answer/api';
import { deleteQuestion, deleteAnswer } from '@answer/api';
import { isLogin } from '@answer/utils';
import Share from '../Share';
@ -61,7 +61,7 @@ const Index: FC<IProps> = ({
confirmBtnVariant: 'danger',
confirmText: t('delete', { keyPrefix: 'btns' }),
onConfirm: () => {
questionDelete({
deleteQuestion({
id: qid,
}).then(() => {
toast.onShow({
@ -82,7 +82,7 @@ const Index: FC<IProps> = ({
confirmBtnVariant: 'danger',
confirmText: t('delete', { keyPrefix: 'btns' }),
onConfirm: () => {
answerDelete({
deleteAnswer({
id: aid,
}).then(() => {
// refersh page

View File

@ -194,7 +194,7 @@ const TagSelector: FC<IProps> = ({
{item.slug_name}
<span className="ms-1" onMouseUp={() => handleRemove(item)}>
x
×
</span>
</Button>
);

View File

@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
import { Button, Col } from 'react-bootstrap';
import { Trans, useTranslation } from 'react-i18next';
import { emailReSend, checkImgCode } from '@answer/api';
import { resendEmail, checkImgCode } from '@answer/api';
import { PicAuthCodeModal } from '@answer/components/Modal';
import type {
ImgCodeRes,
@ -53,7 +53,7 @@ const Index: React.FC<IProps> = ({ visible = false }) => {
captcha_id: imgCode.captcha_id,
};
}
emailReSend(obj)
resendEmail(obj)
.then(() => {
setSuccess(true);
setModalState(false);

View File

@ -23,7 +23,7 @@ import { useEditStatusModal, useReportModal } from '@answer/hooks';
import {
useQuestionSearch,
changeQuestionStatus,
questionDelete,
deleteQuestion,
} from '@answer/api';
import * as Type from '@answer/common/interface';
@ -89,7 +89,7 @@ const Questions: FC = () => {
confirmBtnVariant: 'danger',
confirmText: t('delete', { keyPrefix: 'btns' }),
onConfirm: () => {
questionDelete({
deleteQuestion({
id,
}).then(() => {
refreshList();

View File

@ -9,7 +9,7 @@ import { scrollTop } from '@answer/utils';
import { usePageUsers } from '@answer/hooks';
import type {
ListResult,
QuDetailRes,
QuestionDetailRes,
AnswerItem,
} from '@answer/common/interface';
@ -30,7 +30,7 @@ const Index = () => {
const page = Number(urlSearch.get('page') || 0);
const order = urlSearch.get('order') || '';
const [question, setQuestion] = useState<QuDetailRes | null>(null);
const [question, setQuestion] = useState<QuestionDetailRes | null>(null);
const [answers, setAnswers] = useState<ListResult<AnswerItem>>({
count: -1,
list: [],

View File

@ -2,10 +2,10 @@ import { FC, memo, useEffect, useState } from 'react';
import { Form, Button } from 'react-bootstrap';
import { useTranslation } from 'react-i18next';
import { passRetrieve, checkImgCode } from '@answer/api';
import { resetPassword, checkImgCode } from '@answer/api';
import type {
ImgCodeRes,
PssRetReq,
PasswordResetReq,
FormDataType,
} from '@answer/common/interface';
@ -70,7 +70,7 @@ const Index: FC<IProps> = ({ visible = false, callback }) => {
if (e) {
e.preventDefault();
}
const params: PssRetReq = {
const params: PasswordResetReq = {
e_mail: formData.e_mail.value,
};
if (imgCode.verify) {
@ -78,7 +78,7 @@ const Index: FC<IProps> = ({ visible = false, callback }) => {
params.captcha_id = imgCode.captcha_id;
}
passRetrieve(params)
resetPassword(params)
.then(() => {
callback?.(2, formData.e_mail.value);
setModalState(false);

View File

@ -1,7 +1,7 @@
import { FC, memo, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { accountActivate } from '@answer/api';
import { activateAccount } from '@answer/api';
import { userInfoStore } from '@answer/stores';
import { getQueryString } from '@answer/utils';
@ -14,7 +14,7 @@ const Index: FC = () => {
const code = getQueryString('code');
if (code) {
accountActivate(encodeURIComponent(code)).then((res) => {
activateAccount(encodeURIComponent(code)).then((res) => {
updateUser(res);
setTimeout(() => {
window.location.href = '/users/account-activation/success';

View File

@ -5,8 +5,8 @@ import { useParams, useNavigate } from 'react-router-dom';
import {
useQueryNotifications,
clearUnReadNotification,
clearNotificationRedDot,
clearUnreadNotification,
clearNotificationStatus,
readNotification,
} from '@answer/api';
import { PageTitle } from '@answer/components';
@ -29,7 +29,7 @@ const Notifications = () => {
});
useEffect(() => {
clearNotificationRedDot(type);
clearNotificationStatus(type);
}, []);
useEffect(() => {
@ -56,7 +56,7 @@ const Notifications = () => {
};
const handleUnreadNotification = async () => {
await clearUnReadNotification(type);
await clearUnreadNotification(type);
mutate();
};

View File

@ -3,7 +3,7 @@ import { Container, Col, Form, Button } from 'react-bootstrap';
import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { passRetrieveSet } from '@answer/api';
import { replacementPassword } from '@answer/api';
import { userInfoStore } from '@answer/stores';
import { getQueryString, isLogin } from '@answer/utils';
import type { FormDataType } from '@answer/common/interface';
@ -98,7 +98,7 @@ const Index: React.FC = () => {
console.error('code is required');
return;
}
passRetrieveSet({
replacementPassword({
code: encodeURIComponent(code),
pass: formData.pass.value,
})

View File

@ -3,7 +3,7 @@ import { Form, Button } from 'react-bootstrap';
import { useTranslation } from 'react-i18next';
import type { FormDataType } from '@answer/common/interface';
import { noticeSet, getUserInfo } from '@answer/api';
import { setNotice, getUserInfo } from '@answer/api';
import { useToast } from '@answer/hooks';
const Index = () => {
@ -34,7 +34,7 @@ const Index = () => {
const handleSubmit = (event: FormEvent) => {
event.preventDefault();
event.stopPropagation();
noticeSet({
setNotice({
notice_switch: formData.notice_switch.value,
}).then(() => {
toast.onShow({

View File

@ -29,7 +29,7 @@ export const readNotification = (id) => {
});
};
export const useQueryNotificationRedDot = () => {
export const useQueryNotificationStatus = () => {
const apiUrl = '/answer/api/v1/notification/status';
return useSWR<{ inbox: number; achievement: number }>(
@ -41,13 +41,13 @@ export const useQueryNotificationRedDot = () => {
);
};
export const clearNotificationRedDot = (type) => {
export const clearNotificationStatus = (type) => {
return request.instance.put('/answer/api/v1/notification/status', {
type,
});
};
export const clearUnReadNotification = (type) => {
export const clearUnreadNotification = (type) => {
return request.instance.put('/answer/api/v1/notification/read/state/all', {
type,
});

View File

@ -96,11 +96,11 @@ export const logout = () => {
return request.get('/answer/api/v1/user/logout');
};
export const emailVerify = (code: string) => {
export const verifyEmail = (code: string) => {
return request.get(`/answer/api/v1/email/verify?code=${code}`);
};
export const emailReSend = (params?: Type.ImgCodeReq) => {
export const resendEmail = (params?: Type.ImgCodeReq) => {
params = qs.parse(
qs.stringify(params, {
skipNulls: true,
@ -119,7 +119,7 @@ export const getUserInfo = () => {
return request.get<Type.UserInfoRes>('/answer/api/v1/user/info');
};
export const modifyPassword = (params: Type.ModifyPassReq) => {
export const modifyPassword = (params: Type.ModifyPasswordReq) => {
return request.post('/answer/api/v1/user/password/modify', params);
};
@ -131,15 +131,15 @@ export const uploadAvatar = (params: Type.AvatarUploadReq) => {
return request.post('/answer/api/v1/user/avatar/upload', params);
};
export const passRetrieve = (params: Type.PssRetReq) => {
export const resetPassword = (params: Type.PasswordResetReq) => {
return request.post('/answer/api/v1/user/password/reset', params);
};
export const passRetrieveSet = (params: { code: string; pass: string }) => {
export const replacementPassword = (params: { code: string; pass: string }) => {
return request.post('/answer/api/v1/user/password/replacement', params);
};
export const accountActivate = (code: string) => {
export const activateAccount = (code: string) => {
return request.post(`/answer/api/v1/user/email/verification`, { code });
};
@ -149,7 +149,7 @@ export const checkImgCode = (params: Type.CheckImgReq) => {
);
};
export const noticeSet = (params: Type.NoticeSetReq) => {
export const setNotice = (params: Type.SetNoticeReq) => {
return request.post('/answer/api/v1/user/notice/set', params);
};
@ -158,7 +158,9 @@ export const saveQuestion = (params: Type.QuestionParams) => {
};
export const questionDetail = (id: string) => {
return request.get<Type.QuDetailRes>(`/answer/api/v1/question/info?id=${id}`);
return request.get<Type.QuestionDetailRes>(
`/answer/api/v1/question/info?id=${id}`,
);
};
export const langConfig = () => {
@ -227,11 +229,11 @@ export const postReport = (params: {
return request.post('/answer/api/v1/report', params);
};
export const questionDelete = (params: { id: string }) => {
export const deleteQuestion = (params: { id: string }) => {
return request.delete('/answer/api/v1/question', params);
};
export const answerDelete = (params: { id: string }) => {
export const deleteAnswer = (params: { id: string }) => {
return request.delete('/answer/api/v1/answer', params);
};