intelicoreact 1.6.18 → 1.6.20
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/ActionAlert/ActionAlert.js +102 -1
- package/dist/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js +89 -1
- package/dist/Atomic/FormElements/Calendar/Calendar.js +232 -1
- package/dist/Atomic/FormElements/Calendar/Calendar.props.js +3 -1
- package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.js +101 -1
- package/dist/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js +70 -1
- package/dist/Atomic/FormElements/Datepicker/Datepicker.js +350 -1
- package/dist/Atomic/FormElements/Datepicker/Datepicker.props.js +3 -1
- package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +177 -1
- package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.props.js +3 -1
- package/dist/Atomic/FormElements/Dropdown/Dropdown.js +561 -1
- package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +20 -1
- package/dist/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js +405 -1
- package/dist/Atomic/FormElements/FileLoader/FileLoader.js +94 -1
- package/dist/Atomic/FormElements/FileLoader/partial/LoadZone.js +105 -1
- package/dist/Atomic/FormElements/FileLoader/partial/LoadedContent.js +67 -1
- package/dist/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +247 -1
- package/dist/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +160 -1
- package/dist/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +193 -1
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js +135 -1
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.js +116 -1
- package/dist/Atomic/FormElements/Input/Input.js +467 -1
- package/dist/Atomic/FormElements/InputCalendar/InputCalendar.js +161 -1
- package/dist/Atomic/FormElements/InputColor/InputColor.js +64 -1
- package/dist/Atomic/FormElements/InputCurrency/InputCurrency.js +166 -1
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +354 -1
- package/dist/Atomic/FormElements/InputDateRange/components/DateInput.js +71 -1
- package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +693 -1
- package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +254 -1
- package/dist/Atomic/FormElements/InputDateRange/components/SelectItem.js +32 -1
- package/dist/Atomic/FormElements/InputDateRange/dependencies.js +200 -1
- package/dist/Atomic/FormElements/InputLink/InputLink.js +99 -1
- package/dist/Atomic/FormElements/InputMask/InputCarretPosition.js +37 -1
- package/dist/Atomic/FormElements/InputMask/InputMask.js +1214 -1
- package/dist/Atomic/FormElements/InputMask/config.js +15 -1
- package/dist/Atomic/FormElements/InputMask/functions.js +58 -1
- package/dist/Atomic/FormElements/InputMask2/InputMask2.js +674 -1
- package/dist/Atomic/FormElements/InputMask2/config.js +15 -1
- package/dist/Atomic/FormElements/InputMask2/functions.js +58 -1
- package/dist/Atomic/FormElements/InputMask3/InputMask3.js +766 -1
- package/dist/Atomic/FormElements/InputMask3/config.js +15 -1
- package/dist/Atomic/FormElements/InputMask3/functions.js +58 -1
- package/dist/Atomic/FormElements/InputWithAction/InputWithAction.js +114 -1
- package/dist/Atomic/FormElements/InputsRow/InputsRow.js +140 -1
- package/dist/Atomic/FormElements/Label/Label.js +82 -1
- package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +506 -1
- package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +45 -1
- package/dist/Atomic/FormElements/NumericInput/NumericInput.js +331 -1
- package/dist/Atomic/FormElements/RadioGroup/RadioGroup.js +66 -1
- package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +80 -1
- package/dist/Atomic/FormElements/RadioInput/RadioInput.js +64 -1
- package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js +54 -1
- package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +183 -1
- package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js +209 -1
- package/dist/Atomic/FormElements/RangeList/RangeList.js +175 -1
- package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.js +43 -1
- package/dist/Atomic/FormElements/RangeSlider/RangeSlider.js +443 -1
- package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.js +858 -1
- package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.js +39 -1
- package/dist/Atomic/FormElements/Switcher/Switcher.js +59 -1
- package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js +50 -1
- package/dist/Atomic/FormElements/SwitcherHide/SwitcherHide.js +47 -1
- package/dist/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js +96 -1
- package/dist/Atomic/FormElements/SwitcherRange/SwitcherRange.js +40 -1
- package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +64 -1
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js +170 -1
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/partial/States.js +202 -1
- package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js +67 -1
- package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js +115 -1
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +826 -1
- package/dist/Atomic/FormElements/Text/Text.js +125 -1
- package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.js +45 -1
- package/dist/Atomic/FormElements/Textarea/Textarea.js +80 -1
- package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +176 -1
- package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js +62 -1
- package/dist/Atomic/FormElements/TimeRange/TimeRange.js +127 -1
- package/dist/Atomic/FormElements/UserContacts/UserContacts.js +220 -1
- package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js +83 -1
- package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js +82 -1
- package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +101 -1
- package/dist/Atomic/FormElements/WidgetPseudoTable/partial/constructor.js +29 -1
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +113 -1
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/partial/constructor.js +30 -1
- package/dist/Atomic/Layout/Header/Header.js +85 -1
- package/dist/Atomic/Layout/Spinner/Spinner.js +39 -1
- package/dist/Atomic/UI/Accordion/Accordion.js +118 -1
- package/dist/Atomic/UI/Accordion/AccordionItem.js +181 -1
- package/dist/Atomic/UI/AccordionTable/AccordionTable.js +238 -1
- package/dist/Atomic/UI/AccordionText/AccordionText.js +69 -1
- package/dist/Atomic/UI/AdvancedTag/AdvTag.js +207 -1
- package/dist/Atomic/UI/AdvancedTag/AdvancedTags.js +56 -1
- package/dist/Atomic/UI/Alert/Alert.js +72 -1
- package/dist/Atomic/UI/Arrow/Arrow.js +132 -1
- package/dist/Atomic/UI/Box/Box.js +52 -1
- package/dist/Atomic/UI/Button/Button.js +89 -1
- package/dist/Atomic/UI/ButtonsBar/ButtonsBar.js +72 -1
- package/dist/Atomic/UI/Chart/Chart.js +172 -1
- package/dist/Atomic/UI/Chart/partial/Chart.constants.js +95 -1
- package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js +80 -1
- package/dist/Atomic/UI/Chart/partial/datasetSetters.js +188 -1
- package/dist/Atomic/UI/Chart/partial/optionsConstructor.js +335 -1
- package/dist/Atomic/UI/Chart/partial/optionsSetters.js +43 -1
- package/dist/Atomic/UI/Chart/partial/utils.js +60 -1
- package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.js +109 -1
- package/dist/Atomic/UI/DateTime/DateTime.js +57 -1
- package/dist/Atomic/UI/DebugContainer/DebugContainer.js +44 -1
- package/dist/Atomic/UI/DebugContainer/useDebugContainer.js +15 -1
- package/dist/Atomic/UI/DoubleString/DoubleString.js +102 -1
- package/dist/Atomic/UI/DynamicIcon/DynamicIcon.js +226 -1
- package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +221 -1
- package/dist/Atomic/UI/ExampleChartIntegration/partial/utils.js +106 -1
- package/dist/Atomic/UI/Hint/Hint.js +193 -1
- package/dist/Atomic/UI/Hint/partials/_utils.js +51 -1
- package/dist/Atomic/UI/Modal/Modal.js +188 -1
- package/dist/Atomic/UI/Modal/ModalHOC.js +72 -1
- package/dist/Atomic/UI/Modal/partials/ModalFooter.js +46 -1
- package/dist/Atomic/UI/Modal/partials/ModalTitle.js +83 -1
- package/dist/Atomic/UI/Modal/partials/useMobileModal.js +200 -1
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.js +75 -1
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion.js +80 -1
- package/dist/Atomic/UI/NavLine/NavLine.js +293 -1
- package/dist/Atomic/UI/PageTitle/PageTitle.js +75 -1
- package/dist/Atomic/UI/PieChart/PieChart.js +42 -1
- package/dist/Atomic/UI/Price/Price.js +22 -1
- package/dist/Atomic/UI/PriceRange/PriceRange.js +36 -1
- package/dist/Atomic/UI/ProgressLine/ProgressLine.js +71 -1
- package/dist/Atomic/UI/Status/Status.js +59 -1
- package/dist/Atomic/UI/Table/Partials/TdCell.js +87 -1
- package/dist/Atomic/UI/Table/Partials/TdHeader.js +38 -1
- package/dist/Atomic/UI/Table/Partials/TdRow.js +99 -1
- package/dist/Atomic/UI/Table/Partials/TdTitle.js +52 -1
- package/dist/Atomic/UI/Table/Table.js +63 -1
- package/dist/Atomic/UI/Table/TdTypes/TdActions.js +80 -1
- package/dist/Atomic/UI/Table/TdTypes/TdPriority.js +28 -1
- package/dist/Atomic/UI/Table/TdTypes/TdRange.js +13 -1
- package/dist/Atomic/UI/Table/TdTypes/TdWeight.js +53 -1
- package/dist/Atomic/UI/Tag/Tag.js +160 -1
- package/dist/Atomic/UI/TagList/TagList.js +251 -1
- package/dist/Atomic/UI/UserBox/UserBox.js +73 -1
- package/dist/Atomic/UI/WizardStepper/constructor.js +84 -1
- package/dist/Atomic/UI/WizardStepper/index.js +3 -1
- package/dist/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js +37 -1
- package/dist/Atomic/UI/WizardStepper/ui/StateIcon/index.js +3 -1
- package/dist/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js +61 -1
- package/dist/Atomic/UI/WizardStepper/ui/StepRow/index.js +3 -1
- package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js +39 -1
- package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/index.js +3 -1
- package/dist/Atomic/UI/WizardStepper/ui/icons.js +49 -1
- package/dist/Atomic/UI/WizardStepper/ui/index.js +3 -1
- package/dist/Classes/AbortableFetch.js +454 -1
- package/dist/Classes/AnimatedHandler.js +47 -1
- package/dist/Classes/RESTAPI/index.js +228 -1
- package/dist/Classes/RESTAPI/partials/AbortableFetch.js +457 -1
- package/dist/Classes/RESTAPI/partials/ApiBase.js +48 -1
- package/dist/Classes/RESTAPI/partials/ApiRequestCreators.js +112 -1
- package/dist/Classes/RESTAPI/partials/ApiUtils.js +189 -1
- package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +252 -1
- package/dist/Classes/RESTAPI/partials/Utils.js +92 -1
- package/dist/Classes/RESTAPI/partials/_outerDependencies.js +3 -1
- package/dist/Classes/RESTAPI/partials/_utils.js +197 -1
- package/dist/Constants/index.constants.js +78 -1
- package/dist/Functions/Portal.js +22 -1
- package/dist/Functions/customEventListener.js +96 -1
- package/dist/Functions/dateTime.js +149 -1
- package/dist/Functions/fieldValueFormatters.js +405 -1
- package/dist/Functions/guards/assertions.js +66 -1
- package/dist/Functions/guards/safeValue.js +30 -1
- package/dist/Functions/guards/typeGuards.js +116 -1
- package/dist/Functions/hooks/useFormFieldsChangesManager.js +95 -1
- package/dist/Functions/locale/createTranslator.js +32 -1
- package/dist/Functions/operations.js +130 -1
- package/dist/Functions/presets/inputMaskPresets.js +170 -1
- package/dist/Functions/presets/inputPresets.js +60 -1
- package/dist/Functions/presets/mobileKeyboardTypesPresets.js +45 -1
- package/dist/Functions/schemas.js +31 -1
- package/dist/Functions/useBodyScrollLock.js +17 -1
- package/dist/Functions/useClickOutside.js +15 -1
- package/dist/Functions/useDebounce.js +17 -1
- package/dist/Functions/useFieldFocus.js +84 -1
- package/dist/Functions/useFormTools/form-drivers/ArrayWithObjects.js +39 -1
- package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +159 -1
- package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +78 -1
- package/dist/Functions/useFormTools/functions/General.js +134 -1
- package/dist/Functions/useFormTools/functions/RenderFields.js +111 -1
- package/dist/Functions/useFormTools/functions/usePrevious.js +12 -1
- package/dist/Functions/useFormTools/index.js +778 -1
- package/dist/Functions/useInputHighlightError.js +67 -1
- package/dist/Functions/useIsMobile/useIsMobile.js +53 -1
- package/dist/Functions/useKeyPress/useHandleKeyPress.js +21 -1
- package/dist/Functions/useKeyPress/useKeyPress.js +75 -1
- package/dist/Functions/useLocalStorage.js +34 -1
- package/dist/Functions/useLocationParams.js +27 -1
- package/dist/Functions/useMediaQuery.js +17 -1
- package/dist/Functions/useMetaInfo.js +43 -1
- package/dist/Functions/useMouseUpOutside.js +16 -1
- package/dist/Functions/useOnlineStatus.js +29 -1
- package/dist/Functions/usePasswordChecker.js +110 -1
- package/dist/Functions/usePrevious.js +12 -1
- package/dist/Functions/useResize.js +31 -1
- package/dist/Functions/useScrollTo.js +17 -1
- package/dist/Functions/useToggle.js +17 -1
- package/dist/Functions/utils.js +522 -1
- package/dist/Langs.js +168 -1
- package/dist/Molecular/CustomIcons/components/AffiliateNetworks.js +21 -1
- package/dist/Molecular/CustomIcons/components/AlertCircle.js +23 -1
- package/dist/Molecular/CustomIcons/components/AppStore.js +29 -1
- package/dist/Molecular/CustomIcons/components/Arrow.js +32 -1
- package/dist/Molecular/CustomIcons/components/ArrowDown.js +17 -1
- package/dist/Molecular/CustomIcons/components/ArrowLeft.js +22 -1
- package/dist/Molecular/CustomIcons/components/ArrowRight.js +22 -1
- package/dist/Molecular/CustomIcons/components/ArrowUp.js +17 -1
- package/dist/Molecular/CustomIcons/components/Bell.js +15 -1
- package/dist/Molecular/CustomIcons/components/Button.js +12 -1
- package/dist/Molecular/CustomIcons/components/Campaigns.js +16 -1
- package/dist/Molecular/CustomIcons/components/Check.js +14 -1
- package/dist/Molecular/CustomIcons/components/Check2.js +12 -1
- package/dist/Molecular/CustomIcons/components/ChevronDown.js +12 -1
- package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.js +11 -1
- package/dist/Molecular/CustomIcons/components/ChevronLeft.js +11 -1
- package/dist/Molecular/CustomIcons/components/ChevronRight.js +11 -1
- package/dist/Molecular/CustomIcons/components/ChevronUp.js +11 -1
- package/dist/Molecular/CustomIcons/components/ChevronUpDown.js +27 -1
- package/dist/Molecular/CustomIcons/components/Close.js +14 -1
- package/dist/Molecular/CustomIcons/components/ColumnsOrder.js +17 -1
- package/dist/Molecular/CustomIcons/components/Delete.js +16 -1
- package/dist/Molecular/CustomIcons/components/Edit.js +15 -1
- package/dist/Molecular/CustomIcons/components/Email.js +31 -1
- package/dist/Molecular/CustomIcons/components/FinturfLogo.js +18 -1
- package/dist/Molecular/CustomIcons/components/FinturfLogo2.js +35 -1
- package/dist/Molecular/CustomIcons/components/Flows.js +15 -1
- package/dist/Molecular/CustomIcons/components/Gift.js +25 -1
- package/dist/Molecular/CustomIcons/components/GoogleAuth.js +29 -1
- package/dist/Molecular/CustomIcons/components/GooglePlay.js +29 -1
- package/dist/Molecular/CustomIcons/components/HelpCircle.js +19 -1
- package/dist/Molecular/CustomIcons/components/HelpCircle2.js +20 -1
- package/dist/Molecular/CustomIcons/components/HelpCircleFilled.js +19 -1
- package/dist/Molecular/CustomIcons/components/Home.js +16 -1
- package/dist/Molecular/CustomIcons/components/Home2.js +22 -1
- package/dist/Molecular/CustomIcons/components/Key.js +23 -1
- package/dist/Molecular/CustomIcons/components/Landers.js +20 -1
- package/dist/Molecular/CustomIcons/components/Lock.js +15 -1
- package/dist/Molecular/CustomIcons/components/Mail.js +26 -1
- package/dist/Molecular/CustomIcons/components/Mastercard.js +73 -1
- package/dist/Molecular/CustomIcons/components/Minus.js +25 -1
- package/dist/Molecular/CustomIcons/components/Offers.js +16 -1
- package/dist/Molecular/CustomIcons/components/Pause.js +28 -1
- package/dist/Molecular/CustomIcons/components/PayPal.js +41 -1
- package/dist/Molecular/CustomIcons/components/PayPalLightLarge.js +28 -1
- package/dist/Molecular/CustomIcons/components/Phone.js +30 -1
- package/dist/Molecular/CustomIcons/components/Play.js +25 -1
- package/dist/Molecular/CustomIcons/components/Plus.js +25 -1
- package/dist/Molecular/CustomIcons/components/Profile.js +16 -1
- package/dist/Molecular/CustomIcons/components/QRCode.js +29 -1
- package/dist/Molecular/CustomIcons/components/Rectangle.js +12 -1
- package/dist/Molecular/CustomIcons/components/Revert.js +13 -1
- package/dist/Molecular/CustomIcons/components/Star.js +14 -1
- package/dist/Molecular/CustomIcons/components/Star2.js +16 -1
- package/dist/Molecular/CustomIcons/components/TrafficSources.js +14 -1
- package/dist/Molecular/CustomIcons/components/Trash.js +15 -1
- package/dist/Molecular/CustomIcons/components/TrashRed.js +15 -1
- package/dist/Molecular/CustomIcons/components/Triggers.js +15 -1
- package/dist/Molecular/CustomIcons/components/User.js +25 -1
- package/dist/Molecular/CustomIcons/components/Visa.js +31 -1
- package/dist/Molecular/CustomIcons/components/X.js +12 -1
- package/dist/Molecular/CustomIcons/index.js +61 -1
- package/dist/Molecular/FormElement/FormElement.js +54 -1
- package/dist/Molecular/FormWithDependOn/FormWithDependOn.js +184 -1
- package/dist/Molecular/FormWithDependOn/partials/_utils.js +53 -1
- package/dist/Molecular/InputAddress/InputAddress.js +620 -1
- package/dist/Molecular/InputPassword/InputPassword.js +48 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.d.ts +0 -3
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js.map +0 -1
- package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.d.ts +0 -2
- package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js.map +0 -1
- package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.d.ts +0 -3
- package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js.map +0 -1
|
@@ -1 +1,197 @@
|
|
|
1
|
-
|
|
1
|
+
import AbortableFetch from "./AbortableFetch";
|
|
2
|
+
|
|
3
|
+
export function getIsOnlyAnObject(input) {
|
|
4
|
+
return (
|
|
5
|
+
typeof input === "object" &&
|
|
6
|
+
input instanceof Object &&
|
|
7
|
+
!Array.isArray(input)
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const clone = (input) => {
|
|
12
|
+
if (input === null || typeof input !== "object") return input;
|
|
13
|
+
const data = input instanceof Array ? [] : {};
|
|
14
|
+
for (const i in input) data[i] = clone(input[i]);
|
|
15
|
+
return data;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//принимает обьект и массив ключей обьекта
|
|
19
|
+
//возвращает обьект с теми полями, которых нет в массиве ключей
|
|
20
|
+
export const omitKeys = (obj = {}, keys = []) =>
|
|
21
|
+
keys.reduce((acc, key) => {
|
|
22
|
+
const { [key]: omit, ...rest } = acc;
|
|
23
|
+
return rest;
|
|
24
|
+
}, obj);
|
|
25
|
+
|
|
26
|
+
export const getResponseClone = async (res) =>
|
|
27
|
+
typeof res?.clone === "function" ? await res.clone() : clone(res);
|
|
28
|
+
|
|
29
|
+
export function addCustomMethods(data, prefix) {
|
|
30
|
+
const preparedPrefix = (prefix || "").toString();
|
|
31
|
+
|
|
32
|
+
Object.keys(data).forEach((key) => {
|
|
33
|
+
const preparedKey = `${preparedPrefix}${key}`;
|
|
34
|
+
if (typeof data[key] === "function" && getIsOnlyAnObject(this))
|
|
35
|
+
this[preparedKey] = data[key];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function getInstanceOfFetchSystem(isGetBody) {
|
|
40
|
+
const API_CONTEXT = this;
|
|
41
|
+
const CREDENTIALS_CONTEXT = API_CONTEXT.credentialsProcessing;
|
|
42
|
+
|
|
43
|
+
let credentials = {};
|
|
44
|
+
//? Наличие credentialsProcessing включает добавление токена в принципе (если авторизованы в системе)
|
|
45
|
+
if (CREDENTIALS_CONTEXT) {
|
|
46
|
+
//? Метод getCredentials - классовый метод, обертка над getCredentials, переданным при создании экземпляра
|
|
47
|
+
//? В классовом getCredentials уже инкапсулирована логика использования importCredentials
|
|
48
|
+
const cred = await CREDENTIALS_CONTEXT.getCredentials();
|
|
49
|
+
|
|
50
|
+
credentials = CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing
|
|
51
|
+
? await CREDENTIALS_CONTEXT.waitRefresh(
|
|
52
|
+
cred.isNeedRefresh && !CREDENTIALS_CONTEXT.getIsTokenStartRefresh(),
|
|
53
|
+
).then(async () =>
|
|
54
|
+
CREDENTIALS_CONTEXT.processCredentials(
|
|
55
|
+
await CREDENTIALS_CONTEXT.getCredentials(),
|
|
56
|
+
),
|
|
57
|
+
)
|
|
58
|
+
: cred;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
//? На уровне получения instance может уже сложиться ситуация, что сходили на рефреш и он неудачный.
|
|
62
|
+
//? Прерываем получение instance, даем возможность отработать callbackAfterRejectRefresh (смотри class CredentialsProcessing)
|
|
63
|
+
if (credentials.isRefreshFailed) return null;
|
|
64
|
+
|
|
65
|
+
if (
|
|
66
|
+
API_CONTEXT.addAsCommon &&
|
|
67
|
+
typeof API_CONTEXT.addAsCommon !== "function"
|
|
68
|
+
) {
|
|
69
|
+
throw new Error("addAsCommon must be function [getInstanceOfFetchSystem]");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const {
|
|
73
|
+
headers: headersToAbortableFetchInstance,
|
|
74
|
+
queryParameters: queryParamsToAbortableFetchInstance,
|
|
75
|
+
options: optionsToAbortableFetchInstance,
|
|
76
|
+
} = (await API_CONTEXT.addAsCommon?.()) || {};
|
|
77
|
+
|
|
78
|
+
if (
|
|
79
|
+
(headersToAbortableFetchInstance &&
|
|
80
|
+
!getIsOnlyAnObject(headersToAbortableFetchInstance)) ||
|
|
81
|
+
(optionsToAbortableFetchInstance &&
|
|
82
|
+
!getIsOnlyAnObject(optionsToAbortableFetchInstance)) ||
|
|
83
|
+
(queryParamsToAbortableFetchInstance &&
|
|
84
|
+
!(
|
|
85
|
+
typeof queryParamsToAbortableFetchInstance === "string" ||
|
|
86
|
+
getIsOnlyAnObject(queryParamsToAbortableFetchInstance) ||
|
|
87
|
+
Array.isArray(queryParamsToAbortableFetchInstance)
|
|
88
|
+
))
|
|
89
|
+
) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
"Bad output format from addAsCommon [getInstanceOfFetchSystem]",
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//? По итогу возвращается экземпляр класса AbortableFetch (который мы конфигурируем большим объектом настроек)
|
|
96
|
+
return (
|
|
97
|
+
CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing
|
|
98
|
+
? CREDENTIALS_CONTEXT.waitRefresh()
|
|
99
|
+
: Promise.resolve()
|
|
100
|
+
).then(
|
|
101
|
+
async () =>
|
|
102
|
+
new AbortableFetch({
|
|
103
|
+
//? Метод по умолчанию
|
|
104
|
+
method: "GET",
|
|
105
|
+
//? Заголовки по умолчанию
|
|
106
|
+
headers: {
|
|
107
|
+
...headersToAbortableFetchInstance,
|
|
108
|
+
//? (*) Тут обрабатываются кейсы
|
|
109
|
+
//? - когда нет this.credentialsProcessing
|
|
110
|
+
//? (мы НЕ хотим добавлять токены в принципе, не зашли в верхнюю if-ку)
|
|
111
|
+
//? - когда есть this.credentialsProcessing, но нет credentials.token (не авторизованы)
|
|
112
|
+
//? (зашли в верхнюю if-ку, попробовали получить/обновить креды)
|
|
113
|
+
...(credentials.token
|
|
114
|
+
? CREDENTIALS_CONTEXT?.getHeadersForAuthorize?.(
|
|
115
|
+
credentials.token,
|
|
116
|
+
) || {}
|
|
117
|
+
: {}),
|
|
118
|
+
},
|
|
119
|
+
queryParameters: await API_CONTEXT.processQueryParams(
|
|
120
|
+
queryParamsToAbortableFetchInstance,
|
|
121
|
+
),
|
|
122
|
+
//? Опции по умолчанию
|
|
123
|
+
options: {
|
|
124
|
+
mode: "cors",
|
|
125
|
+
redirect: "follow",
|
|
126
|
+
...optionsToAbortableFetchInstance,
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
//? Каждый запрос (каждый запрос мультизапроса), сделаный методом request этого экземпляра выполнит этот колбек
|
|
130
|
+
everyPromiseCallback: async function everyPromiseCallback(response) {
|
|
131
|
+
//? this - это НЕ API_CONTEXT и НЕ CREDENTIALS_CONTEXT, a итоговый эекземпляр AbortableFetch
|
|
132
|
+
const ABORTABLE_FETCH_INSTANCE = this;
|
|
133
|
+
|
|
134
|
+
if (!response.status) {
|
|
135
|
+
const request = ABORTABLE_FETCH_INSTANCE.requestInput.find(
|
|
136
|
+
(item) => item.path === response.request.path,
|
|
137
|
+
);
|
|
138
|
+
const isUseErrorToast = request?.mesageOptions?.isUseErrorToast;
|
|
139
|
+
if (isUseErrorToast) {
|
|
140
|
+
API_CONTEXT.sendMessage?.(
|
|
141
|
+
API_CONTEXT.NO_INET,
|
|
142
|
+
request.mesageOptions,
|
|
143
|
+
response,
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return API_CONTEXT.REJECT_CODES.includes(response.status) || (
|
|
149
|
+
CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing &&
|
|
150
|
+
CREDENTIALS_CONTEXT?.CODES_USING_THE_REFRESH_ATTEMPT?.includes?.(response.status)
|
|
151
|
+
)
|
|
152
|
+
? Promise.reject(new Error(`status:${response.status}`))
|
|
153
|
+
: Promise.resolve(
|
|
154
|
+
!isGetBody
|
|
155
|
+
? response
|
|
156
|
+
: await API_CONTEXT.getResponseBody(response),
|
|
157
|
+
);
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
//? Если хоть один запрос из пачки будет зареджекчен, зареджектится вся пачка.
|
|
161
|
+
//? В этом случае будет выполнен этот колбэк
|
|
162
|
+
catchCallback: async function catchCallback(res) {
|
|
163
|
+
//? this - это НЕ API_CONTEXT и НЕ CREDENTIALS_CONTEXT, a итоговый эекземпляр AbortableFetch
|
|
164
|
+
const ABORTABLE_FETCH_INSTANCE = this;
|
|
165
|
+
const code = Number(res.message.split(":")[1]);
|
|
166
|
+
|
|
167
|
+
if (CREDENTIALS_CONTEXT?.CODES_USING_THE_REFRESH_ATTEMPT?.includes?.(code)) {
|
|
168
|
+
const isDoRefresh =
|
|
169
|
+
!CREDENTIALS_CONTEXT?.getIsTokenStartRefresh?.();
|
|
170
|
+
|
|
171
|
+
return CREDENTIALS_CONTEXT?.waitRefresh(isDoRefresh).then(
|
|
172
|
+
async () => {
|
|
173
|
+
//? Пробуем зарефрешить
|
|
174
|
+
const newCredentials = await CREDENTIALS_CONTEXT?.processCredentials({
|
|
175
|
+
...(await CREDENTIALS_CONTEXT?.getCredentials(true)),
|
|
176
|
+
isCatchCallbackProcess: isDoRefresh,
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
ABORTABLE_FETCH_INSTANCE.setHeaders({
|
|
180
|
+
...ABORTABLE_FETCH_INSTANCE.getHeaders(),
|
|
181
|
+
...(newCredentials?.token
|
|
182
|
+
? { Authorization: `Bearer ${newCredentials?.token}` }
|
|
183
|
+
: {}),
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
if (newCredentials.token)
|
|
187
|
+
return ABORTABLE_FETCH_INSTANCE.repeatRequest();
|
|
188
|
+
return Promise.reject(res);
|
|
189
|
+
},
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return Promise.reject(res);
|
|
194
|
+
},
|
|
195
|
+
}),
|
|
196
|
+
);
|
|
197
|
+
}
|
|
@@ -1 +1,78 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const KEYBOARD_SERVICE_KEYS = [
|
|
2
|
+
"Escape",
|
|
3
|
+
"F1",
|
|
4
|
+
"F2",
|
|
5
|
+
"F3",
|
|
6
|
+
"F4",
|
|
7
|
+
"F5",
|
|
8
|
+
"F6",
|
|
9
|
+
"F7",
|
|
10
|
+
"F8",
|
|
11
|
+
"F9",
|
|
12
|
+
"F10",
|
|
13
|
+
"F11",
|
|
14
|
+
"F12",
|
|
15
|
+
"Tab",
|
|
16
|
+
"CapsLock",
|
|
17
|
+
"Shift",
|
|
18
|
+
"Control",
|
|
19
|
+
"Meta",
|
|
20
|
+
"Option",
|
|
21
|
+
"Alt",
|
|
22
|
+
"ContextMenu",
|
|
23
|
+
"ArrowLeft",
|
|
24
|
+
"ArrowRight",
|
|
25
|
+
"ArrowUp",
|
|
26
|
+
"ArrowDown",
|
|
27
|
+
"NumLock",
|
|
28
|
+
"Backspace",
|
|
29
|
+
"Delete",
|
|
30
|
+
"Enter",
|
|
31
|
+
"Return",
|
|
32
|
+
"Insert",
|
|
33
|
+
"Home",
|
|
34
|
+
"End",
|
|
35
|
+
"PageUp",
|
|
36
|
+
"PageDown",
|
|
37
|
+
"PrintScreen",
|
|
38
|
+
"ScrollLock",
|
|
39
|
+
"Pause",
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
export const MAX_PHONE_LENGTH = 10;
|
|
43
|
+
export const MAX_NAME_LENGTH = 128;
|
|
44
|
+
|
|
45
|
+
export const DEFAULT_DATE_MASK_NO_VALUE_SYMBOL = "_";
|
|
46
|
+
|
|
47
|
+
export const DEFAULT_COLORS = [
|
|
48
|
+
"#D9C1FF",
|
|
49
|
+
"#FFBAF0",
|
|
50
|
+
"#FFB8CE",
|
|
51
|
+
"#FFC3A2",
|
|
52
|
+
"#FFDB7C",
|
|
53
|
+
"#F9F871",
|
|
54
|
+
"#C3FCF1",
|
|
55
|
+
"#F6F2CB",
|
|
56
|
+
"#E0F8D1",
|
|
57
|
+
"#B1DFFB",
|
|
58
|
+
"#8DECFE",
|
|
59
|
+
"#76F7ED",
|
|
60
|
+
"#8AFEC8",
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
export const KEYBOARD_KEY_CODES = {
|
|
64
|
+
Backspace: 8,
|
|
65
|
+
Delete: 46,
|
|
66
|
+
ARROW_LEFT: 37,
|
|
67
|
+
ARROW_RIGHT: 39,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export const OS = {
|
|
71
|
+
iOS: "iOS",
|
|
72
|
+
Android: "Android",
|
|
73
|
+
WP: "Windows Phone",
|
|
74
|
+
Linux: "Linux",
|
|
75
|
+
Windows: "Windows",
|
|
76
|
+
MacOS: "MacOS",
|
|
77
|
+
Unknown: "unknown",
|
|
78
|
+
};
|
package/dist/Functions/Portal.js
CHANGED
|
@@ -1 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
|
+
|
|
3
|
+
import ReactDOM from "react-dom";
|
|
4
|
+
|
|
5
|
+
const Portal = ({ children, parentSelector }) => {
|
|
6
|
+
const [container] = useState(() => document.createElement("div"));
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
let parent;
|
|
9
|
+
|
|
10
|
+
if (parentSelector) parent = document.querySelector(parentSelector);
|
|
11
|
+
else parent = document.body;
|
|
12
|
+
parent?.appendChild(container);
|
|
13
|
+
|
|
14
|
+
return () => {
|
|
15
|
+
parent?.removeChild(container);
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
|
|
19
|
+
return ReactDOM.createPortal(children, container);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default React.memo(Portal);
|
|
@@ -1 +1,96 @@
|
|
|
1
|
-
|
|
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
|
+
};
|
|
@@ -1 +1,149 @@
|
|
|
1
|
-
|
|
1
|
+
import moment from "moment";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @constant {Object} DATETIME_FORMATS
|
|
5
|
+
* @description Все доступные форматы дат и времени.
|
|
6
|
+
*/
|
|
7
|
+
export const DATETIME_FORMATS = Object.freeze({
|
|
8
|
+
// Основные форматы
|
|
9
|
+
DATE_FORMAT: "YYYY-MM-DD", // Стандартный формат даты
|
|
10
|
+
DATE_WITHOUT_SEPARATORS: "MMDDYYYY", // Без разделителей
|
|
11
|
+
VALIDATION_DATE_FORMAT: "MM/DD/YYYY", // Для валидации
|
|
12
|
+
INPUT_DATE_FORMAT: "MM.DD.YYYY", // Формат для ввода
|
|
13
|
+
INPUT_TIME_FORMAT: "YYYY-MM-DD HH:mm:SS", // Ввод времени
|
|
14
|
+
TIME_FORMAT_WSPACE: "YYYY-MM-DD HH:mm:SS", // Время с пробелом
|
|
15
|
+
TIME_FORMAT: "YYYY-MM-DDTHH:mm:SS", // Время с T (ISO формат)
|
|
16
|
+
DATE_FORMAT_WITH_SLASH: "MM/DD/YYYY", // Дата с разделителем /
|
|
17
|
+
|
|
18
|
+
// Дополнительные форматы
|
|
19
|
+
DATE_WITH_DASHES: "MM-DD-YYYY", // Дата с дефисами
|
|
20
|
+
DATE_WITH_DOTS: "DD.MM.YYYY", // Дата с точками
|
|
21
|
+
DATE_WITH_COMMA: "DD,MM,YYYY", // Дата с запятыми
|
|
22
|
+
FULL_DATE_TIME: "YYYY-MM-DD HH:mm:ss", // Полная дата и время
|
|
23
|
+
ISO_DATE_TIME: "YYYY-MM-DDTHH:mm:ss.SSSZ", // ISO стандарт с миллисекундами
|
|
24
|
+
LOCALIZED_DATE: "MMMM DD, YYYY", // Локализованный формат с полным названием месяца
|
|
25
|
+
SHORT_DATE: "MM/DD/YY", // Краткая дата
|
|
26
|
+
SHORT_DATE_WITH_TIME: "MM/DD/YY HH:mm", // Краткая дата с временем
|
|
27
|
+
TIME_24H: "HH:mm", // Время в 24-часовом формате
|
|
28
|
+
TIME_12H: "hh:mm A", // Время в 12-часовом формате
|
|
29
|
+
TIME_12H_WITH_SECONDS: "hh:mm:ss A", // Время в 12-часовом формате с секундами
|
|
30
|
+
TIME_24H_WITH_SECONDS: "HH:mm:ss", // Время в 24-часовом формате с секундами
|
|
31
|
+
MONTH_DAY: "MM/DD", // Только месяц и день
|
|
32
|
+
YEAR_MONTH_DAY: "YYYY/MM/DD", // Год/Месяц/День
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const formatMap = Object.freeze({
|
|
36
|
+
[DATETIME_FORMATS.DATE_FORMAT]: "YYYY-MM-DD", // Стандартный формат даты
|
|
37
|
+
[DATETIME_FORMATS.DATE_WITHOUT_SEPARATORS]: "MMDDYYYY", // Без разделителей
|
|
38
|
+
[DATETIME_FORMATS.VALIDATION_DATE_FORMAT]: "MM/DD/YYYY", // Для валидации
|
|
39
|
+
[DATETIME_FORMATS.INPUT_DATE_FORMAT]: "MM.DD.YYYY", // Формат для ввода
|
|
40
|
+
[DATETIME_FORMATS.INPUT_TIME_FORMAT]: "YYYY-MM-DD HH:mm:SS", // Ввод времени
|
|
41
|
+
[DATETIME_FORMATS.TIME_FORMAT_WSPACE]: "YYYY-MM-DD HH:mm:SS", // Время с пробелом
|
|
42
|
+
[DATETIME_FORMATS.TIME_FORMAT]: "YYYY-MM-DDTHH:mm:SS", // Время с T (ISO формат)
|
|
43
|
+
[DATETIME_FORMATS.DATE_FORMAT_WITH_SLASH]: "MM/DD/YYYY", // Дата с разделителем /
|
|
44
|
+
[DATETIME_FORMATS.DATE_WITH_DASHES]: "MM-DD-YYYY", // Дата с дефисами
|
|
45
|
+
[DATETIME_FORMATS.DATE_WITH_DOTS]: "DD.MM.YYYY", // Дата с точками
|
|
46
|
+
[DATETIME_FORMATS.DATE_WITH_COMMA]: "DD,MM,YYYY", // Дата с запятыми
|
|
47
|
+
[DATETIME_FORMATS.FULL_DATE_TIME]: "YYYY-MM-DD HH:mm:ss", // Полная дата и время
|
|
48
|
+
[DATETIME_FORMATS.ISO_DATE_TIME]: "YYYY-MM-DDTHH:mm:ss.SSSZ", // ISO стандарт с миллисекундами
|
|
49
|
+
[DATETIME_FORMATS.LOCALIZED_DATE]: "MMMM DD, YYYY", // Локализованный формат с полным названием месяца
|
|
50
|
+
[DATETIME_FORMATS.SHORT_DATE]: "MM/DD/YY", // Краткая дата
|
|
51
|
+
[DATETIME_FORMATS.SHORT_DATE_WITH_TIME]: "MM/DD/YY HH:mm", // Краткая дата с временем
|
|
52
|
+
[DATETIME_FORMATS.TIME_24H]: "HH:mm", // Время в 24-часовом формате
|
|
53
|
+
[DATETIME_FORMATS.TIME_12H]: "hh:mm A", // Время в 12-часовом формате
|
|
54
|
+
[DATETIME_FORMATS.TIME_12H_WITH_SECONDS]: "hh:mm:ss A", // Время в 12-часовом формате с секундами
|
|
55
|
+
[DATETIME_FORMATS.TIME_24H_WITH_SECONDS]: "HH:mm:ss", // Время в 24-часовом формате с секундами
|
|
56
|
+
[DATETIME_FORMATS.MONTH_DAY]: "MM/DD", // Только месяц и день
|
|
57
|
+
[DATETIME_FORMATS.YEAR_MONTH_DAY]: "YYYY/MM/DD", // Год/Месяц/День
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @constant {Object} DATE_UNITS
|
|
62
|
+
* @description Единицы времени, которые могут быть использованы для работы с датами.
|
|
63
|
+
*/
|
|
64
|
+
export const DATE_UNITS = Object.freeze({
|
|
65
|
+
YEARS: Object.freeze({
|
|
66
|
+
YEARS: "years",
|
|
67
|
+
YEAR: "year",
|
|
68
|
+
Y: "y",
|
|
69
|
+
TEMPLATE: "YYYY",
|
|
70
|
+
}),
|
|
71
|
+
|
|
72
|
+
MONTHS: Object.freeze({
|
|
73
|
+
MONTHS: "months",
|
|
74
|
+
MONTH: "month",
|
|
75
|
+
MON: "M",
|
|
76
|
+
TEMPLATE: "MM",
|
|
77
|
+
}),
|
|
78
|
+
|
|
79
|
+
DAYS: Object.freeze({
|
|
80
|
+
DAYS: "days",
|
|
81
|
+
DAY: "day",
|
|
82
|
+
D: "d",
|
|
83
|
+
TEMPLATE: "DD",
|
|
84
|
+
}),
|
|
85
|
+
|
|
86
|
+
HOURS: Object.freeze({
|
|
87
|
+
HOURS: "hours",
|
|
88
|
+
HOUR: "hour",
|
|
89
|
+
H: "h",
|
|
90
|
+
TEMPLATE: "HH",
|
|
91
|
+
}),
|
|
92
|
+
|
|
93
|
+
WEEKS: Object.freeze({
|
|
94
|
+
WEEKS: "weeks",
|
|
95
|
+
WEEK: "week",
|
|
96
|
+
W: "w",
|
|
97
|
+
}),
|
|
98
|
+
|
|
99
|
+
QUARTERS: Object.freeze({
|
|
100
|
+
QUARTERS: "quarters",
|
|
101
|
+
QUARTER: "quarter",
|
|
102
|
+
Q: "Q",
|
|
103
|
+
}),
|
|
104
|
+
|
|
105
|
+
MINUTES: Object.freeze({
|
|
106
|
+
MINUTES: "minutes",
|
|
107
|
+
MINUTE: "minute",
|
|
108
|
+
MIN: "m",
|
|
109
|
+
}),
|
|
110
|
+
|
|
111
|
+
SECONDS: Object.freeze({
|
|
112
|
+
SECONDS: "seconds",
|
|
113
|
+
SECOND: "second",
|
|
114
|
+
S: "s",
|
|
115
|
+
}),
|
|
116
|
+
|
|
117
|
+
MILLISECONDS: Object.freeze({
|
|
118
|
+
MILLISECONDS: "milliseconds",
|
|
119
|
+
MILLISECOND: "millisecond",
|
|
120
|
+
MS: "ms",
|
|
121
|
+
}),
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Функция для парсинга и форматирования строки с датой в указанный формат.
|
|
126
|
+
*
|
|
127
|
+
* @param {string} value - Строка с датой, которую необходимо распарсить и отформатировать.
|
|
128
|
+
* @param {string} [outputFormat=DATETIME_FORMATS.INPUT_DATE_FORMAT] - Формат, в который будет преобразована дата.
|
|
129
|
+
* Если не указан, используется формат по умолчанию `MM.DD.YYYY`.
|
|
130
|
+
*
|
|
131
|
+
* @returns {string} - Отформатированная дата в строковом виде, или исходная строка, если дата не распознана.
|
|
132
|
+
*
|
|
133
|
+
* @throws {Error} - Если значение даты некорректно (не строка или пустое).
|
|
134
|
+
*/
|
|
135
|
+
export function parseAndFormatDate(
|
|
136
|
+
value,
|
|
137
|
+
outputFormat = DATETIME_FORMATS.INPUT_DATE_FORMAT,
|
|
138
|
+
) {
|
|
139
|
+
if (!value || typeof value !== "string") return value;
|
|
140
|
+
|
|
141
|
+
for (let format in formatMap) {
|
|
142
|
+
const parsedDate = moment(value, formatMap[format], true);
|
|
143
|
+
if (parsedDate.isValid()) {
|
|
144
|
+
return parsedDate.format(outputFormat);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return value;
|
|
149
|
+
}
|