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.
- package/README.md +25 -0
- package/dist/cjs/Admin.js +47 -0
- package/dist/cjs/App.js +49 -0
- package/dist/cjs/api.js +225 -0
- package/dist/cjs/components/Branding.js +41 -0
- package/dist/cjs/components/Hamburger.js +40 -0
- package/dist/cjs/components/Link.js +21 -0
- package/dist/cjs/components/Logo.js +25 -0
- package/dist/cjs/components/NavBar.js +101 -0
- package/dist/cjs/components/NavBarItem.js +42 -0
- package/dist/cjs/components/NavBarRoutes.js +47 -0
- package/dist/cjs/components/ProgressBar.js +14 -0
- package/dist/cjs/components/User.js +71 -0
- package/dist/cjs/containers/Content.js +16 -0
- package/dist/cjs/containers/ErrorScreen.js +35 -0
- package/dist/cjs/containers/LoadingScreen.js +84 -0
- package/dist/cjs/containers/PageErrorBoundary.js +43 -0
- package/dist/cjs/containers/PageLoader.js +123 -0
- package/dist/cjs/contexts/ApiContext.js +105 -0
- package/dist/cjs/contexts/I18nContext.js +109 -0
- package/dist/cjs/contexts/RouterContext.js +99 -0
- package/dist/cjs/contexts/UserContext.js +144 -0
- package/dist/cjs/extensions/bananas/components/PasswordChangeForm.js +85 -0
- package/dist/cjs/extensions/bananas/index.js +54 -0
- package/dist/cjs/extensions/bananas/pages/me/list.js +20 -0
- package/dist/cjs/extensions/pos/components/PurchaseRow.js +32 -0
- package/dist/cjs/extensions/pos/components/ReceiptCard.js +86 -0
- package/dist/cjs/extensions/pos/components/ReceiptLine.js +29 -0
- package/dist/cjs/extensions/pos/index.js +22 -0
- package/dist/cjs/extensions/pos/pages/purchase/detail.js +13 -0
- package/dist/cjs/extensions/pos/pages/purchase/list.js +34 -0
- package/dist/cjs/extensions/pos/types/purchase.js +2 -0
- package/dist/cjs/extensions/pos/types/receipt.js +2 -0
- package/dist/cjs/forms/LoginForm.js +63 -0
- package/dist/cjs/hooks/useAsyncError.js +15 -0
- package/dist/cjs/hooks/useLocalStorage.js +47 -0
- package/dist/cjs/index.js +40 -0
- package/dist/cjs/pages/DashboardPage.js +10 -0
- package/dist/cjs/pages/LoginPage.js +31 -0
- package/dist/cjs/router/Router.js +35 -0
- package/dist/cjs/router/routes.js +57 -0
- package/dist/cjs/types/index.js +2 -0
- package/dist/cjs/util/get_cookie.js +10 -0
- package/dist/cjs/util/index.js +62 -0
- package/dist/cjs/util/select_styles.js +38 -0
- package/dist/esm/Admin.js +42 -0
- package/dist/esm/App.js +44 -0
- package/dist/esm/api.js +219 -0
- package/dist/esm/components/Branding.js +36 -0
- package/dist/esm/components/Hamburger.js +35 -0
- package/dist/esm/components/Link.js +16 -0
- package/dist/esm/components/Logo.js +20 -0
- package/dist/esm/components/NavBar.js +73 -0
- package/dist/esm/components/NavBarItem.js +37 -0
- package/dist/esm/components/NavBarRoutes.js +42 -0
- package/dist/esm/components/ProgressBar.js +9 -0
- package/dist/esm/components/User.js +66 -0
- package/dist/esm/containers/Content.js +11 -0
- package/dist/esm/containers/ErrorScreen.js +30 -0
- package/dist/esm/containers/LoadingScreen.js +79 -0
- package/dist/esm/containers/PageErrorBoundary.js +38 -0
- package/dist/esm/containers/PageLoader.js +117 -0
- package/dist/esm/contexts/ApiContext.js +77 -0
- package/dist/esm/contexts/I18nContext.js +77 -0
- package/dist/esm/contexts/RouterContext.js +71 -0
- package/dist/esm/contexts/UserContext.js +113 -0
- package/dist/esm/extensions/bananas/components/PasswordChangeForm.js +80 -0
- package/dist/esm/extensions/bananas/index.js +48 -0
- package/dist/esm/extensions/bananas/pages/me/list.js +15 -0
- package/dist/esm/extensions/pos/components/PurchaseRow.js +25 -0
- package/dist/esm/extensions/pos/components/ReceiptCard.js +56 -0
- package/dist/esm/extensions/pos/components/ReceiptLine.js +22 -0
- package/dist/esm/extensions/pos/index.js +16 -0
- package/dist/esm/extensions/pos/pages/purchase/detail.js +8 -0
- package/dist/esm/extensions/pos/pages/purchase/list.js +29 -0
- package/dist/esm/extensions/pos/types/purchase.js +1 -0
- package/dist/esm/extensions/pos/types/receipt.js +1 -0
- package/dist/esm/forms/LoginForm.js +58 -0
- package/dist/esm/hooks/useAsyncError.js +9 -0
- package/dist/esm/hooks/useLocalStorage.js +41 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/pages/DashboardPage.js +5 -0
- package/dist/esm/pages/LoginPage.js +26 -0
- package/dist/esm/router/Router.js +28 -0
- package/dist/esm/router/routes.js +49 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/util/get_cookie.js +6 -0
- package/dist/esm/util/index.js +54 -0
- package/dist/esm/util/select_styles.js +34 -0
- package/dist/types/Admin.d.ts +13 -0
- package/dist/types/App.d.ts +13 -0
- package/dist/types/api.d.ts +20 -0
- package/dist/types/components/Branding.d.ts +14 -0
- package/dist/types/components/Hamburger.d.ts +8 -0
- package/dist/types/components/Link.d.ts +9 -0
- package/dist/types/components/Logo.d.ts +7 -0
- package/dist/types/components/NavBar.d.ts +11 -0
- package/dist/types/components/NavBarItem.d.ts +12 -0
- package/dist/types/components/NavBarRoutes.d.ts +7 -0
- package/dist/types/components/ProgressBar.d.ts +7 -0
- package/dist/types/components/User.d.ts +824 -0
- package/dist/types/containers/Content.d.ts +3 -0
- package/dist/types/containers/ErrorScreen.d.ts +7 -0
- package/dist/types/containers/LoadingScreen.d.ts +50 -0
- package/dist/types/containers/PageErrorBoundary.d.ts +16 -0
- package/dist/types/containers/PageLoader.d.ts +13 -0
- package/dist/types/contexts/ApiContext.d.ts +12 -0
- package/dist/types/contexts/I18nContext.d.ts +10 -0
- package/dist/types/contexts/RouterContext.d.ts +24 -0
- package/dist/types/contexts/UserContext.d.ts +20 -0
- package/dist/types/extensions/bananas/components/PasswordChangeForm.d.ts +3 -0
- package/dist/types/extensions/bananas/index.d.ts +2 -0
- package/dist/types/extensions/bananas/pages/me/list.d.ts +6 -0
- package/dist/types/extensions/pos/components/PurchaseRow.d.ts +7 -0
- package/dist/types/extensions/pos/components/ReceiptCard.d.ts +7 -0
- package/dist/types/extensions/pos/components/ReceiptLine.d.ts +7 -0
- package/dist/types/extensions/pos/index.d.ts +2 -0
- package/dist/types/extensions/pos/pages/purchase/detail.d.ts +7 -0
- package/dist/types/extensions/pos/pages/purchase/list.d.ts +9 -0
- package/dist/types/extensions/pos/types/purchase.d.ts +18 -0
- package/dist/types/extensions/pos/types/receipt.d.ts +34 -0
- package/dist/types/forms/LoginForm.d.ts +3 -0
- package/dist/types/hooks/useAsyncError.d.ts +1 -0
- package/dist/types/hooks/useLocalStorage.d.ts +2 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/pages/DashboardPage.d.ts +5 -0
- package/dist/types/pages/LoginPage.d.ts +9 -0
- package/dist/types/router/Router.d.ts +13 -0
- package/dist/types/router/routes.d.ts +20 -0
- package/dist/types/types/index.d.ts +6 -0
- package/dist/types/util/get_cookie.d.ts +1 -0
- package/dist/types/util/index.d.ts +8 -0
- package/dist/types/util/select_styles.d.ts +3 -0
- package/example/Dockerfile +27 -0
- package/example/docker-compose.yml +7 -0
- package/example/index.html +13 -0
- package/example/index.tsx +21 -0
- package/example/package-lock.json +13167 -0
- package/example/package.json +52 -0
- package/example/pages/.gitkeep +0 -0
- package/example/webpack.config.js +67 -0
- package/package.json +52 -0
- package/src/Admin.tsx +94 -0
- package/src/App.tsx +43 -0
- package/src/api.ts +202 -0
- package/src/components/Branding.tsx +79 -0
- package/src/components/Hamburger.tsx +41 -0
- package/src/components/Link.tsx +23 -0
- package/src/components/Logo.tsx +57 -0
- package/src/components/NavBar.tsx +115 -0
- package/src/components/NavBarItem.tsx +73 -0
- package/src/components/NavBarRoutes.tsx +67 -0
- package/src/components/ProgressBar.tsx +30 -0
- package/src/components/User.tsx +97 -0
- package/src/containers/Content.tsx +18 -0
- package/src/containers/ErrorScreen.tsx +64 -0
- package/src/containers/LoadingScreen.tsx +135 -0
- package/src/containers/PageErrorBoundary.tsx +32 -0
- package/src/containers/PageLoader.tsx +64 -0
- package/src/contexts/ApiContext.tsx +55 -0
- package/src/contexts/I18nContext.tsx +55 -0
- package/src/contexts/RouterContext.tsx +127 -0
- package/src/contexts/UserContext.tsx +99 -0
- package/src/extensions/bananas/components/PasswordChangeForm.tsx +138 -0
- package/src/extensions/bananas/index.ts +14 -0
- package/src/extensions/bananas/pages/me/list.tsx +31 -0
- package/src/extensions/pos/components/PurchaseRow.tsx +42 -0
- package/src/extensions/pos/components/ReceiptCard.tsx +101 -0
- package/src/extensions/pos/components/ReceiptLine.tsx +51 -0
- package/src/extensions/pos/index.tsx +20 -0
- package/src/extensions/pos/pages/purchase/detail.tsx +22 -0
- package/src/extensions/pos/pages/purchase/list.tsx +56 -0
- package/src/extensions/pos/types/purchase.ts +20 -0
- package/src/extensions/pos/types/receipt.ts +36 -0
- package/src/forms/LoginForm.tsx +99 -0
- package/src/hooks/useAsyncError.ts +13 -0
- package/src/hooks/useLocalStorage.ts +42 -0
- package/src/index.ts +18 -0
- package/src/pages/DashboardPage.tsx +9 -0
- package/src/pages/LoginPage.tsx +50 -0
- package/src/router/Router.tsx +63 -0
- package/src/router/routes.ts +67 -0
- package/src/types/index.ts +4 -0
- package/src/types/swagger-client.d.ts +1 -0
- package/src/util/get_cookie.ts +6 -0
- package/src/util/index.ts +63 -0
- package/src/util/select_styles.ts +29 -0
- package/tsconfig.json +38 -0
|
@@ -0,0 +1,47 @@
|
|
|
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 List_1 = __importDefault(require("@mui/material/List"));
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var RouterContext_1 = require("../contexts/RouterContext");
|
|
9
|
+
var NavBarItem_1 = __importDefault(require("./NavBarItem"));
|
|
10
|
+
function groupRoutesByApp(routes) {
|
|
11
|
+
var _a;
|
|
12
|
+
var _b;
|
|
13
|
+
var groupedRoutes = {};
|
|
14
|
+
for (var _i = 0, routes_1 = routes; _i < routes_1.length; _i++) {
|
|
15
|
+
var route = routes_1[_i];
|
|
16
|
+
(_a = groupedRoutes[_b = route.app]) !== null && _a !== void 0 ? _a : (groupedRoutes[_b] = []);
|
|
17
|
+
groupedRoutes[route.app].push(route);
|
|
18
|
+
}
|
|
19
|
+
return groupedRoutes;
|
|
20
|
+
}
|
|
21
|
+
var NavBarRoutes = function (_a) {
|
|
22
|
+
var nav = _a.nav, open = _a.open;
|
|
23
|
+
var routes = (0, RouterContext_1.useRouter)().routes;
|
|
24
|
+
var navItems = react_1.default.useMemo(function () {
|
|
25
|
+
var apps = [];
|
|
26
|
+
var groupedRoutes = groupRoutesByApp(routes);
|
|
27
|
+
for (var _i = 0, _a = Object.keys(groupedRoutes); _i < _a.length; _i++) {
|
|
28
|
+
var app = _a[_i];
|
|
29
|
+
var appRoutes = groupedRoutes[app];
|
|
30
|
+
var appItems = [];
|
|
31
|
+
for (var _b = 0, appRoutes_1 = appRoutes; _b < appRoutes_1.length; _b++) {
|
|
32
|
+
var route = appRoutes_1[_b];
|
|
33
|
+
if (route.navigation) {
|
|
34
|
+
appItems.push(react_1.default.createElement(NavBarItem_1.default, { key: route.id, route: route, title: route.title, open: open }));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
apps.push(react_1.default.createElement(List_1.default, { key: app }, appItems));
|
|
38
|
+
}
|
|
39
|
+
return apps;
|
|
40
|
+
}, [
|
|
41
|
+
routes,
|
|
42
|
+
nav,
|
|
43
|
+
open,
|
|
44
|
+
]);
|
|
45
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, navItems));
|
|
46
|
+
};
|
|
47
|
+
exports.default = NavBarRoutes;
|
|
@@ -0,0 +1,14 @@
|
|
|
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 material_1 = require("@mui/material");
|
|
8
|
+
var ProgressBar = function (_a) {
|
|
9
|
+
var loading = _a.loading, color = _a.color;
|
|
10
|
+
loading !== null && loading !== void 0 ? loading : (loading = true);
|
|
11
|
+
color !== null && color !== void 0 ? color : (color = "secondary");
|
|
12
|
+
return (loading && react_1.default.createElement(material_1.LinearProgress, { color: color }));
|
|
13
|
+
};
|
|
14
|
+
exports.default = ProgressBar;
|
|
@@ -0,0 +1,71 @@
|
|
|
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 react_1 = __importDefault(require("react"));
|
|
18
|
+
var AccountCircle_1 = __importDefault(require("@mui/icons-material/AccountCircle"));
|
|
19
|
+
var ButtonBase_1 = __importDefault(require("@mui/material/ButtonBase"));
|
|
20
|
+
var List_1 = __importDefault(require("@mui/material/List"));
|
|
21
|
+
var styles_1 = require("@mui/material/styles");
|
|
22
|
+
var Typography_1 = __importDefault(require("@mui/material/Typography"));
|
|
23
|
+
var UserContext_1 = require("../contexts/UserContext");
|
|
24
|
+
var NavBarItem_1 = __importDefault(require("./NavBarItem"));
|
|
25
|
+
var select_styles_1 = require("../util/select_styles");
|
|
26
|
+
var RouterContext_1 = require("../contexts/RouterContext");
|
|
27
|
+
var styles = function (theme) { return ({
|
|
28
|
+
root: __assign({ display: "flex", padding: 0, borderTopWidth: 1, borderTopStyle: "solid", borderTopColor: theme.palette.divider }, theme.mixins.toolbar),
|
|
29
|
+
link: {
|
|
30
|
+
fontSize: "inherit",
|
|
31
|
+
"& > *": {
|
|
32
|
+
fontSize: "0.9em",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
drawerLink: {
|
|
36
|
+
"&:hover": {
|
|
37
|
+
color: theme.palette.primary.main,
|
|
38
|
+
opacity: 1,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
appbarLink: {
|
|
42
|
+
"&:hover": {
|
|
43
|
+
color: theme.palette.secondary.light,
|
|
44
|
+
opacity: 1,
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
}); };
|
|
48
|
+
var User = function (_a) {
|
|
49
|
+
var classes = _a.classes, open = _a.open, icon = _a.icon;
|
|
50
|
+
var _b = (0, UserContext_1.useUser)(), user = _b.user, logout = _b.logout;
|
|
51
|
+
var _c = (0, RouterContext_1.useRouter)(), routes = _c.routes, getRoute = _c.getRoute;
|
|
52
|
+
classes !== null && classes !== void 0 ? classes : (classes = styles((0, styles_1.useTheme)()));
|
|
53
|
+
var UserIcon = icon !== null && icon !== void 0 ? icon : AccountCircle_1.default;
|
|
54
|
+
var _d = react_1.default.useMemo(function () {
|
|
55
|
+
var route = getRoute("bananas.me:list");
|
|
56
|
+
return [
|
|
57
|
+
route,
|
|
58
|
+
getRoute("bananas.logout:create").title,
|
|
59
|
+
(route === null || route === void 0 ? void 0 : route.path) === window.location.pathname,
|
|
60
|
+
];
|
|
61
|
+
}, [routes]), route = _d[0], logoutText = _d[1], selected = _d[2];
|
|
62
|
+
return (user !== null && route !== undefined
|
|
63
|
+
? (react_1.default.createElement(List_1.default, null,
|
|
64
|
+
react_1.default.createElement(NavBarItem_1.default, { route: route, open: open, icon: UserIcon, title: user.full_name, subtitle: react_1.default.createElement(ButtonBase_1.default, { sx: (0, select_styles_1.ss)(classes.link, classes.drawerLink), onClick: function (e) {
|
|
65
|
+
e.preventDefault();
|
|
66
|
+
logout();
|
|
67
|
+
} },
|
|
68
|
+
react_1.default.createElement(Typography_1.default, { color: "inherit" }, logoutText)) })))
|
|
69
|
+
: null);
|
|
70
|
+
};
|
|
71
|
+
exports.default = User;
|
|
@@ -0,0 +1,16 @@
|
|
|
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 material_1 = require("@mui/material");
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var Content = function (_a) {
|
|
9
|
+
var children = _a.children;
|
|
10
|
+
return (react_1.default.createElement(material_1.Box, { sx: {
|
|
11
|
+
display: "flex",
|
|
12
|
+
position: "relative",
|
|
13
|
+
flexGrow: 1,
|
|
14
|
+
} }, children));
|
|
15
|
+
};
|
|
16
|
+
exports.default = Content;
|
|
@@ -0,0 +1,35 @@
|
|
|
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 Box_1 = __importDefault(require("@mui/material/Box"));
|
|
8
|
+
var Card_1 = __importDefault(require("@mui/material/Card"));
|
|
9
|
+
var CardContent_1 = __importDefault(require("@mui/material/CardContent"));
|
|
10
|
+
var styles_1 = require("@mui/material/styles");
|
|
11
|
+
var material_1 = require("@mui/material");
|
|
12
|
+
var I18nContext_1 = require("../contexts/I18nContext");
|
|
13
|
+
var UserContext_1 = require("../contexts/UserContext");
|
|
14
|
+
var errorMessages = {
|
|
15
|
+
403: "You are authenticated as %(username)s, but are not authorized to access this page. Would you like to login to a different account?",
|
|
16
|
+
404: "We're sorry, but the requested page could not be found.",
|
|
17
|
+
};
|
|
18
|
+
var ErrorScreen = function (_a) {
|
|
19
|
+
var _b, _c;
|
|
20
|
+
var error = _a.error;
|
|
21
|
+
var t = (0, I18nContext_1.useI18n)().t;
|
|
22
|
+
var _d = (0, UserContext_1.useUser)(), user = _d.user, logout = _d.logout;
|
|
23
|
+
var theme = (0, styles_1.useTheme)();
|
|
24
|
+
return (react_1.default.createElement(Card_1.default, null,
|
|
25
|
+
react_1.default.createElement(CardContent_1.default, null,
|
|
26
|
+
react_1.default.createElement(material_1.Typography, { variant: "h4" }, error.message),
|
|
27
|
+
react_1.default.createElement(material_1.Typography, null, t(error.response.status >= 500
|
|
28
|
+
? "There's been an error. It's been reported to the site administrators via email and should be fixed shortly. Thanks for your patience."
|
|
29
|
+
: (_b = errorMessages[error.response.status]) !== null && _b !== void 0 ? _b : "", (_c = user) !== null && _c !== void 0 ? _c : {}))),
|
|
30
|
+
react_1.default.createElement(material_1.CardActions, null, error.response.status === 403 && (react_1.default.createElement(Box_1.default, { sx: { marginTop: theme.spacing(3), textAlign: "right" } },
|
|
31
|
+
react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: function () {
|
|
32
|
+
return logout();
|
|
33
|
+
}, sx: { boxShadow: "none" } }, t("Log in again")))))));
|
|
34
|
+
};
|
|
35
|
+
exports.default = ErrorScreen;
|
|
@@ -0,0 +1,84 @@
|
|
|
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 react_1 = __importDefault(require("react"));
|
|
18
|
+
var styles_1 = require("@mui/material/styles");
|
|
19
|
+
var Box_1 = __importDefault(require("@mui/material/Box"));
|
|
20
|
+
var CircularProgress_1 = __importDefault(require("@mui/material/CircularProgress"));
|
|
21
|
+
var Fade_1 = __importDefault(require("@mui/material/Fade"));
|
|
22
|
+
var system_1 = require("@mui/system");
|
|
23
|
+
var Logo_1 = __importDefault(require("../components/Logo"));
|
|
24
|
+
var select_styles_1 = require("../util/select_styles");
|
|
25
|
+
var styles = function (theme) {
|
|
26
|
+
return ({
|
|
27
|
+
root: {
|
|
28
|
+
position: "relative",
|
|
29
|
+
top: 0,
|
|
30
|
+
left: 0,
|
|
31
|
+
width: "100%",
|
|
32
|
+
height: "100%",
|
|
33
|
+
display: "flex",
|
|
34
|
+
flexDirection: "column",
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
justifyContent: "center",
|
|
37
|
+
},
|
|
38
|
+
backdrop: {
|
|
39
|
+
position: "absolute",
|
|
40
|
+
zIndex: 2000,
|
|
41
|
+
backgroundColor: (0, system_1.alpha)(theme.palette.background.default, 0.666),
|
|
42
|
+
},
|
|
43
|
+
backdropPrimary: {
|
|
44
|
+
backgroundColor: (0, system_1.alpha)(theme.palette.primary.main, 0.666),
|
|
45
|
+
},
|
|
46
|
+
backdropSecondary: {
|
|
47
|
+
backgroundColor: (0, system_1.alpha)(theme.palette.secondary.main, 0.666),
|
|
48
|
+
},
|
|
49
|
+
backdropPaper: {
|
|
50
|
+
backgroundColor: (0, system_1.alpha)(theme.palette.background.paper, 0.666),
|
|
51
|
+
},
|
|
52
|
+
spinner: {
|
|
53
|
+
color: theme.palette.primary.main,
|
|
54
|
+
},
|
|
55
|
+
spinnerContrast: {
|
|
56
|
+
color: theme.palette.primary.contrastText,
|
|
57
|
+
},
|
|
58
|
+
logo: {
|
|
59
|
+
position: "absolute",
|
|
60
|
+
margin: 0,
|
|
61
|
+
marginTop: theme.spacing(-36),
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
var LoadingScreenInner = function (_a) {
|
|
66
|
+
var loading = _a.loading, logo = _a.logo, classes = _a.classes, backdrop = _a.backdrop, color = _a.color;
|
|
67
|
+
return (react_1.default.createElement(Box_1.default, { sx: (0, select_styles_1.ss)(classes.root, [classes.backdrop, backdrop], [classes.backdropPrimary, backdrop && color === "primary"], [classes.backdropSecondary, backdrop && color === "secondary"], [classes.backdropPaper, backdrop && color === "paper"]) },
|
|
68
|
+
react_1.default.createElement(Box_1.default, { sx: classes.logo }, logo && react_1.default.createElement(Logo_1.default, { src: logo })),
|
|
69
|
+
loading && (react_1.default.createElement(CircularProgress_1.default, { sx: (0, select_styles_1.ss)(classes.spinner, [classes.spinnerContrast, !color]) }))));
|
|
70
|
+
};
|
|
71
|
+
var LoadingScreen = function (props) {
|
|
72
|
+
var _a = __assign({}, props), loading = _a.loading, logo = _a.logo, backdrop = _a.backdrop, color = _a.color, classes = _a.classes;
|
|
73
|
+
classes !== null && classes !== void 0 ? classes : (classes = styles((0, styles_1.useTheme)()));
|
|
74
|
+
loading !== null && loading !== void 0 ? loading : (loading = true);
|
|
75
|
+
backdrop !== null && backdrop !== void 0 ? backdrop : (backdrop = false);
|
|
76
|
+
return backdrop
|
|
77
|
+
? (react_1.default.createElement(Fade_1.default, { in: loading, timeout: {
|
|
78
|
+
enter: 750,
|
|
79
|
+
exit: 250,
|
|
80
|
+
} },
|
|
81
|
+
react_1.default.createElement(LoadingScreenInner, { loading: loading, logo: logo, backdrop: backdrop, color: color, classes: classes })))
|
|
82
|
+
: (react_1.default.createElement(LoadingScreenInner, { loading: loading, logo: logo, backdrop: backdrop, color: color, classes: classes }));
|
|
83
|
+
};
|
|
84
|
+
exports.default = LoadingScreen;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
var react_1 = __importDefault(require("react"));
|
|
22
|
+
var PageErrorBoundary = /** @class */ (function (_super) {
|
|
23
|
+
__extends(PageErrorBoundary, _super);
|
|
24
|
+
function PageErrorBoundary(props) {
|
|
25
|
+
var _this = _super.call(this, props) || this;
|
|
26
|
+
_this.state = { error: null };
|
|
27
|
+
_this.errorPage = props.errorPage;
|
|
28
|
+
return _this;
|
|
29
|
+
}
|
|
30
|
+
PageErrorBoundary.prototype.componentDidCatch = function (error) {
|
|
31
|
+
this.setState({ error: error });
|
|
32
|
+
};
|
|
33
|
+
PageErrorBoundary.prototype.render = function () {
|
|
34
|
+
var error = this.state.error;
|
|
35
|
+
if (error) {
|
|
36
|
+
var ErrorPage = this.errorPage;
|
|
37
|
+
return react_1.default.createElement(ErrorPage, { error: error });
|
|
38
|
+
}
|
|
39
|
+
return this.props.children;
|
|
40
|
+
};
|
|
41
|
+
return PageErrorBoundary;
|
|
42
|
+
}(react_1.default.Component));
|
|
43
|
+
exports.default = PageErrorBoundary;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
+
function step(op) {
|
|
31
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
+
while (_) try {
|
|
33
|
+
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;
|
|
34
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
+
switch (op[0]) {
|
|
36
|
+
case 0: case 1: t = op; break;
|
|
37
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
+
default:
|
|
41
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
+
if (t[2]) _.ops.pop();
|
|
46
|
+
_.trys.pop(); continue;
|
|
47
|
+
}
|
|
48
|
+
op = body.call(thisArg, _);
|
|
49
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
54
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
|
+
};
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.PageLoadFailedError = void 0;
|
|
58
|
+
var react_1 = __importDefault(require("react"));
|
|
59
|
+
var react_2 = require("react");
|
|
60
|
+
var react_router_dom_1 = require("react-router-dom");
|
|
61
|
+
var ApiContext_1 = require("../contexts/ApiContext");
|
|
62
|
+
var useAsyncError_1 = __importDefault(require("../hooks/useAsyncError"));
|
|
63
|
+
var LoadingScreen_1 = __importDefault(require("./LoadingScreen"));
|
|
64
|
+
var PageLoadFailedError = /** @class */ (function (_super) {
|
|
65
|
+
__extends(PageLoadFailedError, _super);
|
|
66
|
+
function PageLoadFailedError(response, message) {
|
|
67
|
+
var _this = _super.call(this, message) || this;
|
|
68
|
+
_this.response = response;
|
|
69
|
+
return _this;
|
|
70
|
+
}
|
|
71
|
+
return PageLoadFailedError;
|
|
72
|
+
}(Error));
|
|
73
|
+
exports.PageLoadFailedError = PageLoadFailedError;
|
|
74
|
+
var PageLoader = function (_a) {
|
|
75
|
+
var route = _a.route, page = _a.page;
|
|
76
|
+
var Page = react_1.default.lazy(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
77
|
+
var _a;
|
|
78
|
+
return __generator(this, function (_b) {
|
|
79
|
+
switch (_b.label) {
|
|
80
|
+
case 0:
|
|
81
|
+
_a = {};
|
|
82
|
+
return [4 /*yield*/, Promise.resolve(page)];
|
|
83
|
+
case 1: return [2 /*return*/, (_a.default = _b.sent(),
|
|
84
|
+
_a)];
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}); });
|
|
88
|
+
var api = (0, ApiContext_1.useApi)();
|
|
89
|
+
var params = (0, react_router_dom_1.useParams)();
|
|
90
|
+
var searchParams = (0, react_router_dom_1.useSearchParams)()[0];
|
|
91
|
+
var _b = react_1.default.useState(null), data = _b[0], setData = _b[1];
|
|
92
|
+
var throwError = (0, useAsyncError_1.default)();
|
|
93
|
+
react_1.default.useEffect(function () {
|
|
94
|
+
if (data === null) {
|
|
95
|
+
api.operations[route.id].call({
|
|
96
|
+
params: params,
|
|
97
|
+
query: Object.fromEntries(searchParams.entries()),
|
|
98
|
+
})
|
|
99
|
+
.then(function (response) { return __awaiter(void 0, void 0, void 0, function () {
|
|
100
|
+
var _a;
|
|
101
|
+
return __generator(this, function (_b) {
|
|
102
|
+
switch (_b.label) {
|
|
103
|
+
case 0:
|
|
104
|
+
if (!response.ok) return [3 /*break*/, 2];
|
|
105
|
+
_a = setData;
|
|
106
|
+
return [4 /*yield*/, response.json()];
|
|
107
|
+
case 1:
|
|
108
|
+
_a.apply(void 0, [_b.sent()]);
|
|
109
|
+
return [3 /*break*/, 3];
|
|
110
|
+
case 2:
|
|
111
|
+
throwError(new PageLoadFailedError(response, "Page data load failed with ".concat(response.status, " ").concat(response.statusText)));
|
|
112
|
+
_b.label = 3;
|
|
113
|
+
case 3: return [2 /*return*/];
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}); })
|
|
117
|
+
.catch(throwError);
|
|
118
|
+
}
|
|
119
|
+
}, [api, params, searchParams, data]);
|
|
120
|
+
return (react_1.default.createElement(react_2.Suspense, { fallback: react_1.default.createElement(LoadingScreen_1.default, null) },
|
|
121
|
+
react_1.default.createElement(Page, { data: data })));
|
|
122
|
+
};
|
|
123
|
+
exports.default = PageLoader;
|
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.ApiContextProvider = exports.useApi = void 0;
|
|
63
|
+
var notistack_1 = require("notistack");
|
|
64
|
+
var React = __importStar(require("react"));
|
|
65
|
+
var api_1 = require("../api");
|
|
66
|
+
var get_cookie_1 = require("../util/get_cookie");
|
|
67
|
+
var ApiContext = React.createContext(undefined);
|
|
68
|
+
var useApi = function () { return React.useContext(ApiContext); };
|
|
69
|
+
exports.useApi = useApi;
|
|
70
|
+
var ApiContextProvider = function (_a) {
|
|
71
|
+
var children = _a.children, init = _a.api;
|
|
72
|
+
var _b = React.useState(), api = _b[0], setApi = _b[1];
|
|
73
|
+
var enqueueSnackbar = (0, notistack_1.useSnackbar)().enqueueSnackbar;
|
|
74
|
+
React.useEffect(function () {
|
|
75
|
+
if (api === undefined) {
|
|
76
|
+
(init instanceof api_1.ApiClient
|
|
77
|
+
? Promise.resolve(init)
|
|
78
|
+
: typeof init === "string" ||
|
|
79
|
+
init instanceof URL
|
|
80
|
+
? api_1.ApiClient.load(init)
|
|
81
|
+
: api_1.ApiClient.load(init.schema, init.server)).then(function (api) { return __awaiter(void 0, void 0, void 0, function () {
|
|
82
|
+
return __generator(this, function (_a) {
|
|
83
|
+
switch (_a.label) {
|
|
84
|
+
case 0:
|
|
85
|
+
setApi(api);
|
|
86
|
+
if (!((0, get_cookie_1.getCookie)("csrftoken") === undefined)) return [3 /*break*/, 2];
|
|
87
|
+
return [4 /*yield*/, api.operations["bananas.csrf:list"].call()];
|
|
88
|
+
case 1:
|
|
89
|
+
_a.sent();
|
|
90
|
+
_a.label = 2;
|
|
91
|
+
case 2: return [2 /*return*/];
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}); }).catch(function (e) {
|
|
95
|
+
enqueueSnackbar("Failed to load schema, view console for more info", {
|
|
96
|
+
variant: "error",
|
|
97
|
+
});
|
|
98
|
+
throw e;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}, [api]);
|
|
102
|
+
return (React.createElement(ApiContext.Provider, { value: api }, children));
|
|
103
|
+
};
|
|
104
|
+
exports.ApiContextProvider = ApiContextProvider;
|
|
105
|
+
exports.default = ApiContext;
|
|
@@ -0,0 +1,109 @@
|
|
|
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.I18nContextProvider = exports.useI18n = exports.interpolateString = void 0;
|
|
66
|
+
var React = __importStar(require("react"));
|
|
67
|
+
var useLocalStorage_1 = __importDefault(require("../hooks/useLocalStorage"));
|
|
68
|
+
var ApiContext_1 = require("./ApiContext");
|
|
69
|
+
function interpolateString(string, params) {
|
|
70
|
+
return Array.isArray(params)
|
|
71
|
+
? params.reduce(function (s, value) { return s.replace(/%[sd]|\{\}/, value); }, string)
|
|
72
|
+
: Object.entries(params).reduce(function (s, _a) {
|
|
73
|
+
var key = _a[0], value = _a[1];
|
|
74
|
+
return s.replace(new RegExp("%\\(".concat(key, "\\)[sd]|\\{").concat(key, "\\}"), "g"), value);
|
|
75
|
+
}, string);
|
|
76
|
+
}
|
|
77
|
+
exports.interpolateString = interpolateString;
|
|
78
|
+
var I18nContext = React.createContext(undefined);
|
|
79
|
+
var useI18n = function () { return React.useContext(I18nContext); };
|
|
80
|
+
exports.useI18n = useI18n;
|
|
81
|
+
var I18nContextProvider = function (_a) {
|
|
82
|
+
var children = _a.children;
|
|
83
|
+
var api = (0, ApiContext_1.useApi)();
|
|
84
|
+
var _b = (0, useLocalStorage_1.default)("i18n", undefined), i18n = _b[0], setI18n = _b[1];
|
|
85
|
+
React.useEffect(function () {
|
|
86
|
+
if (api && i18n === undefined) {
|
|
87
|
+
api.operations["bananas.i18n:list"].call().then(function (response) { return __awaiter(void 0, void 0, void 0, function () {
|
|
88
|
+
var i18n;
|
|
89
|
+
return __generator(this, function (_a) {
|
|
90
|
+
switch (_a.label) {
|
|
91
|
+
case 0: return [4 /*yield*/, response.json()];
|
|
92
|
+
case 1:
|
|
93
|
+
i18n = (_a.sent()).catalog;
|
|
94
|
+
setI18n(i18n);
|
|
95
|
+
return [2 /*return*/];
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}); });
|
|
99
|
+
}
|
|
100
|
+
}, [api, i18n]);
|
|
101
|
+
var t = function (key, params) {
|
|
102
|
+
var _a;
|
|
103
|
+
var value = (_a = i18n === null || i18n === void 0 ? void 0 : i18n[key]) !== null && _a !== void 0 ? _a : key;
|
|
104
|
+
return params ? interpolateString(value, params) : value;
|
|
105
|
+
};
|
|
106
|
+
return (React.createElement(I18nContext.Provider, { value: { i18n: i18n, t: t } }, children));
|
|
107
|
+
};
|
|
108
|
+
exports.I18nContextProvider = I18nContextProvider;
|
|
109
|
+
exports.default = I18nContext;
|