@gobizweb/core 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +56 -0
- package/assets/icons/arrow_left.svg +1 -0
- package/assets/icons/right_pointing.svg +1 -0
- package/assets/icons/thumb-up.svg +1 -0
- package/assets/images/server_error_dino.svg +1 -0
- package/assets/images/spot_hero_empty_list.svg +1 -0
- package/lib/bootstrap.js +39 -0
- package/lib/components/AccordionSelect/AccordionSelect.component.js +131 -0
- package/lib/components/AccordionSelect/AccordionSelect.styled.js +18 -0
- package/lib/components/AccordionSelect/index.js +13 -0
- package/lib/components/AlertBox/AlertBox.component.js +54 -0
- package/lib/components/AlertBox/AlertBox.styled.js +32 -0
- package/lib/components/AlertBox/index.js +13 -0
- package/lib/components/AlertDialog/AlertDialog.js +66 -0
- package/lib/components/AlertDialog/AlertDialog.styled.js +13 -0
- package/lib/components/AlertDialog/index.js +13 -0
- package/lib/components/Asphalt/Input.component.js +59 -0
- package/lib/components/Asphalt/index.js +13 -0
- package/lib/components/AsphaltPolyfill/AsphaltPolyfill.component.js +26 -0
- package/lib/components/AsphaltPolyfill/AsphaltPolyfill.loader.js +8 -0
- package/lib/components/AsphaltPolyfill/index.js +13 -0
- package/lib/components/Box/index.js +51 -0
- package/lib/components/Breakpoint/Breakpoint.component.js +63 -0
- package/lib/components/Breakpoint/index.js +13 -0
- package/lib/components/Button/Button.js +109 -0
- package/lib/components/Button/index.js +13 -0
- package/lib/components/Card/Card.js +75 -0
- package/lib/components/Card/Card.styled.js +60 -0
- package/lib/components/Card/index.js +13 -0
- package/lib/components/CardList/CardList.component.js +55 -0
- package/lib/components/CardList/index.js +13 -0
- package/lib/components/Checkbox/Checkbox.js +60 -0
- package/lib/components/Checkbox/index.js +13 -0
- package/lib/components/Container/Container.js +74 -0
- package/lib/components/Container/index.js +13 -0
- package/lib/components/DatePicker/Datepicker.component.js +57 -0
- package/lib/components/DatePicker/index.js +13 -0
- package/lib/components/Dropdown/Dropdown.component.js +63 -0
- package/lib/components/Dropdown/index.js +13 -0
- package/lib/components/EmptyState/EmptyState.component.js +47 -0
- package/lib/components/EmptyState/index.js +13 -0
- package/lib/components/ErrorModal/ErrorModal.component.js +41 -0
- package/lib/components/ErrorModal/ErrorModal.store.js +43 -0
- package/lib/components/ErrorModal/index.js +14 -0
- package/lib/components/ErrorScreen/ErrorScreen.js +19 -0
- package/lib/components/ErrorScreen/index.js +13 -0
- package/lib/components/FilterModal/FilterModal.js +41 -0
- package/lib/components/FilterModal/FilterModal.state.js +139 -0
- package/lib/components/FilterModal/index.js +13 -0
- package/lib/components/GlobalFilter/GlobalFilter.component.js +32 -0
- package/lib/components/GlobalFilter/GlobalFilter.component.state.js +116 -0
- package/lib/components/GlobalFilter/GlobalFilter.constant.js +17 -0
- package/lib/components/GlobalFilter/GlobalFilter.date.component.js +34 -0
- package/lib/components/GlobalFilter/GlobalFilter.interface.js +2 -0
- package/lib/components/GlobalFilter/GlobalFilter.provider.js +169 -0
- package/lib/components/GlobalFilter/GlobalFilter.styled.js +16 -0
- package/lib/components/GlobalFilter/index.js +16 -0
- package/lib/components/Guard/Guard.component.js +18 -0
- package/lib/components/Guard/index.js +13 -0
- package/lib/components/IframeLoader/IframeLoader.js +47 -0
- package/lib/components/IframeLoader/index.js +13 -0
- package/lib/components/Input/Input.component.js +167 -0
- package/lib/components/Input/index.js +13 -0
- package/lib/components/LanguageSwitcher/LanguageSwitcher.component.js +78 -0
- package/lib/components/LanguageSwitcher/LanguageSwitcher.state.js +20 -0
- package/lib/components/LanguageSwitcher/LanguageSwitcher.styled.js +40 -0
- package/lib/components/LanguageSwitcher/index.js +13 -0
- package/lib/components/List/List.js +46 -0
- package/lib/components/List/index.js +13 -0
- package/lib/components/ListSelector/ListSelector.component.js +22 -0
- package/lib/components/ListSelector/ListSelector.state.js +11 -0
- package/lib/components/ListSelector/ListSelector.styled.js +15 -0
- package/lib/components/ListSelector/index.js +13 -0
- package/lib/components/Loading/Loading.js +52 -0
- package/lib/components/Loading/Loading.styled.js +45 -0
- package/lib/components/Loading/index.js +13 -0
- package/lib/components/LoadingModule/LoadingModule.component.js +49 -0
- package/lib/components/LoadingModule/index.js +13 -0
- package/lib/components/MobileAppBar/MobileAppBar.js +90 -0
- package/lib/components/MobileAppBar/MobileAppBar.styled.js +36 -0
- package/lib/components/MobileAppBar/WithMobileAppBar.js +43 -0
- package/lib/components/MobileAppBar/index.js +14 -0
- package/lib/components/Modal/Modal.js +149 -0
- package/lib/components/Modal/ModalManager.context.js +6 -0
- package/lib/components/Modal/ModalManager.js +118 -0
- package/lib/components/Modal/index.js +15 -0
- package/lib/components/Navigation/Navigation.component.js +25 -0
- package/lib/components/Navigation/Navigation.provider.js +69 -0
- package/lib/components/Navigation/Navigation.styled.js +33 -0
- package/lib/components/Navigation/index.js +14 -0
- package/lib/components/PageTitle/PageTitle.component.js +47 -0
- package/lib/components/PageTitle/index.js +13 -0
- package/lib/components/Pagination/Pagination.component.js +49 -0
- package/lib/components/Pagination/index.js +13 -0
- package/lib/components/Radio/Radio.component.js +69 -0
- package/lib/components/Radio/Radio.styled.js +44 -0
- package/lib/components/Radio/RadioGroup.component.js +24 -0
- package/lib/components/Radio/RadioGroup.context.js +6 -0
- package/lib/components/Radio/index.js +15 -0
- package/lib/components/Separator/Separator.component.js +59 -0
- package/lib/components/Separator/index.js +13 -0
- package/lib/components/Skeleton/SkeletonApp.component.js +90 -0
- package/lib/components/Skeleton/SkeletonTable.component.js +36 -0
- package/lib/components/Skeleton/SkeletonText.component.js +62 -0
- package/lib/components/Skeleton/SkeletonWrapper.component.js +46 -0
- package/lib/components/Skeleton/index.js +16 -0
- package/lib/components/Stepper/Stepper.component.js +126 -0
- package/lib/components/Stepper/WithStepper.js +65 -0
- package/lib/components/Stepper/index.js +16 -0
- package/lib/components/Table/Table.component.js +71 -0
- package/lib/components/Table/Table.styled.js +51 -0
- package/lib/components/Table/index.js +13 -0
- package/lib/components/TableContainer/TableContainer.js +32 -0
- package/lib/components/TableContainer/index.js +13 -0
- package/lib/components/Text/Text.component.js +90 -0
- package/lib/components/Text/index.js +13 -0
- package/lib/components/Toast/Toast.component.js +65 -0
- package/lib/components/Toast/Toast.interface.js +2 -0
- package/lib/components/Toast/Toast.manager.js +61 -0
- package/lib/components/Toast/Toast.provider.js +85 -0
- package/lib/components/Toast/Toast.styled.js +18 -0
- package/lib/components/Toast/index.js +15 -0
- package/lib/components/Tours/index.js +100 -0
- package/lib/components/index.js +51 -0
- package/lib/constants/AndroidVersions.js +6 -0
- package/lib/constants/AppNames.js +10 -0
- package/lib/constants/AsphaltTheme.js +43 -0
- package/lib/constants/GobizApp.js +11 -0
- package/lib/constants/MediaQueries.js +30 -0
- package/lib/constants/PostalCodes.js +8382 -0
- package/lib/constants/PubsubEvents.js +12 -0
- package/lib/constants/TnCFiles.js +77 -0
- package/lib/constants/ValidationRegex.js +6 -0
- package/lib/constants/cookies.js +38 -0
- package/lib/constants/datetime.js +103 -0
- package/lib/constants/index.js +24 -0
- package/lib/constants/roles.js +17 -0
- package/lib/contexts/AppTheme.js +221 -0
- package/lib/decorators/utility-classes.js +78 -0
- package/lib/decorators/withStyles.js +73 -0
- package/lib/helpers/BrowserEnvironment.js +22 -0
- package/lib/helpers/ESQuery.js +98 -0
- package/lib/helpers/chart.js +251 -0
- package/lib/helpers/cleanObject.js +15 -0
- package/lib/helpers/conversion.js +4 -0
- package/lib/helpers/cookies.js +54 -0
- package/lib/helpers/copywrite.js +15 -0
- package/lib/helpers/currency.js +73 -0
- package/lib/helpers/dateFormat.js +47 -0
- package/lib/helpers/datePresets.js +77 -0
- package/lib/helpers/debounce.js +31 -0
- package/lib/helpers/deepMerge.js +81 -0
- package/lib/helpers/downloadURL.js +11 -0
- package/lib/helpers/enumReverseMap.js +12 -0
- package/lib/helpers/env.js +18 -0
- package/lib/helpers/fileDownloader.js +33 -0
- package/lib/helpers/formatNumber.js +10 -0
- package/lib/helpers/formatPercentage.js +13 -0
- package/lib/helpers/gobizApp.js +27 -0
- package/lib/helpers/identityValidator.js +6 -0
- package/lib/helpers/index.js +50 -0
- package/lib/helpers/json.js +17 -0
- package/lib/helpers/logger.js +93 -0
- package/lib/helpers/maskAccount.js +26 -0
- package/lib/helpers/numbers.js +6 -0
- package/lib/helpers/path.js +27 -0
- package/lib/helpers/paymentTypeHuman.js +62 -0
- package/lib/helpers/refreshConfig.js +12 -0
- package/lib/helpers/refreshToken.js +108 -0
- package/lib/helpers/safeParse.js +31 -0
- package/lib/helpers/scrollToTop.js +9 -0
- package/lib/helpers/shortID.js +17 -0
- package/lib/helpers/textParser.js +10 -0
- package/lib/helpers/time.js +54 -0
- package/lib/helpers/tour.js +38 -0
- package/lib/helpers/transform.js +24 -0
- package/lib/helpers/url.js +30 -0
- package/lib/helpers/wildcardToRegEx.js +15 -0
- package/lib/hooks/index.js +26 -0
- package/lib/hooks/useBreakpoint.js +35 -0
- package/lib/hooks/useCurrency.js +27 -0
- package/lib/hooks/useDatesFromTimeRange.js +40 -0
- package/lib/hooks/useEventListener.js +24 -0
- package/lib/hooks/useFormValidator.js +38 -0
- package/lib/hooks/useHttpOptions.js +104 -0
- package/lib/hooks/useLogger.js +57 -0
- package/lib/hooks/useNavigation.js +16 -0
- package/lib/hooks/usePhone.js +14 -0
- package/lib/hooks/useQueryInit.js +21 -0
- package/lib/hooks/useQueryParams.js +95 -0
- package/lib/hooks/useShowGlobalFilter.js +101 -0
- package/lib/hooks/useWebview.js +48 -0
- package/lib/hooks/useWindow.js +19 -0
- package/lib/models/AuthUser.model.js +159 -0
- package/lib/models/Outlet.model.js +274 -0
- package/lib/models/User.model.js +106 -0
- package/lib/models/index.js +15 -0
- package/lib/providers/Alert.provider.js +65 -0
- package/lib/providers/AppTheme.provider.js +75 -0
- package/lib/providers/Auth.provider.js +239 -0
- package/lib/providers/Clevertap.provider.js +117 -0
- package/lib/providers/GoogleAnalytics.provider.js +113 -0
- package/lib/providers/Host.provider.js +71 -0
- package/lib/providers/Language.provider.js +127 -0
- package/lib/providers/Logger.provider.js +32 -0
- package/lib/providers/MicroApp.provider.js +63 -0
- package/lib/providers/Outlets.provider.js +180 -0
- package/lib/providers/Token.provider.js +101 -0
- package/lib/providers/Translation.provider.js +56 -0
- package/lib/providers/index.js +24 -0
- package/package.json +47 -0
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.scrollWrapperToTop = void 0;
|
4
|
+
exports.scrollWrapperToTop = function (_document) {
|
5
|
+
var _a;
|
6
|
+
if (_document === void 0) { _document = document; }
|
7
|
+
var wrapperElement = _document.getElementById("asp-app-router");
|
8
|
+
(_a = wrapperElement === null || wrapperElement === void 0 ? void 0 : wrapperElement.scrollTo) === null || _a === void 0 ? void 0 : _a.call(wrapperElement, 0, 0);
|
9
|
+
};
|
@@ -0,0 +1,17 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.shortID = void 0;
|
4
|
+
var chars = "abcdefghij";
|
5
|
+
var _uid = 0;
|
6
|
+
exports.shortID = function () {
|
7
|
+
// ensures uid consists of 5 chars
|
8
|
+
// e.g 1 => 00001, 13 => 00013, 123 => 00123 ...
|
9
|
+
var _padded = (_uid++ + "").padStart(5, "0");
|
10
|
+
// convert numbers to alphabet
|
11
|
+
// e.g 000 => aaa, 001 => aab etc.
|
12
|
+
var asAlphabet = _padded
|
13
|
+
.split("")
|
14
|
+
.map(function (index) { return chars[parseInt(index, 10)]; });
|
15
|
+
// prefix with `tjr-uid-`
|
16
|
+
return "asp-uid-" + asAlphabet.join("");
|
17
|
+
};
|
@@ -0,0 +1,10 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.textParamsParser = void 0;
|
4
|
+
exports.textParamsParser = function (text, params) {
|
5
|
+
params.forEach(function (param, index) {
|
6
|
+
var reg = new RegExp("\\$" + (index + 1), "g");
|
7
|
+
text = text.replace(reg, params[index]);
|
8
|
+
});
|
9
|
+
return text;
|
10
|
+
};
|
@@ -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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
39
|
+
exports.artificialUIDelay = exports.humanizeTime = void 0;
|
40
|
+
exports.humanizeTime = function (timeInSeconds) {
|
41
|
+
var seconds = (timeInSeconds % 60).toString().padStart(2, "0");
|
42
|
+
var minutes = Math.floor(timeInSeconds / 60)
|
43
|
+
.toString()
|
44
|
+
.padStart(2, "0");
|
45
|
+
return minutes + ":" + seconds;
|
46
|
+
};
|
47
|
+
exports.artificialUIDelay = function () { return __awaiter(void 0, void 0, void 0, function () {
|
48
|
+
return __generator(this, function (_a) {
|
49
|
+
switch (_a.label) {
|
50
|
+
case 0: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 600); })];
|
51
|
+
case 1: return [2 /*return*/, _a.sent()];
|
52
|
+
}
|
53
|
+
});
|
54
|
+
}); };
|
@@ -0,0 +1,38 @@
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
14
|
+
exports.getTourCookie = exports.setTourCookie = exports.TourStatus = exports.TourNames = void 0;
|
15
|
+
var constants_1 = require("../constants");
|
16
|
+
var _1 = require("./");
|
17
|
+
var TourNames;
|
18
|
+
(function (TourNames) {
|
19
|
+
TourNames["UserManagement"] = "user_management";
|
20
|
+
TourNames["UsersManagementAdd"] = "users_management_add";
|
21
|
+
TourNames["PayoutList"] = "payout_list";
|
22
|
+
TourNames["Onboarding"] = "onboarding";
|
23
|
+
TourNames["Reporting"] = "reporting";
|
24
|
+
})(TourNames = exports.TourNames || (exports.TourNames = {}));
|
25
|
+
var TourStatus;
|
26
|
+
(function (TourStatus) {
|
27
|
+
TourStatus["Completed"] = "COMPLETED";
|
28
|
+
TourStatus["Started"] = "STARTED";
|
29
|
+
})(TourStatus = exports.TourStatus || (exports.TourStatus = {}));
|
30
|
+
exports.setTourCookie = function (name, status) {
|
31
|
+
var _a;
|
32
|
+
var currentStatus = _1.getCookie(constants_1.CookieNames.Tour) && JSON.parse(_1.getCookie(constants_1.CookieNames.Tour));
|
33
|
+
_1.setCookie(constants_1.CookieNames.Tour, JSON.stringify(__assign(__assign({}, currentStatus), (_a = {}, _a[name] = status, _a))), "never_expired");
|
34
|
+
};
|
35
|
+
exports.getTourCookie = function (name) {
|
36
|
+
var tourCookie = _1.getCookie(constants_1.CookieNames.Tour);
|
37
|
+
return tourCookie ? JSON.parse(tourCookie)[name] : null;
|
38
|
+
};
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.kebabCaseToSnakeCase = exports.kebabCaseToCamelCase = exports.titleCase = exports.capitalizeFirstLetter = void 0;
|
4
|
+
exports.capitalizeFirstLetter = function (str) {
|
5
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
6
|
+
};
|
7
|
+
exports.titleCase = function (str) {
|
8
|
+
var splitStr = str.toLowerCase().split(" ");
|
9
|
+
for (var i = 0; i < splitStr.length; i++) {
|
10
|
+
// You do not need to check if i is larger than splitStr length, as your for does that for you
|
11
|
+
// Assign it back to the array
|
12
|
+
splitStr[i] =
|
13
|
+
splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1);
|
14
|
+
}
|
15
|
+
// Directly return the joined string
|
16
|
+
return splitStr.join(" ");
|
17
|
+
};
|
18
|
+
exports.kebabCaseToCamelCase = function (kebabCase) {
|
19
|
+
var _a = kebabCase.split("-"), first = _a[0], rest = _a.slice(1);
|
20
|
+
return first + rest.map(exports.capitalizeFirstLetter).join("");
|
21
|
+
};
|
22
|
+
exports.kebabCaseToSnakeCase = function (kebabCase) {
|
23
|
+
return kebabCase.split("-").join("_");
|
24
|
+
};
|
@@ -0,0 +1,30 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getQueryParam = exports.joinUrl = exports.resolveUrl = void 0;
|
4
|
+
exports.resolveUrl = function () {
|
5
|
+
var urls = [];
|
6
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
7
|
+
urls[_i] = arguments[_i];
|
8
|
+
}
|
9
|
+
var joinWithSlash = urls.join("/");
|
10
|
+
// Prefix with slash
|
11
|
+
// some/url/foo/bar -> /some/url/foo/bar
|
12
|
+
var prependSlash = "/" + joinWithSlash;
|
13
|
+
// replace duplicate slashes with a single slash
|
14
|
+
// some//url/foo//bar -> some/url/foo/bar
|
15
|
+
return prependSlash.replace(/\/+/g, "/");
|
16
|
+
};
|
17
|
+
/**
|
18
|
+
* @description Joins 2 path to be 1 url.
|
19
|
+
* @param {string} base - The base url path.
|
20
|
+
* @param {string} path - The path to be joined.
|
21
|
+
* @returns {string} Final url
|
22
|
+
*/
|
23
|
+
exports.joinUrl = function (base, path) {
|
24
|
+
var baseContainsSlash = base.charAt(base.length - 1) === "/";
|
25
|
+
return ("" + base + (baseContainsSlash ? "" : "/") + path.toString()).replaceAll("%", "");
|
26
|
+
};
|
27
|
+
exports.getQueryParam = function (locationSearch, param) {
|
28
|
+
var urlParams = new URLSearchParams(locationSearch);
|
29
|
+
return urlParams.get(param) || "";
|
30
|
+
};
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.starWildcardToRegEx = exports.wildcardToRegEx = exports.wildcardTest = void 0;
|
4
|
+
exports.wildcardTest = function (wildcard, toTest) {
|
5
|
+
if (wildcard.includes(":*")) {
|
6
|
+
return exports.starWildcardToRegEx(wildcard).test(toTest);
|
7
|
+
}
|
8
|
+
return exports.wildcardToRegEx(wildcard).test(toTest);
|
9
|
+
};
|
10
|
+
exports.wildcardToRegEx = function (wildcard) {
|
11
|
+
return new RegExp("^" + wildcard + "$");
|
12
|
+
};
|
13
|
+
exports.starWildcardToRegEx = function (wildcard) {
|
14
|
+
return new RegExp("^" + wildcard.replace(":*", "[:.*]?"));
|
15
|
+
};
|
@@ -0,0 +1,26 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
5
|
+
}) : (function(o, m, k, k2) {
|
6
|
+
if (k2 === undefined) k2 = k;
|
7
|
+
o[k2] = m[k];
|
8
|
+
}));
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
10
|
+
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
11
|
+
};
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
13
|
+
__exportStar(require("./useNavigation"), exports);
|
14
|
+
__exportStar(require("./useQueryInit"), exports);
|
15
|
+
__exportStar(require("./useQueryParams"), exports);
|
16
|
+
__exportStar(require("./useShowGlobalFilter"), exports);
|
17
|
+
__exportStar(require("./useWindow"), exports);
|
18
|
+
__exportStar(require("./useEventListener"), exports);
|
19
|
+
__exportStar(require("./useWebview"), exports);
|
20
|
+
__exportStar(require("./useHttpOptions"), exports);
|
21
|
+
__exportStar(require("./useBreakpoint"), exports);
|
22
|
+
__exportStar(require("./useCurrency"), exports);
|
23
|
+
__exportStar(require("./useDatesFromTimeRange"), exports);
|
24
|
+
__exportStar(require("./useLogger"), exports);
|
25
|
+
__exportStar(require("./usePhone"), exports);
|
26
|
+
__exportStar(require("./useFormValidator"), exports);
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useBreakpoint = void 0;
|
4
|
+
var react_1 = require("react");
|
5
|
+
var helpers_1 = require("../helpers");
|
6
|
+
var hooks_1 = require("../hooks");
|
7
|
+
var getDeviceScreenSize = function (width) {
|
8
|
+
if (width < 320) {
|
9
|
+
return "xs";
|
10
|
+
}
|
11
|
+
else if (width >= 320 && width < 400) {
|
12
|
+
return "s";
|
13
|
+
}
|
14
|
+
else if (width >= 400 && width < 767) {
|
15
|
+
return "m";
|
16
|
+
}
|
17
|
+
else if (width >= 767 && width < 1024) {
|
18
|
+
return "l";
|
19
|
+
}
|
20
|
+
return "xl";
|
21
|
+
};
|
22
|
+
exports.useBreakpoint = function (_window) {
|
23
|
+
if (_window === void 0) { _window = window; }
|
24
|
+
var _a = react_1.useState(function () {
|
25
|
+
return getDeviceScreenSize(_window.innerWidth);
|
26
|
+
}), breakpoint = _a[0], setBreakpoint = _a[1];
|
27
|
+
var handler = react_1.useCallback(helpers_1.debounce(function () {
|
28
|
+
setBreakpoint(getDeviceScreenSize(_window.innerWidth));
|
29
|
+
}, 200), []);
|
30
|
+
hooks_1.useEventListener("resize", handler, _window);
|
31
|
+
return {
|
32
|
+
isMobile: ["xs", "s", "m"].includes(breakpoint),
|
33
|
+
breakpoint: breakpoint,
|
34
|
+
};
|
35
|
+
};
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useCurrency = void 0;
|
4
|
+
var providers_1 = require("../providers");
|
5
|
+
var helpers_1 = require("../helpers");
|
6
|
+
exports.useCurrency = function (options) {
|
7
|
+
var _a;
|
8
|
+
var authUser = providers_1.useAuth().authUser;
|
9
|
+
var activeCountry = (_a = authUser === null || authUser === void 0 ? void 0 : authUser.country) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
10
|
+
return {
|
11
|
+
currencyFormat: function (amount, country) {
|
12
|
+
if (amount === void 0) { amount = 0; }
|
13
|
+
return helpers_1.currencyFormat(amount, country || activeCountry, options);
|
14
|
+
},
|
15
|
+
currencyFormatFromString: function (amount, country) { return helpers_1.currencyFormatFromString(amount, country || activeCountry, options); },
|
16
|
+
numberFormat: function (amount, country) {
|
17
|
+
return helpers_1.numberFormat(amount, country || activeCountry);
|
18
|
+
},
|
19
|
+
currencyFormatNoDivide: function (amount, country) {
|
20
|
+
if (amount === void 0) { amount = 0; }
|
21
|
+
return helpers_1.currencyFormatNoDivide(amount, country || activeCountry);
|
22
|
+
},
|
23
|
+
localizeCopy: function (copy, country) {
|
24
|
+
return helpers_1.localizeCurrency(copy, country || activeCountry);
|
25
|
+
},
|
26
|
+
};
|
27
|
+
};
|
@@ -0,0 +1,40 @@
|
|
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.useDatesFromTimeRange = void 0;
|
7
|
+
var react_1 = require("react");
|
8
|
+
var moment_1 = __importDefault(require("moment"));
|
9
|
+
var helpers_1 = require("../helpers");
|
10
|
+
var components_1 = require("../components");
|
11
|
+
exports.useDatesFromTimeRange = function () {
|
12
|
+
var filter = components_1.useGlobalFilter().filter;
|
13
|
+
var date_range = filter.date_range, end_time = filter.end_time, start_time = filter.start_time;
|
14
|
+
var _a = react_1.useMemo(function () {
|
15
|
+
return helpers_1.datesFromTimeRange({
|
16
|
+
timeRange: date_range,
|
17
|
+
previousStartTime: moment_1.default(start_time),
|
18
|
+
previousEndTime: moment_1.default(end_time),
|
19
|
+
});
|
20
|
+
}, [date_range, end_time, start_time]), endTime = _a.endTime, startTime = _a.startTime, compareStartTime = _a.compareStartTime;
|
21
|
+
var comparisonLabels = react_1.useMemo(function () {
|
22
|
+
switch (date_range) {
|
23
|
+
case "today":
|
24
|
+
return ["today", "yesterday"];
|
25
|
+
case "yesterday":
|
26
|
+
return ["yesterday", "previous_day"];
|
27
|
+
case "this_week":
|
28
|
+
return ["this_week", "last_week"];
|
29
|
+
case "last_week":
|
30
|
+
return ["last_week", "previous_week"];
|
31
|
+
case "this_month":
|
32
|
+
return ["this_month", "last_month"];
|
33
|
+
case "last_month":
|
34
|
+
return ["last_month", "previous_month"];
|
35
|
+
default:
|
36
|
+
return ["this_period", "previous_period"];
|
37
|
+
}
|
38
|
+
}, [date_range]);
|
39
|
+
return { endTime: endTime, startTime: startTime, compareStartTime: compareStartTime, comparisonLabels: comparisonLabels };
|
40
|
+
};
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useEventListener = void 0;
|
4
|
+
var react_1 = require("react");
|
5
|
+
exports.useEventListener = function (eventName, handler, element) {
|
6
|
+
if (element === void 0) { element = window; }
|
7
|
+
var savedHandler = react_1.useRef();
|
8
|
+
react_1.useEffect(function () {
|
9
|
+
savedHandler.current = handler;
|
10
|
+
}, [handler]);
|
11
|
+
react_1.useEffect(function () {
|
12
|
+
var isSupported = element && element.addEventListener;
|
13
|
+
if (!isSupported) {
|
14
|
+
return;
|
15
|
+
}
|
16
|
+
var eventListener = function (event) {
|
17
|
+
return savedHandler.current(event);
|
18
|
+
};
|
19
|
+
element.addEventListener(eventName, eventListener);
|
20
|
+
return function () {
|
21
|
+
element.removeEventListener(eventName, eventListener);
|
22
|
+
};
|
23
|
+
}, [eventName, element]);
|
24
|
+
};
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useFormValidator = void 0;
|
4
|
+
var libphonenumber_js_1 = require("libphonenumber-js");
|
5
|
+
var Auth_provider_1 = require("../providers/Auth.provider");
|
6
|
+
var ValidationRegex_1 = require("../constants/ValidationRegex");
|
7
|
+
var logger_1 = require("../helpers/logger");
|
8
|
+
/**
|
9
|
+
* Validates a text input. Should be used with react-form-hook.validate property.
|
10
|
+
* The validator function must return `true` for empty input so it doesn't conflict with the required validator.
|
11
|
+
*/
|
12
|
+
exports.useFormValidator = function (country) {
|
13
|
+
var authUser = Auth_provider_1.useAuth().authUser;
|
14
|
+
var _country = (country || (authUser === null || authUser === void 0 ? void 0 : authUser.country) || "ID");
|
15
|
+
var phone = function (value) {
|
16
|
+
if (!value.length) {
|
17
|
+
return true;
|
18
|
+
}
|
19
|
+
try {
|
20
|
+
var parsed = libphonenumber_js_1.parsePhoneNumber(value, _country);
|
21
|
+
return parsed === null || parsed === void 0 ? void 0 : parsed.isPossible();
|
22
|
+
}
|
23
|
+
catch (err) {
|
24
|
+
var error = err;
|
25
|
+
if (error.name !== "ParseError") {
|
26
|
+
logger_1.Logger.error(error);
|
27
|
+
}
|
28
|
+
return false;
|
29
|
+
}
|
30
|
+
};
|
31
|
+
var email = function (value) {
|
32
|
+
return value.length ? ValidationRegex_1.ValidationRegex.email.test(value) : true;
|
33
|
+
};
|
34
|
+
return {
|
35
|
+
phone: phone,
|
36
|
+
email: email,
|
37
|
+
};
|
38
|
+
};
|
@@ -0,0 +1,104 @@
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
39
|
+
exports.useHttpOptions = void 0;
|
40
|
+
var cookies_1 = require("../constants/cookies");
|
41
|
+
var BrowserEnvironment_1 = require("../helpers/BrowserEnvironment");
|
42
|
+
var cookies_2 = require("../helpers/cookies");
|
43
|
+
var deepMerge_1 = require("../helpers/deepMerge");
|
44
|
+
var Translation_provider_1 = require("../providers/Translation.provider");
|
45
|
+
var Toast_1 = require("../components/Toast");
|
46
|
+
/** @todo change refreshToken as helper again, instead of props, after migration is done */
|
47
|
+
exports.useHttpOptions = function (_a) {
|
48
|
+
var refreshToken = _a.refreshToken;
|
49
|
+
var translate = Translation_provider_1.useTranslation();
|
50
|
+
var showToast = Toast_1.useToast().showToast;
|
51
|
+
var httpOptions = {
|
52
|
+
interceptors: {
|
53
|
+
request: function (_a) {
|
54
|
+
var options = _a.options;
|
55
|
+
if (BrowserEnvironment_1.isOffline()) {
|
56
|
+
showToast({
|
57
|
+
title: translate("generic.network_offline.title"),
|
58
|
+
message: translate("generic.network_offline.message"),
|
59
|
+
color: "warning",
|
60
|
+
persistent: true,
|
61
|
+
});
|
62
|
+
return;
|
63
|
+
}
|
64
|
+
return deepMerge_1.deepMerge(options, {
|
65
|
+
headers: {
|
66
|
+
Authorization: "Bearer " + cookies_2.getCookie(cookies_1.CookieNames.AccessToken),
|
67
|
+
"Authentication-Type": "go-id",
|
68
|
+
},
|
69
|
+
});
|
70
|
+
},
|
71
|
+
},
|
72
|
+
retries: 1,
|
73
|
+
retryDelay: 100,
|
74
|
+
retryOn: function (_a) {
|
75
|
+
var response = _a.response;
|
76
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
77
|
+
var requestTokenRefresh, result;
|
78
|
+
return __generator(this, function (_b) {
|
79
|
+
switch (_b.label) {
|
80
|
+
case 0:
|
81
|
+
if (!response) return [3 /*break*/, 2];
|
82
|
+
if (/^50/.test(response.status.toString())) {
|
83
|
+
showToast({
|
84
|
+
title: translate("generic.server_error.title"),
|
85
|
+
message: translate("generic.server_error.message"),
|
86
|
+
color: "warning",
|
87
|
+
persistent: true,
|
88
|
+
});
|
89
|
+
return [2 /*return*/, false];
|
90
|
+
}
|
91
|
+
requestTokenRefresh = (response === null || response === void 0 ? void 0 : response.status) === 401;
|
92
|
+
if (!requestTokenRefresh) return [3 /*break*/, 2];
|
93
|
+
return [4 /*yield*/, refreshToken()];
|
94
|
+
case 1:
|
95
|
+
result = _b.sent();
|
96
|
+
return [2 /*return*/, result];
|
97
|
+
case 2: return [2 /*return*/, false];
|
98
|
+
}
|
99
|
+
});
|
100
|
+
});
|
101
|
+
},
|
102
|
+
};
|
103
|
+
return httpOptions;
|
104
|
+
};
|
@@ -0,0 +1,57 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __spreadArrays = (this && this.__spreadArrays) || function () {
|
3
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
4
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
5
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
6
|
+
r[k] = a[j];
|
7
|
+
return r;
|
8
|
+
};
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
exports.useLogger = void 0;
|
11
|
+
var react_1 = require("react");
|
12
|
+
var Logger_provider_1 = require("../providers/Logger.provider");
|
13
|
+
exports.useLogger = function () {
|
14
|
+
var _a;
|
15
|
+
var rootContext = react_1.useContext(Logger_provider_1.LoggerContext);
|
16
|
+
var raygunKey = rootContext.raygunKey, sendWarning = rootContext.sendWarning, raygunInstance = rootContext.raygunInstance;
|
17
|
+
var isDevOrTest = ["development", "test"].includes((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.NODE_ENV);
|
18
|
+
var initUser = function (userId) {
|
19
|
+
raygunInstance.setUser({
|
20
|
+
identifier: userId,
|
21
|
+
isAnonymous: false,
|
22
|
+
});
|
23
|
+
};
|
24
|
+
var info = function () {
|
25
|
+
var messages = [];
|
26
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
27
|
+
messages[_i] = arguments[_i];
|
28
|
+
}
|
29
|
+
if (isDevOrTest) {
|
30
|
+
console.log.apply(console, __spreadArrays(["Logger.info"], messages));
|
31
|
+
}
|
32
|
+
};
|
33
|
+
var warn = function (content) {
|
34
|
+
if (isDevOrTest) {
|
35
|
+
var stack = new Error().stack;
|
36
|
+
console.warn("Logger.warn", { content: content, stack: stack });
|
37
|
+
}
|
38
|
+
if (!!raygunKey && sendWarning) {
|
39
|
+
raygunInstance.send({ error: content, tags: ["warning"] });
|
40
|
+
}
|
41
|
+
};
|
42
|
+
var error = function (error, tags) {
|
43
|
+
if (tags === void 0) { tags = []; }
|
44
|
+
if (isDevOrTest) {
|
45
|
+
console.error("Logger.error", error, tags);
|
46
|
+
}
|
47
|
+
if (!!raygunKey) {
|
48
|
+
raygunInstance.send({ error: error, tags: __spreadArrays(["error"], tags) });
|
49
|
+
}
|
50
|
+
};
|
51
|
+
return {
|
52
|
+
initUser: initUser,
|
53
|
+
info: info,
|
54
|
+
warn: warn,
|
55
|
+
error: error,
|
56
|
+
};
|
57
|
+
};
|
@@ -0,0 +1,16 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useNavigation = void 0;
|
4
|
+
var react_1 = require("react");
|
5
|
+
var Navigation_provider_1 = require("../components/Navigation/Navigation.provider");
|
6
|
+
exports.useNavigation = function () {
|
7
|
+
var navigationContext = Navigation_provider_1.useNavigationContext();
|
8
|
+
react_1.useEffect(function () {
|
9
|
+
return function () {
|
10
|
+
navigationContext.setPageTitle("");
|
11
|
+
navigationContext.setPrevPath("");
|
12
|
+
};
|
13
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
14
|
+
}, []);
|
15
|
+
return navigationContext;
|
16
|
+
};
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.usePhone = void 0;
|
4
|
+
var Auth_provider_1 = require("../providers/Auth.provider");
|
5
|
+
var copywrite_1 = require("../helpers/copywrite");
|
6
|
+
exports.usePhone = function () {
|
7
|
+
var authUser = Auth_provider_1.useAuth().authUser;
|
8
|
+
var activeCountry = authUser.country.toUpperCase();
|
9
|
+
return {
|
10
|
+
localizeCopy: function (copy, country) {
|
11
|
+
return copywrite_1.localizePhone(copy, country || activeCountry);
|
12
|
+
},
|
13
|
+
};
|
14
|
+
};
|
@@ -0,0 +1,21 @@
|
|
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.useQueryInit = void 0;
|
7
|
+
var useMount_1 = __importDefault(require("react-use/lib/useMount"));
|
8
|
+
var useCookie_1 = __importDefault(require("react-use/lib/useCookie"));
|
9
|
+
var query_string_1 = __importDefault(require("query-string"));
|
10
|
+
var cookies_1 = require("../constants/cookies");
|
11
|
+
exports.useQueryInit = function () {
|
12
|
+
var _a = useCookie_1.default(cookies_1.CookieNames.APILevel), setApiLevelCookie = _a[1];
|
13
|
+
var _b = useCookie_1.default(cookies_1.CookieNames.AppID), setAppIDCookie = _b[1];
|
14
|
+
var _c = useCookie_1.default(cookies_1.CookieNames.VersionCode), setVersionCodeCookie = _c[1];
|
15
|
+
useMount_1.default(function () {
|
16
|
+
var queryParams = query_string_1.default.parse(window.location.search);
|
17
|
+
setApiLevelCookie(queryParams.api_level || "");
|
18
|
+
setAppIDCookie(queryParams.app_id || "");
|
19
|
+
setVersionCodeCookie(queryParams.version_code || "");
|
20
|
+
});
|
21
|
+
};
|