# Features — unity-framework

Evidence date: 2026-09-30. Revision: `master` `c72613b` (2021-02-13).

Status words: **Current** (present and wired), **Partial** (screen or path exists but is incomplete), **Unused** (code or config present, no call from the running app), **Template** (Fuse demo still registered; data is the axios mock).

No feature roadmap file exists in the repository. "Planned" is not used below unless a comment shows an unfinished path. Those paths are marked **Partial** or **Unused**, not as an approved backlog.

## Current

### App shell

- Fuse layout 1 by default (`src/app/fuse-configs/settingsConfig.js`): navbar, toolbar, and footer follow layout 1 defaults; `customScrollbars: false`; themes `default`, `mainThemeDark`, `mainThemeLight`.
- Logo wordmark "UNITY" (`src/app/fuse-layouts/shared-components/Logo.js`). Login wordmark "UNITY" / "REACTJS" and heading "Welcome to Unity Framework" (`src/app/main/login/Login.js`).
- Browser title "Unity - Custom , Secure framework" (`public/index.html`).
- Splash screen while `jwtService.init()` is in flight (`src/app/auth/Auth.js`).
- Lazy route components for the user app (`React.lazy` in `UsersAppConfig.js`).
- `/` redirects to `/login`. Unmatched paths redirect to `/pages/errors/error-404` (`src/app/fuse-configs/routesConfig.js`).
- Redux Toolkit store. No redux-persist. The only persisted auth artefact is `localStorage.jwt_access_token`.

### Authentication

- Login `/login` — Cognito `Auth.signIn`, required fields, minimum length 4 (`src/app/main/login/tabs/JWTLoginTab.js`, `src/app/services/jwtService/jwtService.js`). The form `value` props contain a username and password literal; values omitted.
- After sign-in, GET `/unity/uuid/{cognitoUsername}` and role `superuser` (`jwtService.js` `buildUser`).
- Redirect target after `setUserData`: `/apps/dashboards/analytics` (`src/app/auth/store/userSlice.js`).
- Guest-only auth on `/login` and `/register` (`LoginConfig.js`, `RegisterConfig.js`).

### User management list

Location: `src/app/main/apps/users`.

- Route `/apps/users` redirects to `/apps/users/all`. `/apps/users/:id` renders `UsersApp`.
- Navigation item id `user-management`, title "User Management", url `/apps/users` (`navigationConfig.js`). English bundle key `USERMANAGEMENT` (`navigation-i18n/en.js`).
- List load: POST `/unity/getusers/1` (`store/usersSlice.js`, `src/app/helper/unityRequests.js`).
- Columns: avatar, First Name (`strUser`), Job Title (`strJobTitle`), Email (`strEmail`), User Created (`strLastUser`) (`UsersList.js`).
- Client-side search (`UsersHeader.js`, `setUsersSearchText`).
- Signed-in user's display name on the sidebar from `getUserData` → GET `/unity/uuid/{username}` (`UsersSidebarContent.js`, `store/userSlice.js`).

History: user-management commits from `f7f5889` (2021-01-09) through `c72613b` (2021-02-13).

### User profile read

- Edit icon navigates to `/apps/users/profile/{UserID}` with `location.data` set to that id (`UsersList.js`).
- `getUserById` GET `/unity/getuser/{userId}` (`store/userSlice.js`).
- Tabs rendered: Details, Access Control, Custom (`UserProfilePage.js`).

## Partial

### Profile details form

`src/app/main/apps/users/tabs/DetailsTab.js`.

- Fields are on screen: Name, Last name, Nickname, Phone, Email, Company, Job title, Birthday, Address, Notes.
- The effect that copies `editUser` into the form is commented out. The Name input displays `form.name` while its `name` attribute is `strUser`.
- Save and Deactivate both dispatch `updateUser` to POST `/api/users-app/update-user` (mock). Deactivate is not a distinct call.
- Header text uses `editUser.strUsr`, which is a different field name from the list's `strUser`.

### Access control

`tabs/AccessControlTab.js` and `tabs/SecurityListItem.js`.

- One row per child of `src/app/fuse-configs/appConfig.js` (not the live `navigationConfig.js` tree).
- Checkboxes View, Add, Edit, Delete start checked.
- `parentPermission` is empty. Nothing is posted when a box changes.
- Commented initial state would have read `strPermissions`.

`SecurityDialog.js` plus `src/app/main/apps/users/SecurityListItem.js` are a second copy. The dialog reads `user.permissions[...]`. The list's open-dialog handler is commented out (`UsersList.js`). `SecurityDialog.js` imports `getState` from `store/usersSlice.js`, and that slice does not export `getState`.

### New / edit user dialog

`UserDialog.js`.

- "New User" opens the dialog. Submit requires `form.name.length > 0` and posts to the mock (`addUser` / `updateUser`).
- The list does not open the edit dialog (row click handler is empty).
- After a mock write, `getUsers()` reloads from the `unity` API, so the dialog's user is not what the list then shows unless the API happens to return it.

### Register

`/register` → `jwtService.createUser` → mock POST `/api/auth/register`. Does not create a Cognito user. Mock role is `admin` (`src/@fake-db/db/auth-db.js`).

### Session restore and logout

- Reload with a Cognito access token calls GET `/api/auth/access-token`, which verifies a mock JWT (`auth-db.js`). A Cognito token fails that check and the client clears the session (`jwtService.signInWithToken`).
- `/logout` requires `authRoles.user` (`admin`, `staff`, `user`). The Cognito path sets `superuser`, which is not in that list (`LogoutConfig.js`). `jwtService.logout` does not call `Auth.signOut()`.

### Custom tab

`tabs/CustomTab.js` mounts Fuse settings and theme scheme pickers. Its `handleSubmit` is not wired to those controls.

## Template (still routed)

Registered in `src/app/main/apps/appsConfigs.js` and `navigationConfig.js`, backed by `src/@fake-db`:

- Analytics dashboard `/apps/dashboards/analytics`
- Project dashboard `/apps/dashboards/project`
- Calendar `/apps/calendar`
- E-commerce products and orders `/apps/e-commerce`
- Academy `/apps/academy`
- Mail `/apps/mail`
- To-do `/apps/todo`
- File manager `/apps/file-manager`
- Contacts `/apps/contacts/all`
- Chat `/apps/chat`
- Scrumboard `/apps/scrumboard`
- Notes `/apps/notes`
- Pages group: alternate login/register/forgot/reset/lock/mail-confirm screens, coming soon, 404, 500, invoices, maintenance, pricing, profile, search, FAQ, knowledge base
- Documentation and UI component demos (`DocumentationConfig`, `UserInterfaceConfig`)
- Auth role example pages (`authRoleExamplesConfigs`)

These are the Fuse React demo set that arrived with the first commit (`8064741`, 2021-01-08) and were not removed. Whether any of them is a product feature is **Unknown / Requires Confirmation**.

## Unused

- Amplify Storage and `MAX_ATTACHMENT_SIZE` (`src/config.js`). No `Storage.` call under `src` outside the config object.
- `postData` in `jwtService.js` (POST `/unity/getusers` with an id token). Nothing calls it. The live list uses `unityRequests` and the path `/unity/getusers/1`.
- `buildUser` inside `usersSlice.js`. The list stores the parsed API body directly and does not call this function. `buildUser_old` in `jwtService.js` is also uncalled.
- `src/app/main/apps/users/login/` (`Login.js`, `LoginConfig.js`, JWT/Firebase/Auth0 tabs). Added in `e50c0b8` (2021-01-31). No route config imports it.
- `src/app/main/apps/users/store/navigationSlice.js`. The shell uses `src/app/store/fuse/navigationSlice.js`. The users store `index.js` does not combine this slice.
- Firebase and Auth0 services. Config values are commented placeholders. `Auth.js` comments out `firebaseCheck` and `auth0Check`. Login tabs for them are commented out; `selectedTab` never leaves `0`.
- `src/app/main/pages/profile` (Fuse profile). The Unity profile is `UserProfilePage` under the users app. Both can be routed: `/pages/profile` is still in the nav.
- Root `nav.json` (empty file).
- Star, frequent, and group filters in `UsersSidebarContent.js` (commented). `toggleStarredUser` and related thunks remain and post to the mock.
- Service worker registration (`serviceWorker.unregister()`).

## Removed / commented

- Login provider tabs (JWT / Firebase / Auth0) in `Login.js`, commit trail "Cleaning up Auth" (`45423c9`, 2021-01-25) and later Cognito commits.
- Sidebar links "All Users", "Frequently Usered", "Starred Users".
- List star icon and security icon (`UsersList.js`).
- `ade4726` (2021-01-22) message is "remove icons". The diff file list for that commit was empty in `--name-only` output; what was removed is **Unknown** beyond the message.

## Not in this revision

- No Sonar project file or `sonarqube_scan.bat` in `c72613b`, despite the 2026-09-28 scan-host file list.
- No test files.
- No deployment feature (no pipeline, Docker, or hosting config).
