pds-dev-kit-web 2.2.202 → 2.2.203
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/index.d.ts +2 -2
- package/dist/index.js +3 -2
- package/dist/src/common/services/i18n/resources/en.json +36 -0
- package/dist/src/common/services/i18n/resources/es.json +36 -0
- package/dist/src/common/services/i18n/resources/fil.json +36 -0
- package/dist/src/common/services/i18n/resources/index.d.ts +252 -0
- package/dist/src/common/services/i18n/resources/ja.json +36 -0
- package/dist/src/common/services/i18n/resources/ko.json +36 -0
- package/dist/src/common/services/i18n/resources/zh-cn.json +36 -0
- package/dist/src/common/services/i18n/resources/zh-tw.json +36 -0
- package/dist/src/common/utils/dateHelper.d.ts +3 -0
- package/dist/src/common/utils/dateHelper.js +37 -0
- package/dist/src/desktop/components/Calendar/AllDaySchedulesSection.d.ts +12 -0
- package/dist/src/desktop/components/Calendar/AllDaySchedulesSection.js +134 -0
- package/dist/src/desktop/components/Calendar/Calendar.d.ts +4 -0
- package/dist/src/desktop/components/Calendar/Calendar.js +399 -0
- package/dist/src/desktop/components/Calendar/CalendarContext.d.ts +51 -0
- package/dist/src/desktop/components/Calendar/CalendarContext.js +76 -0
- package/dist/src/desktop/components/Calendar/CurrentTimeIndicator.d.ts +7 -0
- package/dist/src/desktop/components/Calendar/CurrentTimeIndicator.js +48 -0
- package/dist/src/desktop/components/Calendar/DailyView.d.ts +2 -0
- package/dist/src/desktop/components/Calendar/DailyView.js +91 -0
- package/dist/src/desktop/components/Calendar/MonthlyView.d.ts +28 -0
- package/dist/src/desktop/components/Calendar/MonthlyView.js +381 -0
- package/dist/src/desktop/components/Calendar/MultiWeekSchedulesLayer.d.ts +21 -0
- package/dist/src/desktop/components/Calendar/MultiWeekSchedulesLayer.js +204 -0
- package/dist/src/desktop/components/Calendar/ScheduleItem.d.ts +25 -0
- package/dist/src/desktop/components/Calendar/ScheduleItem.js +56 -0
- package/dist/src/desktop/components/Calendar/TimeBasedScheduleItem.d.ts +12 -0
- package/dist/src/desktop/components/Calendar/TimeBasedScheduleItem.js +184 -0
- package/dist/src/desktop/components/Calendar/WeeklyView.d.ts +6 -0
- package/dist/src/desktop/components/Calendar/WeeklyView.js +114 -0
- package/dist/src/desktop/components/Calendar/YearlyView.d.ts +13 -0
- package/dist/src/desktop/components/Calendar/YearlyView.js +76 -0
- package/dist/src/desktop/components/Calendar/calendarUtils.d.ts +24 -0
- package/dist/src/desktop/components/Calendar/calendarUtils.js +87 -0
- package/dist/src/desktop/components/Calendar/constants.d.ts +1 -0
- package/dist/src/desktop/components/Calendar/constants.js +31 -0
- package/dist/src/desktop/components/Calendar/index.d.ts +14 -0
- package/dist/src/desktop/components/Calendar/index.js +42 -0
- package/dist/src/desktop/components/Calendar/timeFormatUtils.d.ts +16 -0
- package/dist/src/desktop/components/Calendar/timeFormatUtils.js +45 -0
- package/dist/src/desktop/components/Calendar/types.d.ts +61 -0
- package/dist/src/desktop/components/Calendar/types.js +2 -0
- package/dist/src/desktop/components/index.d.ts +2 -1
- package/dist/src/desktop/components/index.js +3 -1
- package/dist/src/desktop/index.d.ts +1 -1
- package/dist/src/desktop/index.js +2 -1
- package/package.json +1 -1
- package/release-note.md +2 -2
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.S_Dot = exports.ScheduleItem = void 0;
|
|
22
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
23
|
+
var styled_components_1 = __importDefault(require("styled-components"));
|
|
24
|
+
var TextLabel_1 = require("../TextLabel");
|
|
25
|
+
var ScheduleItem = function (_a) {
|
|
26
|
+
var schedule = _a.schedule, _b = _a.extraProps, extraProps = _b === void 0 ? {} : _b, onDragStart = _a.onDragStart, onDragEnd = _a.onDragEnd, onClick = _a.onClick, _c = _a.isSelected, isSelected = _c === void 0 ? false : _c, _d = _a.isAllDay, isAllDay = _d === void 0 ? false : _d, _e = _a.isDraggable, isDraggable = _e === void 0 ? false : _e;
|
|
27
|
+
return ((0, jsx_runtime_1.jsxs)(S_ScheduleItem, __assign({ "$color": schedule.color, "$position": "single", "$isSelected": isSelected, "$isAllday": isAllDay, "$isDraggable": isDraggable, draggable: isDraggable, onDragStart: isDraggable ? function (e) { return onDragStart(schedule, e); } : undefined, onDragEnd: isDraggable ? onDragEnd : undefined, onClick: function (e) {
|
|
28
|
+
e.stopPropagation();
|
|
29
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(schedule, e);
|
|
30
|
+
} }, extraProps, { children: [(0, jsx_runtime_1.jsx)(exports.S_Dot, { "$isSelected": isSelected }), (0, jsx_runtime_1.jsx)(S_TextContainer, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "caption2Bold", text: schedule.title, colorTheme: isSelected ? 'sysTextWhite' : undefined, ellipsisMode: "use", singleLineMode: "use" }) })] }), schedule.id));
|
|
31
|
+
};
|
|
32
|
+
exports.ScheduleItem = ScheduleItem;
|
|
33
|
+
var S_ScheduleItem = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n align-items: center;\n background: ", ";\n border: ", ";\n border-radius: 4px;\n cursor: ", ";\n display: flex;\n flex-shrink: 1;\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n padding: 2px 6px;\n position: relative;\n transition: opacity 0.2s ease, transform 0.2s ease;\n\n &:active {\n background: ", ";\n cursor: ", ";\n }\n"], ["\n align-items: center;\n background: ", ";\n border: ", ";\n border-radius: 4px;\n cursor: ", ";\n display: flex;\n flex-shrink: 1;\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n padding: 2px 6px;\n position: relative;\n transition: opacity 0.2s ease, transform 0.2s ease;\n\n &:active {\n background: ", ";\n cursor: ", ";\n }\n"])), function (props) {
|
|
34
|
+
if (props.$isSelected)
|
|
35
|
+
return props.theme.ui_cpnt_sheet_base_06;
|
|
36
|
+
if (props.$isAllday)
|
|
37
|
+
return props.theme.ui_cpnt_sheet_base;
|
|
38
|
+
return 'transparent';
|
|
39
|
+
}, function (props) {
|
|
40
|
+
return props.$isSelected ? "2px solid ".concat(props.theme.ui_cpnt_sheet_base_06) : '2px solid transparent';
|
|
41
|
+
}, function (_a) {
|
|
42
|
+
var $isDraggable = _a.$isDraggable;
|
|
43
|
+
return ($isDraggable ? 'grab' : 'default');
|
|
44
|
+
}, function (_a) {
|
|
45
|
+
var theme = _a.theme;
|
|
46
|
+
return theme.ui_cpnt_sheet_base_06;
|
|
47
|
+
}, function (_a) {
|
|
48
|
+
var $isDraggable = _a.$isDraggable;
|
|
49
|
+
return ($isDraggable ? 'grabbing' : 'default');
|
|
50
|
+
});
|
|
51
|
+
var S_TextContainer = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n flex: 1;\n max-width: 85%;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n /* TextLabel \uB0B4\uBD80 \uC694\uC18C\uC5D0\uB3C4 \uD55C \uC904 \uC81C\uD55C \uC801\uC6A9 */\n * {\n line-height: 1 !important;\n max-height: 1em !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n }\n"], ["\n flex: 1;\n max-width: 85%;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n /* TextLabel \uB0B4\uBD80 \uC694\uC18C\uC5D0\uB3C4 \uD55C \uC904 \uC81C\uD55C \uC801\uC6A9 */\n * {\n line-height: 1 !important;\n max-height: 1em !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n }\n"])));
|
|
52
|
+
exports.S_Dot = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background: ", ";\n border-radius: 50%;\n height: 4px;\n margin-right: 4px;\n width: 4px;\n"], ["\n background: ", ";\n border-radius: 50%;\n height: 4px;\n margin-right: 4px;\n width: 4px;\n"])), function (_a) {
|
|
53
|
+
var $isSelected = _a.$isSelected, theme = _a.theme;
|
|
54
|
+
return $isSelected ? theme.ui_cpnt_icon_sys_white : theme.ui_cpnt_icon_sys_grey_02;
|
|
55
|
+
});
|
|
56
|
+
var templateObject_1, templateObject_2, templateObject_3;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Schedule } from './types';
|
|
2
|
+
import type React from 'react';
|
|
3
|
+
interface TimeBasedScheduleItemProps {
|
|
4
|
+
schedules: Schedule[];
|
|
5
|
+
selectedSchedules: Schedule[];
|
|
6
|
+
isDraggable?: boolean;
|
|
7
|
+
onClick?: (schedule: Schedule, e?: React.MouseEvent) => void;
|
|
8
|
+
handleScheduleDragStart: (schedule: Schedule, e: React.DragEvent) => void;
|
|
9
|
+
handleScheduleDragEnd: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const TimeBasedScheduleItem: React.FC<TimeBasedScheduleItemProps>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
18
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
19
|
+
if (ar || !(i in from)) {
|
|
20
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
21
|
+
ar[i] = from[i];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
|
+
};
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.TimeBasedScheduleItem = void 0;
|
|
31
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
32
|
+
var react_1 = require("react");
|
|
33
|
+
var react_i18next_1 = require("react-i18next");
|
|
34
|
+
var styled_components_1 = __importDefault(require("styled-components"));
|
|
35
|
+
var TextLabel_1 = require("../TextLabel");
|
|
36
|
+
var calendarUtils_1 = require("./calendarUtils");
|
|
37
|
+
var timeFormatUtils_1 = require("./timeFormatUtils");
|
|
38
|
+
var TimeBasedScheduleItem = function (_a) {
|
|
39
|
+
var schedules = _a.schedules, selectedSchedules = _a.selectedSchedules, _b = _a.isDraggable, isDraggable = _b === void 0 ? false : _b, onClick = _a.onClick, handleScheduleDragStart = _a.handleScheduleDragStart, handleScheduleDragEnd = _a.handleScheduleDragEnd;
|
|
40
|
+
var _c = (0, react_i18next_1.useTranslation)(), i18n = _c.i18n, t = _c.t;
|
|
41
|
+
// 시간별 스케줄 계산 및 grid 위치 할당
|
|
42
|
+
var timedSchedulesWithGrid = (0, react_1.useMemo)(function () {
|
|
43
|
+
var filteredSchedules = schedules.filter(function (schedule) { return !(0, calendarUtils_1.calculateIsAllDay)(new Date(schedule.startDate), new Date(schedule.endDate)); });
|
|
44
|
+
// 시간 순으로 정렬 (시작 시간 기준, 시작시간이 같으면 duration이 짧은 순)
|
|
45
|
+
var sortedSchedules = __spreadArray([], filteredSchedules, true).sort(function (a, b) {
|
|
46
|
+
var startTimeA = new Date(a.startDate).getTime();
|
|
47
|
+
var startTimeB = new Date(b.startDate).getTime();
|
|
48
|
+
// 시작시간이 다르면 시작시간 기준으로 정렬
|
|
49
|
+
if (startTimeA !== startTimeB) {
|
|
50
|
+
return startTimeA - startTimeB;
|
|
51
|
+
}
|
|
52
|
+
// 시작시간이 같으면 duration이 짧은 순으로 정렬
|
|
53
|
+
var durationA = new Date(a.endDate).getTime() - startTimeA;
|
|
54
|
+
var durationB = new Date(b.endDate).getTime() - startTimeB;
|
|
55
|
+
return durationA - durationB;
|
|
56
|
+
});
|
|
57
|
+
var parent = new Map();
|
|
58
|
+
var find = function (x) {
|
|
59
|
+
var currentParent = parent.get(x);
|
|
60
|
+
if (currentParent !== undefined && currentParent !== x) {
|
|
61
|
+
var root = find(currentParent);
|
|
62
|
+
parent.set(x, root);
|
|
63
|
+
return root;
|
|
64
|
+
}
|
|
65
|
+
return x;
|
|
66
|
+
};
|
|
67
|
+
var union = function (x, y) {
|
|
68
|
+
var rootX = find(x);
|
|
69
|
+
var rootY = find(y);
|
|
70
|
+
if (rootX !== rootY) {
|
|
71
|
+
parent.set(rootX, rootY);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
// 초기화: 각 스케줄을 자기 자신의 parent로 설정
|
|
75
|
+
sortedSchedules.forEach(function (schedule) {
|
|
76
|
+
parent.set(schedule.id, schedule.id);
|
|
77
|
+
});
|
|
78
|
+
// 겹치는 스케줄들을 연결
|
|
79
|
+
for (var i = 0; i < sortedSchedules.length; i += 1) {
|
|
80
|
+
for (var j = i + 1; j < sortedSchedules.length; j += 1) {
|
|
81
|
+
var schedule1 = sortedSchedules[i];
|
|
82
|
+
var schedule2 = sortedSchedules[j];
|
|
83
|
+
var start1 = new Date(schedule1.startDate).getTime();
|
|
84
|
+
var end1 = new Date(schedule1.endDate).getTime();
|
|
85
|
+
var start2 = new Date(schedule2.startDate).getTime();
|
|
86
|
+
var end2 = new Date(schedule2.endDate).getTime();
|
|
87
|
+
// 시간 겹침 확인: (start1 < end2) && (start2 < end1)
|
|
88
|
+
if (start1 < end2 && start2 < end1) {
|
|
89
|
+
union(schedule1.id, schedule2.id);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// 같은 그룹에 속하는 스케줄들끼리 묶기
|
|
94
|
+
var groups = new Map();
|
|
95
|
+
sortedSchedules.forEach(function (schedule) {
|
|
96
|
+
var root = find(schedule.id);
|
|
97
|
+
if (!groups.has(root)) {
|
|
98
|
+
groups.set(root, []);
|
|
99
|
+
}
|
|
100
|
+
var group = groups.get(root);
|
|
101
|
+
if (group) {
|
|
102
|
+
group.push(schedule);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
// 각 그룹 내에서 grid 위치 할당
|
|
106
|
+
var schedulesWithGrid = [];
|
|
107
|
+
groups.forEach(function (group) {
|
|
108
|
+
// 그룹 내에서 정렬
|
|
109
|
+
var sortedGroup = group.sort(function (a, b) {
|
|
110
|
+
var startTimeA = new Date(a.startDate).getTime();
|
|
111
|
+
var startTimeB = new Date(b.startDate).getTime();
|
|
112
|
+
if (startTimeA !== startTimeB) {
|
|
113
|
+
return startTimeA - startTimeB;
|
|
114
|
+
}
|
|
115
|
+
var durationA = new Date(a.endDate).getTime() - startTimeA;
|
|
116
|
+
var durationB = new Date(b.endDate).getTime() - startTimeB;
|
|
117
|
+
return durationA - durationB;
|
|
118
|
+
});
|
|
119
|
+
var totalColumns = sortedGroup.length;
|
|
120
|
+
sortedGroup.forEach(function (schedule, index) {
|
|
121
|
+
schedulesWithGrid.push(__assign(__assign({}, schedule), { gridColumn: index, totalColumns: totalColumns }));
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
return schedulesWithGrid;
|
|
125
|
+
}, [schedules]);
|
|
126
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: timedSchedulesWithGrid.map(function (schedule) {
|
|
127
|
+
var isSelected = selectedSchedules.some(function (s) { return s.id === (schedule === null || schedule === void 0 ? void 0 : schedule.id); });
|
|
128
|
+
var startDate = new Date(schedule.startDate);
|
|
129
|
+
var endDate = new Date(schedule.endDate);
|
|
130
|
+
// 시간을 UTC에서 로컬 시간으로 변환
|
|
131
|
+
var localStartHour = startDate.getHours();
|
|
132
|
+
var localEndHour = endDate.getHours();
|
|
133
|
+
var localStartMinutes = startDate.getMinutes();
|
|
134
|
+
var localEndMinutes = endDate.getMinutes();
|
|
135
|
+
// 시작 시간과 끝 시간 계산 (분 단위)
|
|
136
|
+
var startMinutes = localStartHour * 60 + localStartMinutes;
|
|
137
|
+
var endMinutes = localEndHour * 60 + localEndMinutes;
|
|
138
|
+
var duration = Math.max(endMinutes - startMinutes, 30); // 최소 30분
|
|
139
|
+
// 픽셀 단위로 변환 (각 시간은 60px)
|
|
140
|
+
var top = (startMinutes / 60) * 60;
|
|
141
|
+
var height = (duration / 60) * 60;
|
|
142
|
+
return ((0, jsx_runtime_1.jsx)(S_ScheduleItem, __assign({ "$top": top, "$height": height, "$gridColumn": schedule.gridColumn, "$totalColumns": schedule.totalColumns, "$isSelected": isSelected, "$isDraggable": isDraggable, draggable: isDraggable, onClick: function (e) {
|
|
143
|
+
e.stopPropagation();
|
|
144
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(schedule, e);
|
|
145
|
+
}, onDragStart: function (e) { return handleScheduleDragStart === null || handleScheduleDragStart === void 0 ? void 0 : handleScheduleDragStart(schedule, e); }, onDragEnd: function () { return handleScheduleDragEnd === null || handleScheduleDragEnd === void 0 ? void 0 : handleScheduleDragEnd(); } }, { children: (0, jsx_runtime_1.jsxs)(S_ScheduleContent, { children: [(0, jsx_runtime_1.jsx)(S_ScheduleTime, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "caption2Regular", text: "".concat((0, timeFormatUtils_1.formatTimeWithLocale)(localStartHour, i18n.language, t)), ellipsisMode: "use", singleLineMode: "use", colorTheme: isSelected ? 'sysTextWhite' : undefined }) }), (0, jsx_runtime_1.jsx)(S_ScheduleTitle, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "caption2Bold", text: schedule.title, ellipsisMode: "use", singleLineMode: "use", colorTheme: isSelected ? 'sysTextWhite' : undefined }) })] }) }), schedule.id));
|
|
146
|
+
}) }));
|
|
147
|
+
};
|
|
148
|
+
exports.TimeBasedScheduleItem = TimeBasedScheduleItem;
|
|
149
|
+
var S_ScheduleItem = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: ", ";\n border: 1px solid ", ";\n border-left: 2px solid ", ";\n border-radius: 4px;\n cursor: ", ";\n height: ", "px;\n left: ", ";\n overflow: hidden;\n position: absolute;\n top: ", "px;\n width: ", ";\n z-index: 2;\n\n &:active {\n background: ", ";\n cursor: ", ";\n }\n"], ["\n background: ", ";\n border: 1px solid ", ";\n border-left: 2px solid ", ";\n border-radius: 4px;\n cursor: ", ";\n height: ", "px;\n left: ", ";\n overflow: hidden;\n position: absolute;\n top: ", "px;\n width: ", ";\n z-index: 2;\n\n &:active {\n background: ", ";\n cursor: ", ";\n }\n"])), function (props) {
|
|
150
|
+
if (props.$isSelected)
|
|
151
|
+
return props.theme.ui_cpnt_sheet_base_06;
|
|
152
|
+
return props.theme.ui_cpnt_sheet_base;
|
|
153
|
+
}, function (_a) {
|
|
154
|
+
var theme = _a.theme;
|
|
155
|
+
return theme.ui_temp_white;
|
|
156
|
+
}, function (_a) {
|
|
157
|
+
var theme = _a.theme;
|
|
158
|
+
return theme.ui_temp_grey_02;
|
|
159
|
+
}, function (_a) {
|
|
160
|
+
var $isDraggable = _a.$isDraggable;
|
|
161
|
+
return ($isDraggable ? 'grab' : 'default');
|
|
162
|
+
}, function (_a) {
|
|
163
|
+
var $height = _a.$height;
|
|
164
|
+
return $height - 2;
|
|
165
|
+
}, function (_a) {
|
|
166
|
+
var $gridColumn = _a.$gridColumn, $totalColumns = _a.$totalColumns;
|
|
167
|
+
return "calc(".concat($gridColumn, " * (100% / ").concat($totalColumns, "))");
|
|
168
|
+
}, function (_a) {
|
|
169
|
+
var $top = _a.$top;
|
|
170
|
+
return $top;
|
|
171
|
+
}, function (_a) {
|
|
172
|
+
var $totalColumns = _a.$totalColumns;
|
|
173
|
+
return "calc(100% / ".concat($totalColumns, ")");
|
|
174
|
+
}, function (_a) {
|
|
175
|
+
var theme = _a.theme;
|
|
176
|
+
return theme.ui_cpnt_sheet_base_06;
|
|
177
|
+
}, function (_a) {
|
|
178
|
+
var $isDraggable = _a.$isDraggable;
|
|
179
|
+
return ($isDraggable ? 'grabbing' : 'default');
|
|
180
|
+
});
|
|
181
|
+
var S_ScheduleContent = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n padding: 4px 6px;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n padding: 4px 6px;\n"])));
|
|
182
|
+
var S_ScheduleTitle = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n margin-bottom: 2px;\n"], ["\n margin-bottom: 2px;\n"])));
|
|
183
|
+
var S_ScheduleTime = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n margin-top: auto;\n"], ["\n margin-top: auto;\n"])));
|
|
184
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.WeeklyView = void 0;
|
|
42
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
43
|
+
var react_1 = require("react");
|
|
44
|
+
var react_i18next_1 = require("react-i18next");
|
|
45
|
+
var dateHelper_1 = require("../../../common/utils/dateHelper");
|
|
46
|
+
var styled_components_1 = __importStar(require("styled-components"));
|
|
47
|
+
var TextLabel_1 = require("../TextLabel");
|
|
48
|
+
var AllDaySchedulesSection_1 = require("./AllDaySchedulesSection");
|
|
49
|
+
var CalendarContext_1 = require("./CalendarContext");
|
|
50
|
+
var CurrentTimeIndicator_1 = require("./CurrentTimeIndicator");
|
|
51
|
+
var TimeBasedScheduleItem_1 = require("./TimeBasedScheduleItem");
|
|
52
|
+
var timeFormatUtils_1 = require("./timeFormatUtils");
|
|
53
|
+
var WeeklyView = function (_a) {
|
|
54
|
+
var startOfWeek = _a.startOfWeek;
|
|
55
|
+
var _b = (0, react_i18next_1.useTranslation)(), t = _b.t, i18n = _b.i18n;
|
|
56
|
+
var _c = (0, CalendarContext_1.useCalendarContext)(), selectedDate = _c.selectedDate, selectedSchedules = _c.selectedSchedules, displayAllDayScheduleMode = _c.displayAllDayScheduleMode, getSchedulesForDate = _c.getSchedulesForDate, isToday = _c.isToday, isDragOverDate = _c.isDragOverDate, handleDateDragOver = _c.handleDateDragOver, handleDateDragLeave = _c.handleDateDragLeave, handleDateDrop = _c.handleDateDrop, handleDateClick = _c.handleDateClick, handleScheduleDragStart = _c.handleScheduleDragStart, handleScheduleDragEnd = _c.handleScheduleDragEnd, isDraggable = _c.isDraggable, handleScheduleClick = _c.handleScheduleClick, getDayTextByDate = _c.getDayTextByDate;
|
|
57
|
+
// Generate calendar dates for weekly view
|
|
58
|
+
var calendarDates = (0, react_1.useMemo)(function () {
|
|
59
|
+
var dates = [];
|
|
60
|
+
var startIndex = startOfWeek === 'monday' ? 1 : 0;
|
|
61
|
+
var offset = (selectedDate.getDay() - startIndex + 7) % 7;
|
|
62
|
+
var weekStart = dateHelper_1.DateHelper.addDays(selectedDate, -offset);
|
|
63
|
+
for (var i = 0; i < 7; i += 1) {
|
|
64
|
+
dates.push(dateHelper_1.DateHelper.addDays(weekStart, i));
|
|
65
|
+
}
|
|
66
|
+
return dates;
|
|
67
|
+
}, [selectedDate, startOfWeek]);
|
|
68
|
+
return ((0, jsx_runtime_1.jsxs)(S_WeeklyContainer, { children: [(0, jsx_runtime_1.jsxs)(S_WeeklyHeader, { children: [(0, jsx_runtime_1.jsx)(S_TimeColumnHeader, {}), calendarDates.map(function (date, index) {
|
|
69
|
+
var dayText = getDayTextByDate(date);
|
|
70
|
+
var dateText = t('str_calendar_weekly_date', {
|
|
71
|
+
month: date.getMonth() + 1,
|
|
72
|
+
date: date.getDate(),
|
|
73
|
+
day: dayText
|
|
74
|
+
});
|
|
75
|
+
return ((0, jsx_runtime_1.jsx)(S_WeeklyDayHeader, __assign({ "$isToday": isToday(date) }, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { textAlign: "center", styleTheme: "caption2Bold", colorTheme: isToday(date) ? 'sysTextBrandPrimary' : 'sysTextTertiary', text: dateText }) }), index));
|
|
76
|
+
})] }), (0, jsx_runtime_1.jsx)(AllDaySchedulesSection_1.AllDaySchedulesSection, { calendarDates: calendarDates, displayAllDayScheduleMode: displayAllDayScheduleMode, getSchedulesForDate: getSchedulesForDate, handleDateDragOver: handleDateDragOver, handleDateDragLeave: handleDateDragLeave, handleDateDrop: handleDateDrop }), (0, jsx_runtime_1.jsxs)(S_WeeklyTimeGrid, __assign({ "$displayAllDayScheduleMode": displayAllDayScheduleMode }, { children: [(0, jsx_runtime_1.jsx)(CurrentTimeIndicator_1.CurrentTimeIndicator, { show: true, leftOffset: "80px" }), Array.from({ length: 24 }, function (_unused, hour) { return ((0, jsx_runtime_1.jsxs)(S_TimeRow, { children: [(0, jsx_runtime_1.jsx)(S_TimeLabel, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "caption2Bold", text: (0, timeFormatUtils_1.formatTimeWithLocale)(hour, i18n.language, t), colorTheme: "sysTextTertiary" }) }), (0, jsx_runtime_1.jsx)(S_TimeSlots, { children: calendarDates.map(function (date, dayIndex) {
|
|
77
|
+
var timeSlotDate = new Date(date);
|
|
78
|
+
timeSlotDate.setHours(hour, 0, 0, 0);
|
|
79
|
+
var isDragOver = (isDragOverDate === null || isDragOverDate === void 0 ? void 0 : isDragOverDate.getTime()) === timeSlotDate.getTime();
|
|
80
|
+
return ((0, jsx_runtime_1.jsx)(S_TimeSlot, __assign({ "$isDragOver": isDragOver, "$isDraggable": isDraggable, onClick: function () { return handleDateClick(date, {}); }, onDragOver: function (e) { return handleDateDragOver(timeSlotDate, e); }, onDragLeave: handleDateDragLeave, onDrop: function (e) { return handleDateDrop(timeSlotDate, e); } }, { children: hour === 0 && ((0, jsx_runtime_1.jsx)(TimeBasedScheduleItem_1.TimeBasedScheduleItem, { schedules: getSchedulesForDate(date), selectedSchedules: selectedSchedules, isDraggable: isDraggable, onClick: handleScheduleClick, handleScheduleDragStart: handleScheduleDragStart, handleScheduleDragEnd: handleScheduleDragEnd })) }), dayIndex));
|
|
81
|
+
}) })] }, hour)); })] }))] }));
|
|
82
|
+
};
|
|
83
|
+
exports.WeeklyView = WeeklyView;
|
|
84
|
+
var S_WeeklyContainer = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n height: 100%;\n"], ["\n display: flex;\n flex-direction: column;\n height: 100%;\n"])));
|
|
85
|
+
var S_WeeklyHeader = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 80px repeat(7, 1fr);\n"], ["\n display: grid;\n grid-template-columns: 80px repeat(7, 1fr);\n"])));
|
|
86
|
+
var S_TimeColumnHeader = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject([""], [""])));
|
|
87
|
+
var S_WeeklyDayHeader = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n padding: 12px 8px;\n text-align: center;\n"], ["\n padding: 12px 8px;\n text-align: center;\n"])));
|
|
88
|
+
var S_WeeklyTimeGrid = styled_components_1.default.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n flex: 1;\n overflow-y: auto;\n position: relative;\n ", "\n"], ["\n flex: 1;\n overflow-y: auto;\n position: relative;\n ", "\n"])), function (_a) {
|
|
89
|
+
var $displayAllDayScheduleMode = _a.$displayAllDayScheduleMode;
|
|
90
|
+
return $displayAllDayScheduleMode === 'none' && (0, styled_components_1.css)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n border-top: 1px solid ", ";\n "], ["\n border-top: 1px solid ", ";\n "])), function (_a) {
|
|
91
|
+
var theme = _a.theme;
|
|
92
|
+
return theme.ui_cpnt_divider;
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
var S_TimeRow = styled_components_1.default.div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 80px repeat(7, 1fr);\n height: 60px;\n"], ["\n display: grid;\n grid-template-columns: 80px repeat(7, 1fr);\n height: 60px;\n"])));
|
|
96
|
+
var S_TimeLabel = styled_components_1.default.div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n align-items: center;\n border-bottom: 1px solid ", ";\n border-right: 1px solid ", ";\n display: flex;\n justify-content: center;\n padding: 8px;\n"], ["\n align-items: center;\n border-bottom: 1px solid ", ";\n border-right: 1px solid ", ";\n display: flex;\n justify-content: center;\n padding: 8px;\n"])), function (_a) {
|
|
97
|
+
var theme = _a.theme;
|
|
98
|
+
return theme.ui_cpnt_divider;
|
|
99
|
+
}, function (_a) {
|
|
100
|
+
var theme = _a.theme;
|
|
101
|
+
return theme.ui_cpnt_divider;
|
|
102
|
+
});
|
|
103
|
+
var S_TimeSlots = styled_components_1.default.div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: contents;\n"], ["\n display: contents;\n"])));
|
|
104
|
+
var S_TimeSlot = styled_components_1.default.div(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n background: ", ";\n border-bottom: 1px solid ", ";\n border-right: 1px solid ", ";\n cursor: default;\n min-width: 0;\n overflow: visible;\n position: relative;\n\n &:hover {\n background: ", ";\n }\n"], ["\n background: ", ";\n border-bottom: 1px solid ", ";\n border-right: 1px solid ", ";\n cursor: default;\n min-width: 0;\n overflow: visible;\n position: relative;\n\n &:hover {\n background: ", ";\n }\n"])), function (props) { return (props.$isDragOver ? props.theme.ui_cpnt_sheet_base : 'transparent'); }, function (_a) {
|
|
105
|
+
var theme = _a.theme;
|
|
106
|
+
return theme.ui_cpnt_divider;
|
|
107
|
+
}, function (_a) {
|
|
108
|
+
var theme = _a.theme;
|
|
109
|
+
return theme.ui_cpnt_divider;
|
|
110
|
+
}, function (_a) {
|
|
111
|
+
var theme = _a.theme;
|
|
112
|
+
return theme.ui_cpnt_sheet_base;
|
|
113
|
+
});
|
|
114
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Schedule } from './types';
|
|
2
|
+
import type React from 'react';
|
|
3
|
+
interface YearlyViewProps {
|
|
4
|
+
selectedDate: Date;
|
|
5
|
+
getMonthDates: (year: number, month: number) => Date[];
|
|
6
|
+
getDayTextByDate: (date: Date) => string;
|
|
7
|
+
startOfWeek: 'sunday' | 'monday';
|
|
8
|
+
isToday: (date: Date) => boolean;
|
|
9
|
+
handleDateClick: (date: Date) => void;
|
|
10
|
+
getSchedulesForDate: (date: Date) => Schedule[];
|
|
11
|
+
}
|
|
12
|
+
export declare const YearlyView: React.FC<YearlyViewProps>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.YearlyView = void 0;
|
|
22
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
23
|
+
var react_i18next_1 = require("react-i18next");
|
|
24
|
+
var styled_components_1 = __importDefault(require("styled-components"));
|
|
25
|
+
var TextLabel_1 = require("../TextLabel");
|
|
26
|
+
var YearlyView = function (_a) {
|
|
27
|
+
var selectedDate = _a.selectedDate, getMonthDates = _a.getMonthDates, getDayTextByDate = _a.getDayTextByDate, startOfWeek = _a.startOfWeek, isToday = _a.isToday, handleDateClick = _a.handleDateClick, getSchedulesForDate = _a.getSchedulesForDate;
|
|
28
|
+
var t = (0, react_i18next_1.useTranslation)().t;
|
|
29
|
+
var currentYear = selectedDate.getFullYear();
|
|
30
|
+
var orderedDayTexts = (function () {
|
|
31
|
+
var weekDates = [];
|
|
32
|
+
var today = new Date();
|
|
33
|
+
var startIndex = startOfWeek === 'monday' ? 1 : 0;
|
|
34
|
+
var firstDayOfWeek = new Date(today);
|
|
35
|
+
firstDayOfWeek.setDate(today.getDate() - ((today.getDay() - startIndex + 7) % 7));
|
|
36
|
+
for (var i = 0; i < 7; i += 1) {
|
|
37
|
+
var date = new Date(firstDayOfWeek);
|
|
38
|
+
date.setDate(firstDayOfWeek.getDate() + i);
|
|
39
|
+
weekDates.push(getDayTextByDate(date));
|
|
40
|
+
}
|
|
41
|
+
return weekDates;
|
|
42
|
+
})();
|
|
43
|
+
var getDateColorTheme = function (isTodayDate) {
|
|
44
|
+
if (isTodayDate) {
|
|
45
|
+
return 'sysTextBrandPrimary';
|
|
46
|
+
}
|
|
47
|
+
return 'sysTextTertiary';
|
|
48
|
+
};
|
|
49
|
+
return ((0, jsx_runtime_1.jsx)(S_YearlyGrid, { children: Array.from({ length: 12 }, function (_unused, monthIndex) {
|
|
50
|
+
var monthDates = getMonthDates(currentYear, monthIndex);
|
|
51
|
+
return ((0, jsx_runtime_1.jsxs)(S_YearlyMonth, { children: [(0, jsx_runtime_1.jsx)(S_YearlyMonthHeader, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { text: t("calendar_month_".concat(monthIndex + 1)), styleTheme: "body1Bold", colorTheme: "sysTextBrandPrimary" }) }), (0, jsx_runtime_1.jsxs)(S_YearlyMiniCalendar, { children: [(0, jsx_runtime_1.jsx)(S_YearlyDayHeaders, { children: orderedDayTexts.map(function (day, index) { return ((0, jsx_runtime_1.jsx)(S_YearlyDayHeader, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { text: day, styleTheme: "caption2Regular", textAlign: "center", colorTheme: "sysTextTertiary" }) }, "".concat(day, "-").concat(index))); }) }), (0, jsx_runtime_1.jsx)(S_YearlyDatesGrid, { children: monthDates.map(function (date, dateIndex) {
|
|
52
|
+
var isCurrentMonth = date.getMonth() === monthIndex;
|
|
53
|
+
var isTodayDate = isToday(date);
|
|
54
|
+
var hasSchedule = getSchedulesForDate(date).length > 0;
|
|
55
|
+
return ((0, jsx_runtime_1.jsxs)(S_YearlyDateCell, __assign({ "$isToday": isTodayDate, "$isCurrentMonth": isCurrentMonth, onClick: function () { return handleDateClick(date); } }, { children: [(0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { text: date.getDate().toString(), styleTheme: "caption2Regular", textAlign: "center", colorTheme: getDateColorTheme(isTodayDate) }), hasSchedule && (0, jsx_runtime_1.jsx)(S_Dot, {})] }), dateIndex));
|
|
56
|
+
}) })] })] }, monthIndex));
|
|
57
|
+
}) }));
|
|
58
|
+
};
|
|
59
|
+
exports.YearlyView = YearlyView;
|
|
60
|
+
// Styled Components
|
|
61
|
+
var S_YearlyGrid = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: grid;\n gap: 24px 32px;\n grid-template-columns: repeat(4, 1fr);\n margin: 0 auto;\n max-width: 1200px;\n padding: 24px;\n"], ["\n display: grid;\n gap: 24px 32px;\n grid-template-columns: repeat(4, 1fr);\n margin: 0 auto;\n max-width: 1200px;\n padding: 24px;\n"])));
|
|
62
|
+
var S_YearlyMonth = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 240px;\n"], ["\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 240px;\n"])));
|
|
63
|
+
var S_YearlyMonthHeader = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n padding-left: 4px;\n"], ["\n padding-left: 4px;\n"])));
|
|
64
|
+
var S_YearlyMiniCalendar = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n gap: 4px;\n"], ["\n display: flex;\n flex-direction: column;\n gap: 4px;\n"])));
|
|
65
|
+
var S_YearlyDayHeaders = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: grid;\n gap: 1px;\n grid-template-columns: repeat(7, 1fr);\n"], ["\n display: grid;\n gap: 1px;\n grid-template-columns: repeat(7, 1fr);\n"])));
|
|
66
|
+
var S_YearlyDayHeader = styled_components_1.default.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: 20px;\n padding: 4px 2px;\n text-align: center;\n"], ["\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: 20px;\n padding: 4px 2px;\n text-align: center;\n"])));
|
|
67
|
+
var S_YearlyDatesGrid = styled_components_1.default.div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n display: grid;\n gap: 1px;\n grid-template-columns: repeat(7, 1fr);\n"], ["\n display: grid;\n gap: 1px;\n grid-template-columns: repeat(7, 1fr);\n"])));
|
|
68
|
+
var S_YearlyDateCell = styled_components_1.default.div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n align-items: center;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-height: 24px;\n opacity: ", ";\n\n &:hover {\n background: ", ";\n }\n"], ["\n align-items: center;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-height: 24px;\n opacity: ", ";\n\n &:hover {\n background: ", ";\n }\n"])), function (props) { return (props.$isCurrentMonth ? 1 : 0.3); }, function (_a) {
|
|
69
|
+
var theme = _a.theme;
|
|
70
|
+
return theme.ui_72;
|
|
71
|
+
});
|
|
72
|
+
var S_Dot = styled_components_1.default.div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n background: ", ";\n border-radius: 50%;\n height: 5px;\n margin: 2px auto 0 auto;\n width: 5px;\n"], ["\n background: ", ";\n border-radius: 50%;\n height: 5px;\n margin: 2px auto 0 auto;\n width: 5px;\n"])), function (_a) {
|
|
73
|
+
var theme = _a.theme;
|
|
74
|
+
return theme.ui_cpnt_icon_sys_grey_02;
|
|
75
|
+
});
|
|
76
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CalendarViewType } from './types';
|
|
2
|
+
import type { TFunction } from 'i18next';
|
|
3
|
+
/**
|
|
4
|
+
* 일정이 종일 일정인지 확인하는 함수
|
|
5
|
+
* @param startDate 시작 날짜
|
|
6
|
+
* @param endDate 종료 날짜
|
|
7
|
+
* @returns 종일 일정 여부
|
|
8
|
+
*/
|
|
9
|
+
export declare const calculateIsAllDay: (startDate: Date, endDate: Date) => boolean;
|
|
10
|
+
export declare const calculateDateRange: (viewType: CalendarViewType, baseDate: Date) => {
|
|
11
|
+
startDate: Date;
|
|
12
|
+
endDate: Date;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* 뷰 타입에 따른 헤더 텍스트를 반환하는 함수
|
|
16
|
+
* @param viewType 캘린더 뷰 타입 (DAILY, WEEKLY, MONTHLY, YEARLY)
|
|
17
|
+
* @param selectedDate 선택된 날짜
|
|
18
|
+
* @param t 다국어 변환 함수 (i18next)
|
|
19
|
+
* @param monthNames 월 이름 배열 (예: ['1월', '2월', ...])
|
|
20
|
+
* @param getDayTextByDate 날짜에 따른 요일 텍스트 반환 함수
|
|
21
|
+
* @returns 헤더에 표시할 텍스트
|
|
22
|
+
*/
|
|
23
|
+
export declare const getHeaderText: (viewType: CalendarViewType, selectedDate: Date, t: TFunction) => string;
|
|
24
|
+
export declare const toUTC: (date: Date | null | undefined) => string | null;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toUTC = exports.getHeaderText = exports.calculateDateRange = exports.calculateIsAllDay = void 0;
|
|
4
|
+
var dateHelper_1 = require("../../../common/utils/dateHelper");
|
|
5
|
+
/**
|
|
6
|
+
* 일정이 종일 일정인지 확인하는 함수
|
|
7
|
+
* @param startDate 시작 날짜
|
|
8
|
+
* @param endDate 종료 날짜
|
|
9
|
+
* @returns 종일 일정 여부
|
|
10
|
+
*/
|
|
11
|
+
var calculateIsAllDay = function (startDate, endDate) {
|
|
12
|
+
// 시작 시간이 00:00:00(UTC)이고 종료 시간이 23:59:59(UTC)인 경우를 체크
|
|
13
|
+
var isStartAtMidnight = startDate.getUTCHours() === 0 &&
|
|
14
|
+
startDate.getUTCMinutes() === 0 &&
|
|
15
|
+
startDate.getUTCSeconds() === 0;
|
|
16
|
+
var isEndAtEndOfDay = endDate.getUTCHours() === 23 &&
|
|
17
|
+
endDate.getUTCMinutes() === 59 &&
|
|
18
|
+
endDate.getUTCSeconds() === 59;
|
|
19
|
+
// 시작 시간이 00:00:00(UTC)이고 종료 시간이 23:59:59(UTC)인 경우를 전체일로 간주
|
|
20
|
+
return isStartAtMidnight && isEndAtEndOfDay;
|
|
21
|
+
};
|
|
22
|
+
exports.calculateIsAllDay = calculateIsAllDay;
|
|
23
|
+
var calculateDateRange = function (viewType, baseDate) {
|
|
24
|
+
switch (viewType) {
|
|
25
|
+
case 'DAILY':
|
|
26
|
+
return { startDate: baseDate, endDate: baseDate };
|
|
27
|
+
case 'WEEKLY': {
|
|
28
|
+
var start = new Date(baseDate);
|
|
29
|
+
start.setDate(baseDate.getDate() - baseDate.getDay());
|
|
30
|
+
var end = new Date(start);
|
|
31
|
+
end.setDate(start.getDate() + 6);
|
|
32
|
+
return { startDate: start, endDate: end };
|
|
33
|
+
}
|
|
34
|
+
case 'MONTHLY': {
|
|
35
|
+
var startDate = new Date(baseDate.getFullYear(), baseDate.getMonth(), 1);
|
|
36
|
+
// 실제 MonthlyView에서 보여지는 날짜 배열을 구함
|
|
37
|
+
var days = dateHelper_1.DateHelper.getCalendarDatesForCalendar(startDate, 'sunday');
|
|
38
|
+
return {
|
|
39
|
+
startDate: days[0],
|
|
40
|
+
endDate: days[days.length - 1]
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
case 'YEARLY':
|
|
44
|
+
return {
|
|
45
|
+
startDate: new Date(baseDate.getFullYear(), 0, 1),
|
|
46
|
+
endDate: new Date(baseDate.getFullYear(), 11, 31)
|
|
47
|
+
};
|
|
48
|
+
default:
|
|
49
|
+
return { startDate: baseDate, endDate: baseDate };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
exports.calculateDateRange = calculateDateRange;
|
|
53
|
+
/**
|
|
54
|
+
* 뷰 타입에 따른 헤더 텍스트를 반환하는 함수
|
|
55
|
+
* @param viewType 캘린더 뷰 타입 (DAILY, WEEKLY, MONTHLY, YEARLY)
|
|
56
|
+
* @param selectedDate 선택된 날짜
|
|
57
|
+
* @param t 다국어 변환 함수 (i18next)
|
|
58
|
+
* @param monthNames 월 이름 배열 (예: ['1월', '2월', ...])
|
|
59
|
+
* @param getDayTextByDate 날짜에 따른 요일 텍스트 반환 함수
|
|
60
|
+
* @returns 헤더에 표시할 텍스트
|
|
61
|
+
*/
|
|
62
|
+
var getHeaderText = function (viewType, selectedDate, t) {
|
|
63
|
+
var year = selectedDate.getFullYear();
|
|
64
|
+
var monthNumber = selectedDate.getMonth() + 1;
|
|
65
|
+
var day = selectedDate.getDate();
|
|
66
|
+
if (viewType === 'DAILY') {
|
|
67
|
+
return t('str_calendar_daily_header', { year: year, month: monthNumber, day: day });
|
|
68
|
+
}
|
|
69
|
+
if (viewType === 'WEEKLY') {
|
|
70
|
+
return t('str_calendar_weekly_header', { year: year, month: monthNumber });
|
|
71
|
+
}
|
|
72
|
+
if (viewType === 'MONTHLY') {
|
|
73
|
+
return t('str_calendar_monthly_header', { year: year, month: monthNumber });
|
|
74
|
+
}
|
|
75
|
+
if (viewType === 'YEARLY') {
|
|
76
|
+
return t('str_calendar_yearly_header', { year: year });
|
|
77
|
+
}
|
|
78
|
+
return '';
|
|
79
|
+
};
|
|
80
|
+
exports.getHeaderText = getHeaderText;
|
|
81
|
+
// Date를 UTC 시간으로 변환
|
|
82
|
+
var toUTC = function (date) {
|
|
83
|
+
if (!(date instanceof Date))
|
|
84
|
+
return null;
|
|
85
|
+
return date.toISOString();
|
|
86
|
+
};
|
|
87
|
+
exports.toUTC = toUTC;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getLocaleFromLang: (lang: string) => string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLocaleFromLang = void 0;
|
|
4
|
+
// Map language codes to locales for toLocaleString
|
|
5
|
+
var getLocaleFromLang = function (lang) {
|
|
6
|
+
switch (lang.toLowerCase()) {
|
|
7
|
+
case 'ko':
|
|
8
|
+
case 'ko-kr':
|
|
9
|
+
return 'ko-KR';
|
|
10
|
+
case 'ja':
|
|
11
|
+
case 'ja-jp':
|
|
12
|
+
return 'ja-JP';
|
|
13
|
+
case 'zh':
|
|
14
|
+
case 'zh-cn':
|
|
15
|
+
return 'zh-CN';
|
|
16
|
+
case 'zh-tw':
|
|
17
|
+
return 'zh-TW';
|
|
18
|
+
case 'zh-hk':
|
|
19
|
+
return 'zh-HK';
|
|
20
|
+
case 'fil':
|
|
21
|
+
return 'fil-PH';
|
|
22
|
+
case 'es':
|
|
23
|
+
case 'es-es':
|
|
24
|
+
return 'es-ES';
|
|
25
|
+
case 'en':
|
|
26
|
+
case 'en-us':
|
|
27
|
+
default:
|
|
28
|
+
return 'en-US';
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.getLocaleFromLang = getLocaleFromLang;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { AllDaySchedulesSection } from './AllDaySchedulesSection';
|
|
2
|
+
export { default as Calendar } from './Calendar';
|
|
3
|
+
export { CalendarProvider, useCalendarContext } from './CalendarContext';
|
|
4
|
+
export { DailyView } from './DailyView';
|
|
5
|
+
export { MonthlyView } from './MonthlyView';
|
|
6
|
+
export { ScheduleItem } from './ScheduleItem';
|
|
7
|
+
export { TimeBasedScheduleItem } from './TimeBasedScheduleItem';
|
|
8
|
+
export { WeeklyView } from './WeeklyView';
|
|
9
|
+
export { YearlyView } from './YearlyView';
|
|
10
|
+
export * from './timeFormatUtils';
|
|
11
|
+
export type { CalendarProps, Schedule, CalendarViewType, displayAllDayScheduleMode, StartOfWeek, TodayBtnMode, Config, CalendarAction } from './types';
|
|
12
|
+
export { getLocaleFromLang } from './constants';
|
|
13
|
+
export type { ScheduleItemExtraProps } from './ScheduleItem';
|
|
14
|
+
export type { ScheduleItemExtraProps as CalendarContextExtraProps } from './CalendarContext';
|