From 10f0fead521af42621b4a5f282d3b2c4e79faa08 Mon Sep 17 00:00:00 2001
From: Gevorg Harutyunyan <gevharut@gmail.com>
Date: Sat, 17 Aug 2019 02:09:02 +0400
Subject: [PATCH 1/5] Rename directories

---
 .../Accounts/AccountsEditor/.gitkeep             |  0
 .../Accounts/AccountsList/.gitkeep               |  0
 .../Administration.tsx                           |  0
 .../AdministrationDocs.md                        |  0
 .../Users/UsersEditor/.gitkeep                   |  0
 .../Users/UsersList/.gitkeep                     |  0
 .../index.tsx                                    |  0
 src/AppRouter.tsx                                | 16 ++++++++--------
 src/{Auth => AuthModule}/Auth.tsx                |  0
 src/{Auth => AuthModule}/AuthDocs.md             |  0
 src/{Auth => AuthModule}/Login/Login.tsx         |  0
 src/{Auth => AuthModule}/Recover/Recover.tsx     |  0
 src/{Auth => AuthModule}/Reset/Reset.tsx         |  0
 src/{Auth => AuthModule}/Signup/Signup.tsx       |  0
 src/{Auth => AuthModule}/index.tsx               |  0
 .../CategoriesEditor/.gitkeep                    |  0
 .../CategoriesList/.gitkeep                      |  0
 src/{Content => ContentModule}/Content.tsx       |  0
 src/{Content => ContentModule}/ContentDocs.md    |  0
 .../ItemsEditor/.gitkeep                         |  0
 .../ItemsList/.gitkeep                           |  0
 .../_api/_data/itemsCategoriesData.js            |  0
 .../_api/_data/itemsData.js                      |  0
 .../_api/_data/itemsItemsCategoriesData.js       |  0
 .../_api/_mocks/.gitkeep                         |  0
 .../_api/itemsCategoriesService.tsx              |  0
 .../_api/itemsService.tsx                        |  0
 src/{Content => ContentModule}/_types/Item.tsx   |  0
 .../_types/ItemCategory.tsx                      |  0
 src/{Content => ContentModule}/index.tsx         |  0
 .../Components/Components.tsx                    |  0
 src/{Demo => DemoModule}/Components/index.tsx    |  0
 src/{Demo => DemoModule}/Demo.tsx                |  0
 src/{Demo => DemoModule}/DemoDocs.md             |  0
 src/{Demo => DemoModule}/Discuss/Discuss.tsx     |  0
 src/{Demo => DemoModule}/Discuss/index.tsx       |  0
 src/{Demo => DemoModule}/Docs/Docs.tsx           |  0
 src/{Demo => DemoModule}/Docs/index.tsx          |  0
 src/{Demo => DemoModule}/Features/Features.tsx   |  0
 src/{Demo => DemoModule}/Features/index.tsx      |  0
 .../Supporters/Supporters.tsx                    |  0
 src/{Demo => DemoModule}/Supporters/index.tsx    |  0
 src/{Demo => DemoModule}/index.tsx               |  0
 src/{Misc => MiscModule}/NotFound/NotFound.tsx   |  0
 .../NotFound/NotFoundDocs.md                     |  0
 src/{Misc => MiscModule}/NotFound/index.tsx      |  0
 .../Account.tsx                                  |  0
 .../AccountDocs.md                               |  0
 .../Preview/.gitkeep                             |  0
 .../Settings/.gitkeep                            |  0
 .../Users/UsersEditor/.gitkeep                   |  0
 .../Users/UsersList/.gitkeep                     |  0
 .../index.tsx                                    |  0
 src/{Profile => ProfileModule}/Preview/.gitkeep  |  0
 src/{Profile => ProfileModule}/Profile.tsx       |  0
 src/{Profile => ProfileModule}/ProfileDocs.md    |  0
 src/{Profile => ProfileModule}/Settings/.gitkeep |  0
 src/{Profile => ProfileModule}/index.tsx         |  0
 .../Customers/Customers.tsx                      |  0
 .../Customers/CustomersEditor/.gitkeep           |  0
 .../Customers/CustomersList/.gitkeep             |  0
 src/{Sales => SalesModule}/Customers/index.tsx   |  0
 src/{Sales => SalesModule}/Locations/.gitkeep    |  0
 src/{Sales => SalesModule}/Orders/Orders.tsx     |  0
 .../Orders/OrdersEditor/.gitkeep                 |  0
 .../Orders/OrdersList/.gitkeep                   |  0
 src/{Sales => SalesModule}/Orders/index.tsx      |  0
 .../Overview/OrdersHistory/OrdersHistory.tsx     |  0
 .../Overview/OrdersHistory/index.tsx             |  0
 .../OrdersHistory/ordersHistoryService.ts        |  0
 .../Overview/OrdersLatest/OrdersLatest.tsx       |  0
 .../Overview/OrdersLatest/index.tsx              |  0
 src/{Sales => SalesModule}/Overview/Overview.tsx |  0
 .../Overview/OverviewActions.tsx                 |  0
 src/{Sales => SalesModule}/Overview/index.tsx    |  0
 .../Overview/overviewContext.ts                  |  0
 src/{Sales => SalesModule}/Payments/Payments.tsx |  0
 .../Products/ProductsCategoriesEditor/.gitkeep   |  0
 .../Products/ProductsCategoriesList/.gitkeep     |  0
 .../Products/ProductsEditor/.gitkeep             |  0
 .../Products/ProductsList/.gitkeep               |  0
 src/{Sales => SalesModule}/Sales.tsx             |  0
 src/{Sales => SalesModule}/SalesDocs.md          |  0
 src/{Sales => SalesModule}/SalesService.tsx      |  0
 src/{Sales => SalesModule}/Stock/Stock.tsx       |  0
 src/{Sales => SalesModule}/Stores/Stores.tsx     |  0
 .../_api/_data/categoriesData.ts                 |  0
 .../_api/_data/customersData.ts                  |  0
 .../_api/_data/locationsData.ts                  |  0
 .../_api/_data/ordersData.ts                     |  0
 .../_api/_data/paymentsData.ts                   |  0
 .../_api/_data/productsData.ts                   |  0
 .../_api/_data/productsRelCategoriesData.ts      |  0
 .../_api/_data/stockActionsData.ts               |  0
 .../_api/_data/stocksData.ts                     |  0
 src/{Sales => SalesModule}/_api/_mocks/index.ts  |  0
 .../_api/_mocks/ordersMocks.ts                   |  0
 src/{Sales => SalesModule}/_api/customers.ts     |  0
 src/{Sales => SalesModule}/_api/index.ts         |  0
 src/{Sales => SalesModule}/_api/orders.ts        |  0
 src/{Sales => SalesModule}/_api/products.ts      |  0
 .../_api/productsCategories.ts                   |  0
 src/{Sales => SalesModule}/_services/.gitkeep    |  0
 src/{Sales => SalesModule}/_types/Customer.ts    |  0
 src/{Sales => SalesModule}/_types/EntityOwned.ts |  0
 src/{Sales => SalesModule}/_types/Location.ts    |  0
 src/{Sales => SalesModule}/_types/Order.ts       |  0
 src/{Sales => SalesModule}/_types/Payment.ts     |  0
 src/{Sales => SalesModule}/_types/Product.ts     |  0
 .../_types/ProductAttachment.ts                  |  0
 .../_types/ProductCategory.ts                    |  0
 .../_types/ProductImage.ts                       |  0
 .../_types/ProductToProductCategory.ts           |  0
 src/{Sales => SalesModule}/_types/Stock.ts       |  0
 src/{Sales => SalesModule}/_types/StockAction.ts |  0
 src/{Sales => SalesModule}/index.tsx             |  0
 src/{Services => ServicesModule}/ServicesDocs.md |  0
 src/_api/index.ts                                |  2 +-
 118 files changed, 9 insertions(+), 9 deletions(-)
 rename src/{Administration => AdministrationModule}/Accounts/AccountsEditor/.gitkeep (100%)
 rename src/{Administration => AdministrationModule}/Accounts/AccountsList/.gitkeep (100%)
 rename src/{Administration => AdministrationModule}/Administration.tsx (100%)
 rename src/{Administration => AdministrationModule}/AdministrationDocs.md (100%)
 rename src/{Administration => AdministrationModule}/Users/UsersEditor/.gitkeep (100%)
 rename src/{Administration => AdministrationModule}/Users/UsersList/.gitkeep (100%)
 rename src/{Administration => AdministrationModule}/index.tsx (100%)
 rename src/{Auth => AuthModule}/Auth.tsx (100%)
 rename src/{Auth => AuthModule}/AuthDocs.md (100%)
 rename src/{Auth => AuthModule}/Login/Login.tsx (100%)
 rename src/{Auth => AuthModule}/Recover/Recover.tsx (100%)
 rename src/{Auth => AuthModule}/Reset/Reset.tsx (100%)
 rename src/{Auth => AuthModule}/Signup/Signup.tsx (100%)
 rename src/{Auth => AuthModule}/index.tsx (100%)
 rename src/{Content => ContentModule}/CategoriesEditor/.gitkeep (100%)
 rename src/{Content => ContentModule}/CategoriesList/.gitkeep (100%)
 rename src/{Content => ContentModule}/Content.tsx (100%)
 rename src/{Content => ContentModule}/ContentDocs.md (100%)
 rename src/{Content => ContentModule}/ItemsEditor/.gitkeep (100%)
 rename src/{Content => ContentModule}/ItemsList/.gitkeep (100%)
 rename src/{Content => ContentModule}/_api/_data/itemsCategoriesData.js (100%)
 rename src/{Content => ContentModule}/_api/_data/itemsData.js (100%)
 rename src/{Content => ContentModule}/_api/_data/itemsItemsCategoriesData.js (100%)
 rename src/{Content => ContentModule}/_api/_mocks/.gitkeep (100%)
 rename src/{Content => ContentModule}/_api/itemsCategoriesService.tsx (100%)
 rename src/{Content => ContentModule}/_api/itemsService.tsx (100%)
 rename src/{Content => ContentModule}/_types/Item.tsx (100%)
 rename src/{Content => ContentModule}/_types/ItemCategory.tsx (100%)
 rename src/{Content => ContentModule}/index.tsx (100%)
 rename src/{Demo => DemoModule}/Components/Components.tsx (100%)
 rename src/{Demo => DemoModule}/Components/index.tsx (100%)
 rename src/{Demo => DemoModule}/Demo.tsx (100%)
 rename src/{Demo => DemoModule}/DemoDocs.md (100%)
 rename src/{Demo => DemoModule}/Discuss/Discuss.tsx (100%)
 rename src/{Demo => DemoModule}/Discuss/index.tsx (100%)
 rename src/{Demo => DemoModule}/Docs/Docs.tsx (100%)
 rename src/{Demo => DemoModule}/Docs/index.tsx (100%)
 rename src/{Demo => DemoModule}/Features/Features.tsx (100%)
 rename src/{Demo => DemoModule}/Features/index.tsx (100%)
 rename src/{Demo => DemoModule}/Supporters/Supporters.tsx (100%)
 rename src/{Demo => DemoModule}/Supporters/index.tsx (100%)
 rename src/{Demo => DemoModule}/index.tsx (100%)
 rename src/{Misc => MiscModule}/NotFound/NotFound.tsx (100%)
 rename src/{Misc => MiscModule}/NotFound/NotFoundDocs.md (100%)
 rename src/{Misc => MiscModule}/NotFound/index.tsx (100%)
 rename src/{Organization => OrganizationModule}/Account.tsx (100%)
 rename src/{Organization => OrganizationModule}/AccountDocs.md (100%)
 rename src/{Organization => OrganizationModule}/Preview/.gitkeep (100%)
 rename src/{Organization => OrganizationModule}/Settings/.gitkeep (100%)
 rename src/{Organization => OrganizationModule}/Users/UsersEditor/.gitkeep (100%)
 rename src/{Organization => OrganizationModule}/Users/UsersList/.gitkeep (100%)
 rename src/{Organization => OrganizationModule}/index.tsx (100%)
 rename src/{Profile => ProfileModule}/Preview/.gitkeep (100%)
 rename src/{Profile => ProfileModule}/Profile.tsx (100%)
 rename src/{Profile => ProfileModule}/ProfileDocs.md (100%)
 rename src/{Profile => ProfileModule}/Settings/.gitkeep (100%)
 rename src/{Profile => ProfileModule}/index.tsx (100%)
 rename src/{Sales => SalesModule}/Customers/Customers.tsx (100%)
 rename src/{Sales => SalesModule}/Customers/CustomersEditor/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Customers/CustomersList/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Customers/index.tsx (100%)
 rename src/{Sales => SalesModule}/Locations/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Orders/Orders.tsx (100%)
 rename src/{Sales => SalesModule}/Orders/OrdersEditor/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Orders/OrdersList/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Orders/index.tsx (100%)
 rename src/{Sales => SalesModule}/Overview/OrdersHistory/OrdersHistory.tsx (100%)
 rename src/{Sales => SalesModule}/Overview/OrdersHistory/index.tsx (100%)
 rename src/{Sales => SalesModule}/Overview/OrdersHistory/ordersHistoryService.ts (100%)
 rename src/{Sales => SalesModule}/Overview/OrdersLatest/OrdersLatest.tsx (100%)
 rename src/{Sales => SalesModule}/Overview/OrdersLatest/index.tsx (100%)
 rename src/{Sales => SalesModule}/Overview/Overview.tsx (100%)
 rename src/{Sales => SalesModule}/Overview/OverviewActions.tsx (100%)
 rename src/{Sales => SalesModule}/Overview/index.tsx (100%)
 rename src/{Sales => SalesModule}/Overview/overviewContext.ts (100%)
 rename src/{Sales => SalesModule}/Payments/Payments.tsx (100%)
 rename src/{Sales => SalesModule}/Products/ProductsCategoriesEditor/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Products/ProductsCategoriesList/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Products/ProductsEditor/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Products/ProductsList/.gitkeep (100%)
 rename src/{Sales => SalesModule}/Sales.tsx (100%)
 rename src/{Sales => SalesModule}/SalesDocs.md (100%)
 rename src/{Sales => SalesModule}/SalesService.tsx (100%)
 rename src/{Sales => SalesModule}/Stock/Stock.tsx (100%)
 rename src/{Sales => SalesModule}/Stores/Stores.tsx (100%)
 rename src/{Sales => SalesModule}/_api/_data/categoriesData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_data/customersData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_data/locationsData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_data/ordersData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_data/paymentsData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_data/productsData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_data/productsRelCategoriesData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_data/stockActionsData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_data/stocksData.ts (100%)
 rename src/{Sales => SalesModule}/_api/_mocks/index.ts (100%)
 rename src/{Sales => SalesModule}/_api/_mocks/ordersMocks.ts (100%)
 rename src/{Sales => SalesModule}/_api/customers.ts (100%)
 rename src/{Sales => SalesModule}/_api/index.ts (100%)
 rename src/{Sales => SalesModule}/_api/orders.ts (100%)
 rename src/{Sales => SalesModule}/_api/products.ts (100%)
 rename src/{Sales => SalesModule}/_api/productsCategories.ts (100%)
 rename src/{Sales => SalesModule}/_services/.gitkeep (100%)
 rename src/{Sales => SalesModule}/_types/Customer.ts (100%)
 rename src/{Sales => SalesModule}/_types/EntityOwned.ts (100%)
 rename src/{Sales => SalesModule}/_types/Location.ts (100%)
 rename src/{Sales => SalesModule}/_types/Order.ts (100%)
 rename src/{Sales => SalesModule}/_types/Payment.ts (100%)
 rename src/{Sales => SalesModule}/_types/Product.ts (100%)
 rename src/{Sales => SalesModule}/_types/ProductAttachment.ts (100%)
 rename src/{Sales => SalesModule}/_types/ProductCategory.ts (100%)
 rename src/{Sales => SalesModule}/_types/ProductImage.ts (100%)
 rename src/{Sales => SalesModule}/_types/ProductToProductCategory.ts (100%)
 rename src/{Sales => SalesModule}/_types/Stock.ts (100%)
 rename src/{Sales => SalesModule}/_types/StockAction.ts (100%)
 rename src/{Sales => SalesModule}/index.tsx (100%)
 rename src/{Services => ServicesModule}/ServicesDocs.md (100%)

diff --git a/src/Administration/Accounts/AccountsEditor/.gitkeep b/src/AdministrationModule/Accounts/AccountsEditor/.gitkeep
similarity index 100%
rename from src/Administration/Accounts/AccountsEditor/.gitkeep
rename to src/AdministrationModule/Accounts/AccountsEditor/.gitkeep
diff --git a/src/Administration/Accounts/AccountsList/.gitkeep b/src/AdministrationModule/Accounts/AccountsList/.gitkeep
similarity index 100%
rename from src/Administration/Accounts/AccountsList/.gitkeep
rename to src/AdministrationModule/Accounts/AccountsList/.gitkeep
diff --git a/src/Administration/Administration.tsx b/src/AdministrationModule/Administration.tsx
similarity index 100%
rename from src/Administration/Administration.tsx
rename to src/AdministrationModule/Administration.tsx
diff --git a/src/Administration/AdministrationDocs.md b/src/AdministrationModule/AdministrationDocs.md
similarity index 100%
rename from src/Administration/AdministrationDocs.md
rename to src/AdministrationModule/AdministrationDocs.md
diff --git a/src/Administration/Users/UsersEditor/.gitkeep b/src/AdministrationModule/Users/UsersEditor/.gitkeep
similarity index 100%
rename from src/Administration/Users/UsersEditor/.gitkeep
rename to src/AdministrationModule/Users/UsersEditor/.gitkeep
diff --git a/src/Administration/Users/UsersList/.gitkeep b/src/AdministrationModule/Users/UsersList/.gitkeep
similarity index 100%
rename from src/Administration/Users/UsersList/.gitkeep
rename to src/AdministrationModule/Users/UsersList/.gitkeep
diff --git a/src/Administration/index.tsx b/src/AdministrationModule/index.tsx
similarity index 100%
rename from src/Administration/index.tsx
rename to src/AdministrationModule/index.tsx
diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx
index a6f27ce..41db6d4 100644
--- a/src/AppRouter.tsx
+++ b/src/AppRouter.tsx
@@ -14,18 +14,18 @@ import authService from './_services/authService'
 import { useAppState, useAppStateMethods } from './_state/appState'
 
 // Import application modules
-import Sales from './Sales'
-import Content from './Content'
-import Admin from './Administration'
+import Sales from './SalesModule'
+import Content from './ContentModule'
+import Admin from './AdministrationModule'
 
 // Import core modules
-import Auth from './Auth/Auth'
-import Profile from './Profile'
-import Organization from './Organization'
-import NotFound from './Misc/NotFound'
+import Auth from './AuthModule/Auth'
+import Profile from './ProfileModule'
+import Organization from './OrganizationModule'
+import NotFound from './MiscModule/NotFound'
 
 // Theme demo module
-import Demo from './Demo'
+import Demo from './DemoModule'
 
 const LoggedInRouter = () => {
   const { loading, error } = useAppState()
diff --git a/src/Auth/Auth.tsx b/src/AuthModule/Auth.tsx
similarity index 100%
rename from src/Auth/Auth.tsx
rename to src/AuthModule/Auth.tsx
diff --git a/src/Auth/AuthDocs.md b/src/AuthModule/AuthDocs.md
similarity index 100%
rename from src/Auth/AuthDocs.md
rename to src/AuthModule/AuthDocs.md
diff --git a/src/Auth/Login/Login.tsx b/src/AuthModule/Login/Login.tsx
similarity index 100%
rename from src/Auth/Login/Login.tsx
rename to src/AuthModule/Login/Login.tsx
diff --git a/src/Auth/Recover/Recover.tsx b/src/AuthModule/Recover/Recover.tsx
similarity index 100%
rename from src/Auth/Recover/Recover.tsx
rename to src/AuthModule/Recover/Recover.tsx
diff --git a/src/Auth/Reset/Reset.tsx b/src/AuthModule/Reset/Reset.tsx
similarity index 100%
rename from src/Auth/Reset/Reset.tsx
rename to src/AuthModule/Reset/Reset.tsx
diff --git a/src/Auth/Signup/Signup.tsx b/src/AuthModule/Signup/Signup.tsx
similarity index 100%
rename from src/Auth/Signup/Signup.tsx
rename to src/AuthModule/Signup/Signup.tsx
diff --git a/src/Auth/index.tsx b/src/AuthModule/index.tsx
similarity index 100%
rename from src/Auth/index.tsx
rename to src/AuthModule/index.tsx
diff --git a/src/Content/CategoriesEditor/.gitkeep b/src/ContentModule/CategoriesEditor/.gitkeep
similarity index 100%
rename from src/Content/CategoriesEditor/.gitkeep
rename to src/ContentModule/CategoriesEditor/.gitkeep
diff --git a/src/Content/CategoriesList/.gitkeep b/src/ContentModule/CategoriesList/.gitkeep
similarity index 100%
rename from src/Content/CategoriesList/.gitkeep
rename to src/ContentModule/CategoriesList/.gitkeep
diff --git a/src/Content/Content.tsx b/src/ContentModule/Content.tsx
similarity index 100%
rename from src/Content/Content.tsx
rename to src/ContentModule/Content.tsx
diff --git a/src/Content/ContentDocs.md b/src/ContentModule/ContentDocs.md
similarity index 100%
rename from src/Content/ContentDocs.md
rename to src/ContentModule/ContentDocs.md
diff --git a/src/Content/ItemsEditor/.gitkeep b/src/ContentModule/ItemsEditor/.gitkeep
similarity index 100%
rename from src/Content/ItemsEditor/.gitkeep
rename to src/ContentModule/ItemsEditor/.gitkeep
diff --git a/src/Content/ItemsList/.gitkeep b/src/ContentModule/ItemsList/.gitkeep
similarity index 100%
rename from src/Content/ItemsList/.gitkeep
rename to src/ContentModule/ItemsList/.gitkeep
diff --git a/src/Content/_api/_data/itemsCategoriesData.js b/src/ContentModule/_api/_data/itemsCategoriesData.js
similarity index 100%
rename from src/Content/_api/_data/itemsCategoriesData.js
rename to src/ContentModule/_api/_data/itemsCategoriesData.js
diff --git a/src/Content/_api/_data/itemsData.js b/src/ContentModule/_api/_data/itemsData.js
similarity index 100%
rename from src/Content/_api/_data/itemsData.js
rename to src/ContentModule/_api/_data/itemsData.js
diff --git a/src/Content/_api/_data/itemsItemsCategoriesData.js b/src/ContentModule/_api/_data/itemsItemsCategoriesData.js
similarity index 100%
rename from src/Content/_api/_data/itemsItemsCategoriesData.js
rename to src/ContentModule/_api/_data/itemsItemsCategoriesData.js
diff --git a/src/Content/_api/_mocks/.gitkeep b/src/ContentModule/_api/_mocks/.gitkeep
similarity index 100%
rename from src/Content/_api/_mocks/.gitkeep
rename to src/ContentModule/_api/_mocks/.gitkeep
diff --git a/src/Content/_api/itemsCategoriesService.tsx b/src/ContentModule/_api/itemsCategoriesService.tsx
similarity index 100%
rename from src/Content/_api/itemsCategoriesService.tsx
rename to src/ContentModule/_api/itemsCategoriesService.tsx
diff --git a/src/Content/_api/itemsService.tsx b/src/ContentModule/_api/itemsService.tsx
similarity index 100%
rename from src/Content/_api/itemsService.tsx
rename to src/ContentModule/_api/itemsService.tsx
diff --git a/src/Content/_types/Item.tsx b/src/ContentModule/_types/Item.tsx
similarity index 100%
rename from src/Content/_types/Item.tsx
rename to src/ContentModule/_types/Item.tsx
diff --git a/src/Content/_types/ItemCategory.tsx b/src/ContentModule/_types/ItemCategory.tsx
similarity index 100%
rename from src/Content/_types/ItemCategory.tsx
rename to src/ContentModule/_types/ItemCategory.tsx
diff --git a/src/Content/index.tsx b/src/ContentModule/index.tsx
similarity index 100%
rename from src/Content/index.tsx
rename to src/ContentModule/index.tsx
diff --git a/src/Demo/Components/Components.tsx b/src/DemoModule/Components/Components.tsx
similarity index 100%
rename from src/Demo/Components/Components.tsx
rename to src/DemoModule/Components/Components.tsx
diff --git a/src/Demo/Components/index.tsx b/src/DemoModule/Components/index.tsx
similarity index 100%
rename from src/Demo/Components/index.tsx
rename to src/DemoModule/Components/index.tsx
diff --git a/src/Demo/Demo.tsx b/src/DemoModule/Demo.tsx
similarity index 100%
rename from src/Demo/Demo.tsx
rename to src/DemoModule/Demo.tsx
diff --git a/src/Demo/DemoDocs.md b/src/DemoModule/DemoDocs.md
similarity index 100%
rename from src/Demo/DemoDocs.md
rename to src/DemoModule/DemoDocs.md
diff --git a/src/Demo/Discuss/Discuss.tsx b/src/DemoModule/Discuss/Discuss.tsx
similarity index 100%
rename from src/Demo/Discuss/Discuss.tsx
rename to src/DemoModule/Discuss/Discuss.tsx
diff --git a/src/Demo/Discuss/index.tsx b/src/DemoModule/Discuss/index.tsx
similarity index 100%
rename from src/Demo/Discuss/index.tsx
rename to src/DemoModule/Discuss/index.tsx
diff --git a/src/Demo/Docs/Docs.tsx b/src/DemoModule/Docs/Docs.tsx
similarity index 100%
rename from src/Demo/Docs/Docs.tsx
rename to src/DemoModule/Docs/Docs.tsx
diff --git a/src/Demo/Docs/index.tsx b/src/DemoModule/Docs/index.tsx
similarity index 100%
rename from src/Demo/Docs/index.tsx
rename to src/DemoModule/Docs/index.tsx
diff --git a/src/Demo/Features/Features.tsx b/src/DemoModule/Features/Features.tsx
similarity index 100%
rename from src/Demo/Features/Features.tsx
rename to src/DemoModule/Features/Features.tsx
diff --git a/src/Demo/Features/index.tsx b/src/DemoModule/Features/index.tsx
similarity index 100%
rename from src/Demo/Features/index.tsx
rename to src/DemoModule/Features/index.tsx
diff --git a/src/Demo/Supporters/Supporters.tsx b/src/DemoModule/Supporters/Supporters.tsx
similarity index 100%
rename from src/Demo/Supporters/Supporters.tsx
rename to src/DemoModule/Supporters/Supporters.tsx
diff --git a/src/Demo/Supporters/index.tsx b/src/DemoModule/Supporters/index.tsx
similarity index 100%
rename from src/Demo/Supporters/index.tsx
rename to src/DemoModule/Supporters/index.tsx
diff --git a/src/Demo/index.tsx b/src/DemoModule/index.tsx
similarity index 100%
rename from src/Demo/index.tsx
rename to src/DemoModule/index.tsx
diff --git a/src/Misc/NotFound/NotFound.tsx b/src/MiscModule/NotFound/NotFound.tsx
similarity index 100%
rename from src/Misc/NotFound/NotFound.tsx
rename to src/MiscModule/NotFound/NotFound.tsx
diff --git a/src/Misc/NotFound/NotFoundDocs.md b/src/MiscModule/NotFound/NotFoundDocs.md
similarity index 100%
rename from src/Misc/NotFound/NotFoundDocs.md
rename to src/MiscModule/NotFound/NotFoundDocs.md
diff --git a/src/Misc/NotFound/index.tsx b/src/MiscModule/NotFound/index.tsx
similarity index 100%
rename from src/Misc/NotFound/index.tsx
rename to src/MiscModule/NotFound/index.tsx
diff --git a/src/Organization/Account.tsx b/src/OrganizationModule/Account.tsx
similarity index 100%
rename from src/Organization/Account.tsx
rename to src/OrganizationModule/Account.tsx
diff --git a/src/Organization/AccountDocs.md b/src/OrganizationModule/AccountDocs.md
similarity index 100%
rename from src/Organization/AccountDocs.md
rename to src/OrganizationModule/AccountDocs.md
diff --git a/src/Organization/Preview/.gitkeep b/src/OrganizationModule/Preview/.gitkeep
similarity index 100%
rename from src/Organization/Preview/.gitkeep
rename to src/OrganizationModule/Preview/.gitkeep
diff --git a/src/Organization/Settings/.gitkeep b/src/OrganizationModule/Settings/.gitkeep
similarity index 100%
rename from src/Organization/Settings/.gitkeep
rename to src/OrganizationModule/Settings/.gitkeep
diff --git a/src/Organization/Users/UsersEditor/.gitkeep b/src/OrganizationModule/Users/UsersEditor/.gitkeep
similarity index 100%
rename from src/Organization/Users/UsersEditor/.gitkeep
rename to src/OrganizationModule/Users/UsersEditor/.gitkeep
diff --git a/src/Organization/Users/UsersList/.gitkeep b/src/OrganizationModule/Users/UsersList/.gitkeep
similarity index 100%
rename from src/Organization/Users/UsersList/.gitkeep
rename to src/OrganizationModule/Users/UsersList/.gitkeep
diff --git a/src/Organization/index.tsx b/src/OrganizationModule/index.tsx
similarity index 100%
rename from src/Organization/index.tsx
rename to src/OrganizationModule/index.tsx
diff --git a/src/Profile/Preview/.gitkeep b/src/ProfileModule/Preview/.gitkeep
similarity index 100%
rename from src/Profile/Preview/.gitkeep
rename to src/ProfileModule/Preview/.gitkeep
diff --git a/src/Profile/Profile.tsx b/src/ProfileModule/Profile.tsx
similarity index 100%
rename from src/Profile/Profile.tsx
rename to src/ProfileModule/Profile.tsx
diff --git a/src/Profile/ProfileDocs.md b/src/ProfileModule/ProfileDocs.md
similarity index 100%
rename from src/Profile/ProfileDocs.md
rename to src/ProfileModule/ProfileDocs.md
diff --git a/src/Profile/Settings/.gitkeep b/src/ProfileModule/Settings/.gitkeep
similarity index 100%
rename from src/Profile/Settings/.gitkeep
rename to src/ProfileModule/Settings/.gitkeep
diff --git a/src/Profile/index.tsx b/src/ProfileModule/index.tsx
similarity index 100%
rename from src/Profile/index.tsx
rename to src/ProfileModule/index.tsx
diff --git a/src/Sales/Customers/Customers.tsx b/src/SalesModule/Customers/Customers.tsx
similarity index 100%
rename from src/Sales/Customers/Customers.tsx
rename to src/SalesModule/Customers/Customers.tsx
diff --git a/src/Sales/Customers/CustomersEditor/.gitkeep b/src/SalesModule/Customers/CustomersEditor/.gitkeep
similarity index 100%
rename from src/Sales/Customers/CustomersEditor/.gitkeep
rename to src/SalesModule/Customers/CustomersEditor/.gitkeep
diff --git a/src/Sales/Customers/CustomersList/.gitkeep b/src/SalesModule/Customers/CustomersList/.gitkeep
similarity index 100%
rename from src/Sales/Customers/CustomersList/.gitkeep
rename to src/SalesModule/Customers/CustomersList/.gitkeep
diff --git a/src/Sales/Customers/index.tsx b/src/SalesModule/Customers/index.tsx
similarity index 100%
rename from src/Sales/Customers/index.tsx
rename to src/SalesModule/Customers/index.tsx
diff --git a/src/Sales/Locations/.gitkeep b/src/SalesModule/Locations/.gitkeep
similarity index 100%
rename from src/Sales/Locations/.gitkeep
rename to src/SalesModule/Locations/.gitkeep
diff --git a/src/Sales/Orders/Orders.tsx b/src/SalesModule/Orders/Orders.tsx
similarity index 100%
rename from src/Sales/Orders/Orders.tsx
rename to src/SalesModule/Orders/Orders.tsx
diff --git a/src/Sales/Orders/OrdersEditor/.gitkeep b/src/SalesModule/Orders/OrdersEditor/.gitkeep
similarity index 100%
rename from src/Sales/Orders/OrdersEditor/.gitkeep
rename to src/SalesModule/Orders/OrdersEditor/.gitkeep
diff --git a/src/Sales/Orders/OrdersList/.gitkeep b/src/SalesModule/Orders/OrdersList/.gitkeep
similarity index 100%
rename from src/Sales/Orders/OrdersList/.gitkeep
rename to src/SalesModule/Orders/OrdersList/.gitkeep
diff --git a/src/Sales/Orders/index.tsx b/src/SalesModule/Orders/index.tsx
similarity index 100%
rename from src/Sales/Orders/index.tsx
rename to src/SalesModule/Orders/index.tsx
diff --git a/src/Sales/Overview/OrdersHistory/OrdersHistory.tsx b/src/SalesModule/Overview/OrdersHistory/OrdersHistory.tsx
similarity index 100%
rename from src/Sales/Overview/OrdersHistory/OrdersHistory.tsx
rename to src/SalesModule/Overview/OrdersHistory/OrdersHistory.tsx
diff --git a/src/Sales/Overview/OrdersHistory/index.tsx b/src/SalesModule/Overview/OrdersHistory/index.tsx
similarity index 100%
rename from src/Sales/Overview/OrdersHistory/index.tsx
rename to src/SalesModule/Overview/OrdersHistory/index.tsx
diff --git a/src/Sales/Overview/OrdersHistory/ordersHistoryService.ts b/src/SalesModule/Overview/OrdersHistory/ordersHistoryService.ts
similarity index 100%
rename from src/Sales/Overview/OrdersHistory/ordersHistoryService.ts
rename to src/SalesModule/Overview/OrdersHistory/ordersHistoryService.ts
diff --git a/src/Sales/Overview/OrdersLatest/OrdersLatest.tsx b/src/SalesModule/Overview/OrdersLatest/OrdersLatest.tsx
similarity index 100%
rename from src/Sales/Overview/OrdersLatest/OrdersLatest.tsx
rename to src/SalesModule/Overview/OrdersLatest/OrdersLatest.tsx
diff --git a/src/Sales/Overview/OrdersLatest/index.tsx b/src/SalesModule/Overview/OrdersLatest/index.tsx
similarity index 100%
rename from src/Sales/Overview/OrdersLatest/index.tsx
rename to src/SalesModule/Overview/OrdersLatest/index.tsx
diff --git a/src/Sales/Overview/Overview.tsx b/src/SalesModule/Overview/Overview.tsx
similarity index 100%
rename from src/Sales/Overview/Overview.tsx
rename to src/SalesModule/Overview/Overview.tsx
diff --git a/src/Sales/Overview/OverviewActions.tsx b/src/SalesModule/Overview/OverviewActions.tsx
similarity index 100%
rename from src/Sales/Overview/OverviewActions.tsx
rename to src/SalesModule/Overview/OverviewActions.tsx
diff --git a/src/Sales/Overview/index.tsx b/src/SalesModule/Overview/index.tsx
similarity index 100%
rename from src/Sales/Overview/index.tsx
rename to src/SalesModule/Overview/index.tsx
diff --git a/src/Sales/Overview/overviewContext.ts b/src/SalesModule/Overview/overviewContext.ts
similarity index 100%
rename from src/Sales/Overview/overviewContext.ts
rename to src/SalesModule/Overview/overviewContext.ts
diff --git a/src/Sales/Payments/Payments.tsx b/src/SalesModule/Payments/Payments.tsx
similarity index 100%
rename from src/Sales/Payments/Payments.tsx
rename to src/SalesModule/Payments/Payments.tsx
diff --git a/src/Sales/Products/ProductsCategoriesEditor/.gitkeep b/src/SalesModule/Products/ProductsCategoriesEditor/.gitkeep
similarity index 100%
rename from src/Sales/Products/ProductsCategoriesEditor/.gitkeep
rename to src/SalesModule/Products/ProductsCategoriesEditor/.gitkeep
diff --git a/src/Sales/Products/ProductsCategoriesList/.gitkeep b/src/SalesModule/Products/ProductsCategoriesList/.gitkeep
similarity index 100%
rename from src/Sales/Products/ProductsCategoriesList/.gitkeep
rename to src/SalesModule/Products/ProductsCategoriesList/.gitkeep
diff --git a/src/Sales/Products/ProductsEditor/.gitkeep b/src/SalesModule/Products/ProductsEditor/.gitkeep
similarity index 100%
rename from src/Sales/Products/ProductsEditor/.gitkeep
rename to src/SalesModule/Products/ProductsEditor/.gitkeep
diff --git a/src/Sales/Products/ProductsList/.gitkeep b/src/SalesModule/Products/ProductsList/.gitkeep
similarity index 100%
rename from src/Sales/Products/ProductsList/.gitkeep
rename to src/SalesModule/Products/ProductsList/.gitkeep
diff --git a/src/Sales/Sales.tsx b/src/SalesModule/Sales.tsx
similarity index 100%
rename from src/Sales/Sales.tsx
rename to src/SalesModule/Sales.tsx
diff --git a/src/Sales/SalesDocs.md b/src/SalesModule/SalesDocs.md
similarity index 100%
rename from src/Sales/SalesDocs.md
rename to src/SalesModule/SalesDocs.md
diff --git a/src/Sales/SalesService.tsx b/src/SalesModule/SalesService.tsx
similarity index 100%
rename from src/Sales/SalesService.tsx
rename to src/SalesModule/SalesService.tsx
diff --git a/src/Sales/Stock/Stock.tsx b/src/SalesModule/Stock/Stock.tsx
similarity index 100%
rename from src/Sales/Stock/Stock.tsx
rename to src/SalesModule/Stock/Stock.tsx
diff --git a/src/Sales/Stores/Stores.tsx b/src/SalesModule/Stores/Stores.tsx
similarity index 100%
rename from src/Sales/Stores/Stores.tsx
rename to src/SalesModule/Stores/Stores.tsx
diff --git a/src/Sales/_api/_data/categoriesData.ts b/src/SalesModule/_api/_data/categoriesData.ts
similarity index 100%
rename from src/Sales/_api/_data/categoriesData.ts
rename to src/SalesModule/_api/_data/categoriesData.ts
diff --git a/src/Sales/_api/_data/customersData.ts b/src/SalesModule/_api/_data/customersData.ts
similarity index 100%
rename from src/Sales/_api/_data/customersData.ts
rename to src/SalesModule/_api/_data/customersData.ts
diff --git a/src/Sales/_api/_data/locationsData.ts b/src/SalesModule/_api/_data/locationsData.ts
similarity index 100%
rename from src/Sales/_api/_data/locationsData.ts
rename to src/SalesModule/_api/_data/locationsData.ts
diff --git a/src/Sales/_api/_data/ordersData.ts b/src/SalesModule/_api/_data/ordersData.ts
similarity index 100%
rename from src/Sales/_api/_data/ordersData.ts
rename to src/SalesModule/_api/_data/ordersData.ts
diff --git a/src/Sales/_api/_data/paymentsData.ts b/src/SalesModule/_api/_data/paymentsData.ts
similarity index 100%
rename from src/Sales/_api/_data/paymentsData.ts
rename to src/SalesModule/_api/_data/paymentsData.ts
diff --git a/src/Sales/_api/_data/productsData.ts b/src/SalesModule/_api/_data/productsData.ts
similarity index 100%
rename from src/Sales/_api/_data/productsData.ts
rename to src/SalesModule/_api/_data/productsData.ts
diff --git a/src/Sales/_api/_data/productsRelCategoriesData.ts b/src/SalesModule/_api/_data/productsRelCategoriesData.ts
similarity index 100%
rename from src/Sales/_api/_data/productsRelCategoriesData.ts
rename to src/SalesModule/_api/_data/productsRelCategoriesData.ts
diff --git a/src/Sales/_api/_data/stockActionsData.ts b/src/SalesModule/_api/_data/stockActionsData.ts
similarity index 100%
rename from src/Sales/_api/_data/stockActionsData.ts
rename to src/SalesModule/_api/_data/stockActionsData.ts
diff --git a/src/Sales/_api/_data/stocksData.ts b/src/SalesModule/_api/_data/stocksData.ts
similarity index 100%
rename from src/Sales/_api/_data/stocksData.ts
rename to src/SalesModule/_api/_data/stocksData.ts
diff --git a/src/Sales/_api/_mocks/index.ts b/src/SalesModule/_api/_mocks/index.ts
similarity index 100%
rename from src/Sales/_api/_mocks/index.ts
rename to src/SalesModule/_api/_mocks/index.ts
diff --git a/src/Sales/_api/_mocks/ordersMocks.ts b/src/SalesModule/_api/_mocks/ordersMocks.ts
similarity index 100%
rename from src/Sales/_api/_mocks/ordersMocks.ts
rename to src/SalesModule/_api/_mocks/ordersMocks.ts
diff --git a/src/Sales/_api/customers.ts b/src/SalesModule/_api/customers.ts
similarity index 100%
rename from src/Sales/_api/customers.ts
rename to src/SalesModule/_api/customers.ts
diff --git a/src/Sales/_api/index.ts b/src/SalesModule/_api/index.ts
similarity index 100%
rename from src/Sales/_api/index.ts
rename to src/SalesModule/_api/index.ts
diff --git a/src/Sales/_api/orders.ts b/src/SalesModule/_api/orders.ts
similarity index 100%
rename from src/Sales/_api/orders.ts
rename to src/SalesModule/_api/orders.ts
diff --git a/src/Sales/_api/products.ts b/src/SalesModule/_api/products.ts
similarity index 100%
rename from src/Sales/_api/products.ts
rename to src/SalesModule/_api/products.ts
diff --git a/src/Sales/_api/productsCategories.ts b/src/SalesModule/_api/productsCategories.ts
similarity index 100%
rename from src/Sales/_api/productsCategories.ts
rename to src/SalesModule/_api/productsCategories.ts
diff --git a/src/Sales/_services/.gitkeep b/src/SalesModule/_services/.gitkeep
similarity index 100%
rename from src/Sales/_services/.gitkeep
rename to src/SalesModule/_services/.gitkeep
diff --git a/src/Sales/_types/Customer.ts b/src/SalesModule/_types/Customer.ts
similarity index 100%
rename from src/Sales/_types/Customer.ts
rename to src/SalesModule/_types/Customer.ts
diff --git a/src/Sales/_types/EntityOwned.ts b/src/SalesModule/_types/EntityOwned.ts
similarity index 100%
rename from src/Sales/_types/EntityOwned.ts
rename to src/SalesModule/_types/EntityOwned.ts
diff --git a/src/Sales/_types/Location.ts b/src/SalesModule/_types/Location.ts
similarity index 100%
rename from src/Sales/_types/Location.ts
rename to src/SalesModule/_types/Location.ts
diff --git a/src/Sales/_types/Order.ts b/src/SalesModule/_types/Order.ts
similarity index 100%
rename from src/Sales/_types/Order.ts
rename to src/SalesModule/_types/Order.ts
diff --git a/src/Sales/_types/Payment.ts b/src/SalesModule/_types/Payment.ts
similarity index 100%
rename from src/Sales/_types/Payment.ts
rename to src/SalesModule/_types/Payment.ts
diff --git a/src/Sales/_types/Product.ts b/src/SalesModule/_types/Product.ts
similarity index 100%
rename from src/Sales/_types/Product.ts
rename to src/SalesModule/_types/Product.ts
diff --git a/src/Sales/_types/ProductAttachment.ts b/src/SalesModule/_types/ProductAttachment.ts
similarity index 100%
rename from src/Sales/_types/ProductAttachment.ts
rename to src/SalesModule/_types/ProductAttachment.ts
diff --git a/src/Sales/_types/ProductCategory.ts b/src/SalesModule/_types/ProductCategory.ts
similarity index 100%
rename from src/Sales/_types/ProductCategory.ts
rename to src/SalesModule/_types/ProductCategory.ts
diff --git a/src/Sales/_types/ProductImage.ts b/src/SalesModule/_types/ProductImage.ts
similarity index 100%
rename from src/Sales/_types/ProductImage.ts
rename to src/SalesModule/_types/ProductImage.ts
diff --git a/src/Sales/_types/ProductToProductCategory.ts b/src/SalesModule/_types/ProductToProductCategory.ts
similarity index 100%
rename from src/Sales/_types/ProductToProductCategory.ts
rename to src/SalesModule/_types/ProductToProductCategory.ts
diff --git a/src/Sales/_types/Stock.ts b/src/SalesModule/_types/Stock.ts
similarity index 100%
rename from src/Sales/_types/Stock.ts
rename to src/SalesModule/_types/Stock.ts
diff --git a/src/Sales/_types/StockAction.ts b/src/SalesModule/_types/StockAction.ts
similarity index 100%
rename from src/Sales/_types/StockAction.ts
rename to src/SalesModule/_types/StockAction.ts
diff --git a/src/Sales/index.tsx b/src/SalesModule/index.tsx
similarity index 100%
rename from src/Sales/index.tsx
rename to src/SalesModule/index.tsx
diff --git a/src/Services/ServicesDocs.md b/src/ServicesModule/ServicesDocs.md
similarity index 100%
rename from src/Services/ServicesDocs.md
rename to src/ServicesModule/ServicesDocs.md
diff --git a/src/_api/index.ts b/src/_api/index.ts
index fa9279a..de59668 100644
--- a/src/_api/index.ts
+++ b/src/_api/index.ts
@@ -4,7 +4,7 @@ import organizations from './organizations'
 import users from './users'
 
 // Submodules
-import apiSales from '../Sales/_api'
+import apiSales from '../SalesModule/_api'
 
 export interface ApiInitOptions {
   useSampleData?: boolean

From 20c08eccd1d94f32ebbc0d0ee436bfbc5d8ce7e5 Mon Sep 17 00:00:00 2001
From: Gevorg Harutyunyan <gevharut@gmail.com>
Date: Sat, 17 Aug 2019 02:42:47 +0400
Subject: [PATCH 2/5] Test interface definition

---
 src/AppDocs.md                                |  33 +++--
 src/EmptyModule/EmptyModule.tsx               |   7 +
 src/EmptyModule/_api/index.ts                 |   0
 src/EmptyModule/index.tsx                     |   0
 src/SalesModule2/Customers/Customers.tsx      |  22 +++
 .../Customers/CustomersEditor/.gitkeep        |   0
 .../Customers/CustomersList/.gitkeep          |   0
 src/SalesModule2/Customers/index.tsx          |   1 +
 src/SalesModule2/Locations/.gitkeep           |   0
 src/SalesModule2/Orders/Orders.tsx            |  28 ++++
 src/SalesModule2/Orders/OrdersEditor/.gitkeep |   0
 src/SalesModule2/Orders/OrdersList/.gitkeep   |   0
 src/SalesModule2/Orders/index.tsx             |   1 +
 .../Overview/OrdersHistory/OrdersHistory.tsx  |  49 +++++++
 .../Overview/OrdersHistory/index.tsx          |   1 +
 .../OrdersHistory/ordersHistoryService.ts     | 131 ++++++++++++++++++
 .../Overview/OrdersLatest/OrdersLatest.tsx    |  91 ++++++++++++
 .../Overview/OrdersLatest/index.tsx           |   1 +
 src/SalesModule2/Overview/Overview.tsx        |  61 ++++++++
 src/SalesModule2/Overview/OverviewActions.tsx |  55 ++++++++
 src/SalesModule2/Overview/index.tsx           |   1 +
 src/SalesModule2/Overview/overviewContext.ts  |  32 +++++
 src/SalesModule2/Payments/Payments.tsx        |   7 +
 .../ProductsCategoriesEditor/.gitkeep         |   0
 .../Products/ProductsCategoriesList/.gitkeep  |   0
 .../Products/ProductsEditor/.gitkeep          |   0
 .../Products/ProductsList/.gitkeep            |   0
 src/SalesModule2/Sales.tsx                    |  23 +++
 src/SalesModule2/SalesDocs.md                 |  17 +++
 src/SalesModule2/Stock/Stock.tsx              |   7 +
 src/SalesModule2/Stores/Stores.tsx            |   7 +
 src/SalesModule2/_api/_data/categoriesData.ts |  84 +++++++++++
 .../_api/_data/customersData.ts}              |   0
 src/SalesModule2/_api/_data/locationsData.ts  |   1 +
 src/SalesModule2/_api/_data/ordersData.ts     |  86 ++++++++++++
 src/SalesModule2/_api/_data/paymentsData.ts   |   1 +
 src/SalesModule2/_api/_data/productsData.ts   |  50 +++++++
 .../_api/_data/productsRelCategoriesData.ts   |   1 +
 .../_api/_data/stockActionsData.ts            |   1 +
 src/SalesModule2/_api/_data/stocksData.ts     |   1 +
 src/SalesModule2/_api/_mocks/index.ts         |  11 ++
 src/SalesModule2/_api/_mocks/ordersMocks.ts   |  67 +++++++++
 src/SalesModule2/_api/customers.ts            |   3 +
 src/SalesModule2/_api/index.ts                |  20 +++
 src/SalesModule2/_api/orders.ts               |  46 ++++++
 src/SalesModule2/_api/products.ts             |   3 +
 src/SalesModule2/_api/productsCategories.ts   |   3 +
 src/SalesModule2/_services/.gitkeep           |   0
 src/SalesModule2/_types/Customer.ts           |  10 ++
 src/SalesModule2/_types/EntityOwned.ts        |  12 ++
 src/SalesModule2/_types/Location.ts           |  12 ++
 src/SalesModule2/_types/Order.ts              |  36 +++++
 src/SalesModule2/_types/Payment.ts            |  10 ++
 src/SalesModule2/_types/Product.ts            |  25 ++++
 src/SalesModule2/_types/ProductAttachment.ts  |   7 +
 src/SalesModule2/_types/ProductCategory.ts    |  11 ++
 src/SalesModule2/_types/ProductImage.ts       |   7 +
 .../_types/ProductToProductCategory.ts        |   7 +
 src/SalesModule2/_types/Stock.ts              |   8 ++
 src/SalesModule2/_types/StockAction.ts        |   9 ++
 src/SalesModule2/index.tsx                    |  11 ++
 61 files changed, 1105 insertions(+), 13 deletions(-)
 create mode 100644 src/EmptyModule/EmptyModule.tsx
 create mode 100644 src/EmptyModule/_api/index.ts
 create mode 100644 src/EmptyModule/index.tsx
 create mode 100644 src/SalesModule2/Customers/Customers.tsx
 create mode 100644 src/SalesModule2/Customers/CustomersEditor/.gitkeep
 create mode 100644 src/SalesModule2/Customers/CustomersList/.gitkeep
 create mode 100644 src/SalesModule2/Customers/index.tsx
 create mode 100644 src/SalesModule2/Locations/.gitkeep
 create mode 100644 src/SalesModule2/Orders/Orders.tsx
 create mode 100644 src/SalesModule2/Orders/OrdersEditor/.gitkeep
 create mode 100644 src/SalesModule2/Orders/OrdersList/.gitkeep
 create mode 100644 src/SalesModule2/Orders/index.tsx
 create mode 100644 src/SalesModule2/Overview/OrdersHistory/OrdersHistory.tsx
 create mode 100644 src/SalesModule2/Overview/OrdersHistory/index.tsx
 create mode 100644 src/SalesModule2/Overview/OrdersHistory/ordersHistoryService.ts
 create mode 100644 src/SalesModule2/Overview/OrdersLatest/OrdersLatest.tsx
 create mode 100644 src/SalesModule2/Overview/OrdersLatest/index.tsx
 create mode 100644 src/SalesModule2/Overview/Overview.tsx
 create mode 100644 src/SalesModule2/Overview/OverviewActions.tsx
 create mode 100644 src/SalesModule2/Overview/index.tsx
 create mode 100644 src/SalesModule2/Overview/overviewContext.ts
 create mode 100644 src/SalesModule2/Payments/Payments.tsx
 create mode 100644 src/SalesModule2/Products/ProductsCategoriesEditor/.gitkeep
 create mode 100644 src/SalesModule2/Products/ProductsCategoriesList/.gitkeep
 create mode 100644 src/SalesModule2/Products/ProductsEditor/.gitkeep
 create mode 100644 src/SalesModule2/Products/ProductsList/.gitkeep
 create mode 100644 src/SalesModule2/Sales.tsx
 create mode 100644 src/SalesModule2/SalesDocs.md
 create mode 100644 src/SalesModule2/Stock/Stock.tsx
 create mode 100644 src/SalesModule2/Stores/Stores.tsx
 create mode 100644 src/SalesModule2/_api/_data/categoriesData.ts
 rename src/{SalesModule/SalesService.tsx => SalesModule2/_api/_data/customersData.ts} (100%)
 create mode 100644 src/SalesModule2/_api/_data/locationsData.ts
 create mode 100644 src/SalesModule2/_api/_data/ordersData.ts
 create mode 100644 src/SalesModule2/_api/_data/paymentsData.ts
 create mode 100644 src/SalesModule2/_api/_data/productsData.ts
 create mode 100644 src/SalesModule2/_api/_data/productsRelCategoriesData.ts
 create mode 100644 src/SalesModule2/_api/_data/stockActionsData.ts
 create mode 100644 src/SalesModule2/_api/_data/stocksData.ts
 create mode 100644 src/SalesModule2/_api/_mocks/index.ts
 create mode 100644 src/SalesModule2/_api/_mocks/ordersMocks.ts
 create mode 100644 src/SalesModule2/_api/customers.ts
 create mode 100644 src/SalesModule2/_api/index.ts
 create mode 100644 src/SalesModule2/_api/orders.ts
 create mode 100644 src/SalesModule2/_api/products.ts
 create mode 100644 src/SalesModule2/_api/productsCategories.ts
 create mode 100644 src/SalesModule2/_services/.gitkeep
 create mode 100644 src/SalesModule2/_types/Customer.ts
 create mode 100644 src/SalesModule2/_types/EntityOwned.ts
 create mode 100644 src/SalesModule2/_types/Location.ts
 create mode 100644 src/SalesModule2/_types/Order.ts
 create mode 100644 src/SalesModule2/_types/Payment.ts
 create mode 100644 src/SalesModule2/_types/Product.ts
 create mode 100644 src/SalesModule2/_types/ProductAttachment.ts
 create mode 100644 src/SalesModule2/_types/ProductCategory.ts
 create mode 100644 src/SalesModule2/_types/ProductImage.ts
 create mode 100644 src/SalesModule2/_types/ProductToProductCategory.ts
 create mode 100644 src/SalesModule2/_types/Stock.ts
 create mode 100644 src/SalesModule2/_types/StockAction.ts
 create mode 100644 src/SalesModule2/index.tsx

diff --git a/src/AppDocs.md b/src/AppDocs.md
index d10bd78..20085a5 100644
--- a/src/AppDocs.md
+++ b/src/AppDocs.md
@@ -1,25 +1,32 @@
-# App module
+# App
 
 This is the application entry component. It handles the main routing and authentication redirects.
-Sub modules
+The App consists from nested modules, each of them has it's own purpose.
 
-### Account
-single account management module
-
-### Admin
+### Administration Module
 all accounts and users management module (convenient for superusers, can be extended)
 
-### Content
+### Auth Module
+user authentication: login, logout, signup, recover
+
+### Content Module
 content management module (useful for creating various entities like books, articles, posts, pages, etc)
 
-### Demo
+### Demo Module
 theme demo pages
 
-### NotFound
-Fallback page, if route doesn't match any module
+### Misc Module
+misc pages like not found page
+
+### Organization Module
+manage user organizations and organization teams
 
-### Profile
-logged-in user profile management module
+### Profile Module
+manage user profile
 
-### Sales
+### Sales Module
 can be used for managing sales/orders
+
+### Service Module
+
+The services module allows to manage different institutions provided services
diff --git a/src/EmptyModule/EmptyModule.tsx b/src/EmptyModule/EmptyModule.tsx
new file mode 100644
index 0000000..826dda6
--- /dev/null
+++ b/src/EmptyModule/EmptyModule.tsx
@@ -0,0 +1,7 @@
+import React from 'react'
+
+const EmptyModule = () => {
+  return <div>EmptyModule</div>
+}
+
+export default EmptyModule
diff --git a/src/EmptyModule/_api/index.ts b/src/EmptyModule/_api/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/EmptyModule/index.tsx b/src/EmptyModule/index.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Customers/Customers.tsx b/src/SalesModule2/Customers/Customers.tsx
new file mode 100644
index 0000000..3e9f31e
--- /dev/null
+++ b/src/SalesModule2/Customers/Customers.tsx
@@ -0,0 +1,22 @@
+import React from 'react'
+// import clsx from 'clsx'
+import { makeStyles } from '@material-ui/core/styles'
+
+import PageContainer from '../../_common/PageContainer'
+
+// import Grid from '@material-ui/core/Grid'
+import Paper from '@material-ui/core/Paper'
+
+import { Theme } from '_theme'
+
+export default function Customers() {
+  const classes = useStyles()
+
+  return (
+    <PageContainer>
+      <Paper>Customers</Paper>
+    </PageContainer>
+  )
+}
+
+const useStyles = makeStyles((theme: Theme) => ({}))
diff --git a/src/SalesModule2/Customers/CustomersEditor/.gitkeep b/src/SalesModule2/Customers/CustomersEditor/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Customers/CustomersList/.gitkeep b/src/SalesModule2/Customers/CustomersList/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Customers/index.tsx b/src/SalesModule2/Customers/index.tsx
new file mode 100644
index 0000000..1ef951c
--- /dev/null
+++ b/src/SalesModule2/Customers/index.tsx
@@ -0,0 +1 @@
+export { default } from './Customers'
diff --git a/src/SalesModule2/Locations/.gitkeep b/src/SalesModule2/Locations/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Orders/Orders.tsx b/src/SalesModule2/Orders/Orders.tsx
new file mode 100644
index 0000000..44090af
--- /dev/null
+++ b/src/SalesModule2/Orders/Orders.tsx
@@ -0,0 +1,28 @@
+import React from 'react'
+
+import Grid from '@material-ui/core/Grid'
+import Paper from '@material-ui/core/Paper'
+import Button from '@material-ui/core/Button'
+
+// import { Theme } from '_theme'
+
+import PageContainer from '../../_common/PageContainer'
+import PageToolbar from '../../_common/PageToolbar'
+
+const Orders = () => {
+  const PageTitle = 'Orders'
+
+  const PageActions = (
+    <Button variant="contained" href="#contained-buttons">
+      Link
+    </Button>
+  )
+
+  return (
+    <PageContainer>
+      <PageToolbar title={PageTitle} actions={PageActions}></PageToolbar>
+    </PageContainer>
+  )
+}
+
+export default Orders
diff --git a/src/SalesModule2/Orders/OrdersEditor/.gitkeep b/src/SalesModule2/Orders/OrdersEditor/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Orders/OrdersList/.gitkeep b/src/SalesModule2/Orders/OrdersList/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Orders/index.tsx b/src/SalesModule2/Orders/index.tsx
new file mode 100644
index 0000000..36573fb
--- /dev/null
+++ b/src/SalesModule2/Orders/index.tsx
@@ -0,0 +1 @@
+export { default } from './Orders'
diff --git a/src/SalesModule2/Overview/OrdersHistory/OrdersHistory.tsx b/src/SalesModule2/Overview/OrdersHistory/OrdersHistory.tsx
new file mode 100644
index 0000000..bebf792
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersHistory/OrdersHistory.tsx
@@ -0,0 +1,49 @@
+import React, { useEffect, useRef } from 'react' //useState
+import { makeStyles } from '@material-ui/core/styles'
+import Card from '@material-ui/core/Card'
+import CardContent from '@material-ui/core/CardContent'
+import { Chart } from 'chart.js'
+
+import mainHistoryService from './ordersHistoryService'
+
+// ref: https://www.robinwieruch.de/react-hooks-fetch-data/
+const MainHistory = () => {
+  const canvasRef = useRef<HTMLCanvasElement>(null)
+  const classes = useStyles()
+
+  useEffect(() => {
+    if (canvasRef.current === null) {
+      return
+    }
+
+    async function requestChartData(canvasRefNode: HTMLCanvasElement) {
+      if (!canvasRef) {
+        return
+      }
+
+      const chartConfigurationRes = await mainHistoryService.getChartConfiguration()
+
+      new Chart(canvasRefNode, chartConfigurationRes)
+    }
+    requestChartData(canvasRef.current)
+  }, [canvasRef])
+
+  return (
+    <Card>
+      <CardContent className={classes.content}>
+        Order History
+        <canvas ref={canvasRef} className={classes.chart} />
+      </CardContent>
+    </Card>
+  )
+}
+
+const useStyles = makeStyles(theme => ({
+  content: {},
+  chart: {
+    width: '100%',
+    height: '200px',
+  },
+}))
+
+export default MainHistory
diff --git a/src/SalesModule2/Overview/OrdersHistory/index.tsx b/src/SalesModule2/Overview/OrdersHistory/index.tsx
new file mode 100644
index 0000000..e2134c2
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersHistory/index.tsx
@@ -0,0 +1 @@
+export { default } from './OrdersHistory'
diff --git a/src/SalesModule2/Overview/OrdersHistory/ordersHistoryService.ts b/src/SalesModule2/Overview/OrdersHistory/ordersHistoryService.ts
new file mode 100644
index 0000000..55c6395
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersHistory/ordersHistoryService.ts
@@ -0,0 +1,131 @@
+import { Chart } from 'chart.js'
+import { random } from 'lodash'
+import moment from 'moment'
+
+// import ordersData from '../../_api/_data/ordersData'
+import api from '../../_api'
+
+export default {
+  getRandomNumber(min = 0, max = 1): number {
+    return random(min, max)
+  },
+  async getChartData(): Promise<Chart.ChartData> {
+    interface ChartDataSet extends Chart.ChartDataSets {
+      data: number[]
+    }
+
+    const orders = await api.orders.getList()
+
+    console.log('orders', orders)
+
+    const timeFormat = 'MM/DD/YYYY'
+
+    const today = moment().startOf('day')
+    const oneMonthAgo = moment(today).subtract(15, 'days')
+
+    const labels: string[] = []
+    const signups: ChartDataSet = {
+      type: 'bar',
+      label: 'Signups',
+      backgroundColor: '#e8e8e8',
+      data: [],
+    }
+    const ordersCount: ChartDataSet = {
+      type: 'line',
+      label: 'Number of orders',
+      backgroundColor: '#1e88e5',
+      borderColor: '#1e88e5',
+      fill: false,
+      data: [],
+    }
+    const ordersSum: ChartDataSet = {
+      type: 'line',
+      label: 'Total orders $',
+      backgroundColor: '#95de3c',
+      borderColor: '#95de3c',
+      fill: false,
+      data: [],
+      yAxisID: 'y-axis-2',
+    }
+
+    for (let now = moment(oneMonthAgo); now.isSameOrBefore(today); now.add(1, 'day')) {
+      labels.push(now.format(timeFormat))
+
+      const signupsValue = random(10, 150)
+      const ordersCountValue = random(0, 25)
+      const ordersSumValue = random(10, 315)
+
+      signups.data.push(signupsValue)
+      ordersCount.data.push(ordersCountValue)
+      ordersSum.data.push(ordersSumValue)
+    }
+
+    return {
+      labels,
+      datasets: [ordersSum, ordersCount, signups],
+    }
+  },
+  getChartOptions(): Chart.ChartOptions {
+    const timeFormat = 'MM/DD/YYYY'
+
+    return {
+      // responsive: true,
+      title: {
+        text: 'Chart.js Combo Time Scale',
+      },
+      scales: {
+        xAxes: [
+          {
+            type: 'time',
+            display: true,
+            time: {
+              parser: timeFormat,
+            },
+          },
+        ],
+        yAxes: [
+          {
+            type: 'linear',
+            display: true,
+            position: 'left',
+            id: 'y-axis-1',
+          },
+          {
+            type: 'linear',
+            display: true,
+            position: 'right',
+            id: 'y-axis-2',
+            // grid line settings
+            gridLines: {
+              drawOnChartArea: false, // only want the grid lines for one axis to show up
+            },
+            ticks: {
+              // Include a dollar sign in the ticks
+              callback: function(value, index, values) {
+                return '$' + value
+              },
+            },
+          },
+        ],
+      },
+      tooltips: {
+        mode: 'index',
+        intersect: false,
+      },
+      hover: {
+        mode: 'index',
+        intersect: false,
+      },
+    }
+  },
+  // In real life this would be an http call
+  async getChartConfiguration(): Promise<Chart.ChartConfiguration> {
+    const configuration = {
+      type: 'bar',
+      options: this.getChartOptions(),
+      data: await this.getChartData(),
+    }
+
+    return new Promise(resolve => setTimeout(() => resolve(configuration), 300))
+  },
+}
diff --git a/src/SalesModule2/Overview/OrdersLatest/OrdersLatest.tsx b/src/SalesModule2/Overview/OrdersLatest/OrdersLatest.tsx
new file mode 100644
index 0000000..4dc642d
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersLatest/OrdersLatest.tsx
@@ -0,0 +1,91 @@
+/* eslint-disable no-script-url */
+
+import React from 'react'
+import Link from '@material-ui/core/Link'
+import { makeStyles } from '@material-ui/core/styles'
+import Card from '@material-ui/core/Card'
+import CardContent from '@material-ui/core/CardContent'
+import Table from '@material-ui/core/Table'
+import TableBody from '@material-ui/core/TableBody'
+import TableCell from '@material-ui/core/TableCell'
+import TableHead from '@material-ui/core/TableHead'
+import TableRow from '@material-ui/core/TableRow'
+
+// Generate Order Data
+function createData(
+  id: number,
+  date: string,
+  name: string,
+  shipTo: string,
+  paymentMethod: string,
+  amount: number,
+) {
+  return { id, date, name, shipTo, paymentMethod, amount }
+}
+
+const rows = [
+  createData(0, '16 Mar, 2019', 'Elvis Presley', 'Tupelo, MS', 'VISA ⠀•••• 3719', 312.44),
+  createData(
+    1,
+    '16 Mar, 2019',
+    'Paul McCartney',
+    'London, UK',
+    'VISA ⠀•••• 2574',
+    866.99,
+  ),
+  createData(2, '16 Mar, 2019', 'Tom Scholz', 'Boston, MA', 'MC ⠀•••• 1253', 100.81),
+  createData(3, '16 Mar, 2019', 'Michael Jackson', 'Gary, IN', 'AMEX ⠀•••• 2000', 654.39),
+  createData(
+    4,
+    '15 Mar, 2019',
+    'Bruce Springsteen',
+    'Long Branch, NJ',
+    'VISA ⠀•••• 5919',
+    212.79,
+  ),
+]
+
+const MainOrders: React.FC<any> = () => {
+  const classes = useStyles()
+  return (
+    <Card>
+      <CardContent>
+        <Table size="small">
+          <TableHead>
+            <TableRow>
+              <TableCell>Date</TableCell>
+              <TableCell>Name</TableCell>
+              <TableCell>Ship To</TableCell>
+              <TableCell>Payment Method</TableCell>
+              <TableCell align="right">Sale Amount</TableCell>
+            </TableRow>
+          </TableHead>
+          <TableBody>
+            {rows.map(row => (
+              <TableRow key={row.id}>
+                <TableCell>{row.date}</TableCell>
+                <TableCell>{row.name}</TableCell>
+                <TableCell>{row.shipTo}</TableCell>
+                <TableCell>{row.paymentMethod}</TableCell>
+                <TableCell align="right">{row.amount}</TableCell>
+              </TableRow>
+            ))}
+          </TableBody>
+        </Table>
+        <div className={classes.seeMore}>
+          <Link color="primary" href="javascript:;">
+            See more orders
+          </Link>
+        </div>
+      </CardContent>
+    </Card>
+  )
+}
+
+const useStyles = makeStyles(theme => ({
+  seeMore: {
+    marginTop: theme.spacing(3),
+  },
+}))
+
+export default MainOrders
diff --git a/src/SalesModule2/Overview/OrdersLatest/index.tsx b/src/SalesModule2/Overview/OrdersLatest/index.tsx
new file mode 100644
index 0000000..a70c25c
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersLatest/index.tsx
@@ -0,0 +1 @@
+export { default } from './OrdersLatest'
diff --git a/src/SalesModule2/Overview/Overview.tsx b/src/SalesModule2/Overview/Overview.tsx
new file mode 100644
index 0000000..a52b514
--- /dev/null
+++ b/src/SalesModule2/Overview/Overview.tsx
@@ -0,0 +1,61 @@
+import React, { useState } from 'react'
+import moment from 'moment'
+// import clsx from 'clsx'
+// import { makeStyles } from '@material-ui/core/styles'
+
+import Grid from '@material-ui/core/Grid'
+
+import PageContainer from '../../_common/PageContainer'
+import PageToolbar from '../../_common/PageToolbar'
+
+import { SalesDashboardProvider } from './overviewContext'
+
+import SalesDashboardActions from './OverviewActions'
+import OrdersHistory from './OrdersHistory'
+import OrdersLatest from './OrdersLatest'
+
+export default function SalesDashboard() {
+  const [filter, setFilter] = useState({
+    dateFrom: moment()
+      .subtract(14, 'day')
+      .startOf('day'),
+    dateTo: moment().startOf('day'),
+  })
+
+  const PageTitle = 'Sales Dashboard'
+
+  return (
+    <SalesDashboardProvider value={{ filter, setFilter }}>
+      <PageContainer>
+        <PageToolbar
+          title={PageTitle}
+          actionsComponent={SalesDashboardActions}
+        ></PageToolbar>
+
+        <Grid container spacing={3}>
+          {/* Chart */}
+          <Grid item xs={12} md={12} lg={12}>
+            <OrdersHistory />
+          </Grid>
+          {/* Recent Deposits */}
+          {/* <Grid item xs={12} md={4} lg={4}>
+          <Paper>
+            <Deposits />
+          </Paper>
+        </Grid> */}
+          {/* Recent Orders */}
+          <Grid item xs={12}>
+            <OrdersLatest />
+          </Grid>
+        </Grid>
+      </PageContainer>
+    </SalesDashboardProvider>
+  )
+}
+
+// const useStyles = makeStyles((theme: Theme) => ({
+//   container: {
+//     paddingTop: theme.spacing(4),
+//     paddingBottom: theme.spacing(4),
+//   },
+// }))
diff --git a/src/SalesModule2/Overview/OverviewActions.tsx b/src/SalesModule2/Overview/OverviewActions.tsx
new file mode 100644
index 0000000..3a786d5
--- /dev/null
+++ b/src/SalesModule2/Overview/OverviewActions.tsx
@@ -0,0 +1,55 @@
+import React, { useContext } from 'react'
+
+import { makeStyles } from '@material-ui/core/styles'
+import Button from '@material-ui/core/Button'
+import Tooltip from '@material-ui/core/Tooltip'
+import IconMore from '@material-ui/icons/MoreVert'
+import IconFilter from '@material-ui/icons/Tune'
+import IconDropDown from '@material-ui/icons/ArrowDropDown'
+import IconNew from '@material-ui/icons/Add'
+
+import { Theme } from '../../_theme'
+import salesDashboardContext from './overviewContext'
+
+const MainActions: React.FC<any> = () => {
+  const classes = useStyles()
+  const { filter, setFilter } = useContext(salesDashboardContext)
+
+  const dateFilterLabel = filter
+    ? `${filter.dateFrom.format('ll')} - ${filter.dateTo.format('ll')}`
+    : 'Date Filter'
+
+  return (
+    <div>
+      <Tooltip title="Date Range">
+        <Button>
+          {dateFilterLabel} <IconDropDown />
+        </Button>
+      </Tooltip>
+      <Tooltip title="Create new">
+        <Button color="secondary">
+          <IconNew className={classes.iconNew} />
+          New
+        </Button>
+      </Tooltip>
+      <Tooltip title="Filter">
+        <Button color="secondary">
+          <IconFilter />
+        </Button>
+      </Tooltip>
+      <Tooltip title="More actions">
+        <Button color="secondary">
+          <IconMore />
+        </Button>
+      </Tooltip>
+    </div>
+  )
+}
+
+const useStyles = makeStyles((theme: Theme) => ({
+  iconNew: {
+    marginRight: 5,
+  },
+}))
+
+export default MainActions
diff --git a/src/SalesModule2/Overview/index.tsx b/src/SalesModule2/Overview/index.tsx
new file mode 100644
index 0000000..1de667a
--- /dev/null
+++ b/src/SalesModule2/Overview/index.tsx
@@ -0,0 +1 @@
+export { default } from './Overview'
diff --git a/src/SalesModule2/Overview/overviewContext.ts b/src/SalesModule2/Overview/overviewContext.ts
new file mode 100644
index 0000000..ed9fb0b
--- /dev/null
+++ b/src/SalesModule2/Overview/overviewContext.ts
@@ -0,0 +1,32 @@
+import React from 'react'
+import moment, { Moment } from 'moment'
+
+export interface SalesDahsboardContextFilter {
+  dateFrom: Moment
+  dateTo: Moment
+}
+
+export interface SalesDahsboardContext {
+  filter?: SalesDahsboardContextFilter
+  setFilter?: any
+}
+
+// The default context, which is used when there is no provider
+// (might be used for components testing)
+export const salesDashboardContextDefault: SalesDahsboardContext = {
+  filter: {
+    dateFrom: moment()
+      .subtract(14, 'day')
+      .startOf('day'),
+    dateTo: moment().startOf('day'),
+  },
+}
+
+export const salesDashboardContext = React.createContext<SalesDahsboardContext>(
+  salesDashboardContextDefault,
+)
+
+export const SalesDashboardProvider = salesDashboardContext.Provider
+export const SalesDashboardConsumer = salesDashboardContext.Consumer
+
+export default salesDashboardContext
diff --git a/src/SalesModule2/Payments/Payments.tsx b/src/SalesModule2/Payments/Payments.tsx
new file mode 100644
index 0000000..de49f4f
--- /dev/null
+++ b/src/SalesModule2/Payments/Payments.tsx
@@ -0,0 +1,7 @@
+import React from 'react'
+
+const Patments = () => {
+  return <div></div>
+}
+
+export default Patments
diff --git a/src/SalesModule2/Products/ProductsCategoriesEditor/.gitkeep b/src/SalesModule2/Products/ProductsCategoriesEditor/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Products/ProductsCategoriesList/.gitkeep b/src/SalesModule2/Products/ProductsCategoriesList/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Products/ProductsEditor/.gitkeep b/src/SalesModule2/Products/ProductsEditor/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Products/ProductsList/.gitkeep b/src/SalesModule2/Products/ProductsList/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Sales.tsx b/src/SalesModule2/Sales.tsx
new file mode 100644
index 0000000..cbc553f
--- /dev/null
+++ b/src/SalesModule2/Sales.tsx
@@ -0,0 +1,23 @@
+import React from 'react'
+import { Switch, Route, RouteComponentProps } from 'react-router-dom'
+
+import DashboardLayout from '_layouts/DashboardLayout'
+import Overview from './Overview'
+import Orders from './Orders'
+import Customers from './Customers'
+
+export interface SalesProps extends RouteComponentProps {}
+
+const Sales = ({ match }: SalesProps) => {
+  return (
+    <DashboardLayout>
+      <Switch>
+        <Route path={`${match.url}/dashboard`} component={Overview} />
+        <Route path={`${match.url}/orders`} component={Orders} />
+        <Route path={`${match.url}/customers`} component={Customers} />
+      </Switch>
+    </DashboardLayout>
+  )
+}
+
+export default Sales
diff --git a/src/SalesModule2/SalesDocs.md b/src/SalesModule2/SalesDocs.md
new file mode 100644
index 0000000..07654b8
--- /dev/null
+++ b/src/SalesModule2/SalesDocs.md
@@ -0,0 +1,17 @@
+# Sales module
+
+The sales module is a good if you're planning to sell some goods in your system.
+It allows you to
+
+- See the sales overview dashboard
+- See and manage the orders
+- See and manage the payments
+- See and manage the products and categories
+- See and manage the stock of products (for physical products)
+- See and manage your products locations (stores, warehouses, shops, trading points, branches, etc)
+
+Use cases
+
+- Single store
+- Stores network
+- Delivery service
diff --git a/src/SalesModule2/Stock/Stock.tsx b/src/SalesModule2/Stock/Stock.tsx
new file mode 100644
index 0000000..af38661
--- /dev/null
+++ b/src/SalesModule2/Stock/Stock.tsx
@@ -0,0 +1,7 @@
+import React from 'react'
+
+const Stock = () => {
+  return <div>Products Stock</div>
+}
+
+export default Stock
diff --git a/src/SalesModule2/Stores/Stores.tsx b/src/SalesModule2/Stores/Stores.tsx
new file mode 100644
index 0000000..43f08b2
--- /dev/null
+++ b/src/SalesModule2/Stores/Stores.tsx
@@ -0,0 +1,7 @@
+import React from 'react'
+
+const Warehouses = () => {
+  return <div>Warehouses</div>
+}
+
+export default Warehouses
diff --git a/src/SalesModule2/_api/_data/categoriesData.ts b/src/SalesModule2/_api/_data/categoriesData.ts
new file mode 100644
index 0000000..8a7d404
--- /dev/null
+++ b/src/SalesModule2/_api/_data/categoriesData.ts
@@ -0,0 +1,84 @@
+import _keyBy from 'lodash/keyBy'
+import Category from '../../_types/ProductCategory'
+
+/*
+  Electronics, Computers & Office
+    ELECTRONICS
+      TV & Video
+      Home Audio & Theater
+      Cell Phones & Accessories
+      Wearable Technology
+    COMPUTERS
+      Computers, Tablets, & PC Products
+      Monitors
+      Drives & Storage
+  Books & Audible
+  Sports & Outdoors
+*/
+
+const list: Category[] = [
+  {
+    id: 1,
+    name: 'Electronics, Computers & Office',
+  },
+  {
+    id: 2,
+    name: 'Electronics',
+    parentId: 1,
+  },
+  {
+    id: 3,
+    name: 'TV & Video',
+    parentId: 2,
+  },
+  {
+    id: 4,
+    name: 'Home Audio & Theater',
+    parentId: 2,
+  },
+  {
+    id: 5,
+    name: 'Cell Phones & Accessories',
+    parentId: 2,
+  },
+  {
+    id: 6,
+    name: 'Wearable Technology',
+    parentId: 2,
+  },
+  {
+    id: 7,
+    name: 'Computers',
+    parentId: 1,
+  },
+  {
+    id: 8,
+    name: 'Computers, Tablets, & PC Products',
+    parentId: 7,
+  },
+  {
+    id: 9,
+    name: 'Monitors',
+    parentId: 7,
+  },
+  {
+    id: 10,
+    name: 'Drives & Storage',
+    parentId: 7,
+  },
+  {
+    id: 11,
+    name: 'Books & Audible',
+  },
+  {
+    id: 11,
+    name: 'Sports & Outdoors',
+  },
+]
+
+const byId: { [key: number]: Category } = _keyBy(list, 'id')
+
+export default {
+  list,
+  byId,
+}
diff --git a/src/SalesModule/SalesService.tsx b/src/SalesModule2/_api/_data/customersData.ts
similarity index 100%
rename from src/SalesModule/SalesService.tsx
rename to src/SalesModule2/_api/_data/customersData.ts
diff --git a/src/SalesModule2/_api/_data/locationsData.ts b/src/SalesModule2/_api/_data/locationsData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/locationsData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/ordersData.ts b/src/SalesModule2/_api/_data/ordersData.ts
new file mode 100644
index 0000000..574dc28
--- /dev/null
+++ b/src/SalesModule2/_api/_data/ordersData.ts
@@ -0,0 +1,86 @@
+import uuidv4 from 'uuid/v4'
+import moment, { Moment } from 'moment'
+import _keyBy from 'lodash/keyBy'
+import _sortBy from 'lodash/sortBy'
+import _random from 'lodash/random'
+import _shuffle from 'lodash/shuffle'
+import Order, { OrderStatus } from '../../_types/Order'
+import productsData from './productsData'
+
+const orderStatuses: OrderStatus[] = [
+  'received',
+  'preparing',
+  'shipped',
+  'delivered',
+  'rejected',
+  'refunded',
+]
+
+// Generate orders data for lat 90 days (do it one per browser session)
+const list = generateRandomOrdersHistory(90)
+const byId: { [key: number]: Order } = _keyBy(list, 'id')
+
+export default {
+  orderStatuses,
+  list,
+  byId,
+}
+
+export function generateRandomOrdersHistory(numDays: number) {
+  let list: Order[] = []
+  const now = moment()
+
+  for (
+    let date = moment().subtract(numDays, 'days'), dayNumber = 1;
+    date.isSameOrBefore(now);
+    date.add(1, 'day'), dayNumber++
+  ) {
+    const dailyOrders = generateDailyRandomOrders(date)
+
+    list = list.concat(dailyOrders)
+  }
+
+  return list
+}
+
+export function generateDailyRandomOrders(date: Moment): Order[] {
+  // Ensure the orders are date sorted
+  return _sortBy(
+    new Array(_random(0, 10)).fill(undefined).map(num => generateRandomOrder(date)),
+    order => moment(order.createdAt).toDate(),
+  )
+}
+
+export function generateRandomOrder(date: Moment): Order {
+  const shuffledProducts = _shuffle(productsData.list)
+  const numProducts = _random(1, 3)
+  const orderProductItems = shuffledProducts.slice(0, numProducts)
+  const orderProducts = orderProductItems.map(product => ({
+    id: product.id,
+    price: product.price,
+    quantity: _random(1, 2),
+  }))
+  const orderSum = orderProducts.reduce((sum, { price = 0, quantity = 0 }) => {
+    return sum + price * quantity
+  }, 0)
+  const isSuccessfulOrder = _random(1, 10) > 2
+  const orderStatus = isSuccessfulOrder
+    ? orderStatuses[_random(0, 3)]
+    : orderStatuses[_random(4, 5)]
+  const orderDate = moment(date).set({
+    hour: _random(0, 23),
+    minute: _random(0, 59),
+    second: _random(0, 59),
+  })
+
+  const order = {
+    id: uuidv4(),
+    products: orderProducts,
+    sum: orderSum,
+    status: orderStatus,
+    createdAt: orderDate.format(),
+    updatedAt: orderDate.format(),
+  }
+
+  return order
+}
diff --git a/src/SalesModule2/_api/_data/paymentsData.ts b/src/SalesModule2/_api/_data/paymentsData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/paymentsData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/productsData.ts b/src/SalesModule2/_api/_data/productsData.ts
new file mode 100644
index 0000000..31b664e
--- /dev/null
+++ b/src/SalesModule2/_api/_data/productsData.ts
@@ -0,0 +1,50 @@
+import _keyBy from 'lodash/keyBy'
+import Product from '../../_types/Product'
+
+const list: Product[] = [
+  {
+    id: 1,
+    name: 'Simple Mobile Prepaid - Apple iPhone 6s (32GB) - Space Gray',
+    price: 300,
+  },
+  {
+    id: 2,
+    name: 'iPhoneXS',
+    price: 399,
+  },
+  {
+    id: 3,
+    name: 'Apple iPhone 6, GSM Unlocked, 64GB - Space Gray (Renewed)',
+    price: 500,
+  },
+  {
+    id: 4,
+    name: 'All-New Fire 7 Tablet (7" display, 16 GB) - Black',
+    images: [
+      {
+        url: 'https://images-na.ssl-images-amazon.com/images/I/61N1v5re7SL._SL1000_.jpg',
+      },
+    ],
+    price: 99.99,
+  },
+  {
+    id: 5,
+    name:
+      'Echo (2nd Generation) - Smart speaker with Alexa and Dolby processing  - Sandstone Fabric',
+    images: [
+      {
+        url: 'https://images-na.ssl-images-amazon.com/images/I/610d8E4usyL._SL1000_.jpg',
+      },
+    ],
+    price: 49.99,
+  },
+]
+
+const byId: { [key: number]: Product } = _keyBy(list, 'id')
+
+const productsData = {
+  list,
+  byId,
+}
+
+export default productsData
diff --git a/src/SalesModule2/_api/_data/productsRelCategoriesData.ts b/src/SalesModule2/_api/_data/productsRelCategoriesData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/productsRelCategoriesData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/stockActionsData.ts b/src/SalesModule2/_api/_data/stockActionsData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/stockActionsData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/stocksData.ts b/src/SalesModule2/_api/_data/stocksData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/stocksData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_mocks/index.ts b/src/SalesModule2/_api/_mocks/index.ts
new file mode 100644
index 0000000..4ef664c
--- /dev/null
+++ b/src/SalesModule2/_api/_mocks/index.ts
@@ -0,0 +1,11 @@
+import MockAdapter from 'axios-mock-adapter'
+
+import ordersMocks from './ordersMocks'
+
+const init = (mockAdapter: MockAdapter) => {
+  ordersMocks.init(mockAdapter)
+}
+
+export default {
+  init,
+}
diff --git a/src/SalesModule2/_api/_mocks/ordersMocks.ts b/src/SalesModule2/_api/_mocks/ordersMocks.ts
new file mode 100644
index 0000000..b51697c
--- /dev/null
+++ b/src/SalesModule2/_api/_mocks/ordersMocks.ts
@@ -0,0 +1,67 @@
+import uuidv4 from 'uuid/v4'
+import moment from 'moment'
+import MockAdapter from 'axios-mock-adapter'
+import ordersData from '../_data/ordersData'
+
+export default {
+  init(mock: MockAdapter) {
+    mock.onGet('/orders').reply((config: any) => {
+      console.log('request config:', config)
+
+      const matchingOrders = ordersData.list
+      const ordersRes = matchingOrders.slice(0, 49)
+
+      return [
+        200,
+        {
+          orders: ordersRes,
+          count: matchingOrders.length,
+        },
+      ]
+    })
+
+    //
+    mock.onGet(/\/orders\/.*?/).reply((config: any) => {
+      console.log('request config:', config)
+
+      const urlPaths = config.url.split('/')
+      const orderId = urlPaths[urlPaths.length - 1]
+      const order = ordersData.byId[orderId]
+
+      if (order) {
+        return [200, { ...order }]
+      } else {
+        return [404, { message: 'User not found ' }]
+      }
+    })
+
+    mock.onPut(/\/orders\/.*?/).reply((config: any) => {
+      const urlPaths = config.url.split('/')
+      const orderId = urlPaths[urlPaths.length - 1]
+      const orderData = JSON.parse(config.data)
+      const order = ordersData.byId[orderId]
+
+      if (order) {
+        return [200, { ...order, ...orderData }]
+      } else {
+        return [403, { message: 'Update not permitted' }]
+      }
+    })
+
+    mock.onPost(/\/orders/).reply((config: any) => {
+      const orderData = JSON.parse(config.data)
+      const order = {
+        ...orderData,
+        id: uuidv4(),
+        createdAt: moment().format(),
+        updatedAt: moment().format(),
+      }
+
+      return [200, order]
+    })
+
+    mock.onDelete(/\/orders\/\d+/).reply((config: any) => {
+      return [200, { message: 'Order removed' }]
+    })
+  },
+}
diff --git a/src/SalesModule2/_api/customers.ts b/src/SalesModule2/_api/customers.ts
new file mode 100644
index 0000000..61c0987
--- /dev/null
+++ b/src/SalesModule2/_api/customers.ts
@@ -0,0 +1,3 @@
+const customersService = {}
+
+export default customersService
diff --git a/src/SalesModule2/_api/index.ts b/src/SalesModule2/_api/index.ts
new file mode 100644
index 0000000..3759697
--- /dev/null
+++ b/src/SalesModule2/_api/index.ts
@@ -0,0 +1,20 @@
+import { AxiosInstance } from 'axios'
+import { ApiInitOptions } from '_api'
+
+import mocks from './_mocks'
+import orders from './orders'
+import MockAdapter from 'axios-mock-adapter/types'
+
+export interface SalesApiInitOptions extends ApiInitOptions {
+  instance: AxiosInstance
+  mockAdapter?: MockAdapter
+}
+
+const init = (options: SalesApiInitOptions) => {
+  if (options.useSampleData && options.mockAdapter) {
+    mocks.init(options.mockAdapter)
+  }
+}
+
+export default { init, orders }
+export { init, orders }
diff --git a/src/SalesModule2/_api/orders.ts b/src/SalesModule2/_api/orders.ts
new file mode 100644
index 0000000..d4db084
--- /dev/null
+++ b/src/SalesModule2/_api/orders.ts
@@ -0,0 +1,46 @@
+import { AxiosResponse } from 'axios'
+import Order, { OrderSubmissionData, OrderId } from '../_types/Order'
+import apiClient from '_api/client'
+
+export interface OrdersService {
+  getOne(orderId: OrderId): Promise<Order>
+  getList(params?: any): Promise<OrdersListResponse>
+  create(order: OrderSubmissionData): Promise<Order>
+  update(orderId: OrderId, order: OrderSubmissionData): Promise<Order>
+  remove(orderId: OrderId): Promise<any>
+}
+
+export interface OrdersListResponse {
+  orders: Order[]
+  count: number
+}
+
+const ordersService: OrdersService = {
+  getOne(orderId) {
+    return apiClient
+      .get(`/orders/${orderId}`)
+      .then((res: AxiosResponse<Order>) => res.data)
+  },
+  getList(params: any) {
+    return apiClient
+      .get(`/orders`, {
+        params,
+      })
+      .then((res: AxiosResponse<OrdersListResponse>) => res.data)
+  },
+  create(order: OrderSubmissionData) {
+    return apiClient.post(`/orders`, order).then((res: AxiosResponse<Order>) => res.data)
+  },
+  update(orderId, order) {
+    return apiClient
+      .put(`/orders/${orderId}`, order)
+      .then((res: AxiosResponse<Order>) => res.data)
+  },
+  remove(orderId) {
+    return apiClient
+      .delete(`/orders/${orderId}`)
+      .then((res: AxiosResponse<any>) => res.data)
+  },
+}
+
+export default ordersService
diff --git a/src/SalesModule2/_api/products.ts b/src/SalesModule2/_api/products.ts
new file mode 100644
index 0000000..0cba532
--- /dev/null
+++ b/src/SalesModule2/_api/products.ts
@@ -0,0 +1,3 @@
+const productsService = {}
+
+export default productsService
diff --git a/src/SalesModule2/_api/productsCategories.ts b/src/SalesModule2/_api/productsCategories.ts
new file mode 100644
index 0000000..c760c5f
--- /dev/null
+++ b/src/SalesModule2/_api/productsCategories.ts
@@ -0,0 +1,3 @@
+const productsCategoriesService = {}
+
+export default productsCategoriesService
diff --git a/src/SalesModule2/_services/.gitkeep b/src/SalesModule2/_services/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/_types/Customer.ts b/src/SalesModule2/_types/Customer.ts
new file mode 100644
index 0000000..6fc701f
--- /dev/null
+++ b/src/SalesModule2/_types/Customer.ts
@@ -0,0 +1,10 @@
+import { EntityId } from '_types/Entity'
+
+export type CustomerId = EntityId
+
+export default interface Customer {
+  id?: CustomerId
+  name?: string
+  email?: string
+  details?: object
+}
diff --git a/src/SalesModule2/_types/EntityOwned.ts b/src/SalesModule2/_types/EntityOwned.ts
new file mode 100644
index 0000000..9b97a24
--- /dev/null
+++ b/src/SalesModule2/_types/EntityOwned.ts
@@ -0,0 +1,12 @@
+import Entity, { EntityId } from '_types/Entity'
+import { UserId } from '_types/User'
+import { OrganizationId } from '_types/Organization'
+
+export type EntitiyOwnedId = EntityId
+
+// The entity may be owned by an organization or an individual user
+export default interface EntityOwned extends Entity {
+  id?: EntityId
+  ownerUserId?: UserId
+  owenrOrganizationId?: OrganizationId
+}
diff --git a/src/SalesModule2/_types/Location.ts b/src/SalesModule2/_types/Location.ts
new file mode 100644
index 0000000..9e0a203
--- /dev/null
+++ b/src/SalesModule2/_types/Location.ts
@@ -0,0 +1,12 @@
+import EntityOwned, { EntitiyOwnedId } from './EntityOwned'
+
+export type LocationId = EntitiyOwnedId
+
+export default interface Location extends EntityOwned {
+  id?: LocationId
+  location?: {
+    lat: number
+    lng: number
+  }
+  name: string
+}
diff --git a/src/SalesModule2/_types/Order.ts b/src/SalesModule2/_types/Order.ts
new file mode 100644
index 0000000..378250d
--- /dev/null
+++ b/src/SalesModule2/_types/Order.ts
@@ -0,0 +1,36 @@
+import EntityOwned, { EntitiyOwnedId } from './EntityOwned'
+
+import { PaymentId } from './Payment'
+import { ProductId } from './Product'
+
+export type OrderId = EntitiyOwnedId
+export type OrderStatus =
+  | 'received'
+  | 'preparing'
+  | 'shipped'
+  | 'delivered'
+  | 'rejected'
+  | 'refunded'
+
+export interface OrderProduct {
+  id?: ProductId
+  price?: number
+  quantity?: number
+}
+
+export interface OrderSubmissionData {
+  products?: any[]
+  customerNotes?: string
+}
+
+// Order can be owned by a single account or user
+export default interface Order extends EntityOwned {
+  id?: OrderId
+  name?: string
+  status: OrderStatus
+  customerNotes?: string
+  staffNotes?: string
+  paymentId?: PaymentId
+  products?: any[]
+  sum: number
+}
diff --git a/src/SalesModule2/_types/Payment.ts b/src/SalesModule2/_types/Payment.ts
new file mode 100644
index 0000000..30f2a85
--- /dev/null
+++ b/src/SalesModule2/_types/Payment.ts
@@ -0,0 +1,10 @@
+import { EntityId } from '_types/Entity'
+
+export type PaymentId = EntityId
+
+export default interface Payment {
+  id?: PaymentId
+  status?: string
+  transactionId?: string
+  transactionStatus?: string
+}
diff --git a/src/SalesModule2/_types/Product.ts b/src/SalesModule2/_types/Product.ts
new file mode 100644
index 0000000..eee16b1
--- /dev/null
+++ b/src/SalesModule2/_types/Product.ts
@@ -0,0 +1,25 @@
+import Entity, { EntityId } from '_types/Entity'
+import { UserId } from '_types/User'
+import { OrganizationId } from '_types/Organization'
+import ProductImage from './ProductImage'
+
+export type ProductId = EntityId
+
+export interface ProductVariation {
+  name?: string
+  price?: number
+  details?: object
+}
+
+export default interface Product extends Entity {
+  id?: ProductId
+  name: string
+  details?: object
+  description?: string
+  variations?: ProductVariation[]
+  price: number
+  priceDiscounted?: number
+  images?: ProductImage[]
+  ownerUserId?: UserId
+  ownerOrganizationId?: OrganizationId
+}
diff --git a/src/SalesModule2/_types/ProductAttachment.ts b/src/SalesModule2/_types/ProductAttachment.ts
new file mode 100644
index 0000000..775b04f
--- /dev/null
+++ b/src/SalesModule2/_types/ProductAttachment.ts
@@ -0,0 +1,7 @@
+import Entity, { EntityId } from '_types/Entity'
+
+export default interface ProductAttachment extends Entity {
+  id?: EntityId
+  name?: string
+  url?: string
+}
diff --git a/src/SalesModule2/_types/ProductCategory.ts b/src/SalesModule2/_types/ProductCategory.ts
new file mode 100644
index 0000000..8a3a307
--- /dev/null
+++ b/src/SalesModule2/_types/ProductCategory.ts
@@ -0,0 +1,11 @@
+import EntityOwned, { EntitiyOwnedId } from './EntityOwned'
+import ProductImage from './ProductImage'
+
+export type ProductCategoryId = EntitiyOwnedId
+
+export default interface Category extends EntityOwned {
+  name: string
+  description?: string
+  parentId?: EntitiyOwnedId
+  images?: ProductImage[]
+}
diff --git a/src/SalesModule2/_types/ProductImage.ts b/src/SalesModule2/_types/ProductImage.ts
new file mode 100644
index 0000000..5dbb54b
--- /dev/null
+++ b/src/SalesModule2/_types/ProductImage.ts
@@ -0,0 +1,7 @@
+import Entity, { EntityId } from '_types/Entity'
+
+export default interface ProductImage extends Entity {
+  id?: EntityId
+  name?: string
+  url?: string
+}
diff --git a/src/SalesModule2/_types/ProductToProductCategory.ts b/src/SalesModule2/_types/ProductToProductCategory.ts
new file mode 100644
index 0000000..62084b5
--- /dev/null
+++ b/src/SalesModule2/_types/ProductToProductCategory.ts
@@ -0,0 +1,7 @@
+import { ProductId } from './Product'
+import { ProductCategoryId } from './ProductCategory'
+
+export default interface ProductToProductCategory {
+  productId: ProductId
+  productCategoryId: ProductCategoryId
+}
diff --git a/src/SalesModule2/_types/Stock.ts b/src/SalesModule2/_types/Stock.ts
new file mode 100644
index 0000000..7101501
--- /dev/null
+++ b/src/SalesModule2/_types/Stock.ts
@@ -0,0 +1,8 @@
+import { ProductId } from './Product'
+import { LocationId } from './Location'
+
+export default interface Stock {
+  productId: ProductId
+  locationId?: LocationId
+  qunatity: number
+}
diff --git a/src/SalesModule2/_types/StockAction.ts b/src/SalesModule2/_types/StockAction.ts
new file mode 100644
index 0000000..bc7d9b6
--- /dev/null
+++ b/src/SalesModule2/_types/StockAction.ts
@@ -0,0 +1,9 @@
+import { ProductId } from './Product'
+import { LocationId } from './Location'
+
+export default interface StockAction {
+  productId: ProductId
+  locationId?: LocationId
+  qunatity: number
+  action: string
+}
diff --git a/src/SalesModule2/index.tsx b/src/SalesModule2/index.tsx
new file mode 100644
index 0000000..4a32d0b
--- /dev/null
+++ b/src/SalesModule2/index.tsx
@@ -0,0 +1,11 @@
+import api from './_api'
+import Sales from './Sales'
+
+export interface InitOptions {}
+
+const init = (options: InitOptions) => {}
+
+const layout = 'DashboardLayout'
+
+export { default } from './Sales'
+export { init, api, layout, Sales }

From f6ae27f70aeb37ecf40b4ca05c633622bea592c2 Mon Sep 17 00:00:00 2001
From: Gevorg Harutyunyan <gevharut@gmail.com>
Date: Sat, 17 Aug 2019 05:12:55 +0400
Subject: [PATCH 3/5] Layout rerender fix

---
 docs/references.md                      |  4 ++++
 src/AppRoute.tsx                        | 21 +++++++++++++++++++++
 src/AppRouter.tsx                       | 23 ++++++++++++++---------
 src/DemoModule/Demo.tsx                 | 15 +++++++--------
 src/EmptyModule/_api/index.ts           |  1 +
 src/EmptyModule/index.tsx               |  1 +
 src/SalesModule/Customers/Customers.tsx |  8 +++++---
 src/SalesModule/Orders/Orders.tsx       |  2 ++
 src/SalesModule/Overview/Overview.tsx   |  5 ++++-
 src/SalesModule/Sales.tsx               | 17 ++++++++++-------
 src/_layouts/BlankLayout/index.tsx      |  1 +
 src/_layouts/index.tsx                  | 15 +++++++++++++++
 12 files changed, 85 insertions(+), 28 deletions(-)
 create mode 100644 src/AppRoute.tsx
 create mode 100644 src/_layouts/index.tsx

diff --git a/docs/references.md b/docs/references.md
index f9122ed..c259fd3 100644
--- a/docs/references.md
+++ b/docs/references.md
@@ -14,6 +14,10 @@ https://www.robinwieruch.de/react-state-usereducer-usestate-usecontext/
 React with Redux and hooks
 https://medium.com/@koss_lebedev/rematch-with-hooks-50a8380c46e4
 
+Layouts
+https://stackoverflow.com/questions/33996484/using-multiple-layouts-for-react-router-components
+https://gist.github.com/avinmathew/e82fe7e757b20cb337d5219e0ab8dc2c
+
 #### TypeScript
 
 Typescript Book:
diff --git a/src/AppRoute.tsx b/src/AppRoute.tsx
new file mode 100644
index 0000000..65c0918
--- /dev/null
+++ b/src/AppRoute.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { Route } from 'react-router-dom'
+
+const AppRoute = ({ component: Component, layout: Layout, ...rest }: any) => (
+  <Route
+    {...rest}
+    render={props => {
+      if (Layout) {
+        return (
+          <Layout>
+            <Component {...props} />
+          </Layout>
+        )
+      } else {
+        return <Component {...props} />
+      }
+    }}
+  />
+)
+
+export default AppRoute
diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx
index 41db6d4..84f0ea4 100644
--- a/src/AppRouter.tsx
+++ b/src/AppRouter.tsx
@@ -13,6 +13,9 @@ import config from './_config'
 import authService from './_services/authService'
 import { useAppState, useAppStateMethods } from './_state/appState'
 
+import AppRoute from './AppRoute'
+import DashboardLayout from '_layouts/DashboardLayout'
+
 // Import application modules
 import Sales from './SalesModule'
 import Content from './ContentModule'
@@ -41,13 +44,13 @@ const LoggedInRouter = () => {
   return (
     <Switch>
       <Route exact path="/" render={() => <Redirect to="/sales/dashboard" />} />
-      <Route path={`/sales`} component={Sales} />
-      <Route path={`/content`} component={Content} />
-      <Route path={`/admin`} component={Admin} />
-      <Route path={`/profile`} component={Profile} />
-      <Route path={`/account`} component={Organization} />
-      <Route path={`/demo`} component={Demo} />
-      <Route component={NotFound} />
+      <AppRoute path={`/sales`} component={Sales} layout={DashboardLayout} />
+      <AppRoute path={`/content`} component={Content} layout={DashboardLayout} />
+      <AppRoute path={`/admin`} component={Admin} layout={DashboardLayout} />
+      <AppRoute path={`/profile`} component={Profile} layout={DashboardLayout} />
+      <AppRoute path={`/account`} component={Organization} layout={DashboardLayout} />
+      <AppRoute path={`/demo`} component={Demo} layout={DashboardLayout} />
+      <AppRoute component={NotFound} layout={DashboardLayout} />
     </Switch>
   )
 }
@@ -58,8 +61,10 @@ const AppRouterComponent: React.ComponentType<any> =
 
 const AppRouter: React.FC = () => (
   <AppRouterComponent>
-    <Route path="/auth" component={Auth} />
-    <PrivateRoute path="/" component={LoggedInRouter} />
+    <Switch>
+      <Route path="/auth" component={Auth} />
+      <PrivateRoute path="/" component={LoggedInRouter} />
+    </Switch>
   </AppRouterComponent>
 )
 
diff --git a/src/DemoModule/Demo.tsx b/src/DemoModule/Demo.tsx
index 81004ca..692bfa0 100644
--- a/src/DemoModule/Demo.tsx
+++ b/src/DemoModule/Demo.tsx
@@ -1,6 +1,7 @@
 import React from 'react'
 import { Switch, Route, RouteComponentProps } from 'react-router-dom'
 
+import AppRoute from 'AppRoute'
 import DashboardLayout from '_layouts/DashboardLayout'
 
 import Features from './Features'
@@ -12,14 +13,12 @@ export interface DemoProps extends RouteComponentProps {}
 
 const Demo: React.FC<DemoProps> = ({ match }) => {
   return (
-    <DashboardLayout>
-      <Switch>
-        <Route path={`${match.url}/features`} component={Features} />
-        <Route path={`${match.url}/docs`} component={Docs} />
-        <Route path={`${match.url}/supporters`} component={Supporters} />
-        <Route path={`${match.url}/discuss`} component={Discuss} />
-      </Switch>
-    </DashboardLayout>
+    <Switch>
+      <AppRoute path={`${match.url}/features`} component={Features} />
+      <AppRoute path={`${match.url}/docs`} component={Docs} />
+      <AppRoute path={`${match.url}/supporters`} component={Supporters} />
+      <AppRoute path={`${match.url}/discuss`} component={Discuss} />
+    </Switch>
   )
 }
 
diff --git a/src/EmptyModule/_api/index.ts b/src/EmptyModule/_api/index.ts
index e69de29..b1c6ea4 100644
--- a/src/EmptyModule/_api/index.ts
+++ b/src/EmptyModule/_api/index.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/EmptyModule/index.tsx b/src/EmptyModule/index.tsx
index e69de29..b1c6ea4 100644
--- a/src/EmptyModule/index.tsx
+++ b/src/EmptyModule/index.tsx
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule/Customers/Customers.tsx b/src/SalesModule/Customers/Customers.tsx
index 3e9f31e..febf349 100644
--- a/src/SalesModule/Customers/Customers.tsx
+++ b/src/SalesModule/Customers/Customers.tsx
@@ -2,14 +2,14 @@ import React from 'react'
 // import clsx from 'clsx'
 import { makeStyles } from '@material-ui/core/styles'
 
+// import DashboardLayout from '_layouts/DashboardLayout'
+// import { withDashboardLayout } from '_layouts'
 import PageContainer from '../../_common/PageContainer'
-
-// import Grid from '@material-ui/core/Grid'
 import Paper from '@material-ui/core/Paper'
 
 import { Theme } from '_theme'
 
-export default function Customers() {
+const Customers = () => {
   const classes = useStyles()
 
   return (
@@ -20,3 +20,5 @@ export default function Customers() {
 }
 
 const useStyles = makeStyles((theme: Theme) => ({}))
+
+export default Customers
diff --git a/src/SalesModule/Orders/Orders.tsx b/src/SalesModule/Orders/Orders.tsx
index 44090af..d494b83 100644
--- a/src/SalesModule/Orders/Orders.tsx
+++ b/src/SalesModule/Orders/Orders.tsx
@@ -6,6 +6,8 @@ import Button from '@material-ui/core/Button'
 
 // import { Theme } from '_theme'
 
+// import DashboardLayout from '_layouts/DashboardLayout'
+// import { withDashboardLayout } from '_layouts'
 import PageContainer from '../../_common/PageContainer'
 import PageToolbar from '../../_common/PageToolbar'
 
diff --git a/src/SalesModule/Overview/Overview.tsx b/src/SalesModule/Overview/Overview.tsx
index a52b514..90d5b36 100644
--- a/src/SalesModule/Overview/Overview.tsx
+++ b/src/SalesModule/Overview/Overview.tsx
@@ -5,6 +5,7 @@ import moment from 'moment'
 
 import Grid from '@material-ui/core/Grid'
 
+// import { withDashboardLayout } from '_layouts'
 import PageContainer from '../../_common/PageContainer'
 import PageToolbar from '../../_common/PageToolbar'
 
@@ -14,7 +15,7 @@ import SalesDashboardActions from './OverviewActions'
 import OrdersHistory from './OrdersHistory'
 import OrdersLatest from './OrdersLatest'
 
-export default function SalesDashboard() {
+const SalesDashboard = () => {
   const [filter, setFilter] = useState({
     dateFrom: moment()
       .subtract(14, 'day')
@@ -59,3 +60,5 @@ export default function SalesDashboard() {
 //     paddingBottom: theme.spacing(4),
 //   },
 // }))
+
+export default SalesDashboard
diff --git a/src/SalesModule/Sales.tsx b/src/SalesModule/Sales.tsx
index cbc553f..283a926 100644
--- a/src/SalesModule/Sales.tsx
+++ b/src/SalesModule/Sales.tsx
@@ -1,6 +1,7 @@
 import React from 'react'
 import { Switch, Route, RouteComponentProps } from 'react-router-dom'
 
+import AppRoute from 'AppRoute'
 import DashboardLayout from '_layouts/DashboardLayout'
 import Overview from './Overview'
 import Orders from './Orders'
@@ -10,13 +11,15 @@ export interface SalesProps extends RouteComponentProps {}
 
 const Sales = ({ match }: SalesProps) => {
   return (
-    <DashboardLayout>
-      <Switch>
-        <Route path={`${match.url}/dashboard`} component={Overview} />
-        <Route path={`${match.url}/orders`} component={Orders} />
-        <Route path={`${match.url}/customers`} component={Customers} />
-      </Switch>
-    </DashboardLayout>
+    <Switch>
+      {/* <Route path={`${match.url}/dashboard`} component={Overview} /> */}
+      {/* <Route path={`${match.url}/orders`} component={Orders} /> */}
+      {/* <Route path={`${match.url}/customers`} component={Customers} /> */}
+
+      <AppRoute path={`${match.url}/dashboard`} component={Overview} />
+      <AppRoute path={`${match.url}/orders`} component={Orders} />
+      <AppRoute path={`${match.url}/customers`} component={Customers} />
+    </Switch>
   )
 }
 
diff --git a/src/_layouts/BlankLayout/index.tsx b/src/_layouts/BlankLayout/index.tsx
index e69de29..1348e74 100644
--- a/src/_layouts/BlankLayout/index.tsx
+++ b/src/_layouts/BlankLayout/index.tsx
@@ -0,0 +1 @@
+export { default } from './BlankLayout'
diff --git a/src/_layouts/index.tsx b/src/_layouts/index.tsx
new file mode 100644
index 0000000..32170f6
--- /dev/null
+++ b/src/_layouts/index.tsx
@@ -0,0 +1,15 @@
+import React from 'react'
+import BlankLayout from './BlankLayout'
+import DashboardLayout from './DashboardLayout'
+
+const Wrapper = DashboardLayout
+
+const withDashboardLayout = (WrappedComponent: React.ComponentType<any>) => {
+  return () => (
+    <Wrapper>
+      <WrappedComponent />
+    </Wrapper>
+  )
+}
+
+export { withDashboardLayout }

From b47cfcd205ef29644fbd6eccc2a12c5b2f580bdf Mon Sep 17 00:00:00 2001
From: Gevorg Harutyunyan <gevharut@gmail.com>
Date: Sat, 17 Aug 2019 05:26:07 +0400
Subject: [PATCH 4/5] Restructure

---
 src/AppRoute.tsx          | 21 ---------------------
 src/AppRouter.tsx         | 22 +++++++++++++++++++---
 src/DemoModule/Demo.tsx   | 11 ++++-------
 src/SalesModule/Sales.tsx | 13 +++----------
 4 files changed, 26 insertions(+), 41 deletions(-)
 delete mode 100644 src/AppRoute.tsx

diff --git a/src/AppRoute.tsx b/src/AppRoute.tsx
deleted file mode 100644
index 65c0918..0000000
--- a/src/AppRoute.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react'
-import { Route } from 'react-router-dom'
-
-const AppRoute = ({ component: Component, layout: Layout, ...rest }: any) => (
-  <Route
-    {...rest}
-    render={props => {
-      if (Layout) {
-        return (
-          <Layout>
-            <Component {...props} />
-          </Layout>
-        )
-      } else {
-        return <Component {...props} />
-      }
-    }}
-  />
-)
-
-export default AppRoute
diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx
index 84f0ea4..ca9aa31 100644
--- a/src/AppRouter.tsx
+++ b/src/AppRouter.tsx
@@ -13,13 +13,12 @@ import config from './_config'
 import authService from './_services/authService'
 import { useAppState, useAppStateMethods } from './_state/appState'
 
-import AppRoute from './AppRoute'
 import DashboardLayout from '_layouts/DashboardLayout'
 
 // Import application modules
 import Sales from './SalesModule'
 import Content from './ContentModule'
-import Admin from './AdministrationModule'
+import Administration from './AdministrationModule'
 
 // Import core modules
 import Auth from './AuthModule/Auth'
@@ -46,7 +45,7 @@ const LoggedInRouter = () => {
       <Route exact path="/" render={() => <Redirect to="/sales/dashboard" />} />
       <AppRoute path={`/sales`} component={Sales} layout={DashboardLayout} />
       <AppRoute path={`/content`} component={Content} layout={DashboardLayout} />
-      <AppRoute path={`/admin`} component={Admin} layout={DashboardLayout} />
+      <AppRoute path={`/admin`} component={Administration} layout={DashboardLayout} />
       <AppRoute path={`/profile`} component={Profile} layout={DashboardLayout} />
       <AppRoute path={`/account`} component={Organization} layout={DashboardLayout} />
       <AppRoute path={`/demo`} component={Demo} layout={DashboardLayout} />
@@ -68,6 +67,23 @@ const AppRouter: React.FC = () => (
   </AppRouterComponent>
 )
 
+const AppRoute = ({ component: Component, layout: Layout, ...rest }: any) => (
+  <Route
+    {...rest}
+    render={props => {
+      if (Layout) {
+        return (
+          <Layout>
+            <Component {...props} />
+          </Layout>
+        )
+      } else {
+        return <Component {...props} />
+      }
+    }}
+  />
+)
+
 // See https://reacttraining.com/react-router/web/example/auth-workflow
 const PrivateRoute: React.FC<RouteProps> = ({
   component: Component,
diff --git a/src/DemoModule/Demo.tsx b/src/DemoModule/Demo.tsx
index 692bfa0..7918c62 100644
--- a/src/DemoModule/Demo.tsx
+++ b/src/DemoModule/Demo.tsx
@@ -1,9 +1,6 @@
 import React from 'react'
 import { Switch, Route, RouteComponentProps } from 'react-router-dom'
 
-import AppRoute from 'AppRoute'
-import DashboardLayout from '_layouts/DashboardLayout'
-
 import Features from './Features'
 import Docs from './Docs'
 import Supporters from './Supporters'
@@ -14,10 +11,10 @@ export interface DemoProps extends RouteComponentProps {}
 const Demo: React.FC<DemoProps> = ({ match }) => {
   return (
     <Switch>
-      <AppRoute path={`${match.url}/features`} component={Features} />
-      <AppRoute path={`${match.url}/docs`} component={Docs} />
-      <AppRoute path={`${match.url}/supporters`} component={Supporters} />
-      <AppRoute path={`${match.url}/discuss`} component={Discuss} />
+      <Route path={`${match.url}/features`} component={Features} />
+      <Route path={`${match.url}/docs`} component={Docs} />
+      <Route path={`${match.url}/supporters`} component={Supporters} />
+      <Route path={`${match.url}/discuss`} component={Discuss} />
     </Switch>
   )
 }
diff --git a/src/SalesModule/Sales.tsx b/src/SalesModule/Sales.tsx
index 283a926..75d428f 100644
--- a/src/SalesModule/Sales.tsx
+++ b/src/SalesModule/Sales.tsx
@@ -1,8 +1,5 @@
 import React from 'react'
 import { Switch, Route, RouteComponentProps } from 'react-router-dom'
-
-import AppRoute from 'AppRoute'
-import DashboardLayout from '_layouts/DashboardLayout'
 import Overview from './Overview'
 import Orders from './Orders'
 import Customers from './Customers'
@@ -12,13 +9,9 @@ export interface SalesProps extends RouteComponentProps {}
 const Sales = ({ match }: SalesProps) => {
   return (
     <Switch>
-      {/* <Route path={`${match.url}/dashboard`} component={Overview} /> */}
-      {/* <Route path={`${match.url}/orders`} component={Orders} /> */}
-      {/* <Route path={`${match.url}/customers`} component={Customers} /> */}
-
-      <AppRoute path={`${match.url}/dashboard`} component={Overview} />
-      <AppRoute path={`${match.url}/orders`} component={Orders} />
-      <AppRoute path={`${match.url}/customers`} component={Customers} />
+      <Route path={`${match.url}/dashboard`} component={Overview} />
+      <Route path={`${match.url}/orders`} component={Orders} />
+      <Route path={`${match.url}/customers`} component={Customers} />
     </Switch>
   )
 }

From d4394e05f7b872454d0eda02fe4b132555ee7188 Mon Sep 17 00:00:00 2001
From: Gevorg Harutyunyan <gevharut@gmail.com>
Date: Sat, 17 Aug 2019 05:30:37 +0400
Subject: [PATCH 5/5] Components renaming

---
 src/AppRouter.tsx | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx
index ca9aa31..89c00d2 100644
--- a/src/AppRouter.tsx
+++ b/src/AppRouter.tsx
@@ -43,13 +43,21 @@ const LoggedInRouter = () => {
   return (
     <Switch>
       <Route exact path="/" render={() => <Redirect to="/sales/dashboard" />} />
-      <AppRoute path={`/sales`} component={Sales} layout={DashboardLayout} />
-      <AppRoute path={`/content`} component={Content} layout={DashboardLayout} />
-      <AppRoute path={`/admin`} component={Administration} layout={DashboardLayout} />
-      <AppRoute path={`/profile`} component={Profile} layout={DashboardLayout} />
-      <AppRoute path={`/account`} component={Organization} layout={DashboardLayout} />
-      <AppRoute path={`/demo`} component={Demo} layout={DashboardLayout} />
-      <AppRoute component={NotFound} layout={DashboardLayout} />
+      <RouteWithLayout path={`/sales`} component={Sales} layout={DashboardLayout} />
+      <RouteWithLayout path={`/content`} component={Content} layout={DashboardLayout} />
+      <RouteWithLayout
+        path={`/admin`}
+        component={Administration}
+        layout={DashboardLayout}
+      />
+      <RouteWithLayout path={`/profile`} component={Profile} layout={DashboardLayout} />
+      <RouteWithLayout
+        path={`/account`}
+        component={Organization}
+        layout={DashboardLayout}
+      />
+      <RouteWithLayout path={`/demo`} component={Demo} layout={DashboardLayout} />
+      <RouteWithLayout component={NotFound} layout={DashboardLayout} />
     </Switch>
   )
 }
@@ -62,12 +70,12 @@ const AppRouter: React.FC = () => (
   <AppRouterComponent>
     <Switch>
       <Route path="/auth" component={Auth} />
-      <PrivateRoute path="/" component={LoggedInRouter} />
+      <RoutePrivate path="/" component={LoggedInRouter} />
     </Switch>
   </AppRouterComponent>
 )
 
-const AppRoute = ({ component: Component, layout: Layout, ...rest }: any) => (
+const RouteWithLayout = ({ component: Component, layout: Layout, ...rest }: any) => (
   <Route
     {...rest}
     render={props => {
@@ -85,7 +93,7 @@ const AppRoute = ({ component: Component, layout: Layout, ...rest }: any) => (
 )
 
 // See https://reacttraining.com/react-router/web/example/auth-workflow
-const PrivateRoute: React.FC<RouteProps> = ({
+const RoutePrivate: React.FC<RouteProps> = ({
   component: Component,
   ...rest
 }: RouteProps) => {