diff --git a/app/javascript/actions/changePostBoard.ts b/app/javascript/actions/changePostBoard.ts index e8b94e48..451e9fe6 100644 --- a/app/javascript/actions/changePostBoard.ts +++ b/app/javascript/actions/changePostBoard.ts @@ -5,7 +5,7 @@ import { State } from '../reducers/rootReducer'; export const CHANGE_POST_BOARD_SUCCESS = 'CHANGE_POST_BOARD_SUCCESS'; export interface ChangePostBoardSuccessAction { type: typeof CHANGE_POST_BOARD_SUCCESS; - newBoardId; + newBoardId: number; } const changePostBoardSuccess = (newBoardId: number): ChangePostBoardSuccessAction => ({ diff --git a/app/javascript/actions/changePostStatus.ts b/app/javascript/actions/changePostStatus.ts index 29c915d9..c089b32d 100644 --- a/app/javascript/actions/changePostStatus.ts +++ b/app/javascript/actions/changePostStatus.ts @@ -5,7 +5,7 @@ import { State } from '../reducers/rootReducer'; export const CHANGE_POST_STATUS_SUCCESS = 'CHANGE_POST_STATUS_SUCCESS'; export interface ChangePostStatusSuccessAction { type: typeof CHANGE_POST_STATUS_SUCCESS; - newPostStatusId; + newPostStatusId: number; } const changePostStatusSuccess = (newPostStatusId: number): ChangePostStatusSuccessAction => ({ diff --git a/app/javascript/actions/handleCommentReplies.ts b/app/javascript/actions/handleCommentReplies.ts index 46b0cedf..db771197 100644 --- a/app/javascript/actions/handleCommentReplies.ts +++ b/app/javascript/actions/handleCommentReplies.ts @@ -11,12 +11,12 @@ interface SetCommentReplyBodyAction { body: string; } -export const toggleCommentReply = (commentId): ToggleCommentReplyAction => ({ +export const toggleCommentReply = (commentId: number): ToggleCommentReplyAction => ({ type: TOGGLE_COMMENT_REPLY, commentId, }); -export const setCommentReplyBody = (commentId, body): SetCommentReplyBodyAction => ({ +export const setCommentReplyBody = (commentId: number, body: string): SetCommentReplyBodyAction => ({ type: SET_COMMENT_REPLY_BODY, commentId, body, diff --git a/app/javascript/actions/requestComment.ts b/app/javascript/actions/requestComment.ts index 9f3f67c6..6ce0efc3 100644 --- a/app/javascript/actions/requestComment.ts +++ b/app/javascript/actions/requestComment.ts @@ -1,7 +1,7 @@ import ICommentJSON from '../interfaces/json/IComment'; export const COMMENT_REQUEST_SUCCESS = 'COMMENT_REQUEST_SUCCESS'; -interface CommentRequestSuccessAction { +export interface CommentRequestSuccessAction { type: typeof COMMENT_REQUEST_SUCCESS; comment: ICommentJSON; } diff --git a/app/javascript/actions/submitComment.ts b/app/javascript/actions/submitComment.ts index b7cd5c82..7018ea8d 100644 --- a/app/javascript/actions/submitComment.ts +++ b/app/javascript/actions/submitComment.ts @@ -28,7 +28,7 @@ export type CommentSubmitActionTypes = CommentSubmitSuccessAction | CommentSubmitFailureAction; -const commentSubmitStart = (parentId): CommentSubmitStartAction => ({ +const commentSubmitStart = (parentId: number): CommentSubmitStartAction => ({ type: COMMENT_SUBMIT_START, parentId, }); @@ -40,17 +40,17 @@ const commentSubmitSuccess = ( comment: commentJSON, }); -const commentSubmitFailure = (parentId, error): CommentSubmitFailureAction => ({ +const commentSubmitFailure = (parentId: number, error: string): CommentSubmitFailureAction => ({ type: COMMENT_SUBMIT_FAILURE, parentId, error, }); export const submitComment = ( - postId, - body, - parentId, - authenticityToken, + postId: number, + body: string, + parentId: number, + authenticityToken: string, ): ThunkAction> => async (dispatch) => { dispatch(commentSubmitStart(parentId)); diff --git a/app/javascript/components/Board/index.tsx b/app/javascript/components/Board/index.tsx index ac8194bf..6fceedba 100644 --- a/app/javascript/components/Board/index.tsx +++ b/app/javascript/components/Board/index.tsx @@ -6,6 +6,9 @@ import createStoreHelper from '../../helpers/createStore'; import IBoard from '../../interfaces/IBoard'; +import { Store } from 'redux'; +import { State } from '../../reducers/rootReducer'; + interface Props { board: IBoard; isLoggedIn: boolean; @@ -13,7 +16,7 @@ interface Props { } class BoardRoot extends React.Component { - store: any; + store: Store; constructor(props: Props) { super(props); diff --git a/app/javascript/components/Post/index.tsx b/app/javascript/components/Post/index.tsx index 3c00c38d..397d6b73 100644 --- a/app/javascript/components/Post/index.tsx +++ b/app/javascript/components/Post/index.tsx @@ -8,6 +8,9 @@ import Post from '../../containers/Post'; import IBoard from '../../interfaces/IBoard'; import IPostStatus from '../../interfaces/IPostStatus'; +import { Store } from 'redux'; +import { State } from '../../reducers/rootReducer'; + interface Props { postId: number; boards: Array; @@ -18,7 +21,7 @@ interface Props { } class PostRoot extends React.Component { - store: any; + store: Store; constructor(props: Props) { super(props); diff --git a/app/javascript/containers/Board.tsx b/app/javascript/containers/Board.tsx index 1f640441..e9e71b25 100644 --- a/app/javascript/containers/Board.tsx +++ b/app/javascript/containers/Board.tsx @@ -16,7 +16,7 @@ const mapStateToProps = (state: State) => ({ postStatuses: state.postStatuses, }); -const mapDispatchToProps = (dispatch) => ({ +const mapDispatchToProps = (dispatch: any) => ({ requestPosts(boardId: number, page: number = 1, searchQuery: string = '', postStatusId: number = null) { dispatch(requestPosts(boardId, page, searchQuery, postStatusId)); }, diff --git a/app/javascript/reducers/commentReducer.ts b/app/javascript/reducers/commentReducer.ts index 9a6d1915..77f1193b 100644 --- a/app/javascript/reducers/commentReducer.ts +++ b/app/javascript/reducers/commentReducer.ts @@ -1,4 +1,5 @@ import { + CommentRequestSuccessAction, COMMENT_REQUEST_SUCCESS, } from '../actions/requestComment'; @@ -14,7 +15,7 @@ const initialState: IComment = { const commentReducer = ( state = initialState, - action, + action: CommentRequestSuccessAction, ): IComment => { switch (action.type) { case COMMENT_REQUEST_SUCCESS: diff --git a/app/javascript/reducers/commentRepliesReducer.ts b/app/javascript/reducers/commentRepliesReducer.ts index e11e8108..b4924267 100644 --- a/app/javascript/reducers/commentRepliesReducer.ts +++ b/app/javascript/reducers/commentRepliesReducer.ts @@ -1,13 +1,16 @@ import { + CommentRequestSuccessAction, COMMENT_REQUEST_SUCCESS, } from '../actions/requestComment'; import { + HandleCommentRepliesType, TOGGLE_COMMENT_REPLY, SET_COMMENT_REPLY_BODY, } from '../actions/handleCommentReplies'; import { + CommentSubmitActionTypes, COMMENT_SUBMIT_START, COMMENT_SUBMIT_SUCCESS, COMMENT_SUBMIT_FAILURE, @@ -31,7 +34,10 @@ const initialState: CommentRepliesState = { const commentRepliesReducer = ( state = initialState, - action, + action: + CommentRequestSuccessAction | + HandleCommentRepliesType | + CommentSubmitActionTypes, ) => { switch (action.type) { case COMMENT_REQUEST_SUCCESS: diff --git a/app/javascript/reducers/commentsReducer.ts b/app/javascript/reducers/commentsReducer.ts index 1df52aa0..17e328be 100644 --- a/app/javascript/reducers/commentsReducer.ts +++ b/app/javascript/reducers/commentsReducer.ts @@ -1,4 +1,5 @@ import { + CommentsRequestActionTypes, COMMENTS_REQUEST_START, COMMENTS_REQUEST_SUCCESS, COMMENTS_REQUEST_FAILURE, @@ -7,11 +8,13 @@ import { import { commentRequestSuccess } from '../actions/requestComment'; import { + HandleCommentRepliesType, TOGGLE_COMMENT_REPLY, SET_COMMENT_REPLY_BODY, } from '../actions/handleCommentReplies'; import { + CommentSubmitActionTypes, COMMENT_SUBMIT_START, COMMENT_SUBMIT_SUCCESS, COMMENT_SUBMIT_FAILURE, @@ -40,7 +43,10 @@ const initialState: CommentsState = { const commentsReducer = ( state = initialState, - action, + action: + CommentsRequestActionTypes | + HandleCommentRepliesType | + CommentSubmitActionTypes ): CommentsState => { switch (action.type) { case COMMENTS_REQUEST_START: @@ -55,7 +61,7 @@ const commentsReducer = ( items: action.comments.map( (comment: ICommentJSON) => commentReducer(undefined, commentRequestSuccess(comment)) ), - replies: [commentRepliesReducer(undefined, {type: 'COMMENT_REQUEST_SUCCESS', comment: { id: -1 } }), + replies: [commentRepliesReducer(undefined, {type: 'COMMENT_REQUEST_SUCCESS', comment: { id: -1 } as ICommentJSON }), ...action.comments.map( (comment: ICommentJSON) => commentRepliesReducer(undefined, commentRequestSuccess(comment)) )], diff --git a/app/javascript/reducers/currentPostReducer.ts b/app/javascript/reducers/currentPostReducer.ts index 18042bec..ea0a42c6 100644 --- a/app/javascript/reducers/currentPostReducer.ts +++ b/app/javascript/reducers/currentPostReducer.ts @@ -50,10 +50,10 @@ interface CurrentPostState { } const initialState: CurrentPostState = { - item: postReducer(undefined, {}), + item: postReducer(undefined, {} as PostRequestActionTypes), isLoading: false, error: '', - comments: commentsReducer(undefined, {}), + comments: commentsReducer(undefined, {} as CommentsRequestActionTypes), }; const currentPostReducer = ( diff --git a/app/javascript/reducers/postReducer.ts b/app/javascript/reducers/postReducer.ts index 6520f70c..1b4dd6b4 100644 --- a/app/javascript/reducers/postReducer.ts +++ b/app/javascript/reducers/postReducer.ts @@ -1,12 +1,15 @@ import { + PostRequestActionTypes, POST_REQUEST_SUCCESS, } from '../actions/requestPost'; import { + ChangePostBoardSuccessAction, CHANGE_POST_BOARD_SUCCESS, } from '../actions/changePostBoard'; import { + ChangePostStatusSuccessAction, CHANGE_POST_STATUS_SUCCESS, } from '../actions/changePostStatus'; @@ -25,7 +28,10 @@ const initialState: IPost = { const postReducer = ( state = initialState, - action, + action: + PostRequestActionTypes | + ChangePostBoardSuccessAction | + ChangePostStatusSuccessAction, ): IPost => { switch (action.type) { case POST_REQUEST_SUCCESS: diff --git a/app/javascript/reducers/postsReducer.ts b/app/javascript/reducers/postsReducer.ts index c263584c..b9a8b8af 100644 --- a/app/javascript/reducers/postsReducer.ts +++ b/app/javascript/reducers/postsReducer.ts @@ -37,10 +37,7 @@ const initialState: PostsState = { haveMore: true, areLoading: false, error: '', - filters: { // improve - searchQuery: '', - postStatusId: null, - }, + filters: filtersReducer(undefined, {} as ChangeFiltersActionTypes), }; const postsReducer = ( diff --git a/package.json b/package.json index 5b3d2976..35b6e956 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "version": "0.1.0", "devDependencies": { + "@types/react-redux": "^7.1.3", "redux-devtools-extension": "^2.13.8", "webpack-dev-server": "^3.8.0" } diff --git a/yarn.lock b/yarn.lock index 70df2f20..814223be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -820,6 +820,14 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/hoist-non-react-statics@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -847,6 +855,16 @@ dependencies: "@types/react" "*" +"@types/react-redux@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.3.tgz#7efc1e36267e9bf8b24ec89ac30a27a65c94cd25" + integrity sha512-coaQFfn6XrHF/4CSF8eBM9rUbi5TX6qVhS+KF89Z2nC9YdTKTckOpJLJyQocYLrXF0IFX+/ZUJwMvbZ0nNmkDg== + dependencies: + "@types/hoist-non-react-statics" "^3.3.0" + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + redux "^4.0.0" + "@types/react@*", "@types/react@^16.9.2": version "16.9.2" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.2.tgz#6d1765431a1ad1877979013906731aae373de268" @@ -5932,7 +5950,7 @@ redux-thunk@^2.3.0: resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== -redux@^4.0.4: +redux@^4.0.0, redux@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.4.tgz#4ee1aeb164b63d6a1bcc57ae4aa0b6e6fa7a3796" integrity sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==