@alfalab/core-components-time-input 3.0.0 → 3.1.0-snapshot-92b8690
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/dynamic-mixins/Component.d.ts +42 -0
- package/dynamic-mixins/Component.js +58 -0
- package/dynamic-mixins/Component.js.map +1 -0
- package/dynamic-mixins/index.d.ts +2 -0
- package/dynamic-mixins/index.js +12 -0
- package/dynamic-mixins/index.js.map +1 -0
- package/dynamic-mixins/utils/format.d.ts +5 -0
- package/dynamic-mixins/utils/format.js +36 -0
- package/dynamic-mixins/utils/format.js.map +1 -0
- package/dynamic-mixins/utils/index.d.ts +1 -0
- package/dynamic-mixins/utils/index.js +14 -0
- package/dynamic-mixins/utils/index.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React, { ChangeEvent } from 'react';
|
|
2
|
+
import { InputProps } from '@alfalab/core-components-input';
|
|
3
|
+
export declare type TimeInputProps = Omit<InputProps, 'onChange'> & {
|
|
4
|
+
/**
|
|
5
|
+
* Обработчик изменения значения
|
|
6
|
+
*/
|
|
7
|
+
onChange?: (event: ChangeEvent<HTMLInputElement>, payload: {
|
|
8
|
+
hours: number;
|
|
9
|
+
mins: number;
|
|
10
|
+
value: string;
|
|
11
|
+
}) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Обработчик окончания ввода
|
|
14
|
+
*/
|
|
15
|
+
onComplete?: (event: ChangeEvent<HTMLInputElement>, payload: {
|
|
16
|
+
hours: number;
|
|
17
|
+
mins: number;
|
|
18
|
+
value: string;
|
|
19
|
+
}) => void;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated
|
|
23
|
+
* use UniversalDateInput instead
|
|
24
|
+
*/
|
|
25
|
+
export declare const TimeInput: React.ForwardRefExoticComponent<Omit<InputProps, "onChange"> & {
|
|
26
|
+
/**
|
|
27
|
+
* Обработчик изменения значения
|
|
28
|
+
*/
|
|
29
|
+
onChange?: ((event: ChangeEvent<HTMLInputElement>, payload: {
|
|
30
|
+
hours: number;
|
|
31
|
+
mins: number;
|
|
32
|
+
value: string;
|
|
33
|
+
}) => void) | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Обработчик окончания ввода
|
|
36
|
+
*/
|
|
37
|
+
onComplete?: ((event: ChangeEvent<HTMLInputElement>, payload: {
|
|
38
|
+
hours: number;
|
|
39
|
+
mins: number;
|
|
40
|
+
value: string;
|
|
41
|
+
}) => void) | undefined;
|
|
42
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var dynamicMixins = require('@alfalab/core-components-input/dynamic-mixins');
|
|
8
|
+
var format = require('./utils/format.js');
|
|
9
|
+
|
|
10
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
11
|
+
|
|
12
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
13
|
+
|
|
14
|
+
/* eslint-disable no-useless-escape */
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated
|
|
17
|
+
* use UniversalDateInput instead
|
|
18
|
+
*/
|
|
19
|
+
var TimeInput = React__default.default.forwardRef(function (_a, ref) {
|
|
20
|
+
var _b = _a.defaultValue, defaultValue = _b === void 0 ? '' : _b, propValue = _a.value, onChange = _a.onChange, onComplete = _a.onComplete, className = _a.className, restProps = tslib.__rest(_a, ["defaultValue", "value", "onChange", "onComplete", "className"]);
|
|
21
|
+
var _c = React.useState(propValue || defaultValue), value = _c[0], setValue = _c[1];
|
|
22
|
+
var handleChange = function (event) {
|
|
23
|
+
var newValue = event.target.value;
|
|
24
|
+
if (newValue.length > 5)
|
|
25
|
+
return;
|
|
26
|
+
// Позволяем вводить только цифры и двоеточия
|
|
27
|
+
if (/[^\d:]/.test(newValue)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
var colon = newValue.match(/\:/g);
|
|
31
|
+
// Не даем вводить больше, чем одно двоеточие
|
|
32
|
+
if (colon && colon.length > 1) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
var formattedValue = format.format(newValue);
|
|
36
|
+
var formattedValueArr = formattedValue.split(':');
|
|
37
|
+
var hours = Number(formattedValueArr[0]);
|
|
38
|
+
var mins = Number(formattedValueArr[1]);
|
|
39
|
+
setValue(formattedValue);
|
|
40
|
+
if (onChange)
|
|
41
|
+
onChange(event, { hours: hours, mins: mins, value: formattedValue });
|
|
42
|
+
if (format.isCompleteTimeInput(formattedValue)) {
|
|
43
|
+
var valid = formattedValue.length > 0 && format.isValidInputValue(formattedValue);
|
|
44
|
+
if (!valid)
|
|
45
|
+
return;
|
|
46
|
+
if (onComplete) {
|
|
47
|
+
onComplete(event, { hours: hours, mins: mins, value: formattedValue });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var handleClearClick = function () {
|
|
52
|
+
setValue('');
|
|
53
|
+
};
|
|
54
|
+
return (React__default.default.createElement(dynamicMixins.Input, tslib.__assign({}, restProps, { ref: ref, value: value, className: className, onChange: handleChange, onClear: handleClearClick })));
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
exports.TimeInput = TimeInput;
|
|
58
|
+
//# sourceMappingURL=Component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["/* eslint-disable no-useless-escape */\n\nimport React, { ChangeEvent, useState } from 'react';\n\nimport { Input, InputProps } from '@alfalab/core-components-input';\n\nimport { format, isCompleteTimeInput, isValidInputValue } from './utils';\n\nexport type TimeInputProps = Omit<InputProps, 'onChange'> & {\n /**\n * Обработчик изменения значения\n */\n onChange?: (\n event: ChangeEvent<HTMLInputElement>,\n payload: { hours: number; mins: number; value: string },\n ) => void;\n\n /**\n * Обработчик окончания ввода\n */\n onComplete?: (\n event: ChangeEvent<HTMLInputElement>,\n payload: { hours: number; mins: number; value: string },\n ) => void;\n};\n\n/**\n * @deprecated\n * use UniversalDateInput instead\n */\nexport const TimeInput = React.forwardRef<HTMLInputElement, TimeInputProps>(\n (\n { defaultValue = '', value: propValue, onChange, onComplete, className, ...restProps },\n ref,\n ) => {\n const [value, setValue] = useState(propValue || defaultValue);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const { value: newValue } = event.target;\n\n if (newValue.length > 5) return;\n\n // Позволяем вводить только цифры и двоеточия\n if (/[^\\d:]/.test(newValue)) {\n return;\n }\n\n const colon = newValue.match(/\\:/g);\n\n // Не даем вводить больше, чем одно двоеточие\n if (colon && colon.length > 1) {\n return;\n }\n\n const formattedValue = format(newValue);\n\n const formattedValueArr = formattedValue.split(':');\n const hours = Number(formattedValueArr[0]);\n const mins = Number(formattedValueArr[1]);\n\n setValue(formattedValue);\n\n if (onChange) onChange(event, { hours, mins, value: formattedValue });\n\n if (isCompleteTimeInput(formattedValue)) {\n const valid = formattedValue.length > 0 && isValidInputValue(formattedValue);\n\n if (!valid) return;\n\n if (onComplete) {\n onComplete(event, { hours, mins, value: formattedValue });\n }\n }\n };\n\n const handleClearClick = () => {\n setValue('');\n };\n\n return (\n <Input\n {...restProps}\n ref={ref}\n value={value}\n className={className}\n onChange={handleChange}\n onClear={handleClearClick}\n />\n );\n },\n);\n"],"names":["React","__rest","useState","format","isCompleteTimeInput","isValidInputValue","Input","__assign"],"mappings":";;;;;;;;;;;;;AAAA;AA0BA;;;AAGG;AACU,IAAA,SAAS,GAAGA,sBAAK,CAAC,UAAU,CACrC,UACI,EAAsF,EACtF,GAAG,EAAA;IADD,IAAA,EAAA,GAAA,EAAA,CAAA,YAAiB,EAAjB,YAAY,GAAA,EAAA,KAAA,MAAA,GAAG,EAAE,GAAA,EAAA,EAAS,SAAS,GAAA,EAAA,CAAA,KAAA,EAAE,QAAQ,cAAA,EAAE,UAAU,gBAAA,EAAE,SAAS,eAAA,EAAK,SAAS,GAApFC,YAAA,CAAA,EAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,CAAsF,CAAF;AAG9E,IAAA,IAAA,EAAoB,GAAAC,cAAQ,CAAC,SAAS,IAAI,YAAY,CAAC,EAAtD,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,QAAuC;IAE7D,IAAM,YAAY,GAAG,UAAC,KAAoC,EAAA;AAC9C,QAAA,IAAO,QAAQ,GAAK,KAAK,CAAC,MAAM,MAAjB;AAEvB,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE;;AAGzB,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACzB;AACH;QAED,IAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;;AAGnC,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B;AACH;AAED,QAAA,IAAM,cAAc,GAAGC,aAAM,CAAC,QAAQ,CAAC;QAEvC,IAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;QACnD,IAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAEzC,QAAQ,CAAC,cAAc,CAAC;AAExB,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,IAAI,EAAA,IAAA,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;AAErE,QAAA,IAAIC,0BAAmB,CAAC,cAAc,CAAC,EAAE;AACrC,YAAA,IAAM,KAAK,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,IAAIC,wBAAiB,CAAC,cAAc,CAAC;AAE5E,YAAA,IAAI,CAAC,KAAK;gBAAE;AAEZ,YAAA,IAAI,UAAU,EAAE;AACZ,gBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,IAAI,EAAA,IAAA,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;AAC5D;AACJ;AACL,KAAC;AAED,IAAA,IAAM,gBAAgB,GAAG,YAAA;QACrB,QAAQ,CAAC,EAAE,CAAC;AAChB,KAAC;IAED,QACIL,sBAAC,CAAA,aAAA,CAAAM,mBAAK,EACEC,cAAA,CAAA,EAAA,EAAA,SAAS,EACb,EAAA,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,gBAAgB,EAC3B,CAAA,CAAA;AAEV,CAAC;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var Component = require('./Component.js');
|
|
6
|
+
var format = require('./utils/format.js');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.TimeInput = Component.TimeInput;
|
|
11
|
+
exports.isValidInputValue = format.isValidInputValue;
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const DATE_MASK: (string | RegExp)[];
|
|
2
|
+
export declare const isCompleteTimeInput: (input: string) => boolean;
|
|
3
|
+
export declare const isValidTimeFormat: (value: string) => boolean;
|
|
4
|
+
export declare const isValidInputValue: (inputValue?: string) => boolean;
|
|
5
|
+
export declare const format: (value: string) => string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
/* eslint-disable no-useless-escape */
|
|
6
|
+
var DATE_MASK = [/\d/, /\d/, ':', /\d/, /\d/];
|
|
7
|
+
var isCompleteTimeInput = function (input) { return input.length === DATE_MASK.length; };
|
|
8
|
+
var isValidTimeFormat = function (value) {
|
|
9
|
+
var timeArr = value.split(':');
|
|
10
|
+
var hours = timeArr[0];
|
|
11
|
+
var mins = timeArr[1];
|
|
12
|
+
if (hours.length !== 2 || Number(hours) > 23) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (mins.length !== 2 || Number(mins) > 59) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
};
|
|
20
|
+
var isValidInputValue = function (inputValue) {
|
|
21
|
+
return !inputValue || (isCompleteTimeInput(inputValue) && isValidTimeFormat(inputValue));
|
|
22
|
+
};
|
|
23
|
+
var format = function (value) {
|
|
24
|
+
return value
|
|
25
|
+
.replace(/^(\d\d)(\d)$/, '$1:$2') // 123 => 12:3
|
|
26
|
+
.replace(/^(\d\d)(\d\d)/, '$1:$2') // 12345 => 12:45 (если вместо двоеточия введена цифра, она обратно заменяется на двоеточие)
|
|
27
|
+
.replace(/^(\d):(\d\d)(\d)/, '$1:$2') // 1:234 => 1:23
|
|
28
|
+
.replace(/\:$/, '');
|
|
29
|
+
}; // 12: => 12 || : => void
|
|
30
|
+
|
|
31
|
+
exports.DATE_MASK = DATE_MASK;
|
|
32
|
+
exports.format = format;
|
|
33
|
+
exports.isCompleteTimeInput = isCompleteTimeInput;
|
|
34
|
+
exports.isValidInputValue = isValidInputValue;
|
|
35
|
+
exports.isValidTimeFormat = isValidTimeFormat;
|
|
36
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sources":["../../src/utils/format.ts"],"sourcesContent":["/* eslint-disable no-useless-escape */\n\nexport const DATE_MASK = [/\\d/, /\\d/, ':', /\\d/, /\\d/];\n\nexport const isCompleteTimeInput = (input: string) => input.length === DATE_MASK.length;\n\nexport const isValidTimeFormat = (value: string): boolean => {\n const timeArr = value.split(':');\n const hours = timeArr[0];\n const mins = timeArr[1];\n\n if (hours.length !== 2 || Number(hours) > 23) {\n return false;\n }\n\n if (mins.length !== 2 || Number(mins) > 59) {\n return false;\n }\n\n return true;\n};\n\nexport const isValidInputValue = (inputValue?: string) =>\n !inputValue || (isCompleteTimeInput(inputValue) && isValidTimeFormat(inputValue));\n\nexport const format = (value: string): string =>\n value\n .replace(/^(\\d\\d)(\\d)$/, '$1:$2') // 123 => 12:3\n .replace(/^(\\d\\d)(\\d\\d)/, '$1:$2') // 12345 => 12:45 (если вместо двоеточия введена цифра, она обратно заменяется на двоеточие)\n .replace(/^(\\d):(\\d\\d)(\\d)/, '$1:$2') // 1:234 => 1:23\n .replace(/\\:$/, ''); // 12: => 12 || : => void\n"],"names":[],"mappings":";;;;AAAA;AAEO,IAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;AAExC,IAAA,mBAAmB,GAAG,UAAC,KAAa,EAAK,EAAA,OAAA,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAA;AAEhF,IAAM,iBAAiB,GAAG,UAAC,KAAa,EAAA;IAC3C,IAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,IAAA,IAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;AACxB,IAAA,IAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;AAEvB,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE;AAC1C,QAAA,OAAO,KAAK;AACf;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE;AACxC,QAAA,OAAO,KAAK;AACf;AAED,IAAA,OAAO,IAAI;AACf;AAEO,IAAM,iBAAiB,GAAG,UAAC,UAAmB,EAAA;AACjD,IAAA,OAAA,CAAC,UAAU,KAAK,mBAAmB,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAAjF;AAEG,IAAM,MAAM,GAAG,UAAC,KAAa,EAAA;AAChC,IAAA,OAAA;AACK,SAAA,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC;AAChC,SAAA,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC;AACjC,SAAA,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC;AACpC,SAAA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAJvB,EAIwB;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './format';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var format = require('./format.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.DATE_MASK = format.DATE_MASK;
|
|
10
|
+
exports.format = format.format;
|
|
11
|
+
exports.isCompleteTimeInput = format.isCompleteTimeInput;
|
|
12
|
+
exports.isValidInputValue = format.isValidInputValue;
|
|
13
|
+
exports.isValidTimeFormat = format.isValidTimeFormat;
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alfalab/core-components-time-input",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0-snapshot-92b8690",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "MIT",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"main": "index.js",
|
|
11
11
|
"module": "./esm/index.js",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@alfalab/core-components-input": "
|
|
13
|
+
"@alfalab/core-components-input": "16.1.0-snapshot-92b8690",
|
|
14
14
|
"tslib": "^2.4.0"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
@@ -21,6 +21,6 @@
|
|
|
21
21
|
"access": "public",
|
|
22
22
|
"directory": "dist"
|
|
23
23
|
},
|
|
24
|
-
"themesVersion": "14.
|
|
25
|
-
"varsVersion": "10.
|
|
24
|
+
"themesVersion": "14.1.0-snapshot-92b8690",
|
|
25
|
+
"varsVersion": "10.1.0-snapshot-92b8690"
|
|
26
26
|
}
|