@fixefy/fixefy-ui-utils 0.2.3 → 0.2.4

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.
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ attachAuth: function() {
13
+ return attachAuth;
14
+ },
15
+ getToken: function() {
16
+ return getToken;
17
+ }
18
+ });
19
+ const _nookies = require("nookies");
20
+ function _define_property(obj, key, value) {
21
+ if (key in obj) {
22
+ Object.defineProperty(obj, key, {
23
+ value: value,
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true
27
+ });
28
+ } else {
29
+ obj[key] = value;
30
+ }
31
+ return obj;
32
+ }
33
+ function _object_spread(target) {
34
+ for(var i = 1; i < arguments.length; i++){
35
+ var source = arguments[i] != null ? arguments[i] : {};
36
+ var ownKeys = Object.keys(source);
37
+ if (typeof Object.getOwnPropertySymbols === "function") {
38
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
39
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
40
+ }));
41
+ }
42
+ ownKeys.forEach(function(key) {
43
+ _define_property(target, key, source[key]);
44
+ });
45
+ }
46
+ return target;
47
+ }
48
+ function ownKeys(object, enumerableOnly) {
49
+ var keys = Object.keys(object);
50
+ if (Object.getOwnPropertySymbols) {
51
+ var symbols = Object.getOwnPropertySymbols(object);
52
+ if (enumerableOnly) {
53
+ symbols = symbols.filter(function(sym) {
54
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
55
+ });
56
+ }
57
+ keys.push.apply(keys, symbols);
58
+ }
59
+ return keys;
60
+ }
61
+ function _object_spread_props(target, source) {
62
+ source = source != null ? source : {};
63
+ if (Object.getOwnPropertyDescriptors) {
64
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
65
+ } else {
66
+ ownKeys(Object(source)).forEach(function(key) {
67
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
68
+ });
69
+ }
70
+ return target;
71
+ }
72
+ const attachAuth = (ctx, headers)=>{
73
+ const token = getToken(ctx);
74
+ return _object_spread_props(_object_spread({}, headers), {
75
+ authorization: `Bearer ${token}`
76
+ });
77
+ };
78
+ const getToken = (ctx)=>{
79
+ return (0, _nookies.parseCookies)(ctx)['token'];
80
+ } // export const checkLoggedIn = async ({ client }) => {
81
+ // const rv = await client
82
+ // .query({ query: gql(ME_QUERY) })
83
+ // .then(({ data }) => ({ loggedInUser: data }))
84
+ // .catch(() => ({
85
+ // loggedInUser: null,
86
+ // })); // Fail gracefully
87
+ // return rv;
88
+ // };
89
+ ;
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ generateMappings: function() {
13
+ return generateMappings;
14
+ },
15
+ getLambda: function() {
16
+ return getLambda;
17
+ },
18
+ getLambdaParams: function() {
19
+ return getLambdaParams;
20
+ },
21
+ getLambdaResult: function() {
22
+ return getLambdaResult;
23
+ }
24
+ });
25
+ const _awssdk = /*#__PURE__*/ _interop_require_default(require("aws-sdk"));
26
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
27
+ try {
28
+ var info = gen[key](arg);
29
+ var value = info.value;
30
+ } catch (error) {
31
+ reject(error);
32
+ return;
33
+ }
34
+ if (info.done) {
35
+ resolve(value);
36
+ } else {
37
+ Promise.resolve(value).then(_next, _throw);
38
+ }
39
+ }
40
+ function _async_to_generator(fn) {
41
+ return function() {
42
+ var self = this, args = arguments;
43
+ return new Promise(function(resolve, reject) {
44
+ var gen = fn.apply(self, args);
45
+ function _next(value) {
46
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
47
+ }
48
+ function _throw(err) {
49
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
50
+ }
51
+ _next(undefined);
52
+ });
53
+ };
54
+ }
55
+ function _define_property(obj, key, value) {
56
+ if (key in obj) {
57
+ Object.defineProperty(obj, key, {
58
+ value: value,
59
+ enumerable: true,
60
+ configurable: true,
61
+ writable: true
62
+ });
63
+ } else {
64
+ obj[key] = value;
65
+ }
66
+ return obj;
67
+ }
68
+ function _interop_require_default(obj) {
69
+ return obj && obj.__esModule ? obj : {
70
+ default: obj
71
+ };
72
+ }
73
+ function _object_spread(target) {
74
+ for(var i = 1; i < arguments.length; i++){
75
+ var source = arguments[i] != null ? arguments[i] : {};
76
+ var ownKeys = Object.keys(source);
77
+ if (typeof Object.getOwnPropertySymbols === "function") {
78
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
79
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
80
+ }));
81
+ }
82
+ ownKeys.forEach(function(key) {
83
+ _define_property(target, key, source[key]);
84
+ });
85
+ }
86
+ return target;
87
+ }
88
+ function ownKeys(object, enumerableOnly) {
89
+ var keys = Object.keys(object);
90
+ if (Object.getOwnPropertySymbols) {
91
+ var symbols = Object.getOwnPropertySymbols(object);
92
+ if (enumerableOnly) {
93
+ symbols = symbols.filter(function(sym) {
94
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
95
+ });
96
+ }
97
+ keys.push.apply(keys, symbols);
98
+ }
99
+ return keys;
100
+ }
101
+ function _object_spread_props(target, source) {
102
+ source = source != null ? source : {};
103
+ if (Object.getOwnPropertyDescriptors) {
104
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
105
+ } else {
106
+ ownKeys(Object(source)).forEach(function(key) {
107
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
108
+ });
109
+ }
110
+ return target;
111
+ }
112
+ const getLambda = (args)=>{
113
+ const { key, region, secret } = args, lambdaCredentials = new _awssdk.default.Credentials({
114
+ accessKeyId: key,
115
+ secretAccessKey: secret
116
+ }), rv = new _awssdk.default.Lambda({
117
+ credentials: lambdaCredentials,
118
+ region,
119
+ maxRetries: 0,
120
+ httpOptions: {
121
+ connectTimeout: 30000,
122
+ timeout: 300000
123
+ }
124
+ });
125
+ return rv;
126
+ };
127
+ const getLambdaParams = (args)=>{
128
+ const { function_name: functionName } = args, // clientContextObj: unknown = { authorization, file_name, ws },
129
+ clientContext = '' //Buffer.from( JSON.stringify( clientContextObj ) ).toString( 'base64' )
130
+ ;
131
+ const rv = {
132
+ ClientContext: clientContext,
133
+ FunctionName: functionName,
134
+ InvocationType: 'RequestResponse',
135
+ Payload: ''
136
+ };
137
+ return rv;
138
+ };
139
+ const generateMappings = function() {
140
+ var _ref = _async_to_generator(function*(args) {
141
+ // get the lambda's params
142
+ const params = getLambdaParams(args);
143
+ // get lambda
144
+ const lambda = getLambda(args);
145
+ // create promise
146
+ const p = new Promise((resolve, reject)=>{
147
+ lambda.invoke(params, (err, data)=>{
148
+ if (err) {
149
+ reject(err);
150
+ } else {
151
+ resolve(data);
152
+ }
153
+ });
154
+ });
155
+ // execute lambda
156
+ const result = yield p;
157
+ // get result
158
+ const rv = getLambdaResult({
159
+ result
160
+ });
161
+ return rv;
162
+ });
163
+ return function generateMappings(args) {
164
+ return _ref.apply(this, arguments);
165
+ };
166
+ }();
167
+ const getLambdaResult = (args)=>{
168
+ const { result: { ExecutedVersion: executedVersion, FunctionError: functionError, LogResult: logResult, Payload: payload, StatusCode: statusCode } } = args;
169
+ let rv = {
170
+ execute_version: executedVersion,
171
+ function_error: functionError,
172
+ log_result: logResult,
173
+ status_code: statusCode
174
+ };
175
+ // input check - if payload is invalid - return empty object
176
+ if (payload != null) {
177
+ const payloadObject = JSON.parse(payload);
178
+ rv = _object_spread_props(_object_spread({}, rv), {
179
+ body: payloadObject,
180
+ error: payloadObject.errorMessage
181
+ });
182
+ }
183
+ return rv;
184
+ };
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ _export_star(require("./aws_lambda_helper"), exports);
6
+ function _export_star(from, to) {
7
+ Object.keys(from).forEach(function(k) {
8
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
+ Object.defineProperty(to, k, {
10
+ enumerable: true,
11
+ get: function() {
12
+ return from[k];
13
+ }
14
+ });
15
+ }
16
+ });
17
+ return from;
18
+ }
@@ -0,0 +1,390 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ buildCode: function() {
13
+ return buildCode;
14
+ },
15
+ convertToString: function() {
16
+ return convertToString;
17
+ },
18
+ copyToClipboard: function() {
19
+ return copyToClipboard;
20
+ },
21
+ determineIconByEvent: function() {
22
+ return determineIconByEvent;
23
+ },
24
+ formatNumberWithCommas: function() {
25
+ return formatNumberWithCommas;
26
+ },
27
+ getNormalizationKeyForEntity: function() {
28
+ return getNormalizationKeyForEntity;
29
+ },
30
+ getScoreColor: function() {
31
+ return getScoreColor;
32
+ },
33
+ getStringValueByValueType: function() {
34
+ return getStringValueByValueType;
35
+ },
36
+ getVal: function() {
37
+ return getVal;
38
+ },
39
+ isInServer: function() {
40
+ return isInServer;
41
+ },
42
+ isValidTimestamp: function() {
43
+ return isValidTimestamp;
44
+ },
45
+ lineString: function() {
46
+ return lineString;
47
+ },
48
+ makeString: function() {
49
+ return makeString;
50
+ },
51
+ nest: function() {
52
+ return nest;
53
+ },
54
+ normalizeStringBodyRaw: function() {
55
+ return normalizeStringBodyRaw;
56
+ },
57
+ normalizeTimestamp: function() {
58
+ return normalizeTimestamp;
59
+ },
60
+ titleCase: function() {
61
+ return titleCase;
62
+ },
63
+ toCamelCase: function() {
64
+ return toCamelCase;
65
+ },
66
+ toCamelCaseString: function() {
67
+ return toCamelCaseString;
68
+ },
69
+ toCurrency: function() {
70
+ return toCurrency;
71
+ },
72
+ toInitials: function() {
73
+ return toInitials;
74
+ },
75
+ toPascalCase: function() {
76
+ return toPascalCase;
77
+ },
78
+ toWords: function() {
79
+ return toWords;
80
+ },
81
+ trimRuleCode: function() {
82
+ return trimRuleCode;
83
+ },
84
+ useStatePromisify: function() {
85
+ return useStatePromisify;
86
+ }
87
+ });
88
+ const _ = require("../");
89
+ const _datefns = require("date-fns");
90
+ const _react = require("react");
91
+ const _fixefynumeric = /*#__PURE__*/ _interop_require_default(require("@fixefy/fixefy-numeric"));
92
+ function _define_property(obj, key, value) {
93
+ if (key in obj) {
94
+ Object.defineProperty(obj, key, {
95
+ value: value,
96
+ enumerable: true,
97
+ configurable: true,
98
+ writable: true
99
+ });
100
+ } else {
101
+ obj[key] = value;
102
+ }
103
+ return obj;
104
+ }
105
+ function _interop_require_default(obj) {
106
+ return obj && obj.__esModule ? obj : {
107
+ default: obj
108
+ };
109
+ }
110
+ function _object_spread(target) {
111
+ for(var i = 1; i < arguments.length; i++){
112
+ var source = arguments[i] != null ? arguments[i] : {};
113
+ var ownKeys = Object.keys(source);
114
+ if (typeof Object.getOwnPropertySymbols === "function") {
115
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
116
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
117
+ }));
118
+ }
119
+ ownKeys.forEach(function(key) {
120
+ _define_property(target, key, source[key]);
121
+ });
122
+ }
123
+ return target;
124
+ }
125
+ function ownKeys(object, enumerableOnly) {
126
+ var keys = Object.keys(object);
127
+ if (Object.getOwnPropertySymbols) {
128
+ var symbols = Object.getOwnPropertySymbols(object);
129
+ if (enumerableOnly) {
130
+ symbols = symbols.filter(function(sym) {
131
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
132
+ });
133
+ }
134
+ keys.push.apply(keys, symbols);
135
+ }
136
+ return keys;
137
+ }
138
+ function _object_spread_props(target, source) {
139
+ source = source != null ? source : {};
140
+ if (Object.getOwnPropertyDescriptors) {
141
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
142
+ } else {
143
+ ownKeys(Object(source)).forEach(function(key) {
144
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
145
+ });
146
+ }
147
+ return target;
148
+ }
149
+ const buildCode = (obj, level = 0, name)=>{
150
+ const toRender = [];
151
+ const keys = Object.keys(obj);
152
+ if (keys.length < 1) {
153
+ toRender.push(lineString(level, name) + '{}');
154
+ return toRender;
155
+ }
156
+ toRender.push(lineString(level, name) + '{');
157
+ keys.forEach((key)=>{
158
+ if (key === '__typename') return;
159
+ if (typeof obj[key] === 'object' && obj[key] !== null) {
160
+ toRender.push(...buildCode(obj[key], level + 1, key));
161
+ } else {
162
+ const val = getVal(obj[key]);
163
+ toRender.push(lineString(level + 1, key) + val);
164
+ }
165
+ });
166
+ toRender.push(lineString(level) + '}');
167
+ return toRender;
168
+ };
169
+ const copyToClipboard = (str)=>{
170
+ if (window == undefined) return;
171
+ const el = document.createElement('textarea');
172
+ el.value = str;
173
+ el.setAttribute('readonly', '');
174
+ el.style.position = 'absolute';
175
+ el.style.left = '-9999px';
176
+ document.body.appendChild(el);
177
+ el.select();
178
+ document.execCommand('copy');
179
+ document.body.removeChild(el);
180
+ };
181
+ const convertToString = (input)=>{
182
+ if (input) {
183
+ return typeof input === 'string' ? input : String(input);
184
+ } else {
185
+ return null;
186
+ }
187
+ };
188
+ const determineIconByEvent = (event)=>{
189
+ let rv;
190
+ if (event) {
191
+ switch(event.type){
192
+ case 'charged':
193
+ rv = '../../static/images/transactions/billing.svg';
194
+ break;
195
+ case 'packed':
196
+ rv = '../../static/images/transactions/system.svg';
197
+ break;
198
+ default:
199
+ rv = '../../static/images/transactions/user.svg';
200
+ break;
201
+ }
202
+ }
203
+ return rv;
204
+ };
205
+ const formatNumberWithCommas = (number)=>{
206
+ return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
207
+ };
208
+ const getNormalizationKeyForEntity = (entity_type)=>{
209
+ let rv;
210
+ switch(entity_type.toLowerCase()){
211
+ case _.EntityTypes.User:
212
+ rv = 'username';
213
+ break;
214
+ case _.EntityTypes.Pricing:
215
+ rv = 'value';
216
+ break;
217
+ case _.EntityTypes.Metadata:
218
+ rv = 'title';
219
+ break;
220
+ case _.EntityTypes.Transaction:
221
+ case _.EntityTypes.Transmission:
222
+ rv = 'readable_id';
223
+ break;
224
+ default:
225
+ rv = 'title';
226
+ break;
227
+ }
228
+ return rv;
229
+ };
230
+ const getStringValueByValueType = ({ value, name })=>{
231
+ let rv;
232
+ let entity_type;
233
+ let roundedValue;
234
+ let formattedValue;
235
+ switch(typeof value){
236
+ case 'boolean':
237
+ rv = value === true ? 'YES' : 'NO';
238
+ break;
239
+ case 'number':
240
+ if (isValidTimestamp(value)) {
241
+ rv = normalizeTimestamp(value, false);
242
+ break;
243
+ }
244
+ roundedValue = Number(value) === value && value % 1 === 0 ? value : value.toFixed(2);
245
+ formattedValue = name === 'variance' ? `${(roundedValue * 100).toFixed(1)}%` : roundedValue;
246
+ rv = formattedValue;
247
+ break;
248
+ case 'object':
249
+ if (Array.isArray(value)) {
250
+ rv = value.join(', ');
251
+ } else {
252
+ entity_type = value && value.__typename && value.__typename.toLowerCase();
253
+ rv = titleCase(value[getNormalizationKeyForEntity(entity_type)]);
254
+ }
255
+ break;
256
+ case 'string':
257
+ rv = titleCase(value);
258
+ break;
259
+ }
260
+ return rv;
261
+ };
262
+ const getVal = (val)=>{
263
+ if (typeof val === 'number') return val;
264
+ if (typeof val === 'string') return `"${val}"`;
265
+ return val;
266
+ };
267
+ const isInServer = ()=>typeof window === 'undefined';
268
+ const isValidTimestamp = (_timestamp)=>{
269
+ const parsedNumber = typeof _timestamp == 'string' ? parseInt(_timestamp) : _timestamp;
270
+ const newTimestamp = new Date(parsedNumber).getTime();
271
+ const rv = _fixefynumeric.default.isFloat(newTimestamp) || _fixefynumeric.default.isInt(newTimestamp) && newTimestamp.toString().length >= 10;
272
+ return rv;
273
+ };
274
+ const lineString = (level, name)=>{
275
+ let str = '';
276
+ for(let i = 0; i < level; i++){
277
+ str += ' ';
278
+ }
279
+ if (name) {
280
+ str += name + ': ';
281
+ }
282
+ return str;
283
+ };
284
+ const makeString = (len = 5)=>{
285
+ let text = '';
286
+ const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
287
+ for(let i = 0; i < len; i++)text += possible.charAt(Math.floor(Math.random() * possible.length));
288
+ return text;
289
+ };
290
+ const nest = ({ items })=>{
291
+ const mappedArray = Object.create(null);
292
+ items.forEach((item)=>mappedArray[item.id] = _object_spread_props(_object_spread({}, item), {
293
+ children: []
294
+ }));
295
+ const nestedArray = [];
296
+ items.forEach((item)=>{
297
+ if (item) {
298
+ if (item.parent) mappedArray[item.parent] && mappedArray[item.parent].children.push(mappedArray[item.id]);
299
+ else nestedArray.push(mappedArray[item.id]);
300
+ }
301
+ });
302
+ return nestedArray;
303
+ };
304
+ const normalizeTimestamp = (timestamp, options)=>{
305
+ const { dateOnly, format: _format } = options || {};
306
+ const _timestamp = typeof timestamp == 'string' ? parseInt(timestamp) : timestamp;
307
+ const rv = (0, _datefns.format)(new Date(_timestamp), _format ? _format : dateOnly ? 'dd/MM/yyyy' : 'dd/MM/yyyy hh:mm');
308
+ return rv;
309
+ };
310
+ const normalizeStringBodyRaw = (key, body)=>{
311
+ return typeof body[key] === 'string' && (key === 'body' || key === 'raw') ? JSON.parse(body[key]) : body[key];
312
+ };
313
+ const titleCase = (str = '')=>str && toPascalCase(str.toString(), true);
314
+ const toCamelCase = (inputArray)=>{
315
+ let result = '';
316
+ var _inputArray_length;
317
+ for(let i = 0, len = (_inputArray_length = inputArray === null || inputArray === void 0 ? void 0 : inputArray.length) !== null && _inputArray_length !== void 0 ? _inputArray_length : 0; i < len; i++){
318
+ const currentStr = inputArray === null || inputArray === void 0 ? void 0 : inputArray.at(i);
319
+ let tempStr = currentStr.toLowerCase();
320
+ if (i != 0) {
321
+ // convert first letter to upper case (the word is in lowercase)
322
+ tempStr = tempStr.substr(0, 1).toUpperCase() + tempStr.substr(1);
323
+ }
324
+ result += tempStr;
325
+ }
326
+ return result;
327
+ };
328
+ const toCamelCaseString = (input)=>{
329
+ const words = toWords(input);
330
+ return toCamelCase(words);
331
+ };
332
+ const toCurrency = (input, options)=>{
333
+ return input ? typeof input == 'number' ? input.toFixed((options === null || options === void 0 ? void 0 : options.decimel) || 2).replace(/\B(?=(\d{3})+(?!\d))/g, ',') : input.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') : input;
334
+ };
335
+ const toInitials = (str)=>{
336
+ if (str === '') return str;
337
+ const matches = str.match(/\b(\w)/g);
338
+ return matches === null || matches === void 0 ? void 0 : matches.join('').toUpperCase();
339
+ };
340
+ const toPascalCase = (string, title = false)=>{
341
+ return string && string.replace(/(_[a-z])?(^[a-z])?(_|\s[a-z])?/g, ($1)=>$1.toUpperCase().replace('_', title ? ' ' : ''));
342
+ };
343
+ const toWords = (input)=>{
344
+ input = convertToString(input);
345
+ const regex = /[A-Z\xC0-\xD6\xD8-\xDE]?[a-z\xDF-\xF6\xF8-\xFF]+|[A-Z\xC0-\xD6\xD8-\xDE]+(?![a-z\xDF-\xF6\xF8-\xFF])|\d+/g;
346
+ return input === null || input === void 0 ? void 0 : input.match(regex);
347
+ };
348
+ const trimRuleCode = (input)=>{
349
+ const stringefied = typeof input == 'string' ? input : JSON.stringify(input);
350
+ const match = stringefied.substring(stringefied.indexOf('{') + 1, stringefied.lastIndexOf('}'));
351
+ return match ? match : '';
352
+ };
353
+ const useStatePromisify = (_state)=>{
354
+ const [state, setState] = (0, _react.useState)(_state);
355
+ const resolverRef = (0, _react.useRef)(null);
356
+ (0, _react.useEffect)(()=>{
357
+ if (resolverRef.current) {
358
+ resolverRef.current(state);
359
+ resolverRef.current = null;
360
+ }
361
+ }, [
362
+ resolverRef,
363
+ state
364
+ ]);
365
+ const handleSetState = (0, _react.useCallback)((stateAction)=>{
366
+ setState(stateAction);
367
+ return new Promise((resolve)=>{
368
+ resolverRef.current = resolve;
369
+ });
370
+ }, [
371
+ setState
372
+ ]);
373
+ return [
374
+ state,
375
+ handleSetState
376
+ ];
377
+ };
378
+ const getScoreColor = (value)=>{
379
+ if (value <= 20) {
380
+ return 'bad';
381
+ } else if (value <= 40) {
382
+ return 'low';
383
+ } else if (value <= 60) {
384
+ return 'medium';
385
+ } else if (value <= 80) {
386
+ return 'high';
387
+ } else {
388
+ return 'excellent';
389
+ }
390
+ };