Possibilité de créer une voie de type "Backlog"

Une voie peut désormais "récolter" toutes les issues qui ne sont pas
déjà sélectionnées par d'autres voies i.e. matérialiser un "backlog".

Voir #22
This commit is contained in:
2020-04-30 15:43:40 +02:00
parent 647c5c0806
commit b4ce7c3777
10 changed files with 158 additions and 44 deletions

View File

@ -1,6 +1,6 @@
import React from 'react';
import { Page } from '../Page';
import { connect } from 'react-redux';
import { connect, DispatchProp } from 'react-redux';
import Board from '@lourenci/react-kanban';
import { fetchBoards } from '../../store/actions/boards';
import { createIssue } from '../../store/actions/issues';
@ -9,7 +9,11 @@ import { Loader } from '../Loader';
import { IssueCard } from './IssueCard';
import { Modal } from '../Modal';
export class BoardPage extends React.Component {
export interface BoardPageProps extends DispatchProp {
board: any
kanboard: any
}
export class BoardPage extends React.Component<BoardPageProps> {
state = {
newCardModalActive: false,
@ -21,7 +25,11 @@ export class BoardPage extends React.Component {
}
}
constructor(props) {
onNewCardTitleChange: (evt: any) => void;
onNewCardBodyChange: (evt: any) => void;
onNewCardProjectChange: (evt: any) => void;
constructor(props: BoardPageProps) {
super(props);
this.renderLaneHeader = this.renderLaneHeader.bind(this);
this.onNewCardClick = this.onNewCardClick.bind(this);
@ -90,18 +98,18 @@ export class BoardPage extends React.Component {
placeholder="Description du nouveau ticket..."
value={this.state.newCard.body}
onChange={this.onNewCardBodyChange}
rows="10">
rows={10}>
</textarea>
</div>
</div>
<div className="field">
<div className="control is-expanded">
<div className="select is-fullwidth"
value={this.state.newCard.project}
onChange={this.onNewCardProjectChange}>
<select>
<div className="select is-fullwidth">
<select
value={this.state.newCard.project}
onChange={this.onNewCardProjectChange}>
{
board.projects.map((p, i) => {
board.projects.map((p: any, i: number) => {
return <option key={`new-card-project-${i}`} value={p}>{p}</option>
})
}
@ -130,11 +138,11 @@ export class BoardPage extends React.Component {
)
}
renderCard(card) {
renderCard(card: any) {
return <IssueCard card={card} />;
}
renderLaneHeader(lane) {
renderLaneHeader(lane: any) {
return (
<div className="kanboard-lane">
<div className="level">
@ -154,7 +162,7 @@ export class BoardPage extends React.Component {
)
}
onCardDragEnd(source, dest) {
onCardDragEnd(source: any, dest: any) {
const { board } = this.props;
this.props.dispatch(moveCard(
board.id,
@ -175,7 +183,7 @@ export class BoardPage extends React.Component {
this.requestBuildKanboard();
}
onNewCardClick(laneID) {
onNewCardClick(laneID: string) {
const { board } = this.props;
this.setState({
newCardModalActive: true,
@ -192,9 +200,9 @@ export class BoardPage extends React.Component {
this.setState({ newCardModalActive: false });
}
onNewCardAttrChange(attrName, evt) {
const value = evt.target.value;
this.setState(state => {
onNewCardAttrChange(attrName: string, evt: React.ChangeEvent) {
const value = (evt.target as HTMLInputElement).value;
this.setState((state: any) => {
return {
...state,
newCard: {
@ -217,7 +225,7 @@ export class BoardPage extends React.Component {
));
}
componentDidUpdate(prevProps) {
componentDidUpdate(prevProps: any) {
if (prevProps.board !== this.props.board) this.requestBuildKanboard();
}
@ -233,7 +241,7 @@ export class BoardPage extends React.Component {
}
export const ConnectedBoardPage = connect(function(state, props) {
export const ConnectedBoardPage = connect(function(state: any, props: any) {
const boardID = props.match.params.id;
return {
board: state.boards.byID[boardID],