@steroidsjs/bootstrap 3.0.0-beta.109 → 3.0.0-beta.110

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.
@@ -14,7 +14,7 @@
14
14
  }
15
15
 
16
16
  .ButtonView {
17
- width: 94px;
17
+ width: auto;
18
18
  height: 34px;
19
19
  border: none;
20
20
  padding: 5px 12px;
@@ -1,3 +1,2 @@
1
- import './CalendarSystemModalView.scss';
2
1
  import { ICalendarSystemModalViewProps } from '@steroidsjs/core/ui/content/CalendarSystem/CalendarSystem';
3
2
  export default function CalendarSystemModalView(props: ICalendarSystemModalViewProps): JSX.Element;
@@ -3,12 +3,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  exports.__esModule = true;
6
+ /* eslint-disable @typescript-eslint/no-shadow */
7
+ /* eslint-disable implicit-arrow-linebreak */
8
+ /* eslint-disable no-undef */
9
+ var Modal_1 = __importDefault(require("@steroidsjs/core/ui/modal/Modal"));
10
+ var form_1 = require("@steroidsjs/core/ui/form");
11
+ var Text_1 = __importDefault(require("@steroidsjs/core/ui/typography/Text/Text"));
6
12
  var react_1 = __importDefault(require("react"));
7
13
  var useBem_1 = __importDefault(require("@steroidsjs/core/hooks/useBem"));
8
- require("./CalendarSystemModalView.scss");
9
- var Modal_1 = __importDefault(require("@steroidsjs/core/ui/modal/Modal"));
14
+ var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
10
15
  function CalendarSystemModalView(props) {
11
16
  var bem = (0, useBem_1["default"])('CalendarSystemModalView');
12
- return (react_1["default"].createElement(Modal_1["default"], { title: __('Новое событие'), onClose: props.onClose }));
17
+ var eventInitialValues = react_1["default"].useMemo(function () { return props.eventInitialValues; }, [props.eventInitialValues]);
18
+ var callOnEventSubmit = function (fields) {
19
+ return eventInitialValues ? props.onEventSubmit(fields, eventInitialValues) : props.onEventSubmit(fields);
20
+ };
21
+ return (react_1["default"].createElement(Modal_1["default"], { title: eventInitialValues ? __('Редактирование события') : __('Новое событие'), onClose: props.onClose, className: bem.block(), shouldCloseOnEsc: true, shouldCloseOnOverlayClick: true },
22
+ react_1["default"].createElement(form_1.Form, { className: bem.element('default-form'), onSubmit: function (fields) {
23
+ callOnEventSubmit(fields);
24
+ props.onClose();
25
+ }, initialValues: eventInitialValues !== null && eventInitialValues !== void 0 ? eventInitialValues : null, submitLabel: (0, isEmpty_1["default"])(eventInitialValues) ? __('Создать') : __('Сохранить') },
26
+ react_1["default"].createElement("div", null,
27
+ react_1["default"].createElement(Text_1["default"], { content: __('Наименование'), className: bem.element('label') }),
28
+ react_1["default"].createElement(form_1.InputField, { attribute: 'title', required: true, className: bem.element('name-field') }),
29
+ react_1["default"].createElement(form_1.DropDownField, { attribute: 'eventGroupId', items: props.eventGroups, placeholder: '\u0413\u0440\u0443\u043F\u043F\u0430', color: "primary", required: true, itemsContent: {
30
+ type: 'checkbox'
31
+ } })),
32
+ react_1["default"].createElement("div", null,
33
+ react_1["default"].createElement(Text_1["default"], { content: __('Время и дата'), className: bem.element('label') }),
34
+ react_1["default"].createElement(form_1.DateTimeField, { attribute: 'date', required: true })),
35
+ react_1["default"].createElement("div", null,
36
+ react_1["default"].createElement(Text_1["default"], { content: __('Описание'), className: bem.element('label') }),
37
+ react_1["default"].createElement(form_1.TextField, { attribute: 'description', required: true })))));
13
38
  }
14
39
  exports["default"] = CalendarSystemModalView;
@@ -1,5 +1,80 @@
1
- @import 'style/variables';
1
+ @use "style/variables";
2
2
 
3
3
  .CalendarSystemModalView {
4
+ $root: &;
5
+ width: 941px;
4
6
 
7
+ .FieldLayoutView {
8
+ margin-bottom: 0;
9
+ }
10
+
11
+ .ModalView__header {
12
+ .ModalView__title {
13
+ font-size: variables.$font-size-lg;
14
+ font-weight: variables.$font-weight-lg;
15
+ line-height: variables.$line-height-lg;
16
+ }
17
+ }
18
+
19
+ .ModalView__content {
20
+ padding: 0;
21
+ }
22
+
23
+ &__default-form {
24
+ display: flex;
25
+ flex-flow: column nowrap;
26
+ gap: 16px;
27
+
28
+ > div {
29
+ display: flex;
30
+ flex-flow: row nowrap;
31
+ align-items: center;
32
+
33
+ gap: 12px;
34
+
35
+ &:nth-child(3) {
36
+ > .FieldLayoutView {
37
+ width: calc(84%);
38
+
39
+ .TextFieldView textarea {
40
+ height: 160px;
41
+ }
42
+ }
43
+ }
44
+ }
45
+
46
+ #{$root}__label {
47
+ align-self: flex-start;
48
+ margin-bottom: 0;
49
+ margin-right: 16px;
50
+ width: 140px;
51
+ height: 46px;
52
+ }
53
+
54
+ #{$root}__name-field {
55
+ width: 585px;
56
+ }
57
+
58
+ .ButtonView {
59
+ width: 120px;
60
+ padding: 11px 12px;
61
+ }
62
+
63
+ .InputFieldView {
64
+ max-width: 420px;
65
+ }
66
+
67
+ .DropDownFieldView_primary {
68
+ width: 300px;
69
+
70
+ background-color: variables.$element-field-background-color;
71
+
72
+ .CheckboxFieldView__label-text {
73
+ display: -webkit-box;
74
+ overflow: hidden;
75
+ -webkit-line-clamp: 1;
76
+ -webkit-box-orient: vertical;
77
+ }
78
+ }
79
+ }
5
80
  }
@@ -16,13 +16,13 @@ function CalendarSystemView(props) {
16
16
  var bem = (0, useBem_1["default"])('CalendarSystemView');
17
17
  return (react_1["default"].createElement("div", { className: bem(bem.block(), props.className), style: props.style },
18
18
  react_1["default"].createElement("aside", { className: bem.element('aside') },
19
- react_1["default"].createElement(AsideHeader_1["default"], { onClick: props.onClickCreate, className: bem.element('aside-header') }),
19
+ react_1["default"].createElement(AsideHeader_1["default"], { onClick: props.openCreateModal, className: bem.element('aside-header') }),
20
20
  react_1["default"].createElement(Calendar_1["default"], { showFooter: false, onMonthChange: props.onMonthChange }),
21
21
  react_1["default"].createElement(AsideCalendars_1["default"], { eventGroups: props.eventGroups, eventGroupsTitle: props.eventGroupsTitle, selectedCalendarGroupsIds: props.selectedCalendarGroups, onChangeEventGroupsIds: props.onChangeEventGroupsIds })),
22
22
  react_1["default"].createElement("div", { className: bem.element('content') },
23
23
  react_1["default"].createElement(ContentHeader_1["default"], { dateToDisplay: props.dateToDisplay, onChangeCalendarType: props.onChangeCalendarType, applyControl: props.applyControl }),
24
24
  props.calendarType === CalendarType_1["default"].MONTH
25
- ? (react_1["default"].createElement(MonthGrid_1["default"], { monthCalendarDays: props.monthCalendarDays, getEventsFromDate: props.getEventsFromDate, weekDays: props.weekDays }))
26
- : (react_1["default"].createElement(WeekGrid_1["default"], { allHours: props.allHours, getEventsFromDate: props.getEventsFromDate, onClickHour: props.onClickHour, currentWeekDays: props.currentWeekDays })))));
25
+ ? (react_1["default"].createElement(MonthGrid_1["default"], { monthCalendarDays: props.monthCalendarDays, getEventsFromDate: props.getEventsFromDate, weekDays: props.weekDays, openEditModal: props.openEditModal, openCreateModal: props.openCreateModal }))
26
+ : (react_1["default"].createElement(WeekGrid_1["default"], { allHours: props.allHours, getEventsFromDate: props.getEventsFromDate, currentWeekDays: props.currentWeekDays, openEditModal: props.openEditModal, openCreateModal: props.openCreateModal })))));
27
27
  }
28
28
  exports["default"] = CalendarSystemView;
@@ -6,6 +6,8 @@ interface IMonthGridProps {
6
6
  monthCalendarDays: IDay[];
7
7
  getEventsFromDate: (dateFromDay: Date, currentCalendarType: CalendarEnum) => IEvent[];
8
8
  weekDays: string[];
9
+ openEditModal: (event: IEvent) => void;
10
+ openCreateModal: () => void;
9
11
  }
10
12
  declare function MonthGrid(props: IMonthGridProps): JSX.Element;
11
13
  declare const _default: React.MemoExoticComponent<typeof MonthGrid>;
@@ -34,6 +34,6 @@ function MonthGrid(props) {
34
34
  var bem = (0, useBem_1["default"])('MonthGrid');
35
35
  return (react_1["default"].createElement("div", { className: bem.block() },
36
36
  react_1["default"].createElement("div", { className: bem.element('week-days') }, props.weekDays.map(function (day, dayIndex) { return (react_1["default"].createElement("span", { key: dayIndex, className: bem.element('week-days-day') }, day)); })),
37
- react_1["default"].createElement("div", { className: bem.element('grid') }, props.monthCalendarDays.map(function (day, dayIndex) { return (react_1["default"].createElement(MonthDay_1["default"], { key: dayIndex, getEventsFromDate: props.getEventsFromDate, day: day })); }))));
37
+ react_1["default"].createElement("div", { className: bem.element('grid') }, props.monthCalendarDays.map(function (day, dayIndex) { return (react_1["default"].createElement(MonthDay_1["default"], { key: dayIndex, openEditModal: props.openEditModal, getEventsFromDate: props.getEventsFromDate, openCreateModal: props.openCreateModal, day: day })); }))));
38
38
  }
39
39
  exports["default"] = (0, react_1.memo)(MonthGrid);
@@ -4,6 +4,8 @@ import './MonthDay.scss';
4
4
  interface IMonthDayProps {
5
5
  day: IDay;
6
6
  getEventsFromDate: (dateFromDay: Date, currentCalendarType: CalendarEnum) => IEvent[];
7
+ openEditModal: (event: IEvent) => void;
8
+ openCreateModal: () => void;
7
9
  }
8
10
  export default function MonthDay(props: IMonthDayProps): JSX.Element;
9
11
  export {};
@@ -18,12 +18,12 @@ var useBem_1 = __importDefault(require("@steroidsjs/core/hooks/useBem"));
18
18
  var CalendarType_1 = __importDefault(require("@steroidsjs/core/ui/content/CalendarSystem/enums/CalendarType"));
19
19
  var Tooltip_1 = __importDefault(require("@steroidsjs/core/ui/layout/Tooltip/Tooltip"));
20
20
  var slice_1 = __importDefault(require("lodash-es/slice"));
21
+ var get_1 = __importDefault(require("lodash-es/get"));
21
22
  var form_1 = require("@steroidsjs/core/ui/form");
22
23
  var useExpandClickAway_1 = __importDefault(require("@steroidsjs/core/ui/content/CalendarSystem/hooks/useExpandClickAway"));
23
24
  var getFormattedExpandLabel_1 = require("../../../../../utils/getFormattedExpandLabel");
24
25
  require("./MonthDay.scss");
25
26
  var SIXTH_ELEMENT_INDEX = 6;
26
- var SIX_ELEMENTS_IN_ARRAY = 6;
27
27
  function MonthDay(props) {
28
28
  var bem = (0, useBem_1["default"])('MonthDay');
29
29
  var day = props.day, getEventsFromDate = props.getEventsFromDate;
@@ -38,14 +38,26 @@ function MonthDay(props) {
38
38
  };
39
39
  }, [getEventsFromDate, props.day.date]), events = _b.events, hasSixEvents = _b.hasSixEvents;
40
40
  var formattedExpandLabel = react_1["default"].useMemo(function () { return (0, getFormattedExpandLabel_1.getFormattedExpandRestLabel)((0, slice_1["default"])(__spreadArray([], events, true), SIXTH_ELEMENT_INDEX)); }, [events]);
41
- var renderEvent = react_1["default"].useCallback(function (event, eventIndex) { return (react_1["default"].createElement(Tooltip_1["default"], { key: eventIndex, position: 'rightBottom', content: event.title, className: bem.element('tooltip') },
42
- react_1["default"].createElement("span", { key: eventIndex, className: bem.element('event') },
41
+ var renderEvent = react_1["default"].useCallback(function (event, eventIndex) { return (react_1["default"].createElement(Tooltip_1["default"], { key: event.id, position: 'rightBottom', content: event.title, className: bem.element('tooltip') },
42
+ react_1["default"].createElement("span", { className: bem.element('event'), "data-eventid": event.id },
43
43
  react_1["default"].createElement("span", { className: bem.element('event-dot'), style: { backgroundColor: event.color } }),
44
44
  event.title))); }, [bem]);
45
+ var handleEventClick = react_1["default"].useCallback(function (event) {
46
+ var eventFromHour = event.target;
47
+ var eventId = (0, get_1["default"])(eventFromHour, 'dataset.eventid');
48
+ if (!eventId) {
49
+ return;
50
+ }
51
+ var requiredEvent = events.filter(function (hourEvent) { return hourEvent.id === Number(eventId); })[0];
52
+ props.openEditModal(requiredEvent);
53
+ }, [events, props]);
45
54
  return (react_1["default"].createElement("div", { className: bem(bem.block({
46
55
  outOfRange: day.outOfRange,
47
56
  isToday: day.isToday
48
- })), ref: monthDayRef },
57
+ })), ref: monthDayRef, onClick: handleEventClick, onContextMenu: function (e) {
58
+ e.preventDefault();
59
+ props.openCreateModal();
60
+ } },
49
61
  react_1["default"].createElement("div", { className: bem.element('wrapper') },
50
62
  react_1["default"].createElement("span", { className: bem.element('number') }, day.dayNumber.toString()),
51
63
  react_1["default"].createElement("div", { className: bem.element('content', {
@@ -106,6 +106,7 @@ $month-day-out-of-range-color-text: var(--month-day-out-of-range-color-text);
106
106
  height: 6px;
107
107
  margin-right: 8px;
108
108
  border-radius: 100px;
109
+ pointer-events: none;
109
110
  }
110
111
  }
111
112
 
@@ -2,10 +2,11 @@ import React from 'react';
2
2
  import { IDay, IEvent } from '@steroidsjs/core/ui/content/CalendarSystem/CalendarSystem';
3
3
  import './WeekGrid.scss';
4
4
  interface IWeekGridProps {
5
- onClickHour: () => void;
6
5
  currentWeekDays: IDay[];
7
6
  allHours: string[];
8
7
  getEventsFromDate: (dateFromDay: Date, isMonth: boolean) => IEvent[];
8
+ openEditModal: (event: IEvent) => void;
9
+ openCreateModal: () => void;
9
10
  }
10
11
  declare function WeekGrid(props: IWeekGridProps): JSX.Element;
11
12
  declare const _default: React.MemoExoticComponent<typeof WeekGrid>;
@@ -10,8 +10,8 @@ var WeekHour_1 = __importDefault(require("./views/WeekHour"));
10
10
  require("./WeekGrid.scss");
11
11
  function WeekGrid(props) {
12
12
  var bem = (0, useBem_1["default"])('WeekGrid');
13
- var currentWeekDays = props.currentWeekDays, onClickHour = props.onClickHour, getEventsFromDate = props.getEventsFromDate;
14
- var renderWeekHours = react_1["default"].useCallback(function (hour) { return currentWeekDays.map(function (dayOfWeek, dayOfWeekIndex) { return (react_1["default"].createElement(WeekHour_1["default"], { hour: hour, getEventsFromDate: getEventsFromDate, key: dayOfWeekIndex, dayOfWeek: dayOfWeek })); }); }, [currentWeekDays, getEventsFromDate]);
13
+ var currentWeekDays = props.currentWeekDays, getEventsFromDate = props.getEventsFromDate;
14
+ var renderWeekHours = react_1["default"].useCallback(function (hour) { return currentWeekDays.map(function (dayOfWeek, dayOfWeekIndex) { return (react_1["default"].createElement(WeekHour_1["default"], { hour: hour, getEventsFromDate: getEventsFromDate, key: dayOfWeekIndex, dayOfWeek: dayOfWeek, openEditModal: props.openEditModal, openCreateModal: props.openCreateModal })); }); }, [currentWeekDays, getEventsFromDate, props.openCreateModal, props.openEditModal]);
15
15
  return (react_1["default"].createElement("div", { className: bem.block() },
16
16
  react_1["default"].createElement("div", { className: bem.element('content') },
17
17
  react_1["default"].createElement("div", { className: bem.element('hours-time') }, props.allHours.map(function (hour, hourIndex) { return (react_1["default"].createElement("div", { key: hourIndex, className: bem.element('hours-time-item') }, hour)); })),
@@ -5,6 +5,8 @@ interface IWeekHourProps {
5
5
  dayOfWeek: IDay;
6
6
  getEventsFromDate: (dateFromDay: Date, currentCalendarType: CalendarEnum) => IEvent[];
7
7
  hour: string;
8
+ openEditModal: (event: IEvent) => void;
9
+ openCreateModal: () => void;
8
10
  }
9
11
  export default function WeekHour(props: IWeekHourProps): JSX.Element;
10
12
  export {};
@@ -19,6 +19,7 @@ var calendar_1 = require("@steroidsjs/core/utils/calendar");
19
19
  var form_1 = require("@steroidsjs/core/ui/form");
20
20
  var CalendarType_1 = __importDefault(require("@steroidsjs/core/ui/content/CalendarSystem/enums/CalendarType"));
21
21
  var slice_1 = __importDefault(require("lodash-es/slice"));
22
+ var get_1 = __importDefault(require("lodash-es/get"));
22
23
  var Tooltip_1 = __importDefault(require("@steroidsjs/core/ui/layout/Tooltip/Tooltip"));
23
24
  var useExpandClickAway_1 = __importDefault(require("@steroidsjs/core/ui/content/CalendarSystem/hooks/useExpandClickAway"));
24
25
  var getFormattedExpandLabel_1 = require("../../../../../utils/getFormattedExpandLabel");
@@ -45,17 +46,29 @@ function WeekHour(props) {
45
46
  };
46
47
  }, [props]), events = _b.events, hasOneEvent = _b.hasOneEvent, hasTwoEvents = _b.hasTwoEvents, hasTreeEvents = _b.hasTreeEvents, hasMoreThanFourEvents = _b.hasMoreThanFourEvents;
47
48
  var renderEvent = react_1["default"].useCallback(function (event, eventIndex) { return (react_1["default"].createElement(Tooltip_1["default"], { position: 'rightBottom', content: event.title, className: bem.element('tooltip'), key: eventIndex },
48
- react_1["default"].createElement("div", { className: bem.element('hour-event'), style: { backgroundColor: event.color }, title: event.title },
49
+ react_1["default"].createElement("div", { className: bem.element('hour-event'), style: { backgroundColor: event.color }, title: event.title, "data-eventid": event.id },
49
50
  react_1["default"].createElement("span", { className: bem.element('hour-event-title') }, event.title),
50
51
  react_1["default"].createElement("span", { className: bem.element('hour-event-time') }, (0, calendar_1.convertDate)(event.date, null, 'HH:mm'))))); }, [bem]);
51
52
  var formattedExpandLabel = react_1["default"].useMemo(function () { return (0, getFormattedExpandLabel_1.getFormattedExpandRestLabel)((0, slice_1["default"])(__spreadArray([], events, true), FOURTH_ELEMENT_INDEX)); }, [events]);
53
+ var handleEventClick = react_1["default"].useCallback(function (event) {
54
+ var eventFromHour = event.target;
55
+ var eventId = (0, get_1["default"])(eventFromHour, 'dataset.eventid');
56
+ if (!eventId) {
57
+ return;
58
+ }
59
+ var requiredEvent = events.filter(function (hourEvent) { return hourEvent.id === Number(eventId); })[0];
60
+ props.openEditModal(requiredEvent);
61
+ }, [events, props]);
52
62
  return (react_1["default"].createElement("div", { className: bem.element('hour', {
53
63
  isToday: props.dayOfWeek.isToday,
54
64
  hasOneEvent: hasOneEvent,
55
65
  hasTwoEvents: hasTwoEvents,
56
66
  hasTreeEvents: hasTreeEvents,
57
67
  isExpanded: isExpanded
58
- }), ref: weekHourRef },
68
+ }), ref: weekHourRef, onClick: handleEventClick, onContextMenu: function (e) {
69
+ e.preventDefault();
70
+ props.openCreateModal();
71
+ } },
59
72
  events.map(renderEvent),
60
73
  hasMoreThanFourEvents && !isExpanded && (react_1["default"].createElement(form_1.Button, { link: true, className: bem.element('expand-button'), onClick: function () { return setIsExpanded(true); } }, formattedExpandLabel))));
61
74
  }
@@ -17,6 +17,7 @@
17
17
  overflow: hidden;
18
18
  border-radius: 4px;
19
19
  max-height: 78px;
20
+ cursor: pointer;
20
21
 
21
22
  &:nth-child(n+4) {
22
23
  display: none;
@@ -29,6 +30,7 @@
29
30
  color: #312c3a;
30
31
 
31
32
  padding-right: 36px;
33
+ pointer-events: none;
32
34
  }
33
35
 
34
36
  &-time {
@@ -39,6 +41,8 @@
39
41
  font-size: variables.$font-size-xs;
40
42
  font-weight: variables.$font-weight-sm;
41
43
  line-height: variables.$line-height-xs;
44
+ pointer-events: none;
45
+
42
46
  }
43
47
  }
44
48
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/bootstrap",
3
- "version": "3.0.0-beta.109",
3
+ "version": "3.0.0-beta.110",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
@@ -37,7 +37,7 @@
37
37
  "react-use": "^17.4.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@steroidsjs/core": "^3.0 || >=3.0.0-beta.93",
40
+ "@steroidsjs/core": "^3.0 || >=3.0.0-beta.94",
41
41
  "@steroidsjs/eslint-config": "^2.1.4",
42
42
  "@types/enzyme": "^3.10.8",
43
43
  "@types/googlemaps": "^3.43.3",