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",