Skip to content

Commit 91fc3ce

Browse files
committed
chore: some ui fixes
1 parent c18cc1d commit 91fc3ce

3 files changed

Lines changed: 43 additions & 21 deletions

File tree

config/locales/de/Settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
"TableStatus": "Status",
2222
"CurrentSession": "Aktuelle Sitzung"
2323
},
24+
"Notifications": {
25+
"Headline": "Benachrichtigungen"
26+
},
2427
"DiscountEmails": {
2528
"Headline": "E-Mails zu Angeboten",
2629
"Description": "Erhalte eine E-Mail, wenn die Administration neue Rabatte ankündigt.",

test/foodorders.test.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const test = require('node:test');
2+
const assert = require('node:assert/strict');
3+
4+
require('module-alias/register');
5+
6+
const { canTransitionOrderItemStatus } = require('@lib/sqlite/foodorders');
7+
8+
test('food order item statuses only move forward', () => {
9+
assert.equal(canTransitionOrderItemStatus('requested', 'ordered'), true);
10+
assert.equal(canTransitionOrderItemStatus('requested', 'completed'), false);
11+
assert.equal(canTransitionOrderItemStatus('ordered', 'requested'), false);
12+
assert.equal(canTransitionOrderItemStatus('ordered', 'completed'), true);
13+
});
14+
15+
test('terminal and charged food order items cannot change status', () => {
16+
assert.equal(canTransitionOrderItemStatus('completed', 'ordered'), false);
17+
assert.equal(canTransitionOrderItemStatus('completed', 'missing'), false);
18+
assert.equal(canTransitionOrderItemStatus('missing', 'ordered'), false);
19+
assert.equal(canTransitionOrderItemStatus('cancelled', 'requested'), false);
20+
assert.equal(canTransitionOrderItemStatus('ordered', 'completed', '2026-06-23 00:00:00'), false);
21+
});

views/settings.ejs

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,12 @@
105105
</div>
106106
<% } %>
107107

108-
<div id="notification-settings-container" class="space-y-8"></div>
108+
<div class="w-full max-w-2xl mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-3xl">
109+
<div class="p-8 md:p-12">
110+
<h2 class="text-2xl font-bold text-gray-900 mb-6" data-translate="Settings.Notifications.Headline"></h2>
111+
<div id="notification-settings-container" class="divide-y divide-gray-200"></div>
112+
</div>
113+
</div>
109114

110115
<div class="w-full max-w-2xl mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-3xl">
111116
<div class="p-8 md:p-12">
@@ -146,26 +151,19 @@
146151
147152
function renderNotificationSettings(settings) {
148153
notificationSettingsContainer.innerHTML = settings.map((notification) => `
149-
<div class="w-full max-w-2xl mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-3xl">
150-
<div class="p-8 md:p-12">
151-
<div class="flex items-center justify-between gap-6">
152-
<div>
153-
<h2 class="text-2xl font-bold text-gray-900 mb-2">${t(`${notification.translationKeyBase}.Headline`)}</h2>
154-
<p class="text-gray-500">${t(`${notification.translationKeyBase}.Description`)}</p>
155-
</div>
156-
<label class="relative inline-flex flex-shrink-0 cursor-pointer items-center">
157-
<input
158-
type="checkbox"
159-
class="notification-toggle peer sr-only"
160-
data-notification-key="${notification.key}"
161-
data-notification-channel="${notification.channel}"
162-
data-translation-key-base="${notification.translationKeyBase}"
163-
${notification.enabled ? "checked" : ""}
164-
>
165-
<div class="h-6 w-11 rounded-full bg-gray-200 after:absolute after:start-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-indigo-600 peer-checked:after:translate-x-full peer-checked:after:border-white"></div>
166-
</label>
167-
</div>
168-
</div>
154+
<div class="flex items-center justify-between gap-6 py-4 first:pt-0 last:pb-0">
155+
<span class="font-medium text-gray-900">${t(`${notification.translationKeyBase}.Headline`)}</span>
156+
<label class="relative inline-flex flex-shrink-0 cursor-pointer items-center">
157+
<input
158+
type="checkbox"
159+
class="notification-toggle peer sr-only"
160+
data-notification-key="${notification.key}"
161+
data-notification-channel="${notification.channel}"
162+
data-translation-key-base="${notification.translationKeyBase}"
163+
${notification.enabled ? "checked" : ""}
164+
>
165+
<div class="h-6 w-11 rounded-full bg-gray-200 after:absolute after:start-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-indigo-600 peer-checked:after:translate-x-full peer-checked:after:border-white"></div>
166+
</label>
169167
</div>
170168
`).join("");
171169

0 commit comments

Comments
 (0)