# Features — ohlief-app-client

Evidence date: 2026-10-08. Source: `master` `98891e4` (2020-07-05).

Labels: **Current** (present at HEAD and reachable from the route table or the home screen), **Partial**, **Leftover** (starter note UI still in the tree), **Unreachable**, **Removed** (named in an older commit subject, not the behaviour at HEAD).

No feature list existed in the source repository.

## Current — EDI client

### Guest lander

**Current.** `/` without a session. Heading Oh-lief, line "FTP EDI Orders Invoices", logo `/oh-lief-logo.png`, navbar text "Powered by Overdrive & X/procure®".

Source: `src/containers/Home.js`, `src/App.js`.

### Login and logout

**Current.** `/login` for guests. Email and password required. Cognito `Auth.signIn`. Logout calls `Auth.signOut` and opens `/login`.

Source: `src/containers/Login.js`, `src/App.js`.

### Orders tab

**Current.** Default tab for a signed-in user. `GET /ohlief`. Search, column sort on three fields, pagination with no local page-size option. EDIT and INVOICE actions.

Source: `src/containers/Home.js`.

### Invoice-from-order action

**Current.** Confirm dialog, then `GET /invoiceupdate/{orderNumber}`, then a full reload.

Source: `src/containers/Home.js` `genInvoice`.

### Order detail

**Current.** `/ohlief/orders/:id`. Read-only line fields, editable invoice quantity, live total, Save via `PUT /ohlief/:id`, Cancel back to home.

Source: `src/containers/OrderDetail.js`.

### Invoices tab and invoice row

**Current.** `GET /listinvoices`. VIEW opens `/ohlief/invoices/:id`. Read-only. Heading `Invoice: I{orderNumber} - Row Details`. Cancel only.

Source: `src/containers/Home.js`, `src/containers/InvoiceDetail.js`. The default export in that file is named `OrderDetail`.

### Products tab

**Current.** `GET /listProducts`. Create Product button. VIEW opens the edit form.

Source: `src/containers/Home.js`.

### Create product

**Current.** `/ohlief/newproduct`. `POST /createProduct`. Barcode required to enable Save.

Source: `src/containers/NewProduct.js`. The default export is named `NewOrder`.

### Edit product

**Current.** `/ohlief/products/:id`. `GET /getproduct/:id`, `PUT /updateProduct/:id`. Barcode required.

Source: `src/containers/ProductDetail.js`. The default export is named `InvoiceDetail`.

### Not-found page

**Current.** Catch-all route. "Sorry, page not found!"

Source: `src/containers/NotFound.js`.

## Partial

### Signup

**Partial.** `/signup` is routed and the first form calls `Auth.signUp`. The confirmation step is never rendered. The route requires a session, and the navbar does not link here. Commit `b8b9d6e` (2020-03-17) subject: "Home update signup hidden".

Source: `src/containers/Signup.js`, `src/Routes.js`.

### Order save

**Partial.** The button is on the order screen and the PUT includes `invoiceQty`, but it stays disabled unless the API line has a non-empty `content` field. A file-size check and S3 upload remain in the submit handler. The file input is commented out, so that branch does not run from the UI.

Source: `src/containers/OrderDetail.js`.

### PWA manifest

**Partial.** `public/manifest.json` names the app and lists icons. `src/index.js` calls `serviceWorker.unregister()`. `manifest.json` points at `logo512.png`, which is not in `public/`. `index.html` points at `apple-touch-icon.png` and `safari-pinned-tab.svg`, which are not in `public/`.

### Currency display

**Partial / inconsistent.** Home tables prefix prices and totals with `€ `. Order and invoice detail totals have no currency sign. `Notes.js` and `Orders.js` hardcode `R48.00`. Commit `21ed1fc` (2020-03-18) subject: "Added hard coded rand abbreviation to monetary values". Later table commits introduce `€` (`git log -S "€"` includes `fe52e72` and earlier table commits). Which symbol is intended is **Unknown / Requires Confirmation**.

### Create Product button

**Current** at HEAD. Commit `d79d6af` (2020-04-03) subject says the add-product button was removed. `98891e4` and the Products tab put **Create Product** back. Treat the button as current, and the April subject as history.

## Leftover — note starter

These files follow the AWS notes tutorial (content textarea, attachment, `noteId`). They are not linked from the home tabs.

| Screen | Route | State at HEAD |
|---|---|---|
| `NewNote.js` | `/ohlief/new` | **Leftover, still routed.** Textarea, file input, `POST /ohlief`, 5 MB cap |
| `Notes.js` | `/ohlief/:id` | **Leftover, still routed** for a single path segment. Load is commented out. Fixed sample values. Button label Back runs delete |
| `Processed.js` | `/ohlief/old` declared after `/ohlief/:id` | **Unreachable** through the switch. `id` captures `old` first. Would have listed `GET /ohlief` as "Processed Orders" |
| `NewOrder.js` | not imported | **Unreachable.** Same note-create form as `NewNote.js`, posting `{ content, attachment }` |
| `Orders.js` | not imported | **Unreachable.** Older detail form with the same hardcoded `R48.00` line |

`/ohlief/orders/:id`, `/ohlief/invoices/:id`, and `/ohlief/products/:id` are longer than `/ohlief/:id` with `exact`, so those three screens stay reachable.

## Removed or no longer what the commit subject described

| Item | Evidence |
|---|---|
| Store and product truncated to 30 characters | Commit `d330c90` (2020-03-19) subject. No `substring(0, 30)` in `src/` at HEAD |
| Rand abbreviation on the live tables | Commit `21ed1fc`. Live tables use `€` |
| Add-product button absent | Commit `d79d6af`. Button is present at HEAD |
| Debug tab | Commented out in `Home.js` (eventKey 4) |
| Decline button on the note/order forms | Commented out in `Notes.js` and `OrderDetail.js` |

## Not in this repository

- An EDI parser, FTP client, or invoice PDF.
- A backend, database schema, or user-admin screen.
- Forgot-password, MFA, or role-based menus.
- Tests that describe Oh-lief. `src/App.test.js` still looks for the text "learn react", which the UI does not render.

## Recently changed

The newest commit is `98891e4` (2020-07-05), "Update the major screen product screen", author Jaco Brits. The product list, create form, and edit form are the last area the history touches. Nothing in git is newer than that date.
