@voplus/morpho-workspace 11.2.2 → 11.2.3

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.
Files changed (42) hide show
  1. package/es/modules/calendar/pages/CalendarMonth/index.d.ts +0 -1
  2. package/es/modules/calendar/pages/CalendarMonth/index.js +55 -23
  3. package/es/modules/calendar/pages/CalendarMonth/index.js.map +1 -1
  4. package/es/modules/tasks/components/TaskItem/SubTaskItem.js +4 -1
  5. package/es/modules/tasks/components/TaskItem/SubTaskItem.js.map +1 -1
  6. package/es/routes.js +2 -2
  7. package/es/routes.js.map +1 -1
  8. package/package.json +1 -1
  9. package/es/modules/calendar-board/CalendarBoardRoutes.d.ts +0 -12
  10. package/es/modules/calendar-board/CalendarBoardRoutes.js +0 -28
  11. package/es/modules/calendar-board/CalendarBoardRoutes.js.map +0 -1
  12. package/es/modules/calendar-board/components/CalendarBoardGrid/index.d.ts +0 -45
  13. package/es/modules/calendar-board/components/CalendarBoardGrid/index.js +0 -48
  14. package/es/modules/calendar-board/components/CalendarBoardGrid/index.js.map +0 -1
  15. package/es/modules/calendar-board/components/CalendarEventChip/index.d.ts +0 -22
  16. package/es/modules/calendar-board/components/CalendarEventChip/index.js +0 -20
  17. package/es/modules/calendar-board/components/CalendarEventChip/index.js.map +0 -1
  18. package/es/modules/calendar-board/components/CalendarLegend/index.d.ts +0 -37
  19. package/es/modules/calendar-board/components/CalendarLegend/index.js +0 -81
  20. package/es/modules/calendar-board/components/CalendarLegend/index.js.map +0 -1
  21. package/es/modules/calendar-board/components/CalendarMoreLink/index.d.ts +0 -11
  22. package/es/modules/calendar-board/components/CalendarMoreLink/index.js +0 -12
  23. package/es/modules/calendar-board/components/CalendarMoreLink/index.js.map +0 -1
  24. package/es/modules/calendar-board/components/CalendarSidebar/index.d.ts +0 -27
  25. package/es/modules/calendar-board/components/CalendarSidebar/index.js +0 -43
  26. package/es/modules/calendar-board/components/CalendarSidebar/index.js.map +0 -1
  27. package/es/modules/calendar-board/components/CalendarToolbar/index.d.ts +0 -23
  28. package/es/modules/calendar-board/components/CalendarToolbar/index.js +0 -28
  29. package/es/modules/calendar-board/components/CalendarToolbar/index.js.map +0 -1
  30. package/es/modules/calendar-board/event-meta.d.ts +0 -160
  31. package/es/modules/calendar-board/event-meta.js +0 -209
  32. package/es/modules/calendar-board/event-meta.js.map +0 -1
  33. package/es/modules/calendar-board/pages/CalendarBoard/index.css +0 -262
  34. package/es/modules/calendar-board/pages/CalendarBoard/index.d.ts +0 -4
  35. package/es/modules/calendar-board/pages/CalendarBoard/index.js +0 -201
  36. package/es/modules/calendar-board/pages/CalendarBoard/index.js.map +0 -1
  37. package/es/modules/calendar-board/pages/CalendarBoard/state.d.ts +0 -111
  38. package/es/modules/calendar-board/pages/CalendarBoard/state.js +0 -227
  39. package/es/modules/calendar-board/pages/CalendarBoard/state.js.map +0 -1
  40. package/es/modules/calendar-board/sidebar-data.d.ts +0 -27
  41. package/es/modules/calendar-board/sidebar-data.js +0 -19
  42. package/es/modules/calendar-board/sidebar-data.js.map +0 -1
@@ -1,262 +0,0 @@
1
- /*
2
- * CalendarBoard 的 FullCalendar 皮肤。
3
- *
4
- * FullCalendar 的内部 DOM(表格、日期格、时间轴、+N 徽标)由它自己生成,挂不上 Tailwind 类,
5
- * 因此这里用官方 CSS 变量(--fc-*)为主、少量选择器覆盖为辅。覆盖的选择器都取自
6
- * FullCalendar 6.1 实际注入的默认样式(见 daygrid / timegrid 的 internal.js)。
7
- *
8
- * 颜色一律走 morpho-theme token(var(--color-*) / var(--font-size-*)),不写死色值;
9
- * 事件卡的分类原色在 event-meta.ts 的 CHIP_COLOR_CLASS 里,不走这里。
10
- */
11
-
12
- .calendar-board {
13
- /* ═══ FullCalendar 官方 CSS 变量:把内置皮肤换成设计稿的灰白体系 ═══ */
14
- --fc-border-color: var(--color-border);
15
- --fc-page-bg-color: var(--color-bg-white);
16
- --fc-neutral-bg-color: var(--color-bg-table);
17
- --fc-neutral-text-color: var(--color-font-grey);
18
- --fc-today-bg-color: var(--color-bg-blue-data);
19
- --fc-highlight-color: var(--color-bg-blue-data);
20
- --fc-now-indicator-color: var(--color-font-secondary);
21
- --fc-more-link-bg-color: transparent;
22
- --fc-more-link-text-color: inherit;
23
- /* 事件节点本身不画底色 / 边框:描边浅底由 .calendar-event-chip 负责 */
24
- --fc-event-bg-color: transparent;
25
- --fc-event-border-color: transparent;
26
- --fc-event-text-color: inherit;
27
- --fc-small-font-size: var(--font-size-2xs);
28
-
29
- /* 最后一个事件卡要给 +N 让出的宽度 */
30
- --board-more-gutter: 36px;
31
-
32
- .fc {
33
- font-size: var(--font-size-xs);
34
- }
35
-
36
- /* ═══ 事件节点:剥掉 FullCalendar 自带外观,只剩我们的卡片 ═══ */
37
- .fc-h-event {
38
- border: 0;
39
- background: transparent;
40
- }
41
-
42
- .fc-event-main {
43
- height: 100%;
44
- padding: 0;
45
- }
46
-
47
- /*
48
- * ═══ 只去掉最外圈的边框(内部网格线全部保留)═══
49
- *
50
- * 边缘线一共有三层,来自不同元素,必须分别处理:
51
- *
52
- * 1. .fc-scrollgrid 自身 —— 但 FullCalendar 只让它的上 + 左可见
53
- * (.fc .fc-scrollgrid 把 right/bottom 清零了);
54
- * 2. .fc-scrollgrid 自己的格子(每个 section 一行、一行一个 th/td)——
55
- * 右 + 下都在(FullCalendar 只把它们的 left/top 清零);
56
- * 3. 紧贴外框的内层表格(列头 / 日期网格 / 时间轴)——
57
- * 它们的最后一列、最后一行同样各画一条边线。
58
- *
59
- * 选择器的安全性:每一层每行的**最后一个**格子才是右侧边缘
60
- * (时间轴与泳道的分隔线在行内前两个格子之间,不受影响);
61
- * 底边则只取最后一行的格子,并排除 .fc-col-header —— 它的底边是
62
- * 「列头与日期格之间」的内部线,必须留着。
63
- */
64
- .fc-theme-standard .fc-scrollgrid {
65
- border: 0;
66
- }
67
-
68
- /** 右边缘:所有层级的最后一个格子 */
69
- .fc-scrollgrid tr > *:last-child {
70
- border-right-width: 0;
71
- }
72
-
73
- /** 下边缘:外框自身的最后一行 */
74
- .fc-scrollgrid > tbody > tr:last-child > * {
75
- border-bottom-width: 0;
76
- }
77
-
78
- /**
79
- * 下边缘:最底部那张内层表的最后一行。
80
- *
81
- * 限定在「外框最后一行格子的内部」,而不是所有内层表 ——
82
- * 日视图里全天行在外框第 2 行、并不贴底,它的底边是全天区与时间轴之间的
83
- * 内部分隔线(那条由 .fc-timegrid-divider 负责画),不该被清掉。
84
- */
85
- .fc-scrollgrid > tbody > tr:last-child > * table:not(.fc-col-header) tr:last-child > * {
86
- border-bottom-width: 0;
87
- }
88
-
89
- /* ═══ 列头 SUN / MON / ... ═══ */
90
- .fc-col-header-cell {
91
- background-color: var(--color-bg-white);
92
- }
93
-
94
- .fc-col-header-cell-cushion {
95
- padding: var(--space-sm) var(--space-md);
96
- font-size: var(--font-size-2xs);
97
- font-weight: 600;
98
- letter-spacing: 0.05em;
99
- text-transform: uppercase;
100
- color: var(--color-font-grey);
101
- text-decoration: none;
102
- }
103
-
104
- /* ═══ 月 / 周视图的日期格 ═══ */
105
- /* FullCalendar 默认 row-reverse(日期数字靠右),设计稿是左上角 */
106
- .fc .fc-daygrid-day-top {
107
- flex-direction: row;
108
- }
109
-
110
- .fc-daygrid-day-number {
111
- padding: var(--space-sm) var(--space-md);
112
- font-weight: 500;
113
- color: var(--color-font-primary);
114
- text-decoration: none;
115
- }
116
-
117
- .fc-day-today .fc-daygrid-day-number {
118
- font-weight: 600;
119
- color: var(--color-font-secondary);
120
- }
121
-
122
- .fc-day-other .fc-daygrid-day-number {
123
- color: var(--color-font-disabled);
124
- }
125
-
126
- .fc .fc-daygrid-day-events {
127
- margin: 0 var(--space-sm) var(--space-sm);
128
- }
129
-
130
- .fc-daygrid-event {
131
- margin-top: var(--space-xs);
132
- border-radius: 0;
133
- /* 旧 index.css 同样关掉 nowrap,让长标题能换行 */
134
- white-space: normal;
135
- }
136
-
137
- /* ═══ +N 徽标:外观由 CalendarMoreLink 负责 ═══ */
138
- .fc-daygrid-more-link {
139
- margin: 0;
140
- padding: 0;
141
- border-radius: 0;
142
- text-decoration: none;
143
- }
144
-
145
- .fc-daygrid-more-link:hover {
146
- background-color: transparent;
147
- }
148
-
149
- /*
150
- * +N 与最后一个可见事件卡同排。
151
- *
152
- * 设计稿就是这么排的:最后一张卡让位收窄、+N 紧跟在它右边,而不是单独占一行。
153
- * FullCalendar 没有「内联 +N」的选项;搬运 DOM 也不行 —— Preact 重渲染时会把
154
- * .fc-daygrid-day-bottom 重新插回 .fc-daygrid-day-events,徽标跳回原位
155
- * (实测:setOption("eventSources") 之后节点身份不变,但父级被还原)。
156
- * 因此只能用 CSS 叠回去,好处是天然不受重渲染影响。
157
- *
158
- * 两步:
159
- * 1) 让 +N 脱离文档流,钉在最后一张卡那一行的右侧;
160
- * 2) 让最后一张「可见」卡右侧留出 +N 的位置。
161
- *
162
- * 第 1 步用 position: absolute + bottom: 0,而不是「上移一行」的负 margin:
163
- * 容器底部就是最后一张卡的底部,这样不需要写死卡片高度 —— 卡片样式随时可能调,
164
- * 任何像素常量都会在别人改 py-/text- 的时候静默失准。容器本身有 position: relative
165
- * (FullCalendar 的 unbalanced / balanced 两种布局都会给它定位)。
166
- *
167
- * 门禁用 .fc-daygrid-more-link 而不是 .fc-daygrid-day-bottom:
168
- * 后者是**每个格子都会渲染**的空容器,拿它当条件等于恒真,会让所有格子的
169
- * 最后一张卡都被平白缩窄(这个坑是测试先发现的)。
170
- *
171
- * 关于「最后一个可见卡」:被收起的事件仍然留在 DOM 里(带 inline 的
172
- * visibility: hidden),所以要按可见性过滤。这里刻意拆成两条规则
173
- * (先给所有可见卡留位,再把后面还有可见卡的取消),避免写 :not(:has(~ …))
174
- * 这种嵌套形式 —— 部分 CSS 引擎不支持,那会导致 +N 叠在卡片上面而不是并排。
175
- */
176
- .fc-daygrid-day-events:has(.fc-daygrid-more-link)
177
- > .fc-daygrid-event-harness:not([style*="visibility: hidden"]) {
178
- padding-right: var(--board-more-gutter);
179
- }
180
-
181
- .fc-daygrid-day-events:has(.fc-daygrid-more-link)
182
- > .fc-daygrid-event-harness:not([style*="visibility: hidden"]):has(
183
- ~ .fc-daygrid-event-harness:not([style*="visibility: hidden"])
184
- ) {
185
- padding-right: 0;
186
- }
187
-
188
- .fc .fc-daygrid-day-events:has(.fc-daygrid-more-link) > .fc-daygrid-day-bottom {
189
- position: absolute;
190
- right: 0;
191
- bottom: 0;
192
- display: flex;
193
- justify-content: flex-end;
194
- /* 抵消 FullCalendar 给它的行偏移与左右外边距 */
195
- margin: 0 !important;
196
- }
197
-
198
- /* ═══ 日视图:时间轴 ═══ */
199
- .fc .fc-timegrid-axis-cushion,
200
- .fc .fc-timegrid-slot-label-cushion {
201
- padding: 0 var(--space-md) 0 0;
202
- font-size: var(--font-size-xs);
203
- color: var(--color-font-grey);
204
- }
205
-
206
- .fc .fc-timegrid-axis-cushion {
207
- max-width: none;
208
- }
209
-
210
- .fc-timegrid-event {
211
- border-radius: var(--radius-base);
212
- }
213
-
214
- /* 卡片撑满 FullCalendar 按事件时长算出的定位盒子 */
215
- .fc-timegrid-event .calendar-event-chip {
216
- height: 100%;
217
- }
218
-
219
- .fc .fc-timegrid-now-indicator-line {
220
- border-width: 1.5px 0 0;
221
- }
222
-
223
- /* ═══ 溢出弹层(moreLinkClick 默认 popover)═══ */
224
- .fc-more-popover {
225
- border-radius: var(--radius-base);
226
- box-shadow: var(--shadow-card);
227
- }
228
-
229
- .fc-popover-header {
230
- background-color: var(--color-bg-table);
231
- }
232
-
233
- /* ═══ 滚动条:沿用旧 index.css 的细条写法 ═══ */
234
- .fc-scroller {
235
- &::-webkit-scrollbar {
236
- width: 7px;
237
- height: 7px;
238
- }
239
- &::-webkit-scrollbar-track {
240
- background-color: transparent;
241
- border-radius: 2em;
242
- }
243
- &::-webkit-scrollbar-thumb {
244
- background-color: rgba(0, 0, 0, 0.2);
245
- background-clip: padding-box;
246
- border-radius: 2em;
247
- }
248
- }
249
- }
250
-
251
- /**
252
- * 盖在标题上的透明 DatePicker。
253
- *
254
- * 沿用 CalendarMonth 的 .calendar-ant-picker 做法:点标题即可跳到某月 / 某周 / 某天。
255
- */
256
- .calendar-board-picker {
257
- position: absolute;
258
- inset: 0;
259
- width: 100%;
260
- height: 100%;
261
- opacity: 0;
262
- }
@@ -1,4 +0,0 @@
1
- import React from "react";
2
- import "./index.css";
3
- declare const CalendarBoard: () => React.JSX.Element;
4
- export default CalendarBoard;
@@ -1,201 +0,0 @@
1
- import React, { lazy, Suspense, useEffect, useRef, useState } from "react";
2
- import { observe, useRenderOnChange } from "@voplus/morpho-ui";
3
- import { Alert, message } from "antd";
4
- import Modal from "@voplus/morpho-ui/es/components/Modal";
5
- import { useAction } from "@voplus/morpho-collaboration-action/es/data";
6
- import QuickView from "@voplus/morpho-document-core/es/components/QuickView";
7
- import { useMetaStore, useOnDeleteDocument, ViewContext, ViewContextData, } from "@voplus/morpho-document-core";
8
- import { useOnDeleteWorkSchedule } from "../../../../data/work-schedule/work-schedule-events";
9
- import { FilterOptionsContext, FilterOptionsContextState } from "@voplus/morpho-ui/es/data";
10
- import { useCalendarListEffect, useCalendarStore } from "../../../../data/calendar";
11
- import { useDeepMemo, useTabItem } from "@voplus/morpho-data";
12
- import { runInAction } from "mobx";
13
- import dayjs from "dayjs";
14
- import { ConfigProvider } from "antd";
15
- import antdTheme from "@voplus/morpho-theme/antdTheme";
16
- import FilterView from "@voplus/morpho-ui/es/controls/FilterView";
17
- import EventsFilter from "../../../../controls/filters/EventsFilter";
18
- import { applyDropToEvents, buildDropPayload, findEventById, } from "../../event-meta";
19
- import CalendarToolbar from "../../components/CalendarToolbar";
20
- import CalendarLegend from "../../components/CalendarLegend";
21
- import CalendarBoardGrid from "../../components/CalendarBoardGrid";
22
- import CalendarSidebar from "../../components/CalendarSidebar";
23
- import { FULL_CALENDAR_VIEW, State } from "./state";
24
- import "./index.css";
25
- const ActionPropertiesView = lazy(() => import("@voplus/morpho-collaboration-action/es/components/FollowupAction/PropertiesView"));
26
- const CalendarActionQuickView = ({ id, onCancel }) => {
27
- const [error, setError] = useState();
28
- useAction(id, { onError: setError });
29
- return (React.createElement(Modal, { open: true, footer: null, onCancel: onCancel }, error ? (React.createElement(Alert, { type: "error", showIcon: true, message: "Unable to load event", description: error.message })) : (React.createElement(Suspense, { fallback: null },
30
- React.createElement(ActionPropertiesView, { id: id })))));
31
- };
32
- const CalendarBoard = () => {
33
- const tab = useTabItem();
34
- const meta = useMetaStore();
35
- const [quickViewContext] = useState(() => new ViewContextData("QuickView"));
36
- const filterState = useDeepMemo(() => new FilterOptionsContextState({
37
- defaults: {
38
- filters: [{ c: "OwnerType", o: "contains", v1: JSON.stringify(["My"]), l: "And" }],
39
- page: { Page: 1, PageSize: 200 },
40
- },
41
- }), []);
42
- const [state] = useState(new State());
43
- const [currentTime, setCurrentTime] = useState();
44
- const [calendarApi, setCalendarApi] = useState();
45
- const calendarRef = useRef(null);
46
- const calendar = useCalendarStore();
47
- useEffect(() => {
48
- runInAction(() => (tab.title = "Calendar"));
49
- }, []);
50
- useEffect(() => {
51
- setCalendarApi(calendarRef?.current?.getApi());
52
- }, [calendarRef]);
53
- useOnDeleteDocument((s, doc) => {
54
- state.listOptions = state.listOptions.filter((i) => i.source?.id !== doc.id);
55
- });
56
- useOnDeleteWorkSchedule((s, doc) => {
57
- state.listOptions = state.listOptions.filter((i) => i.source?.id !== doc.id);
58
- });
59
- useRenderOnChange(() => filterState.options);
60
- useCalendarListEffect(null, (list) => {
61
- runInAction(() => {
62
- const events = list;
63
- events.forEach((item) => {
64
- // 事件卡颜色改由 CHIP_COLOR_CLASS 按 source.type 着色(见 event-meta.ts),
65
- // 这里只补齐 source.title,其余沿用 CalendarMonth 的写法
66
- if (item.source)
67
- item.source.title = item.title;
68
- });
69
- state.listOptions = events;
70
- });
71
- }, filterState.options);
72
- /**
73
- * 点击事件卡 / 侧栏条目 → 打开 QuickView。
74
- *
75
- * 保留 source.type/nodeType,让 WorkSchedule、Action 使用各自的加载器。
76
- * 普通 DocumentNode 仍由 QuickView 加载完整文档并处理加载错误。
77
- */
78
- const openSource = (source) => state.openQuickView(source);
79
- const renderQuickView = (source) => {
80
- const props = { id: source.id, visible: true, onCancel: state.closeQuickView };
81
- if (source.type === "Action") {
82
- return (React.createElement(CalendarActionQuickView, { key: source.id, id: source.id, onCancel: state.closeQuickView }));
83
- }
84
- if (!source.nodeType || source.nodeType === "DocumentNode") {
85
- return React.createElement(QuickView, { ...props });
86
- }
87
- return meta.getQuickView(source, props);
88
- };
89
- /** 切换 month / week / day 视图 */
90
- const handleChangeType = (value) => {
91
- runInAction(() => (state.type = value));
92
- calendarApi?.changeView(FULL_CALENDAR_VIEW[value]);
93
- };
94
- /** 日期发生变化的回调 */
95
- const onChange = (date, dateString) => {
96
- const dateText = Array.isArray(dateString) ? dateString[0] : dateString;
97
- setCurrentTime(date);
98
- if (state.type === "week") {
99
- calendarApi?.gotoDate(`${dayjs(date).format("YYYY-MM-DD")}`);
100
- }
101
- else if (dateText) {
102
- calendarApi?.gotoDate(dateText);
103
- }
104
- };
105
- /**
106
- * 当拖动停止并且事件已移至其他日期/时间时触发。
107
- *
108
- * 四件事都和「拖完跳回原位 / 刷新后位置不对」有关,逐条说明:
109
- *
110
- * 1. 时间格式:交给 buildDropPayload 写成**本地时间**的 `YYYY-MM-DDTHH:mm:ss.SSS`,
111
- * 而不是 toISOString()(UTC 时刻,UTC+8 下拖到某天零点时日期会退回前一天,
112
- * 服务端按本地时间解析就落到错误日期)。
113
- * 2. **先乐观写回本地模型再发请求**:请求往返期间只要有任意一次重渲染,事件源就可能
114
- * 被重置,本地数据若还停在旧位置,刚拖过去的卡片会立刻被打回原位 —— 这就是
115
- * 「拖拽当时跳回原位」的直接原因。
116
- * 3. 失败要可见并回退:原先用 `error: "message"`,Store.action 会吞掉异常只弹个 toast,
117
- * 事件仍停在拖过去的位置、看着像保存成功。改成回调显式判断,
118
- * 失败就把本地模型与卡片一起退回拖拽前(changelog 的既有约定:
119
- * 「改进edit处理,错误时UI重设回原值」)。
120
- * 4. 事件源引用稳定:见 state.ts 的 sidebarData 与 CalendarBoardGrid 里的 useMemo。
121
- */
122
- const eventDrop = async (info) => {
123
- const id = info.event.id;
124
- /*
125
- * 拒绝这次拖拽的三种情况都退回,但各自留下可诊断的线索 ——
126
- * 静默 revert 的后果就是用户只看到「拖完立刻跳回」,却无从知道为什么。
127
- */
128
- if (!info.event.extendedProps.allowChangeStart) {
129
- // 服务端没给改期权限(或压根没下发这个字段):这是设计如此,直接退回
130
- console.warn("[CalendarBoard] 该事件不允许改期,已退回", {
131
- id,
132
- allowChangeStart: info.event.extendedProps.allowChangeStart,
133
- extendedProps: Object.keys(info.event.extendedProps ?? {}),
134
- });
135
- info.revert();
136
- return;
137
- }
138
- if (!id) {
139
- // FullCalendar 对没有 id 的事件给的是空字符串,此时无从定位服务端记录
140
- console.warn("[CalendarBoard] 事件没有 id,无法保存改期结果", {
141
- title: info.event.title,
142
- extendedProps: Object.keys(info.event.extendedProps ?? {}),
143
- });
144
- info.revert();
145
- return;
146
- }
147
- const drop = { start: info.event.start, end: info.event.end };
148
- const payload = buildDropPayload(drop);
149
- if (!payload) {
150
- console.warn("[CalendarBoard] 拿不到有效的落点时间,已退回", {
151
- id,
152
- start: info.event.start,
153
- end: info.event.end,
154
- });
155
- info.revert();
156
- return;
157
- }
158
- // 回退用的快照要从列表里取:info.oldEvent 不保证存在,
159
- // 拿不到时回退会静默失效 —— 模型留在新位置、卡片却退回原位,两边不一致
160
- const before = findEventById(state.listOptions, id);
161
- const rollback = { start: before?.start ?? before?.startDate, end: before?.end };
162
- runInAction(() => {
163
- state.listOptions = applyDropToEvents(state.listOptions, id, drop);
164
- });
165
- let failed = false;
166
- await calendar.edit(id, {
167
- data: payload,
168
- error: (error) => {
169
- failed = true;
170
- message.error(error.message);
171
- runInAction(() => {
172
- state.listOptions = applyDropToEvents(state.listOptions, id, rollback);
173
- });
174
- info.revert();
175
- },
176
- });
177
- if (failed)
178
- return;
179
- };
180
- return observe(() => {
181
- /**
182
- * 侧栏、图例、事件卡的推导(纯前端,见 sidebar-data.ts)。
183
- *
184
- * 取的是 state 上的 computed:既保证响应式(observe 是 <Observer>,只追踪它这次
185
- * 渲染读到的 observable),又保证引用稳定 —— 详见 state.ts 里 sidebarData 的注释。
186
- */
187
- const sidebar = state.sidebarData;
188
- return (React.createElement(ConfigProvider, { theme: antdTheme },
189
- React.createElement("div", { className: "calendar-board flex h-full w-full flex-col overflow-hidden text-sm" },
190
- React.createElement(CalendarToolbar, { type: state.type, title: state.title, currentTime: currentTime, onChangeType: handleChangeType, onToday: () => calendarApi?.today(), onPrev: () => calendarApi?.prev(), onNext: () => calendarApi?.next(), onChangeDate: onChange },
191
- React.createElement(FilterOptionsContext.Provider, { value: filterState },
192
- React.createElement(FilterView, { columns: [React.createElement(EventsFilter, { key: "EventsFilter", defaultValue: ["My"] })] }))),
193
- React.createElement(CalendarLegend, { categories: sidebar.summary.categories, onSelectEvent: openSource }),
194
- React.createElement("div", { className: "flex flex-1 min-h-0 overflow-hidden" },
195
- React.createElement(CalendarBoardGrid, { events: sidebar.visibleEvents, initialView: state.type, colorMap: sidebar.summary.colorMap, calendarRef: calendarRef, onSelectEvent: openSource, onEventDrop: eventDrop, onDatesSet: (info) => state.datesRender(info) }),
196
- React.createElement(CalendarSidebar, { upcoming: sidebar.upcoming, search: state.search, tab: state.sidebarTab, onSearch: state.setSearch, onChangeTab: state.setSidebarTab, onSelectEvent: openSource })),
197
- state.quickViewSource ? (React.createElement(ViewContext.Provider, { value: quickViewContext }, renderQuickView(state.quickViewSource))) : null)));
198
- });
199
- };
200
- export default CalendarBoard;
201
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/modules/calendar-board/pages/CalendarBoard/index.tsx"],"names":[],"mappings":"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"}
@@ -1,111 +0,0 @@
1
- import type { CalendarBoardEvent, CalendarBoardSource } from "../../event-meta";
2
- import { type ISidebarData } from "../../sidebar-data";
3
- /** 设计稿工具栏的三个视图 */
4
- export type CalendarViewType = "month" | "week" | "day";
5
- /**
6
- * 视图类型 → FullCalendar 视图名。
7
- *
8
- * - month → dayGridMonth(月格子,对应 calendar-recreation.html)
9
- * - week → dayGridWeek(按天堆叠事件卡、无时间轴,对应 calendar-week-view.html)
10
- * - day → timeGridDay(时间轴,对应 calendar-day-view.html)
11
- *
12
- * 三个视图全部由已安装的 daygrid / timegrid 插件提供,未引入新插件。
13
- */
14
- export declare const FULL_CALENDAR_VIEW: Record<CalendarViewType, string>;
15
- /**
16
- * 上班时段:Day 视图只显示这一段,不再铺满 24 小时。
17
- *
18
- * slotMaxTime 是**开区间**,所以 09:00–18:00 的最后一格正好是 17:00–18:00。
19
- * 这两个值目前只用在 timeGridDay;将来若把周视图换成 timeGridWeek,
20
- * 直接复用即可。
21
- */
22
- export declare const WORKDAY_START_TIME = "09:00:00";
23
- export declare const WORKDAY_END_TIME = "18:00:00";
24
- /**
25
- * 周视图单列最多显示几条事件,其余收进 +N。
26
- *
27
- * 月视图每格只有一两行的空间(全局 DAY_MAX_EVENTS = 2),周视图则是一整列、
28
- * 稿子里单列排了 5 张卡,所以单独给一个宽松的上限,不跟着月视图一起收紧。
29
- */
30
- export declare const WEEK_MAX_EVENTS = 15;
31
- /**
32
- * FullCalendar 的按视图覆盖选项。
33
- *
34
- * dayGridWeek 要还原 calendar-week-view.html:表头只留 SUN..SAT、日期标签落在格子里。
35
- * 收起的口径与月视图不同:不受行数上限约束(dayMaxEventRows: false,同时也让它
36
- * 不跟着全局的 DAY_MAX_EVENTS 一起收紧),只按 WEEK_MAX_EVENTS 这个事件数上限收起。
37
- *
38
- * timeGridDay 只保留上班时段(见 WORKDAY_START_TIME):
39
- * - slotMinTime / slotMaxTime 裁掉时段外的行;
40
- * - scrollTime 让初始滚动停在 9:00(默认值是 06:00,裁掉后已经越界);
41
- * - expandRows 让这 9 小时撑满可用高度,否则默认 30 分钟格高 1.5em,
42
- * 9 小时只有约 320px,高面板下方会留一大片空白。
43
- */
44
- export declare const FULL_CALENDAR_VIEW_OPTIONS: {
45
- dayGridWeek: {
46
- /** 不设行数上限(默认也是 false,这里写出来是为了不被外面的全局配置影响) */
47
- dayMaxEventRows: boolean;
48
- dayMaxEvents: number;
49
- dayHeaderFormat: {
50
- weekday: string;
51
- };
52
- dayCellContent: (arg: any) => string;
53
- };
54
- timeGridDay: {
55
- slotMinTime: string;
56
- slotMaxTime: string;
57
- scrollTime: string;
58
- expandRows: boolean;
59
- };
60
- };
61
- /** 工具栏 MONTH / WEEK / DAY 按钮 */
62
- export declare const VIEW_TYPE_OPTIONS: {
63
- value: CalendarViewType;
64
- label: string;
65
- }[];
66
- /** 侧栏页签 */
67
- export type CalendarSidebarTab = "upcoming" | "activity";
68
- export declare class State {
69
- accessor listOptions: CalendarBoardEvent[];
70
- /** 当前视图类型 */
71
- accessor type: CalendarViewType;
72
- /** FullCalendar 头部日期(由 datesSet 同步) */
73
- accessor title: string;
74
- /** 侧栏搜索关键字(纯前端过滤,不触发重新请求) */
75
- accessor search: string;
76
- /** 被隐藏的事件分类(source.type) */
77
- accessor hiddenTypes: Set<string>;
78
- /** 侧栏页签 */
79
- accessor sidebarTab: CalendarSidebarTab;
80
- /** 保留节点类型,让 QuickView 使用该类型自己的加载入口。 */
81
- accessor quickViewSource: CalendarBoardSource | undefined;
82
- /** 呈现一组新日期时触发。 */
83
- datesRender(info: any): void;
84
- /**
85
- * 切换某个分类的显示 / 隐藏。
86
- *
87
- * 下面三个 action 写成箭头属性:它们会被直接当作 props 传给侧栏,
88
- * 方法体里用到 this,脱离实例调用会抛
89
- * `Cannot set properties of undefined`(MobX 的 action 用调用时的 this 作为 scope)。
90
- */
91
- toggleType: (type: string) => void;
92
- setSearch: (value: string) => void;
93
- setSidebarTab: (tab: CalendarSidebarTab) => void;
94
- /** 打开事件源的 QuickView;缺少来源或 id 时不打开。 */
95
- openQuickView: (source?: CalendarBoardSource) => void;
96
- /** 关闭 QuickView */
97
- closeQuickView: () => void;
98
- /**
99
- * 侧栏 / 图例 / 网格共用的推导结果。
100
- *
101
- * 用 computed 而不是每次渲染现算,关键是为了**引用稳定**:其中的 visibleEvents 会交给
102
- * FullCalendar 当 eventSources,而每次渲染都换一个新数组会让 FullCalendar 重置事件源,
103
- * 用它手上的外部数据覆盖内部状态 —— 刚拖拽出来的位置就会被打回原位。
104
- * 依赖(listOptions / search / hiddenTypes)不变时,这里返回同一个对象。
105
- *
106
- * ⚠️ computed 只在**被观察时**才缓存,所以这个 getter 必须在 observe()(即
107
- * mobx-react-lite 的 <Observer>)内部读 —— 挪到组件体里就会退化成每次现算,
108
- * 引用不再稳定,拖拽结果又会被打回原位。测试里用 autorun 复刻了这个前提。
109
- */
110
- get sidebarData(): ISidebarData;
111
- }