React-frontend en API-mapping
Gecontroleerde bronversie
Apache DocumentRoot /var/bestelsysteem/lmf-app → /mnt/storage/lmf_app/build. Live entrypoint static/js/main.7e850739.js. In /mnt/storage/lmf_app/lmf_buildv0027.zip staat dezelfde bundel, byte-identiek, met build/static/js/main.7e850739.js.map en ingebedde sourcesContent. Het buildscript verwijdert sourcemaps uit de live map; het archief bewaart ze wel.
Alle React-paden hieronder zijn oorspronkelijke sourcepaden uit die sourcemap, niet verzonnen componentnamen. Extractie is uitsluitend voor analyse in /tmp/lmf-react-source; niet als nieuwe bronrepository of release gebruikt. Manifest met hashes/paden. Er is geen aparte actuele React-Gitcommit vastgesteld. Archive/build-identiteit bewijst de bron van de geserveerde bundle, niet welke gecachete versie iedere browser heeft.
Routes en schermen
| Route | Screen / component | API en backend | Tabellen/resultaat |
|---|---|---|---|
| / | LoginView / Auth/Login | services/login.loginAPI → login → handler.authen → LMF.role | lmf_user, account/locaties/catalogus/config; token/rol |
| /main-menu | MenuView / Menu | loginstate, geen extra logistieke call | vier rolmenu's |
| /supplier-deliveries | SupplierDeliveriesView / SupplierDeliveries (exportnaam LogisticDeliveries) | fetchSupplierDeliveries → supplier_deliveries | pakbon, regels, lokatie, partners, verpakking → deliveries |
| /supplier-delivery-detail/:id | SupplierDeliveryDetailView / SupplierDeliveryDetail | fetchSupplierDelivery → supplier_delivery → supplier_deliveries; confirmSupplierDelivery → confirm_delivery | pakbon.guid-detail; bevestiging/geleverd_volgens_leverancier |
| /new-supplier-delivery | NewSupplierDeliveryView / NewSupplierDelivery | createNewSupplierDelivery → new_supplier_delivery; optioneel base64toData extern | pakbon/footer/emballage; camera naar aparte herkennings-API |
| /supplier-orders | SupplierOrdersView / SupplierOrders | fetchSupplierOrders → orders → order_regels | vers_order, order_regel, product, lokatie, order_status |
| /supplier-products | SupplierProductsView / SupplierProducts | fetchSupplierProducts → products | producten/aantallen per datum |
| /supplier-dashboard | SupplierDashboardView / SupplierDashboard | fetchSupplierDashboardData → dashboard → supplier_dashboard | vers_order/regels/productgroepen → chartdata |
| /supplier-settings | SupplierSettingsView / SupplierSettings | Redux currentInformation | navigatievoorkeur; ook route in HubRoutes |
| /hub-incoming | HubDeliveriesView / HubIncoming → HubDeliveries | fetchIncomingHub → hub_incoming; registerIncomingGoodsHub → hub_incoming_deliveries | pakbonnen, catalogus, reg → leverancierzijde |
| /hub-outgoing | HubOutgoingView / HubOutgoing → HubDeliveries | fetchOutgoingHub → hub_outgoing; registerIncomingGoodsHub → hub_outgoing_deliveries | dezelfde bronnen, locatiezijde |
| /hub-dashboard | HubDashboardView / HubDashboard | fetchHubDashboardData → dashboard → hub_dashboard | orders/productgroepen op HUB |
| /logistics-deliveries | LogisticDeliveriesView / LogisticsDeliveries | fetchLogisticDeliveries → logistics_deliveries | route/project/pakbon → deliveries |
| /logistics-delivery-detail | LogisticDeliveryDetailView / LogisticDeliveryDetail | confirmLogisticsDelivery → confirm_delivery, acceptNewSupplierDelivery → accept_new_delivery | geselecteerde delivery uit schermstate; bevestiging/acceptatie |
| /new-logistics-deliveries | NewLogisticsDeliveriesView / NewLogisticsDeliveries | fetchNewSupplierDeliveries → new_supplier_deliveries | vrije LMF-pakbonnen, status 0 |
| /logistics-stops | LogisticStopsView / LogisticsStops → LogisticsStopDetail | fetchLogisticStops → stops; registerStopEmballage → stop → pickup_stop/delivery_stop | route_lokatie/pakbon/stopregistratie |
| /logistics-dashboard | LogisticsDashboardView / LogisticsDashboard | fetchLogisticsDashboardData → dashboard → logistics_dashboard | orders van transporteur |
| /logistics-settings | LogisticSettingsView / LogisticSettings | Redux-navigator | Google/Waze-keuze |
| /customer-deliveries | CustomerDeliveriesView / CustomerDeliveries → CustomerDeliveryDetails | fetchCustomerDeliveries → customer_deliveries; confirmCustomerDelivery → confirm_delivery | klantlocatie/pakbon/emballage; contractverschillen hieronder |
| /customer-delivery | CustomerDeliveryView | schermwrapper | geen afzonderlijke customer_delivery-call in actieve actions gevonden |
| /customer-settings | CustomerSettingsView / CustomerSettings, LocationSelector | placeLocationComment → location_comment; updateLocations → Redux | lokatie.bijzonderheden + vernieuwde locaties in Redux |
| /customer-dashboard | CustomerDashboardView / CustomerDashboard | fetchCustomerDashboardData → dashboard → customer_dashboard | eerste loginlocatie, orders/productgroepen |
HubRoutes bevat ook supplier-delivery-detail/:id met HUB-availability. De onderliggende supplier_delivery-API wordt in LMF alleen onder leverancierrol gedispatcht: route-aanwezigheid bewijst geen werkend HUB-detailpad.
Alle reguliere actions gebruiken POST, JSON en Authorization: Bearer <token>. API-prefix /api komt uit Axios.defaults. Backendcode=200 bepaalt succes, niet alleen HTTP-status. Exacte actie-/endpointregels staan in frontend-evidence.
State, hooks, layout en invoer
services/store.js: Redux createStore + thunk, reducers login/current_information. Beide worden alsstatein localStorage bewaard en bij start hersteld. Login wist localStorage en zet het Axios Bearer-header; logout wist state/header.services/currentInformation: startDate/endDate/navigator.DateRangePickerstuurt datumkeuze; views herladen via useEffect/useSelector, formatteren data met date-fns. Lokale useState voor response/loading, gekozen levering/stop, drawers, hoeveelheden en commentaar; useRef voor handtekening/formulier.routes/AppRoutes.js,utils/RequireAuth.js: rolcontrole, fallback NotFound.Menu, BottomNavBar, Header enscreens/Layouthergebruiken routeconfig en gebruikersinfo.GroupedDeliveries: MUI accordions; groepeerkeuze in GroupbyOptions en datumkiezer. Het bestand sorteert groepitems op leverdatum aflopend; dit kan de serverroutevolgorde visueel veranderen.SupplierOrdersenSupplierProductstonen tabellen. DashboardComponents gebruikt Chart.js/react-chartjs-2 voor lijn- en staafgrafieken, orders per dag en productaantallen.EmballageDrawer(export SupplierEmballageDrawer): MUI bottom drawer, catalogusartikel + KVD-keuze + Number(value); bewaart{id, number, package_type}. Herkent zowelidalspackage_idin catalogusopties.EmballageInvoerBox.js, export EmballageBox: aantallen/knoppen in stopdetail.- CameraComponent/NewSupplierDelivery gebruiken react-html5-camera-photo. SignatureComponent/SignatureUtils behandelen handtekening. Photo/signature zijn requestvelden; opslaggevolgen staan in packaging-flow.
- GoogleMapCustom en Marker zijn gedeeld door leverings-/stopdetail; geen plannerpagina in deze build. Zie integraties.
Backendfuncties zonder geverifieerde React-aanroep
Geen action/call voor dash_orders, dash_customers, dash_route_customers, dash_suppliers, route_plan, emballage_hub_control, return_packaging, postcode, check_token, hub_routes, hub_vehicles, hub_customer_products, hub_supplier_products, hub_customers, hub_suppliers, hub_orders, update_supplier_delivery gevonden in de actieve appbronnen/bundel. Een andere client is mogelijk maar niet vastgesteld. Importer is evenmin gekoppeld aan een scherm.
Push-notificatiecomponenten roepen subscribe/subscribed/unsubscribe aan; geen overeenkomstige dispatch in XLSLMFHandler/LMF gevonden. Connector/upload/download/Keana zijn backend/externe paden, geen React-use-cases in deze build.
Aantoonbare frontend/backend-contractverschillen
- fetchCustomerDeliveries stuurt alleen start_date/end_date; backend vereist ook location_id (GUID). Geen interceptor die dit toevoegt aangetroffen.
- CustomerDeliveryDetails verstuurt packages, backend-confirm leest outbound_packages. Supplierdetail verstuurt outbound_packages wel; returned_packages wordt in beide gevallen niet verwerkt door confirm_delivery.
- delivery_id uit klant/logistieke lijst is pakbon.levering; confirm_delivery zoekt pakbon.guid. Alleen als waarden toevallig overeenkomen werkt dit als dezelfde sleutel.
- registerStopEmballage leest
response.data.stops.data.stops; backend retourneert{code,data:{stops:{code,data:{stops:[...]}}}}. Het voorste data-niveau ontbreekt dus in de frontendtoegang; een write kan al geslaagd zijn terwijl de UI catch uitvoert. - CustomerDeliveryDetails veronderstelt bepaalde suppliers/locations; lege/mismatched responses zijn niet overal defensief verwerkt. Geen ingelogde browserproef uitgevoerd.
Deze bevindingen zijn niet tijdens de documentatie-opdracht gerepareerd.