From a0f37d569ba86a35fd6da06cb07bb5fcb8454441 Mon Sep 17 00:00:00 2001 From: bokotomo Date: Thu, 23 Apr 2020 16:56:51 +0900 Subject: [PATCH 01/50] feat: actions --- .github/workflows/eslint.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index eecb307..c24dd6f 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -15,12 +15,12 @@ jobs: node-version: [10] steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - name: yarn install, eslint + - name: yarn install and eslint run: | yarn yarn lint From df858edffe46a63ab5ff3ceeeafbd0b232d83997 Mon Sep 17 00:00:00 2001 From: bokotomo Date: Thu, 23 Apr 2020 17:32:07 +0900 Subject: [PATCH 02/50] feat --- .github/workflows/eslint.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index c24dd6f..6f6a336 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -1,8 +1,6 @@ name: ESlint on: - push: - branches: [master] pull_request: branches: [master] From d153bebb097439155ec1f80025b74ad5b2cc0d42 Mon Sep 17 00:00:00 2001 From: bokotomo Date: Thu, 23 Apr 2020 21:30:15 +0900 Subject: [PATCH 03/50] feat: message inprogress --- .../molecules/MessageTaskProgress.tsx | 4 +- src/components/pages/TopPage.tsx | 1 - src/containers/TopPage.type.ts | 1 - src/containers/TopPageContainer.ts | 1 - src/mock/messages.ts | 85 ------------------- src/redux/actions/message.ts | 3 +- src/redux/reducer/message.ts | 5 +- src/websocket/controller/message.ts | 36 ++++++++ src/websocket/handler.ts | 4 + 9 files changed, 46 insertions(+), 94 deletions(-) delete mode 100644 src/mock/messages.ts create mode 100644 src/websocket/controller/message.ts diff --git a/src/components/molecules/MessageTaskProgress.tsx b/src/components/molecules/MessageTaskProgress.tsx index a68ca3c..7bccfb5 100644 --- a/src/components/molecules/MessageTaskProgress.tsx +++ b/src/components/molecules/MessageTaskProgress.tsx @@ -61,10 +61,10 @@ export const MessageTaskProgress: React.FC = (props) => {
{message.text} {message.status === 'done' ? 'が完了しました。' : ''} - {message.status === 'run' ? 'を実行中。' : ''} + {message.status === 'inprogress' ? 'を実行中。' : ''} {message.status === 'alldone' ? '' : ''}
-
進捗率 {message.progress}%
+ {/*
*/} diff --git a/src/components/pages/TopPage.tsx b/src/components/pages/TopPage.tsx index 18dfe2c..fafbf44 100644 --- a/src/components/pages/TopPage.tsx +++ b/src/components/pages/TopPage.tsx @@ -30,7 +30,6 @@ export class TopPage extends React.Component { constructor(props: Props) { super(props); this.props.setWebSocket(); - this.props.handleOnSetMessage(); this.props.handleOnSetRoom(); } diff --git a/src/containers/TopPage.type.ts b/src/containers/TopPage.type.ts index 2b9c134..5b887d6 100644 --- a/src/containers/TopPage.type.ts +++ b/src/containers/TopPage.type.ts @@ -10,7 +10,6 @@ export interface TopPageHandler { handleOnSetSelectedTask(task: TaskCard): void; handleOnAddTaskTodo(socket: WebSocket, task: TaskCard): void; updateTaskStatus(socket: WebSocket, taskId: string, status: string): void; - handleOnSetMessage(): void; handleOnAddMessage(message: MessageProgress): void; handleOnSetRoom(): void; registerUser(socket: WebSocket, name: string): void; diff --git a/src/containers/TopPageContainer.ts b/src/containers/TopPageContainer.ts index 9054200..eb6be18 100644 --- a/src/containers/TopPageContainer.ts +++ b/src/containers/TopPageContainer.ts @@ -43,7 +43,6 @@ const mapDispatchToProps = (dispatch: Dispatch) => { service.addTask(dispatch, socket, task), updateTaskStatus: (socket: WebSocket, taskId: string, status: string) => service.updateTaskStatus(dispatch, socket, taskId, status), - handleOnSetMessage: () => dispatch(ActionMessage.setMessage()), handleOnAddMessage: (messageProgress: MessageProgress) => dispatch(ActionMessage.addMessage(messageProgress)), handleOnSetRoom: () => dispatch(ActionRoom.setRoom()), diff --git a/src/mock/messages.ts b/src/mock/messages.ts deleted file mode 100644 index 3a24602..0000000 --- a/src/mock/messages.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Message } from '@/types/message'; - -export const mockMessages: Message[] = [ - { - id: '1', - userName: 'tomo', - userColor: '#1B7B89', - text: 'railsのAPI作成', - progress: 20, - status: 'done', - createdAt: new Date('2019/01/01 12:00:00'), - }, - { - id: '2', - userName: 'oakfreojare', - userColor: '#34D05E', - text: 'railsのAPIのデプロイ', - progress: 40, - status: 'run', - createdAt: new Date('2019/01/01 12:00:00'), - }, - { - id: '3', - userName: '山田太郎', - userColor: '#8A29AD', - text: 'EC2の環境設定', - progress: 70, - status: 'done', - createdAt: new Date('2019/01/01 12:00:00'), - }, - { - id: '4', - userName: '山田太郎', - userColor: '#8A29AD', - text: 'EC2へ自動デプロイ', - progress: 70, - status: 'done', - createdAt: new Date('2019/01/01 12:00:00'), - }, - { - id: '5', - userName: '山田太郎', - userColor: '#8A29AD', - text: 'APIの調査', - progress: 70, - status: 'done', - createdAt: new Date('2019/01/01 12:00:00'), - }, - { - id: '6', - userName: '山田太郎', - userColor: '#8A29AD', - text: 'nodeでAPI作成', - progress: 70, - status: 'run', - createdAt: new Date('2019/01/01 12:00:00'), - }, - { - id: '7', - userName: 'まっつー', - userColor: '#D3402E', - text: 'vueの基板作成', - progress: 70, - status: 'run', - createdAt: new Date('2019/01/01 12:00:00'), - }, - { - id: '8', - userName: 'tomo', - userColor: '#1B7B89', - text: 'フロントでプロトタイプ作成', - progress: 70, - status: 'run', - createdAt: new Date('2019/01/01 12:00:00'), - }, - { - id: '9', - userName: '山田太郎', - userColor: '#8A29AD', - text: '全てのタスクを完了させました!おめでとうございます!', - progress: 100, - status: 'alldone', - createdAt: new Date('2019/01/02 12:00:00'), - }, -]; diff --git a/src/redux/actions/message.ts b/src/redux/actions/message.ts index a9e9356..65b0ae9 100644 --- a/src/redux/actions/message.ts +++ b/src/redux/actions/message.ts @@ -1,9 +1,10 @@ import { MessageProgress } from '@/types/messageProgress'; +import { Message } from '@/types/message'; import { actionCreatorFactory } from '../../../node_modules/typescript-fsa'; const actionCreator = actionCreatorFactory(); export const ActionMessage = { - setMessage: actionCreator('SET_MESSAGE'), + setMessage: actionCreator('SET_MESSAGE'), addMessage: actionCreator('ADD_MESSAGE'), }; diff --git a/src/redux/reducer/message.ts b/src/redux/reducer/message.ts index 3acfe62..d553de2 100644 --- a/src/redux/reducer/message.ts +++ b/src/redux/reducer/message.ts @@ -1,7 +1,6 @@ import { ActionMessage } from '@/redux/actions/message'; import { initialStateAuth } from '@/redux/reducer/auth'; import { Message } from '@/types/message'; -import { mockMessages } from '@/mock/messages'; import { reducerWithInitialState } from '../../../node_modules/typescript-fsa-reducers'; export interface StateMessage { @@ -13,8 +12,8 @@ export const initialStateMessage: StateMessage = { }; export const ReducerMessage = reducerWithInitialState(initialStateMessage) - .case(ActionMessage.setMessage, (state) => { - return { ...state, messages: mockMessages }; + .case(ActionMessage.setMessage, (state, messages) => { + return { ...state, messages }; }) .case(ActionMessage.addMessage, (state, message) => { return { diff --git a/src/websocket/controller/message.ts b/src/websocket/controller/message.ts new file mode 100644 index 0000000..23de0f7 --- /dev/null +++ b/src/websocket/controller/message.ts @@ -0,0 +1,36 @@ +import { Dispatch } from 'redux'; +import { Message } from '@/types/message'; +import { ActionMessage } from '@/redux/actions/message'; +import moment from 'moment'; + +export const messageProgressIndex = ( + message: MessageEvent, + socket: WebSocket, + dispatch: Dispatch +) => { + interface ReponseMessage { + readonly id: string; + readonly userName: string; + readonly userColor: string; + readonly text: string; + readonly status: string; + readonly createdAt: string; + } + interface ResponseMessageProgress { + messages: ReponseMessage[]; + } + const data: ResponseMessageProgress = JSON.parse(message.data); + const domainMessages = data.messages.map((resMessage: ReponseMessage) => { + return { + id: resMessage.id, + userName: resMessage.userName, + userColor: resMessage.userColor, + text: resMessage.text, + progress: 0, + status: resMessage.status, + createdAt: moment(resMessage.createdAt, 'YYYY/MM/DD HH:mm:ss').toDate(), + } as Message; + }); + + dispatch(ActionMessage.setMessage(domainMessages)); +}; diff --git a/src/websocket/handler.ts b/src/websocket/handler.ts index 40f50fc..97878bf 100644 --- a/src/websocket/handler.ts +++ b/src/websocket/handler.ts @@ -4,6 +4,7 @@ import { Cookies } from 'react-cookie'; import { authentication } from '@/websocket/controller/authentication'; import { requestAuthentication } from '@/websocket/request/authentication'; import { userCreated, activeUserSearch } from '@/websocket/controller/user'; +import { messageProgressIndex } from '@/websocket/controller/message'; import { taskCreated, taskIndex, @@ -44,6 +45,9 @@ export const onMessage = ( case 'task_delete': taskDelete(message, socket, dispatch); break; + case 'message_progress_index': + messageProgressIndex(message, socket, dispatch); + break; case 'active_user_search': activeUserSearch(message, socket, dispatch); break; From 4ce96f961d6d2b35fd0f33ecacfb7678b8e2f5f3 Mon Sep 17 00:00:00 2001 From: bokotomo Date: Fri, 24 Apr 2020 00:45:59 +0900 Subject: [PATCH 04/50] feat: message compornets --- src/components/atom/UserIconItem.tsx | 27 ++++++++++++++++ src/components/atom/UserIconItemMessage.tsx | 28 +++++++++++++++++ .../molecules/MessageTaskProgress.tsx | 12 +++---- src/components/molecules/MessageUserList.tsx | 11 ++----- src/components/molecules/card.tsx | 2 +- src/components/molecules/taskArea.tsx | 19 ------------ src/components/organisms/TaskBoard.tsx | 2 -- src/components/pages/TopPage.tsx | 1 - src/containers/TopPage.type.ts | 2 -- src/containers/TopPageContainer.ts | 4 --- src/redux/actions/message.ts | 3 +- src/redux/reducer/message.ts | 14 +-------- src/websocket/controller/message.ts | 31 +++++++++++++++++++ src/websocket/handler.ts | 8 ++++- 14 files changed, 102 insertions(+), 62 deletions(-) create mode 100644 src/components/atom/UserIconItem.tsx create mode 100644 src/components/atom/UserIconItemMessage.tsx diff --git a/src/components/atom/UserIconItem.tsx b/src/components/atom/UserIconItem.tsx new file mode 100644 index 0000000..309da50 --- /dev/null +++ b/src/components/atom/UserIconItem.tsx @@ -0,0 +1,27 @@ +import React from 'react'; + +interface Props { + readonly name: string; + readonly color: string; +} +export const UserIconItem: React.FC = (props) => { + const getTopName = (name: string) => name.slice(0, 1); + return ( +
+ {getTopName(props.name)} +
+ ); +}; diff --git a/src/components/atom/UserIconItemMessage.tsx b/src/components/atom/UserIconItemMessage.tsx new file mode 100644 index 0000000..67d482e --- /dev/null +++ b/src/components/atom/UserIconItemMessage.tsx @@ -0,0 +1,28 @@ +import React from 'react'; + +interface Props { + readonly name: string; + readonly color: string; +} +export const UserIconItemMessage: React.FC = (props) => { + const getTopName = (name: string) => name.slice(0, 1); + return ( +
+ {getTopName(props.name)} +
+ ); +}; diff --git a/src/components/molecules/MessageTaskProgress.tsx b/src/components/molecules/MessageTaskProgress.tsx index 7bccfb5..b86a689 100644 --- a/src/components/molecules/MessageTaskProgress.tsx +++ b/src/components/molecules/MessageTaskProgress.tsx @@ -2,6 +2,7 @@ import React, { useEffect } from 'react'; import moment from 'moment'; import { Message } from '@/types/message'; import { MessageLineBar } from '@/components/atom/MessageLineBar'; +import { UserIconItemMessage } from '@/components/atom/UserIconItemMessage'; interface Props { readonly messages: Message[]; @@ -36,14 +37,9 @@ export const MessageTaskProgress: React.FC = (props) => { paddingRight: 15, }} > -
diff --git a/src/components/molecules/MessageUserList.tsx b/src/components/molecules/MessageUserList.tsx index 970fa5c..dd1074e 100644 --- a/src/components/molecules/MessageUserList.tsx +++ b/src/components/molecules/MessageUserList.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { ActiveUser } from '@/types/activeUser'; import { MessageLineBar } from '@/components/atom/MessageLineBar'; +import { UserIconItem } from '@/components/atom/UserIconItem'; interface Props { readonly activeUsers: ActiveUser[]; @@ -28,15 +29,7 @@ export const MessageUserList: React.FC = (props) => { }} >
-
+
= (props) => { )} >
{props.task.title}
-
予定:{props.task.time}h
+
{props.task.time}h
)} diff --git a/src/components/molecules/taskArea.tsx b/src/components/molecules/taskArea.tsx index bae7547..98996c3 100644 --- a/src/components/molecules/taskArea.tsx +++ b/src/components/molecules/taskArea.tsx @@ -4,7 +4,6 @@ import { DropResult, DraggableLocation, } from 'react-beautiful-dnd'; -import moment from 'moment'; import { TaskCard } from '@/types/taskBoard'; import { Item } from '@/components/molecules/item'; @@ -14,7 +13,6 @@ interface Props { readonly handleOnSetTaskDone: Function; readonly handleOnModalOpend: Function; readonly handleOnSetSelectedTask: Function; - readonly handleOnAddMessage: Function; readonly updateTaskStatus: Function; readonly todos: TaskCard[]; readonly inProgresses: TaskCard[]; @@ -60,27 +58,10 @@ export const TaskArea: React.FC = (props) => { props.updateTaskStatus(props.socket, removedTask.id, 'todo'); } else if (droppableDestination.droppableId === 'inProgressArea') { inProgresses = destClone; - if (droppableSource.droppableId === 'todoArea') { - const message = props.todos[droppableSource.index]; - props.handleOnAddMessage({ - id: moment(new Date()).format('HH:mm:ss'), - title: message.title, - progress: 60, - status: 'run', - }); - } props.updateTaskStatus(props.socket, removedTask.id, 'inprogress'); } else { alert('よろしいですか?'); - const message = props.inProgresses[droppableSource.index]; - props.handleOnAddMessage({ - id: moment(new Date()).format('HH:mm:ss'), - title: message.title, - progress: 60, - status: 'done', - }); props.updateTaskStatus(props.socket, removedTask.id, 'done'); - dones = destClone; } return { diff --git a/src/components/organisms/TaskBoard.tsx b/src/components/organisms/TaskBoard.tsx index bcfa33e..731177d 100644 --- a/src/components/organisms/TaskBoard.tsx +++ b/src/components/organisms/TaskBoard.tsx @@ -9,7 +9,6 @@ interface Props { readonly handleOnSetTaskTodo: Function; readonly handleOnSetTaskInProgresses: Function; readonly handleOnSetTaskDone: Function; - readonly handleOnAddMessage: Function; readonly updateTaskStatus: Function; readonly todos: TaskCard[]; readonly inProgresses: TaskCard[]; @@ -76,7 +75,6 @@ export const TaskBoard: React.FC = (props) => { handleOnSetTaskDone={props.handleOnSetTaskDone} handleOnModalOpend={props.handleOnModalOpend} handleOnSetSelectedTask={props.handleOnSetSelectedTask} - handleOnAddMessage={props.handleOnAddMessage} updateTaskStatus={props.updateTaskStatus} todos={props.todos} inProgresses={props.inProgresses} diff --git a/src/components/pages/TopPage.tsx b/src/components/pages/TopPage.tsx index fafbf44..7fdc8dc 100644 --- a/src/components/pages/TopPage.tsx +++ b/src/components/pages/TopPage.tsx @@ -72,7 +72,6 @@ export class TopPage extends React.Component { handleOnSetTaskTodo={this.props.handleOnSetTaskTodo} handleOnSetTaskInProgresses={this.props.handleOnSetTaskInProgresses} handleOnSetTaskDone={this.props.handleOnSetTaskDone} - handleOnAddMessage={this.props.handleOnAddMessage} updateTaskStatus={this.props.updateTaskStatus} todos={this.props.todos} inProgresses={this.props.inProgresses} diff --git a/src/containers/TopPage.type.ts b/src/containers/TopPage.type.ts index 5b887d6..ad5803e 100644 --- a/src/containers/TopPage.type.ts +++ b/src/containers/TopPage.type.ts @@ -1,5 +1,4 @@ import { TaskCard } from '@/types/taskBoard'; -import { MessageProgress } from '@/types/messageProgress'; export interface TopPageHandler { setWebSocket(): void; @@ -10,7 +9,6 @@ export interface TopPageHandler { handleOnSetSelectedTask(task: TaskCard): void; handleOnAddTaskTodo(socket: WebSocket, task: TaskCard): void; updateTaskStatus(socket: WebSocket, taskId: string, status: string): void; - handleOnAddMessage(message: MessageProgress): void; handleOnSetRoom(): void; registerUser(socket: WebSocket, name: string): void; deleteTask(socket: WebSocket, taskId: string): void; diff --git a/src/containers/TopPageContainer.ts b/src/containers/TopPageContainer.ts index eb6be18..d9df920 100644 --- a/src/containers/TopPageContainer.ts +++ b/src/containers/TopPageContainer.ts @@ -2,11 +2,9 @@ import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { TopPage } from '@/components/pages/TopPage'; import { ActionTask } from '@/redux/actions/task'; -import { ActionMessage } from '@/redux/actions/message'; import { ActionRoom } from '@/redux/actions/room'; import { AppState } from '@/redux/store'; import { TaskCard } from '@/types/taskBoard'; -import { MessageProgress } from '@/types/messageProgress'; import { service } from '@/service/service'; const mapStateToProps = (appState: AppState) => { @@ -43,8 +41,6 @@ const mapDispatchToProps = (dispatch: Dispatch) => { service.addTask(dispatch, socket, task), updateTaskStatus: (socket: WebSocket, taskId: string, status: string) => service.updateTaskStatus(dispatch, socket, taskId, status), - handleOnAddMessage: (messageProgress: MessageProgress) => - dispatch(ActionMessage.addMessage(messageProgress)), handleOnSetRoom: () => dispatch(ActionRoom.setRoom()), registerUser: (socket: WebSocket, name: string) => service.userRegister(dispatch, socket, name), diff --git a/src/redux/actions/message.ts b/src/redux/actions/message.ts index 65b0ae9..03cdfe0 100644 --- a/src/redux/actions/message.ts +++ b/src/redux/actions/message.ts @@ -1,4 +1,3 @@ -import { MessageProgress } from '@/types/messageProgress'; import { Message } from '@/types/message'; import { actionCreatorFactory } from '../../../node_modules/typescript-fsa'; @@ -6,5 +5,5 @@ const actionCreator = actionCreatorFactory(); export const ActionMessage = { setMessage: actionCreator('SET_MESSAGE'), - addMessage: actionCreator('ADD_MESSAGE'), + addMessage: actionCreator('ADD_MESSAGE'), }; diff --git a/src/redux/reducer/message.ts b/src/redux/reducer/message.ts index d553de2..72e7d2d 100644 --- a/src/redux/reducer/message.ts +++ b/src/redux/reducer/message.ts @@ -1,5 +1,4 @@ import { ActionMessage } from '@/redux/actions/message'; -import { initialStateAuth } from '@/redux/reducer/auth'; import { Message } from '@/types/message'; import { reducerWithInitialState } from '../../../node_modules/typescript-fsa-reducers'; @@ -18,17 +17,6 @@ export const ReducerMessage = reducerWithInitialState(initialStateMessage) .case(ActionMessage.addMessage, (state, message) => { return { ...state, - messages: [ - ...state.messages, - { - id: message.id, - userName: initialStateAuth.name, - userColor: '#8A29AD', - text: message.title, - progress: message.progress, - status: message.status, - createdAt: new Date(), - }, - ], + messages: [...state.messages, message], }; }); diff --git a/src/websocket/controller/message.ts b/src/websocket/controller/message.ts index 23de0f7..c6441f1 100644 --- a/src/websocket/controller/message.ts +++ b/src/websocket/controller/message.ts @@ -34,3 +34,34 @@ export const messageProgressIndex = ( dispatch(ActionMessage.setMessage(domainMessages)); }; + +export const messageProgressFind = ( + message: MessageEvent, + socket: WebSocket, + dispatch: Dispatch +) => { + interface ReponseMessage { + readonly id: string; + readonly userName: string; + readonly userColor: string; + readonly text: string; + readonly status: string; + readonly createdAt: string; + } + interface ResponseMessageProgress { + message: ReponseMessage; + } + const data: ResponseMessageProgress = JSON.parse(message.data); + const resMessage = data.message as ReponseMessage; + const domainMessage = { + id: resMessage.id, + userName: resMessage.userName, + userColor: resMessage.userColor, + text: resMessage.text, + progress: 0, + status: resMessage.status, + createdAt: moment(resMessage.createdAt, 'YYYY/MM/DD HH:mm:ss').toDate(), + } as Message; + + dispatch(ActionMessage.addMessage(domainMessage)); +}; diff --git a/src/websocket/handler.ts b/src/websocket/handler.ts index 97878bf..98931a5 100644 --- a/src/websocket/handler.ts +++ b/src/websocket/handler.ts @@ -4,7 +4,10 @@ import { Cookies } from 'react-cookie'; import { authentication } from '@/websocket/controller/authentication'; import { requestAuthentication } from '@/websocket/request/authentication'; import { userCreated, activeUserSearch } from '@/websocket/controller/user'; -import { messageProgressIndex } from '@/websocket/controller/message'; +import { + messageProgressIndex, + messageProgressFind, +} from '@/websocket/controller/message'; import { taskCreated, taskIndex, @@ -48,6 +51,9 @@ export const onMessage = ( case 'message_progress_index': messageProgressIndex(message, socket, dispatch); break; + case 'message_progress_added': + messageProgressFind(message, socket, dispatch); + break; case 'active_user_search': activeUserSearch(message, socket, dispatch); break; From 6219188964c729dacaf94796e1f68908ecae8198 Mon Sep 17 00:00:00 2001 From: bokotomo Date: Sat, 25 Apr 2020 11:24:17 +0900 Subject: [PATCH 05/50] =?UTF-8?q?feat:=20=E5=BE=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/modal/ModalAddTask.tsx | 17 +---------------- src/components/molecules/taskArea.tsx | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/components/modal/ModalAddTask.tsx b/src/components/modal/ModalAddTask.tsx index 1cf36c9..bdaaec6 100644 --- a/src/components/modal/ModalAddTask.tsx +++ b/src/components/modal/ModalAddTask.tsx @@ -58,21 +58,6 @@ export const ModalAddTask: React.FC = (props) => { function handleHourChange(e: React.ChangeEvent) { const timeTmp = Number(e.target.value); - if (!timeTmp) { - // [TODO] - e.target.value = '0.5'; - return; - } - if (timeTmp > 12) { - // [TODO] - e.target.value = '12'; - return; - } - if (timeTmp < 0.5) { - // [TODO] - e.target.value = '0.5'; - return; - } time = timeTmp; } @@ -155,7 +140,7 @@ export const ModalAddTask: React.FC = (props) => { placeholder="1" min={0.5} max={12} - step={0.1} + step={0.5} />
diff --git a/src/components/molecules/taskArea.tsx b/src/components/molecules/taskArea.tsx index 98996c3..d76b37f 100644 --- a/src/components/molecules/taskArea.tsx +++ b/src/components/molecules/taskArea.tsx @@ -37,15 +37,24 @@ export const TaskArea: React.FC = (props) => { droppableSource: DraggableLocation, droppableDestination: DraggableLocation ) => { + let todos = props.todos as TaskCard[]; + let inProgresses = props.inProgresses as TaskCard[]; + let dones = props.dones as TaskCard[]; + if (droppableDestination.droppableId === 'doneArea') { + const isYes = window.confirm('完了しますか?'); + if (!isYes) + return { + todos, + inProgresses, + dones, + }; + } const sourceClone = Array.from(source) as TaskCard[]; const destClone = Array.from(destination) as TaskCard[]; const [removedTask] = sourceClone.splice(droppableSource.index, 1); destClone.splice(droppableDestination.index, 0, removedTask); - let todos = props.todos as TaskCard[]; - let inProgresses = props.inProgresses as TaskCard[]; - let dones = props.dones as TaskCard[]; if (droppableSource.droppableId === 'todoArea') { todos = sourceClone; } else if (droppableSource.droppableId === 'inProgressArea') { @@ -60,7 +69,6 @@ export const TaskArea: React.FC = (props) => { inProgresses = destClone; props.updateTaskStatus(props.socket, removedTask.id, 'inprogress'); } else { - alert('よろしいですか?'); props.updateTaskStatus(props.socket, removedTask.id, 'done'); dones = destClone; } From f8e4a1db1d6549a9b839d625312b1b76978fa251 Mon Sep 17 00:00:00 2001 From: bokotomo Date: Sat, 25 Apr 2020 14:49:17 +0900 Subject: [PATCH 06/50] feat: producton docker --- README.md | 11 +++++++++++ infrastructure/docker/docker-compose.yml | 19 +++++++------------ src/components/modal/ModalTaskDetail.tsx | 21 ++++++++++++++++++--- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 6ecaf5f..3f21ceb 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,14 @@ npm run lint-fix # API https://github.com/bokotomo/WorkMode-api + +## Check Production + +check production by nginx and docker + +``` +cd ./infrastructure/docker +docker-compose up -d + +// open http://localhost:9998 +``` diff --git a/infrastructure/docker/docker-compose.yml b/infrastructure/docker/docker-compose.yml index 28e2a26..904568c 100644 --- a/infrastructure/docker/docker-compose.yml +++ b/infrastructure/docker/docker-compose.yml @@ -1,13 +1,8 @@ -version: "3.7" +version: '3.7' services: - work-mode-front: - build: - context: . - dockerfile: Dockerfile - container_name: "work-mode" - volumes: - - ../../:/src - tty: true - expose: - - 80 - privileged: true + work-mode-front-prod: + image: nginx:1.17-alpine + ports: + - '9998:80' + volumes: + - ../../build:/usr/share/nginx/html diff --git a/src/components/modal/ModalTaskDetail.tsx b/src/components/modal/ModalTaskDetail.tsx index 249fd33..101328b 100644 --- a/src/components/modal/ModalTaskDetail.tsx +++ b/src/components/modal/ModalTaskDetail.tsx @@ -27,6 +27,18 @@ export const ModalTaskDetail: React.FC = (props) => { }, }; + const getDetail = (text: string) => { + return text.split('\n').map((p, index) => { + const k = `${p}-${index}`; + return ( + + {p} +
+
+ ); + }); + }; + function closeModal() { props.handleOnModalOpend(''); } @@ -40,7 +52,7 @@ export const ModalTaskDetail: React.FC = (props) => { } function editTask() { - alert('OK2'); + alert('編集モードへ切り替え'); } return ( @@ -65,8 +77,11 @@ export const ModalTaskDetail: React.FC = (props) => { icon="times" />
-
{props.selectedTask.detail}
-
予定時間:{props.selectedTask.time}h
+
+ {getDetail(props.selectedTask.detail)} +
+
予定時間 {props.selectedTask.time}h
+
開始時間 11:25