diff --git a/config/paths.js b/config/paths.js index 146fd0c..9c7c793 100644 --- a/config/paths.js +++ b/config/paths.js @@ -1,5 +1,5 @@ -const path = require('path') -const fs = require('fs') +var path = require('path') +var fs = require('fs') const projectDirectory = fs.realpathSync(process.cwd()) const resolve = relativePath => path.resolve(projectDirectory, relativePath) diff --git a/web/components/BlockList.jsx b/web/components/BlockList.jsx index b47ea26..4bcc434 100644 --- a/web/components/BlockList.jsx +++ b/web/components/BlockList.jsx @@ -1,87 +1,12 @@ import React from 'react'; -import { connect } from 'react-redux'; -import moment from 'moment'; -import { cloneDeep } from 'lodash'; - -import SetBlock from './SetBlock'; -import Text from './Text'; -import { DEFAULT_SETBLOCKS } from '../constants'; - -import { - setEnableSubmit, updateUnsavedSetblocks, -} from '../reducers/environment'; - -class BlockList extends React.Component { - - completeWithEmptySetBlocks(setBlocks) { - const defaultSetBlocks = cloneDeep(DEFAULT_SETBLOCKS); - let replacedBlocks = 0; - setBlocks = _.orderBy(setBlocks, ['blockTime'], ['asc']); // Use Lodash to sort array by 'name' - setBlocks = _.uniqBy(setBlocks, 'blockTime'); // Use Lodash to delete repeated blockTimes - if (setBlocks && setBlocks.length > 0) { // To avoid iterate if the array is empty, return default - defaultSetBlocks.forEach((setBlock, index, theArray) => { - if (setBlocks && replacedBlocks < setBlocks.length && setBlock.blockTime === setBlocks[replacedBlocks].blockTime) { - theArray[index] = setBlocks[replacedBlocks]; - replacedBlocks++; - } - }); - } - return defaultSetBlocks - } - - updateUnsavedSetBlock(selectedDay, index, editedSetBlock ) { - const { unsavedSetBlocks } = this.props - let dayEdited = unsavedSetBlocks[selectedDay]; - dayEdited[index] = editedSetBlock; // index 0 = SetBlock with blockTime 1 - this.props.updateUnsavedSetblocks({ - ...unsavedSetBlocks, - [selectedDay]: dayEdited - }) - this.props.setEnableSubmit(true) - } +export default class BlockList extends React.Component { render() { - const { - editModeSchedule, currentWeeklySetblocks, unsavedSetBlocks, selectedDay - } = this.props; - const selectedDayFormatted = moment(selectedDay).format('YYYY-MM-DD') - let setBlocksByDate = _.groupBy(currentWeeklySetblocks, 'date'); - let setBlocks = setBlocksByDate[selectedDayFormatted]; - - if (editModeSchedule && unsavedSetBlocks ) { - // As it is your schedule, you can see the empty blocks, to complete then, that's why it is completed with the missing ones - return this.completeWithEmptySetBlocks(setBlocks).map((setBlock, index) => { - return ( - this.updateUnsavedSetBlock(selectedDayFormatted, index, editedSetBlock )} - /> - ) - }) - } else if (!editModeSchedule && setBlocks) { - return setBlocks.map((setBlock, index) => { - return - }) - } else { - return ( - This user hasn't committed any Setblocks for this day - ) - } + return ( +
+
BlockList
+
+ ); } } -const mapStateToProps = ({ environment }) => { - return { - ...environment - }; -}; - -const mapDispatchToProps = (dispatch) => { - return { - setEnableSubmit: (enableSubmit) => dispatch(setEnableSubmit(enableSubmit)), - updateUnsavedSetblocks: (unsavedSetBlocks) => dispatch(updateUnsavedSetblocks(unsavedSetBlocks)) - }; -}; -export default connect(mapStateToProps, mapDispatchToProps)(BlockList); \ No newline at end of file diff --git a/web/components/CommitBlock.jsx b/web/components/CommitBlock.jsx index 79b68a2..a2bdfee 100644 --- a/web/components/CommitBlock.jsx +++ b/web/components/CommitBlock.jsx @@ -3,9 +3,9 @@ import moment from 'moment'; import { connect } from 'react-redux'; import { Check } from 'styled-icons/feather/Check.cjs' +import Text from './Text'; import Card from './Card'; import Flex from './Flex'; -import Text from './Text'; import { createSetBlock, setEditModeSchedule, updateSetBlock } from '../reducers/environment'; diff --git a/web/components/DayBlock.jsx b/web/components/DayBlock.jsx index 5db3f7b..5b9203a 100644 --- a/web/components/DayBlock.jsx +++ b/web/components/DayBlock.jsx @@ -1,11 +1,10 @@ -import React from 'react'; import { connect } from 'react-redux'; import moment from 'moment'; +import React from 'react'; - -import Card from './Card'; import Flex from './Flex'; import Text from './Text'; +import Card from './Card'; class DayBlock extends React.Component { diff --git a/web/components/NavigationBar.js b/web/components/NavigationBar.js index fdc2e53..39722ba 100644 --- a/web/components/NavigationBar.js +++ b/web/components/NavigationBar.js @@ -1,6 +1,6 @@ import React from 'react'; import { connect } from 'react-redux'; -import _ from 'lodash' +var _ = require('lodash'); import NavLinkItem from './NavLinkItem'; diff --git a/web/components/SchedulePage.jsx b/web/components/SchedulePage.jsx index 13398a7..e913d75 100644 --- a/web/components/SchedulePage.jsx +++ b/web/components/SchedulePage.jsx @@ -3,20 +3,18 @@ import moment from 'moment'; import { connect } from 'react-redux'; import { cloneDeep } from 'lodash'; -import BlockList from './BlockList'; -import CommitBlock from './CommitBlock'; -import Flex from './Flex'; -import LoadingDots from './Loading'; import ScheduleHeader from './ScheduleHeader'; import SideBar from './SideBar'; +import Flex from './Flex'; +import SetBlock from './SetBlock'; import Text from './Text'; - -import { DEFAULT_SETBLOCKS } from '../constants'; +import LoadingDots from './Loading'; +import CommitBlock from './CommitBlock'; +import { DEFAULT_SETBLOCKS } from '../constants/index'; import { fetchCurrentTeamMemberById, setEditModeSchedule, - setEnableSubmit, setSelectedDay, updateUnsavedSetblocks } from '../reducers/environment'; @@ -25,6 +23,7 @@ import { class SchedulePage extends React.Component { state = { daysOfWeek: [], + enableSubmit: false, } componentDidMount() { @@ -70,7 +69,7 @@ class SchedulePage extends React.Component { // This only take effect if change the currentTeamMember if ((editModeSchedule && currentTeamMember !== nextProps.currentTeamMember) || selectedDay !== nextProps.selectedDay) { this.makeSetBlocksForEdit(nextProps.currentWeeklySetblocks); - this.props.setEnableSubmit(false) + this.setState({ enableSubmit: false }) } } @@ -87,21 +86,61 @@ class SchedulePage extends React.Component { let replacedBlocks = 0; setBlocks = _.orderBy(setBlocks, ['blockTime'], ['asc']); // Use Lodash to sort array by 'name' setBlocks = _.uniqBy(setBlocks, 'blockTime'); // Use Lodash to delete repeated blockTimes - if (setBlocks && setBlocks.length > 0) { // To avoid iterate if the array is empty, return default - defaultSetBlocks.forEach((setBlock, index, theArray) => { - if (setBlocks && replacedBlocks < setBlocks.length && setBlock.blockTime === setBlocks[replacedBlocks].blockTime) { - theArray[index] = setBlocks[replacedBlocks]; - replacedBlocks++; - } - }); - } + defaultSetBlocks.forEach((setBlock, index, theArray) => { + if (setBlocks && replacedBlocks < setBlocks.length && setBlock.blockTime === setBlocks[replacedBlocks].blockTime) { + theArray[index] = setBlocks[replacedBlocks]; + replacedBlocks++; + } + }); return defaultSetBlocks } + updateUnsavedSetBlock(selectedDay, index, editedSetBlock ) { + const { unsavedSetBlocks } = this.props + let dayEdited = unsavedSetBlocks[selectedDay]; + dayEdited[index] = editedSetBlock; // index 0 = SetBlock with blockTime 1 + this.props.updateUnsavedSetblocks({ + ...unsavedSetBlocks, + [selectedDay]: dayEdited + }) + this.setState({ enableSubmit: true }) + } + + renderSetBlocks = (selectedDay) => { + const { editModeSchedule, currentWeeklySetblocks, unsavedSetBlocks } = this.props; + selectedDay = moment(selectedDay).format('YYYY-MM-DD') + const setBlocksByDate = _.groupBy(currentWeeklySetblocks, 'date') + let setBlocks = setBlocksByDate[selectedDay]; + + if (editModeSchedule && unsavedSetBlocks) { + // If the match.params don't have a teamMemberId are u seeing your schedule + // As it is your schedule, you can see the empty blocks, to complete then, that's why it is completed with the missing ones + return this.completeWithEmptySetBlocks(setBlocks).map((setBlock, index) => { + return ( + this.updateUnsavedSetBlock(selectedDay, index, editedSetBlock )} + /> + ) + }) + } else if (!editModeSchedule && setBlocks) { + return setBlocks.map((setBlock, index) => { + return + }) + } else { + return ( + This user hasn't committed any Setblocks for this day + ) + } + } + renderIfItReady() { const { - match, currentTeamMember, fetchingData, editModeSchedule, enableSubmit + match, currentTeamMember, fetchingData, selectedDay, editModeSchedule } = this.props + const { enableSubmit } = this.state if (fetchingData) { return ( // If you are waiting for the API to respond, render a loading @@ -122,7 +161,7 @@ class SchedulePage extends React.Component { {match.params.teamMemberId ? currentTeamMember.name : 'Your'} {' Schedule\'s Page'} - + {this.renderSetBlocks(selectedDay)} {editModeSchedule && ()} ) @@ -173,7 +212,6 @@ const mapDispatchToProps = (dispatch) => { fetchCurrentTeamMemberById: (params) => dispatch(fetchCurrentTeamMemberById(params)), setSelectedDay: (selectedDay) => dispatch(setSelectedDay(selectedDay)), setEditModeSchedule: (editMode) => dispatch(setEditModeSchedule(editMode)), - setEnableSubmit: (enableSubmit) => dispatch(setEnableSubmit(enableSubmit)), updateUnsavedSetblocks: (unsavedSetBlocks) => dispatch(updateUnsavedSetblocks(unsavedSetBlocks)) }; }; diff --git a/web/components/SetBlock.jsx b/web/components/SetBlock.jsx index a92e0ae..184c3fa 100644 --- a/web/components/SetBlock.jsx +++ b/web/components/SetBlock.jsx @@ -2,12 +2,12 @@ import React from 'react'; import { connect } from 'react-redux'; import { Edit3 } from 'styled-icons/feather/Edit3.cjs' -import Box from './Box'; -import Card from './Card'; import Flex from './Flex'; +import Text from './Text'; +import Card from './Card'; import Modal from './Modal'; +import Box from './Box'; import Input from './Input'; -import Text from './Text'; class SetBlock extends React.Component { diff --git a/web/components/SideBar.jsx b/web/components/SideBar.jsx index 3c696b8..ec13389 100644 --- a/web/components/SideBar.jsx +++ b/web/components/SideBar.jsx @@ -2,8 +2,8 @@ import React from 'react'; import { withRouter } from 'react-router-dom'; import { connect } from 'react-redux'; -import DayBlock from './DayBlock'; import Flex from './Flex'; +import DayBlock from './DayBlock'; import { setEditModeSchedule, setSelectedDay } from '../reducers/environment'; diff --git a/web/components/TeamMember.jsx b/web/components/TeamMember.jsx index c59ff4e..49d8b9d 100644 --- a/web/components/TeamMember.jsx +++ b/web/components/TeamMember.jsx @@ -1,10 +1,9 @@ import React from 'react'; -import Card from './Card'; import Flex from './Flex'; -import Image from './Image'; import Text from './Text'; - +import Card from './Card'; +import Image from './Image'; export default class TeamMember extends React.Component { render() { diff --git a/web/reducers/environment.js b/web/reducers/environment.js index 76dcc72..7bc1bfe 100644 --- a/web/reducers/environment.js +++ b/web/reducers/environment.js @@ -1,71 +1,59 @@ -import api from 'scripts/api' import moment from 'moment'; +import api from 'scripts/api' + // Index of Action Types -const CREATE_SET_BLOCK = 'CREATE_SET_BLOCK' -const EDIT_MODE_SCHEDULE = 'EDIT_MODE_SCHEDULE' -const ENABLE_SUBMIT = 'ENABLE_SUBMIT' -const FETCHING_DATA = 'FETCHING_DATA' -const RECEIVE_TEAM_MEMBER = 'RECEIVE_TEAM_MEMBER' const RECEIVE_TEAM_MEMBERS = 'RECEIVE_TEAM_MEMBERS' +const RECEIVE_TEAM_MEMBER = 'RECEIVE_TEAM_MEMBER' const SET_SELECTED_DAY = 'SET_SELECTED_DAY' +const FETCHING_DATA = 'FETCHING_DATA' +const EDIT_MODE_SCHEDULE = 'EDIT_MODE_SCHEDULE' const UPDATE_BLOCK_FRACTION = 'UPDATE_BLOCK_FRACTION' +const CREATE_SET_BLOCK = 'CREATE_SET_BLOCK' const UPDATE_SET_BLOCK = 'UPDATE_SET_BLOCK' const UPDATE_UNSAVED_SET_BLOCKS = 'UPDATE_UNSAVED_SET_BLOCKS' // Reducer const initialState = { + teamMembers: [], currentTeamMember: { id: '', name: '' }, currentWeeklySetblocks: [], - editModeSchedule: false, - enableSubmit: false, - fetchingData: false, - teamMembers: [], selectedDay: moment.now(), + fetchingData: false, + editModeSchedule: false, unsavedSetBlocks: [], } export default function reducer(state = initialState, action) { switch (action.type) { - case CREATE_SET_BLOCK: + case RECEIVE_TEAM_MEMBERS: return { ...state, - - currentWeeklySetblocks: action.teamMember.weeklySetblocks + teamMembers: action.members } - case EDIT_MODE_SCHEDULE: + case RECEIVE_TEAM_MEMBER: return { ...state, - editModeSchedule: action.editModeSchedule + currentTeamMember: { id: action.member.id, name: action.member.name }, + currentWeeklySetblocks: action.member.weeklySetblocks } - case ENABLE_SUBMIT: + case SET_SELECTED_DAY: return { ...state, - enableSubmit: action.enableSubmit + selectedDay: action.selectedDay } case FETCHING_DATA: return { ...state, fetchingData: action.fetchingData } - case RECEIVE_TEAM_MEMBER: - return { - ...state, - currentTeamMember: { id: action.member.id, name: action.member.name }, - currentWeeklySetblocks: action.member.weeklySetblocks - } - case RECEIVE_TEAM_MEMBERS: - return { - ...state, - teamMembers: action.members - } - case SET_SELECTED_DAY: + case EDIT_MODE_SCHEDULE: return { ...state, - selectedDay: action.selectedDay + editModeSchedule: action.editModeSchedule } case UPDATE_BLOCK_FRACTION: return { @@ -74,6 +62,11 @@ export default function reducer(state = initialState, action) { (setBlock) => setBlock.id === action.blockId ? { ...setBlock, blockFraction: action.blockFraction } : setBlock ) } + case CREATE_SET_BLOCK: + return { + ...state, + currentWeeklySetblocks: action.teamMember.weeklySetblocks + } case UPDATE_SET_BLOCK: return { ...state, @@ -241,13 +234,6 @@ export function setEditModeSchedule(editModeSchedule) { } } -export function setEnableSubmit(enableSubmit) { - return { - type: ENABLE_SUBMIT, - enableSubmit - } -} - export function updateBlockFraction(blockId, blockFraction) { return { type: UPDATE_BLOCK_FRACTION,