sapp-common-package-test-final 1.0.12 → 1.0.13

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.
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { IWeeklyCalendarProps } from '../WeeklyCalendar/WeeklyCalendar';
3
+ export default function LMSModeWeeklyCalendar({ startDate, endDate, events, norms, showWeeklyNorm, onOpenDetail, onOpenCreate, onEventDetail, loading }: IWeeklyCalendarProps): React.JSX.Element;
@@ -1,16 +1,18 @@
1
1
  import { Dayjs } from 'dayjs';
2
2
  import React from 'react';
3
- import { IEvent, INorm } from '../../../types';
4
- interface IWeeklyCalendarProps {
3
+ import { ICell, IEvent, INorm } from '../../../types';
4
+ export interface IWeeklyCalendarProps {
5
5
  startDate: Dayjs;
6
6
  endDate: Dayjs;
7
7
  events: IEvent[];
8
8
  norms: INorm[];
9
- showWeeklyNorm: boolean;
9
+ showWeeklyNorm?: boolean;
10
10
  onOpenDetail: (date: Date, events: IEvent[]) => void;
11
11
  onOpenCreate: (date: Date) => void;
12
12
  onEventDetail?: (event: IEvent) => void;
13
13
  loading?: boolean;
14
14
  }
15
+ export declare const getEventAllDay: (events: IEvent[], targetDate: Dayjs) => Record<"Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday", ICell>;
16
+ export declare const getEventsOfDay: (events: IEvent[], targetHour: Dayjs) => Record<"Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday", ICell>;
15
17
  declare const WeeklyCalendar: ({ startDate, endDate, events, norms, showWeeklyNorm, onOpenDetail, onOpenCreate, onEventDetail, loading }: IWeeklyCalendarProps) => React.JSX.Element;
16
18
  export default WeeklyCalendar;
package/dist/index.css CHANGED
@@ -10,6 +10,10 @@
10
10
  cursor: pointer
11
11
  }
12
12
 
13
+ ._uCXxT {
14
+ resize: both
15
+ }
16
+
13
17
  ._3EfQZ {
14
18
  border-radius: 0px
15
19
  }
@@ -1005,12 +1009,13 @@ div._1dZBN {
1005
1009
  @media screen and (max-width: 1024px) {
1006
1010
  ._1K0QG {
1007
1011
  position: absolute;
1008
- top: 5%;
1012
+ top: 10%;
1009
1013
  z-index: 999;
1010
1014
  height: 100%;
1011
1015
  overflow: auto;
1012
1016
  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
1013
1017
  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
1014
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
1018
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1019
+ box-shadow: 0px 2px 4px 0px #70707014
1015
1020
  }
1016
1021
  }
package/dist/index.js CHANGED
@@ -60,6 +60,7 @@ var useEffectAfterMounted = function useEffectAfterMounted(callback, dependencie
60
60
  }, dependencies);
61
61
  };
62
62
 
63
+ var HOURS_PER_DAY = 24;
63
64
  var MINUTES_PER_HOUR = 60;
64
65
  var TIME_FORMAT = 'HH:mm';
65
66
  var DAYS_OF_WEEK;
@@ -411,7 +412,7 @@ var HiddenEyeIcon = function HiddenEyeIcon() {
411
412
  }));
412
413
  };
413
414
 
414
- var styles = {"flex":"_2hGgU","transform":"_3-Pu9","cursor-pointer":"_2Mcv6","rounded-none":"_3EfQZ","border-gray-4":"_3-NVJ","bg-button":"_3-gs3","bg-info/10":"_2ENMR","bg-white":"_rF-HF","!text-error":"_3mBZd","text-black":"_Irb_H","text-gray-600":"_1pL5w","text-info":"_NLvfI","text-secondary-text":"_H-zEU","filter":"_p0OEu","sapp-calendar":"_18t93","btn":"_1oiD_","icon":"_-E7rn","btn-default":"_3WrnL","btn-primary":"_2-qBL","event-info":"_xYqjb","event-warning":"_1oq3N","event-success":"_1hTMm","event-error":"_1hEJk","event-default":"_8FWXy","sapp-calendar__container":"_102cL","header-calendar":"_3Yvs5","header-calendar__nav":"_18m93","header-calendar__date-picker":"_2GTYD","header-calendar__title":"_35LQ0","header-calendar__controls":"_FqVqb","header-calendar__divider":"_3kHog","monthly-calendar":"_2NDGW","weekly-calendar":"_1QrJs","monthly-calendar__title":"_3Tsy4","monthly-calendar__title-active":"_1Dyjm","weekly-norm__cell":"_sGK9m","weekly-norm__value":"_1Jsb-","monthly-calendar__cell":"_2hVZ4","monthly-calendar__cell--active":"_1uenJ","calendar-tooltip":"_2Uo1f","monthly-event__title":"_2gsg7","monthly-event__date":"_2GtPn","weekly-calendar__title":"_5WuQ8","weekly-calendar__cell":"_3lPkV","weekly-event":"_hnHem","weekly-event__title":"_21a0T","weekly-event__date":"_PiKmX","weekly-event--collapse":"_1pvXT","btn-lms-default":"_1GA3p","text-lms-primary":"_1gLzS","select-mode":"_12I9I","ant-select-dropdown-placement-bottomLeft":"_1ZvuX","header-calendar_filter":"_1fd_Y","lms-calendar__tablet":"_1sVO3"};
415
+ var styles = {"flex":"_2hGgU","transform":"_3-Pu9","cursor-pointer":"_2Mcv6","resize":"_uCXxT","rounded-none":"_3EfQZ","border-gray-4":"_3-NVJ","bg-button":"_3-gs3","bg-info/10":"_2ENMR","bg-white":"_rF-HF","!text-error":"_3mBZd","text-black":"_Irb_H","text-gray-600":"_1pL5w","text-info":"_NLvfI","text-secondary-text":"_H-zEU","filter":"_p0OEu","sapp-calendar":"_18t93","btn":"_1oiD_","icon":"_-E7rn","btn-default":"_3WrnL","btn-primary":"_2-qBL","event-info":"_xYqjb","event-warning":"_1oq3N","event-success":"_1hTMm","event-error":"_1hEJk","event-default":"_8FWXy","sapp-calendar__container":"_102cL","header-calendar":"_3Yvs5","header-calendar__nav":"_18m93","header-calendar__date-picker":"_2GTYD","header-calendar__title":"_35LQ0","header-calendar__controls":"_FqVqb","header-calendar__divider":"_3kHog","monthly-calendar":"_2NDGW","weekly-calendar":"_1QrJs","monthly-calendar__title":"_3Tsy4","monthly-calendar__title-active":"_1Dyjm","weekly-norm__cell":"_sGK9m","weekly-norm__value":"_1Jsb-","monthly-calendar__cell":"_2hVZ4","monthly-calendar__cell--active":"_1uenJ","calendar-tooltip":"_2Uo1f","monthly-event__title":"_2gsg7","monthly-event__date":"_2GtPn","weekly-calendar__title":"_5WuQ8","weekly-calendar__cell":"_3lPkV","weekly-event":"_hnHem","weekly-event__title":"_21a0T","weekly-event__date":"_PiKmX","weekly-event--collapse":"_1pvXT","btn-lms-default":"_1GA3p","text-lms-primary":"_1gLzS","select-mode":"_12I9I","ant-select-dropdown-placement-bottomLeft":"_1ZvuX","header-calendar_filter":"_1fd_Y","lms-calendar__tablet":"_1sVO3"};
415
416
 
416
417
  var Button = function Button(_ref) {
417
418
  var _ref$type = _ref.type,
@@ -908,8 +909,224 @@ var MonthlyCalendar = function MonthlyCalendar(_ref) {
908
909
  };
909
910
 
910
911
  var _getIconEvent;
912
+ var calculateBoxSize = function calculateBoxSize(startTime, endTime, isAllDay) {
913
+ if (isAllDay) {
914
+ return {
915
+ top: 10,
916
+ height: 50
917
+ };
918
+ }
919
+ var minutes = dayjs(startTime).minute();
920
+ var diffMinutes = dayjs(endTime).diff(startTime, 'minute', true);
921
+ return {
922
+ top: Math.floor(minutes / MINUTES_PER_HOUR * 100),
923
+ height: Math.floor(diffMinutes / MINUTES_PER_HOUR * 100)
924
+ };
925
+ };
911
926
  var getIconEvent = (_getIconEvent = {}, _getIconEvent[EVENT_TYPES.TEACHING] = React__default.createElement(Book, null), _getIconEvent[EVENT_TYPES.BUSY] = React__default.createElement(CalendarDelete, null), _getIconEvent[EVENT_TYPES.TIME_OFF] = React__default.createElement(Star, null), _getIconEvent[EVENT_TYPES.OTHER] = React__default.createElement(CalendarAccept, null), _getIconEvent);
912
- var calculateBoxSize = function calculateBoxSize(startTime, endTime) {
927
+ var MIN_HEIGHT_HIDE_DETAILS = 140;
928
+ var MIN_HEIGHT_HIDE_ALL = 105;
929
+ var WeeklyEvent = function WeeklyEvent(_ref) {
930
+ var event = _ref.event,
931
+ onOpenDetail = _ref.onOpenDetail,
932
+ onEventDetail = _ref.onEventDetail;
933
+ var _calculateBoxSize = calculateBoxSize(event.startDate, event.endDate, event.isAllDay),
934
+ top = _calculateBoxSize.top,
935
+ height = _calculateBoxSize.height;
936
+ var formattedDate = customDateFormat(event.startDate, TIME_FORMAT) + ' - ' + customDateFormat(event.endDate, TIME_FORMAT);
937
+ return React__default.createElement("div", {
938
+ className: styles["event-" + convertType[event.type]],
939
+ onClick: function onClick() {
940
+ onOpenDetail(dayjs(event.startDate).toDate(), [event]);
941
+ onEventDetail && onEventDetail(event);
942
+ },
943
+ style: {
944
+ top: top + "%",
945
+ height: height + "%",
946
+ zIndex: event.type === EVENT_TYPES.BUSY ? 2 : 1
947
+ }
948
+ }, React__default.createElement("div", {
949
+ className: clsx__default(styles['weekly-event'], height <= MIN_HEIGHT_HIDE_ALL && styles['weekly-event--collapse'])
950
+ }, React__default.createElement("div", {
951
+ className: styles.flex
952
+ }, getIconEvent[event.type]), React__default.createElement("div", {
953
+ className: clsx__default(height <= MIN_HEIGHT_HIDE_DETAILS && styles['weekly-event--collapse'])
954
+ }, React__default.createElement("div", {
955
+ className: styles['weekly-event__title']
956
+ }, React__default.createElement(CustomTooltip, {
957
+ title: event.title
958
+ }, event.title)), React__default.createElement("div", {
959
+ className: styles['weekly-event__date']
960
+ }, React__default.createElement(CustomTooltip, {
961
+ title: formattedDate
962
+ }, formattedDate)))));
963
+ };
964
+
965
+ var WeeklyCell = function WeeklyCell(_ref) {
966
+ var _events;
967
+ var events = _ref.events,
968
+ date = _ref.date,
969
+ onOpenDetail = _ref.onOpenDetail,
970
+ onOpenCreate = _ref.onOpenCreate,
971
+ onEventDetail = _ref.onEventDetail;
972
+ var isToday = dayjs().isSame(date, 'day');
973
+ var handleOpenCreateModal = function handleOpenCreateModal(e) {
974
+ if (e.target !== e.currentTarget) return;
975
+ onOpenCreate(dayjs(date).toDate());
976
+ };
977
+ events = (_events = events) === null || _events === void 0 ? void 0 : _events.sort(function (a, b) {
978
+ return a.type === EVENT_TYPES.BUSY && b.type !== EVENT_TYPES.BUSY ? 1 : -1;
979
+ });
980
+ var renderWeeklyEvent = React.useMemo(function () {
981
+ var _events2, _events3, _events4;
982
+ var isAllDay = (_events2 = events) === null || _events2 === void 0 ? void 0 : _events2.some(function (item) {
983
+ return item.isAllDay;
984
+ });
985
+ if (isAllDay && ((_events3 = events) === null || _events3 === void 0 ? void 0 : _events3.length) > 1) {
986
+ return React__default.createElement(React__default.Fragment, null, React__default.createElement(WeeklyEvent, {
987
+ event: events[0],
988
+ onOpenDetail: onOpenDetail,
989
+ onEventDetail: onEventDetail
990
+ }), React__default.createElement("div", {
991
+ className: styles['see-more']
992
+ }, React__default.createElement(CustomTooltip, {
993
+ placement: 'bottom',
994
+ title: React__default.createElement("div", {
995
+ className: styles['calendar-tooltip']
996
+ }, events.slice(1, events.length).map(function (event, index) {
997
+ return React__default.createElement(WeeklyEvent, {
998
+ event: event,
999
+ onOpenDetail: onOpenDetail,
1000
+ onEventDetail: onEventDetail,
1001
+ key: index + 1
1002
+ });
1003
+ }))
1004
+ }, "+", Math.max(events.length - 1, 0), " More")));
1005
+ }
1006
+ return (_events4 = events) === null || _events4 === void 0 ? void 0 : _events4.map(function (event, index) {
1007
+ return React__default.createElement(WeeklyEvent, {
1008
+ key: index,
1009
+ event: event,
1010
+ onOpenDetail: onOpenDetail,
1011
+ onEventDetail: onEventDetail
1012
+ });
1013
+ });
1014
+ }, [events]);
1015
+ return React__default.createElement("div", {
1016
+ className: styles['weekly-calendar__cell'] + " " + (isToday ? styles['bg-info/10'] : styles['bg-white']),
1017
+ onClick: handleOpenCreateModal
1018
+ }, renderWeeklyEvent);
1019
+ };
1020
+
1021
+ dayjs.extend(isBetween);
1022
+ var getEventAllDay = function getEventAllDay(events, targetDate) {
1023
+ return daysOfWeekKeys.reduce(function (acc, day, index) {
1024
+ var currentDate = targetDate.add(index, 'day');
1025
+ acc[day] = {
1026
+ events: events.reduce(function (filteredEvents, event) {
1027
+ if (dayjs(event.startDate).isSame(currentDate.startOf('day')) && checkIsAllday(dayjs(event.startDate), dayjs(event.endDate))) {
1028
+ filteredEvents.push(_extends({}, event, {
1029
+ isAllDay: true
1030
+ }));
1031
+ }
1032
+ return filteredEvents;
1033
+ }, []),
1034
+ date: currentDate
1035
+ };
1036
+ return acc;
1037
+ }, {});
1038
+ };
1039
+ var getEventsOfDay = function getEventsOfDay(events, targetHour) {
1040
+ return daysOfWeekKeys.reduce(function (acc, day, index) {
1041
+ var currentDate = targetHour.add(index, 'day');
1042
+ acc[day] = {
1043
+ events: events.filter(function (event) {
1044
+ return dayjs(event.startDate).isSame(currentDate, 'hour') && !checkIsAllday(dayjs(event.startDate), dayjs(event.endDate));
1045
+ }),
1046
+ date: currentDate
1047
+ };
1048
+ return acc;
1049
+ }, {});
1050
+ };
1051
+ var WeeklyCalendar = function WeeklyCalendar(_ref) {
1052
+ var startDate = _ref.startDate,
1053
+ endDate = _ref.endDate,
1054
+ events = _ref.events,
1055
+ norms = _ref.norms,
1056
+ showWeeklyNorm = _ref.showWeeklyNorm,
1057
+ onOpenDetail = _ref.onOpenDetail,
1058
+ onOpenCreate = _ref.onOpenCreate,
1059
+ onEventDetail = _ref.onEventDetail,
1060
+ loading = _ref.loading;
1061
+ var getTableColumns = function getTableColumns() {
1062
+ var _calculateNormOfWeek = calculateNormOfWeek(norms, events, startDate, endDate),
1063
+ normOfWeek = _calculateNormOfWeek.normOfWeek,
1064
+ totalNorm = _calculateNormOfWeek.totalNorm;
1065
+ var hourColumn = {
1066
+ title: React__default.createElement("div", {
1067
+ className: styles['weekly-calendar__title']
1068
+ }, showWeeklyNorm && React__default.createElement(React__default.Fragment, null, React__default.createElement("div", null, "Weekly Norm"), React__default.createElement("div", {
1069
+ className: clsx__default(normOfWeek > totalNorm && styles['!text-error'])
1070
+ }, normOfWeek + "/" + totalNorm))),
1071
+ dataIndex: 'hour',
1072
+ key: 'hour',
1073
+ width: 1,
1074
+ render: function render(value) {
1075
+ return React__default.createElement("div", null, value);
1076
+ }
1077
+ };
1078
+ var dayColumns = Object.values(DAYS_OF_WEEK).map(function (day, index) {
1079
+ return {
1080
+ title: React__default.createElement("div", {
1081
+ className: styles['weekly-calendar__title']
1082
+ }, React__default.createElement("div", null, day.slice(0, 3)), React__default.createElement("div", null, dayjs(startDate).add(index, 'day').format('DD/MM'))),
1083
+ dataIndex: day,
1084
+ key: day,
1085
+ render: function render(value) {
1086
+ return React__default.createElement(WeeklyCell, {
1087
+ key: index,
1088
+ events: value.events,
1089
+ date: value.date,
1090
+ onOpenDetail: onOpenDetail,
1091
+ onOpenCreate: onOpenCreate,
1092
+ onEventDetail: onEventDetail
1093
+ });
1094
+ }
1095
+ };
1096
+ });
1097
+ return [hourColumn].concat(dayColumns);
1098
+ };
1099
+ var getTableData = function getTableData() {
1100
+ var data = [];
1101
+ data.push(_extends({
1102
+ id: -1,
1103
+ hour: 'All day'
1104
+ }, getEventAllDay(events, startDate)));
1105
+ for (var i = 0; i < HOURS_PER_DAY; i++) {
1106
+ var targetHour = dayjs(startDate).add(i, 'hour');
1107
+ data.push(_extends({
1108
+ id: i,
1109
+ hour: targetHour.format('HH:mm')
1110
+ }, getEventsOfDay(events, targetHour)));
1111
+ }
1112
+ return data;
1113
+ };
1114
+ return React__default.createElement(antd.Table, {
1115
+ rowKey: function rowKey(record) {
1116
+ return record.id;
1117
+ },
1118
+ columns: getTableColumns(),
1119
+ dataSource: getTableData(),
1120
+ pagination: false,
1121
+ rowHoverable: false,
1122
+ className: styles['weekly-calendar'],
1123
+ loading: loading
1124
+ });
1125
+ };
1126
+
1127
+ var _getIconEvent$1;
1128
+ var getIconEvent$1 = (_getIconEvent$1 = {}, _getIconEvent$1[EVENT_TYPES.TEACHING] = React__default.createElement(Book, null), _getIconEvent$1[EVENT_TYPES.BUSY] = React__default.createElement(CalendarDelete, null), _getIconEvent$1[EVENT_TYPES.TIME_OFF] = React__default.createElement(Star, null), _getIconEvent$1[EVENT_TYPES.OTHER] = React__default.createElement(CalendarAccept, null), _getIconEvent$1);
1129
+ var calculateBoxSize$1 = function calculateBoxSize(startTime, endTime) {
913
1130
  var minutes = dayjs(startTime).minute();
914
1131
  var diffMinutes = dayjs(endTime).diff(startTime, 'hour', true);
915
1132
  return {
@@ -922,7 +1139,7 @@ var LMSWeeklyEvent = function LMSWeeklyEvent(_ref) {
922
1139
  onOpenDetail = _ref.onOpenDetail,
923
1140
  onEventDetail = _ref.onEventDetail;
924
1141
  var formattedDate = customDateFormat(event.startDate, TIME_FORMAT) + ' - ' + customDateFormat(event.endDate, TIME_FORMAT);
925
- var _calculateBoxSize = calculateBoxSize(event.startDate, event.endDate),
1142
+ var _calculateBoxSize = calculateBoxSize$1(event.startDate, event.endDate),
926
1143
  width = _calculateBoxSize.width,
927
1144
  left = _calculateBoxSize.left;
928
1145
  return React__default.createElement("div", {
@@ -944,7 +1161,7 @@ var LMSWeeklyEvent = function LMSWeeklyEvent(_ref) {
944
1161
  className: clsx__default(styles['weekly-event--collapse'])
945
1162
  }, React__default.createElement("div", {
946
1163
  className: styles.flex
947
- }, getIconEvent[event.type]), React__default.createElement("div", {
1164
+ }, getIconEvent$1[event.type]), React__default.createElement("div", {
948
1165
  className: styles['weekly-event__title']
949
1166
  }, React__default.createElement(CustomTooltip, {
950
1167
  title: event.title
@@ -1104,6 +1321,51 @@ var LMSWeeklyCalendar = function LMSWeeklyCalendar(_ref) {
1104
1321
  });
1105
1322
  };
1106
1323
 
1324
+ function LMSModeWeeklyCalendar(_ref) {
1325
+ var startDate = _ref.startDate,
1326
+ endDate = _ref.endDate,
1327
+ events = _ref.events,
1328
+ norms = _ref.norms,
1329
+ _ref$showWeeklyNorm = _ref.showWeeklyNorm,
1330
+ showWeeklyNorm = _ref$showWeeklyNorm === void 0 ? false : _ref$showWeeklyNorm,
1331
+ onOpenDetail = _ref.onOpenDetail,
1332
+ onOpenCreate = _ref.onOpenCreate,
1333
+ onEventDetail = _ref.onEventDetail,
1334
+ loading = _ref.loading;
1335
+ var _useState = React.useState(window.innerWidth),
1336
+ windowWidth = _useState[0],
1337
+ setWindowWidth = _useState[1];
1338
+ React.useEffect(function () {
1339
+ var handleResize = function handleResize() {
1340
+ setWindowWidth(window.innerWidth);
1341
+ };
1342
+ window.addEventListener('resize', handleResize);
1343
+ return function () {
1344
+ window.removeEventListener('resize', handleResize);
1345
+ };
1346
+ }, []);
1347
+ return React__default.createElement(React__default.Fragment, null, windowWidth > 1024 ? React__default.createElement(WeeklyCalendar, {
1348
+ startDate: startDate,
1349
+ endDate: endDate,
1350
+ events: events,
1351
+ norms: norms,
1352
+ showWeeklyNorm: showWeeklyNorm,
1353
+ onOpenDetail: onOpenDetail,
1354
+ onOpenCreate: onOpenCreate,
1355
+ onEventDetail: onEventDetail,
1356
+ loading: loading
1357
+ }) : React__default.createElement(LMSWeeklyCalendar, {
1358
+ startDate: startDate,
1359
+ endDate: endDate,
1360
+ events: events,
1361
+ norms: norms,
1362
+ onOpenDetail: onOpenDetail,
1363
+ onOpenCreate: onOpenCreate,
1364
+ onEventDetail: onEventDetail,
1365
+ loading: loading
1366
+ }));
1367
+ }
1368
+
1107
1369
  var SAPPCalendar = function SAPPCalendar(_ref) {
1108
1370
  var teacherName = _ref.teacherName,
1109
1371
  events = _ref.events,
@@ -1204,10 +1466,11 @@ var SAPPCalendar = function SAPPCalendar(_ref) {
1204
1466
  onOpenCreate: onOpenCreate,
1205
1467
  onEventDetail: onEventDetail,
1206
1468
  loading: loading
1207
- }), calendarMode === 'week' && React__default.createElement(LMSWeeklyCalendar, {
1469
+ }), calendarMode === 'week' && React__default.createElement(LMSModeWeeklyCalendar, {
1208
1470
  startDate: startDate,
1209
1471
  endDate: endDate,
1210
1472
  events: splittedEvents,
1473
+ showWeeklyNorm: showWeeklyNorm,
1211
1474
  norms: norms,
1212
1475
  onOpenDetail: onOpenDetail,
1213
1476
  onOpenCreate: onOpenCreate,