intelicoreact 1.8.3 → 1.8.5
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/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.jsx +18 -0
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.jsx +121 -0
- package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.jsx +507 -0
- package/dist/Atomic/FormElements/MultiSelect/MultiSelect.jsx +46 -0
- package/dist/Atomic/FormElements/NumericInput/NumericInput.jsx +337 -0
- package/dist/Atomic/FormElements/RadioGroup/RadioGroup.jsx +66 -0
- package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.jsx +78 -0
- package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.jsx +54 -0
- package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.jsx +183 -0
- package/dist/Atomic/FormElements/RangeList/RangeList.jsx +181 -0
- package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.jsx +41 -0
- package/dist/Atomic/FormElements/RangeSlider/RangeSlider.jsx +449 -0
- package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.jsx +865 -0
- package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.jsx +37 -0
- package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.jsx +48 -0
- package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.jsx +62 -0
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.jsx +175 -0
- package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.jsx +65 -0
- package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.jsx +118 -0
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.interface.ts +2 -0
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +1 -1
- package/dist/Atomic/FormElements/Text/Text.jsx +126 -0
- package/dist/Atomic/FormElements/Textarea/Textarea.jsx +61 -0
- package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.jsx +181 -0
- package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.jsx +60 -0
- package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.jsx +83 -0
- package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.jsx +80 -0
- package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.jsx +103 -0
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.jsx +115 -0
- package/dist/Atomic/Layout/Header/Header.jsx +86 -0
- package/dist/Atomic/UI/AccordionTable/AccordionTable.jsx +250 -0
- package/dist/Atomic/UI/AccordionText/AccordionText.jsx +68 -0
- package/dist/Atomic/UI/Arrow/Arrow.jsx +134 -0
- package/dist/Atomic/UI/Box/Box.jsx +53 -0
- package/dist/Atomic/UI/Chart/Chart.jsx +178 -0
- package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.jsx +78 -0
- package/dist/Atomic/UI/Chart/partial/optionsConstructor.jsx +334 -0
- package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.jsx +111 -0
- package/dist/Atomic/UI/DateTime/DateTime.jsx +57 -0
- package/dist/Atomic/UI/DebugContainer/DebugContainer.jsx +44 -0
- package/dist/Atomic/UI/DebugContainer/useDebugContainer.jsx +15 -0
- package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.jsx +223 -0
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.jsx +75 -0
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion.jsx +86 -0
- package/dist/Atomic/UI/PieChart/PieChart.jsx +41 -0
- package/dist/Atomic/UI/Table/Partials/TdCell.jsx +87 -0
- package/dist/Atomic/UI/Table/Partials/TdHeader.jsx +36 -0
- package/dist/Atomic/UI/Table/Partials/TdRow.jsx +103 -0
- package/dist/Atomic/UI/Table/Partials/TdTitle.jsx +55 -0
- package/dist/Atomic/UI/Table/Table.jsx +63 -0
- package/dist/Atomic/UI/Table/TdTypes/TdActions.jsx +80 -0
- package/dist/Atomic/UI/Table/TdTypes/TdPriority.jsx +26 -0
- package/dist/Atomic/UI/Table/TdTypes/TdRange.jsx +13 -0
- package/dist/Atomic/UI/Table/TdTypes/TdWeight.jsx +56 -0
- package/dist/Atomic/UI/Tag/Tag.interface.ts +1 -0
- package/dist/Atomic/UI/Tag/Tag.js +1 -1
- package/dist/Atomic/UI/TagList/TagList.jsx +256 -0
- package/dist/Atomic/UI/WizardStepper/constructor.jsx +86 -0
- package/dist/Classes/RESTAPI/partials/CredentialsProcessing.jsx +254 -0
- package/dist/Functions/customEventListener.jsx +96 -0
- package/dist/Functions/operations.jsx +138 -0
- package/dist/Functions/useFormTools/functions/RenderFields.jsx +108 -0
- package/dist/Functions/useFormTools/index.jsx +777 -0
- package/dist/Functions/usePasswordChecker.jsx +128 -0
- package/dist/Functions/utils.jsx +492 -0
- package/dist/Molecular/CustomIcons/components/AffiliateNetworks.jsx +22 -0
- package/dist/Molecular/CustomIcons/components/AlertCircle.jsx +24 -0
- package/dist/Molecular/CustomIcons/components/AppStore.jsx +30 -0
- package/dist/Molecular/CustomIcons/components/Arrow.jsx +33 -0
- package/dist/Molecular/CustomIcons/components/ArrowDown.jsx +18 -0
- package/dist/Molecular/CustomIcons/components/ArrowLeft.jsx +23 -0
- package/dist/Molecular/CustomIcons/components/ArrowRight.jsx +23 -0
- package/dist/Molecular/CustomIcons/components/ArrowUp.jsx +18 -0
- package/dist/Molecular/CustomIcons/components/Bell.jsx +16 -0
- package/dist/Molecular/CustomIcons/components/Button.jsx +13 -0
- package/dist/Molecular/CustomIcons/components/Campaigns.jsx +17 -0
- package/dist/Molecular/CustomIcons/components/Check.jsx +15 -0
- package/dist/Molecular/CustomIcons/components/Check2.jsx +13 -0
- package/dist/Molecular/CustomIcons/components/ChevronDown.jsx +13 -0
- package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.jsx +12 -0
- package/dist/Molecular/CustomIcons/components/ChevronLeft.jsx +12 -0
- package/dist/Molecular/CustomIcons/components/ChevronRight.jsx +12 -0
- package/dist/Molecular/CustomIcons/components/ChevronUp.jsx +12 -0
- package/dist/Molecular/CustomIcons/components/ChevronUpDown.jsx +28 -0
- package/dist/Molecular/CustomIcons/components/Close.jsx +15 -0
- package/dist/Molecular/CustomIcons/components/ColumnsOrder.jsx +18 -0
- package/dist/Molecular/CustomIcons/components/Delete.jsx +17 -0
- package/dist/Molecular/CustomIcons/components/Edit.jsx +16 -0
- package/dist/Molecular/CustomIcons/components/Email.jsx +32 -0
- package/dist/Molecular/CustomIcons/components/FinturfLogo.jsx +19 -0
- package/dist/Molecular/CustomIcons/components/FinturfLogo2.jsx +36 -0
- package/dist/Molecular/CustomIcons/components/Flows.jsx +16 -0
- package/dist/Molecular/CustomIcons/components/Gift.jsx +26 -0
- package/dist/Molecular/CustomIcons/components/GoogleAuth.jsx +30 -0
- package/dist/Molecular/CustomIcons/components/GooglePlay.jsx +30 -0
- package/dist/Molecular/CustomIcons/components/HelpCircle.jsx +20 -0
- package/dist/Molecular/CustomIcons/components/HelpCircle2.jsx +21 -0
- package/dist/Molecular/CustomIcons/components/HelpCircleFilled.jsx +20 -0
- package/dist/Molecular/CustomIcons/components/Home.jsx +17 -0
- package/dist/Molecular/CustomIcons/components/Home2.jsx +23 -0
- package/dist/Molecular/CustomIcons/components/Key.jsx +24 -0
- package/dist/Molecular/CustomIcons/components/Landers.jsx +21 -0
- package/dist/Molecular/CustomIcons/components/Lock.jsx +16 -0
- package/dist/Molecular/CustomIcons/components/Mail.jsx +27 -0
- package/dist/Molecular/CustomIcons/components/Mastercard.jsx +74 -0
- package/dist/Molecular/CustomIcons/components/Minus.jsx +26 -0
- package/dist/Molecular/CustomIcons/components/Offers.jsx +17 -0
- package/dist/Molecular/CustomIcons/components/Pause.jsx +29 -0
- package/dist/Molecular/CustomIcons/components/PayPal.jsx +42 -0
- package/dist/Molecular/CustomIcons/components/PayPalLightLarge.jsx +29 -0
- package/dist/Molecular/CustomIcons/components/Phone.jsx +31 -0
- package/dist/Molecular/CustomIcons/components/Play.jsx +26 -0
- package/dist/Molecular/CustomIcons/components/Plus.jsx +26 -0
- package/dist/Molecular/CustomIcons/components/Profile.jsx +17 -0
- package/dist/Molecular/CustomIcons/components/QRCode.jsx +30 -0
- package/dist/Molecular/CustomIcons/components/Rectangle.jsx +13 -0
- package/dist/Molecular/CustomIcons/components/Revert.jsx +14 -0
- package/dist/Molecular/CustomIcons/components/Star.jsx +15 -0
- package/dist/Molecular/CustomIcons/components/Star2.jsx +17 -0
- package/dist/Molecular/CustomIcons/components/TrafficSources.jsx +15 -0
- package/dist/Molecular/CustomIcons/components/Trash.jsx +16 -0
- package/dist/Molecular/CustomIcons/components/TrashRed.jsx +16 -0
- package/dist/Molecular/CustomIcons/components/Triggers.jsx +16 -0
- package/dist/Molecular/CustomIcons/components/User.jsx +26 -0
- package/dist/Molecular/CustomIcons/components/Visa.jsx +32 -0
- package/dist/Molecular/CustomIcons/components/X.jsx +13 -0
- package/dist/Molecular/FormElement/FormElement.jsx +52 -0
- package/dist/Molecular/FormWithDependOn/FormWithDependOn.jsx +161 -0
- package/dist/Molecular/InputAddress/InputAddress.jsx +641 -0
- package/dist/Molecular/InputPassword/InputPassword.jsx +50 -0
- package/package.json +13 -6
- package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +0 -1
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.js +0 -1
- package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +0 -1
- package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +0 -1
- package/dist/Atomic/FormElements/NumericInput/NumericInput.js +0 -1
- package/dist/Atomic/FormElements/RadioGroup/RadioGroup.js +0 -1
- package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +0 -1
- package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js +0 -1
- package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +0 -1
- package/dist/Atomic/FormElements/RangeList/RangeList.js +0 -1
- package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.js +0 -1
- package/dist/Atomic/FormElements/RangeSlider/RangeSlider.js +0 -1
- package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.js +0 -1
- package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.js +0 -1
- package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js +0 -1
- package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +0 -1
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.d.ts +0 -16
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js +0 -1
- package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js +0 -1
- package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.d.ts +0 -9
- package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js +0 -1
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.d.ts +0 -5
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.interface.d.ts +0 -79
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.interface.js +0 -1
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.interface.js.map +0 -1
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js.map +0 -1
- package/dist/Atomic/FormElements/Text/Text.js +0 -1
- package/dist/Atomic/FormElements/Textarea/Textarea.js +0 -1
- package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +0 -1
- package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js +0 -1
- package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js +0 -1
- package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js +0 -1
- package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +0 -1
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +0 -1
- package/dist/Atomic/Layout/Header/Header.js +0 -1
- package/dist/Atomic/UI/AccordionTable/AccordionTable.js +0 -1
- package/dist/Atomic/UI/AccordionText/AccordionText.js +0 -1
- package/dist/Atomic/UI/Arrow/Arrow.js +0 -1
- package/dist/Atomic/UI/Box/Box.js +0 -1
- package/dist/Atomic/UI/Chart/Chart.js +0 -1
- package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js +0 -1
- package/dist/Atomic/UI/Chart/partial/optionsConstructor.js +0 -1
- package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.js +0 -1
- package/dist/Atomic/UI/DateTime/DateTime.js +0 -1
- package/dist/Atomic/UI/DebugContainer/DebugContainer.js +0 -1
- package/dist/Atomic/UI/DebugContainer/useDebugContainer.js +0 -1
- package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +0 -1
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.js +0 -1
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion.js +0 -1
- package/dist/Atomic/UI/PieChart/PieChart.js +0 -1
- package/dist/Atomic/UI/Table/Partials/TdCell.js +0 -1
- package/dist/Atomic/UI/Table/Partials/TdHeader.js +0 -1
- package/dist/Atomic/UI/Table/Partials/TdRow.js +0 -1
- package/dist/Atomic/UI/Table/Partials/TdTitle.js +0 -1
- package/dist/Atomic/UI/Table/Table.js +0 -1
- package/dist/Atomic/UI/Table/TdTypes/TdActions.js +0 -1
- package/dist/Atomic/UI/Table/TdTypes/TdPriority.js +0 -1
- package/dist/Atomic/UI/Table/TdTypes/TdRange.js +0 -1
- package/dist/Atomic/UI/Table/TdTypes/TdWeight.js +0 -1
- package/dist/Atomic/UI/TagList/TagList.js +0 -1
- package/dist/Atomic/UI/WizardStepper/constructor.js +0 -1
- package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +0 -1
- package/dist/Functions/customEventListener.js +0 -1
- package/dist/Functions/operations.js +0 -1
- package/dist/Functions/useFormTools/functions/RenderFields.js +0 -1
- package/dist/Functions/useFormTools/index.js +0 -1
- package/dist/Functions/usePasswordChecker.js +0 -1
- package/dist/Functions/utils.js +0 -1
- package/dist/Molecular/CustomIcons/components/AffiliateNetworks.js +0 -1
- package/dist/Molecular/CustomIcons/components/AlertCircle.js +0 -1
- package/dist/Molecular/CustomIcons/components/AppStore.js +0 -1
- package/dist/Molecular/CustomIcons/components/Arrow.js +0 -1
- package/dist/Molecular/CustomIcons/components/ArrowDown.js +0 -1
- package/dist/Molecular/CustomIcons/components/ArrowLeft.js +0 -1
- package/dist/Molecular/CustomIcons/components/ArrowRight.js +0 -1
- package/dist/Molecular/CustomIcons/components/ArrowUp.js +0 -1
- package/dist/Molecular/CustomIcons/components/Bell.js +0 -1
- package/dist/Molecular/CustomIcons/components/Button.js +0 -1
- package/dist/Molecular/CustomIcons/components/Campaigns.js +0 -1
- package/dist/Molecular/CustomIcons/components/Check.js +0 -1
- package/dist/Molecular/CustomIcons/components/Check2.js +0 -1
- package/dist/Molecular/CustomIcons/components/ChevronDown.js +0 -1
- package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.js +0 -1
- package/dist/Molecular/CustomIcons/components/ChevronLeft.js +0 -1
- package/dist/Molecular/CustomIcons/components/ChevronRight.js +0 -1
- package/dist/Molecular/CustomIcons/components/ChevronUp.js +0 -1
- package/dist/Molecular/CustomIcons/components/ChevronUpDown.js +0 -1
- package/dist/Molecular/CustomIcons/components/Close.js +0 -1
- package/dist/Molecular/CustomIcons/components/ColumnsOrder.js +0 -1
- package/dist/Molecular/CustomIcons/components/Delete.js +0 -1
- package/dist/Molecular/CustomIcons/components/Edit.js +0 -1
- package/dist/Molecular/CustomIcons/components/Email.js +0 -1
- package/dist/Molecular/CustomIcons/components/FinturfLogo.js +0 -1
- package/dist/Molecular/CustomIcons/components/FinturfLogo2.js +0 -1
- package/dist/Molecular/CustomIcons/components/Flows.js +0 -1
- package/dist/Molecular/CustomIcons/components/Gift.js +0 -1
- package/dist/Molecular/CustomIcons/components/GoogleAuth.js +0 -1
- package/dist/Molecular/CustomIcons/components/GooglePlay.js +0 -1
- package/dist/Molecular/CustomIcons/components/HelpCircle.js +0 -1
- package/dist/Molecular/CustomIcons/components/HelpCircle2.js +0 -1
- package/dist/Molecular/CustomIcons/components/HelpCircleFilled.js +0 -1
- package/dist/Molecular/CustomIcons/components/Home.js +0 -1
- package/dist/Molecular/CustomIcons/components/Home2.js +0 -1
- package/dist/Molecular/CustomIcons/components/Key.js +0 -1
- package/dist/Molecular/CustomIcons/components/Landers.js +0 -1
- package/dist/Molecular/CustomIcons/components/Lock.js +0 -1
- package/dist/Molecular/CustomIcons/components/Mail.js +0 -1
- package/dist/Molecular/CustomIcons/components/Mastercard.js +0 -1
- package/dist/Molecular/CustomIcons/components/Minus.js +0 -1
- package/dist/Molecular/CustomIcons/components/Offers.js +0 -1
- package/dist/Molecular/CustomIcons/components/Pause.js +0 -1
- package/dist/Molecular/CustomIcons/components/PayPal.js +0 -1
- package/dist/Molecular/CustomIcons/components/PayPalLightLarge.js +0 -1
- package/dist/Molecular/CustomIcons/components/Phone.js +0 -1
- package/dist/Molecular/CustomIcons/components/Play.js +0 -1
- package/dist/Molecular/CustomIcons/components/Plus.js +0 -1
- package/dist/Molecular/CustomIcons/components/Profile.js +0 -1
- package/dist/Molecular/CustomIcons/components/QRCode.js +0 -1
- package/dist/Molecular/CustomIcons/components/Rectangle.js +0 -1
- package/dist/Molecular/CustomIcons/components/Revert.js +0 -1
- package/dist/Molecular/CustomIcons/components/Star.js +0 -1
- package/dist/Molecular/CustomIcons/components/Star2.js +0 -1
- package/dist/Molecular/CustomIcons/components/TrafficSources.js +0 -1
- package/dist/Molecular/CustomIcons/components/Trash.js +0 -1
- package/dist/Molecular/CustomIcons/components/TrashRed.js +0 -1
- package/dist/Molecular/CustomIcons/components/Triggers.js +0 -1
- package/dist/Molecular/CustomIcons/components/User.js +0 -1
- package/dist/Molecular/CustomIcons/components/Visa.js +0 -1
- package/dist/Molecular/CustomIcons/components/X.js +0 -1
- package/dist/Molecular/FormElement/FormElement.js +0 -1
- package/dist/Molecular/FormWithDependOn/FormWithDependOn.js +0 -1
- package/dist/Molecular/InputAddress/InputAddress.js +0 -1
- package/dist/Molecular/InputPassword/InputPassword.js +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
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
|
+
]
|
|
@@ -0,0 +1,254 @@
|
|
|
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;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
(function () {
|
|
2
|
+
Element.prototype._addEventListener = Element.prototype.addEventListener;
|
|
3
|
+
Element.prototype.addEventListener = function (a, b, c) {
|
|
4
|
+
if (c == undefined) c = false;
|
|
5
|
+
this._addEventListener(a, b, c);
|
|
6
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
7
|
+
if (!this.eventListenerList[a]) this.eventListenerList[a] = [];
|
|
8
|
+
// this.removeEventListener(a,b,c); // TODO - handle duplicates..
|
|
9
|
+
this.eventListenerList[a].push({ listener: b, useCapture: c });
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
Element.prototype.getEventListeners = function (a) {
|
|
13
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
14
|
+
if (a == undefined) return this.eventListenerList;
|
|
15
|
+
return this.eventListenerList[a];
|
|
16
|
+
};
|
|
17
|
+
Element.prototype.clearEventListeners = function (a) {
|
|
18
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
19
|
+
if (a == undefined) {
|
|
20
|
+
for (const x in this.getEventListeners()) this.clearEventListeners(x);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const el = this.getEventListeners(a);
|
|
24
|
+
if (el == undefined) return;
|
|
25
|
+
for (let i = el.length - 1; i >= 0; --i) {
|
|
26
|
+
const ev = el[i];
|
|
27
|
+
this.removeEventListener(a, ev.listener, ev.useCapture);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
Element.prototype._removeEventListener
|
|
32
|
+
= Element.prototype.removeEventListener;
|
|
33
|
+
Element.prototype.removeEventListener = function (a, b, c) {
|
|
34
|
+
if (c == undefined) c = false;
|
|
35
|
+
this._removeEventListener(a, b, c);
|
|
36
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
37
|
+
if (!this.eventListenerList[a]) this.eventListenerList[a] = [];
|
|
38
|
+
|
|
39
|
+
// Find the event in the list
|
|
40
|
+
for (let i = 0; i < this.eventListenerList[a].length; i++) {
|
|
41
|
+
if (
|
|
42
|
+
(this.eventListenerList[a][i].listener == b,
|
|
43
|
+
this.eventListenerList[a][i].useCapture == c)
|
|
44
|
+
) {
|
|
45
|
+
// Hmm..
|
|
46
|
+
this.eventListenerList[a].splice(i, 1);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (this.eventListenerList[a].length == 0) delete this.eventListenerList[a];
|
|
51
|
+
};
|
|
52
|
+
})();
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Добавляет обработчик события к элементу
|
|
56
|
+
* @param {HTMLElement} element - DOM элемент
|
|
57
|
+
* @param {string} eventName - Название события
|
|
58
|
+
* @param {Function} handler - Функция-обработчик
|
|
59
|
+
*/
|
|
60
|
+
export function addEventListener(element, eventName, handler) {
|
|
61
|
+
if (element && element.addEventListener) {
|
|
62
|
+
element.addEventListener(eventName, handler);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Удаляет обработчик события с элемента
|
|
68
|
+
* @param {HTMLElement} element - DOM элемент
|
|
69
|
+
* @param {string} eventName - Название события
|
|
70
|
+
* @param {Function} handler - Функция-обработчик
|
|
71
|
+
*/
|
|
72
|
+
export function removeEventListener(element, eventName, handler) {
|
|
73
|
+
if (element && element.removeEventListener) {
|
|
74
|
+
element.removeEventListener(eventName, handler);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Создает и отправляет кастомное событие
|
|
80
|
+
* @param {HTMLElement} element - DOM элемент
|
|
81
|
+
* @param {string} eventName - Название события
|
|
82
|
+
* @param {object} detail - Данные события
|
|
83
|
+
*/
|
|
84
|
+
export function dispatchCustomEvent(element, eventName, detail = {}) {
|
|
85
|
+
if (element) {
|
|
86
|
+
const event = new CustomEvent(eventName, { detail });
|
|
87
|
+
element.dispatchEvent(event);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Экспортируем объект со всеми функциями для обратной совместимости
|
|
92
|
+
export default {
|
|
93
|
+
addEventListener,
|
|
94
|
+
removeEventListener,
|
|
95
|
+
dispatchCustomEvent,
|
|
96
|
+
};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Взято из https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/round
|
|
2
|
+
// При импорте любой ф-и из этого файла отработает самовызывающаяся ф-я и расширит
|
|
3
|
+
// объект Math 3-мя ф-ми: round10, floor10, ceil10
|
|
4
|
+
(function () {
|
|
5
|
+
/**
|
|
6
|
+
* Корректировка округления десятичных дробей.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} type Тип корректировки.
|
|
9
|
+
* @param {number} value Число.
|
|
10
|
+
* @param {Integer} exp Показатель степени (десятичный логарифм основания корректировки).
|
|
11
|
+
* @returns {number} Скорректированное значение.
|
|
12
|
+
*/
|
|
13
|
+
function decimalAdjust(type, value, exp) {
|
|
14
|
+
// Если степень не определена, либо равна нулю...
|
|
15
|
+
if (typeof exp === 'undefined' || Number(exp) === 0) {
|
|
16
|
+
return Math[type](value);
|
|
17
|
+
}
|
|
18
|
+
value = Number(value);
|
|
19
|
+
exp = Number(exp);
|
|
20
|
+
// Если значение не является числом, либо степень не является целым числом...
|
|
21
|
+
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
|
|
22
|
+
return Number.NaN;
|
|
23
|
+
}
|
|
24
|
+
// Сдвиг разрядов
|
|
25
|
+
value = value.toString().split('e');
|
|
26
|
+
value = Math[type](
|
|
27
|
+
Number(`${value[0]}e${value[1] ? Number(value[1]) - exp : -exp}`),
|
|
28
|
+
);
|
|
29
|
+
// Обратный сдвиг
|
|
30
|
+
value = value.toString().split('e');
|
|
31
|
+
return Number(`${value[0]}e${value[1] ? Number(value[1]) + exp : exp}`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Десятичное округление к ближайшему
|
|
35
|
+
if (!Math.round10) {
|
|
36
|
+
Math.round10 = function (value, exp) {
|
|
37
|
+
return decimalAdjust('round', value, exp);
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Десятичное округление вниз
|
|
41
|
+
if (!Math.floor10) {
|
|
42
|
+
Math.floor10 = function (value, exp) {
|
|
43
|
+
return decimalAdjust('floor', value, exp);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Десятичное округление вверх
|
|
47
|
+
if (!Math.ceil10) {
|
|
48
|
+
Math.ceil10 = function (value, exp) {
|
|
49
|
+
return decimalAdjust('ceil', value, exp);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
})();
|
|
53
|
+
|
|
54
|
+
export function addRangeDefault(from, to, currentValues, decimalPlaces) {
|
|
55
|
+
if (!currentValues?.length) return [{ from, to }];
|
|
56
|
+
const step = decimalPlaces ? 10 ** (-1 * decimalPlaces) : 1;
|
|
57
|
+
|
|
58
|
+
const resultOfProcessAddingRange = currentValues.reduce(
|
|
59
|
+
(acc, range) => {
|
|
60
|
+
const isIncludesFrom
|
|
61
|
+
= Boolean(acc.from) && range.from < acc.from && range.to >= acc.from;
|
|
62
|
+
const isIncludesTo
|
|
63
|
+
= Boolean(acc.to) && range.from <= acc.to && range.to > acc.to;
|
|
64
|
+
const isRangeMustBeIncludet
|
|
65
|
+
= Boolean(acc.from)
|
|
66
|
+
&& Boolean(acc.to)
|
|
67
|
+
&& acc.from <= range.from
|
|
68
|
+
&& acc.to >= range.to;
|
|
69
|
+
|
|
70
|
+
const processTo = () => {
|
|
71
|
+
const lastAccRange = acc.result[acc.result.length - 1];
|
|
72
|
+
|
|
73
|
+
if (acc.to < range.from) {
|
|
74
|
+
lastAccRange.to = acc.to;
|
|
75
|
+
acc.to = null;
|
|
76
|
+
acc.result = [...acc.result, range];
|
|
77
|
+
}
|
|
78
|
+
else if (isIncludesTo) {
|
|
79
|
+
lastAccRange.to = acc.to;
|
|
80
|
+
acc.result = [
|
|
81
|
+
...acc.result,
|
|
82
|
+
{
|
|
83
|
+
from: Math.round10(acc.to + step, -1 * decimalPlaces),
|
|
84
|
+
to: range.to,
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
acc.to = null;
|
|
88
|
+
}
|
|
89
|
+
else if (acc.to === range.to) {
|
|
90
|
+
lastAccRange.to = acc.to;
|
|
91
|
+
acc.to = null;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
if (!acc.from && !acc.to) {
|
|
96
|
+
acc.result = [...acc.result, range];
|
|
97
|
+
}
|
|
98
|
+
else if (!acc.from && acc.to) {
|
|
99
|
+
processTo();
|
|
100
|
+
}
|
|
101
|
+
else if (acc.from && acc.to) {
|
|
102
|
+
if (acc.from <= range.from) {
|
|
103
|
+
acc.result = [...acc.result, { from: acc.from }];
|
|
104
|
+
acc.from = null;
|
|
105
|
+
processTo();
|
|
106
|
+
}
|
|
107
|
+
else if (isIncludesFrom) {
|
|
108
|
+
acc.result = [
|
|
109
|
+
...acc.result,
|
|
110
|
+
{
|
|
111
|
+
from: range.from,
|
|
112
|
+
to: Math.round10(acc.from - step, -1 * decimalPlaces),
|
|
113
|
+
},
|
|
114
|
+
{ from: acc.from },
|
|
115
|
+
];
|
|
116
|
+
acc.from = null;
|
|
117
|
+
processTo();
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
acc.result = [
|
|
121
|
+
...acc.result,
|
|
122
|
+
...(!isRangeMustBeIncludet ? [range] : []),
|
|
123
|
+
{
|
|
124
|
+
from: Math.round10(acc.from, -1 * decimalPlaces),
|
|
125
|
+
to: Math.round10(acc.to, -1 * decimalPlaces),
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return acc;
|
|
131
|
+
},
|
|
132
|
+
{ from, to, result: [] },
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
const result = resultOfProcessAddingRange.result;
|
|
136
|
+
if (!result[result.length - 1].to) result[result.length - 1].to = to;
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
function defaultRenderFieldComponent() {
|
|
2
|
+
console.error('RenderFields: RenderFieldComponent Property is not recieved!');
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
function defaultFormDataDriver() {
|
|
7
|
+
console.error('RenderFields: FormDataDriver Property is not recieved!');
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function defaultOnFieldChange() {
|
|
12
|
+
console.warn(
|
|
13
|
+
'RenderFields: Be careful, onFieldChange handler is not recieved!',
|
|
14
|
+
);
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function defaultOnFieldBlur() {
|
|
19
|
+
console.warn(
|
|
20
|
+
'RenderFields: Be careful, defaultOnFieldBlur handler is not recieved!',
|
|
21
|
+
);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default function RenderFields({
|
|
26
|
+
form,
|
|
27
|
+
fields,
|
|
28
|
+
cols = 1,
|
|
29
|
+
FormDataDriver = defaultFormDataDriver,
|
|
30
|
+
RenderFieldComponent = defaultRenderFieldComponent,
|
|
31
|
+
onFieldChange = defaultOnFieldChange,
|
|
32
|
+
onFieldBlur = defaultOnFieldBlur,
|
|
33
|
+
} = {}) {
|
|
34
|
+
const maxColumns = 6;
|
|
35
|
+
const maxWidth = 12;
|
|
36
|
+
|
|
37
|
+
const { getFormField } = FormDataDriver({ form });
|
|
38
|
+
|
|
39
|
+
const getColumnsQty = () => {
|
|
40
|
+
return cols > maxColumns ? maxColumns : cols;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const renderFormField = (key) => {
|
|
44
|
+
try {
|
|
45
|
+
const field = { ...getFormField(key), key };
|
|
46
|
+
const { wrapperRef } = field;
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div
|
|
50
|
+
key={`render-field-wrapper-${key}`}
|
|
51
|
+
id={`render-field-wrapper-${key}`}
|
|
52
|
+
ref={
|
|
53
|
+
wrapperRef
|
|
54
|
+
? typeof wrapperRef === 'function'
|
|
55
|
+
? node => wrapperRef(node, key)
|
|
56
|
+
: wrapperRef
|
|
57
|
+
: null
|
|
58
|
+
}
|
|
59
|
+
>
|
|
60
|
+
<RenderFieldComponent
|
|
61
|
+
key={key}
|
|
62
|
+
field={field}
|
|
63
|
+
onChange={value => onFieldChange(key, value)}
|
|
64
|
+
onBlur={(...args) => onFieldBlur(...args)}
|
|
65
|
+
/>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const renderSingleColumn = () => {
|
|
75
|
+
return fields.map(renderFormField);
|
|
76
|
+
};
|
|
77
|
+
const renderSplitColumns = () => {
|
|
78
|
+
const fieldsLen = fields?.length || 0;
|
|
79
|
+
const columnsQty
|
|
80
|
+
= getColumnsQty() > fieldsLen ? fieldsLen : getColumnsQty();
|
|
81
|
+
|
|
82
|
+
if (!columnsQty) return null;
|
|
83
|
+
|
|
84
|
+
const parts = new Array(columnsQty).fill([]).map((v, i) => {
|
|
85
|
+
const startIndex = (fieldsLen / columnsQty) * i;
|
|
86
|
+
const endIndex = startIndex + fieldsLen / columnsQty;
|
|
87
|
+
|
|
88
|
+
return fields.slice(startIndex, endIndex);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<div className="row">
|
|
93
|
+
{parts.map((part, i) => (
|
|
94
|
+
<div
|
|
95
|
+
key={`render-fields-row-${i}`}
|
|
96
|
+
className={`col-12 col-lg-${Number.parseInt(maxWidth / columnsQty, 10)}`}
|
|
97
|
+
>
|
|
98
|
+
{part.map(renderFormField)}
|
|
99
|
+
</div>
|
|
100
|
+
))}
|
|
101
|
+
</div>
|
|
102
|
+
);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const render = cols === 1 ? renderSingleColumn : renderSplitColumns;
|
|
106
|
+
|
|
107
|
+
return render();
|
|
108
|
+
}
|