Skip to content

Commit

Permalink
Add button to remove conference from recents list
Browse files Browse the repository at this point in the history
  • Loading branch information
freddytuxworth authored Jun 18, 2020
1 parent 044c864 commit 111a1ef
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 2 deletions.
10 changes: 10 additions & 0 deletions app/features/recent-list/actionTypes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* The type of (redux) action that is dispatched when a conference is removed from the recents list.
*
* @type {
* type: CONFERENCE_REMOVED,
* conference: Object
* }
*/
export const CONFERENCE_REMOVED = Symbol('CONFERENCE_REMOVED');

19 changes: 19 additions & 0 deletions app/features/recent-list/actions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// @flow

import { CONFERENCE_REMOVED } from './actionTypes';

/**
* Notifies that conference is removed from recents list.
*
* @param {Object} conference - Conference Details.
* @returns {{
* type: CONFERENCE_REMOVED,
* conference: Object
* }}
*/
export function conferenceRemoved(conference: Object) {
return {
type: CONFERENCE_REMOVED,
conference
};
}
22 changes: 22 additions & 0 deletions app/features/recent-list/components/RecentList.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ import { connect } from 'react-redux';
import type { Dispatch } from 'redux';
import { push } from 'react-router-redux';

import { conferenceRemoved } from '../actions';
import {
ConferenceCard,
ConferenceTitle,
RecentListContainer,
TruncatedText
} from '../styled';
import type { RecentListItem } from '../types';
import Button from '@atlaskit/button';
import CrossIcon from '@atlaskit/icon/glyph/cross';

type Props = {

Expand Down Expand Up @@ -58,6 +61,20 @@ class RecentList extends Component<Props, *> {
return () => this.props.dispatch(push('/conference', conference));
}

/**
* Creates a handler for removing a conference from the recents list.
*
* @param {RecentListItem} conference - Conference Details.
* @returns {void}
*/
_onRemoveConference(conference: RecentListItem) {
return e => {
this.props.dispatch(conferenceRemoved(conference));
e.stopPropagation();
};
}


/**
* Renders the conference card.
*
Expand All @@ -81,6 +98,11 @@ class RecentList extends Component<Props, *> {
<TruncatedText>
{ this._renderDuration(conference) }
</TruncatedText>
<Button
appearance = 'subtle'
iconBefore = { <CrossIcon primaryColor = 'white' /> }
onClick = { this._onRemoveConference(conference) }
spacing = 'none' />
</ConferenceCard>
);
}
Expand Down
22 changes: 22 additions & 0 deletions app/features/recent-list/reducer.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// @flow

import { CONFERENCE_ENDED, CONFERENCE_JOINED } from '../conference';
import { CONFERENCE_REMOVED } from './actionTypes';

import type { RecentListItem } from './types';

Expand Down Expand Up @@ -34,6 +35,12 @@ export default (state: State = DEFAULT_STATE, action: Object) => {
recentList: _insertConference(state.recentList, action.conference)
};

case CONFERENCE_REMOVED:
return {
...state,
recentList: _removeConference(state.recentList, action.conference)
};

default:
return state;
}
Expand Down Expand Up @@ -65,6 +72,21 @@ function _insertConference(
return newRecentList;
}

/**
* Remove a conference from the recent list array.
*
* @param {Array<RecentListItem>} recentList - Previous recent list array.
* @param {RecentListItem} toRemove - Conference to be removed.
* @returns {Array<RecentListItem>} - Updated recent list array.
*/
function _removeConference(
recentList: Array<RecentListItem>,
toRemove: RecentListItem
): Array<RecentListItem> {
return recentList.filter(
(conference: RecentListItem) => conference !== toRemove);
}

/**
* Update the EndTime of the last conference.
*
Expand Down
6 changes: 4 additions & 2 deletions app/features/recent-list/styled/ConferenceCard.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ export default styled.div`
background: #1754A9;
border-radius: 0.5em;
color: white;
display: flex;
flex-direction: column;
display: grid;
grid-template-rows: repeat(4, auto);
grid-template-columns: 1fr auto;
grid-auto-flow: column;
font-size: 0.9em;
margin: 0.5em;
padding: 1em;
Expand Down

0 comments on commit 111a1ef

Please sign in to comment.