Skip to content

Commit

Permalink
Merge pull request #617 from cboard-org/fix-copy-recursive
Browse files Browse the repository at this point in the history
Copy boards recursively when get a public board
  • Loading branch information
martinbedouret authored Jan 30, 2020
2 parents 3ae3a3f + 0f60a1e commit 4c90cf2
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 24 deletions.
64 changes: 50 additions & 14 deletions src/components/Board/Board.container.js
Original file line number Diff line number Diff line change
Expand Up @@ -813,17 +813,26 @@ export class BoardContainer extends Component {
}

handleCopyRemoteBoard = async () => {
const { intl, showNotification } = this.props;
await this.createBoarsRecursively(this.state.copyPublicBoard);
showNotification(intl.formatMessage(messages.boardCopiedSuccessfully));
};

async createBoarsRecursively(board) {
const {
createBoard,
addBoardCommunicator,
switchBoard,
history,
userData,
updateApiObjectsNoChild,
communicator
communicator,
boards,
updateBoard
} = this.props;

let newBoard = {
...this.state.copyPublicBoard,
...board,
isPublic: false,
id: shortid.generate(),
hidden: false,
Expand All @@ -838,15 +847,27 @@ export class BoardContainer extends Component {
};
}
createBoard(newBoard);
addBoardCommunicator(newBoard.id);
switchBoard(newBoard.id);
history.replace(`/board/${newBoard.id}`, []);
const translatedBoard = this.translateBoard(newBoard);
this.setState({
copyPublicBoard: false,
blockedPrivateBoard: false,
translatedBoard
//look for reference to the original board id
boards.forEach(b => {
b.tiles.forEach((tile, index) => {
if (tile.loadBoard && tile.loadBoard === board.id) {
b.tiles.splice(index, 1, {
...tile,
loadBoard: newBoard.id
});
updateBoard(b);
}
});
});
if (this.state.copyPublicBoard) {
addBoardCommunicator(newBoard.id);
switchBoard(newBoard.id);
history.replace(`/board/${newBoard.id}`, []);
const translatedBoard = this.translateBoard(newBoard);
this.setState({
translatedBoard
});
}
// Loggedin user?
if ('name' in userData && 'email' in userData) {
this.setState({
Expand All @@ -871,17 +892,32 @@ export class BoardContainer extends Component {
createCommunicator,
true
);
switchBoard(apiBoardId);
history.replace(`/board/${apiBoardId}`, []);
if (this.state.copyPublicBoard) {
switchBoard(apiBoardId);
history.replace(`/board/${apiBoardId}`, []);
}
} catch (err) {
console.log(err.message);
} finally {
this.setState({
isSaving: false
isSaving: false,
copyPublicBoard: false,
blockedPrivateBoard: false
});
}
//return condition
if (!board || board.tiles.length < 1) {
return;
} else {
board.tiles.forEach(async tile => {
if (tile.loadBoard) {
const nextBoard = await API.getBoard(tile.loadBoard);
this.createBoarsRecursively(nextBoard);
}
});
}
}
};
}

handleCloseDialog = () => {
this.setState({
Expand Down
4 changes: 4 additions & 0 deletions src/components/Board/Board.messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,5 +99,9 @@ export default defineMessages({
boardCopyAccept: {
id: 'cboard.components.Board.boardCopyAccept',
defaultMessage: 'Accept'
},
boardCopiedSuccessfully: {
id: 'cboard.components.Board.boardCopiedSuccessfully',
defaultMessage: 'Board successfully added to your Communicator'
}
});
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import CircularProgress from '@material-ui/core/CircularProgress';
import { intlShape, FormattedMessage } from 'react-intl';

import { TAB_INDEXES } from './CommunicatorDialog.constants';
import CommunicatorBoardItem from './CommunicatorBoardItem.component';
import CommunicatorDialogBoardItem from './CommunicatorDialogBoardItem.component';
import messages from './CommunicatorDialog.messages';

import './CommunicatorDialog.css';
Expand Down Expand Up @@ -115,7 +115,7 @@ const CommunicatorDialog = ({
)}

{boards.slice(0, limit).map((board, i) => (
<CommunicatorBoardItem
<CommunicatorDialogBoardItem
key={i}
board={board}
intl={intl}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
addBoards,
replaceBoard,
createBoard,
updateBoard,
updateApiObjectsNoChild
} from '../../Board/Board.actions';
import messages from './CommunicatorDialog.messages';
Expand Down Expand Up @@ -71,6 +72,7 @@ class CommunicatorDialogContainer extends React.Component {
page: 1,
search: '',
isSearchOpen: false,
copyBoard: true,
communicatorBoards: findBoards(props.communicatorBoards, {}, 1)
};
}
Expand Down Expand Up @@ -231,14 +233,22 @@ class CommunicatorDialogContainer extends React.Component {
}

async copyBoard(board) {
const { intl, showNotification } = this.props;
this.setState({ copyBoard: false });
await this.createBoarsRecursively(board);
showNotification(intl.formatMessage(messages.boardAddedToCommunicator));
}

async createBoarsRecursively(board) {
const {
intl,
showNotification,
createBoard,
addBoardCommunicator,
userData,
updateApiObjectsNoChild
updateApiObjectsNoChild,
availableBoards,
updateBoard
} = this.props;

let newBoard = {
...board,
isPublic: false,
Expand All @@ -255,7 +265,21 @@ class CommunicatorDialogContainer extends React.Component {
};
}
createBoard(newBoard);
addBoardCommunicator(newBoard.id);
if (this.state.copyBoard) {
addBoardCommunicator(newBoard.id);
}
//look for reference to the original board id
availableBoards.forEach(b => {
b.tiles.forEach((tile, index) => {
if (tile.loadBoard && tile.loadBoard === board.id) {
b.tiles.splice(index, 1, {
...tile,
loadBoard: newBoard.id
});
updateBoard(b);
}
});
});
// Loggedin user?
if ('name' in userData && 'email' in userData) {
let createCommunicator = false;
Expand All @@ -265,7 +289,18 @@ class CommunicatorDialogContainer extends React.Component {
console.log(err.message);
}
}
showNotification(intl.formatMessage(messages.boardAddedToCommunicator));

//return condition
if (!board || board.tiles.length < 1) {
return;
} else {
board.tiles.forEach(async tile => {
if (tile.loadBoard) {
const nextBoard = await API.getBoard(tile.loadBoard);
this.createBoarsRecursively(nextBoard);
}
});
}
}

async addOrRemoveAction(board) {
Expand Down Expand Up @@ -488,6 +523,7 @@ const mapDispatchToProps = {
deleteApiBoard,
deleteBoardCommunicator,
createBoard,
updateBoard,
addBoardCommunicator,
upsertCommunicator,
updateApiObjectsNoChild
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { TAB_INDEXES } from './CommunicatorDialog.constants';
import messages from './CommunicatorDialog.messages';
import { isCordova } from '../../../cordova-util';

class CommunicatorBoardItem extends React.Component {
class CommunicatorDialogBoardItem extends React.Component {
constructor(props) {
super(props);

Expand Down Expand Up @@ -390,7 +390,7 @@ class CommunicatorBoardItem extends React.Component {
}
}

CommunicatorBoardItem.propTypes = {
CommunicatorDialogBoardItem.propTypes = {
intl: intlShape,
communicator: PropTypes.object,
activeBoardId: PropTypes.string,
Expand All @@ -406,4 +406,4 @@ CommunicatorBoardItem.propTypes = {
selectedIds: PropTypes.arrayOf(PropTypes.string)
};

export default CommunicatorBoardItem;
export default CommunicatorDialogBoardItem;

0 comments on commit 4c90cf2

Please sign in to comment.