bananas-commerce-admin 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +25 -0
  2. package/dist/cjs/Admin.js +47 -0
  3. package/dist/cjs/App.js +49 -0
  4. package/dist/cjs/api.js +225 -0
  5. package/dist/cjs/components/Branding.js +41 -0
  6. package/dist/cjs/components/Hamburger.js +40 -0
  7. package/dist/cjs/components/Link.js +21 -0
  8. package/dist/cjs/components/Logo.js +25 -0
  9. package/dist/cjs/components/NavBar.js +101 -0
  10. package/dist/cjs/components/NavBarItem.js +42 -0
  11. package/dist/cjs/components/NavBarRoutes.js +47 -0
  12. package/dist/cjs/components/ProgressBar.js +14 -0
  13. package/dist/cjs/components/User.js +71 -0
  14. package/dist/cjs/containers/Content.js +16 -0
  15. package/dist/cjs/containers/ErrorScreen.js +35 -0
  16. package/dist/cjs/containers/LoadingScreen.js +84 -0
  17. package/dist/cjs/containers/PageErrorBoundary.js +43 -0
  18. package/dist/cjs/containers/PageLoader.js +123 -0
  19. package/dist/cjs/contexts/ApiContext.js +105 -0
  20. package/dist/cjs/contexts/I18nContext.js +109 -0
  21. package/dist/cjs/contexts/RouterContext.js +99 -0
  22. package/dist/cjs/contexts/UserContext.js +144 -0
  23. package/dist/cjs/extensions/bananas/components/PasswordChangeForm.js +85 -0
  24. package/dist/cjs/extensions/bananas/index.js +54 -0
  25. package/dist/cjs/extensions/bananas/pages/me/list.js +20 -0
  26. package/dist/cjs/extensions/pos/components/PurchaseRow.js +32 -0
  27. package/dist/cjs/extensions/pos/components/ReceiptCard.js +86 -0
  28. package/dist/cjs/extensions/pos/components/ReceiptLine.js +29 -0
  29. package/dist/cjs/extensions/pos/index.js +22 -0
  30. package/dist/cjs/extensions/pos/pages/purchase/detail.js +13 -0
  31. package/dist/cjs/extensions/pos/pages/purchase/list.js +34 -0
  32. package/dist/cjs/extensions/pos/types/purchase.js +2 -0
  33. package/dist/cjs/extensions/pos/types/receipt.js +2 -0
  34. package/dist/cjs/forms/LoginForm.js +63 -0
  35. package/dist/cjs/hooks/useAsyncError.js +15 -0
  36. package/dist/cjs/hooks/useLocalStorage.js +47 -0
  37. package/dist/cjs/index.js +40 -0
  38. package/dist/cjs/pages/DashboardPage.js +10 -0
  39. package/dist/cjs/pages/LoginPage.js +31 -0
  40. package/dist/cjs/router/Router.js +35 -0
  41. package/dist/cjs/router/routes.js +57 -0
  42. package/dist/cjs/types/index.js +2 -0
  43. package/dist/cjs/util/get_cookie.js +10 -0
  44. package/dist/cjs/util/index.js +62 -0
  45. package/dist/cjs/util/select_styles.js +38 -0
  46. package/dist/esm/Admin.js +42 -0
  47. package/dist/esm/App.js +44 -0
  48. package/dist/esm/api.js +219 -0
  49. package/dist/esm/components/Branding.js +36 -0
  50. package/dist/esm/components/Hamburger.js +35 -0
  51. package/dist/esm/components/Link.js +16 -0
  52. package/dist/esm/components/Logo.js +20 -0
  53. package/dist/esm/components/NavBar.js +73 -0
  54. package/dist/esm/components/NavBarItem.js +37 -0
  55. package/dist/esm/components/NavBarRoutes.js +42 -0
  56. package/dist/esm/components/ProgressBar.js +9 -0
  57. package/dist/esm/components/User.js +66 -0
  58. package/dist/esm/containers/Content.js +11 -0
  59. package/dist/esm/containers/ErrorScreen.js +30 -0
  60. package/dist/esm/containers/LoadingScreen.js +79 -0
  61. package/dist/esm/containers/PageErrorBoundary.js +38 -0
  62. package/dist/esm/containers/PageLoader.js +117 -0
  63. package/dist/esm/contexts/ApiContext.js +77 -0
  64. package/dist/esm/contexts/I18nContext.js +77 -0
  65. package/dist/esm/contexts/RouterContext.js +71 -0
  66. package/dist/esm/contexts/UserContext.js +113 -0
  67. package/dist/esm/extensions/bananas/components/PasswordChangeForm.js +80 -0
  68. package/dist/esm/extensions/bananas/index.js +48 -0
  69. package/dist/esm/extensions/bananas/pages/me/list.js +15 -0
  70. package/dist/esm/extensions/pos/components/PurchaseRow.js +25 -0
  71. package/dist/esm/extensions/pos/components/ReceiptCard.js +56 -0
  72. package/dist/esm/extensions/pos/components/ReceiptLine.js +22 -0
  73. package/dist/esm/extensions/pos/index.js +16 -0
  74. package/dist/esm/extensions/pos/pages/purchase/detail.js +8 -0
  75. package/dist/esm/extensions/pos/pages/purchase/list.js +29 -0
  76. package/dist/esm/extensions/pos/types/purchase.js +1 -0
  77. package/dist/esm/extensions/pos/types/receipt.js +1 -0
  78. package/dist/esm/forms/LoginForm.js +58 -0
  79. package/dist/esm/hooks/useAsyncError.js +9 -0
  80. package/dist/esm/hooks/useLocalStorage.js +41 -0
  81. package/dist/esm/index.js +14 -0
  82. package/dist/esm/pages/DashboardPage.js +5 -0
  83. package/dist/esm/pages/LoginPage.js +26 -0
  84. package/dist/esm/router/Router.js +28 -0
  85. package/dist/esm/router/routes.js +49 -0
  86. package/dist/esm/types/index.js +1 -0
  87. package/dist/esm/util/get_cookie.js +6 -0
  88. package/dist/esm/util/index.js +54 -0
  89. package/dist/esm/util/select_styles.js +34 -0
  90. package/dist/types/Admin.d.ts +13 -0
  91. package/dist/types/App.d.ts +13 -0
  92. package/dist/types/api.d.ts +20 -0
  93. package/dist/types/components/Branding.d.ts +14 -0
  94. package/dist/types/components/Hamburger.d.ts +8 -0
  95. package/dist/types/components/Link.d.ts +9 -0
  96. package/dist/types/components/Logo.d.ts +7 -0
  97. package/dist/types/components/NavBar.d.ts +11 -0
  98. package/dist/types/components/NavBarItem.d.ts +12 -0
  99. package/dist/types/components/NavBarRoutes.d.ts +7 -0
  100. package/dist/types/components/ProgressBar.d.ts +7 -0
  101. package/dist/types/components/User.d.ts +824 -0
  102. package/dist/types/containers/Content.d.ts +3 -0
  103. package/dist/types/containers/ErrorScreen.d.ts +7 -0
  104. package/dist/types/containers/LoadingScreen.d.ts +50 -0
  105. package/dist/types/containers/PageErrorBoundary.d.ts +16 -0
  106. package/dist/types/containers/PageLoader.d.ts +13 -0
  107. package/dist/types/contexts/ApiContext.d.ts +12 -0
  108. package/dist/types/contexts/I18nContext.d.ts +10 -0
  109. package/dist/types/contexts/RouterContext.d.ts +24 -0
  110. package/dist/types/contexts/UserContext.d.ts +20 -0
  111. package/dist/types/extensions/bananas/components/PasswordChangeForm.d.ts +3 -0
  112. package/dist/types/extensions/bananas/index.d.ts +2 -0
  113. package/dist/types/extensions/bananas/pages/me/list.d.ts +6 -0
  114. package/dist/types/extensions/pos/components/PurchaseRow.d.ts +7 -0
  115. package/dist/types/extensions/pos/components/ReceiptCard.d.ts +7 -0
  116. package/dist/types/extensions/pos/components/ReceiptLine.d.ts +7 -0
  117. package/dist/types/extensions/pos/index.d.ts +2 -0
  118. package/dist/types/extensions/pos/pages/purchase/detail.d.ts +7 -0
  119. package/dist/types/extensions/pos/pages/purchase/list.d.ts +9 -0
  120. package/dist/types/extensions/pos/types/purchase.d.ts +18 -0
  121. package/dist/types/extensions/pos/types/receipt.d.ts +34 -0
  122. package/dist/types/forms/LoginForm.d.ts +3 -0
  123. package/dist/types/hooks/useAsyncError.d.ts +1 -0
  124. package/dist/types/hooks/useLocalStorage.d.ts +2 -0
  125. package/dist/types/index.d.ts +14 -0
  126. package/dist/types/pages/DashboardPage.d.ts +5 -0
  127. package/dist/types/pages/LoginPage.d.ts +9 -0
  128. package/dist/types/router/Router.d.ts +13 -0
  129. package/dist/types/router/routes.d.ts +20 -0
  130. package/dist/types/types/index.d.ts +6 -0
  131. package/dist/types/util/get_cookie.d.ts +1 -0
  132. package/dist/types/util/index.d.ts +8 -0
  133. package/dist/types/util/select_styles.d.ts +3 -0
  134. package/example/Dockerfile +27 -0
  135. package/example/docker-compose.yml +7 -0
  136. package/example/index.html +13 -0
  137. package/example/index.tsx +21 -0
  138. package/example/package-lock.json +13167 -0
  139. package/example/package.json +52 -0
  140. package/example/pages/.gitkeep +0 -0
  141. package/example/webpack.config.js +67 -0
  142. package/package.json +52 -0
  143. package/src/Admin.tsx +94 -0
  144. package/src/App.tsx +43 -0
  145. package/src/api.ts +202 -0
  146. package/src/components/Branding.tsx +79 -0
  147. package/src/components/Hamburger.tsx +41 -0
  148. package/src/components/Link.tsx +23 -0
  149. package/src/components/Logo.tsx +57 -0
  150. package/src/components/NavBar.tsx +115 -0
  151. package/src/components/NavBarItem.tsx +73 -0
  152. package/src/components/NavBarRoutes.tsx +67 -0
  153. package/src/components/ProgressBar.tsx +30 -0
  154. package/src/components/User.tsx +97 -0
  155. package/src/containers/Content.tsx +18 -0
  156. package/src/containers/ErrorScreen.tsx +64 -0
  157. package/src/containers/LoadingScreen.tsx +135 -0
  158. package/src/containers/PageErrorBoundary.tsx +32 -0
  159. package/src/containers/PageLoader.tsx +64 -0
  160. package/src/contexts/ApiContext.tsx +55 -0
  161. package/src/contexts/I18nContext.tsx +55 -0
  162. package/src/contexts/RouterContext.tsx +127 -0
  163. package/src/contexts/UserContext.tsx +99 -0
  164. package/src/extensions/bananas/components/PasswordChangeForm.tsx +138 -0
  165. package/src/extensions/bananas/index.ts +14 -0
  166. package/src/extensions/bananas/pages/me/list.tsx +31 -0
  167. package/src/extensions/pos/components/PurchaseRow.tsx +42 -0
  168. package/src/extensions/pos/components/ReceiptCard.tsx +101 -0
  169. package/src/extensions/pos/components/ReceiptLine.tsx +51 -0
  170. package/src/extensions/pos/index.tsx +20 -0
  171. package/src/extensions/pos/pages/purchase/detail.tsx +22 -0
  172. package/src/extensions/pos/pages/purchase/list.tsx +56 -0
  173. package/src/extensions/pos/types/purchase.ts +20 -0
  174. package/src/extensions/pos/types/receipt.ts +36 -0
  175. package/src/forms/LoginForm.tsx +99 -0
  176. package/src/hooks/useAsyncError.ts +13 -0
  177. package/src/hooks/useLocalStorage.ts +42 -0
  178. package/src/index.ts +18 -0
  179. package/src/pages/DashboardPage.tsx +9 -0
  180. package/src/pages/LoginPage.tsx +50 -0
  181. package/src/router/Router.tsx +63 -0
  182. package/src/router/routes.ts +67 -0
  183. package/src/types/index.ts +4 -0
  184. package/src/types/swagger-client.d.ts +1 -0
  185. package/src/util/get_cookie.ts +6 -0
  186. package/src/util/index.ts +63 -0
  187. package/src/util/select_styles.ts +29 -0
  188. package/tsconfig.json +38 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.RouterContextProvider = exports.useRouter = void 0;
27
+ var React = __importStar(require("react"));
28
+ var react_router_dom_1 = require("react-router-dom");
29
+ var routes_1 = require("../router/routes");
30
+ var ApiContext_1 = require("./ApiContext");
31
+ var RouterContext = React.createContext({
32
+ routes: [],
33
+ getRoute: function (reverse) { return void reverse; },
34
+ navigate: function (route, options) { return void [route, options]; },
35
+ });
36
+ var useRouter = function () { return React.useContext(RouterContext); };
37
+ exports.useRouter = useRouter;
38
+ var RouterContextProvider = function (_a) {
39
+ var children = _a.children;
40
+ var routes = [];
41
+ var api = (0, ApiContext_1.useApi)();
42
+ var routerNavigate = (0, react_router_dom_1.useNavigate)();
43
+ for (var _i = 0, _b = Object.values(api.operations); _i < _b.length; _i++) {
44
+ var operation = _b[_i];
45
+ var parsedOperationId = (0, routes_1.parseOperationId)(operation.id);
46
+ if (!parsedOperationId) {
47
+ throw new TypeError("Could not parse operation id ".concat(operation.id));
48
+ }
49
+ var app = parsedOperationId.app, view = parsedOperationId.view, action = parsedOperationId.action;
50
+ var title = (0, routes_1.getTitle)(view, operation.summary);
51
+ var navigation = (0, routes_1.isNavigation)(operation.tags);
52
+ var path = (0, routes_1.getPath)(operation.endpoint, operation.method, action);
53
+ var page = (0, routes_1.getPage)(path, action);
54
+ routes.push({
55
+ id: operation.id,
56
+ app: app,
57
+ view: view,
58
+ action: action,
59
+ title: title,
60
+ navigation: navigation,
61
+ path: path,
62
+ page: page,
63
+ });
64
+ }
65
+ var getRoute = function (reverse) {
66
+ return routes.find(function (_a) {
67
+ var id = _a.id;
68
+ return reverse === id;
69
+ });
70
+ };
71
+ var navigate = function (route, options) {
72
+ var _a;
73
+ // Relative history, e.g. go back or forward x steps
74
+ if (typeof route === "number") {
75
+ routerNavigate(route);
76
+ return;
77
+ }
78
+ // Direct operation id routes, requires reversing the operation id
79
+ if (typeof route === "string") {
80
+ var routeInfo = getRoute(route);
81
+ if (routeInfo === undefined) {
82
+ throw new Error("Could not find route with reverse: ".concat(route));
83
+ }
84
+ route = routeInfo;
85
+ }
86
+ var path = route.path;
87
+ for (var _i = 0, _b = Object.entries((_a = options === null || options === void 0 ? void 0 : options.params) !== null && _a !== void 0 ? _a : {}); _i < _b.length; _i++) {
88
+ var _c = _b[_i], key = _c[0], value = _c[1];
89
+ path = path.replace(":".concat(key), encodeURIComponent(value));
90
+ }
91
+ routerNavigate({
92
+ pathname: path,
93
+ search: new URLSearchParams(options === null || options === void 0 ? void 0 : options.query).toString(),
94
+ }, { replace: options === null || options === void 0 ? void 0 : options.replace });
95
+ };
96
+ return (React.createElement(RouterContext.Provider, { value: { routes: routes, getRoute: getRoute, navigate: navigate } }, children));
97
+ };
98
+ exports.RouterContextProvider = RouterContextProvider;
99
+ exports.default = RouterContext;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (_) try {
41
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ var __importDefault = (this && this.__importDefault) || function (mod) {
62
+ return (mod && mod.__esModule) ? mod : { "default": mod };
63
+ };
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.UserContextProvider = exports.useUser = void 0;
66
+ var React = __importStar(require("react"));
67
+ var useLocalStorage_1 = __importDefault(require("../hooks/useLocalStorage"));
68
+ var ApiContext_1 = require("./ApiContext");
69
+ var UserContext = React.createContext(undefined);
70
+ var useUser = function () { return React.useContext(UserContext); };
71
+ exports.useUser = useUser;
72
+ var UserContextProvider = function (_a) {
73
+ var children = _a.children;
74
+ var api = (0, ApiContext_1.useApi)();
75
+ var _b = (0, useLocalStorage_1.default)("user", null), user = _b[0], setUser = _b[1];
76
+ React.useEffect(function () {
77
+ if (api !== undefined) {
78
+ api.isAuthenticated().then(function (authenticated) {
79
+ if (!authenticated) {
80
+ setUser(null);
81
+ }
82
+ });
83
+ }
84
+ }, [user, api]);
85
+ var login = function (username, password) { return __awaiter(void 0, void 0, void 0, function () {
86
+ var response, user_1;
87
+ return __generator(this, function (_a) {
88
+ switch (_a.label) {
89
+ case 0: return [4 /*yield*/, (api === null || api === void 0 ? void 0 : api.operations["bananas.login:create"].call({
90
+ body: { username: username, password: password },
91
+ }))];
92
+ case 1:
93
+ response = _a.sent();
94
+ if (!(response !== undefined && response.ok)) return [3 /*break*/, 3];
95
+ return [4 /*yield*/, response.json()];
96
+ case 2:
97
+ user_1 = _a.sent();
98
+ setUser(user_1);
99
+ return [2 /*return*/, user_1];
100
+ case 3:
101
+ setUser(null);
102
+ return [2 /*return*/, null];
103
+ }
104
+ });
105
+ }); };
106
+ var changePassword = function (oldPassword, newPassword1, newPassword2) { return __awaiter(void 0, void 0, void 0, function () {
107
+ var response;
108
+ return __generator(this, function (_a) {
109
+ switch (_a.label) {
110
+ case 0: return [4 /*yield*/, (api === null || api === void 0 ? void 0 : api.operations["bananas.change_password:create"].call({
111
+ body: {
112
+ old_password: oldPassword,
113
+ new_password1: newPassword1,
114
+ new_password2: newPassword2,
115
+ },
116
+ }))];
117
+ case 1:
118
+ response = _a.sent();
119
+ if (!response.ok) {
120
+ throw new Error("Failed to change password");
121
+ }
122
+ return [2 /*return*/];
123
+ }
124
+ });
125
+ }); };
126
+ var logout = function () { return __awaiter(void 0, void 0, void 0, function () {
127
+ var response;
128
+ return __generator(this, function (_a) {
129
+ switch (_a.label) {
130
+ case 0: return [4 /*yield*/, (api === null || api === void 0 ? void 0 : api.operations["bananas.logout:create"].call())];
131
+ case 1:
132
+ response = _a.sent();
133
+ if (response !== undefined && response.ok) {
134
+ setUser(null);
135
+ return [2 /*return*/];
136
+ }
137
+ throw new Error("Could not log out");
138
+ }
139
+ });
140
+ }); };
141
+ return (React.createElement(UserContext.Provider, { value: { user: user, login: login, logout: logout, changePassword: changePassword } }, children));
142
+ };
143
+ exports.UserContextProvider = UserContextProvider;
144
+ exports.default = UserContext;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var notistack_1 = require("notistack");
18
+ var react_1 = __importDefault(require("react"));
19
+ var Box_1 = __importDefault(require("@mui/material/Box"));
20
+ var FormControl_1 = __importDefault(require("@mui/material/FormControl"));
21
+ var FormGroup_1 = __importDefault(require("@mui/material/FormGroup"));
22
+ var FormLabel_1 = __importDefault(require("@mui/material/FormLabel"));
23
+ var styles_1 = require("@mui/material/styles");
24
+ var TextField_1 = __importDefault(require("@mui/material/TextField"));
25
+ var Typography_1 = __importDefault(require("@mui/material/Typography"));
26
+ var ApiContext_1 = require("../../../contexts/ApiContext");
27
+ var I18nContext_1 = require("../../../contexts/I18nContext");
28
+ var UserContext_1 = require("../../../contexts/UserContext");
29
+ var LoadingButton_1 = __importDefault(require("@mui/lab/LoadingButton"));
30
+ var PasswordChangeForm = function () {
31
+ var theme = (0, styles_1.useTheme)();
32
+ var t = (0, I18nContext_1.useI18n)().t;
33
+ var api = (0, ApiContext_1.useApi)();
34
+ var enqueueSnackbar = (0, notistack_1.useSnackbar)().enqueueSnackbar;
35
+ var _a = react_1.default.useState(false), loading = _a[0], setLoading = _a[1];
36
+ var operation = api.operations["bananas.change_password:create"];
37
+ var properties = operation.request.body.schema.properties;
38
+ var _b = react_1.default.useState({
39
+ "old_password": "",
40
+ "new_password1": "",
41
+ "new_password2": "",
42
+ }), fields = _b[0], setFields = _b[1];
43
+ var changePassword = (0, UserContext_1.useUser)().changePassword;
44
+ var onSubmit = function (event) {
45
+ event.preventDefault();
46
+ setLoading(true);
47
+ changePassword(fields.old_password, fields.new_password1, fields.new_password2).then(function () {
48
+ enqueueSnackbar(t("Password changed successfully."), {
49
+ variant: "success",
50
+ });
51
+ setFields({
52
+ "old_password": "",
53
+ "new_password1": "",
54
+ "new_password2": "",
55
+ });
56
+ }).catch(function () {
57
+ enqueueSnackbar(t("Incorrect authentication credentials."), {
58
+ variant: "error",
59
+ });
60
+ }).finally(function () { return setLoading(false); });
61
+ };
62
+ var onChange = function (event) {
63
+ var _a;
64
+ setFields(__assign(__assign({}, fields), (_a = {}, _a[event.target.name] = event.target.value, _a)));
65
+ };
66
+ return (react_1.default.createElement(Box_1.default, { component: "form", onSubmit: onSubmit, sx: {
67
+ maxWidth: 350,
68
+ }, "data-testid": "change-password-form" },
69
+ react_1.default.createElement(FormLabel_1.default, { component: "legend", sx: {
70
+ marginBottom: theme.spacing(2),
71
+ } }, operation.summary),
72
+ react_1.default.createElement(Typography_1.default, null, t("Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly.")),
73
+ react_1.default.createElement(FormControl_1.default, { fullWidth: true, component: "fieldset" },
74
+ react_1.default.createElement(FormGroup_1.default, null, ["old_password", "new_password1", "new_password2"].map(function (field) { return (react_1.default.createElement(TextField_1.default, { key: field, autoComplete: field, sx: {
75
+ marginTop: theme.spacing(3),
76
+ }, label: properties[field].title, inputProps: { "aria-label": properties[field].title }, name: field, value: fields[field], type: "password", onChange: onChange, fullWidth: true, required: true, color: "secondary" })); }))),
77
+ react_1.default.createElement(FormControl_1.default, { fullWidth: true, margin: "normal", sx: {
78
+ marginTop: theme.spacing(3),
79
+ marginBottom: 0,
80
+ } },
81
+ react_1.default.createElement(LoadingButton_1.default, { sx: {
82
+ margin: "auto",
83
+ }, variant: "outlined", type: "submit", color: "secondary", fullWidth: true, "aria-label": "login", loading: loading }, t("Change my password")))));
84
+ };
85
+ exports.default = PasswordChangeForm;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.bananasRouterExtension = void 0;
43
+ var list_1 = __importDefault(require("./pages/me/list"));
44
+ exports.bananasRouterExtension = {
45
+ app: "bananas",
46
+ pages: function (route) { return __awaiter(void 0, void 0, void 0, function () {
47
+ return __generator(this, function (_a) {
48
+ if (route.view === "me" && route.action === "list") {
49
+ return [2 /*return*/, list_1.default];
50
+ }
51
+ throw new Error("Unknown bananas page");
52
+ });
53
+ }); },
54
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var Paper_1 = __importDefault(require("@mui/material/Paper"));
7
+ var styles_1 = require("@mui/material/styles");
8
+ var react_1 = __importDefault(require("react"));
9
+ var Content_1 = __importDefault(require("../../../../containers/Content"));
10
+ var PasswordChangeForm_1 = __importDefault(require("../../components/PasswordChangeForm"));
11
+ var MePage = function (_a) {
12
+ var theme = (0, styles_1.useTheme)();
13
+ return (react_1.default.createElement(Content_1.default, null,
14
+ react_1.default.createElement(Paper_1.default, { sx: {
15
+ padding: theme.spacing(3),
16
+ alignSelf: "flex-start",
17
+ }, elevation: 1, square: true },
18
+ react_1.default.createElement(PasswordChangeForm_1.default, null))));
19
+ };
20
+ exports.default = MePage;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PurchaseRow = void 0;
7
+ var material_1 = require("@mui/material");
8
+ var react_1 = __importDefault(require("react"));
9
+ var RouterContext_1 = require("../../../contexts/RouterContext");
10
+ var PurchaseRow = function (_a) {
11
+ var purchase = _a.purchase;
12
+ var navigate = (0, RouterContext_1.useRouter)().navigate;
13
+ var onClick = function () {
14
+ navigate("pos.purchase:detail", {
15
+ params: {
16
+ purchase_number: purchase.number,
17
+ },
18
+ });
19
+ };
20
+ var purchaseNumber = purchase.number
21
+ ? "#".concat(purchase.number.toString().padStart(4, "0"))
22
+ : "-";
23
+ return (react_1.default.createElement(material_1.TableRow, { onClick: onClick, hover: true },
24
+ react_1.default.createElement(material_1.TableCell, null, purchaseNumber),
25
+ react_1.default.createElement(material_1.TableCell, null, purchase.email),
26
+ react_1.default.createElement(material_1.TableCell, null),
27
+ react_1.default.createElement(material_1.TableCell, null, "1337 SEK"),
28
+ react_1.default.createElement(material_1.TableCell, null, "Betald"),
29
+ react_1.default.createElement(material_1.TableCell, null, new Date(purchase.date_initiated).toLocaleString()),
30
+ react_1.default.createElement(material_1.TableCell, null, "-")));
31
+ };
32
+ exports.PurchaseRow = PurchaseRow;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
26
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
27
+ if (ar || !(i in from)) {
28
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
29
+ ar[i] = from[i];
30
+ }
31
+ }
32
+ return to.concat(ar || Array.prototype.slice.call(from));
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.ReceiptCard = void 0;
39
+ var Card_1 = __importDefault(require("@mui/material/Card"));
40
+ var react_1 = __importDefault(require("react"));
41
+ var CardHeader_1 = __importDefault(require("@mui/material/CardHeader"));
42
+ var List_1 = __importDefault(require("@mui/material/List"));
43
+ var ReceiptLine_1 = require("./ReceiptLine");
44
+ var Divider_1 = __importDefault(require("@mui/material/Divider"));
45
+ var CardContent_1 = __importDefault(require("@mui/material/CardContent"));
46
+ var TableContainer_1 = __importDefault(require("@mui/material/TableContainer"));
47
+ var Table_1 = __importDefault(require("@mui/material/Table"));
48
+ var TableBody_1 = __importDefault(require("@mui/material/TableBody"));
49
+ var TableRow_1 = __importDefault(require("@mui/material/TableRow"));
50
+ var TableCell_1 = __importStar(require("@mui/material/TableCell"));
51
+ var styles_1 = require("@mui/material/styles");
52
+ var ReceiptPriceRow = function (_a) {
53
+ var title = _a.title, price = _a.price;
54
+ return (react_1.default.createElement(TableRow_1.default, null,
55
+ react_1.default.createElement(TableCell_1.default, { align: "right", sx: { width: "75%" } },
56
+ react_1.default.createElement("strong", null, title)),
57
+ react_1.default.createElement(TableCell_1.default, { align: "right" }, "".concat(price, " SEK"))));
58
+ };
59
+ var ReceiptCard = function (_a) {
60
+ var _b;
61
+ var receipt = _a.receipt;
62
+ var theme = (0, styles_1.useTheme)();
63
+ return (react_1.default.createElement(Card_1.default, { sx: { width: 550 } },
64
+ react_1.default.createElement(CardHeader_1.default, { title: "Receipt" }),
65
+ react_1.default.createElement(CardContent_1.default, null,
66
+ react_1.default.createElement(Divider_1.default, null),
67
+ react_1.default.createElement(List_1.default, { sx: {
68
+ width: "100%",
69
+ } }, receipt.lines.map(function (line) { return (react_1.default.createElement(ReceiptLine_1.ReceiptLine, { key: line.reference, line: line })); }).reduce(function (prev, curr, index) { return __spreadArray(__spreadArray([], prev, true), [react_1.default.createElement(Divider_1.default, { key: index, light: true }), curr], false); }, [])
70
+ .slice(1)),
71
+ react_1.default.createElement(Divider_1.default, null),
72
+ react_1.default.createElement(TableContainer_1.default, { sx: {
73
+ paddingTop: theme.spacing(2),
74
+ paddingX: theme.spacing(4),
75
+ } },
76
+ react_1.default.createElement(Table_1.default, { padding: "none", sx: (_b = {},
77
+ _b["& .".concat(TableCell_1.tableCellClasses.root)] = {
78
+ borderBottom: "none",
79
+ },
80
+ _b) },
81
+ react_1.default.createElement(TableBody_1.default, { sx: { border: "none" } },
82
+ react_1.default.createElement(ReceiptPriceRow, { title: "Discount", price: receipt.total_discount_amount }),
83
+ react_1.default.createElement(ReceiptPriceRow, { title: "Tax", price: receipt.total_tax_amount }),
84
+ react_1.default.createElement(ReceiptPriceRow, { title: "Total", price: receipt.total_amount })))))));
85
+ };
86
+ exports.ReceiptCard = ReceiptCard;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ReceiptLine = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var ListItem_1 = __importDefault(require("@mui/material/ListItem"));
9
+ var ListItemText_1 = __importDefault(require("@mui/material/ListItemText"));
10
+ var Typography_1 = __importDefault(require("@mui/material/Typography"));
11
+ var Tooltip_1 = __importDefault(require("@mui/material/Tooltip"));
12
+ var ReceiptLine = function (_a) {
13
+ var line = _a.line;
14
+ return (react_1.default.createElement(ListItem_1.default, { sx: { display: "flex", flexDirection: "line", alignItems: "baseline" } },
15
+ react_1.default.createElement(ListItemText_1.default, { sx: { width: "50%" }, primary: line.title, secondary: line.reference }),
16
+ react_1.default.createElement(Tooltip_1.default, { title: "Quantity" },
17
+ react_1.default.createElement(ListItemText_1.default, { sx: { width: "20%" }, primary: "".concat(line.quantity, " st") })),
18
+ react_1.default.createElement(ListItemText_1.default, { disableTypography: true, sx: { width: "30%" }, primary: react_1.default.createElement(Tooltip_1.default, { title: "Price" },
19
+ react_1.default.createElement(Typography_1.default, null, "".concat(line.total_amount, " SEK"))), secondary: react_1.default.createElement(react_1.default.Fragment, null,
20
+ react_1.default.createElement(Tooltip_1.default, { title: "Tax" },
21
+ react_1.default.createElement(Typography_1.default, null,
22
+ line.total_tax_amount,
23
+ " SEK")),
24
+ react_1.default.createElement(Tooltip_1.default, { title: "Discount" },
25
+ react_1.default.createElement(Typography_1.default, null,
26
+ line.total_discount_amount,
27
+ " SEK"))) })));
28
+ };
29
+ exports.ReceiptLine = ReceiptLine;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.posRouterExtension = void 0;
7
+ var detail_1 = __importDefault(require("./pages/purchase/detail"));
8
+ var list_1 = __importDefault(require("./pages/purchase/list"));
9
+ exports.posRouterExtension = {
10
+ app: "pos",
11
+ pages: function (route) {
12
+ if (route.view === "purchase") {
13
+ switch (route.action) {
14
+ case "list":
15
+ return list_1.default;
16
+ case "detail":
17
+ return detail_1.default;
18
+ }
19
+ }
20
+ throw new Error("Unknown pos page");
21
+ },
22
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = __importDefault(require("react"));
7
+ var ReceiptCard_1 = require("../../components/ReceiptCard");
8
+ var Content_1 = __importDefault(require("../../../../containers/Content"));
9
+ var PurchaseDetailPage = function (_a) {
10
+ var data = _a.data;
11
+ return (react_1.default.createElement(Content_1.default, null, data === null || data === void 0 ? void 0 : data.receipts.map(function (receipt, i) { return (react_1.default.createElement(ReceiptCard_1.ReceiptCard, { key: i, receipt: receipt })); })));
12
+ };
13
+ exports.default = PurchaseDetailPage;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = __importDefault(require("react"));
7
+ var TableContainer_1 = __importDefault(require("@mui/material/TableContainer"));
8
+ var Table_1 = __importDefault(require("@mui/material/Table"));
9
+ var TableHead_1 = __importDefault(require("@mui/material/TableHead"));
10
+ var TableBody_1 = __importDefault(require("@mui/material/TableBody"));
11
+ var TableCell_1 = __importDefault(require("@mui/material/TableCell"));
12
+ var Box_1 = __importDefault(require("@mui/material/Box"));
13
+ var PurchaseRow_1 = require("../../components/PurchaseRow");
14
+ var Paper_1 = __importDefault(require("@mui/material/Paper"));
15
+ var TableRow_1 = __importDefault(require("@mui/material/TableRow"));
16
+ var Content_1 = __importDefault(require("../../../../containers/Content"));
17
+ var PurchaseListPage = function (_a) {
18
+ var data = _a.data;
19
+ return (react_1.default.createElement(Content_1.default, null,
20
+ react_1.default.createElement(Box_1.default, { sx: { width: "100%" } },
21
+ react_1.default.createElement(TableContainer_1.default, { component: Paper_1.default },
22
+ react_1.default.createElement(Table_1.default, null,
23
+ react_1.default.createElement(TableHead_1.default, null,
24
+ react_1.default.createElement(TableRow_1.default, null,
25
+ react_1.default.createElement(TableCell_1.default, null, "Purchase#"),
26
+ react_1.default.createElement(TableCell_1.default, null, "Kund"),
27
+ react_1.default.createElement(TableCell_1.default, null, "Adress"),
28
+ react_1.default.createElement(TableCell_1.default, null, "Orderv\u00E4rde"),
29
+ react_1.default.createElement(TableCell_1.default, null, "Betalstatus"),
30
+ react_1.default.createElement(TableCell_1.default, null, "Orderdatum"),
31
+ react_1.default.createElement(TableCell_1.default, null, "Leveransdatum"))),
32
+ react_1.default.createElement(TableBody_1.default, null, data === null || data === void 0 ? void 0 : data.results.map(function (purchase) { return (react_1.default.createElement(PurchaseRow_1.PurchaseRow, { key: purchase.number, purchase: purchase })); })))))));
33
+ };
34
+ exports.default = PurchaseListPage;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });