allow vorgangPIN to be changed on Vorgang page

includes:
- UI and backend logic
- adjustment to `NameItemEditor` to disallow deletion
This commit is contained in:
2025-11-20 12:54:53 +01:00
parent c81196343f
commit 365fb0f2c7
4 changed files with 66 additions and 16 deletions

View File

@@ -15,7 +15,7 @@
export let currentName: string; export let currentName: string;
export let vorgangToken: string | null; export let vorgangToken: string | null;
export let onSave: (n: string, o: string, t?: string) => unknown = () => {}; export let onSave: (n: string, o: string, t?: string) => unknown = () => {};
export let onDelete: (n: string) => unknown = () => {}; export let onDelete: (n: string) => unknown | null = () => {};
let localName = currentName; let localName = currentName;
let isEditing = false; let isEditing = false;
@@ -98,13 +98,15 @@
> >
<Edit class="w-4 h-4" /> <Edit class="w-4 h-4" />
</button> </button>
<button {#if onDelete}
data-testid="delete-button" <button
onclick={handleDeleteClick} data-testid="delete-button"
class="text-gray-500 hover:text-red-600 transition" onclick={handleDeleteClick}
> class="text-gray-500 hover:text-red-600 transition"
<Trash class="w-4 h-4" /> >
</button> <Trash class="w-4 h-4" />
</button>
{/if}
</div> </div>
{/if} {/if}

View File

@@ -236,13 +236,15 @@ export const vorgangPINValidation = function (vorgangToken: string, vorgangPIN:
}; };
/** /**
* Rename Vorgang * Change VorgangName or VorgangPIN
* @param vorgangToken * @param vorgangToken
* @param newName * @param newName
* @returns {int} number of affected lines * @returns {int} number of affected lines
*/ */
export const renameVorgangByToken = function (vorgangToken: string, newName: string) { export const updateVorgangAttrByToken = function (vorgangToken: string,
const renameSQLStmt = 'UPDATE cases set name = ? WHERE token = ?'; newName: string,
column: string) {
const renameSQLStmt = `UPDATE cases set ${column} = ? WHERE token = ?`;
const statement = db.prepare(renameSQLStmt); const statement = db.prepare(renameSQLStmt);
let info; let info;

View File

@@ -190,6 +190,34 @@
} }
} }
async function savePIN(newVorgangPIN: string, oldVorgangPIN: string) {
open = true;
inProgress = true;
isError = false;
try {
const res = await fetch(API_ROUTES.VORGANG(vorgangToken), {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ vorgangToken, oldVorgangPIN, newVorgangPIN,
changePIN: true})
});
if (!res.ok) {
throw new Error('Fehler beim Speichern');
}
await invalidateAll();
crimesList = data.crimesList;
open = false;
} catch (err) {
console.error('⚠️ Netzwerkfehler beim Speichern', err);
isError = true;
} finally {
inProgress = false;
}
}
async function handleDelete(tatort: string) { async function handleDelete(tatort: string) {
open = true; open = true;
inProgress = true; inProgress = true;
@@ -251,7 +279,13 @@ Mit freundlichen Grüßen,
<h1 class="text-xl">{vorgangName}</h1> <h1 class="text-xl">{vorgangName}</h1>
{#if admin} {#if admin}
Zugangs-PIN: {vorgangPIN} Zugangs-PIN:
<NameItemEditor
list={[]}
currentName={vorgangPIN}
onSave={savePIN}
onDelete={null}
/>
<a class="pt-2 pb-6" href={constructMailToLink()} <a class="pt-2 pb-6" href={constructMailToLink()}
><Button disabled={isEmptyList}>Share Link</Button></a ><Button disabled={isEmptyList}>Share Link</Button></a
> >

View File

@@ -4,7 +4,7 @@ import {
deleteVorgangByToken, deleteVorgangByToken,
getCrimesListByToken, getCrimesListByToken,
vorgangNameExists, vorgangNameExists,
renameVorgangByToken updateVorgangAttrByToken
} from '$lib/server/vorgangService'; } from '$lib/server/vorgangService';
export async function DELETE({ params }) { export async function DELETE({ params }) {
@@ -59,14 +59,26 @@ export async function GET({ params }) {
} }
} }
// rename vorgang // change Vorgang properties
export async function PUT({ request }) { export async function PUT({ request }) {
const data = await request.json(); const data = await request.json();
const vorgangToken = data['vorgangToken']; const vorgangToken = data['vorgangToken'];
const newVorgangName = data['newName'];
const res = renameVorgangByToken(vorgangToken, newVorgangName); const changePIN = data['changePIN'];
let attrChanged;
let newValue;
if (changePIN) {
attrChanged = 'pin';
newValue = data['newVorgangPIN']
} else {
attrChanged = 'name';
newValue = data['newName']
}
const res = updateVorgangAttrByToken(vorgangToken, newValue, attrChanged);
if (!res) { if (!res) {
return json({ msg: 'Fehler beim Umbenennen' }, { status: 400 }); return json({ msg: 'Fehler beim Umbenennen' }, { status: 400 });