code cleanup

This commit is contained in:
2025-07-30 15:35:19 +02:00
parent 631a527a5d
commit fccec9865a
27 changed files with 442 additions and 428 deletions

View File

@@ -1,34 +1,33 @@
<script>
import { useTinyRouter } from 'svelte-tiny-router';
import { t } from '../../translations.svelte.js';
import { api } from '../../urls.svelte.js';
import { t } from '../../translations.svelte.js';
import CompanySelector from '../../Components/CompanySelector.svelte';
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
import Settings from './Settings.svelte';
import Tags from '../tags/TagList.svelte';
import CompanySelector from '../../Components/CompanySelector.svelte';
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
import Settings from './Settings.svelte';
import Tags from '../tags/TagList.svelte';
let error = $state(null);
let ready = $derived(!!project.name.trim())
const router = useTinyRouter();
let error = $state(null);
let ready = $derived(!!project.name.trim())
const router = useTinyRouter();
let showSettings = $state(false);
let project = $state({
name:'',
name : '',
description : { source : '', rendered : '' },
settings:{
show_closed:false
},
tags: []
settings : { show_closed:false },
tags : []
});
async function onsubmit(ev){
ev.preventDefault();
const url = `${location.protocol}//${location.host.replace('5173','8080')}/api/project`;
var resp = await fetch(url,{
credentials: 'include',
method: 'POST',
body: JSON.stringify(project)
const url = api('project');
var resp = await fetch(url,{
credentials : 'include',
method : 'POST',
body : JSON.stringify(project)
});
if (resp.ok){
var newProject = await resp.json();

View File

@@ -1,48 +1,47 @@
<script>
import { onMount } from 'svelte';
import { onMount } from 'svelte';
import { useTinyRouter } from 'svelte-tiny-router';
import { api } from '../../urls.svelte.js';
import { t } from '../../translations.svelte.js';
import { user } from '../../user.svelte.js';
import { api } from '../../urls.svelte.js';
import { t } from '../../translations.svelte.js';
import { user } from '../../user.svelte.js';
import Card from './KanbanCard.svelte';
import LineEditor from '../../Components/LineEditor.svelte';
let { id } = $props();
let dragged = null;
let error = $state(null);
let highlight = $state({});
let project = $state(null);
let ready = $state(false);
let router = useTinyRouter();
let states = $state(null);
let tasks = $state({});
let dragged = null;
let error = $state(null);
let highlight = $state({});
let filter_input = $state('');
let filter = $derived(filter_input.toLowerCase());
let users = {};
let columns = $derived(states?Object.keys(states).length+1:1);
let filter = $derived(filter_input.toLowerCase());
let project = $state(null);
let ready = $state(false);
let router = useTinyRouter();
let states = $state(null);
let tasks = $state({});
let users = {};
let columns = $derived(states?Object.keys(states).length+1:1);
async function create(name,user_id,state){
var url = api('task/add');
let task = {
description: '',
members : {},
name: name,
project_id: +id,
status : { code : +state}
description : '',
members : {},
name : name,
project_id : +id,
status : { code : +state}
}
task.members[user_id] = { permission: { name : 'ASSIGNEE' }};
task.members[user.id] = { permission: { name : 'OWNER' }};
const resp = await fetch(url,{
credentials:'include',
method:'POST',
body: JSON.stringify(task)
const resp = await fetch(url,{
credentials : 'include',
method : 'POST',
body : JSON.stringify(task)
});
if (resp.ok) {
task = await resp.json();
task = await resp.json();
task.assignee = user_id;
if (!tasks[user_id]) tasks[user_id] = {};
if (!tasks[user_id][state]) tasks[user_id][state] = {};
@@ -54,18 +53,18 @@
}
async function drop(user_id,state){
let task = dragged;
dragged = null;
let task = dragged;
dragged = null;
highlight = {};
if (task.assignee == user_id && task.status.code == state) return; // no change
let patch = {members:{},status:+state}
let patch = {members:{},status:+state}
patch.members[user_id] = 'ASSIGNEE';
const url = api(`task/${task.id}`);
const resp = await fetch(url,{
credentials: 'include',
method: 'PATCH',
body: JSON.stringify(patch)
credentials : 'include',
method : 'PATCH',
body : JSON.stringify(patch)
});
if (resp.ok){
delete tasks[task.assignee][task.status.code][task.id]
@@ -73,8 +72,8 @@
if (!tasks[user_id][state]) tasks[user_id][state] = {}
tasks[user_id][state][task.id] = task;
task.assignee = user_id;
task.status = {code:state,name:states[state]};
error = null;
task.status = {code:state,name:states[state]};
error = null;
} else {
error = await resp.text();
}
@@ -89,7 +88,7 @@
}
async function loadProject(){
const url = api(`project/${id}`);
const url = api(`project/${id}`);
const resp = await fetch(url,{credentials:'include'});
if (resp.ok){
project = await resp.json();
@@ -105,18 +104,18 @@
}
async function loadStates(){
const url = api(`project/${id}/states`);
const url = api(`project/${id}/states`);
const resp = await fetch(url,{credentials:'include'});
if (resp.ok){
states = await resp.json();
error = null;
error = null;
} else {
error = await resp.text();
}
}
async function loadTag(task){
const url = api(`tags/task/${task.id}`);
const url = api(`tags/task/${task.id}`);
const resp = await fetch(url,{credentials:'include'});
if (resp.ok) {
const tags = await resp.json();
@@ -136,24 +135,24 @@
}
async function loadTasks(selector){
const url = api('task/list');
const url = api('task/list');
selector.show_closed = true;
selector.no_index = true;
selector.no_index = true;
var resp = await fetch(url,{
credentials: 'include',
method:'POST',
body:JSON.stringify(selector)
credentials : 'include',
method : 'POST',
body : JSON.stringify(selector)
});
if (resp.ok){
var json = await resp.json();
for (var task_id of Object.keys(json)) {
let task = json[task_id];
let state = task.status.code;
let owner = null;
let task = json[task_id];
let state = task.status.code;
let owner = null;
let assignee = null;
for (var user_id of Object.keys(task.members)){
var member = task.members[user_id];
if (member.permission.name == 'OWNER') owner = user_id;
if (member.permission.name == 'OWNER') owner = user_id;
if (member.permission.name == 'ASSIGNEE') assignee = user_id;
}

View File

@@ -1,28 +1,28 @@
<script>
import { onMount } from 'svelte';
import { useTinyRouter } from 'svelte-tiny-router';
import { onMount } from 'svelte';
import { t } from '../../translations.svelte.js';
import { api } from '../../urls.svelte.js';
import { api } from '../../urls.svelte.js';
import { t } from '../../translations.svelte.js';
const router = useTinyRouter();
let error = $state(null);
let projects = $state(null);
let companies = $state(null);
const router = useTinyRouter();
let error = $state(null);
let projects = $state(null);
let companies = $state(null);
let showClosed = $state(router.query.closed == "show");
let sortedProjects = $derived.by(() => Object.values(projects).sort((a, b) => a.name.localeCompare(b.name)));
async function loadProjects(){
let url = api('company/list');
let url = api('company/list');
let resp = await fetch(url,{credentials:'include'});
if (resp.ok){
companies = await resp.json();
url = `${location.protocol}//${location.host.replace('5173','8080')}/api/project/list`;
url = `${location.protocol}//${location.host.replace('5173','8080')}/api/project/list`;
resp = await fetch(url,{
credentials:'include',
method:'POST',
body:JSON.stringify({show_closed:showClosed})
credentials : 'include',
method : 'POST',
body : JSON.stringify({show_closed:showClosed})
});
if (resp.ok){
projects = await resp.json();
@@ -35,14 +35,14 @@
}
async function setState(pid,state_name){
const url = api(`project/${pid}`);
const url = api(`project/${pid}`);
const resp = await fetch(url,{
credentials:'include',
method:'PATCH',
body:JSON.stringify({status:state_name})
credentials : 'include',
method : 'PATCH',
body : JSON.stringify({status:state_name})
});
if (resp.ok){
var prj = await resp.json();
var prj = await resp.json();
projects[prj.id].status = prj.status;
} else {
error = await resp.text();

View File

@@ -1,25 +1,25 @@
<script>
import { onMount } from 'svelte';
import { onMount } from 'svelte';
import { useTinyRouter } from 'svelte-tiny-router';
import { api } from '../../urls.svelte.js';
import { t } from '../../translations.svelte.js';
import { api } from '../../urls.svelte.js';
import { t } from '../../translations.svelte.js';
import LineEditor from '../../Components/LineEditor.svelte';
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
import MemberEditor from '../../Components/MemberEditor.svelte';
import Notes from '../notes/List.svelte';
import StateSelector from '../../Components/StateSelector.svelte';
import Tags from '../tags/TagList.svelte';
import TaskList from '../task/TaskList.svelte';
import LineEditor from '../../Components/LineEditor.svelte';
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
import MemberEditor from '../../Components/MemberEditor.svelte';
import Notes from '../notes/List.svelte';
import StateSelector from '../../Components/StateSelector.svelte';
import Tags from '../tags/TagList.svelte';
import TaskList from '../task/TaskList.svelte';
let router = useTinyRouter();
let { id } = $props();
let project = $state(null);
let error = $state(null);
let tasks = $state(null);
let { id } = $props();
let error = $state(null);
let estimated_time = $state({sum:0});
let showSettings = $state(false);
let project = $state(null);
let router = useTinyRouter();
let showSettings = $state(false);
let tasks = $state(null);
async function addMember(entry){
const ids = Object.keys(entry);
@@ -40,11 +40,11 @@
}
async function getCandidates(text){
const url = api('user/search');
var resp = await fetch(url,{
credentials: 'include',
method: 'POST',
body: text
const url = api('user/search');
const resp = await fetch(url,{
credentials : 'include',
method : 'POST',
body : text
});
if (resp.ok){
var json = await resp.json();
@@ -59,11 +59,11 @@
}
async function loadProject(){
const url = api(`project/${id}`);
const url = api(`project/${id}`);
const resp = await fetch(url,{credentials:'include'});
if (resp.ok){
project = await resp.json();
error = null;
error = null;
loadTasks();
} else {
error = await resp.text();
@@ -71,35 +71,35 @@
}
async function loadTasks(){
const url = api('task/list');
const url = api('task/list');
const data = {
project_id:+id,
show_closed:project.show_closed
}
const resp = await fetch(url,{
credentials:'include',
method:'POST',
body:JSON.stringify(data)
credentials : 'include',
method : 'POST',
body : JSON.stringify(data)
});
if (resp.ok){
tasks = {};
tasks = {};
estimated_time.sum = 0;
tasks = await resp.json();
error = null;
tasks = await resp.json();
error = null;
} else {
error = await resp.text();
}
}
async function update(data){
const url = api(`project/${id}`);
const url = api(`project/${id}`);
const resp = await fetch(url,{
credentials:'include',
method:'PATCH',
body:JSON.stringify(data)
credentials : 'include',
method : 'PATCH',
body : JSON.stringify(data)
});
if (resp.ok){
error = null;
error = null;
project = await resp.json();
return true;
} else {
@@ -114,7 +114,7 @@
function updatePermission(user_id,permission){
let members = {};
let members = {};
members[user_id] = permission.code;
update({members:members});
}