storemw-core-client 1.0.1

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 (112) hide show
  1. package/.env +1 -0
  2. package/.vscode/launch.json +24 -0
  3. package/dist/config/config.d.ts +6 -0
  4. package/dist/config/config.js +13 -0
  5. package/dist/config/env.d.ts +7 -0
  6. package/dist/config/env.js +16 -0
  7. package/dist/config/index.d.ts +2 -0
  8. package/dist/config/index.js +8 -0
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.js +32 -0
  11. package/dist/lib/ApiService.d.ts +41 -0
  12. package/dist/lib/ApiService.js +143 -0
  13. package/dist/lib/index.d.ts +4 -0
  14. package/dist/lib/index.js +9 -0
  15. package/dist/lib/queryParams.d.ts +43 -0
  16. package/dist/lib/queryParams.js +99 -0
  17. package/dist/services/account/AccountService.d.ts +52 -0
  18. package/dist/services/account/AccountService.js +119 -0
  19. package/dist/services/auth/AuthService.d.ts +44 -0
  20. package/dist/services/auth/AuthService.js +76 -0
  21. package/dist/services/branch/BranchService.d.ts +124 -0
  22. package/dist/services/branch/BranchService.js +162 -0
  23. package/dist/services/business/BusinessService.d.ts +91 -0
  24. package/dist/services/business/BusinessService.js +153 -0
  25. package/dist/services/document/DocumentService.d.ts +578 -0
  26. package/dist/services/document/DocumentService.js +615 -0
  27. package/dist/services/index.d.ts +36 -0
  28. package/dist/services/index.js +97 -0
  29. package/dist/services/injection_field/InjectionFieldService.d.ts +113 -0
  30. package/dist/services/injection_field/InjectionFieldService.js +220 -0
  31. package/dist/services/inventory/InventoryService.d.ts +27 -0
  32. package/dist/services/inventory/InventoryService.js +231 -0
  33. package/dist/services/item/ItemService.d.ts +227 -0
  34. package/dist/services/item/ItemService.js +411 -0
  35. package/dist/services/location/LocationService.d.ts +154 -0
  36. package/dist/services/location/LocationService.js +256 -0
  37. package/dist/services/logistic/LogisticService.d.ts +104 -0
  38. package/dist/services/logistic/LogisticService.js +150 -0
  39. package/dist/services/permission/PermissionService.d.ts +296 -0
  40. package/dist/services/permission/PermissionService.js +576 -0
  41. package/dist/services/permission/config/custom/adminPermission.d.ts +4 -0
  42. package/dist/services/permission/config/custom/adminPermission.js +18 -0
  43. package/dist/services/permission/config/custom/config.d.ts +40 -0
  44. package/dist/services/permission/config/custom/config.js +23 -0
  45. package/dist/services/permission/config/default/adminPermission.d.ts +2 -0
  46. package/dist/services/permission/config/default/adminPermission.js +129 -0
  47. package/dist/services/permission/config/default/agentPermission.d.ts +2 -0
  48. package/dist/services/permission/config/default/agentPermission.js +43 -0
  49. package/dist/services/permission/config/default/customerPermission.d.ts +2 -0
  50. package/dist/services/permission/config/default/customerPermission.js +10 -0
  51. package/dist/services/permission/config/default/driverPermission.d.ts +2 -0
  52. package/dist/services/permission/config/default/driverPermission.js +4 -0
  53. package/dist/services/permission/config/default/workerPermission.d.ts +2 -0
  54. package/dist/services/permission/config/default/workerPermission.js +25 -0
  55. package/dist/services/rate/RateService.d.ts +201 -0
  56. package/dist/services/rate/RateService.js +303 -0
  57. package/dist/services/region/RegionService.d.ts +111 -0
  58. package/dist/services/region/RegionService.js +193 -0
  59. package/dist/services/repository/RepositoryService.d.ts +153 -0
  60. package/dist/services/repository/RepositoryService.js +243 -0
  61. package/dist/services/transaction/TransactionService.d.ts +153 -0
  62. package/dist/services/transaction/TransactionService.js +173 -0
  63. package/dist/services/user/BranchUserService.d.ts +129 -0
  64. package/dist/services/user/BranchUserService.js +193 -0
  65. package/dist/services/user/UserRoleService.d.ts +105 -0
  66. package/dist/services/user/UserRoleService.js +193 -0
  67. package/dist/services/user/UserService.d.ts +269 -0
  68. package/dist/services/user/UserService.js +477 -0
  69. package/dist/services/wallet/WalletService.d.ts +104 -0
  70. package/dist/services/wallet/WalletService.js +163 -0
  71. package/dist/utils/dateUtils.d.ts +6 -0
  72. package/dist/utils/dateUtils.js +28 -0
  73. package/dist/utils/index.d.ts +2 -0
  74. package/dist/utils/index.js +13 -0
  75. package/package.json +27 -0
  76. package/src/config/config.ts +15 -0
  77. package/src/config/env.ts +18 -0
  78. package/src/config/index.ts +2 -0
  79. package/src/index.ts +41 -0
  80. package/src/lib/ApiService.ts +170 -0
  81. package/src/lib/index.ts +5 -0
  82. package/src/lib/queryParams.ts +162 -0
  83. package/src/services/account/AccountService.ts +232 -0
  84. package/src/services/auth/AuthService.ts +125 -0
  85. package/src/services/branch/BranchService.ts +330 -0
  86. package/src/services/business/BusinessService.ts +277 -0
  87. package/src/services/document/DocumentService.ts +1471 -0
  88. package/src/services/index.ts +73 -0
  89. package/src/services/injection_field/InjectionFieldService.ts +483 -0
  90. package/src/services/inventory/InventoryService.ts +314 -0
  91. package/src/services/item/ItemService.ts +707 -0
  92. package/src/services/location/LocationService.ts +505 -0
  93. package/src/services/logistic/LogisticService.ts +285 -0
  94. package/src/services/permission/PermissionService.ts +1069 -0
  95. package/src/services/permission/config/custom/adminPermission.ts +19 -0
  96. package/src/services/permission/config/custom/config.ts +39 -0
  97. package/src/services/permission/config/default/adminPermission.ts +129 -0
  98. package/src/services/permission/config/default/agentPermission.ts +42 -0
  99. package/src/services/permission/config/default/customerPermission.ts +9 -0
  100. package/src/services/permission/config/default/driverPermission.ts +4 -0
  101. package/src/services/permission/config/default/workerPermission.ts +25 -0
  102. package/src/services/rate/RateService.ts +570 -0
  103. package/src/services/region/RegionService.ts +353 -0
  104. package/src/services/repository/RepositoryService.ts +437 -0
  105. package/src/services/transaction/TransactionService.ts +404 -0
  106. package/src/services/user/BranchUserService.ts +381 -0
  107. package/src/services/user/UserRoleService.ts +342 -0
  108. package/src/services/user/UserService.ts +807 -0
  109. package/src/services/wallet/WalletService.ts +300 -0
  110. package/src/utils/dateUtils.ts +26 -0
  111. package/src/utils/index.ts +2 -0
  112. package/tsconfig.json +119 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WalletService = exports.walletCurrencyTypes = exports.walletTargetTypes = exports.walletTypes = void 0;
4
+ const lib_1 = require("@/lib");
5
+ const lib_2 = require("@/lib");
6
+ exports.walletTypes = {
7
+ wallet: "wallet",
8
+ walletUser: "wallet_user"
9
+ };
10
+ exports.walletTargetTypes = {
11
+ wallet: "wallet",
12
+ walletUser: "wallet_user"
13
+ };
14
+ exports.walletCurrencyTypes = {
15
+ myr: "MYR",
16
+ sgd: "SGD",
17
+ usd: "USD",
18
+ cny: "CNY"
19
+ };
20
+ const getCreatePayload = (walletType, data) => {
21
+ if (walletType === "wallet" && "wallet" in data) {
22
+ return {
23
+ wallet: {
24
+ name: data.wallet.name,
25
+ currency: data.wallet.currency,
26
+ wallet_key: data.wallet.walletKey,
27
+ primary_wallet: (data.wallet.isPrimary === true) ? 1 : 0,
28
+ conversion_rate: data.wallet.conversionRate,
29
+ description: data.wallet.description,
30
+ status: (data.wallet.status === true) ? 1 : 0
31
+ }
32
+ };
33
+ }
34
+ if (walletType === "wallet_user" && "walletUser" in data) {
35
+ return {
36
+ wallet: {
37
+ wallet_id: data.walletUser.walletId,
38
+ user_id: data.walletUser.userId,
39
+ status: (data.walletUser.status === true) ? 1 : 0
40
+ }
41
+ };
42
+ }
43
+ };
44
+ const getUpdatePayload = (walletType, data) => {
45
+ if (walletType === "wallet" && "wallet" in data) {
46
+ return {
47
+ wallet: {
48
+ name: data.wallet.name,
49
+ currency: data.wallet.currency,
50
+ wallet_key: data.wallet.walletKey,
51
+ primary_wallet: (data.wallet.isPrimary === true) ? 1 : 0,
52
+ conversion_rate: data.wallet.conversionRate,
53
+ description: data.wallet.description,
54
+ status: (data.wallet.status === true) ? 1 : 0
55
+ }
56
+ };
57
+ }
58
+ if (walletType === "wallet_user" && "walletUser" in data) {
59
+ return {
60
+ wallet: {
61
+ status: (data.walletUser.status === true) ? 1 : 0
62
+ }
63
+ };
64
+ }
65
+ };
66
+ const WalletService = (props) => {
67
+ const { walletType = "wallet", walletTargetType, ...rest } = props ?? {};
68
+ const { makeCall } = (0, lib_1.ApiService)(rest?.customToken ? { customToken: rest.customToken } : {});
69
+ const endpoint1 = "wallet";
70
+ const endpoint2 = "wallets";
71
+ const list = async (props) => {
72
+ const { walletType: overrideWalletType } = props;
73
+ const url = (0, lib_2.buildApiListUrl)(`${endpoint2}/${overrideWalletType || walletType}`, props);
74
+ const response = await makeCall({
75
+ url,
76
+ method: "get",
77
+ payload: {},
78
+ // configuration
79
+ });
80
+ return response;
81
+ };
82
+ const get = async (props) => {
83
+ const { id, walletType: overrideWalletType } = props;
84
+ const url = (0, lib_2.buildApiGetUrl)(`${endpoint1}/${overrideWalletType || walletType}/${id}`, props);
85
+ const response = await makeCall({
86
+ url,
87
+ method: "get",
88
+ payload: {},
89
+ // configuration
90
+ });
91
+ return response;
92
+ };
93
+ const create = async ({ data, walletType: overrideWalletType, walletTargetType: overrideWalletTargetType }) => {
94
+ let _walletType = overrideWalletType || walletType;
95
+ let payload = getCreatePayload(_walletType, data);
96
+ let url = `${endpoint1}`;
97
+ let postData = {
98
+ scope: {
99
+ target: overrideWalletTargetType || walletTargetType,
100
+ action: "",
101
+ },
102
+ payload
103
+ };
104
+ const response = await makeCall({
105
+ url,
106
+ method: "post",
107
+ payload: postData
108
+ });
109
+ return response;
110
+ };
111
+ const update = async ({ id, data, walletType: overrideWalletType, walletTargetType: overrideWalletTargetType }) => {
112
+ let url = `${endpoint1}/${id}`;
113
+ let _walletType = overrideWalletType || walletType;
114
+ let payload = getUpdatePayload(_walletType, data);
115
+ const postData = {
116
+ scope: {
117
+ target: overrideWalletTargetType || walletTargetType,
118
+ action: "",
119
+ },
120
+ payload
121
+ };
122
+ const response = await makeCall({
123
+ url,
124
+ method: "put",
125
+ payload: postData
126
+ });
127
+ return response;
128
+ };
129
+ const remove = async ({ ids, walletTargetType: overrideWalletTargetType }) => {
130
+ let url = `${endpoint2}/delete`;
131
+ const postData = {
132
+ scope: {
133
+ target: overrideWalletTargetType || walletTargetType,
134
+ },
135
+ payload: {
136
+ ids
137
+ }
138
+ };
139
+ const response = await makeCall({
140
+ url,
141
+ method: "post",
142
+ payload: postData
143
+ });
144
+ return response;
145
+ };
146
+ const getDataTypes = async ({ walletType: overrideWalletType }) => {
147
+ let url = `${endpoint1}/data_types/${overrideWalletType || walletType}`;
148
+ const response = await makeCall({
149
+ url,
150
+ method: "get",
151
+ });
152
+ return response;
153
+ };
154
+ return {
155
+ list,
156
+ get,
157
+ create,
158
+ update,
159
+ remove,
160
+ getDataTypes,
161
+ };
162
+ };
163
+ exports.WalletService = WalletService;
@@ -0,0 +1,6 @@
1
+ import dayjs from "dayjs";
2
+ export declare const getCurrentDateTimeISO: () => string;
3
+ export declare const dayjsDisplayFormat = "YYYY-MM-DD HH:mm:ss";
4
+ export declare const getCurrentDateTime: () => string;
5
+ export declare const formatDisplayDateTime: (date: any) => string;
6
+ export { dayjs };
@@ -0,0 +1,28 @@
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.dayjs = exports.formatDisplayDateTime = exports.getCurrentDateTime = exports.dayjsDisplayFormat = exports.getCurrentDateTimeISO = void 0;
7
+ const dayjs_1 = __importDefault(require("dayjs"));
8
+ exports.dayjs = dayjs_1.default;
9
+ const utc_1 = __importDefault(require("dayjs/plugin/utc"));
10
+ const timezone_1 = __importDefault(require("dayjs/plugin/timezone"));
11
+ // extend plugins
12
+ dayjs_1.default.extend(utc_1.default);
13
+ dayjs_1.default.extend(timezone_1.default);
14
+ // set default timezone to Malaysia
15
+ dayjs_1.default.tz.setDefault("Asia/Kuala_Lumpur");
16
+ const getCurrentDateTimeISO = () => {
17
+ return (0, dayjs_1.default)().toISOString();
18
+ };
19
+ exports.getCurrentDateTimeISO = getCurrentDateTimeISO;
20
+ exports.dayjsDisplayFormat = "YYYY-MM-DD HH:mm:ss";
21
+ const getCurrentDateTime = () => {
22
+ return (0, dayjs_1.default)().format(exports.dayjsDisplayFormat);
23
+ };
24
+ exports.getCurrentDateTime = getCurrentDateTime;
25
+ const formatDisplayDateTime = (date) => {
26
+ return (0, dayjs_1.default)(date).format(exports.dayjsDisplayFormat);
27
+ };
28
+ exports.formatDisplayDateTime = formatDisplayDateTime;
@@ -0,0 +1,2 @@
1
+ export { default as _ } from "lodash";
2
+ export { dayjs, getCurrentDateTime, getCurrentDateTimeISO, formatDisplayDateTime } from "./dateUtils";
@@ -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
+ exports.formatDisplayDateTime = exports.getCurrentDateTimeISO = exports.getCurrentDateTime = exports.dayjs = exports._ = void 0;
7
+ var lodash_1 = require("lodash");
8
+ Object.defineProperty(exports, "_", { enumerable: true, get: function () { return __importDefault(lodash_1).default; } });
9
+ var dateUtils_1 = require("./dateUtils");
10
+ Object.defineProperty(exports, "dayjs", { enumerable: true, get: function () { return dateUtils_1.dayjs; } });
11
+ Object.defineProperty(exports, "getCurrentDateTime", { enumerable: true, get: function () { return dateUtils_1.getCurrentDateTime; } });
12
+ Object.defineProperty(exports, "getCurrentDateTimeISO", { enumerable: true, get: function () { return dateUtils_1.getCurrentDateTimeISO; } });
13
+ Object.defineProperty(exports, "formatDisplayDateTime", { enumerable: true, get: function () { return dateUtils_1.formatDisplayDateTime; } });
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "storemw-core-client",
3
+ "version": "1.0.1",
4
+ "main": "index.js",
5
+ "scripts": {
6
+ "build": "tsc",
7
+ "dev": "ts-node -r tsconfig-paths/register src/index.ts",
8
+ "start": "node dist/index.js"
9
+ },
10
+ "keywords": [],
11
+ "author": "",
12
+ "license": "ISC",
13
+ "description": "",
14
+ "devDependencies": {
15
+ "@types/lodash": "^4.17.20",
16
+ "@types/node": "^20.19.24",
17
+ "ts-node": "^10.9.2",
18
+ "tsconfig-paths": "^4.2.0",
19
+ "typescript": "^5.0.0"
20
+ },
21
+ "dependencies": {
22
+ "axios": "^1.13.1",
23
+ "dayjs": "^1.11.18",
24
+ "dotenv": "^17.2.3",
25
+ "lodash": "^4.17.21"
26
+ }
27
+ }
@@ -0,0 +1,15 @@
1
+ export interface ApiConfig {
2
+ baseURL: string;
3
+ token?: string;
4
+ }
5
+
6
+ // Shared default config (global runtime memory)
7
+ let defaultConfig: ApiConfig = {
8
+ baseURL: "",
9
+ };
10
+
11
+ export const setApiConfig = (newConfig: ApiConfig) => {
12
+ defaultConfig = { ...defaultConfig, ...newConfig };
13
+ };
14
+
15
+ export const getApiConfig = (): ApiConfig => defaultConfig;
@@ -0,0 +1,18 @@
1
+ import "dotenv/config";
2
+
3
+ export const env = {
4
+ NODE_ENV: process.env.NODE_ENV ?? "development",
5
+
6
+ // 👇 the API endpoint
7
+ API_BASE_URL:
8
+ process.env.NEXT_PUBLIC_API_BASE_URL ??
9
+ process.env.VITE_API_BASE_URL ??
10
+ process.env.API_BASE_URL ??
11
+ "",
12
+
13
+ // 👇 optional auth token
14
+ API_TOKEN: process.env.API_TOKEN ?? "",
15
+
16
+ // 👇 you can add more if needed later
17
+ DEBUG: process.env.DEBUG === "true",
18
+ };
@@ -0,0 +1,2 @@
1
+ export { env } from "./env"
2
+ export { getApiConfig, setApiConfig } from "./config"
package/src/index.ts ADDED
@@ -0,0 +1,41 @@
1
+ import {
2
+ AuthService,
3
+ LocationService,
4
+ } from "@/services"
5
+
6
+ import { setApiConfig, env } from "@/config"
7
+
8
+ // set the api config from env
9
+ setApiConfig({
10
+ baseURL: env.API_BASE_URL,
11
+ token: ""
12
+ })
13
+
14
+ const testAuthToken = async () => {
15
+ const authService = AuthService({ authTargetType: "administrator" })
16
+ const response = await authService.authLogin({
17
+ username: "masteradmin2",
18
+ password: "abc12345"
19
+ })
20
+ return response
21
+ }
22
+
23
+ // const testLocation = async () => {
24
+ // const locationService = LocationService({ customToken: "sdfdsfds" })
25
+ // await locationService.get({ id: 23432, dataTypes: [], locationType: "location" })
26
+ //
27
+ // }
28
+
29
+ (async () => {
30
+
31
+ try {
32
+ // await testLocation();
33
+ const response = await testAuthToken();
34
+ console.log('response', response)
35
+ } catch (error) {
36
+ console.error(`error`, error)
37
+ }
38
+
39
+ })();
40
+
41
+
@@ -0,0 +1,170 @@
1
+ import axios, { isAxiosError } from "axios";
2
+ import type { AxiosResponse, AxiosInstance, AxiosRequestConfig } from "axios";
3
+
4
+ // import { EnvService, /* SessionService */ } from '.'; // Adjust path as needed
5
+
6
+ import { getApiConfig } from "@/config";
7
+
8
+ type ApiResponse = {
9
+ status: boolean;
10
+ message: string;
11
+ data?: any;
12
+ }
13
+
14
+ type ApiError = {
15
+ message: string;
16
+ }
17
+
18
+ type AxiosInstanceParams = {
19
+ axiosClient: AxiosInstance,
20
+ cancelToken: any
21
+ }
22
+
23
+ export type ApiServiceType = {
24
+ customToken?: string, // custom jwt token
25
+ }
26
+
27
+ // You can inject token later if needed (via a setter or directly)
28
+ let accessToken: string = '';
29
+
30
+ const createAxiosInstance = (endpointUrl: string): AxiosInstanceParams => {
31
+ // return axios.create({
32
+ // baseURL: endpointUrl,
33
+ // timeout: 30000,
34
+ // });
35
+
36
+ let axiosClient = axios.create({
37
+ baseURL: endpointUrl,
38
+ timeout: 30000,
39
+ });
40
+
41
+ let cancelToken = axios.CancelToken
42
+
43
+ return {
44
+ axiosClient,
45
+ cancelToken
46
+ }
47
+ }
48
+
49
+ export const ApiService = (props?: ApiServiceType) => {
50
+
51
+ const customToken = props?.customToken
52
+
53
+ // const { baseURL } = EnvService(); // always read fresh env if needed
54
+ const { baseURL } = getApiConfig()
55
+
56
+ const {
57
+ axiosClient,
58
+ // cancelToken,
59
+ } = createAxiosInstance(baseURL)
60
+
61
+ const setToken = (token: string) => {
62
+ accessToken = token;
63
+ }
64
+
65
+ const getAuthorization = (): string => {
66
+ return accessToken ? `Bearer ${accessToken}` : '';
67
+ }
68
+
69
+ const makeCall = async ({
70
+ url,
71
+ payload,
72
+ method,
73
+ sessionAuthentication = true
74
+ }: {
75
+ url: string;
76
+ payload?: any;
77
+ method: 'get' | 'post' | 'put' | 'delete';
78
+ sessionAuthentication?: boolean; // skip to check the session for headers
79
+ }): Promise<ApiResponse> => {
80
+
81
+ if (customToken) { // if option to use customToken
82
+ setToken(customToken)
83
+ } else {
84
+ if (sessionAuthentication) {
85
+ // const { getSession } = SessionService()
86
+
87
+ // const session = await getSession()
88
+
89
+ // if (session?.token) {
90
+ // setToken(session?.token)
91
+ // }
92
+ }
93
+ }
94
+
95
+
96
+ // const client = createAxiosInstance(baseURL);
97
+ const client = axiosClient
98
+
99
+ // console.log('accessToken', accessToken)
100
+
101
+ const headers: Record<string, string> = {
102
+ 'Content-Type': 'application/json',
103
+ ...(accessToken ? { Authorization: getAuthorization() } : {}),
104
+ };
105
+
106
+ const config: AxiosRequestConfig = {
107
+ method,
108
+ url,
109
+ headers,
110
+ ...(method.toLowerCase() !== 'get' ? { data: payload } : {}),
111
+ };
112
+
113
+ // console.log('[Axios Call]', baseURL, url, method, JSON.stringify(payload));
114
+
115
+ try {
116
+ const response = await client.request<ApiResponse>(config);
117
+ return parseResponse(response);
118
+ } catch (error: unknown) {
119
+ if (isAxiosError<ApiError>(error)) {
120
+ const message =
121
+ error.response?.data?.message || error.message || 'Network error';
122
+
123
+ // console.log('error', error)
124
+ throw getError(false, message);
125
+ }
126
+ throw getError(false, `${(error as any)?.message || 'Unknown error'}`);
127
+ }
128
+ }
129
+
130
+ const parseResponse = (response: AxiosResponse<ApiResponse>) => {
131
+ if (!isRequestSuccess(response)) {
132
+ throw getError(false, 'Server failed to respond properly');
133
+ }
134
+
135
+ if (!isResultSuccess(response)) {
136
+ throw getError(false, response?.data?.message || 'API returned an error');
137
+ }
138
+
139
+ const { status, message, data } = response.data;
140
+ return getSuccess(status, message, data);
141
+ }
142
+
143
+ const isRequestSuccess = (response: AxiosResponse): boolean => response.status === 200
144
+
145
+ const isResultSuccess = (response: AxiosResponse<ApiResponse>): boolean =>
146
+ Boolean(response?.data?.status)
147
+
148
+ const getError = (status: boolean, message = '') => ({
149
+ status,
150
+ message,
151
+ })
152
+
153
+ const getSuccess = (status: boolean, message = '', data?: any) => ({
154
+ status,
155
+ message,
156
+ data,
157
+ })
158
+
159
+ return {
160
+ createAxiosInstance,
161
+ getAuthorization,
162
+ setToken,
163
+ makeCall,
164
+ parseResponse,
165
+ isRequestSuccess,
166
+ isResultSuccess,
167
+ getError,
168
+ getSuccess
169
+ }
170
+ };
@@ -0,0 +1,5 @@
1
+ export { ApiService } from './ApiService';
2
+ export type { ApiServiceType } from "./ApiService"
3
+
4
+ export { filterOperatorTypes, buildApiGetUrl, buildApiListUrl, BuildApiListParamsProps, BuildApiGetParamsProps } from './queryParams';
5
+ export type { FilterItem } from './queryParams';
@@ -0,0 +1,162 @@
1
+ export const _operatorSymbols = {
2
+ eq: "=",
3
+ startsWith: "_%",
4
+ endsWith: "%_",
5
+ contains: "%",
6
+ containsOr: "%||",
7
+ anyOf: "where_in",
8
+ anyOfOr: "or_where_in",
9
+ excludeOf: "where_not_in",
10
+ excludeOfOr: "or_where_not_in",
11
+ moreThanEq: ">=",
12
+ moreThanEqOr: ">=||",
13
+ lessThanEq: "<=",
14
+ lessThanEqOr: "<=||",
15
+ notEq: "!=",
16
+ eqOr: "=||",
17
+ havingInOr: "or_having_in",
18
+ isNull: "null",
19
+ isNotNull: "null!=",
20
+ isNullOr: "null||",
21
+ } as const;
22
+
23
+ export const filterOperatorTypes = Object.keys(_operatorSymbols).reduce((acc, key) => {
24
+ acc[key] = key;
25
+ return acc;
26
+ }, {} as Record<string, string>);
27
+
28
+ export type FilterOperator = keyof typeof filterOperatorTypes;
29
+
30
+ export type FilterItem = {
31
+ name: string;
32
+ // operator: keyof typeof _operatorSymbols;
33
+ operator: FilterOperator,
34
+ value?: any;
35
+ group?: string;
36
+ }
37
+
38
+ // export type SortInfo = {
39
+ // id: string;
40
+ // dir: 1 | -1;
41
+ // }
42
+
43
+ export type BuildApiListParamsProps = {
44
+ limit?: number;
45
+ offset?: number;
46
+ filterValue?: FilterItem[];
47
+ // sortInfo?: SortInfo;
48
+ sortField?: string;
49
+ sortOrder?: "asc" | "desc";
50
+ dataTypes?: string[];
51
+ extraFilters?: any[]; // e.g. location filters
52
+ }
53
+
54
+ export type BuildApiGetParamsProps = {
55
+ dataTypes?: string[];
56
+ }
57
+
58
+ export function buildApiListUrl(
59
+ endpoint: string,
60
+ props: BuildApiListParamsProps,
61
+ // operatorSymbols: Record<string, string>
62
+ ): string {
63
+
64
+ let filters: any[] = [];
65
+
66
+ const {
67
+ limit,
68
+ offset,
69
+ filterValue,
70
+ // sortInfo,
71
+ sortField,
72
+ sortOrder,
73
+ dataTypes = [],
74
+ extraFilters = [],
75
+ } = props;
76
+
77
+ // Process filters
78
+ if (filterValue) {
79
+ for (const filter of filterValue) {
80
+ if (
81
+ filter.value !== undefined ||
82
+ filter.operator === "isNull" ||
83
+ filter.operator === "isNotNull" ||
84
+ filter.operator === "isNullOr"
85
+ ) {
86
+ const line: any = {
87
+ field: filter.name,
88
+ operator: _operatorSymbols[filter.operator as keyof typeof _operatorSymbols],
89
+ value: filter.value,
90
+ };
91
+
92
+ if (filter.group) line.group = filter.group;
93
+
94
+ filters.push(line);
95
+ }
96
+ }
97
+ }
98
+
99
+ // Add any extra filters passed in
100
+ filters = [...filters, ...extraFilters];
101
+
102
+ // Sorting
103
+ let sortfield = sortField ?? "id";
104
+ let sortorder = sortOrder ?? "desc";
105
+
106
+ // if (sortInfo?.id) {
107
+ // sortfield = sortInfo.id;
108
+ // sortorder = sortInfo.dir === -1 ? "desc" : "asc";
109
+ // }
110
+
111
+ // Build URL
112
+ let url = `${endpoint}?limit=${limit}&offset=${offset}&sortfield=${sortfield}&sortorder=${sortorder}`;
113
+ url += `&filters=${JSON.stringify(filters.length > 0 ? filters : [])}`;
114
+
115
+ if (dataTypes.length > 0) {
116
+ url += `&datatypes=${JSON.stringify(dataTypes)}`;
117
+ }
118
+
119
+ return url;
120
+ }
121
+
122
+ export function buildApiGetUrl(
123
+ endpoint: string,
124
+ props: BuildApiGetParamsProps,
125
+ // operatorSymbols: Record<string, string>
126
+ ): string {
127
+
128
+ // let filters: any[] = [];
129
+
130
+ const {
131
+ // limit,
132
+ // offset,
133
+ // filterValue,
134
+ // // sortInfo,
135
+ // sortField,
136
+ // sortOrder,
137
+ dataTypes = [],
138
+ // extraFilters = [],
139
+ } = props;
140
+
141
+ // Add any extra filters passed in
142
+ // filters = [...filters, ...extraFilters];
143
+
144
+ // Sorting
145
+ // let sortfield = sortField ?? "id";
146
+ // let sortorder = sortOrder ?? "desc";
147
+
148
+ // if (sortInfo?.id) {
149
+ // sortfield = sortInfo.id;
150
+ // sortorder = sortInfo.dir === -1 ? "desc" : "asc";
151
+ // }
152
+
153
+ // Build URL
154
+ let url = `${endpoint}?`;
155
+ // url += `&filters=${JSON.stringify(filters.length > 0 ? filters : [])}`;
156
+
157
+ if (dataTypes.length > 0) {
158
+ url += `datatypes=${JSON.stringify(dataTypes)}`;
159
+ }
160
+
161
+ return url;
162
+ }