@skbkontur/react-ui 5.3.1 → 5.3.2
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/CHANGELOG.md +8 -0
- package/package.json +1 -6
- package/cjs/components/Autocomplete/Autocomplete.md +0 -113
- package/cjs/components/Button/Button.md +0 -261
- package/cjs/components/Calendar/Calendar.md +0 -276
- package/cjs/components/Calendar/CalendarDay.md +0 -70
- package/cjs/components/Center/Center.md +0 -26
- package/cjs/components/Checkbox/Checkbox.md +0 -171
- package/cjs/components/ComboBox/ComboBox.md +0 -574
- package/cjs/components/CurrencyInput/CurrencyInput.md +0 -39
- package/cjs/components/CurrencyLabel/CurrencyLabel.md +0 -29
- package/cjs/components/DateInput/DateInput.md +0 -111
- package/cjs/components/DatePicker/DatePicker.md +0 -368
- package/cjs/components/Dropdown/Dropdown.md +0 -45
- package/cjs/components/DropdownMenu/DropdownMenu.md +0 -290
- package/cjs/components/FileUploader/FileUploader.md +0 -131
- package/cjs/components/FxInput/FxInput.md +0 -31
- package/cjs/components/Gapped/Gapped.md +0 -44
- package/cjs/components/GlobalLoader/GlobalLoader.md +0 -97
- package/cjs/components/Group/Group.md +0 -19
- package/cjs/components/Hint/Hint.md +0 -86
- package/cjs/components/Input/Input.md +0 -86
- package/cjs/components/Kebab/Kebab.md +0 -306
- package/cjs/components/Link/Link.md +0 -182
- package/cjs/components/Loader/Loader.md +0 -33
- package/cjs/components/MaskedInput/MaskedInput.md +0 -114
- package/cjs/components/MenuFooter/MenuFooter.md +0 -27
- package/cjs/components/MenuHeader/MenuHeader.md +0 -35
- package/cjs/components/MenuItem/MenuItem.md +0 -139
- package/cjs/components/MenuSeparator/MenuSeparator.md +0 -14
- package/cjs/components/MiniModal/MiniModal.md +0 -231
- package/cjs/components/Modal/Modal.md +0 -56
- package/cjs/components/Paging/Paging.md +0 -57
- package/cjs/components/PasswordInput/PasswordInput.md +0 -29
- package/cjs/components/Radio/Radio.md +0 -57
- package/cjs/components/RadioGroup/RadioGroup.md +0 -44
- package/cjs/components/ResponsiveLayout/ResponsiveLayout.md +0 -75
- package/cjs/components/ScrollContainer/ScrollContainer.md +0 -224
- package/cjs/components/Select/Select.md +0 -113
- package/cjs/components/SidePage/SidePage.md +0 -65
- package/cjs/components/SingleToast/SingleToast.md +0 -36
- package/cjs/components/Spinner/Spinner.md +0 -36
- package/cjs/components/Sticky/Sticky.md +0 -28
- package/cjs/components/Switcher/Switcher.md +0 -111
- package/cjs/components/Tabs/Tab.md +0 -73
- package/cjs/components/Tabs/Tabs.md +0 -54
- package/cjs/components/Textarea/Textarea.md +0 -58
- package/cjs/components/Toast/Toast.md +0 -69
- package/cjs/components/Toggle/Toggle.md +0 -110
- package/cjs/components/Token/Token.md +0 -48
- package/cjs/components/TokenInput/TokenInput.md +0 -277
- package/cjs/components/Tooltip/Tooltip.md +0 -322
- package/cjs/components/TooltipMenu/TooltipMenu.md +0 -241
- package/cjs/internal/DataTids/DATATIDS.md +0 -12
- package/cjs/internal/DataTids/DataTids.d.ts +0 -12
- package/cjs/internal/DataTids/DataTids.js +0 -50
- package/cjs/internal/DataTids/DataTids.js.map +0 -1
- package/cjs/internal/DataTids/DataTids.styles.d.ts +0 -7
- package/cjs/internal/DataTids/DataTids.styles.js +0 -42
- package/cjs/internal/DataTids/DataTids.styles.js.map +0 -1
- package/cjs/internal/DataTids/componentsDataTids.d.ts +0 -5
- package/cjs/internal/DataTids/componentsDataTids.js +0 -15
- package/cjs/internal/DataTids/componentsDataTids.js.map +0 -1
- package/cjs/internal/ThemePlayground/Playground.md +0 -7
- package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -64
- package/cjs/lib/locale/LOCALECONTEXT.md +0 -222
- package/cjs/lib/theming/ThemeContext.md +0 -265
- package/components/Autocomplete/Autocomplete.md +0 -113
- package/components/Button/Button.md +0 -261
- package/components/Calendar/Calendar.md +0 -276
- package/components/Calendar/CalendarDay.md +0 -70
- package/components/Center/Center.md +0 -26
- package/components/Checkbox/Checkbox.md +0 -171
- package/components/ComboBox/ComboBox.md +0 -574
- package/components/CurrencyInput/CurrencyInput.md +0 -39
- package/components/CurrencyLabel/CurrencyLabel.md +0 -29
- package/components/DateInput/DateInput.md +0 -111
- package/components/DatePicker/DatePicker.md +0 -368
- package/components/Dropdown/Dropdown.md +0 -45
- package/components/DropdownMenu/DropdownMenu.md +0 -290
- package/components/FileUploader/FileUploader.md +0 -131
- package/components/FxInput/FxInput.md +0 -31
- package/components/Gapped/Gapped.md +0 -44
- package/components/GlobalLoader/GlobalLoader.md +0 -97
- package/components/Group/Group.md +0 -19
- package/components/Hint/Hint.md +0 -86
- package/components/Input/Input.md +0 -86
- package/components/Kebab/Kebab.md +0 -306
- package/components/Link/Link.md +0 -182
- package/components/Loader/Loader.md +0 -33
- package/components/MaskedInput/MaskedInput.md +0 -114
- package/components/MenuFooter/MenuFooter.md +0 -27
- package/components/MenuHeader/MenuHeader.md +0 -35
- package/components/MenuItem/MenuItem.md +0 -139
- package/components/MenuSeparator/MenuSeparator.md +0 -14
- package/components/MiniModal/MiniModal.md +0 -231
- package/components/Modal/Modal.md +0 -56
- package/components/Paging/Paging.md +0 -57
- package/components/PasswordInput/PasswordInput.md +0 -29
- package/components/Radio/Radio.md +0 -57
- package/components/RadioGroup/RadioGroup.md +0 -44
- package/components/ResponsiveLayout/ResponsiveLayout.md +0 -75
- package/components/ScrollContainer/ScrollContainer.md +0 -224
- package/components/Select/Select.md +0 -113
- package/components/SidePage/SidePage.md +0 -65
- package/components/SingleToast/SingleToast.md +0 -36
- package/components/Spinner/Spinner.md +0 -36
- package/components/Sticky/Sticky.md +0 -28
- package/components/Switcher/Switcher.md +0 -111
- package/components/Tabs/Tab.md +0 -73
- package/components/Tabs/Tabs.md +0 -54
- package/components/Textarea/Textarea.md +0 -58
- package/components/Toast/Toast.md +0 -69
- package/components/Toggle/Toggle.md +0 -110
- package/components/Token/Token.md +0 -48
- package/components/TokenInput/TokenInput.md +0 -277
- package/components/Tooltip/Tooltip.md +0 -322
- package/components/TooltipMenu/TooltipMenu.md +0 -241
- package/internal/DataTids/DATATIDS.md +0 -12
- package/internal/DataTids/DataTids/DataTids.js +0 -69
- package/internal/DataTids/DataTids/DataTids.js.map +0 -1
- package/internal/DataTids/DataTids/package.json +0 -6
- package/internal/DataTids/DataTids.d.ts +0 -12
- package/internal/DataTids/DataTids.styles/DataTids.styles.js +0 -20
- package/internal/DataTids/DataTids.styles/DataTids.styles.js.map +0 -1
- package/internal/DataTids/DataTids.styles/package.json +0 -6
- package/internal/DataTids/DataTids.styles.d.ts +0 -7
- package/internal/DataTids/componentsDataTids/componentsDataTids.js +0 -12
- package/internal/DataTids/componentsDataTids/componentsDataTids.js.map +0 -1
- package/internal/DataTids/componentsDataTids/package.json +0 -6
- package/internal/DataTids/componentsDataTids.d.ts +0 -5
- package/internal/ThemePlayground/Playground.md +0 -7
- package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -64
- package/lib/locale/LOCALECONTEXT.md +0 -222
- package/lib/theming/ThemeContext.md +0 -265
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
### Пример с введенной датой
|
|
2
|
-
```jsx harmony
|
|
3
|
-
<DateInput value="27.04.1992" />
|
|
4
|
-
```
|
|
5
|
-
|
|
6
|
-
### Пример с изменяющимся значением
|
|
7
|
-
```jsx harmony
|
|
8
|
-
const [value, setValue] = React.useState();
|
|
9
|
-
|
|
10
|
-
<DateInput value={value} onValueChange={setValue} />
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
### Disabled
|
|
14
|
-
```jsx harmony
|
|
15
|
-
<DateInput disabled value="27.04.1992" />
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
### Форматирование даты при смене локали
|
|
19
|
-
|
|
20
|
-
```jsx harmony
|
|
21
|
-
import { Gapped, LangCodes, LocaleContext, Select } from '@skbkontur/react-ui';
|
|
22
|
-
|
|
23
|
-
class DateInputFormatting2 extends React.Component {
|
|
24
|
-
constructor(props) {
|
|
25
|
-
super(props);
|
|
26
|
-
this.state = {
|
|
27
|
-
langCode: LangCodes.ru_RU,
|
|
28
|
-
value: '21.12.2012',
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
render() {
|
|
33
|
-
return (
|
|
34
|
-
<Gapped vertical gap={10}>
|
|
35
|
-
<div>
|
|
36
|
-
<span style={{ width: '300px', display: 'inline-block' }}>
|
|
37
|
-
Локаль (<tt>LangCodes</tt>)
|
|
38
|
-
</span>
|
|
39
|
-
<Select
|
|
40
|
-
value={this.state.langCode}
|
|
41
|
-
placeholder="Выбрать язык"
|
|
42
|
-
items={Object.values(LangCodes)}
|
|
43
|
-
onValueChange={langCode => this.setState({ langCode })}
|
|
44
|
-
/>
|
|
45
|
-
</div>
|
|
46
|
-
<LocaleContext.Provider value={{ langCode: this.state.langCode }}>
|
|
47
|
-
<DateInput onValueChange={value => this.setState({ value })} value={this.state.value} />
|
|
48
|
-
</LocaleContext.Provider>
|
|
49
|
-
</Gapped>
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
<DateInputFormatting2 />;
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Ручное форматирование даты
|
|
58
|
-
|
|
59
|
-
```jsx harmony
|
|
60
|
-
import { DateOrder, DateSeparator, Gapped, LocaleContext, Select } from '@skbkontur/react-ui';
|
|
61
|
-
|
|
62
|
-
class DateInputFormatting extends React.Component {
|
|
63
|
-
constructor(props) {
|
|
64
|
-
super(props);
|
|
65
|
-
this.state = {
|
|
66
|
-
order: DateOrder.YMD,
|
|
67
|
-
separator: 'Dot',
|
|
68
|
-
value: '21.12.2012',
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
render() {
|
|
73
|
-
return (
|
|
74
|
-
<Gapped vertical gap={10}>
|
|
75
|
-
<div>
|
|
76
|
-
<span style={{ width: '300px', display: 'inline-block' }}>
|
|
77
|
-
Порядок компонентов (<tt>DateOrder</tt>)
|
|
78
|
-
</span>
|
|
79
|
-
<Select
|
|
80
|
-
value={this.state.order}
|
|
81
|
-
items={Object.keys(DateOrder)}
|
|
82
|
-
onValueChange={order => this.setState({ order })}
|
|
83
|
-
/>
|
|
84
|
-
</div>
|
|
85
|
-
<div>
|
|
86
|
-
<span style={{ width: '300px', display: 'inline-block' }}>
|
|
87
|
-
Разделитель (<tt>DateSeparator</tt>)
|
|
88
|
-
</span>
|
|
89
|
-
<Select
|
|
90
|
-
value={this.state.separator}
|
|
91
|
-
items={Object.keys(DateSeparator)}
|
|
92
|
-
onValueChange={separator => this.setState({ separator })}
|
|
93
|
-
/>
|
|
94
|
-
</div>
|
|
95
|
-
<LocaleContext.Provider value={{
|
|
96
|
-
locale:{
|
|
97
|
-
DatePicker: {
|
|
98
|
-
separator: DateSeparator[this.state.separator],
|
|
99
|
-
order: this.state.order,
|
|
100
|
-
},
|
|
101
|
-
}}}
|
|
102
|
-
>
|
|
103
|
-
<DateInput onValueChange={value => this.setState({ value })} value={this.state.value} />
|
|
104
|
-
</LocaleContext.Provider>
|
|
105
|
-
</Gapped>
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
<DateInputFormatting />;
|
|
111
|
-
```
|
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
Компонент `DatePicker` принимает в `value` строку формата `dd.mm.yyyy`.
|
|
2
|
-
При вводе строки в поле ввода, возвращает строку без маски.
|
|
3
|
-
|
|
4
|
-
Имеется статический метод `DatePicker.validate`, который проверяет,
|
|
5
|
-
что введенная дата корректна
|
|
6
|
-
|
|
7
|
-
```ts static
|
|
8
|
-
DatePicker.validate: (value: string, range?: { minDate?: string; maxDate?: string }) => boolean
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
### Валидация
|
|
12
|
-
|
|
13
|
-
Пример с обработкой ошибок, когда пользователь ввел невалидную дату.
|
|
14
|
-
|
|
15
|
-
```jsx harmony
|
|
16
|
-
import { Gapped, Tooltip } from '@skbkontur/react-ui';
|
|
17
|
-
import { ViewDateInputValidateChecks } from '@skbkontur/react-ui/components/DateInput/ViewDateInputValidateChecks';
|
|
18
|
-
|
|
19
|
-
const [value, setValue] = React.useState();
|
|
20
|
-
const [error, setError] = React.useState(false);
|
|
21
|
-
const [tooltip, setTooltip] = React.useState(false);
|
|
22
|
-
|
|
23
|
-
const minDate = '22.12.2012';
|
|
24
|
-
const maxDate = '02.05.2018';
|
|
25
|
-
|
|
26
|
-
const unvalidate = () => {
|
|
27
|
-
setError(false);
|
|
28
|
-
setTooltip(false);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const validate = () => {
|
|
32
|
-
const errorNew = !!value && !DatePicker.validate(value, { minDate: minDate, maxDate: maxDate });
|
|
33
|
-
setError(errorNew);
|
|
34
|
-
setTooltip(errorNew);
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
let removeTooltip = () => setTooltip(false);
|
|
38
|
-
|
|
39
|
-
<Gapped gap={10} vertical>
|
|
40
|
-
<ViewDateInputValidateChecks value={value} minDate={minDate} maxDate={maxDate} />
|
|
41
|
-
<pre>
|
|
42
|
-
minDate = {minDate}
|
|
43
|
-
<br />
|
|
44
|
-
maxDate = {maxDate}
|
|
45
|
-
</pre>
|
|
46
|
-
|
|
47
|
-
<Tooltip trigger={tooltip ? 'opened' : 'closed'} render={() => 'Невалидная дата'} onCloseClick={removeTooltip}>
|
|
48
|
-
<DatePicker
|
|
49
|
-
error={error}
|
|
50
|
-
value={value}
|
|
51
|
-
onValueChange={setValue}
|
|
52
|
-
onFocus={unvalidate}
|
|
53
|
-
onBlur={validate}
|
|
54
|
-
minDate={minDate}
|
|
55
|
-
maxDate={maxDate}
|
|
56
|
-
enableTodayLink
|
|
57
|
-
/>
|
|
58
|
-
</Tooltip>
|
|
59
|
-
</Gapped>;
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Очистить значение в `DatePicker`'е можно с помощью пустой строки, `null` или `undefined`
|
|
63
|
-
|
|
64
|
-
```jsx harmony
|
|
65
|
-
import { Button, Group } from '@skbkontur/react-ui';
|
|
66
|
-
|
|
67
|
-
const [value, setValue] = React.useState('24.08.2022');
|
|
68
|
-
|
|
69
|
-
<Group>
|
|
70
|
-
<DatePicker
|
|
71
|
-
value={value}
|
|
72
|
-
onValueChange={setValue}
|
|
73
|
-
enableTodayLink
|
|
74
|
-
/>
|
|
75
|
-
<Button onClick={() => setValue(null)}>Null</Button>
|
|
76
|
-
<Button onClick={() => setValue(undefined)}>Undefined</Button>
|
|
77
|
-
<Button onClick={() => setValue('')}>Пустая строка</Button>
|
|
78
|
-
</Group>;
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### `isHoliday`
|
|
82
|
-
|
|
83
|
-
В компонент можно передать функцию `isHoliday`, которая будет получать день строкой формата `dd.mm.yyyy` и флаг `isWeekend`, и должна вернуть `true` для выходного и `false` для рабочего дня.
|
|
84
|
-
|
|
85
|
-
```jsx harmony
|
|
86
|
-
import * as DatePickerHelpers from './DatePickerHelpers';
|
|
87
|
-
|
|
88
|
-
const [value, setValue] = React.useState();
|
|
89
|
-
|
|
90
|
-
const createRandomHolidays = () => {
|
|
91
|
-
const holidays = new Array(10);
|
|
92
|
-
const today = new Date();
|
|
93
|
-
|
|
94
|
-
for (let index = 0; index < holidays.length; index++) {
|
|
95
|
-
const day = new Date(today.setDate(today.getDate() + 1 + index).valueOf());
|
|
96
|
-
|
|
97
|
-
const holiday = {
|
|
98
|
-
date: day.getDate(),
|
|
99
|
-
month: day.getMonth(),
|
|
100
|
-
year: day.getFullYear(),
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
holidays[index] = DatePickerHelpers.formatDate(holiday);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return holidays;
|
|
107
|
-
};
|
|
108
|
-
const holidays = createRandomHolidays();
|
|
109
|
-
|
|
110
|
-
const isHoliday = (day, isWeekend) => {
|
|
111
|
-
const today = new Date();
|
|
112
|
-
const holiday = {
|
|
113
|
-
date: today.getDate(),
|
|
114
|
-
month: today.getMonth(),
|
|
115
|
-
year: today.getFullYear(),
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
if (holidays.includes(day)) {
|
|
119
|
-
return !isWeekend;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return isWeekend;
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
<DatePicker isHoliday={isHoliday} value={value} onValueChange={setValue} enableTodayLink />;
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Производственный календарь
|
|
129
|
-
|
|
130
|
-
Пример обработки производственного календаря от `data.gov.ru`
|
|
131
|
-
|
|
132
|
-
<details><summary>`data.gov.ru`</summary>
|
|
133
|
-
|
|
134
|
-
Docs:
|
|
135
|
-
<https://data.gov.ru/api-portala-otkrytyh-dannyh-rf-polnoe-rukovodstvo>
|
|
136
|
-
|
|
137
|
-
Request:
|
|
138
|
-
|
|
139
|
-
```md
|
|
140
|
-
https://data.gov.ru/api/json/dataset/7708660670-proizvcalendar/version/20151123T183036/content?search=2021&access_token=31de6d0b90f51a7aa3ee2d518d50f4e9
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
Response:
|
|
144
|
-
|
|
145
|
-
```json
|
|
146
|
-
[
|
|
147
|
-
{
|
|
148
|
-
"Год/Месяц": "2021",
|
|
149
|
-
"Январь": "1,2,3,4,5,6,7,8,9,10,16,17,23,24,30,31",
|
|
150
|
-
"Февраль": "6,7,13,14,20,21,22*,23,27,28",
|
|
151
|
-
"Март": "6,7,8*,13,14,20,21,27,28",
|
|
152
|
-
"Апрель": "3,4,10,11,17,18,24,25,30*",
|
|
153
|
-
"Май": "1,2,3+,8,9,10+,15,16,22,23,29,30",
|
|
154
|
-
"Июнь": "5,6,11*,12,13,14+,19,20,26,27",
|
|
155
|
-
"Июль": "3,4,10,11,17,18,24,25,31",
|
|
156
|
-
"Август": "1,7,8,14,15,21,22,28,29",
|
|
157
|
-
"Сентябрь": "4,5,11,12,18,19,25,26",
|
|
158
|
-
"Октябрь": "2,3,9,10,16,17,23,24,30,31",
|
|
159
|
-
"Ноябрь": "3*,4,6,7,13,14,20,21,27,28",
|
|
160
|
-
"Декабрь": "4,5,11,12,18,19,25,26,31*",
|
|
161
|
-
"Всего рабочих дней": "249",
|
|
162
|
-
"Всего праздничных и выходных дней": "116",
|
|
163
|
-
"Количество рабочих часов при 40-часовой рабочей неделе": "1987",
|
|
164
|
-
"Количество рабочих часов при 36-часовой рабочей неделе": "1787.8",
|
|
165
|
-
"Количество рабочих часов при 24-часовой рабочей неделе": "1190.2"
|
|
166
|
-
}
|
|
167
|
-
]
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
</details>
|
|
171
|
-
|
|
172
|
-
```jsx harmony
|
|
173
|
-
const today = new Date();
|
|
174
|
-
const year = today.getFullYear();
|
|
175
|
-
const response = [
|
|
176
|
-
{
|
|
177
|
-
'Год/Месяц': '2021',
|
|
178
|
-
Январь: '1,2,3,4,5,6,7,8,9,10,16,17,23,24,30,31',
|
|
179
|
-
Февраль: '6,7,13,14,20,21,22*,23,27,28',
|
|
180
|
-
Март: '6,7,8*,13,14,20,21,27,28',
|
|
181
|
-
Апрель: '3,4,10,11,17,18,24,25,30*',
|
|
182
|
-
Май: '1,2,3+,8,9,10+,15,16,22,23,29,30',
|
|
183
|
-
Июнь: '5,6,11*,12,13,14+,19,20,26,27',
|
|
184
|
-
Июль: '3,4,10,11,17,18,24,25,31',
|
|
185
|
-
Август: '1,7,8,14,15,21,22,28,29',
|
|
186
|
-
Сентябрь: '4,5,11,12,18,19,25,26',
|
|
187
|
-
Октябрь: '2,3,9,10,16,17,23,24,30,31',
|
|
188
|
-
Ноябрь: '3*,4,6,7,13,14,20,21,27,28',
|
|
189
|
-
Декабрь: '4,5,11,12,18,19,25,26,31*',
|
|
190
|
-
'Всего рабочих дней': '249',
|
|
191
|
-
'Всего праздничных и выходных дней': '116',
|
|
192
|
-
'Количество рабочих часов при 40-часовой рабочей неделе': '1987',
|
|
193
|
-
'Количество рабочих часов при 36-часовой рабочей неделе': '1787.8',
|
|
194
|
-
'Количество рабочих часов при 24-часовой рабочей неделе': '1190.2',
|
|
195
|
-
},
|
|
196
|
-
];
|
|
197
|
-
let result = [];
|
|
198
|
-
let holidays = [];
|
|
199
|
-
|
|
200
|
-
if (response.length !== 0) {
|
|
201
|
-
result = Object.values(
|
|
202
|
-
response.length > 1 ? response.find(data => data['Год/Месяц'] === year.toString()) || response[0] : response[0],
|
|
203
|
-
).slice(1, 13);
|
|
204
|
-
}
|
|
205
|
-
result.forEach((month, index) => {
|
|
206
|
-
month
|
|
207
|
-
.split(',')
|
|
208
|
-
.filter(item => /^\d*$/.test(item))
|
|
209
|
-
.forEach(day => {
|
|
210
|
-
holidays.push(`${day.padStart(2, 0)}.${(index + 1).toString().padStart(2, 0)}.${year}`);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
const isHoliday = (date, isWeekend) => holidays.includes(date) || isWeekend;
|
|
215
|
-
|
|
216
|
-
<DatePicker isHoliday={isHoliday} onValueChange={() => void 0} enableTodayLink />;
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
### Ручное форматирование даты
|
|
220
|
-
|
|
221
|
-
```jsx harmony
|
|
222
|
-
import { DateOrder, DateSeparator, Gapped, LocaleContext, Select, LangCodes } from '@skbkontur/react-ui';
|
|
223
|
-
|
|
224
|
-
class DatePickerFormatting extends React.Component {
|
|
225
|
-
constructor() {
|
|
226
|
-
super();
|
|
227
|
-
this.state = {
|
|
228
|
-
order: DateOrder.YMD,
|
|
229
|
-
separator: 'Dot',
|
|
230
|
-
value: '21.12.2012',
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
render() {
|
|
235
|
-
return (
|
|
236
|
-
<Gapped vertical gap={10}>
|
|
237
|
-
<div>
|
|
238
|
-
<span style={{ width: '300px', display: 'inline-block' }}>
|
|
239
|
-
Порядок компонентов (<tt>DateOrder</tt>)
|
|
240
|
-
</span>
|
|
241
|
-
<Select
|
|
242
|
-
value={this.state.order}
|
|
243
|
-
items={Object.keys(DateOrder)}
|
|
244
|
-
onValueChange={order => this.setState({ order })}
|
|
245
|
-
/>
|
|
246
|
-
</div>
|
|
247
|
-
<div>
|
|
248
|
-
<span style={{ width: '300px', display: 'inline-block' }}>
|
|
249
|
-
Разделитель (<tt>DateSeparator</tt>)
|
|
250
|
-
</span>
|
|
251
|
-
<Select
|
|
252
|
-
value={this.state.separator}
|
|
253
|
-
items={Object.keys(DateSeparator)}
|
|
254
|
-
onValueChange={separator => this.setState({ separator })}
|
|
255
|
-
/>
|
|
256
|
-
</div>
|
|
257
|
-
<LocaleContext.Provider
|
|
258
|
-
value={{
|
|
259
|
-
langCode: LangCodes.ru_RU,
|
|
260
|
-
locale: {
|
|
261
|
-
DatePicker: {
|
|
262
|
-
separator: DateSeparator[this.state.separator],
|
|
263
|
-
order: this.state.order,
|
|
264
|
-
},
|
|
265
|
-
},
|
|
266
|
-
}}
|
|
267
|
-
>
|
|
268
|
-
<DatePicker onValueChange={value => this.setState({ value })} value={this.state.value} />
|
|
269
|
-
</LocaleContext.Provider>
|
|
270
|
-
</Gapped>
|
|
271
|
-
);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
<DatePickerFormatting />;
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### Кастомный рендер дня
|
|
279
|
-
Подбробный пример в [Calendar](#/Components/Calendar)
|
|
280
|
-
|
|
281
|
-
```jsx harmony
|
|
282
|
-
import { CalendarDay } from "@skbkontur/react-ui";
|
|
283
|
-
|
|
284
|
-
const [value, setValue] = React.useState('12.05.2022');
|
|
285
|
-
|
|
286
|
-
const renderDay = (props) => {
|
|
287
|
-
const [date] = props.date.split('.').map(Number);
|
|
288
|
-
const isEven = date % 2 === 0;
|
|
289
|
-
|
|
290
|
-
if (isEven) {
|
|
291
|
-
return <CalendarDay {...props} style={{ background: '#e9f8e3' }} />
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
return <CalendarDay {...props} />
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
<DatePicker value={value} onValueChange={setValue} renderDay={renderDay} />;
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
#### Локали по умолчанию
|
|
301
|
-
|
|
302
|
-
```typescript static
|
|
303
|
-
interface DatePickerLocale {
|
|
304
|
-
today?: string;
|
|
305
|
-
months?: string[];
|
|
306
|
-
order?: DateOrder;
|
|
307
|
-
separator?: DateSeparator;
|
|
308
|
-
todayAriaLabel?: string
|
|
309
|
-
selectMonthAriaLabel?: string;
|
|
310
|
-
selectYearAriaLabel?: string;
|
|
311
|
-
selectChosenAriaLabel?: string;
|
|
312
|
-
dayCellChooseDateAriaLabel?: string;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
const ru_RU = {
|
|
316
|
-
today: 'Сегодня',
|
|
317
|
-
months: [
|
|
318
|
-
'Январь',
|
|
319
|
-
'Февраль',
|
|
320
|
-
'Март',
|
|
321
|
-
'Апрель',
|
|
322
|
-
'Май',
|
|
323
|
-
'Июнь',
|
|
324
|
-
'Июль',
|
|
325
|
-
'Август',
|
|
326
|
-
'Сентябрь',
|
|
327
|
-
'Октябрь',
|
|
328
|
-
'Ноябрь',
|
|
329
|
-
'Декабрь',
|
|
330
|
-
],
|
|
331
|
-
order: DateOrder.DMY,
|
|
332
|
-
separator: DateSeparator.Dot,
|
|
333
|
-
todayAriaLabel: 'Перейти к сегодняшней дате',
|
|
334
|
-
selectMonthAriaLabel: 'месяц',
|
|
335
|
-
selectYearAriaLabel: 'год',
|
|
336
|
-
selectChosenAriaLabel: 'Выбранный',
|
|
337
|
-
dayCellChooseDateAriaLabel: 'Выбрать дату',
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
const en_GB = {
|
|
341
|
-
today: 'Today',
|
|
342
|
-
months: [
|
|
343
|
-
'January',
|
|
344
|
-
'February',
|
|
345
|
-
'March',
|
|
346
|
-
'April',
|
|
347
|
-
'May',
|
|
348
|
-
'June',
|
|
349
|
-
'July',
|
|
350
|
-
'August',
|
|
351
|
-
'September',
|
|
352
|
-
'October',
|
|
353
|
-
'November',
|
|
354
|
-
'December',
|
|
355
|
-
],
|
|
356
|
-
order: DateOrder.MDY,
|
|
357
|
-
separator: DateSeparator.Slash,
|
|
358
|
-
todayAriaLabel: "Go to today's date",
|
|
359
|
-
selectMonthAriaLabel: 'month',
|
|
360
|
-
selectYearAriaLabel: 'year',
|
|
361
|
-
selectChosenAriaLabel: 'Chosen',
|
|
362
|
-
dayCellChooseDateAriaLabel: 'Choose date',
|
|
363
|
-
};
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
### Адаптивность
|
|
367
|
-
|
|
368
|
-
На мобильных устройствах есть несколько вариантов. По умолчанию откроется адаптивная версия в попапе. Но можно открывать нативный календарь, если передать проп `useMobileNativeDatePicker`.
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
### Базовый пример
|
|
2
|
-
```jsx harmony
|
|
3
|
-
import { Dropdown, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui';
|
|
4
|
-
<Dropdown caption="Click">
|
|
5
|
-
<MenuItem onClick={() => alert('Clack')}>Clack</MenuItem>
|
|
6
|
-
<MenuSeparator />
|
|
7
|
-
<MenuHeader>Here goes the header</MenuHeader>
|
|
8
|
-
<MenuItem onClick={() => alert('Pow')} comment="With comment.">
|
|
9
|
-
Pow
|
|
10
|
-
</MenuItem>
|
|
11
|
-
</Dropdown>;
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
### Размер
|
|
15
|
-
|
|
16
|
-
```jsx harmony
|
|
17
|
-
import { Gapped, MenuItem, MenuSeparator, MenuHeader } from '@skbkontur/react-ui';
|
|
18
|
-
|
|
19
|
-
<Gapped vertical>
|
|
20
|
-
<Dropdown caption="Маленький" size={'small'}>
|
|
21
|
-
<MenuItem onClick={() => alert('Clack')}>Clack</MenuItem>
|
|
22
|
-
<MenuSeparator />
|
|
23
|
-
<MenuHeader>Here goes the header</MenuHeader>
|
|
24
|
-
<MenuItem onClick={() => alert('Pow')} comment="With comment.">
|
|
25
|
-
Pow
|
|
26
|
-
</MenuItem>
|
|
27
|
-
</Dropdown>
|
|
28
|
-
<Dropdown caption="Средний" size={'medium'}>
|
|
29
|
-
<MenuItem onClick={() => alert('Clack')}>Clack</MenuItem>
|
|
30
|
-
<MenuSeparator />
|
|
31
|
-
<MenuHeader>Here goes the header</MenuHeader>
|
|
32
|
-
<MenuItem onClick={() => alert('Pow')} comment="With comment.">
|
|
33
|
-
Pow
|
|
34
|
-
</MenuItem>
|
|
35
|
-
</Dropdown>
|
|
36
|
-
<Dropdown caption="Большой" size={'large'}>
|
|
37
|
-
<MenuItem onClick={() => alert('Clack')}>Clack</MenuItem>
|
|
38
|
-
<MenuSeparator />
|
|
39
|
-
<MenuHeader>Here goes the header</MenuHeader>
|
|
40
|
-
<MenuItem onClick={() => alert('Pow')} comment="With comment.">
|
|
41
|
-
Pow
|
|
42
|
-
</MenuItem>
|
|
43
|
-
</Dropdown>
|
|
44
|
-
</Gapped>
|
|
45
|
-
```
|