diff --git a/src/App.jsx b/src/App.jsx
index bc3e8cb..2322788 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -29,7 +29,8 @@ const FAQ = React.lazy(() => import(/* webpackChunkName: 'FAQ' */ './js/pages/FA
const Footer = React.lazy(() => import(/* webpackChunkName: 'Footer' */ './js/components/Navigation/Footer'));
const Header = React.lazy(() => import(/* webpackChunkName: 'Header' */ './js/components/Navigation/Header'));
const PageNotFound = React.lazy(() => import(/* webpackChunkName: 'PageNotFound' */ './js/pages/PageNotFound'));
-const TeamMembers = React.lazy(() => import(/* webpackChunkName: 'FAQ' */ './js/pages/TeamMembers'));
+const TeamMembers = React.lazy(() => import(/* webpackChunkName: 'TeamMembers' */ './js/pages/TeamMembers'));
+const Teams = React.lazy(() => import(/* webpackChunkName: 'Teams' */ './js/pages/Teams'));
// There are just too many "prop spreadings" in the use of Route, if someone can figure out an alternative...
/* eslint-disable react/jsx-props-no-spreading */
@@ -275,7 +276,9 @@ class App extends Component {
+
+
diff --git a/src/js/actions/PersonActions.js b/src/js/actions/PersonActions.js
index 319118f..95fe672 100644
--- a/src/js/actions/PersonActions.js
+++ b/src/js/actions/PersonActions.js
@@ -1,6 +1,17 @@
import Dispatcher from '../common/dispatcher/Dispatcher';
export default {
+ personListRetrieve (searchText = '') {
+ // console.log('PersonActions, personListRetrieve searchText:', searchText);
+ if (searchText) {
+ Dispatcher.loadEndpoint('person-list-retrieve', {
+ searchText,
+ });
+ } else {
+ Dispatcher.loadEndpoint('person-list-retrieve');
+ }
+ },
+
personRetrieve (personId = '') {
// console.log('PersonActions, personRetrieve personId:', personId);
if (personId) {
@@ -11,4 +22,13 @@ export default {
Dispatcher.loadEndpoint('person-retrieve');
}
},
+
+ personSave (personId = '', incomingData = {}) {
+ // console.log('PersonActions, personSave personId:', personId, ', incomingData:', incomingData);
+ const data = {
+ personId,
+ ...incomingData,
+ };
+ Dispatcher.loadEndpoint('person-save', data);
+ },
};
diff --git a/src/js/actions/TeamActions.js b/src/js/actions/TeamActions.js
index ddbadbf..c04673c 100644
--- a/src/js/actions/TeamActions.js
+++ b/src/js/actions/TeamActions.js
@@ -1,6 +1,20 @@
import Dispatcher from '../common/dispatcher/Dispatcher';
+import PersonStore from '../stores/PersonStore'; // eslint-disable-line import/no-cycle
+import TeamStore from '../stores/TeamStore'; // eslint-disable-line import/no-cycle
export default {
+ addPersonToTeam (personId, teamId) {
+ console.log('TeamActions, addPersonToTeam personId:', personId, ', teamId:', teamId);
+ const teamMemberName = PersonStore.getFullNamePreferred(personId) || '';
+ const data = {
+ personId,
+ teamId,
+ teamMemberName,
+ teamName: TeamStore.getTeamById(teamId).teamName || '',
+ };
+ Dispatcher.loadEndpoint('add-person-to-team', data);
+ },
+
teamRetrieve (teamId = '') {
// console.log('TeamActions, teamRetrieve teamId:', teamId);
if (teamId) {
@@ -11,4 +25,18 @@ export default {
Dispatcher.loadEndpoint('team-retrieve');
}
},
+
+ teamListRetrieve () {
+ // console.log('TeamActions, teamListRetrieve');
+ Dispatcher.loadEndpoint('team-list-retrieve');
+ },
+
+ teamSave (teamId = '', incomingData = {}) {
+ // console.log('PersonActions, teamSave teamId:', teamId, ', incomingData:', incomingData);
+ const data = {
+ teamId,
+ ...incomingData,
+ };
+ Dispatcher.loadEndpoint('team-save', data);
+ },
};
diff --git a/src/js/common/utils/prepareDataPackageFromAppObservableStore.js b/src/js/common/utils/prepareDataPackageFromAppObservableStore.js
new file mode 100644
index 0000000..a354106
--- /dev/null
+++ b/src/js/common/utils/prepareDataPackageFromAppObservableStore.js
@@ -0,0 +1,19 @@
+import AppObservableStore from '../../stores/AppObservableStore';
+
+export default function prepareDataPackageFromAppObservableStore (acceptedVariables) {
+ // Extract data from AppObservableStore and put into data object, with Changed variable, to be sent to server
+ const data = {};
+ for (let i = 0; i < acceptedVariables.length; i++) {
+ // Ex/ emailPersonalToBeSaved and emailPersonalChanged
+ // console.log(`prepareData: ${acceptedVariables[i]}ToBeSaved:`, AppObservableStore.getGlobalVariableState(`${acceptedVariables[i]}ToBeSaved`));
+ if (AppObservableStore.getGlobalVariableState(`${acceptedVariables[i]}ToBeSaved`) &&
+ AppObservableStore.getGlobalVariableState(`${acceptedVariables[i]}Changed`)) {
+ // If the value has changed, add it to the data dictionary
+ if (AppObservableStore.getGlobalVariableState(`${acceptedVariables[i]}Changed`) === true) {
+ data[`${acceptedVariables[i]}Changed`] = true;
+ data[`${acceptedVariables[i]}ToBeSaved`] = AppObservableStore.getGlobalVariableState(`${acceptedVariables[i]}ToBeSaved`);
+ }
+ }
+ }
+ return data;
+}
diff --git a/src/js/components/AddPerson/AddPersonForm.jsx b/src/js/components/AddPerson/AddPersonForm.jsx
new file mode 100644
index 0000000..d70a5f6
--- /dev/null
+++ b/src/js/components/AddPerson/AddPersonForm.jsx
@@ -0,0 +1,173 @@
+import { Button, FormControl, TextField } from '@mui/material';
+import { withStyles } from '@mui/styles';
+import React from 'react';
+import styled from 'styled-components';
+import PropTypes from 'prop-types';
+import AppObservableStore, { messageService } from '../../stores/AppObservableStore';
+import PersonActions from '../../actions/PersonActions';
+import PersonStore from '../../stores/PersonStore';
+import { renderLog } from '../../common/utils/logging';
+import prepareDataPackageFromAppObservableStore from '../../common/utils/prepareDataPackageFromAppObservableStore';
+
+
+const AddPersonForm = ({ classes }) => { // classes, teamId
+ renderLog('AddPersonForm'); // Set LOG_RENDER_EVENTS to log all renders
+ const [emailPersonal, setEmailPersonal] = React.useState('');
+ const [firstName, setFirstName] = React.useState('');
+ const [lastName, setLastName] = React.useState('');
+ const [teamId, setTeamId] = React.useState(-1);
+
+ const onAppObservableStoreChange = () => {
+ setTeamId(AppObservableStore.getGlobalVariableState('addPersonDrawerTeamId'));
+ };
+
+ const saveNewPersonSuccessful = () => {
+ AppObservableStore.setGlobalVariableState('addPersonDrawerOpen', false);
+ AppObservableStore.setGlobalVariableState('addPersonDrawerTeamId', -1);
+ AppObservableStore.setGlobalVariableState('emailPersonalChanged', false);
+ AppObservableStore.setGlobalVariableState('emailPersonalToBeSaved', '');
+ AppObservableStore.setGlobalVariableState('firstNameChanged', false);
+ AppObservableStore.setGlobalVariableState('firstNameToBeSaved', '');
+ AppObservableStore.setGlobalVariableState('lastNameChanged', false);
+ AppObservableStore.setGlobalVariableState('lastNameToBeSaved', '');
+ };
+
+ const onPersonStoreChange = () => {
+ const mostRecentPersonChanged = PersonStore.getMostRecentPersonChanged();
+ // console.log('AddPersonForm onPersonStoreChange mostRecentPersonChanged:', mostRecentPersonChanged);
+ // TODO: Figure out why firstName, lastName, and emailPersonal are not being updated
+ // console.log('firstName:', firstName, ', lastName:', lastName, ', emailPersonal:', emailPersonal);
+ // console.log('emailPersonalToBeSaved:', AppObservableStore.getGlobalVariableState('emailPersonalToBeSaved'));
+ if (mostRecentPersonChanged.emailPersonal === AppObservableStore.getGlobalVariableState('emailPersonalToBeSaved')) {
+ saveNewPersonSuccessful();
+ }
+ };
+
+ const saveNewPerson = () => {
+ const acceptedVariables = ['emailPersonal', 'firstName', 'lastName'];
+ const data = prepareDataPackageFromAppObservableStore(acceptedVariables);
+ // console.log('saveNewPerson data:', data);
+ PersonActions.personSave('-1', data);
+ };
+
+ const updateEmailPersonal = (event) => {
+ if (event.target.name === 'emailPersonalToBeSaved') {
+ const newEmailPersonal = event.target.value;
+ AppObservableStore.setGlobalVariableState('emailPersonalChanged', true);
+ AppObservableStore.setGlobalVariableState('emailPersonalToBeSaved', newEmailPersonal);
+ console.log('updateEmailPersonal:', newEmailPersonal);
+ setEmailPersonal(newEmailPersonal);
+ }
+ };
+
+ const updateFirstName = (event) => {
+ if (event.target.name === 'firstNameToBeSaved') {
+ const newFirstName = event.target.value;
+ AppObservableStore.setGlobalVariableState('firstNameChanged', true);
+ AppObservableStore.setGlobalVariableState('firstNameToBeSaved', newFirstName);
+ console.log('updateFirstName:', newFirstName);
+ setFirstName(newFirstName);
+ }
+ };
+
+ const updateLastName = (event) => {
+ if (event.target.name === 'lastNameToBeSaved') {
+ const newLastName = event.target.value;
+ AppObservableStore.setGlobalVariableState('lastNameChanged', true);
+ AppObservableStore.setGlobalVariableState('lastNameToBeSaved', newLastName);
+ console.log('updateLastName:', newLastName);
+ setLastName(newLastName);
+ }
+ };
+
+ React.useEffect(() => {
+ const appStateSubscription = messageService.getMessage().subscribe(() => onAppObservableStoreChange());
+ onAppObservableStoreChange();
+ const personStoreListener = PersonStore.addListener(onPersonStoreChange);
+ onPersonStoreChange();
+ // console.log('Initial load emailPersonalToBeSaved:', AppObservableStore.getGlobalVariableState('emailPersonalToBeSaved'));
+ if (AppObservableStore.getGlobalVariableState('emailPersonalToBeSaved')) {
+ setEmailPersonal(AppObservableStore.getGlobalVariableState('emailPersonalToBeSaved'));
+ }
+ if (AppObservableStore.getGlobalVariableState('firstNameToBeSaved')) {
+ setFirstName(AppObservableStore.getGlobalVariableState('firstNameToBeSaved'));
+ }
+ if (AppObservableStore.getGlobalVariableState('lastNameToBeSaved')) {
+ setLastName(AppObservableStore.getGlobalVariableState('lastNameToBeSaved'));
+ }
+
+ return () => {
+ appStateSubscription.unsubscribe();
+ personStoreListener.remove();
+ };
+ }, []);
+
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+AddPersonForm.propTypes = {
+ classes: PropTypes.object.isRequired,
+};
+
+const styles = (theme) => ({
+ formControl: {
+ width: '100%',
+ },
+ saveNewPersonButton: {
+ width: 300,
+ [theme.breakpoints.down('md')]: {
+ width: '100%',
+ },
+ },
+});
+
+const AddPersonFormWrapper = styled('div')`
+`;
+
+export default withStyles(styles)(AddPersonForm);
diff --git a/src/js/components/AddTeam/AddTeamForm.jsx b/src/js/components/AddTeam/AddTeamForm.jsx
new file mode 100644
index 0000000..5a396cb
--- /dev/null
+++ b/src/js/components/AddTeam/AddTeamForm.jsx
@@ -0,0 +1,113 @@
+import { Button, FormControl, TextField } from '@mui/material';
+import { withStyles } from '@mui/styles';
+import React from 'react';
+import styled from 'styled-components';
+import PropTypes from 'prop-types';
+import AppObservableStore, { messageService } from '../../stores/AppObservableStore';
+import TeamActions from '../../actions/TeamActions';
+import TeamStore from '../../stores/TeamStore';
+import { renderLog } from '../../common/utils/logging';
+import prepareDataPackageFromAppObservableStore from '../../common/utils/prepareDataPackageFromAppObservableStore';
+
+
+const AddTeamForm = ({ classes }) => { // classes, teamId
+ renderLog('AddTeamForm'); // Set LOG_RENDER_EVENTS to log all renders
+ const [teamName, setTeamName] = React.useState('');
+
+ const onAppObservableStoreChange = () => {
+ };
+
+ const saveNewTeamSuccessful = () => {
+ AppObservableStore.setGlobalVariableState('addTeamDrawerOpen', false);
+ AppObservableStore.setGlobalVariableState('teamNameChanged', false);
+ AppObservableStore.setGlobalVariableState('teamNameToBeSaved', '');
+ };
+
+ const onTeamStoreChange = () => {
+ const mostRecentTeamChanged = TeamStore.getMostRecentTeamChanged();
+ console.log('AddTeamForm onTeamStoreChange mostRecentTeamChanged:', mostRecentTeamChanged);
+ // TODO: Figure out why teamName is not being updated locally
+ // console.log('teamName:', teamName);
+ if (mostRecentTeamChanged.teamName === AppObservableStore.getGlobalVariableState('teamNameToBeSaved')) {
+ saveNewTeamSuccessful();
+ }
+ };
+
+ const saveNewTeam = () => {
+ const acceptedVariables = ['teamName'];
+ const data = prepareDataPackageFromAppObservableStore(acceptedVariables);
+ // console.log('saveNewTeam data:', data);
+ TeamActions.teamSave('-1', data);
+ };
+
+ const updateTeamName = (event) => {
+ if (event.target.name === 'teamNameToBeSaved') {
+ const newTeamName = event.target.value;
+ AppObservableStore.setGlobalVariableState('teamNameChanged', true);
+ AppObservableStore.setGlobalVariableState('teamNameToBeSaved', newTeamName);
+ // console.log('updateTeamName:', newTeamName);
+ setTeamName(newTeamName);
+ }
+ };
+
+ React.useEffect(() => {
+ const appStateSubscription = messageService.getMessage().subscribe(() => onAppObservableStoreChange());
+ onAppObservableStoreChange();
+ const teamStoreListener = TeamStore.addListener(onTeamStoreChange);
+ onTeamStoreChange();
+ if (AppObservableStore.getGlobalVariableState('teamNameToBeSaved')) {
+ setTeamName(AppObservableStore.getGlobalVariableState('teamNameToBeSaved'));
+ }
+
+ return () => {
+ appStateSubscription.unsubscribe();
+ teamStoreListener.remove();
+ };
+ }, []);
+
+ return (
+
+
+
+
+
+
+ );
+};
+AddTeamForm.propTypes = {
+ classes: PropTypes.object.isRequired,
+};
+
+const styles = (theme) => ({
+ formControl: {
+ width: '100%',
+ },
+ saveNewTeamButton: {
+ width: 300,
+ [theme.breakpoints.down('md')]: {
+ width: '100%',
+ },
+ },
+});
+
+const AddTeamFormWrapper = styled('div')`
+`;
+
+export default withStyles(styles)(AddTeamForm);
diff --git a/src/js/components/Drawers/AddPersonDrawer.jsx b/src/js/components/Drawers/AddPersonDrawer.jsx
index f2045af..33ae443 100644
--- a/src/js/components/Drawers/AddPersonDrawer.jsx
+++ b/src/js/components/Drawers/AddPersonDrawer.jsx
@@ -5,18 +5,15 @@ import { withStyles } from '@mui/styles';
import DrawerTemplateA from './DrawerTemplateA';
import AppObservableStore, { messageService } from '../../stores/AppObservableStore';
import PersonStore from '../../stores/PersonStore';
-// import TeamActions from '../actions/TeamActions';
import TeamStore from '../../stores/TeamStore';
-import SearchBar2024 from '../../common/components/Search/SearchBar2024';
import { renderLog } from '../../common/utils/logging';
+import AddPersonDrawerMainContent from './AddPersonDrawerMainContent';
const AddPersonDrawer = ({ classes }) => { // classes, teamId
renderLog('AddPersonDrawer'); // Set LOG_RENDER_EVENTS to log all renders
- const [mainContentJsx, setMainContentJsx] = React.useState(<>>);
const [headerTitleJsx, setHeaderTitleJsx] = React.useState(<>>);
const [headerFixedJsx, setHeaderFixedJsx] = React.useState(<>>);
- const [searchText, setSearchText] = React.useState('');
const [teamId, setTeamId] = React.useState(-1);
const onAppObservableStoreChange = () => {
@@ -34,14 +31,6 @@ const AddPersonDrawer = ({ classes }) => { // classes, teamId
onRetrieveTeamChange();
};
- const searchFunction = (incomingSearchText) => {
- setSearchText(incomingSearchText);
- };
-
- const clearFunction = () => {
- setSearchText('');
- }
-
React.useEffect(() => {
const appStateSubscription = messageService.getMessage().subscribe(() => onAppObservableStoreChange());
onAppObservableStoreChange();
@@ -51,18 +40,6 @@ const AddPersonDrawer = ({ classes }) => { // classes, teamId
onTeamStoreChange();
setHeaderTitleJsx(<>Add Team Member>);
- setMainContentJsx(
-
-
-
-
-
- );
return () => {
appStateSubscription.unsubscribe();
@@ -73,8 +50,9 @@ const AddPersonDrawer = ({ classes }) => { // classes, teamId
return (
}
headerTitleJsx={headerTitleJsx}
headerFixedJsx={headerFixedJsx}
/>
diff --git a/src/js/components/Drawers/AddPersonDrawerMainContent.jsx b/src/js/components/Drawers/AddPersonDrawerMainContent.jsx
new file mode 100644
index 0000000..b6e4fbe
--- /dev/null
+++ b/src/js/components/Drawers/AddPersonDrawerMainContent.jsx
@@ -0,0 +1,133 @@
+import React from 'react';
+import styled from 'styled-components';
+import PropTypes from 'prop-types';
+import { withStyles } from '@mui/styles';
+import AppObservableStore, { messageService } from '../../stores/AppObservableStore';
+import PersonActions from '../../actions/PersonActions';
+import TeamActions from '../../actions/TeamActions';
+import PersonStore from '../../stores/PersonStore';
+import TeamStore from '../../stores/TeamStore';
+import apiCalming from '../../common/utils/apiCalming';
+import SearchBar2024 from '../../common/components/Search/SearchBar2024';
+import { renderLog } from '../../common/utils/logging';
+import AddPersonForm from '../AddPerson/AddPersonForm';
+
+
+const AddPersonDrawerMainContent = ({ classes }) => { // classes, teamId
+ renderLog('AddPersonDrawerMainContent'); // Set LOG_RENDER_EVENTS to log all renders
+ const [searchText, setSearchText] = React.useState('');
+ const [personSearchResultsList, setPersonSearchResultsList] = React.useState([]);
+ const [teamId, setTeamId] = React.useState(-1);
+
+ const onAppObservableStoreChange = () => {
+ setTeamId(AppObservableStore.getGlobalVariableState('addPersonDrawerTeamId'));
+ };
+
+ const onPersonStoreChange = () => {
+ const personSearchResultsListTemp = PersonStore.getSearchResults();
+ // console.log('AddPersonDrawerMainContent personSearchResultsList:', personSearchResultsListTemp);
+ setPersonSearchResultsList(personSearchResultsListTemp);
+ };
+
+ const onTeamStoreChange = () => {
+ };
+
+ const searchFunction = (incomingSearchText) => {
+ let searchingJustStarted = false;
+ if (searchText.length === 0 && incomingSearchText.length > 0) {
+ searchingJustStarted = true;
+ }
+ const isSearching = (incomingSearchText && incomingSearchText.length > 0);
+ if (apiCalming(`addPersonToTeamSearch-${teamId}-${incomingSearchText}`, 60000)) { // Only once per 60 seconds
+ PersonActions.personListRetrieve();
+ }
+ setSearchText(incomingSearchText);
+ };
+
+ const clearFunction = () => {
+ setSearchText('');
+ };
+
+ React.useEffect(() => {
+ const appStateSubscription = messageService.getMessage().subscribe(() => onAppObservableStoreChange());
+ onAppObservableStoreChange();
+ const personStoreListener = PersonStore.addListener(onPersonStoreChange);
+ onPersonStoreChange();
+ const teamStoreListener = TeamStore.addListener(onTeamStoreChange);
+ onTeamStoreChange();
+
+ return () => {
+ appStateSubscription.unsubscribe();
+ personStoreListener.remove();
+ teamStoreListener.remove();
+ };
+ }, []);
+
+ React.useEffect(() => {
+ }, [personSearchResultsList]);
+ const personSearchResultsListTemp = PersonStore.getSearchResults();
+
+ return (
+
+
+
+
+
+ {(personSearchResultsListTemp && personSearchResultsListTemp.length > 0) && (
+
+ Search Results:
+
+ {personSearchResultsListTemp.map((person, index) => (
+
+ {person.firstName}
+ {' '}
+ {person.lastName}
+ {' '}
+ TeamActions.addPersonToTeam(person.id, teamId)}>add
+
+ ))}
+
+
+ )}
+
+ );
+};
+AddPersonDrawerMainContent.propTypes = {
+ classes: PropTypes.object.isRequired,
+};
+
+const styles = () => ({
+});
+
+const AddPersonDrawerMainContentWrapper = styled('div')`
+`;
+
+const AddPersonToTeamLinkStyle = styled('span')`
+ text-decoration:underline;
+ color:#206DB3; /* primary500 */
+ cursor:pointer;
+`;
+
+const PersonSearchResultsItem = styled('div')`
+`;
+
+const PersonSearchResultsList = styled('div')`
+`;
+
+const PersonSearchResultsTitle = styled('div')`
+`;
+
+const PersonSearchResultsWrapper = styled('div')`
+ margin-top: 16px;
+`;
+
+const SearchBarWrapper = styled('div')`
+ margin-bottom: 16px;
+`;
+
+export default withStyles(styles)(AddPersonDrawerMainContent);
diff --git a/src/js/components/Drawers/AddTeamDrawer.jsx b/src/js/components/Drawers/AddTeamDrawer.jsx
new file mode 100644
index 0000000..995835f
--- /dev/null
+++ b/src/js/components/Drawers/AddTeamDrawer.jsx
@@ -0,0 +1,94 @@
+import React from 'react';
+import styled from 'styled-components';
+import PropTypes from 'prop-types';
+import { withStyles } from '@mui/styles';
+import DrawerTemplateA from './DrawerTemplateA';
+import { messageService } from '../../stores/AppObservableStore';
+// import TeamActions from '../actions/TeamActions';
+import TeamStore from '../../stores/TeamStore';
+import SearchBar2024 from '../../common/components/Search/SearchBar2024';
+import { renderLog } from '../../common/utils/logging';
+import AddTeamForm from '../AddTeam/AddTeamForm';
+
+
+const AddTeamDrawer = ({ classes }) => { // classes, teamId
+ renderLog('AddTeamDrawer'); // Set LOG_RENDER_EVENTS to log all renders
+ const [mainContentJsx, setMainContentJsx] = React.useState(<>>);
+ const [headerTitleJsx, setHeaderTitleJsx] = React.useState(<>>);
+ const [headerFixedJsx, setHeaderFixedJsx] = React.useState(<>>);
+ const [searchText, setSearchText] = React.useState('');
+
+ const onAppObservableStoreChange = () => {
+ };
+
+ const onRetrieveTeamChange = () => {
+ };
+
+ const onTeamStoreChange = () => {
+ onRetrieveTeamChange();
+ };
+
+ const searchFunction = (incomingSearchText) => {
+ setSearchText(incomingSearchText);
+ };
+
+ const clearFunction = () => {
+ setSearchText('');
+ };
+
+ React.useEffect(() => {
+ const appStateSubscription = messageService.getMessage().subscribe(() => onAppObservableStoreChange());
+ onAppObservableStoreChange();
+ const personStoreListener = TeamStore.addListener(onTeamStoreChange);
+ onTeamStoreChange();
+ const teamStoreListener = TeamStore.addListener(onTeamStoreChange);
+ onTeamStoreChange();
+
+ setHeaderTitleJsx(<>Add Team>);
+ const mainContentJsxTemp = (
+
+
+
+
+
+
+ );
+ setMainContentJsx(mainContentJsxTemp);
+
+ return () => {
+ appStateSubscription.unsubscribe();
+ personStoreListener.remove();
+ teamStoreListener.remove();
+ };
+ }, []);
+
+ return (
+
+ );
+};
+AddTeamDrawer.propTypes = {
+ classes: PropTypes.object.isRequired,
+};
+
+const styles = () => ({
+});
+
+const AddTeamDrawerWrapper = styled('div')`
+`;
+
+const SearchBarWrapper = styled('div')`
+ margin-bottom: 16px;
+`;
+
+export default withStyles(styles)(AddTeamDrawer);
diff --git a/src/js/components/Drawers/DrawerTemplateA.jsx b/src/js/components/Drawers/DrawerTemplateA.jsx
index 6dc711b..01d2218 100644
--- a/src/js/components/Drawers/DrawerTemplateA.jsx
+++ b/src/js/components/Drawers/DrawerTemplateA.jsx
@@ -11,7 +11,7 @@ import { hasIPhoneNotch } from '../../common/utils/cordovaUtils';
import { renderLog } from '../../common/utils/logging';
-const DrawerTemplateA = ({ classes, drawerOpenGlobalVariableName, headerFixedJsx, headerTitleJsx, mainContentJsx }) => { // classes, teamId
+const DrawerTemplateA = ({ classes, drawerId, drawerOpenGlobalVariableName, headerFixedJsx, headerTitleJsx, mainContentJsx }) => { // classes, teamId
renderLog('DrawerTemplateA'); // Set LOG_RENDER_EVENTS to log all renders
const [drawerOpen, setDrawerOpen] = React.useState(false);
const [scrolledDown, setScrolledDown] = React.useState(false);
@@ -54,7 +54,7 @@ const DrawerTemplateA = ({ classes, drawerOpenGlobalVariableName, headerFixedJsx
anchor="right"
classes={{ paper: classes.drawer }}
direction="left"
- id="addPersonDrawer"
+ id={drawerId}
onClose={() => AppObservableStore.setGlobalVariableState(drawerOpenGlobalVariableName, false)}
open={drawerOpen}
>
@@ -66,7 +66,7 @@ const DrawerTemplateA = ({ classes, drawerOpenGlobalVariableName, headerFixedJsx
AppObservableStore.setGlobalVariableState(drawerOpenGlobalVariableName, false)}
size="large"
>
@@ -76,7 +76,7 @@ const DrawerTemplateA = ({ classes, drawerOpenGlobalVariableName, headerFixedJsx
-