fine-tuning kanban
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -152,14 +152,15 @@ public class Task implements Mappable {
|
|||||||
case DESCRIPTION: description = json.getString(key); break;
|
case DESCRIPTION: description = json.getString(key); break;
|
||||||
case DUE_DATE: dueDate = json.isNull(DUE_DATE) || json.getString(DUE_DATE).isBlank() ? null : LocalDate.parse(json.getString(DUE_DATE)); break;
|
case DUE_DATE: dueDate = json.isNull(DUE_DATE) || json.getString(DUE_DATE).isBlank() ? null : LocalDate.parse(json.getString(DUE_DATE)); break;
|
||||||
case ESTIMATED_TIME: estimatedTime = json.isNull(ESTIMATED_TIME) ? null : json.getDouble(ESTIMATED_TIME); break;
|
case ESTIMATED_TIME: estimatedTime = json.isNull(ESTIMATED_TIME) ? null : json.getDouble(ESTIMATED_TIME); break;
|
||||||
|
case MEMBERS: continue;
|
||||||
case NAME: name = json.getString(key); break;
|
case NAME: name = json.getString(key); break;
|
||||||
case NO_INDEX: noIndex = json.getBoolean(NO_INDEX); break;
|
case NO_INDEX: noIndex = json.getBoolean(NO_INDEX); break;
|
||||||
case SHOW_CLOSED: showClosed = json.getBoolean(SHOW_CLOSED); break;
|
case SHOW_CLOSED: showClosed = json.getBoolean(SHOW_CLOSED); break;
|
||||||
case START_DATE: start = json.isNull(START_DATE) || json.getString(START_DATE).isBlank() ? null : LocalDate.parse(json.getString(START_DATE)); break;
|
case START_DATE: start = json.isNull(START_DATE) || json.getString(START_DATE).isBlank() ? null : LocalDate.parse(json.getString(START_DATE)); break;
|
||||||
case STATUS: status = json.get(key) instanceof Number number ? Status.of(number.intValue()) : Status.valueOf(json.getString(key)); break;
|
case STATUS: status = json.get(key) instanceof Number number ? Status.of(number.intValue()) : Status.valueOf(json.getString(key)); break;
|
||||||
default: {
|
default: {
|
||||||
key = null;
|
|
||||||
LOG.log(WARNING,"Tried to patch field ''{0}'' of task, which is not implemented!",key);
|
LOG.log(WARNING,"Tried to patch field ''{0}'' of task, which is not implemented!",key);
|
||||||
|
key = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (key != null) dirtyFields.add(key);
|
if (key != null) dirtyFields.add(key);
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
|
import Card from './KanbanCard.svelte';
|
||||||
|
|
||||||
let { id } = $props();
|
let { id } = $props();
|
||||||
|
|
||||||
let error = $state(null);
|
let error = $state(null);
|
||||||
@@ -146,7 +148,7 @@
|
|||||||
<span class="error">{error}</span>
|
<span class="error">{error}</span>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="grid" style="display: grid; grid-template-columns: {`repeat(${columns}, auto)`}">
|
<div class="kanban" style="display: grid; grid-template-columns: {`repeat(${columns}, auto)`}">
|
||||||
<div class="head">{t('user')}</div>
|
<div class="head">{t('user')}</div>
|
||||||
{#if states}
|
{#if states}
|
||||||
{#each Object.entries(states) as [sid,state]}
|
{#each Object.entries(states) as [sid,state]}
|
||||||
@@ -159,7 +161,7 @@
|
|||||||
<div class={[state, highlight.user == user && highlight.state == state ? 'highlight':'']} ondragover={ev => hover(ev,user,state)} ondrop={ev => drop(user,state)} >
|
<div class={[state, highlight.user == user && highlight.state == state ? 'highlight':'']} ondragover={ev => hover(ev,user,state)} ondrop={ev => drop(user,state)} >
|
||||||
{#if stateList[state]}
|
{#if stateList[state]}
|
||||||
{#each Object.values(stateList[state]).sort((a,b) => a.name.localeCompare(b.name)) as task}
|
{#each Object.values(stateList[state]).sort((a,b) => a.name.localeCompare(b.name)) as task}
|
||||||
<div draggable="true" class="box" onclick={() => router.navigate(`/task/${task.id}/view`)} ondragstart={ev => dragged=task} >{task.name}</div>
|
<Card onclick={() => router.navigate(`/task/${task.id}/view`)} ondragstart={ev => dragged=task} {task} />
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
7
frontend/src/routes/project/KanbanCard.svelte
Normal file
7
frontend/src/routes/project/KanbanCard.svelte
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<script>
|
||||||
|
let { ondragstart, task } = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div draggable="true" class="box" {ondragstart} >
|
||||||
|
{task.name}
|
||||||
|
</div>
|
||||||
@@ -142,3 +142,26 @@ textarea{
|
|||||||
background: #333;
|
background: #333;
|
||||||
font-weight: black;
|
font-weight: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.kanban .box,
|
||||||
|
.kanban .head,
|
||||||
|
.kanban .user{
|
||||||
|
border-radius: 5px;
|
||||||
|
margin: 2px;
|
||||||
|
min-height: 50px;
|
||||||
|
color: black;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
.kanban .box{
|
||||||
|
background: orange;
|
||||||
|
}
|
||||||
|
.kanban .head,
|
||||||
|
.kanban .user{
|
||||||
|
background: black;
|
||||||
|
border: 1px solid orange;
|
||||||
|
color: orange;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.kanban .highlight{
|
||||||
|
background: #4b3000;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user