From bf8772f15bc3d77db5140bb8db892b7bb2823ed7 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Fri, 28 Feb 2020 14:18:35 +0800 Subject: [PATCH] =?UTF-8?q?feat(group):=20=E5=A2=9E=E5=8A=A0=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=9B=B4=E6=96=B0=E5=9B=A2=E4=BF=A1=E6=81=AF=E7=9A=84?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/api/listener.ts | 5 +++++ src/shared/redux/actions/group.ts | 12 +++++++++--- src/shared/redux/constants/group.ts | 2 +- src/shared/redux/reducers/group.ts | 4 ++-- src/web/components/modal/GroupEdit.tsx | 6 +++--- .../containers/main/group/modal/GroupRuleEditor.tsx | 4 ++-- 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/shared/api/listener.ts b/src/shared/api/listener.ts index 21c55ffff..2d4d165b4 100644 --- a/src/shared/api/listener.ts +++ b/src/shared/api/listener.ts @@ -28,6 +28,7 @@ export function bindEventFunc( addGroupMember, removeGroupMember, updateGroupActorInfo, + updateGroupInfo, } = require('../redux/actions/group'); const { getUserInfoCache } = require('../utils/cache-helper'); @@ -79,6 +80,10 @@ export function bindEventFunc( api.on('group::addGroupSuccess', function(data) { store.dispatch(addGroup(data.group)); }); + api.on('group::updateInfo', function(data) { + const { groupUUID, groupInfo } = data; + store.dispatch(updateGroupInfo(groupUUID, groupInfo)); + }); api.on('group::updateGroupActorInfo', function(data) { const { groupUUID, groupActorUUID, groupActorInfo } = data; store.dispatch( diff --git a/src/shared/redux/actions/group.ts b/src/shared/redux/actions/group.ts index 120874b01..14862e434 100644 --- a/src/shared/redux/actions/group.ts +++ b/src/shared/redux/actions/group.ts @@ -2,7 +2,7 @@ import constants from '../constants'; const { CREATE_GROUP_SUCCESS, GET_GROUP_INFO_SUCCESS, - UPDATE_GROUP_INFO_SUCCESS, + UPDATE_GROUP_INFO, FIND_GROUP_REQUEST, FIND_GROUP_SUCCESS, REQUEST_JOIN_GROUP_SUCCESS, @@ -194,13 +194,16 @@ export const getGroupInfo = function(uuid: string): TRPGAction { * @param groupUUID 团UUID * @param groupInfo 团信息 */ -export const updateGroupInfo = function(groupUUID, groupInfo) { +export const requestUpdateGroupInfo = function( + groupUUID: string, + groupInfo: object +) { return function(dispatch, getState) { api.emit('group::updateInfo', { groupUUID, groupInfo }, function(data) { if (data.result) { let group = data.group; group.avatar = config.file.getAbsolutePath(group.avatar); - dispatch({ type: UPDATE_GROUP_INFO_SUCCESS, payload: group }); + dispatch(updateGroupInfo(group)); dispatch(hideModal()); dispatch(showAlert('操作成功')); } else { @@ -210,6 +213,9 @@ export const updateGroupInfo = function(groupUUID, groupInfo) { }); }; }; +export function updateGroupInfo(groupInfo: object): TRPGAction { + return { type: UPDATE_GROUP_INFO, payload: groupInfo }; +} export const findGroup = function(text, type) { return function(dispatch, getState) { diff --git a/src/shared/redux/constants/group.ts b/src/shared/redux/constants/group.ts index a0eef7b02..c74314c24 100644 --- a/src/shared/redux/constants/group.ts +++ b/src/shared/redux/constants/group.ts @@ -1,7 +1,7 @@ export default { CREATE_GROUP_SUCCESS: 'CREATE_GROUP_SUCCESS', GET_GROUP_INFO_SUCCESS: 'GET_GROUP_INFO_SUCCESS', - UPDATE_GROUP_INFO_SUCCESS: 'UPDATE_GROUP_INFO_SUCCESS', + UPDATE_GROUP_INFO: 'UPDATE_GROUP_INFO', FIND_GROUP_REQUEST: 'FIND_GROUP_REQUEST', FIND_GROUP_SUCCESS: 'FIND_GROUP_SUCCESS', REQUEST_JOIN_GROUP_SUCCESS: 'REQUEST_JOIN_GROUP_SUCCESS', diff --git a/src/shared/redux/reducers/group.ts b/src/shared/redux/reducers/group.ts index 6dfc7694d..6a98912ca 100644 --- a/src/shared/redux/reducers/group.ts +++ b/src/shared/redux/reducers/group.ts @@ -9,7 +9,7 @@ const { RESET, CREATE_GROUP_SUCCESS, GET_GROUP_INFO_SUCCESS, - UPDATE_GROUP_INFO_SUCCESS, + UPDATE_GROUP_INFO, FIND_GROUP_REQUEST, FIND_GROUP_SUCCESS, REQUEST_JOIN_GROUP_SUCCESS, @@ -86,7 +86,7 @@ export default produce((draft: GroupState, action) => { // return state.mergeIn(['info', groupUUID], fromJS(action.payload)); // 合并 } - case UPDATE_GROUP_INFO_SUCCESS: { + case UPDATE_GROUP_INFO: { const groupIndex = draft.groups.findIndex( (i) => i.uuid === action.payload.uuid ); diff --git a/src/web/components/modal/GroupEdit.tsx b/src/web/components/modal/GroupEdit.tsx index 1f0bca745..d0d00e9f7 100644 --- a/src/web/components/modal/GroupEdit.tsx +++ b/src/web/components/modal/GroupEdit.tsx @@ -4,7 +4,7 @@ import config from '../../../shared/project.config'; import ModalPanel from '../ModalPanel'; import ImageUploader from '../ImageUploader'; import { hideModal } from '../../../shared/redux/actions/ui'; -import { updateGroupInfo } from '../../../shared/redux/actions/group'; +import { requestUpdateGroupInfo } from '../../../shared/redux/actions/group'; import './GroupEdit.scss'; import { TRPGState, TRPGDispatchProp } from '@redux/types/__all__'; @@ -34,13 +34,13 @@ class GroupEdit extends React.Component { const groupInfoData: State = Object.assign({}, this.state); delete groupInfoData.avatar; this.props.dispatch( - updateGroupInfo(this.props.selectedGroupUUID, groupInfoData) + requestUpdateGroupInfo(this.props.selectedGroupUUID, groupInfoData) ); } handleUpdateAvatar(url: string) { this.props.dispatch( - updateGroupInfo(this.props.selectedGroupUUID, { avatar: url }) + requestUpdateGroupInfo(this.props.selectedGroupUUID, { avatar: url }) ); } diff --git a/src/web/containers/main/group/modal/GroupRuleEditor.tsx b/src/web/containers/main/group/modal/GroupRuleEditor.tsx index 16e57995d..e3356607c 100644 --- a/src/web/containers/main/group/modal/GroupRuleEditor.tsx +++ b/src/web/containers/main/group/modal/GroupRuleEditor.tsx @@ -4,7 +4,7 @@ import TRPGEditor from '@shared/editor'; import { Button } from 'antd'; import { useSelector, useDispatch } from 'react-redux'; import { TRPGState } from '@redux/types/__all__'; -import { updateGroupInfo } from '@redux/actions/group'; +import { requestUpdateGroupInfo } from '@redux/actions/group'; import { GroupInfo } from '@redux/types/group'; interface Props {} @@ -21,7 +21,7 @@ const GroupRuleEditor: React.FC = React.memo((props) => { const handleSave = useCallback(() => { dispatch( - updateGroupInfo(groupUUID, { + requestUpdateGroupInfo(groupUUID, { rule: content, }) );