diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/DbLocation.java b/core/src/main/java/de/srsoftware/umbrella/core/model/DbLocation.java index 26a9ae7..23bb086 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/DbLocation.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/DbLocation.java @@ -2,15 +2,15 @@ package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; +import static de.srsoftware.umbrella.core.Util.markdown; import de.srsoftware.umbrella.core.api.Owner; -import org.json.JSONObject; - import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashSet; import java.util.Map; import java.util.Set; +import org.json.JSONObject; public class DbLocation extends Location { private Owner owner; @@ -92,7 +92,8 @@ public class DbLocation extends Location { var map = super.toMap(); map.put(OWNER,owner.toMap()); map.put(NAME,name); - map.put(DESCRIPTION,description); + map.put(DESCRIPTION,Map.of(SOURCE,description,RENDERED,markdown(description))); + if (parentLocationId != null) map.put(PARENT_LOCATION_ID,parentLocationId); return map; } diff --git a/frontend/src/routes/stock/Index.svelte b/frontend/src/routes/stock/Index.svelte index 5107bc2..ac8d15a 100644 --- a/frontend/src/routes/stock/Index.svelte +++ b/frontend/src/routes/stock/Index.svelte @@ -4,9 +4,11 @@ import { error, yikes } from '../../warn.svelte'; import { t } from '../../translations.svelte'; - import Locations from './Locations.svelte'; import ItemList from './ItemList.svelte'; import ItemProps from './ItemProps.svelte'; + import LineEditor from '../../Components/LineEditor.svelte'; + import Locations from './Locations.svelte'; + import MarkdownEditor from '../../Components/MarkdownEditor.svelte'; import Notes from '../notes/RelatedNotes.svelte'; import Tags from '../tags/TagList.svelte'; @@ -122,6 +124,25 @@ loadProperties(); } + async function patchLocation(location,field,newValue){ + const data = {}; + data[field] = newValue; + console.log(data); + const url = api(`stock/location/${location.id}`); + const res = await fetch(url,{ + credentials: 'include', + method:'PATCH', + body:JSON.stringify(data) + }); + if (res.ok){ + yikes(); + return true; + } else { + error(res); + return false; + } + } + onMount(load); @@ -147,7 +168,14 @@ {:then data}
{#if location} -

{location.name}

+

+ patchLocation(location,'name',newName)} /> + + {#if location.parent_location_id} + + {/if} +

+ patchLocation(location,'description',newDesc)} /> {/if} a.code.localeCompare(b.code))} bind:selected={item} drag_start={drag_item} />
diff --git a/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java b/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java index 0207854..b3138e2 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java @@ -289,10 +289,11 @@ public class SqliteDb extends BaseDb implements StockDb { @Override public DbLocation save(DbLocation location) { + var parentId = location.parent() == 0 ? null : location.parent(); if (location.id() == 0) { // new location try { var rs = insertInto(TABLE_LOCATIONS,OWNER,PARENT_LOCATION_ID,NAME,DESCRIPTION) - .values(location.owner().dbCode(),location.parent(),location.name(),location.description()) + .values(location.owner().dbCode(),location.parent() == 0 ? null : parentId,location.name(),location.description()) .execute(db).getGeneratedKeys(); long id = 0; if (rs.next()) id = rs.getLong(1); @@ -308,7 +309,7 @@ public class SqliteDb extends BaseDb implements StockDb { .set(OWNER, PARENT_LOCATION_ID, NAME, DESCRIPTION) .where(ID,equal(location.id())) .prepare(db) - .apply(location.owner().dbCode(), location.parent(), location.name(), location.description()) + .apply(location.owner().dbCode(), parentId, location.name(), location.description()) .close(); return location.clear(); } catch (SQLException e){ diff --git a/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java b/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java index 0b31807..833d3a2 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java @@ -248,10 +248,12 @@ public class StockModule extends BaseHandler implements StockService { if (!assigned(owner,user)) throw forbidden("You are not allowed to edit \"{0}\"!",location.name()); if (json.has(PARENT_LOCATION_ID) && json.get(PARENT_LOCATION_ID) instanceof Number parentId){ - var target = stockDb.loadLocation(parentId.longValue()); - var targetOwner = target.owner().resolve(); - if (!assigned(targetOwner,user)) throw forbidden("You are not allowed to edit \"{0}\"!",target.name()); - if (!targetOwner.equals(owner)) throw unprocessable("You may not move locations from one owner ({0}) to another ({1})",owner,targetOwner); + if (parentId.longValue() != 0L) { + var target = stockDb.loadLocation(parentId.longValue()); + var targetOwner = target.owner().resolve(); + if (!assigned(targetOwner, user)) throw forbidden("You are not allowed to edit \"{0}\"!", target.name()); + if (!targetOwner.equals(owner)) throw unprocessable("You may not move locations from one owner ({0}) to another ({1})", owner, targetOwner); + } } location = stockDb.save(location.patch(json)); diff --git a/translations/src/main/resources/de.json b/translations/src/main/resources/de.json index cadcc73..89aa252 100644 --- a/translations/src/main/resources/de.json +++ b/translations/src/main/resources/de.json @@ -170,6 +170,7 @@ "wiki": "Wiki" }, "month": "Monat", + "move_to_top": "nach ganz oben bewegen", "must_not_be_empty": "darf nicht leer sein", "name": "Name", diff --git a/translations/src/main/resources/en.json b/translations/src/main/resources/en.json index 383bafe..3d8613d 100644 --- a/translations/src/main/resources/en.json +++ b/translations/src/main/resources/en.json @@ -169,6 +169,7 @@ "wiki": "wiki" }, "month": "month", + "move_to_top": "move to top level", "must_not_be_empty": "must not be empty", "name": "Name",