Add button to start sprint

This commit is contained in:
Gordon 2021-04-15 00:44:03 +01:00
parent dfa7a6e7a5
commit 84b7c3bb51
4 changed files with 48 additions and 4 deletions

View File

@ -151,6 +151,24 @@ export default class KanbnBoardPanel {
// TODO open a burndown chart webview panel // TODO open a burndown chart webview panel
vscode.window.showErrorMessage('Not implemented yet!'); vscode.window.showErrorMessage('Not implemented yet!');
return; return;
// Start a new sprint
case 'kanbn.sprint':
// Prompt for a sprint name
const newSprintName = await vscode.window.showInputBox({
placeHolder: 'The sprint name.'
});
// If the input prompt wasn't cancelled, start a new sprint
if (newSprintName !== undefined) {
try {
await kanbn.sprint(newSprintName, '', new Date());
} catch (e) {
vscode.window.showErrorMessage(e.message);
}
}
return;
} }
}, null, this._disposables); }, null, this._disposables);
} }

View File

@ -24,6 +24,7 @@ function App() {
const [panelUuid, setPanelUuid] = useState(''); const [panelUuid, setPanelUuid] = useState('');
const [showBurndownButton, setShowBurndownButton] = useState(false); const [showBurndownButton, setShowBurndownButton] = useState(false);
const [showSprintButton, setShowSprintButton] = useState(false); const [showSprintButton, setShowSprintButton] = useState(false);
const [currentSprint, setCurrentSprint] = useState(null);
window.addEventListener('message', event => { window.addEventListener('message', event => {
const tasks = Object.fromEntries(event.data.tasks.map(task => [task.id, task])); const tasks = Object.fromEntries(event.data.tasks.map(task => [task.id, task]));
@ -42,6 +43,13 @@ function App() {
setCompletedColumns(event.data.completedColumns); setCompletedColumns(event.data.completedColumns);
setShowBurndownButton(event.data.showBurndownButton); setShowBurndownButton(event.data.showBurndownButton);
setShowSprintButton(event.data.showSprintButton); setShowSprintButton(event.data.showSprintButton);
// Get current sprint
let sprint = null;
if ('sprints' in event.data.index.options && event.data.index.options.sprints.length) {
sprint = event.data.index.options.sprints[event.data.index.options.sprints.length - 1];
}
setCurrentSprint(sprint);
break; break;
case 'task': case 'task':
@ -70,6 +78,7 @@ function App() {
dateFormat={dateFormat} dateFormat={dateFormat}
showBurndownButton={showBurndownButton} showBurndownButton={showBurndownButton}
showSprintButton={showSprintButton} showSprintButton={showSprintButton}
currentSprint={currentSprint}
vscode={vscode} vscode={vscode}
/> />
} }

View File

@ -3,6 +3,7 @@ import React, { useState } from "react";
import TaskItem from './TaskItem'; import TaskItem from './TaskItem';
import { paramCase } from 'param-case'; import { paramCase } from 'param-case';
import VSCodeApi from "./VSCodeApi"; import VSCodeApi from "./VSCodeApi";
import formatDate from 'dateformat';
// Called when a task item has finished being dragged // Called when a task item has finished being dragged
const onDragEnd = (result, columns, setColumns, vscode: VSCodeApi) => { const onDragEnd = (result, columns, setColumns, vscode: VSCodeApi) => {
@ -141,6 +142,7 @@ const Board = ({
dateFormat, dateFormat,
showBurndownButton, showBurndownButton,
showSprintButton, showSprintButton,
currentSprint,
vscode vscode
}: { }: {
name: string, name: string,
@ -152,6 +154,11 @@ const Board = ({
dateFormat: string, dateFormat: string,
showBurndownButton: boolean, showBurndownButton: boolean,
showSprintButton: boolean, showSprintButton: boolean,
currentSprint: {
start: string,
name: string,
description: string
}|null,
vscode: VSCodeApi vscode: VSCodeApi
}) => { }) => {
const [, setColumns] = useState(columns); const [, setColumns] = useState(columns);
@ -209,10 +216,15 @@ const Board = ({
command: 'kanbn.sprint' command: 'kanbn.sprint'
}); });
}} }}
title="Start a new sprint" title={[
currentSprint
? `${currentSprint.name}\nStarted ${formatDate(currentSprint.start, dateFormat)}`
: '',
'Start a new sprint'
].join('\n')}
> >
<i className="codicon codicon-rocket"></i> <i className="codicon codicon-rocket"></i>
Sprint 1 {currentSprint ? currentSprint.name : 'No sprint'}
</button> </button>
} }
{ {

View File

@ -28,12 +28,17 @@ body.vscode-high-contrast {
.kanbn-filter { .kanbn-filter {
position: relative; position: relative;
flex: 1; flex: 1;
text-align: right; }
.kanbn-filter form {
width: 100%;
display: flex;
white-space: nowrap;
} }
.kanbn-filter-input { .kanbn-filter-input {
box-sizing: border-box; box-sizing: border-box;
width: 60%; flex: 1;
padding: 8px; padding: 8px;
background-color: var(--vscode-input-background); background-color: var(--vscode-input-background);
color: var(--vscode-input-foreground); color: var(--vscode-input-foreground);