forstok-ui-lib 5.6.10 → 5.7.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forstok-ui-lib",
3
- "version": "5.6.10",
3
+ "version": "5.7.0",
4
4
  "description": "Forstok UI Components Library",
5
5
  "path": "dist",
6
6
  "main": "dist/index.js",
@@ -39,6 +39,7 @@
39
39
  "@types/react": "^19.0.2",
40
40
  "@types/react-datepicker": "^6.2.0",
41
41
  "@types/react-dom": "^19.0.2",
42
+ "@wojtekmaj/react-daterange-picker": "^6.0.0",
42
43
  "approvejs": "^3.1.2",
43
44
  "html-to-text": "^9.0.5",
44
45
  "moment": "^2.30.1",
package/rollup.config.js CHANGED
@@ -31,7 +31,10 @@ export default [
31
31
  ],
32
32
  plugins: [
33
33
  PeerDepsExternalPlugin(),
34
- resolve({exportConditions: ['node']}),
34
+ resolve({
35
+ exportConditions: ['node'],
36
+ extensions: ['.css']
37
+ }),
35
38
  commonjs(),
36
39
  typescript({
37
40
  tsconfig: './tsconfig.json',
@@ -1,6 +1,6 @@
1
1
  import approve from 'approvejs'
2
2
  import { ReactNode } from 'react';
3
- import { TMessage, TMessageQuestion } from '../../components/message/typed';
3
+ import { TMessage, TMessageFunction, TMessageQuestion } from '../../components/message/typed';
4
4
  import { TObject } from '../../typeds/base.typed';
5
5
  import { errorTitle } from './helper';
6
6
 
@@ -441,4 +441,161 @@ export const evGenerateValueMatch = (validation?: TObject, data?: any) => {
441
441
 
442
442
  export const unescapeHTML = (value?: string) => {
443
443
  return value ? value.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&') : value as string
444
+ }
445
+
446
+ export const evScrollTo = (el?: HTMLElement, range?: number) => {
447
+ const _range = range || 140;
448
+ if (el) {
449
+ setTimeout(() => {
450
+ const viewportEl = document.querySelector('._refMasterTableViewport') as HTMLElement;
451
+ if (!viewportEl) {
452
+ return;
453
+ }
454
+ const bodyRect = viewportEl.getBoundingClientRect();
455
+ const elemRect = el.getBoundingClientRect();
456
+ if (elemRect) {
457
+ const offsetTop = (elemRect.top - bodyRect.top - _range) + viewportEl.scrollTop;
458
+ const offsetLeft = (elemRect.left - bodyRect.left) + viewportEl.scrollLeft
459
+ viewportEl.scrollTo(offsetLeft,offsetTop);
460
+ }
461
+ }, 20);
462
+ }
463
+ }
464
+
465
+ export const evHighlight = (ids: number[]) => {
466
+ if (!ids?.length) {
467
+ return;
468
+ }
469
+ const timer = Math.ceil(ids.length/10)*10 <= 10 ? 30 : (Math.ceil(ids.length/10)*10 >= 200 ? 200 : Math.ceil(ids.length/10)*10);
470
+ setTimeout(() => {
471
+ const contentHightlightedEls = document.querySelectorAll('._refMasterTableBodyContent.is-highlighted') as NodeListOf<HTMLElement>;
472
+ if (contentHightlightedEls?.length) {
473
+ for (const contentHightlightedEl of contentHightlightedEls) {
474
+ contentHightlightedEl.classList.remove('is-highlighted');
475
+ }
476
+ }
477
+ for(let i = 0; i < ids.length; i++) {
478
+ const id = ids[i];
479
+ const el = document.querySelector(`#row-${id}`) as HTMLElement;
480
+ if (el) {
481
+ el.classList.add('is-highlighted');
482
+ setTimeout(() => {
483
+ el.classList.remove('is-highlighted');
484
+ }, 1888)
485
+ }
486
+ if(i === (ids.length - 1)) {
487
+ const firstEl = document.querySelector(`#row-${ids[0]}`) as HTMLElement;
488
+ firstEl && evScrollTo(firstEl, 140);
489
+ }
490
+ }
491
+ }, timer)
492
+ }
493
+
494
+ export const evKeyMapperScanner = (oEvent: any) => {
495
+ var iCode = oEvent.which;
496
+ switch (true) {
497
+ case iCode >= 48 && iCode <= 90:
498
+ case (iCode >= 106 && iCode <= 111) || iCode === 45 || iCode === 173 || iCode === 189:
499
+ if (oEvent.key !== undefined && oEvent.key !== '') {
500
+ return oEvent.key;
501
+ }
502
+ var sDecoded = String.fromCharCode(iCode);
503
+ switch (oEvent.shiftKey) {
504
+ case false:
505
+ sDecoded = sDecoded.toLowerCase();
506
+ break;
507
+ case true:
508
+ sDecoded = sDecoded.toUpperCase();
509
+ break;
510
+ default:
511
+ break;
512
+ }
513
+ return sDecoded;
514
+ case iCode >= 96 && iCode <= 105:
515
+ return 0+(iCode-96);
516
+ default:
517
+ break;
518
+ }
519
+ return ''
520
+ }
521
+
522
+ export const evExecuteError = (evCreateMessage?: TMessageFunction) => {
523
+ const msg: TMessage = generateMessage('failed', 'Validation Errors found, Please fix it!');
524
+ evCreateMessage && evCreateMessage(msg);
525
+ const errorEl = document.querySelectorAll('.cell-error') as NodeListOf<HTMLDivElement>;
526
+ if (errorEl.length) {
527
+ evScrollTo(errorEl[0]);
528
+ }
529
+ }
530
+
531
+ export const evCheckAllValidation = (data: any[]) => {
532
+ let isError = false;
533
+ for(let x=0; x<data.length; x++) {
534
+ const _data = data[x];
535
+ const keys = Object.keys(_data);
536
+
537
+ for(let key of keys) {
538
+ if (Array.isArray(_data[key])) {
539
+ for(let i = 0; i < _data[key].length; i++){
540
+ const _dataArr = _data[key][i];
541
+ const keysArr = Object.keys(_dataArr);
542
+ for(let keyArr of keysArr) {
543
+ if (Array.isArray(_dataArr[keyArr])) {
544
+ for(let z = 0; z < _dataArr[keyArr].length; z++){
545
+ const _dataArrArr = _dataArr[keyArr][z];
546
+ const keysArrArr = Object.keys(_dataArrArr);
547
+ for(let keyArrArr of keysArrArr) {
548
+ if (keyArrArr.indexOf('_error') !== -1 && !isError) {
549
+ isError = true;
550
+ }
551
+ if (isError) {
552
+ break;
553
+ }
554
+ }
555
+ if (isError) {
556
+ break;
557
+ }
558
+ }
559
+ } else {
560
+ if (keyArr.indexOf('_error') !== -1 && !isError) {
561
+ isError = true;
562
+ }
563
+ if (isError) {
564
+ break;
565
+ }
566
+ }
567
+ if (isError) {
568
+ break;
569
+ }
570
+ }
571
+ if (isError) {
572
+ break;
573
+ }
574
+ }
575
+ } else {
576
+ if (key.indexOf('_error') !== -1 && !isError) {
577
+ isError = true
578
+ }
579
+ if (isError) {
580
+ break;
581
+ }
582
+ }
583
+ if (isError) {
584
+ break;
585
+ }
586
+ }
587
+ }
588
+ return isError;
589
+ }
590
+
591
+ export const unCamelCaseKeys = (object: TObject) => {
592
+ const unCamelCase = (value: string) => {
593
+ return value.replace(/([a-z][A-Z])/g, function (g) { return g[0] + '_' + g[1].toLowerCase() });
594
+ };
595
+ return Object
596
+ .entries(object)
597
+ .reduce((carry: any, [key, value]) => {
598
+ carry[unCamelCase(key)] = value
599
+ return carry
600
+ }, {});
444
601
  }
@@ -55,4 +55,130 @@ export const colorCommonQuantity = (value: number) => {
55
55
  else {
56
56
  return 'green';
57
57
  }
58
+ }
59
+
60
+ export const statusColor = (name?: string) => {
61
+ if(!name) return '';
62
+ switch(name){
63
+ case 'Picked Up':
64
+ case 'Shipped':
65
+ case 'Delivered':
66
+ case 'Completed':
67
+ return 'green';
68
+ case 'Ready to Ship':
69
+ case 'Not Shipped':
70
+ return '#F8813E';
71
+ case 'Pending Payment':
72
+ return 'red';
73
+ default:
74
+ return '';
75
+ }
76
+ }
77
+
78
+ export const colorStockStatus = (value?: string) => {
79
+ switch(value){
80
+ case 'success':
81
+ case 'approved':
82
+ case 'putaway':
83
+ case 'adjusted':
84
+ case 'Adjusted':
85
+ case 'outbounded':
86
+ case 'Outbounded':
87
+ return '#21BA45';
88
+ case 'waiting':
89
+ case 'waiting adjustment':
90
+ case 'Waiting Adjustment':
91
+ case 'waiting outbound':
92
+ case 'Waiting Outbound':
93
+ return '#F8813E';
94
+ default:
95
+ return '#696969';
96
+ }
97
+ }
98
+
99
+ export const colorStockInboundStatus = (value?: string) => {
100
+ switch(value){
101
+ case 'inbounded':
102
+ case 'Inbounded':
103
+ case 'incompleted':
104
+ case 'Incompleted':
105
+ case 'Incomplete':
106
+ case 'putaway':
107
+ case 'Putaway':
108
+ return '#21BA45';
109
+ case 'waiting-inbound':
110
+ case 'Waiting Inbound':
111
+ case 'partial-inbounded':
112
+ case 'Partial Inbounded':
113
+ case 'partial-putaway':
114
+ case 'Partial Putaway':
115
+ return '#F8813E';
116
+ default:
117
+ return '#696969';
118
+ }
119
+ }
120
+
121
+ export const colorStockQuantity = (qty?: number, actual?:number) => {
122
+ if (qty === actual) return "lightgreen";
123
+ else return "red";
124
+ }
125
+
126
+ export const colorStockInboundQuantity = (status: string) => {
127
+ const statusWar = [ 'Inbounded', 'Incompleted', 'Putaway' ];
128
+ if (statusWar.includes(status)) return "lightgreen";
129
+ else return 'yellow';
130
+ }
131
+
132
+ export const colorStockAdjust = (qty: number, newQty: number) => {
133
+ if (qty < newQty) return "lightgreen";
134
+ else return "red";
135
+ }
136
+
137
+ export const errorMessage = (value: string) => {
138
+ switch (value) {
139
+ case 'unique' :
140
+ return 'already exists';
141
+ default:
142
+ return 'is required';
143
+ }
144
+ }
145
+
146
+ export const typePage = (value?: string) => {
147
+ if (!value) {
148
+ return '';
149
+ }
150
+ switch (value){
151
+ case 'adjustment': case 'inbound': case 'outbound':
152
+ return 'stock';
153
+ case 'bundle':
154
+ return 'bundle';
155
+ case 'sales':
156
+ return 'sales';
157
+ default:
158
+ return '';
159
+ }
160
+ }
161
+
162
+ export const historyType = (name?: string) => {
163
+ if(!name) return ''
164
+ switch(name) {
165
+ case 'Transfer':
166
+ return 'ST';
167
+ case 'Adjustment':
168
+ case 'Adjustment (API)':
169
+ case 'Adjustment (Interface & Excel)':
170
+ return 'SA';
171
+ case 'Inbound':
172
+ return 'SI';
173
+ case 'Outbound':
174
+ return 'SOB';
175
+ case 'Return':
176
+ return 'RMA';
177
+ case 'Sales Order':
178
+ return 'SO';
179
+ case 'Opening Balance':
180
+ return '';
181
+ default:
182
+ return '';
183
+ }
58
184
  }