intelicoreact 1.8.8 → 1.8.10

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 (128) hide show
  1. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.jsx +18 -1
  2. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.jsx +121 -1
  3. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.jsx +507 -1
  4. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.jsx +46 -1
  5. package/dist/Atomic/FormElements/NumericInput/NumericInput.jsx +337 -1
  6. package/dist/Atomic/FormElements/RadioGroup/RadioGroup.jsx +66 -1
  7. package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.jsx +78 -1
  8. package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.jsx +54 -1
  9. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.jsx +183 -1
  10. package/dist/Atomic/FormElements/RangeList/RangeList.jsx +181 -1
  11. package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.jsx +41 -1
  12. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.jsx +449 -1
  13. package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.jsx +865 -1
  14. package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.jsx +37 -1
  15. package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.jsx +48 -1
  16. package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.jsx +62 -1
  17. package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.jsx +175 -1
  18. package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.jsx +65 -1
  19. package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.jsx +118 -1
  20. package/dist/Atomic/FormElements/Text/Text.jsx +126 -1
  21. package/dist/Atomic/FormElements/Textarea/Textarea.jsx +61 -1
  22. package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.jsx +181 -1
  23. package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.jsx +60 -1
  24. package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.jsx +83 -1
  25. package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.jsx +80 -1
  26. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.jsx +103 -1
  27. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.jsx +115 -1
  28. package/dist/Atomic/Layout/Header/Header.jsx +86 -1
  29. package/dist/Atomic/Layout/MainMenu/MainMenu.jsx +164 -1
  30. package/dist/Atomic/UI/AccordionTable/AccordionTable.jsx +250 -1
  31. package/dist/Atomic/UI/AccordionText/AccordionText.jsx +68 -1
  32. package/dist/Atomic/UI/Arrow/Arrow.jsx +134 -1
  33. package/dist/Atomic/UI/Box/Box.jsx +53 -1
  34. package/dist/Atomic/UI/Chart/Chart.jsx +178 -1
  35. package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.jsx +78 -1
  36. package/dist/Atomic/UI/Chart/partial/optionsConstructor.jsx +334 -1
  37. package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.jsx +111 -1
  38. package/dist/Atomic/UI/DateTime/DateTime.jsx +57 -1
  39. package/dist/Atomic/UI/DebugContainer/DebugContainer.jsx +44 -1
  40. package/dist/Atomic/UI/DebugContainer/useDebugContainer.jsx +15 -1
  41. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.jsx +223 -1
  42. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.jsx +75 -1
  43. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.jsx +86 -1
  44. package/dist/Atomic/UI/PieChart/PieChart.jsx +41 -1
  45. package/dist/Atomic/UI/Table/Partials/TdCell.jsx +87 -1
  46. package/dist/Atomic/UI/Table/Partials/TdHeader.jsx +36 -1
  47. package/dist/Atomic/UI/Table/Partials/TdRow.jsx +103 -1
  48. package/dist/Atomic/UI/Table/Partials/TdTitle.jsx +55 -1
  49. package/dist/Atomic/UI/Table/Table.jsx +63 -1
  50. package/dist/Atomic/UI/Table/TdTypes/TdActions.jsx +80 -1
  51. package/dist/Atomic/UI/Table/TdTypes/TdPriority.jsx +26 -1
  52. package/dist/Atomic/UI/Table/TdTypes/TdRange.jsx +13 -1
  53. package/dist/Atomic/UI/Table/TdTypes/TdWeight.jsx +56 -1
  54. package/dist/Atomic/UI/TagList/TagList.jsx +256 -1
  55. package/dist/Atomic/UI/WizardStepper/constructor.jsx +86 -1
  56. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.jsx +254 -1
  57. package/dist/Functions/customEventListener.jsx +96 -1
  58. package/dist/Functions/operations.jsx +138 -1
  59. package/dist/Functions/useFormTools/functions/RenderFields.jsx +108 -1
  60. package/dist/Functions/useFormTools/index.jsx +777 -1
  61. package/dist/Functions/usePasswordChecker.jsx +128 -1
  62. package/dist/Functions/utils.jsx +492 -1
  63. package/dist/Molecular/CustomIcons/components/AffiliateNetworks.jsx +22 -1
  64. package/dist/Molecular/CustomIcons/components/AlertCircle.jsx +24 -1
  65. package/dist/Molecular/CustomIcons/components/AppStore.jsx +30 -1
  66. package/dist/Molecular/CustomIcons/components/Arrow.jsx +33 -1
  67. package/dist/Molecular/CustomIcons/components/ArrowDown.jsx +18 -1
  68. package/dist/Molecular/CustomIcons/components/ArrowLeft.jsx +23 -1
  69. package/dist/Molecular/CustomIcons/components/ArrowRight.jsx +23 -1
  70. package/dist/Molecular/CustomIcons/components/ArrowUp.jsx +18 -1
  71. package/dist/Molecular/CustomIcons/components/Bell.jsx +16 -1
  72. package/dist/Molecular/CustomIcons/components/Button.jsx +13 -1
  73. package/dist/Molecular/CustomIcons/components/Campaigns.jsx +17 -1
  74. package/dist/Molecular/CustomIcons/components/Check.jsx +15 -1
  75. package/dist/Molecular/CustomIcons/components/Check2.jsx +13 -1
  76. package/dist/Molecular/CustomIcons/components/ChevronDown.jsx +13 -1
  77. package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.jsx +12 -1
  78. package/dist/Molecular/CustomIcons/components/ChevronLeft.jsx +12 -1
  79. package/dist/Molecular/CustomIcons/components/ChevronRight.jsx +12 -1
  80. package/dist/Molecular/CustomIcons/components/ChevronUp.jsx +12 -1
  81. package/dist/Molecular/CustomIcons/components/ChevronUpDown.jsx +28 -1
  82. package/dist/Molecular/CustomIcons/components/Close.jsx +15 -1
  83. package/dist/Molecular/CustomIcons/components/ColumnsOrder.jsx +18 -1
  84. package/dist/Molecular/CustomIcons/components/Delete.jsx +17 -1
  85. package/dist/Molecular/CustomIcons/components/Edit.jsx +16 -1
  86. package/dist/Molecular/CustomIcons/components/Email.jsx +32 -1
  87. package/dist/Molecular/CustomIcons/components/FinturfLogo.jsx +19 -1
  88. package/dist/Molecular/CustomIcons/components/FinturfLogo2.jsx +36 -1
  89. package/dist/Molecular/CustomIcons/components/Flows.jsx +16 -1
  90. package/dist/Molecular/CustomIcons/components/Gift.jsx +26 -1
  91. package/dist/Molecular/CustomIcons/components/GoogleAuth.jsx +30 -1
  92. package/dist/Molecular/CustomIcons/components/GooglePlay.jsx +30 -1
  93. package/dist/Molecular/CustomIcons/components/HelpCircle.jsx +20 -1
  94. package/dist/Molecular/CustomIcons/components/HelpCircle2.jsx +21 -1
  95. package/dist/Molecular/CustomIcons/components/HelpCircleFilled.jsx +20 -1
  96. package/dist/Molecular/CustomIcons/components/Home.jsx +17 -1
  97. package/dist/Molecular/CustomIcons/components/Home2.jsx +23 -1
  98. package/dist/Molecular/CustomIcons/components/Key.jsx +24 -1
  99. package/dist/Molecular/CustomIcons/components/Landers.jsx +21 -1
  100. package/dist/Molecular/CustomIcons/components/Lock.jsx +16 -1
  101. package/dist/Molecular/CustomIcons/components/Mail.jsx +27 -1
  102. package/dist/Molecular/CustomIcons/components/Mastercard.jsx +74 -1
  103. package/dist/Molecular/CustomIcons/components/Minus.jsx +26 -1
  104. package/dist/Molecular/CustomIcons/components/Offers.jsx +17 -1
  105. package/dist/Molecular/CustomIcons/components/Pause.jsx +29 -1
  106. package/dist/Molecular/CustomIcons/components/PayPal.jsx +42 -1
  107. package/dist/Molecular/CustomIcons/components/PayPalLightLarge.jsx +29 -1
  108. package/dist/Molecular/CustomIcons/components/Phone.jsx +31 -1
  109. package/dist/Molecular/CustomIcons/components/Play.jsx +26 -1
  110. package/dist/Molecular/CustomIcons/components/Plus.jsx +26 -1
  111. package/dist/Molecular/CustomIcons/components/Profile.jsx +17 -1
  112. package/dist/Molecular/CustomIcons/components/QRCode.jsx +30 -1
  113. package/dist/Molecular/CustomIcons/components/Rectangle.jsx +13 -1
  114. package/dist/Molecular/CustomIcons/components/Revert.jsx +14 -1
  115. package/dist/Molecular/CustomIcons/components/Star.jsx +15 -1
  116. package/dist/Molecular/CustomIcons/components/Star2.jsx +17 -1
  117. package/dist/Molecular/CustomIcons/components/TrafficSources.jsx +15 -1
  118. package/dist/Molecular/CustomIcons/components/Trash.jsx +16 -1
  119. package/dist/Molecular/CustomIcons/components/TrashRed.jsx +16 -1
  120. package/dist/Molecular/CustomIcons/components/Triggers.jsx +16 -1
  121. package/dist/Molecular/CustomIcons/components/User.jsx +26 -1
  122. package/dist/Molecular/CustomIcons/components/Visa.jsx +32 -1
  123. package/dist/Molecular/CustomIcons/components/X.jsx +13 -1
  124. package/dist/Molecular/FormElement/FormElement.jsx +52 -1
  125. package/dist/Molecular/FormWithDependOn/FormWithDependOn.jsx +161 -1
  126. package/dist/Molecular/InputAddress/InputAddress.jsx +641 -1
  127. package/dist/Molecular/InputPassword/InputPassword.jsx +50 -1
  128. package/package.json +1 -1
@@ -1 +1,256 @@
1
- function t(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=Array(n);e<n;e++)r[e]=t[e];return r}function n(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{},r=Object.keys(e);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(e).filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.forEach(function(n){var r;r=e[n],n in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r})}return t}function e(t,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e.push.apply(e,r)}return e})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t}function r(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){var e,r,i=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=i){var l=[],o=!0,u=!1;try{for(i=i.call(t);!(o=(e=i.next()).done)&&(l.push(e.value),!n||l.length!==n);o=!0);}catch(t){u=!0,r=t}finally{try{o||null==i.return||i.return()}finally{if(u)throw r}}return l}}(t,n)||i(t,n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(n,e){if(n){if("string"==typeof n)return t(n,e);var r=Object.prototype.toString.call(n).slice(8,-1);if("Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return t(n,e)}}import{jsx as l,jsxs as o}from"react/jsx-runtime";import u from"classnames";import{createRef as a,useEffect as c,useLayoutEffect as s,useRef as d,useState as f}from"react";import{Edit3 as m}from"react-feather";import{checkedRef as p}from"../../../Functions/utils";import v from"../Tag/Tag";import"./TagList.scss";export default function(g){var y,b,h,w=g.disabled,O=g.className,j=g.onTagClick,N=g.removeItem,I=void 0===N?null:N,S=g.items,_=void 0===S?[]:S,P=g.withToggle,C=void 0===P||P,k=g.disableShowMore,A=void 0!==k&&k,x=g.shownItemsCount,T=void 0===x?"auto":x,R=(g.testId,g.refProp),D=g.renderOrder,E=g.onEditClick,B=g.onToggleRenderAll,L=d(null),M=r(f([]),2),z=M[0],F=M[1],U=r(f(-1),2),W=U[0],$=U[1],q=r(f(-1),2),G=q[0],H=q[1],J=r(f(!C),2),K=J[0],Q=J[1],V=null!=(h=null==L||null==(b=L.current)||null==(y=b.getBoundingClientRect())?void 0:y.width)?h:-1,X=function(t){Q(t),null==B||B(t)},Y=function(n){if("number"==typeof T)return T;var e,r="function"==typeof E?60:32,l=z.reduce(function(e,l,o){var u,a,c,s=l.itemRef;if(e.skip)return e;var d=(null==s?void 0:s.current)&&window.getComputedStyle(s.current),f=[Number.parseInt(null==(c=s.current)||null==(a=c.getBoundingClientRect())?void 0:a.width,10),Number.parseInt(null==d?void 0:d.marginLeft,10),Number.parseInt(null==d?void 0:d.marginRight,10)].reduce(function(t,n){return isNaN(n)||(t+=n),t},0);return!isNaN(f)&&f>0&&f+e.width<n-r||0===o?e={count:e.count+1,width:e.width+f,items:((function(n){if(Array.isArray(n))return t(n)})(u=e.items)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(u)||i(u)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).concat([{w:f,r:null==s?void 0:s.current}])}:e.skip=!0,e},{count:0,width:0,items:[],skip:!1});return(null==l||null==(e=l.items)?void 0:e.length)===1&&z.length>1&&(l.items[0].r.style.maxWidth="".concat(n-r-8,"px")),null==l?void 0:l.count},Z=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){};null==t||t.preventDefault(),null==t||t.stopPropagation(),n(t)};return c(function(){$(-1),H(-1),X(!1),F(_.map(function(t){return e(n({},t),{itemRef:a()})}))},[_]),s(function(){if(C&&-1!==V&&-1===W){var t,n=V;0===n&&(n=Number.parseInt((null==L?void 0:L.current)?null==(t=window.getComputedStyle(null==L?void 0:L.current))?void 0:t.width:0)),isNaN(n)||$(Y(n))}},[z,V,null==L?void 0:L.current]),s(function(){H(W)},[W]),c(function(){H(K?null==z?void 0:z.length:W)},[K]),c(function(){(null==L?void 0:L.current)&&R&&(R.current=null==L?void 0:L.current)},[null==L?void 0:L.current]),o("div",{className:u("tag-list_wrapper","".concat(G===(null==z?void 0:z.length)&&C&&-1!==W&&W!==(null==z?void 0:z.length)?"tag-list_wrapper--all-items":"tag-list_wrapper--only-static-items"),O,{"tag-list_wrapper--disabled":w}),style:{visibility:-1===W?"hidden":"visible",zIndex:-1===W?"-1":"auto"},ref:L,children:[(null!=D?D:z.map(function(t){var n=t.value,e=t.id;return null!=n?n:e})).map(function(t,r){var i,o,u=z.find(function(n){var e=n.value,r=n.id;return r?r===t:!!e&&e===t});if(!u)return null;var a=-1!==G&&-1!==W&&r>=G;return l("div",{className:"tag-list_wrapper_item ".concat(a?"tag-list_wrapper_item--hidden":""),ref:p(null==u?void 0:u.itemRef),children:l(v,e(n({testId:"test-taglist-item-".concat(null!=(i=null==u?void 0:u.id)?i:null==u?void 0:u.value)},u),{onClick:j,removeItem:I}))},"tag-list-item-".concat(null!=(o=null==u?void 0:u.id)?o:null==u?void 0:u.value))}),function(){if((null==z?void 0:z.length)<T||!(null==z?void 0:z.length)||A)return null;var t=z.length-G;return 0!==t&&C&&-1!==W?l(v,{label:"+".concat(t),className:"tag-list_wrapper_render-more",onClick:A?function(){}:function(t){return Z(t,function(){return X(!0)})}}):null}(),G===(null==z?void 0:z.length)&&C&&-1!==W&&W!==(null==z?void 0:z.length)?l(v,{label:"...",className:"tag-list_wrapper_hide-more",onClick:function(t){return Z(t,function(){return X(!1)})}}):null,"function"==typeof E&&l("div",{className:"tag-list__edit-trigger",children:l(m,{onClick:E})})]})}
1
+ import cn from 'classnames';
2
+
3
+ import {
4
+ createRef,
5
+ useEffect,
6
+ useLayoutEffect,
7
+ useRef,
8
+ useState,
9
+ } from 'react';
10
+ import { Edit3 } from 'react-feather';
11
+
12
+ import { checkedRef } from '../../../Functions/utils';
13
+ import Tag from '../Tag/Tag';
14
+
15
+ import './TagList.scss';
16
+
17
+ function TagList({
18
+ disabled,
19
+ className,
20
+ onTagClick,
21
+ removeItem = null,
22
+ items = [],
23
+ withToggle = true,
24
+ disableShowMore = false,
25
+ shownItemsCount = 'auto',
26
+ testId = 'test-taglist',
27
+ refProp,
28
+
29
+ renderOrder,
30
+
31
+ onEditClick,
32
+ onToggleRenderAll,
33
+ }) {
34
+ const wrapperRef = useRef(null);
35
+ const [tagList, setTagList] = useState([]);
36
+
37
+ const [staticTagsCount, setStaticTagsCount] = useState(-1);
38
+ const [renderItemsCount, setRenderItemsCount] = useState(-1);
39
+ const [renderAll, setRenderAll] = useState(!withToggle);
40
+
41
+ const wrapperWidth
42
+ = wrapperRef?.current?.getBoundingClientRect()?.width ?? -1;
43
+
44
+ const setRenderAllInterceptor = (v) => {
45
+ setRenderAll(v);
46
+ onToggleRenderAll?.(v);
47
+ };
48
+
49
+ const getStaticTagsCount = (computedWidth) => {
50
+ if (typeof shownItemsCount === 'number') return shownItemsCount;
51
+
52
+ const delta = typeof onEditClick === 'function' ? 60 : 32;
53
+ const result = tagList.reduce(
54
+ (result, { itemRef }, index) => {
55
+ if (result.skip) return result;
56
+
57
+ const itemStyle
58
+ = itemRef?.current && window.getComputedStyle(itemRef.current);
59
+
60
+ const itemWidth = [
61
+ Number.parseInt(itemRef.current?.getBoundingClientRect()?.width, 10),
62
+ Number.parseInt(itemStyle?.marginLeft, 10),
63
+ Number.parseInt(itemStyle?.marginRight, 10),
64
+ ].reduce((result, item) => {
65
+ if (!isNaN(item)) result += item;
66
+ return result;
67
+ }, 0);
68
+
69
+ if (
70
+ (!isNaN(itemWidth)
71
+ && itemWidth > 0
72
+ && itemWidth + result.width < computedWidth - delta)
73
+ || index === 0
74
+ ) {
75
+ result = {
76
+ count: result.count + 1,
77
+ width: result.width + itemWidth,
78
+ items: [...result.items, { w: itemWidth, r: itemRef?.current }],
79
+ };
80
+ }
81
+ else {
82
+ result.skip = true;
83
+ }
84
+
85
+ return result;
86
+ },
87
+ { count: 0, width: 0, items: [], skip: false },
88
+ );
89
+ if (result?.items?.length === 1 && tagList.length > 1) {
90
+ result.items[0].r.style.maxWidth = `${computedWidth - delta - 8}px`;
91
+ }
92
+
93
+ return result?.count;
94
+ };
95
+
96
+ const cancelDefault = (e, cb = () => {}) => {
97
+ e?.preventDefault();
98
+ e?.stopPropagation();
99
+
100
+ cb(e);
101
+ };
102
+
103
+ const renderTags = () => {
104
+ const tagsRenderOrder
105
+ = renderOrder ?? tagList.map(({ value, id }) => value ?? id);
106
+
107
+ return tagsRenderOrder.map((v, i) => {
108
+ const item = tagList.find(({ value, id }) => {
109
+ if (id) return id === v; // сначала ищем по id
110
+ if (value) return value === v; // потом по value
111
+ return false;
112
+ });
113
+
114
+ if (!item) return null;
115
+
116
+ const isHidden
117
+ = renderItemsCount !== -1 && staticTagsCount !== -1
118
+ ? i >= renderItemsCount
119
+ : false;
120
+
121
+ return (
122
+ <div
123
+ className={`tag-list_wrapper_item ${isHidden ? 'tag-list_wrapper_item--hidden' : ''}`}
124
+ key={`tag-list-item-${item?.id ?? item?.value}`}
125
+ ref={checkedRef(item?.itemRef)}
126
+ >
127
+ <Tag
128
+ testId={`test-taglist-item-${item?.id ?? item?.value}`}
129
+ {...item}
130
+ onClick={onTagClick}
131
+ removeItem={removeItem}
132
+ />
133
+ </div>
134
+ );
135
+ });
136
+ };
137
+
138
+ const renderMoreTags = () => {
139
+ if (
140
+ tagList?.length < shownItemsCount
141
+ || !tagList?.length
142
+ || disableShowMore
143
+ ) {
144
+ return null;
145
+ }
146
+ const restItems = tagList.length - renderItemsCount;
147
+
148
+ if (restItems === 0 || !withToggle || staticTagsCount === -1) return null;
149
+
150
+ return (
151
+ <Tag
152
+ label={`+${restItems}`}
153
+ className="tag-list_wrapper_render-more"
154
+ onClick={
155
+ disableShowMore
156
+ ? () => {}
157
+ : e => cancelDefault(e, () => setRenderAllInterceptor(true))
158
+ }
159
+ />
160
+ );
161
+ };
162
+ const renderHideTags = () => {
163
+ if (
164
+ renderItemsCount !== tagList?.length
165
+ || !withToggle
166
+ || staticTagsCount === -1
167
+ || staticTagsCount === tagList?.length
168
+ ) {
169
+ return null;
170
+ }
171
+
172
+ return (
173
+ <Tag
174
+ label="..."
175
+ className="tag-list_wrapper_hide-more"
176
+ onClick={e => cancelDefault(e, () => setRenderAllInterceptor(false))}
177
+ />
178
+ );
179
+ };
180
+
181
+ // Set TagList Items
182
+ useEffect(() => {
183
+ setStaticTagsCount(-1);
184
+ setRenderItemsCount(-1);
185
+ setRenderAllInterceptor(false);
186
+ const itemsWithRef = items.map(item => ({ ...item, itemRef: createRef() }));
187
+ setTagList(itemsWithRef);
188
+ }, [items]);
189
+
190
+ // Count Row Tags
191
+ useLayoutEffect(() => {
192
+ if (withToggle && wrapperWidth !== -1 && staticTagsCount === -1) {
193
+ let computedWidth = wrapperWidth;
194
+
195
+ if (computedWidth === 0) {
196
+ computedWidth = Number.parseInt(
197
+ wrapperRef?.current
198
+ ? window.getComputedStyle(wrapperRef?.current)?.width
199
+ : 0,
200
+ );
201
+ }
202
+
203
+ if (!isNaN(computedWidth)) {
204
+ setStaticTagsCount(getStaticTagsCount(computedWidth));
205
+ }
206
+ }
207
+ }, [tagList, wrapperWidth, wrapperRef?.current]);
208
+
209
+ //
210
+ useLayoutEffect(() => {
211
+ setRenderItemsCount(staticTagsCount);
212
+ }, [staticTagsCount]);
213
+
214
+ // Toggle Show/Hide More Tags
215
+ useEffect(() => {
216
+ setRenderItemsCount(renderAll ? tagList?.length : staticTagsCount);
217
+ }, [renderAll]);
218
+
219
+ useEffect(() => {
220
+ if (wrapperRef?.current && refProp) refProp.current = wrapperRef?.current;
221
+ }, [wrapperRef?.current]);
222
+
223
+ return (
224
+ <div
225
+ className={cn(
226
+ 'tag-list_wrapper',
227
+ `${
228
+ renderItemsCount !== tagList?.length
229
+ || !withToggle
230
+ || staticTagsCount === -1
231
+ || staticTagsCount === tagList?.length
232
+ ? 'tag-list_wrapper--only-static-items'
233
+ : 'tag-list_wrapper--all-items'
234
+ }`,
235
+ className,
236
+ { 'tag-list_wrapper--disabled': disabled },
237
+ )}
238
+ style={{
239
+ visibility: staticTagsCount === -1 ? 'hidden' : 'visible',
240
+ zIndex: staticTagsCount === -1 ? '-1' : 'auto',
241
+ }}
242
+ ref={wrapperRef}
243
+ >
244
+ {renderTags()}
245
+ {renderMoreTags()}
246
+ {renderHideTags()}
247
+ {typeof onEditClick === 'function' && (
248
+ <div className="tag-list__edit-trigger">
249
+ <Edit3 onClick={onEditClick} />
250
+ </div>
251
+ )}
252
+ </div>
253
+ );
254
+ }
255
+
256
+ export default TagList;
@@ -1 +1,86 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import i from"../Status/Status";export var WIZARD_STEP_VARIANTS=Object.freeze({DEFAULT:"default",DONE:"done",ACTIVE:"active"});export var mockData=[{key:"businessInfo",label:"Provide Business Info",description:"This information will help us to evaluate your application",isFinished:!0},{key:"principal",label:"Add Principal Information",description:"A principal is essentially another name for a company owner. At some corporations, the principal is also the founder, CEO, or even the chief investor",isFinished:!0,isOptional:!0},{key:"coOwners",label:"Add Co-Owners",description:"{merchantName} will receive that amount from {lenderNmae}",isActive:!0,titleSlot:e("span",{className:"custom-title-slot",children:"$15,001"}),contentSlot:e(function(){var i={fontSize:"14px",fontWeight:400,lineHeight:"20px",letterSpacing:"0.2px"};return[{title:"Requested Amont",value:"$15,000"},{title:"Repayment Amount",value:"$15,001"},{title:"Repayment Date",value:"12/12/2021"}].map(function(n){return t("div",{style:{display:"flex",justifyContent:"space-between",maxWidth:"250px"},children:[e("span",{style:i,children:n.title}),e("span",{style:i,children:n.value})]})})},{})},{key:"bankAccount",label:"Add a Bank Account",description:"Your bank account information will be used to securely and automatically transfer the funds",titleSlot:e(i,{label:"Some JSX",status:"draft"})},{key:"documents",label:"Upload Documents",description:"Please upload the required documents"},{key:"review",label:"Review & Submit",description:"Please review the information and submit your application"},{key:"success",label:"Success",description:"Your application has been submitted successfully"},{key:"failure",label:"Failure",description:"Your application has been failed"},{key:"pending",label:"Pending",description:"Your application is under review"}];
1
+ import Status from '../Status/Status';
2
+
3
+ export const WIZARD_STEP_VARIANTS = Object.freeze({
4
+ DEFAULT: 'default',
5
+ DONE: 'done',
6
+ ACTIVE: 'active',
7
+ });
8
+
9
+ function JSXMockComponent() {
10
+ const arr = [
11
+ { title: 'Requested Amont', value: '$15,000' },
12
+ { title: 'Repayment Amount', value: '$15,001' },
13
+ { title: 'Repayment Date', value: '12/12/2021' },
14
+ ]
15
+
16
+ const textStyles = {
17
+ fontSize: '14px',
18
+ fontWeight: 400,
19
+ lineHeight: '20px',
20
+ letterSpacing: '0.2px',
21
+ };
22
+
23
+ return arr.map((row) => {
24
+ return (
25
+ <div style={{ display: 'flex', justifyContent: 'space-between', maxWidth: '250px' }}>
26
+ <span style={textStyles}>{row.title}</span>
27
+ <span style={textStyles}>{row.value}</span>
28
+ </div>
29
+ )
30
+ });
31
+ }
32
+
33
+ export const mockData = [
34
+ {
35
+ key: 'businessInfo',
36
+ label: 'Provide Business Info',
37
+ description: 'This information will help us to evaluate your application',
38
+ isFinished: true,
39
+ },
40
+ {
41
+ key: 'principal',
42
+ label: 'Add Principal Information',
43
+ description: 'A principal is essentially another name for a company owner. At some corporations, the principal is also the founder, CEO, or even the chief investor',
44
+ isFinished: true,
45
+ isOptional: true,
46
+ },
47
+ {
48
+ key: 'coOwners',
49
+ label: 'Add Co-Owners',
50
+ description: '{merchantName} will receive that amount from {lenderNmae}',
51
+ isActive: true,
52
+ titleSlot: <span className="custom-title-slot">$15,001</span>,
53
+ contentSlot: <JSXMockComponent />,
54
+ },
55
+ {
56
+ key: 'bankAccount',
57
+ label: 'Add a Bank Account',
58
+ description: 'Your bank account information will be used to securely and automatically transfer the funds',
59
+ titleSlot: <Status label="Some JSX" status="draft" />,
60
+ },
61
+ {
62
+ key: 'documents',
63
+ label: 'Upload Documents',
64
+ description: 'Please upload the required documents',
65
+ },
66
+ {
67
+ key: 'review',
68
+ label: 'Review & Submit',
69
+ description: 'Please review the information and submit your application',
70
+ },
71
+ {
72
+ key: 'success',
73
+ label: 'Success',
74
+ description: 'Your application has been submitted successfully',
75
+ },
76
+ {
77
+ key: 'failure',
78
+ label: 'Failure',
79
+ description: 'Your application has been failed',
80
+ },
81
+ {
82
+ key: 'pending',
83
+ label: 'Pending',
84
+ description: 'Your application is under review',
85
+ },
86
+ ]
@@ -1 +1,254 @@
1
- function e(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}function r(e,r,t,n,o,i,s){try{var a=e[i](s),c=a.value}catch(e){t(e);return}a.done?r(c):Promise.resolve(c).then(n,o)}function t(e){return function(){var t=this,n=arguments;return new Promise(function(o,i){var s=e.apply(t,n);function a(e){r(s,o,i,a,c,"next",e)}function c(e){r(s,o,i,a,c,"throw",e)}a(void 0)})}}function n(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.forEach(function(r){var n;n=t[r],r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n})}return e}function o(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):(function(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}function i(e,r){var t,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},s=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return s.next=a(0),s.throw=a(1),s.return=a(2),"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(a){return function(c){var u=[a,c];if(t)throw TypeError("Generator is already executing.");for(;s&&(s=0,u[0]&&(i=0)),i;)try{if(t=1,n&&(o=2&u[0]?n.return:u[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,u[1])).done)return o;switch(n=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,n=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===u[0]||2===u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=r.call(e,i)}catch(e){u=[6,e],n=0}finally{t=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}import s from"./_outerDependencies";import{getIsOnlyAnObject as a}from"./_utils";var c=s.jwt,u=/*#__PURE__*/function(){var r;function s(e){if(!(this instanceof s))throw TypeError("Cannot call a class as a function");var r=e.credentialsProcessing||{},t=r.getCredentials,n=r.getHeadersForAuthorize,o=r.importCredentials,i=r.saveCredentials,a=r.isUseRefreshTokensPropcessing,c=void 0!==a&&a,u=r.refreshCredentials,l=r.REFRESH_TOKEN_PATH,f=r.CODES_USING_THE_REFRESH_ATTEMPT,h=r.REFRESH_TOKEN_FLAG,p=void 0===h?"refreshTokenFlag":h,y=r.INTERVAL_FOR_CHECKING_TOKEN_UPDATE,d=void 0===y?50:y,E=r.callbackAfterRejectRefresh;if("function"!=typeof t)throw Error("No getCredentials method [CredentialsProcessing]");if("function"!=typeof n)throw TypeError("No getHeadersForAuthorize method [CredentialsProcessing]");if(o&&"function"!=typeof o)throw Error("Bad importCredentials method [CredentialsProcessing]");if(this.isUseRefreshTokensPropcessing=c,this.DEFAULT_CREDENTIALS={},this.getCredentialsByOuter=t,this.getHeadersForAuthorize=n,this.importCredentials=o,i||c)if("function"!=typeof i)throw Error("No saveCredentials method [CredentialsProcessing]");else this.saveCredentials=i;if(c){if("function"==typeof u)this.refreshCredentialsByOuter=u;else{if("function"==typeof this.refreshCredentialsByOuter&&"string"!=typeof l)throw TypeError("No REFRESH_TOKEN_PATH [CredentialsProcessing]");this.REFRESH_TOKEN_PATH=l}if(!Array.isArray(f))throw TypeError("No CODES_USING_THE_REFRESH_ATTEMPT [CredentialsProcessing]");if(!f.every(function(e){return"number"==typeof e}))throw Error("Invalid format of CODES_USING_THE_REFRESH_ATTEMPT elements [CredentialsProcessing]");if("string"!=typeof p)throw Error("Bad REFRESH_TOKEN_FLAG [CredentialsProcessing]");if("number"!=typeof d||"number"!=typeof d)throw TypeError("Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]");if(E&&"function"!=typeof E)throw Error("Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]");this.CODES_USING_THE_REFRESH_ATTEMPT=f,this.REFRESH_TOKEN_FLAG=p,this.INTERVAL_FOR_CHECKING_TOKEN_UPDATE=d,E&&(this.callbackAfterRejectRefresh=E)}}return r=[{key:"getIsTokenStartRefresh",value:function(){return localStorage.getItem(this.REFRESH_TOKEN_FLAG)}},{key:"setIsTokenStartRefresh",value:function(){localStorage.setItem(this.REFRESH_TOKEN_FLAG,!0)}},{key:"removeIsTokenStartRefresh",value:function(){localStorage.removeItem(this.REFRESH_TOKEN_FLAG)}},{key:"getCredentials",value:function(e,r){var s=this;return t(function(){var t,u,l,f;return i(this,function(i){switch(i.label){case 0:return[4,s.getCredentialsByOuter()];case 1:if(t=i.sent(),"function"!=typeof s.importCredentials)return[3,3];return[4,s.importCredentials(t)];case 2:t=i.sent(),i.label=3;case 3:if(a(t)||(t={}),(u=t.token||null)&&!e){try{l=c.decode(u)}catch(e){l=null}f=Date.now()/1e3,null!==l&&Number(l.exp)<f&&(t=o(n({},t),{isNeedRefresh:!0}))}if(!r)return[3,5];return[4,r(o(n({},t),{isCatchCallbackProcess:e}))];case 4:i.sent(),i.label=5;case 5:return[2,o(n({},t),{isCatchCallbackProcess:e})]}})})()}},{key:"refreshCredentials",value:function(r,n){var o=this;return t(function(){var s,a;function c(e){return u.apply(this,arguments)}function u(){return(u=t(function(e){return i(this,function(r){switch(r.label){case 0:if(!n)return[3,2];return[4,n(e)];case 1:r.sent(),r.label=2;case 2:var o;return[2,Promise.resolve(e).then((o=t(function(e){return i(this,function(r){return s.removeIsTokenStartRefresh(),[2,e]})}),function(e){return o.apply(this,arguments)}))]}})})).apply(this,arguments)}function l(){return(l=t(function(){var t,n,o,a,c;return i(this,function(i){var u;return n=r.token,o=r.refreshToken,(t=a=new Headers).append.apply(t,function(r){if(Array.isArray(r))return e(r)}(u=Object.entries(s.getHeadersForAuthorize(n)))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(u)||function(r,t){if(r){if("string"==typeof r)return e(r,void 0);var n=Object.prototype.toString.call(r).slice(8,-1);if("Object"===n&&r.constructor&&(n=r.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e(r,t)}}(u)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),(c=new FormData).append("grant_type","refresh_token"),c.append("refresh_token",o),c.append("client_id","oauth"),c.append("client_secret","secret"),c.append("access_type","offline"),[2,fetch("".concat(s.REFRESH_TOKEN_PATH),{mode:"cors",method:"POST",headers:a,body:c,redirect:"follow"})]})})).apply(this,arguments)}return i(this,function(e){switch(e.label){case 0:if(s=o,!(null==r?void 0:r.token)||!(null==r?void 0:r.refreshToken))return[2,c(s.DEFAULT_CREDENTIALS)];if("function"!=typeof s.refreshCredentialsByOuter)return[3,2];return[4,s.refreshCredentialsByOuter(r)];case 1:return a=e.sent(),[3,4];case 2:return[4,function(){return l.apply(this,arguments)}()];case 3:a=e.sent(),e.label=4;case 4:return[2,c(a)]}})})()}},{key:"waitRefresh",value:function(e){var r=this;return t(function(){return i(this,function(t){return[2,new Promise(function(t){if(r.getIsTokenStartRefresh())var n=setInterval(function(){r.getIsTokenStartRefresh()||(clearInterval(n),t())},r.INTERVAL_FOR_CHECKING_TOKEN_UPDATE);else e&&r.setIsTokenStartRefresh(),t()})]})})()}},{key:"processCredentials",value:function(e){var r=this;return t(function(){var n;return i(this,function(o){return e.isNeedRefresh||e.isCatchCallbackProcess?[2,(n=r).refreshCredentials(e,function(e){return n.saveCredentials(e)}).then(function(){return new Promise(function(e){setTimeout(/*#__PURE__*/t(function(){var r;return i(this,function(t){switch(t.label){case 0:return[4,n.getCredentials()];case 1:return(null==(r=t.sent())?void 0:r.token)||(r.isRefreshFailed=!0,setTimeout(function(){var e;null==n||null==(e=n.callbackAfterRejectRefresh)||e.call(n)},0)),e(r),[2]}})}),0)})})]:[2,e]})})()}}],function(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(s.prototype,r),s}();export default u;
1
+ import outerDependencies from './_outerDependencies';
2
+ import { getIsOnlyAnObject } from './_utils';
3
+
4
+ const { jwt } = outerDependencies;
5
+
6
+ class CredentialsProcessing {
7
+ constructor(settings) {
8
+ const { credentialsProcessing } = settings;
9
+ const {
10
+ // ? Для корректной работы установки токенов в запросы от API
11
+ // ? нужно передавать методы getCredentials и getHeadersForAuthorize
12
+ getCredentials,
13
+ getHeadersForAuthorize, // ? На вход получит токен, должна вернуть объект для коструктора Headers
14
+
15
+ // ? Так же опционально можно передавать
16
+ importCredentials, // ? если он передается, то он будет применяться к выводу от вызова getCredentials
17
+ saveCredentials, // ? можно будет найти в объекте credentialsProcessing, чтобы использовать кастомными методами
18
+
19
+ // ! Либо вызов getCredentials, либо цепочка вызовов importCredentials(getCredentials())
20
+ // ! должна возвращать требуемую классом структуру
21
+ // ! Класс требует структуры
22
+ // ! - { token }, если флоу рефреш токена НЕ используется
23
+ // ! - { token, refreshToken, expires }, если используется флоу рефреш токена
24
+
25
+ // *********
26
+
27
+ // ? Подключает флоу рефреша токенов
28
+ isUseRefreshTokensPropcessing = false,
29
+
30
+ // ! Для корректной работы флоу рефреша токенов передача метода saveCredentials становится ОБЯЗАТЕЛЬНОЙ
31
+
32
+ // ? Так же для корректной работы флоу рефреша токенов нужно
33
+ // ? - либо
34
+ refreshCredentials, // ! метод должен возвращать такую же структуру как и метод getCredentials,
35
+ // ? на вход получит текущие креды, к выходу будет применен importCredentials, если этот метод передавался
36
+ // ? - либо
37
+ REFRESH_TOKEN_PATH, // ! REFRESH_TOKEN_PATH передается ПОЛНОСТЬЮ (глобальная адресация)!
38
+ CODES_USING_THE_REFRESH_ATTEMPT, // ? указывает по каким кодам ответа триггериться рефреш, массив чисел
39
+
40
+ // ? Опционально
41
+ REFRESH_TOKEN_FLAG = 'refreshTokenFlag',
42
+ INTERVAL_FOR_CHECKING_TOKEN_UPDATE = 50, // ms
43
+ callbackAfterRejectRefresh,
44
+ } = credentialsProcessing || {};
45
+
46
+ if (typeof getCredentials !== 'function')
47
+ throw new Error('No getCredentials method [CredentialsProcessing]');
48
+ if (typeof getHeadersForAuthorize !== 'function') {
49
+ throw new TypeError(
50
+ 'No getHeadersForAuthorize method [CredentialsProcessing]',
51
+ );
52
+ }
53
+ if (importCredentials && typeof importCredentials !== 'function') {
54
+ throw new Error('Bad importCredentials method [CredentialsProcessing]');
55
+ }
56
+
57
+ this.isUseRefreshTokensPropcessing = isUseRefreshTokensPropcessing;
58
+ this.DEFAULT_CREDENTIALS = {};
59
+ this.getCredentialsByOuter = getCredentials;
60
+ this.getHeadersForAuthorize = getHeadersForAuthorize;
61
+ this.importCredentials = importCredentials;
62
+
63
+ // ? Если метод передан или если не передан, но включен флоу обновления токенов (тогда saveCredentials обязателен)
64
+ if (saveCredentials || isUseRefreshTokensPropcessing) {
65
+ if (typeof saveCredentials !== 'function')
66
+ throw new Error('No saveCredentials method [CredentialsProcessing]');
67
+ else this.saveCredentials = saveCredentials;
68
+ }
69
+
70
+ if (isUseRefreshTokensPropcessing) {
71
+ if (typeof refreshCredentials === 'function') {
72
+ this.refreshCredentialsByOuter = refreshCredentials;
73
+ }
74
+ else {
75
+ if (
76
+ typeof this.refreshCredentialsByOuter === 'function'
77
+ && typeof REFRESH_TOKEN_PATH !== 'string'
78
+ ) {
79
+ throw new TypeError('No REFRESH_TOKEN_PATH [CredentialsProcessing]');
80
+ }
81
+ this.REFRESH_TOKEN_PATH = REFRESH_TOKEN_PATH;
82
+ }
83
+
84
+ if (!Array.isArray(CODES_USING_THE_REFRESH_ATTEMPT)) {
85
+ throw new TypeError(
86
+ 'No CODES_USING_THE_REFRESH_ATTEMPT [CredentialsProcessing]',
87
+ );
88
+ }
89
+ if (
90
+ !CODES_USING_THE_REFRESH_ATTEMPT.every(i => typeof i === 'number')
91
+ ) {
92
+ throw new Error(
93
+ 'Invalid format of CODES_USING_THE_REFRESH_ATTEMPT elements [CredentialsProcessing]',
94
+ );
95
+ }
96
+
97
+ if (typeof REFRESH_TOKEN_FLAG !== 'string')
98
+ throw new Error('Bad REFRESH_TOKEN_FLAG [CredentialsProcessing]');
99
+ if (typeof INTERVAL_FOR_CHECKING_TOKEN_UPDATE !== 'number') {
100
+ throw new TypeError(
101
+ 'Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]',
102
+ );
103
+ }
104
+ if (typeof INTERVAL_FOR_CHECKING_TOKEN_UPDATE !== 'number') {
105
+ throw new TypeError(
106
+ 'Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]',
107
+ );
108
+ }
109
+ if (
110
+ callbackAfterRejectRefresh
111
+ && typeof callbackAfterRejectRefresh !== 'function'
112
+ ) {
113
+ throw new Error(
114
+ 'Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]',
115
+ );
116
+ }
117
+
118
+ this.CODES_USING_THE_REFRESH_ATTEMPT = CODES_USING_THE_REFRESH_ATTEMPT;
119
+ this.REFRESH_TOKEN_FLAG = REFRESH_TOKEN_FLAG;
120
+ this.INTERVAL_FOR_CHECKING_TOKEN_UPDATE
121
+ = INTERVAL_FOR_CHECKING_TOKEN_UPDATE;
122
+
123
+ if (callbackAfterRejectRefresh)
124
+ this.callbackAfterRejectRefresh = callbackAfterRejectRefresh;
125
+ }
126
+ }
127
+
128
+ getIsTokenStartRefresh() {
129
+ return localStorage.getItem(this.REFRESH_TOKEN_FLAG);
130
+ }
131
+
132
+ setIsTokenStartRefresh() {
133
+ localStorage.setItem(this.REFRESH_TOKEN_FLAG, true);
134
+ }
135
+
136
+ removeIsTokenStartRefresh() {
137
+ localStorage.removeItem(this.REFRESH_TOKEN_FLAG);
138
+ }
139
+
140
+ async getCredentials(isCatchCallbackProcess, callback) {
141
+ let credentials = await this.getCredentialsByOuter();
142
+
143
+ if (typeof this.importCredentials === 'function')
144
+ credentials = await this.importCredentials(credentials);
145
+ if (!getIsOnlyAnObject(credentials)) credentials = {};
146
+
147
+ const token = credentials.token || null;
148
+
149
+ if (token && !isCatchCallbackProcess) {
150
+ let decoded;
151
+ try {
152
+ decoded = jwt.decode(token);
153
+ }
154
+ catch {
155
+ decoded = null;
156
+ }
157
+ const currentTime = Date.now() / 1000;
158
+ if (decoded !== null && Number(decoded.exp) < currentTime)
159
+ credentials = { ...credentials, isNeedRefresh: true };
160
+ }
161
+
162
+ if (callback) await callback({ ...credentials, isCatchCallbackProcess });
163
+ return { ...credentials, isCatchCallbackProcess };
164
+ }
165
+
166
+ async refreshCredentials(currentCredentials, callback) {
167
+ const CONTEXT = this;
168
+
169
+ async function finalize(cred) {
170
+ if (callback) await callback(cred);
171
+ return Promise.resolve(cred).then(async (res) => {
172
+ CONTEXT.removeIsTokenStartRefresh();
173
+ return res;
174
+ });
175
+ }
176
+
177
+ if (!currentCredentials?.token || !currentCredentials?.refreshToken)
178
+ return finalize(CONTEXT.DEFAULT_CREDENTIALS);
179
+
180
+ // ! ВНИМАНИЕ! Данный механизм рефреша принят на проекте finturfreactfrontend (админка)
181
+ // ! На кабинете он ТОЧНО НЕ ТАКОЙ
182
+ async function refreshCredentialsByDefault() {
183
+ const { token, refreshToken } = currentCredentials;
184
+ const headers = new Headers();
185
+ headers.append(...Object.entries(CONTEXT.getHeadersForAuthorize(token)));
186
+
187
+ const body = new FormData();
188
+ body.append('grant_type', 'refresh_token');
189
+ body.append('refresh_token', refreshToken);
190
+ body.append('client_id', 'oauth');
191
+ body.append('client_secret', 'secret');
192
+ body.append('access_type', 'offline');
193
+
194
+ return fetch(`${CONTEXT.REFRESH_TOKEN_PATH}`, {
195
+ mode: 'cors',
196
+ method: 'POST',
197
+ headers,
198
+ body,
199
+ redirect: 'follow',
200
+ });
201
+ }
202
+
203
+ // ? Передавайте собственный refreshCredentials при получении экземляра RESTAPI, если не уверены,
204
+ // ? что механизм рефреша токенов ИМЕННО ТАКОЙ как в ф-и refreshCredentialsByDefault!
205
+ // ! currentCredentials передаются в формате класса! ({ token, refreshToken, expires })
206
+ const newCredentials
207
+ = typeof CONTEXT.refreshCredentialsByOuter === 'function'
208
+ ? await CONTEXT.refreshCredentialsByOuter(currentCredentials)
209
+ : await refreshCredentialsByDefault();
210
+
211
+ return finalize(newCredentials);
212
+ }
213
+
214
+ async waitRefresh(isNeedRefresh) {
215
+ return new Promise((resolve) => {
216
+ if (!this.getIsTokenStartRefresh()) {
217
+ if (isNeedRefresh) this.setIsTokenStartRefresh();
218
+ resolve();
219
+ }
220
+ else {
221
+ const intervalId = setInterval(() => {
222
+ if (!this.getIsTokenStartRefresh()) {
223
+ clearInterval(intervalId);
224
+ resolve();
225
+ }
226
+ }, this.INTERVAL_FOR_CHECKING_TOKEN_UPDATE);
227
+ }
228
+ });
229
+ }
230
+
231
+ async processCredentials(cred) {
232
+ if (!cred.isNeedRefresh && !cred.isCatchCallbackProcess) return cred;
233
+
234
+ const CONTEXT = this;
235
+
236
+ return CONTEXT.refreshCredentials(cred, response =>
237
+ CONTEXT.saveCredentials(response)).then(() => {
238
+ return new Promise((resolve) => {
239
+ setTimeout(async () => {
240
+ const newCredentials = await CONTEXT.getCredentials();
241
+ if (!newCredentials?.token) {
242
+ newCredentials.isRefreshFailed = true;
243
+ setTimeout(() => {
244
+ CONTEXT?.callbackAfterRejectRefresh?.();
245
+ }, 0);
246
+ }
247
+ resolve(newCredentials);
248
+ }, 0);
249
+ });
250
+ });
251
+ }
252
+ }
253
+
254
+ export default CredentialsProcessing;