-
Feltcheckliste
+
+
+
Feltcheckliste
+ {readiness.completed}/{readiness.total} klar
+
+
+ {readiness.ready ? 'Klar' : `${readiness.percent}%`}
+
+
+
+
+
+ {!readiness.ready && (
+
+
Mangler før desktop-review
+
+ {readiness.missing.map((item) => - {item}
)}
+
+
+ )}
+ {readiness.ready && readiness.suggestions.length > 0 && (
+
+
Godt at få med
+
+ {readiness.suggestions.map((item) => - {item}
)}
+
+
+ )}
{(detail.checklist?.questions || []).map(renderQuestion)}
@@ -395,7 +501,15 @@ const MobileOrders = ({ apiBaseUrl = '' }) => {
-
+
diff --git a/frontend/src/components/MobileOrders.test.js b/frontend/src/components/MobileOrders.test.js
new file mode 100644
index 0000000..4a51125
--- /dev/null
+++ b/frontend/src/components/MobileOrders.test.js
@@ -0,0 +1,35 @@
+import { buildMobileReadiness } from './MobileOrders';
+
+describe('MobileOrders readiness', () => {
+ const questions = [
+ { key: 'slope', label: 'Fald kontrolleret', inputType: 'boolean', required: true },
+ { key: 'drains', label: 'Afløb optalt', inputType: 'number', required: true },
+ { key: 'notes', label: 'Ekstra note', inputType: 'select', required: false }
+ ];
+
+ test('blocks desktop review until required checklist items and area are complete', () => {
+ const readiness = buildMobileReadiness({
+ questions,
+ answers: { drains: '' },
+ measuredData: { area: '' },
+ attachments: []
+ });
+
+ expect(readiness.ready).toBe(false);
+ expect(readiness.missing).toEqual(['Fald kontrolleret', 'Afløb optalt', 'Areal']);
+ expect(readiness.percent).toBe(0);
+ });
+
+ test('allows review when required checks and area are complete', () => {
+ const readiness = buildMobileReadiness({
+ questions,
+ answers: { slope: false, drains: '2' },
+ measuredData: { area: '124,5', accessNotes: 'Stillads fra indkørsel' },
+ attachments: [{ id: 1 }]
+ });
+
+ expect(readiness.ready).toBe(true);
+ expect(readiness.missing).toEqual([]);
+ expect(readiness.percent).toBe(100);
+ });
+});