Add channel and role api
This commit is contained in:
parent
8881070cac
commit
1fbd120404
22 changed files with 538 additions and 2 deletions
42
src/api/channel/channel.ts
Normal file
42
src/api/channel/channel.ts
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
import { callApi, HTTP } from "../tools";
|
||||||
|
import {
|
||||||
|
IFetchChannelRequest,
|
||||||
|
IFetchChannelResponse,
|
||||||
|
ICreateChannelRequest,
|
||||||
|
ICreateChannelResponse,
|
||||||
|
IUpdateChannelRequest,
|
||||||
|
IUpdateChannelResponse,
|
||||||
|
IRemoveChannelRequest,
|
||||||
|
IRemoveChannelResponse,
|
||||||
|
} from "./types";
|
||||||
|
|
||||||
|
const fetchChannelApi = async (
|
||||||
|
request: IFetchChannelRequest,
|
||||||
|
): Promise<IFetchChannelResponse> => {
|
||||||
|
return await callApi(HTTP.GET, `channel/${request.id}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
const createChannelApi = async (
|
||||||
|
request: ICreateChannelRequest,
|
||||||
|
): Promise<ICreateChannelResponse> => {
|
||||||
|
return await callApi(HTTP.POST, `channel`, request);
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateChannelApi = async (
|
||||||
|
request: IUpdateChannelRequest,
|
||||||
|
): Promise<IUpdateChannelResponse> => {
|
||||||
|
return await callApi(HTTP.PATCH, `channel/${request.id}`, request);
|
||||||
|
};
|
||||||
|
|
||||||
|
const removeChannelApi = async (
|
||||||
|
request: IRemoveChannelRequest,
|
||||||
|
): Promise<IRemoveChannelResponse> => {
|
||||||
|
return await callApi(HTTP.DELETE, `channel/${request.id}`, request);
|
||||||
|
};
|
||||||
|
|
||||||
|
export {
|
||||||
|
fetchChannelApi,
|
||||||
|
createChannelApi,
|
||||||
|
updateChannelApi,
|
||||||
|
removeChannelApi,
|
||||||
|
};
|
||||||
2
src/api/channel/index.ts
Normal file
2
src/api/channel/index.ts
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
export * from "./channel";
|
||||||
|
export * from "./types";
|
||||||
47
src/api/channel/types.ts
Normal file
47
src/api/channel/types.ts
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
interface IFetchChannel {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
communityId: string;
|
||||||
|
creationDate: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IFetchChannelRequest {
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IFetchChannelResponse extends IFetchChannel {}
|
||||||
|
|
||||||
|
interface ICreateChannelRequest {
|
||||||
|
name: string;
|
||||||
|
communityId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ICreateChannelResponse extends IFetchChannel {}
|
||||||
|
|
||||||
|
interface IUpdateChannelRequest {
|
||||||
|
id: string;
|
||||||
|
name?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IUpdateChannelResponse extends IFetchChannel {}
|
||||||
|
|
||||||
|
interface IRemoveChannelRequest {
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IRemoveChannelResponse {
|
||||||
|
id: string;
|
||||||
|
communityId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
type IFetchChannel,
|
||||||
|
type IFetchChannelRequest,
|
||||||
|
type IFetchChannelResponse,
|
||||||
|
type ICreateChannelRequest,
|
||||||
|
type ICreateChannelResponse,
|
||||||
|
type IUpdateChannelRequest,
|
||||||
|
type IUpdateChannelResponse,
|
||||||
|
type IRemoveChannelResponse,
|
||||||
|
type IRemoveChannelRequest,
|
||||||
|
};
|
||||||
2
src/api/role/index.ts
Normal file
2
src/api/role/index.ts
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
export * from "./role";
|
||||||
|
export * from "./types";
|
||||||
37
src/api/role/role.ts
Normal file
37
src/api/role/role.ts
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
import { callApi, HTTP } from "../tools";
|
||||||
|
import {
|
||||||
|
IFetchRoleRequest,
|
||||||
|
IFetchRoleResponse,
|
||||||
|
ICreateRoleRequest,
|
||||||
|
ICreateRoleResponse,
|
||||||
|
IUpdateRoleRequest,
|
||||||
|
IUpdateRoleResponse,
|
||||||
|
IRemoveRoleRequest,
|
||||||
|
IRemoveRoleResponse,
|
||||||
|
} from "./types";
|
||||||
|
|
||||||
|
const fetchRoleApi = async (
|
||||||
|
request: IFetchRoleRequest,
|
||||||
|
): Promise<IFetchRoleResponse> => {
|
||||||
|
return await callApi(HTTP.GET, `role/${request.id}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
const createRoleApi = async (
|
||||||
|
request: ICreateRoleRequest,
|
||||||
|
): Promise<ICreateRoleResponse> => {
|
||||||
|
return await callApi(HTTP.POST, `role`, request);
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateRoleApi = async (
|
||||||
|
request: IUpdateRoleRequest,
|
||||||
|
): Promise<IUpdateRoleResponse> => {
|
||||||
|
return await callApi(HTTP.PATCH, `role/${request.id}`, request);
|
||||||
|
};
|
||||||
|
|
||||||
|
const removeRoleApi = async (
|
||||||
|
request: IRemoveRoleRequest,
|
||||||
|
): Promise<IRemoveRoleResponse> => {
|
||||||
|
return await callApi(HTTP.DELETE, `role/${request.id}`, request);
|
||||||
|
};
|
||||||
|
|
||||||
|
export { fetchRoleApi, createRoleApi, updateRoleApi, removeRoleApi };
|
||||||
47
src/api/role/types.ts
Normal file
47
src/api/role/types.ts
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
interface IFetchRole {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
communityId: string;
|
||||||
|
creationDate: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IFetchRoleRequest {
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IFetchRoleResponse extends IFetchRole {}
|
||||||
|
|
||||||
|
interface ICreateRoleRequest {
|
||||||
|
name: string;
|
||||||
|
communityId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ICreateRoleResponse extends IFetchRole {}
|
||||||
|
|
||||||
|
interface IUpdateRoleRequest {
|
||||||
|
id: string;
|
||||||
|
name?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IUpdateRoleResponse extends IFetchRole {}
|
||||||
|
|
||||||
|
interface IRemoveRoleRequest {
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IRemoveRoleResponse {
|
||||||
|
id: string;
|
||||||
|
communityId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
type IFetchRole,
|
||||||
|
type IFetchRoleRequest,
|
||||||
|
type IFetchRoleResponse,
|
||||||
|
type ICreateRoleRequest,
|
||||||
|
type ICreateRoleResponse,
|
||||||
|
type IUpdateRoleRequest,
|
||||||
|
type IUpdateRoleResponse,
|
||||||
|
type IRemoveRoleResponse,
|
||||||
|
type IRemoveRoleRequest,
|
||||||
|
};
|
||||||
56
src/services/channel/channel.ts
Normal file
56
src/services/channel/channel.ts
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
import {
|
||||||
|
fetchChannelApi,
|
||||||
|
createChannelApi,
|
||||||
|
updateChannelApi,
|
||||||
|
removeChannelApi,
|
||||||
|
} from "../../api/channel";
|
||||||
|
import { ChannelActionTypes } from "../../store/channel";
|
||||||
|
import { dispatch } from "../../store/state";
|
||||||
|
|
||||||
|
const fetchChannel = async (id: string) => {
|
||||||
|
const data = await fetchChannelApi({
|
||||||
|
id: id,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: ChannelActionTypes.FETCH_CHANNEL_FINISH,
|
||||||
|
payload: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const createChannel = async (name: string, communityId: string) => {
|
||||||
|
const data = await createChannelApi({
|
||||||
|
name: name,
|
||||||
|
communityId: communityId,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: ChannelActionTypes.CREATE_CHANNEL_FINISH,
|
||||||
|
payload: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateChannel = async (id: string, name?: string) => {
|
||||||
|
const data = await updateChannelApi({
|
||||||
|
id: id,
|
||||||
|
name: name,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: ChannelActionTypes.UPDATE_CHANNEL_FINISH,
|
||||||
|
payload: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const removeChannel = async (id: string) => {
|
||||||
|
const data = await removeChannelApi({
|
||||||
|
id: id,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: ChannelActionTypes.REMOVE_CHANNEL_FINISH,
|
||||||
|
payload: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export { fetchChannel, createChannel, updateChannel, removeChannel };
|
||||||
1
src/services/channel/index.ts
Normal file
1
src/services/channel/index.ts
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
export * from "./channel";
|
||||||
1
src/services/role/index.ts
Normal file
1
src/services/role/index.ts
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
export * from "./role";
|
||||||
56
src/services/role/role.ts
Normal file
56
src/services/role/role.ts
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
import {
|
||||||
|
fetchRoleApi,
|
||||||
|
createRoleApi,
|
||||||
|
updateRoleApi,
|
||||||
|
removeRoleApi,
|
||||||
|
} from "../../api/role";
|
||||||
|
import { RoleActionTypes } from "../../store/role";
|
||||||
|
import { dispatch } from "../../store/state";
|
||||||
|
|
||||||
|
const fetchRole = async (id: string) => {
|
||||||
|
const data = await fetchRoleApi({
|
||||||
|
id: id,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: RoleActionTypes.FETCH_ROLE_FINISH,
|
||||||
|
payload: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const createRole = async (name: string, communityId: string) => {
|
||||||
|
const data = await createRoleApi({
|
||||||
|
name: name,
|
||||||
|
communityId: communityId,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: RoleActionTypes.CREATE_ROLE_FINISH,
|
||||||
|
payload: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateRole = async (id: string, name?: string) => {
|
||||||
|
const data = await updateRoleApi({
|
||||||
|
id: id,
|
||||||
|
name: name,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: RoleActionTypes.UPDATE_ROLE_FINISH,
|
||||||
|
payload: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const removeRole = async (id: string) => {
|
||||||
|
const data = await removeRoleApi({
|
||||||
|
id: id,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: RoleActionTypes.REMOVE_ROLE_FINISH,
|
||||||
|
payload: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export { fetchRole, createRole, updateRole, removeRole };
|
||||||
|
|
@ -1,9 +1,21 @@
|
||||||
import { AuthActionTypes, AuthAction } from "./auth";
|
import { AuthActionTypes, AuthAction } from "./auth";
|
||||||
import { UserActionTypes, UserAction } from "./user";
|
import { UserActionTypes, UserAction } from "./user";
|
||||||
import { CommunityActionTypes, CommunityAction } from "./community";
|
import { CommunityActionTypes, CommunityAction } from "./community";
|
||||||
|
import { ChannelActionTypes, ChannelAction } from "./channel";
|
||||||
|
import { RoleActionTypes, RoleAction } from "./role";
|
||||||
|
|
||||||
type ActionTypes = AuthActionTypes | UserActionTypes | CommunityActionTypes;
|
type ActionTypes =
|
||||||
|
| AuthActionTypes
|
||||||
|
| UserActionTypes
|
||||||
|
| CommunityActionTypes
|
||||||
|
| ChannelActionTypes
|
||||||
|
| RoleActionTypes;
|
||||||
|
|
||||||
type Action = AuthAction | UserAction | CommunityAction;
|
type Action =
|
||||||
|
| AuthAction
|
||||||
|
| UserAction
|
||||||
|
| CommunityAction
|
||||||
|
| ChannelAction
|
||||||
|
| RoleAction;
|
||||||
|
|
||||||
export { type Action, type ActionTypes };
|
export { type Action, type ActionTypes };
|
||||||
|
|
|
||||||
45
src/store/channel/actions.ts
Normal file
45
src/store/channel/actions.ts
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
import {
|
||||||
|
ICreateChannelRequest,
|
||||||
|
IFetchChannelResponse,
|
||||||
|
ICreateChannelResponse,
|
||||||
|
IUpdateChannelResponse,
|
||||||
|
IRemoveChannelResponse,
|
||||||
|
} from "../../api/channel";
|
||||||
|
|
||||||
|
enum ChannelActionTypes {
|
||||||
|
FETCH_CHANNEL_START = "FETCH_COMMUNITY_START",
|
||||||
|
FETCH_CHANNEL_FINISH = "FETCH_COMMUNITY_FINISH",
|
||||||
|
CREATE_CHANNEL_START = "CREATE_CHANNEL_START",
|
||||||
|
CREATE_CHANNEL_FINISH = "CREATE_CHANNEL_FINISH",
|
||||||
|
UPDATE_CHANNEL_START = "UPDATE_CHANNEL_START",
|
||||||
|
UPDATE_CHANNEL_FINISH = "UPDATE_CHANNEL_FINISH",
|
||||||
|
REMOVE_CHANNEL_START = "REMOVE_CHANNEL_START",
|
||||||
|
REMOVE_CHANNEL_FINISH = "REMOVE_CHANNEL_FINISH",
|
||||||
|
}
|
||||||
|
|
||||||
|
type ChannelAction =
|
||||||
|
| { type: ChannelActionTypes.FETCH_CHANNEL_START; payload: string }
|
||||||
|
| {
|
||||||
|
type: ChannelActionTypes.FETCH_CHANNEL_FINISH;
|
||||||
|
payload: IFetchChannelResponse;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
type: ChannelActionTypes.CREATE_CHANNEL_START;
|
||||||
|
payload: ICreateChannelRequest;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
type: ChannelActionTypes.CREATE_CHANNEL_FINISH;
|
||||||
|
payload: ICreateChannelResponse;
|
||||||
|
}
|
||||||
|
| { type: ChannelActionTypes.UPDATE_CHANNEL_START; payload: string }
|
||||||
|
| {
|
||||||
|
type: ChannelActionTypes.UPDATE_CHANNEL_FINISH;
|
||||||
|
payload: IUpdateChannelResponse;
|
||||||
|
}
|
||||||
|
| { type: ChannelActionTypes.REMOVE_CHANNEL_START; payload: string }
|
||||||
|
| {
|
||||||
|
type: ChannelActionTypes.REMOVE_CHANNEL_FINISH;
|
||||||
|
payload: IRemoveChannelResponse;
|
||||||
|
};
|
||||||
|
|
||||||
|
export { ChannelActionTypes, type ChannelAction };
|
||||||
52
src/store/channel/channel.ts
Normal file
52
src/store/channel/channel.ts
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
import {
|
||||||
|
fetchChannel,
|
||||||
|
createChannel,
|
||||||
|
updateChannel,
|
||||||
|
removeChannel,
|
||||||
|
} from "../../services/channel";
|
||||||
|
import { setState } from "../state";
|
||||||
|
import { ChannelActionTypes, ChannelAction } from "./actions";
|
||||||
|
import { IChannelState } from "./types";
|
||||||
|
|
||||||
|
function channelReducer(state: IChannelState, action: ChannelAction) {
|
||||||
|
switch (action.type) {
|
||||||
|
case ChannelActionTypes.FETCH_CHANNEL_START:
|
||||||
|
fetchChannel(action.payload);
|
||||||
|
break;
|
||||||
|
case ChannelActionTypes.FETCH_CHANNEL_FINISH:
|
||||||
|
setState("channel", "channels", {
|
||||||
|
...state.channels,
|
||||||
|
[action.payload.id]: action.payload,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case ChannelActionTypes.CREATE_CHANNEL_START:
|
||||||
|
createChannel(action.payload.name, action.payload.communityId);
|
||||||
|
break;
|
||||||
|
case ChannelActionTypes.CREATE_CHANNEL_FINISH:
|
||||||
|
setState("channel", "channels", {
|
||||||
|
...state.channels,
|
||||||
|
[action.payload.id]: action.payload,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case ChannelActionTypes.UPDATE_CHANNEL_START:
|
||||||
|
updateChannel(action.payload);
|
||||||
|
break;
|
||||||
|
case ChannelActionTypes.UPDATE_CHANNEL_FINISH:
|
||||||
|
setState("channel", "channels", {
|
||||||
|
...state.channels,
|
||||||
|
[action.payload.id]: action.payload,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case ChannelActionTypes.REMOVE_CHANNEL_START:
|
||||||
|
removeChannel(action.payload);
|
||||||
|
break;
|
||||||
|
case ChannelActionTypes.REMOVE_CHANNEL_FINISH:
|
||||||
|
setState("channel", "channels", {
|
||||||
|
...state.channels,
|
||||||
|
[action.payload.id]: undefined,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { channelReducer };
|
||||||
3
src/store/channel/index.ts
Normal file
3
src/store/channel/index.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export * from "./channel";
|
||||||
|
export * from "./actions";
|
||||||
|
export * from "./types";
|
||||||
11
src/store/channel/types.ts
Normal file
11
src/store/channel/types.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
interface IChannelState {
|
||||||
|
channels: Record<string, IChannel>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IChannel {
|
||||||
|
id: string;
|
||||||
|
name?: string;
|
||||||
|
communityId?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export { type IChannelState, type IChannel };
|
||||||
|
|
@ -3,11 +3,15 @@ import { Action } from "./actions";
|
||||||
import { AuthAction, authReducer } from "./auth";
|
import { AuthAction, authReducer } from "./auth";
|
||||||
import { UserAction, userReducer } from "./user";
|
import { UserAction, userReducer } from "./user";
|
||||||
import { CommunityAction, communityReducer } from "./community";
|
import { CommunityAction, communityReducer } from "./community";
|
||||||
|
import { ChannelAction, channelReducer } from "./channel";
|
||||||
|
import { RoleAction, roleReducer } from "./role";
|
||||||
|
|
||||||
function reducer(state: IState, action: Action) {
|
function reducer(state: IState, action: Action) {
|
||||||
authReducer(state.auth, action as AuthAction);
|
authReducer(state.auth, action as AuthAction);
|
||||||
userReducer(state.user, action as UserAction);
|
userReducer(state.user, action as UserAction);
|
||||||
communityReducer(state.community, action as CommunityAction);
|
communityReducer(state.community, action as CommunityAction);
|
||||||
|
channelReducer(state.channel, action as ChannelAction);
|
||||||
|
roleReducer(state.role, action as RoleAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { reducer };
|
export { reducer };
|
||||||
|
|
|
||||||
42
src/store/role/actions.ts
Normal file
42
src/store/role/actions.ts
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
import {
|
||||||
|
ICreateRoleRequest,
|
||||||
|
IFetchRoleResponse,
|
||||||
|
ICreateRoleResponse,
|
||||||
|
IUpdateRoleResponse,
|
||||||
|
IRemoveRoleResponse,
|
||||||
|
} from "../../api/role";
|
||||||
|
|
||||||
|
enum RoleActionTypes {
|
||||||
|
FETCH_ROLE_START = "FETCH_ROLE_START",
|
||||||
|
FETCH_ROLE_FINISH = "FETCH_ROLE_FINISH",
|
||||||
|
CREATE_ROLE_START = "CREATE_ROLE_START",
|
||||||
|
CREATE_ROLE_FINISH = "CREATE_ROLE_FINISH",
|
||||||
|
UPDATE_ROLE_START = "UPDATE_ROLE_START",
|
||||||
|
UPDATE_ROLE_FINISH = "UPDATE_ROLE_FINISH",
|
||||||
|
REMOVE_ROLE_START = "REMOVE_ROLE_START",
|
||||||
|
REMOVE_ROLE_FINISH = "REMOVE_ROLE_FINISH",
|
||||||
|
}
|
||||||
|
|
||||||
|
type RoleAction =
|
||||||
|
| { type: RoleActionTypes.FETCH_ROLE_START; payload: string }
|
||||||
|
| {
|
||||||
|
type: RoleActionTypes.FETCH_ROLE_FINISH;
|
||||||
|
payload: IFetchRoleResponse;
|
||||||
|
}
|
||||||
|
| { type: RoleActionTypes.CREATE_ROLE_START; payload: ICreateRoleRequest }
|
||||||
|
| {
|
||||||
|
type: RoleActionTypes.CREATE_ROLE_FINISH;
|
||||||
|
payload: ICreateRoleResponse;
|
||||||
|
}
|
||||||
|
| { type: RoleActionTypes.UPDATE_ROLE_START; payload: string }
|
||||||
|
| {
|
||||||
|
type: RoleActionTypes.UPDATE_ROLE_FINISH;
|
||||||
|
payload: IUpdateRoleResponse;
|
||||||
|
}
|
||||||
|
| { type: RoleActionTypes.REMOVE_ROLE_START; payload: string }
|
||||||
|
| {
|
||||||
|
type: RoleActionTypes.REMOVE_ROLE_FINISH;
|
||||||
|
payload: IRemoveRoleResponse;
|
||||||
|
};
|
||||||
|
|
||||||
|
export { RoleActionTypes, type RoleAction };
|
||||||
3
src/store/role/index.ts
Normal file
3
src/store/role/index.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export * from "./role";
|
||||||
|
export * from "./actions";
|
||||||
|
export * from "./types";
|
||||||
52
src/store/role/role.ts
Normal file
52
src/store/role/role.ts
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
import {
|
||||||
|
fetchRole,
|
||||||
|
createRole,
|
||||||
|
updateRole,
|
||||||
|
removeRole,
|
||||||
|
} from "../../services/role";
|
||||||
|
import { setState } from "../state";
|
||||||
|
import { RoleActionTypes, RoleAction } from "./actions";
|
||||||
|
import { IRoleState } from "./types";
|
||||||
|
|
||||||
|
function roleReducer(state: IRoleState, action: RoleAction) {
|
||||||
|
switch (action.type) {
|
||||||
|
case RoleActionTypes.FETCH_ROLE_START:
|
||||||
|
fetchRole(action.payload);
|
||||||
|
break;
|
||||||
|
case RoleActionTypes.FETCH_ROLE_FINISH:
|
||||||
|
setState("role", "roles", {
|
||||||
|
...state.roles,
|
||||||
|
[action.payload.id]: action.payload,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case RoleActionTypes.CREATE_ROLE_START:
|
||||||
|
createRole(action.payload.name, action.payload.communityId);
|
||||||
|
break;
|
||||||
|
case RoleActionTypes.CREATE_ROLE_FINISH:
|
||||||
|
setState("role", "roles", {
|
||||||
|
...state.roles,
|
||||||
|
[action.payload.id]: action.payload,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case RoleActionTypes.UPDATE_ROLE_START:
|
||||||
|
updateRole(action.payload);
|
||||||
|
break;
|
||||||
|
case RoleActionTypes.UPDATE_ROLE_FINISH:
|
||||||
|
setState("role", "roles", {
|
||||||
|
...state.roles,
|
||||||
|
[action.payload.id]: action.payload,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case RoleActionTypes.REMOVE_ROLE_START:
|
||||||
|
removeRole(action.payload);
|
||||||
|
break;
|
||||||
|
case RoleActionTypes.REMOVE_ROLE_FINISH:
|
||||||
|
setState("role", "roles", {
|
||||||
|
...state.roles,
|
||||||
|
[action.payload.id]: undefined,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { roleReducer };
|
||||||
11
src/store/role/types.ts
Normal file
11
src/store/role/types.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
interface IRoleState {
|
||||||
|
roles: Record<string, IRole>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IRole {
|
||||||
|
id: string;
|
||||||
|
name?: string;
|
||||||
|
communityId?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export { type IRoleState, type IRole };
|
||||||
|
|
@ -14,6 +14,12 @@ const [state, setState] = createStore<IState>({
|
||||||
community: {
|
community: {
|
||||||
communities: {},
|
communities: {},
|
||||||
},
|
},
|
||||||
|
channel: {
|
||||||
|
channels: {},
|
||||||
|
},
|
||||||
|
role: {
|
||||||
|
roles: {},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
function dispatch(action: Action) {
|
function dispatch(action: Action) {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,15 @@
|
||||||
import { IAuthState } from "./auth";
|
import { IAuthState } from "./auth";
|
||||||
import { IUserState } from "./user";
|
import { IUserState } from "./user";
|
||||||
import { ICommunityState } from "./community";
|
import { ICommunityState } from "./community";
|
||||||
|
import { IChannelState } from "./channel";
|
||||||
|
import { IRoleState } from "./role";
|
||||||
|
|
||||||
interface IState {
|
interface IState {
|
||||||
auth: IAuthState;
|
auth: IAuthState;
|
||||||
user: IUserState;
|
user: IUserState;
|
||||||
community: ICommunityState;
|
community: ICommunityState;
|
||||||
|
channel: IChannelState;
|
||||||
|
role: IRoleState;
|
||||||
}
|
}
|
||||||
|
|
||||||
export { type IState };
|
export { type IState };
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue