react-native-ll-calendar 0.11.0 → 0.12.0

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.
@@ -9,15 +9,14 @@ import ResourcesCalendarEventPosition from "../../utils/resources-calendar-event
9
9
  import { EVENT_GAP } from "../../constants/size.js";
10
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
11
  const DEFAULT_DATE_COLUMN_WIDTH = 60;
12
+ const DEFAULT_RESOURCE_COLUMN_WIDTH = 80;
12
13
  const DEFAULT_EVENT_HEIGHT = 22;
13
14
  const CELL_BORDER_WIDTH = 0.5;
14
15
  function ResourceRow({
15
16
  resource,
16
17
  dates,
17
18
  dateColumnWidth,
18
- scrollOffset,
19
19
  eventsByResourceId,
20
- renderResourceNameLabel,
21
20
  onPressCell,
22
21
  onLongPressCell,
23
22
  delayLongPressCell,
@@ -28,24 +27,25 @@ function ResourceRow({
28
27
  eventTextStyle,
29
28
  eventEllipsizeMode,
30
29
  cellContainerStyle,
31
- allowFontScaling
30
+ allowFontScaling,
31
+ onLayout,
32
+ inlineBand
32
33
  }) {
33
34
  const resourceEvents = eventsByResourceId.get(resource.id) ?? [];
34
35
  const eventPosition = new ResourcesCalendarEventPosition();
35
36
  return /*#__PURE__*/_jsxs(View, {
36
37
  style: styles.resourceRow,
37
- children: [/*#__PURE__*/_jsx(View, {
38
- style: [styles.resourceNameFixedLabel],
38
+ onLayout: e => onLayout?.(e.nativeEvent.layout.height),
39
+ children: [inlineBand != null && /*#__PURE__*/_jsx(View, {
40
+ style: styles.resourceNameInlineBand,
39
41
  children: /*#__PURE__*/_jsx(View, {
40
42
  style: {
41
- marginLeft: scrollOffset + 4
43
+ marginLeft: inlineBand.scrollOffset + 4
42
44
  },
43
- children: renderResourceNameLabel ? renderResourceNameLabel(resource) : /*#__PURE__*/_jsx(View, {
44
- children: /*#__PURE__*/_jsx(Text, {
45
- allowFontScaling: allowFontScaling,
46
- style: styles.resourceNameFixedLabelText,
47
- children: resource.name
48
- })
45
+ children: inlineBand.renderResourceNameLabel ? inlineBand.renderResourceNameLabel(resource) : /*#__PURE__*/_jsx(Text, {
46
+ allowFontScaling: allowFontScaling,
47
+ style: styles.resourceNameInlineBandText,
48
+ children: resource.name
49
49
  })
50
50
  })
51
51
  }), /*#__PURE__*/_jsx(View, {
@@ -53,7 +53,7 @@ function ResourceRow({
53
53
  children: dates.map((date, dateIndex) => {
54
54
  const djs = dayjs(date);
55
55
 
56
- // この日付が開始日のイベント、または行の先頭で前日から続くイベントを抽出
56
+ // Filter events that start on this date, or events that started before this date and continue into the first cell
57
57
  const filteredEvents = resourceEvents.filter(event => {
58
58
  const startDjs = dayjs(event.start);
59
59
  return startDjs.format('YYYY-MM-DD') === djs.format('YYYY-MM-DD') || dateIndex === 0 && startDjs.isBefore(djs);
@@ -68,7 +68,7 @@ function ResourceRow({
68
68
  return dayjs(a.start).diff(dayjs(b.start));
69
69
  });
70
70
 
71
- // 行番号を考慮してイベントを配置(重複回避)
71
+ // Place events considering occupied row numbers to avoid overlap
72
72
  const rowNums = eventPosition.getRowNums({
73
73
  resourceId: resource.id,
74
74
  date
@@ -104,7 +104,7 @@ function ResourceRow({
104
104
  height: eventHeight,
105
105
  marginBottom: EVENT_GAP
106
106
  }
107
- }, event);
107
+ }, `spacer-${rowIndex}`);
108
108
  }
109
109
  const rawStartDjs = dayjs(event.start);
110
110
  const startDjs = dateIndex === 0 ? djs : dayjs(event.start);
@@ -112,13 +112,13 @@ function ResourceRow({
112
112
  const diffDays = endDjs.startOf('day').diff(startDjs.startOf('day'), 'day');
113
113
  const isPrevDateEvent = dateIndex === 0 && rawStartDjs.isBefore(djs);
114
114
 
115
- // イベントの幅を日数に応じて計算
115
+ // Calculate event width based on the number of days it spans
116
116
  let width = (diffDays + 1) * dateColumnWidth - EVENT_GAP * 2 - CELL_BORDER_WIDTH * 2;
117
117
  if (isPrevDateEvent) {
118
118
  width += EVENT_GAP + 1;
119
119
  }
120
120
 
121
- // 位置情報を記録
121
+ // Record position info
122
122
  eventPosition.push({
123
123
  resourceId: resource.id,
124
124
  startDate: startDjs.toDate(),
@@ -163,12 +163,17 @@ function ResourceRow({
163
163
  }
164
164
  export function ResourcesCalendar(props) {
165
165
  const dateColumnWidth = props.dateColumnWidth ?? DEFAULT_DATE_COLUMN_WIDTH;
166
- const fixedRowCount = props.fixedRowCount ?? 0;
166
+ const isInlineBand = props.resourceNameLayout === 'inline-band';
167
+ const fixedRowCount = isInlineBand ? 0 : props.fixedRowCount ?? 0;
167
168
  const dates = useMemo(() => generateDates(props.fromDate, props.toDate), [props.fromDate, props.toDate]);
168
169
  const monthGroups = useMemo(() => groupDatesByMonth(dates), [dates]);
169
170
  const eventsByResourceId = useMemo(() => {
170
- const map = new Map();
171
+ const deduped = new Map();
171
172
  for (const event of props.events) {
173
+ deduped.set(event.id, event);
174
+ }
175
+ const map = new Map();
176
+ for (const event of deduped.values()) {
172
177
  const list = map.get(event.resourceId) ?? [];
173
178
  list.push(event);
174
179
  map.set(event.resourceId, list);
@@ -188,16 +193,30 @@ export function ResourcesCalendar(props) {
188
193
  }, [monthGroups, dateColumnWidth]);
189
194
  const fixedResources = useMemo(() => props.resources.slice(0, fixedRowCount), [props.resources, fixedRowCount]);
190
195
  const scrollableResources = useMemo(() => props.resources.slice(fixedRowCount), [props.resources, fixedRowCount]);
196
+ const resourceColumnWidth = props.resourceColumnWidth ?? DEFAULT_RESOURCE_COLUMN_WIDTH;
197
+ const [rowHeights, setRowHeights] = useState(new Map());
198
+ const handleRowLayout = useCallback((resourceId, height) => {
199
+ setRowHeights(prev => {
200
+ if (prev.get(resourceId) === height) return prev;
201
+ const next = new Map(prev);
202
+ next.set(resourceId, height);
203
+ return next;
204
+ });
205
+ }, []);
206
+ const [headerHeight, setHeaderHeight] = useState(0);
191
207
  const headerScrollRef = useRef(null);
192
208
  const bodyScrollRef = useRef(null);
209
+ const outerScrollRef = useRef(null);
210
+ const resourceNameScrollRef = useRef(null);
193
211
  const activeScroller = useRef(null);
194
212
  const activeScrollerTimer = useRef(null);
195
213
  const lastScrollX = useRef(0);
196
214
  const [scrollOffset, setScrollOffset] = useState(0);
215
+ const activeVerticalScroller = useRef(null);
197
216
 
198
- // スクロール停止後にラベルを追従させる。
199
- // activeScroller のタイムアウトが切れた = スクロール停止とみなし、
200
- // その時点の lastScrollX state に反映する。
217
+ // Sync the label position after scrolling stops.
218
+ // When the activeScroller timeout fires, treat it as scroll end
219
+ // and commit the current lastScrollX value to state.
201
220
  const releaseActiveScroller = useCallback(() => {
202
221
  activeScroller.current = null;
203
222
  setScrollOffset(lastScrollX.current);
@@ -234,12 +253,34 @@ export function ResourcesCalendar(props) {
234
253
  animated: false
235
254
  });
236
255
  }, [releaseActiveScroller]);
256
+ const handleOuterScroll = useCallback(event => {
257
+ if (activeVerticalScroller.current === 'resourceName') return;
258
+ activeVerticalScroller.current = 'outer';
259
+ const y = event.nativeEvent.contentOffset.y;
260
+ resourceNameScrollRef.current?.scrollTo({
261
+ y,
262
+ animated: false
263
+ });
264
+ }, []);
265
+ const handleResourceNameScroll = useCallback(event => {
266
+ if (activeVerticalScroller.current === 'outer') return;
267
+ activeVerticalScroller.current = 'resourceName';
268
+ const y = event.nativeEvent.contentOffset.y;
269
+ outerScrollRef.current?.scrollTo({
270
+ y,
271
+ animated: false
272
+ });
273
+ }, []);
274
+ const handleOuterScrollEnd = useCallback(() => {
275
+ activeVerticalScroller.current = null;
276
+ }, []);
277
+ const handleResourceNameScrollEnd = useCallback(() => {
278
+ activeVerticalScroller.current = null;
279
+ }, []);
237
280
  const commonRowProps = {
238
281
  dates,
239
282
  dateColumnWidth,
240
- scrollOffset,
241
283
  eventsByResourceId,
242
- renderResourceNameLabel: props.renderResourceNameLabel,
243
284
  onPressCell: props.onPressCell,
244
285
  onLongPressCell: props.onLongPressCell,
245
286
  delayLongPressCell: props.delayLongPressCell,
@@ -250,94 +291,169 @@ export function ResourcesCalendar(props) {
250
291
  eventTextStyle: props.eventTextStyle,
251
292
  eventEllipsizeMode: props.eventEllipsizeMode,
252
293
  cellContainerStyle: props.cellContainerStyle,
253
- allowFontScaling: props.allowFontScaling
294
+ allowFontScaling: props.allowFontScaling,
295
+ inlineBand: isInlineBand ? {
296
+ scrollOffset,
297
+ renderResourceNameLabel: props.renderResourceNameLabel
298
+ } : undefined
254
299
  };
255
- return /*#__PURE__*/_jsxs(ScrollView, {
300
+ const resourceNameColumn = !isInlineBand ? /*#__PURE__*/_jsxs(ScrollView, {
301
+ ref: resourceNameScrollRef,
302
+ style: [styles.resourceNameColumn, {
303
+ width: resourceColumnWidth
304
+ }],
305
+ contentContainerStyle: {
306
+ width: resourceColumnWidth
307
+ },
256
308
  stickyHeaderIndices: [0],
257
- refreshControl: /*#__PURE__*/_jsx(RefreshControl, {
258
- refreshing: !!props.refreshing,
259
- onRefresh: props.onRefresh
260
- }),
261
- children: [/*#__PURE__*/_jsx(ScrollView, {
262
- ref: headerScrollRef,
263
- horizontal: true,
264
- showsHorizontalScrollIndicator: false,
265
- bounces: false,
266
- overScrollMode: "never",
267
- onScroll: handleHeaderScroll,
309
+ showsVerticalScrollIndicator: false,
310
+ bounces: false,
311
+ overScrollMode: "never",
312
+ onScroll: handleResourceNameScroll,
313
+ onScrollEndDrag: handleResourceNameScrollEnd,
314
+ onMomentumScrollEnd: handleResourceNameScrollEnd,
315
+ scrollEventThrottle: 16,
316
+ children: [/*#__PURE__*/_jsxs(View, {
317
+ style: [styles.resourceNameColumn, styles.resourceNameColumnFixed],
318
+ children: [/*#__PURE__*/_jsx(View, {
319
+ style: [styles.resourceNameHeaderSpacer, {
320
+ height: headerHeight
321
+ }]
322
+ }), fixedResources.map(resource => /*#__PURE__*/_jsx(View, {
323
+ style: [styles.resourceNameCell, {
324
+ height: rowHeights.get(resource.id)
325
+ }],
326
+ children: props.renderResourceNameLabel ? props.renderResourceNameLabel(resource) : /*#__PURE__*/_jsx(View, {
327
+ children: /*#__PURE__*/_jsx(Text, {
328
+ allowFontScaling: props.allowFontScaling,
329
+ style: styles.resourceNameFixedLabelText,
330
+ numberOfLines: 1,
331
+ children: resource.name
332
+ })
333
+ })
334
+ }, resource.id))]
335
+ }), /*#__PURE__*/_jsxs(View, {
336
+ children: [scrollableResources.map(resource => /*#__PURE__*/_jsx(View, {
337
+ style: [styles.resourceNameCell, {
338
+ height: rowHeights.get(resource.id)
339
+ }],
340
+ children: props.renderResourceNameLabel ? props.renderResourceNameLabel(resource) : /*#__PURE__*/_jsx(View, {
341
+ children: /*#__PURE__*/_jsx(Text, {
342
+ allowFontScaling: props.allowFontScaling,
343
+ style: styles.resourceNameFixedLabelText,
344
+ numberOfLines: 1,
345
+ children: resource.name
346
+ })
347
+ })
348
+ }, resource.id)), /*#__PURE__*/_jsx(View, {
349
+ style: {
350
+ height: props.bottomSpacing
351
+ }
352
+ })]
353
+ })]
354
+ }) : null;
355
+ return /*#__PURE__*/_jsxs(View, {
356
+ style: styles.container,
357
+ children: [resourceNameColumn, /*#__PURE__*/_jsxs(ScrollView, {
358
+ ref: outerScrollRef,
359
+ style: styles.calendarBody,
360
+ stickyHeaderIndices: [0],
361
+ onScroll: handleOuterScroll,
362
+ onScrollEndDrag: handleOuterScrollEnd,
363
+ onMomentumScrollEnd: handleOuterScrollEnd,
268
364
  scrollEventThrottle: 16,
269
- "data-component-name": "resources-calendar-header-row",
270
- children: /*#__PURE__*/_jsxs(View, {
271
- children: [!props.hiddenMonth && /*#__PURE__*/_jsx(View, {
272
- style: styles.monthHeaderRow,
273
- children: monthGroups.map(({
274
- year,
275
- month
276
- }, index) => {
277
- const {
278
- start: cellStart,
279
- width: cellWidth
280
- } = monthGroupOffsets[index];
281
- const textLeft = Math.max(8, scrollOffset - cellStart + 8);
282
- return /*#__PURE__*/_jsx(View, {
283
- style: [styles.monthHeaderCell, {
284
- width: cellWidth
285
- }],
286
- children: /*#__PURE__*/_jsx(View, {
287
- style: {
288
- marginLeft: textLeft
289
- },
290
- children: props.renderMonthLabel ? props.renderMonthLabel(year, month) : /*#__PURE__*/_jsx(View, {
365
+ overScrollMode: "never",
366
+ bounces: props.onRefresh != null,
367
+ refreshControl: props.onRefresh != null ? /*#__PURE__*/_jsx(RefreshControl, {
368
+ refreshing: props.refreshing ?? false,
369
+ onRefresh: props.onRefresh
370
+ }) : undefined,
371
+ children: [/*#__PURE__*/_jsx(ScrollView, {
372
+ ref: headerScrollRef,
373
+ horizontal: true,
374
+ showsHorizontalScrollIndicator: false,
375
+ bounces: false,
376
+ overScrollMode: "never",
377
+ onScroll: handleHeaderScroll,
378
+ scrollEventThrottle: 16,
379
+ "data-component-name": "resources-calendar-header-row",
380
+ children: /*#__PURE__*/_jsxs(View, {
381
+ children: [/*#__PURE__*/_jsxs(View, {
382
+ onLayout: e => setHeaderHeight(e.nativeEvent.layout.height),
383
+ children: [!props.hiddenMonth && /*#__PURE__*/_jsx(View, {
384
+ style: styles.monthHeaderRow,
385
+ children: monthGroups.map(({
386
+ year,
387
+ month
388
+ }, index) => {
389
+ const {
390
+ start: cellStart,
391
+ width: cellWidth
392
+ } = monthGroupOffsets[index];
393
+ const textLeft = Math.max(8, scrollOffset - cellStart + 8);
394
+ return /*#__PURE__*/_jsx(View, {
395
+ style: [styles.monthHeaderCell, {
396
+ width: cellWidth
397
+ }],
398
+ children: /*#__PURE__*/_jsx(View, {
399
+ style: {
400
+ marginLeft: textLeft
401
+ },
402
+ children: props.renderMonthLabel ? props.renderMonthLabel(year, month) : /*#__PURE__*/_jsx(View, {
403
+ children: /*#__PURE__*/_jsx(Text, {
404
+ numberOfLines: 1,
405
+ allowFontScaling: props.allowFontScaling,
406
+ style: styles.monthHeaderText,
407
+ children: dayjs(`${year}-${month}-01`).format('YYYY/MM')
408
+ })
409
+ })
410
+ })
411
+ }, `${year}-${month}`);
412
+ })
413
+ }), /*#__PURE__*/_jsx(View, {
414
+ style: styles.headerRow,
415
+ children: dates.map(date => /*#__PURE__*/_jsx(View, {
416
+ "data-component-name": "resources-calendar-date-cell",
417
+ style: [styles.dateCellContainer, {
418
+ width: dateColumnWidth
419
+ }, props.dateCellContainerStyle?.(date)],
420
+ children: props.renderDateLabel ? props.renderDateLabel(date) : /*#__PURE__*/_jsx(View, {
291
421
  children: /*#__PURE__*/_jsx(Text, {
292
- numberOfLines: 1,
293
422
  allowFontScaling: props.allowFontScaling,
294
- style: styles.monthHeaderText,
295
- children: dayjs(`${year}-${month}-01`).format('YYYY/MM')
423
+ children: dayjs(date).format('D(ddd)')
296
424
  })
297
425
  })
298
- })
299
- }, `${year}-${month}`);
300
- })
301
- }), /*#__PURE__*/_jsx(View, {
302
- style: styles.headerRow,
303
- children: dates.map(date => /*#__PURE__*/_jsx(View, {
304
- "data-component-name": "resources-calendar-date-cell",
305
- style: [styles.dateCellContainer, {
306
- width: dateColumnWidth
307
- }, props.dateCellContainerStyle?.(date)],
308
- children: props.renderDateLabel ? props.renderDateLabel(date) : /*#__PURE__*/_jsx(View, {
309
- children: /*#__PURE__*/_jsx(Text, {
310
- allowFontScaling: props.allowFontScaling,
311
- children: dayjs(date).format('D(ddd)')
312
- })
313
- })
314
- }, date.getTime()))
315
- }), /*#__PURE__*/_jsx(View, {
316
- children: fixedResources.map(resource => /*#__PURE__*/_jsx(ResourceRow, {
426
+ }, date.getTime()))
427
+ })]
428
+ }), /*#__PURE__*/_jsx(View, {
429
+ children: fixedResources.map(resource => /*#__PURE__*/_jsx(ResourceRow, {
430
+ resource: resource,
431
+ ...commonRowProps,
432
+ onLayout: height => handleRowLayout(resource.id, height)
433
+ }, resource.id))
434
+ })]
435
+ })
436
+ }), /*#__PURE__*/_jsx(ScrollView, {
437
+ ref: bodyScrollRef,
438
+ horizontal: true,
439
+ showsHorizontalScrollIndicator: false,
440
+ bounces: false,
441
+ overScrollMode: "never",
442
+ onScroll: handleBodyScroll,
443
+ scrollEventThrottle: 16,
444
+ "data-component-name": "resources-calendar-body-row",
445
+ children: /*#__PURE__*/_jsx(View, {
446
+ children: scrollableResources.map(resource => /*#__PURE__*/_jsx(ResourceRow, {
317
447
  resource: resource,
318
- ...commonRowProps
448
+ ...commonRowProps,
449
+ onLayout: height => handleRowLayout(resource.id, height)
319
450
  }, resource.id))
320
- })]
321
- })
322
- }), /*#__PURE__*/_jsx(ScrollView, {
323
- ref: bodyScrollRef,
324
- horizontal: true,
325
- showsHorizontalScrollIndicator: false,
326
- bounces: false,
327
- overScrollMode: "never",
328
- onScroll: handleBodyScroll,
329
- scrollEventThrottle: 16,
330
- "data-component-name": "resources-calendar-body-row",
331
- children: /*#__PURE__*/_jsx(View, {
332
- children: scrollableResources.map(resource => /*#__PURE__*/_jsx(ResourceRow, {
333
- resource: resource,
334
- ...commonRowProps
335
- }, resource.id))
336
- })
337
- }), /*#__PURE__*/_jsx(View, {
338
- style: {
339
- height: props.bottomSpacing
340
- }
451
+ })
452
+ }), /*#__PURE__*/_jsx(View, {
453
+ style: {
454
+ height: props.bottomSpacing
455
+ }
456
+ })]
341
457
  })]
342
458
  });
343
459
  }
@@ -373,11 +489,6 @@ const styles = StyleSheet.create({
373
489
  borderRightWidth: CELL_BORDER_WIDTH,
374
490
  borderColor: 'lightslategrey'
375
491
  },
376
- resourceNameCellContainer: {
377
- width: 80,
378
- borderRightWidth: CELL_BORDER_WIDTH,
379
- borderColor: 'lightslategrey'
380
- },
381
492
  resourceRow: {
382
493
  flexDirection: 'column',
383
494
  borderBottomWidth: CELL_BORDER_WIDTH,
@@ -395,16 +506,44 @@ const styles = StyleSheet.create({
395
506
  borderRightWidth: CELL_BORDER_WIDTH,
396
507
  borderColor: 'lightslategrey'
397
508
  },
509
+ container: {
510
+ flexDirection: 'row',
511
+ flex: 1
512
+ },
513
+ calendarBody: {
514
+ flex: 1
515
+ },
398
516
  resourceNameColumn: {
399
- width: 80
517
+ borderRightWidth: CELL_BORDER_WIDTH,
518
+ borderRightColor: 'lightslategrey',
519
+ flexGrow: 0,
520
+ flexShrink: 0
521
+ },
522
+ resourceNameColumnFixed: {
523
+ backgroundColor: 'white'
524
+ },
525
+ resourceNameHeaderSpacer: {
526
+ borderBottomWidth: CELL_BORDER_WIDTH,
527
+ borderBottomColor: 'lightslategrey'
528
+ },
529
+ resourceNameCell: {
530
+ borderBottomWidth: CELL_BORDER_WIDTH,
531
+ borderBottomColor: 'lightslategrey',
532
+ justifyContent: 'center',
533
+ paddingHorizontal: 4,
534
+ minHeight: 30
400
535
  },
401
- resourceNameFixedLabel: {
536
+ resourceNameFixedLabelText: {
537
+ fontSize: 12,
538
+ color: 'black'
539
+ },
540
+ resourceNameInlineBand: {
402
541
  width: '100%',
403
542
  borderBottomWidth: CELL_BORDER_WIDTH,
404
543
  borderColor: 'lightslategrey',
405
544
  backgroundColor: '#EEEEEE'
406
545
  },
407
- resourceNameFixedLabelText: {
546
+ resourceNameInlineBandText: {
408
547
  fontSize: 12,
409
548
  color: 'black'
410
549
  },
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMemo","useRef","useState","RefreshControl","ScrollView","StyleSheet","Text","TouchableOpacity","View","generateDates","groupDatesByMonth","dayjs","ResourcesCalendarEventPosition","EVENT_GAP","jsx","_jsx","jsxs","_jsxs","DEFAULT_DATE_COLUMN_WIDTH","DEFAULT_EVENT_HEIGHT","CELL_BORDER_WIDTH","ResourceRow","resource","dates","dateColumnWidth","scrollOffset","eventsByResourceId","renderResourceNameLabel","onPressCell","onLongPressCell","delayLongPressCell","onPressEvent","onLongPressEvent","delayLongPressEvent","eventHeight","eventTextStyle","eventEllipsizeMode","cellContainerStyle","allowFontScaling","resourceEvents","get","id","eventPosition","style","styles","resourceRow","children","resourceNameFixedLabel","marginLeft","resourceNameFixedLabelText","name","resourceRowContentArea","map","date","dateIndex","djs","filteredEvents","filter","event","startDjs","start","format","isBefore","sort","a","b","aStartDjs","bStartDjs","aDiffDays","end","startOf","diff","bDiffDays","rowNums","getRowNums","resourceId","cellEvents","rowsLength","length","eventIndex","ii","includes","push","contentCellContainer","width","zIndex","onPress","onLongPress","delayLongPress","activeOpacity","rowIndex","height","marginBottom","rawStartDjs","endDjs","diffDays","isPrevDateEvent","startDate","toDate","days","rowNum","backgroundColor","borderColor","borderStyle","undefined","borderWidth","borderRadius","prevDateEvent","numberOfLines","ellipsizeMode","eventTitle","color","title","getTime","ResourcesCalendar","props","fixedRowCount","fromDate","monthGroups","Map","events","list","set","monthGroupOffsets","offset","group","fixedResources","resources","slice","scrollableResources","headerScrollRef","bodyScrollRef","activeScroller","activeScrollerTimer","lastScrollX","setScrollOffset","releaseActiveScroller","current","handleHeaderScroll","x","nativeEvent","contentOffset","clearTimeout","setTimeout","scrollTo","animated","handleBodyScroll","commonRowProps","stickyHeaderIndices","refreshControl","refreshing","onRefresh","ref","horizontal","showsHorizontalScrollIndicator","bounces","overScrollMode","onScroll","scrollEventThrottle","hiddenMonth","monthHeaderRow","year","month","index","cellStart","cellWidth","textLeft","Math","max","monthHeaderCell","renderMonthLabel","monthHeaderText","headerRow","dateCellContainer","dateCellContainerStyle","renderDateLabel","bottomSpacing","create","flexDirection","justifyContent","alignItems","overflow","borderRightWidth","borderRightColor","borderTopWidth","borderTopColor","fontSize","borderBottomWidth","borderBottomColor","resourceNameCellContainer","minHeight","paddingBottom","resourceNameColumn","paddingHorizontal","marginTop","borderTopStartRadius","borderBottomStartRadius"],"sourceRoot":"../../../../src","sources":["calendar/resources-calendar/ResourcesCalendar.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useMemo","useRef","useState","RefreshControl","ScrollView","StyleSheet","Text","TouchableOpacity","View","generateDates","groupDatesByMonth","dayjs","ResourcesCalendarEventPosition","EVENT_GAP","jsx","_jsx","jsxs","_jsxs","DEFAULT_DATE_COLUMN_WIDTH","DEFAULT_RESOURCE_COLUMN_WIDTH","DEFAULT_EVENT_HEIGHT","CELL_BORDER_WIDTH","ResourceRow","resource","dates","dateColumnWidth","eventsByResourceId","onPressCell","onLongPressCell","delayLongPressCell","onPressEvent","onLongPressEvent","delayLongPressEvent","eventHeight","eventTextStyle","eventEllipsizeMode","cellContainerStyle","allowFontScaling","onLayout","inlineBand","resourceEvents","get","id","eventPosition","style","styles","resourceRow","e","nativeEvent","layout","height","children","resourceNameInlineBand","marginLeft","scrollOffset","renderResourceNameLabel","resourceNameInlineBandText","name","resourceRowContentArea","map","date","dateIndex","djs","filteredEvents","filter","event","startDjs","start","format","isBefore","sort","a","b","aStartDjs","bStartDjs","aDiffDays","end","startOf","diff","bDiffDays","rowNums","getRowNums","resourceId","cellEvents","rowsLength","length","eventIndex","ii","includes","push","contentCellContainer","width","zIndex","onPress","onLongPress","delayLongPress","activeOpacity","rowIndex","marginBottom","rawStartDjs","endDjs","diffDays","isPrevDateEvent","startDate","toDate","days","rowNum","backgroundColor","borderColor","borderStyle","undefined","borderWidth","borderRadius","prevDateEvent","numberOfLines","ellipsizeMode","eventTitle","color","title","getTime","ResourcesCalendar","props","isInlineBand","resourceNameLayout","fixedRowCount","fromDate","monthGroups","deduped","Map","events","set","values","list","monthGroupOffsets","offset","group","fixedResources","resources","slice","scrollableResources","resourceColumnWidth","rowHeights","setRowHeights","handleRowLayout","prev","next","headerHeight","setHeaderHeight","headerScrollRef","bodyScrollRef","outerScrollRef","resourceNameScrollRef","activeScroller","activeScrollerTimer","lastScrollX","setScrollOffset","activeVerticalScroller","releaseActiveScroller","current","handleHeaderScroll","x","contentOffset","clearTimeout","setTimeout","scrollTo","animated","handleBodyScroll","handleOuterScroll","y","handleResourceNameScroll","handleOuterScrollEnd","handleResourceNameScrollEnd","commonRowProps","resourceNameColumn","ref","contentContainerStyle","stickyHeaderIndices","showsVerticalScrollIndicator","bounces","overScrollMode","onScroll","onScrollEndDrag","onMomentumScrollEnd","scrollEventThrottle","resourceNameColumnFixed","resourceNameHeaderSpacer","resourceNameCell","resourceNameFixedLabelText","bottomSpacing","container","calendarBody","onRefresh","refreshControl","refreshing","horizontal","showsHorizontalScrollIndicator","hiddenMonth","monthHeaderRow","year","month","index","cellStart","cellWidth","textLeft","Math","max","monthHeaderCell","renderMonthLabel","monthHeaderText","headerRow","dateCellContainer","dateCellContainerStyle","renderDateLabel","create","flexDirection","justifyContent","alignItems","overflow","borderRightWidth","borderRightColor","borderTopWidth","borderTopColor","fontSize","borderBottomWidth","borderBottomColor","minHeight","paddingBottom","flex","flexGrow","flexShrink","paddingHorizontal","marginTop","borderTopStartRadius","borderBottomStartRadius"],"sourceRoot":"../../../../src","sources":["calendar/resources-calendar/ResourcesCalendar.tsx"],"mappings":"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","ignoreList":[]}
@@ -28,6 +28,7 @@ type ResourcesCalendarProps = {
28
28
  cellContainerStyle?: (resource: CalendarResource, date: Date) => ViewStyle;
29
29
  hiddenMonth?: boolean;
30
30
  allowFontScaling?: boolean;
31
+ resourceNameLayout?: 'fixed-column' | 'inline-band';
31
32
  };
32
33
  export declare function ResourcesCalendar(props: ResourcesCalendarProps): import("react/jsx-runtime").JSX.Element;
33
34
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesCalendar.d.ts","sourceRoot":"","sources":["../../../../../src/calendar/resources-calendar/ResourcesCalendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAMf,MAAM,cAAc,CAAC;AAOtB,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACpD,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACtE,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IAC5E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/D,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAClD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,SAAS,CAAC;IACrD,kBAAkB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACzD,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC;IACnD,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AA2NF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAiO9D"}
1
+ {"version":3,"file":"ResourcesCalendar.d.ts","sourceRoot":"","sources":["../../../../../src/calendar/resources-calendar/ResourcesCalendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAMf,MAAM,cAAc,CAAC;AAOtB,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACpD,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACtE,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IAC5E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/D,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAClD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,SAAS,CAAC;IACrD,kBAAkB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACzD,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC;IACnD,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;CACrD,CAAC;AAkOF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAwX9D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-ll-calendar",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "ReactNative Calendar Library",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -47,9 +47,11 @@ type ResourcesCalendarProps = {
47
47
  cellContainerStyle?: (resource: CalendarResource, date: Date) => ViewStyle;
48
48
  hiddenMonth?: boolean;
49
49
  allowFontScaling?: boolean;
50
+ resourceNameLayout?: 'fixed-column' | 'inline-band';
50
51
  };
51
52
 
52
53
  const DEFAULT_DATE_COLUMN_WIDTH = 60;
54
+ const DEFAULT_RESOURCE_COLUMN_WIDTH = 80;
53
55
  const DEFAULT_EVENT_HEIGHT = 22;
54
56
  const CELL_BORDER_WIDTH = 0.5;
55
57
 
@@ -57,9 +59,7 @@ type ResourceRowProps = {
57
59
  resource: CalendarResource;
58
60
  dates: Date[];
59
61
  dateColumnWidth: number;
60
- scrollOffset: number;
61
62
  eventsByResourceId: Map<string, CalendarEvent[]>;
62
- renderResourceNameLabel?: (resource: CalendarResource) => React.JSX.Element;
63
63
  onPressCell?: (resource: CalendarResource, date: Date) => void;
64
64
  onLongPressCell?: (resource: CalendarResource, date: Date) => void;
65
65
  delayLongPressCell?: number;
@@ -71,15 +71,18 @@ type ResourceRowProps = {
71
71
  eventEllipsizeMode?: 'head' | 'middle' | 'tail' | 'clip';
72
72
  cellContainerStyle?: (resource: CalendarResource, date: Date) => ViewStyle;
73
73
  allowFontScaling?: boolean;
74
+ onLayout?: (height: number) => void;
75
+ inlineBand?: {
76
+ scrollOffset: number;
77
+ renderResourceNameLabel?: (resource: CalendarResource) => React.JSX.Element;
78
+ };
74
79
  };
75
80
 
76
81
  function ResourceRow({
77
82
  resource,
78
83
  dates,
79
84
  dateColumnWidth,
80
- scrollOffset,
81
85
  eventsByResourceId,
82
- renderResourceNameLabel,
83
86
  onPressCell,
84
87
  onLongPressCell,
85
88
  delayLongPressCell,
@@ -91,33 +94,38 @@ function ResourceRow({
91
94
  eventEllipsizeMode,
92
95
  cellContainerStyle,
93
96
  allowFontScaling,
97
+ onLayout,
98
+ inlineBand,
94
99
  }: ResourceRowProps) {
95
100
  const resourceEvents = eventsByResourceId.get(resource.id) ?? [];
96
101
  const eventPosition = new ResourcesCalendarEventPosition();
97
102
 
98
103
  return (
99
- <View style={styles.resourceRow}>
100
- <View style={[styles.resourceNameFixedLabel]}>
101
- <View style={{ marginLeft: scrollOffset + 4 }}>
102
- {renderResourceNameLabel ? (
103
- renderResourceNameLabel(resource)
104
- ) : (
105
- <View>
104
+ <View
105
+ style={styles.resourceRow}
106
+ onLayout={(e) => onLayout?.(e.nativeEvent.layout.height)}
107
+ >
108
+ {inlineBand != null && (
109
+ <View style={styles.resourceNameInlineBand}>
110
+ <View style={{ marginLeft: inlineBand.scrollOffset + 4 }}>
111
+ {inlineBand.renderResourceNameLabel ? (
112
+ inlineBand.renderResourceNameLabel(resource)
113
+ ) : (
106
114
  <Text
107
115
  allowFontScaling={allowFontScaling}
108
- style={styles.resourceNameFixedLabelText}
116
+ style={styles.resourceNameInlineBandText}
109
117
  >
110
118
  {resource.name}
111
119
  </Text>
112
- </View>
113
- )}
120
+ )}
121
+ </View>
114
122
  </View>
115
- </View>
123
+ )}
116
124
  <View style={styles.resourceRowContentArea}>
117
125
  {dates.map((date, dateIndex) => {
118
126
  const djs = dayjs(date);
119
127
 
120
- // この日付が開始日のイベント、または行の先頭で前日から続くイベントを抽出
128
+ // Filter events that start on this date, or events that started before this date and continue into the first cell
121
129
  const filteredEvents = resourceEvents
122
130
  .filter((event) => {
123
131
  const startDjs = dayjs(event.start);
@@ -141,7 +149,7 @@ function ResourceRow({
141
149
  return dayjs(a.start).diff(dayjs(b.start));
142
150
  });
143
151
 
144
- // 行番号を考慮してイベントを配置(重複回避)
152
+ // Place events considering occupied row numbers to avoid overlap
145
153
  const rowNums = eventPosition.getRowNums({
146
154
  resourceId: resource.id,
147
155
  date,
@@ -179,7 +187,7 @@ function ResourceRow({
179
187
  if (typeof event === 'number') {
180
188
  return (
181
189
  <View
182
- key={event}
190
+ key={`spacer-${rowIndex}`}
183
191
  style={{
184
192
  height: eventHeight,
185
193
  marginBottom: EVENT_GAP,
@@ -197,7 +205,7 @@ function ResourceRow({
197
205
  const isPrevDateEvent =
198
206
  dateIndex === 0 && rawStartDjs.isBefore(djs);
199
207
 
200
- // イベントの幅を日数に応じて計算
208
+ // Calculate event width based on the number of days it spans
201
209
  let width =
202
210
  (diffDays + 1) * dateColumnWidth -
203
211
  EVENT_GAP * 2 -
@@ -206,7 +214,7 @@ function ResourceRow({
206
214
  width += EVENT_GAP + 1;
207
215
  }
208
216
 
209
- // 位置情報を記録
217
+ // Record position info
210
218
  eventPosition.push({
211
219
  resourceId: resource.id,
212
220
  startDate: startDjs.toDate(),
@@ -268,7 +276,8 @@ type ScrollViewRef = React.ComponentRef<typeof ScrollView>;
268
276
 
269
277
  export function ResourcesCalendar(props: ResourcesCalendarProps) {
270
278
  const dateColumnWidth = props.dateColumnWidth ?? DEFAULT_DATE_COLUMN_WIDTH;
271
- const fixedRowCount = props.fixedRowCount ?? 0;
279
+ const isInlineBand = props.resourceNameLayout === 'inline-band';
280
+ const fixedRowCount = isInlineBand ? 0 : (props.fixedRowCount ?? 0);
272
281
 
273
282
  const dates = useMemo(
274
283
  () => generateDates(props.fromDate, props.toDate),
@@ -278,8 +287,12 @@ export function ResourcesCalendar(props: ResourcesCalendarProps) {
278
287
  const monthGroups = useMemo(() => groupDatesByMonth(dates), [dates]);
279
288
 
280
289
  const eventsByResourceId = useMemo(() => {
281
- const map = new Map<string, CalendarEvent[]>();
290
+ const deduped = new Map<string, CalendarEvent>();
282
291
  for (const event of props.events) {
292
+ deduped.set(event.id, event);
293
+ }
294
+ const map = new Map<string, CalendarEvent[]>();
295
+ for (const event of deduped.values()) {
283
296
  const list = map.get(event.resourceId) ?? [];
284
297
  list.push(event);
285
298
  map.set(event.resourceId, list);
@@ -305,8 +318,25 @@ export function ResourcesCalendar(props: ResourcesCalendarProps) {
305
318
  [props.resources, fixedRowCount]
306
319
  );
307
320
 
321
+ const resourceColumnWidth =
322
+ props.resourceColumnWidth ?? DEFAULT_RESOURCE_COLUMN_WIDTH;
323
+
324
+ const [rowHeights, setRowHeights] = useState<Map<string, number>>(new Map());
325
+ const handleRowLayout = useCallback((resourceId: string, height: number) => {
326
+ setRowHeights((prev) => {
327
+ if (prev.get(resourceId) === height) return prev;
328
+ const next = new Map(prev);
329
+ next.set(resourceId, height);
330
+ return next;
331
+ });
332
+ }, []);
333
+
334
+ const [headerHeight, setHeaderHeight] = useState(0);
335
+
308
336
  const headerScrollRef = useRef<ScrollViewRef>(null);
309
337
  const bodyScrollRef = useRef<ScrollViewRef>(null);
338
+ const outerScrollRef = useRef<ScrollViewRef>(null);
339
+ const resourceNameScrollRef = useRef<ScrollViewRef>(null);
310
340
  const activeScroller = useRef<'header' | 'body' | null>(null);
311
341
  const activeScrollerTimer = useRef<ReturnType<typeof setTimeout> | null>(
312
342
  null
@@ -314,9 +344,11 @@ export function ResourcesCalendar(props: ResourcesCalendarProps) {
314
344
  const lastScrollX = useRef(0);
315
345
  const [scrollOffset, setScrollOffset] = useState(0);
316
346
 
317
- // スクロール停止後にラベルを追従させる。
318
- // activeScroller のタイムアウトが切れた = スクロール停止とみなし、
319
- // その時点の lastScrollX state に反映する。
347
+ const activeVerticalScroller = useRef<'outer' | 'resourceName' | null>(null);
348
+
349
+ // Sync the label position after scrolling stops.
350
+ // When the activeScroller timeout fires, treat it as scroll end
351
+ // and commit the current lastScrollX value to state.
320
352
  const releaseActiveScroller = useCallback(() => {
321
353
  activeScroller.current = null;
322
354
  setScrollOffset(lastScrollX.current);
@@ -360,12 +392,38 @@ export function ResourcesCalendar(props: ResourcesCalendarProps) {
360
392
  [releaseActiveScroller]
361
393
  );
362
394
 
395
+ const handleOuterScroll = useCallback(
396
+ (event: NativeSyntheticEvent<NativeScrollEvent>) => {
397
+ if (activeVerticalScroller.current === 'resourceName') return;
398
+ activeVerticalScroller.current = 'outer';
399
+ const y = event.nativeEvent.contentOffset.y;
400
+ resourceNameScrollRef.current?.scrollTo({ y, animated: false });
401
+ },
402
+ []
403
+ );
404
+
405
+ const handleResourceNameScroll = useCallback(
406
+ (event: NativeSyntheticEvent<NativeScrollEvent>) => {
407
+ if (activeVerticalScroller.current === 'outer') return;
408
+ activeVerticalScroller.current = 'resourceName';
409
+ const y = event.nativeEvent.contentOffset.y;
410
+ outerScrollRef.current?.scrollTo({ y, animated: false });
411
+ },
412
+ []
413
+ );
414
+
415
+ const handleOuterScrollEnd = useCallback(() => {
416
+ activeVerticalScroller.current = null;
417
+ }, []);
418
+
419
+ const handleResourceNameScrollEnd = useCallback(() => {
420
+ activeVerticalScroller.current = null;
421
+ }, []);
422
+
363
423
  const commonRowProps = {
364
424
  dates,
365
425
  dateColumnWidth,
366
- scrollOffset,
367
426
  eventsByResourceId,
368
- renderResourceNameLabel: props.renderResourceNameLabel,
369
427
  onPressCell: props.onPressCell,
370
428
  onLongPressCell: props.onLongPressCell,
371
429
  delayLongPressCell: props.delayLongPressCell,
@@ -377,119 +435,220 @@ export function ResourcesCalendar(props: ResourcesCalendarProps) {
377
435
  eventEllipsizeMode: props.eventEllipsizeMode,
378
436
  cellContainerStyle: props.cellContainerStyle,
379
437
  allowFontScaling: props.allowFontScaling,
438
+ inlineBand: isInlineBand
439
+ ? {
440
+ scrollOffset,
441
+ renderResourceNameLabel: props.renderResourceNameLabel,
442
+ }
443
+ : undefined,
380
444
  };
381
445
 
382
- return (
446
+ const resourceNameColumn = !isInlineBand ? (
383
447
  <ScrollView
448
+ ref={resourceNameScrollRef}
449
+ style={[styles.resourceNameColumn, { width: resourceColumnWidth }]}
450
+ contentContainerStyle={{ width: resourceColumnWidth }}
384
451
  stickyHeaderIndices={[0]}
385
- refreshControl={
386
- <RefreshControl
387
- refreshing={!!props.refreshing}
388
- onRefresh={props.onRefresh}
389
- />
390
- }
452
+ showsVerticalScrollIndicator={false}
453
+ bounces={false}
454
+ overScrollMode="never"
455
+ onScroll={handleResourceNameScroll}
456
+ onScrollEndDrag={handleResourceNameScrollEnd}
457
+ onMomentumScrollEnd={handleResourceNameScrollEnd}
458
+ scrollEventThrottle={16}
391
459
  >
460
+ {/* [0] sticky: header height spacer + fixed resource name rows */}
461
+ <View style={[styles.resourceNameColumn, styles.resourceNameColumnFixed]}>
462
+ <View
463
+ style={[styles.resourceNameHeaderSpacer, { height: headerHeight }]}
464
+ />
465
+ {fixedResources.map((resource) => (
466
+ <View
467
+ key={resource.id}
468
+ style={[
469
+ styles.resourceNameCell,
470
+ { height: rowHeights.get(resource.id) },
471
+ ]}
472
+ >
473
+ {props.renderResourceNameLabel ? (
474
+ props.renderResourceNameLabel(resource)
475
+ ) : (
476
+ <View>
477
+ <Text
478
+ allowFontScaling={props.allowFontScaling}
479
+ style={styles.resourceNameFixedLabelText}
480
+ numberOfLines={1}
481
+ >
482
+ {resource.name}
483
+ </Text>
484
+ </View>
485
+ )}
486
+ </View>
487
+ ))}
488
+ </View>
489
+ <View>
490
+ {/* Scrollable resource name rows */}
491
+ {scrollableResources.map((resource) => (
492
+ <View
493
+ key={resource.id}
494
+ style={[
495
+ styles.resourceNameCell,
496
+ { height: rowHeights.get(resource.id) },
497
+ ]}
498
+ >
499
+ {props.renderResourceNameLabel ? (
500
+ props.renderResourceNameLabel(resource)
501
+ ) : (
502
+ <View>
503
+ <Text
504
+ allowFontScaling={props.allowFontScaling}
505
+ style={styles.resourceNameFixedLabelText}
506
+ numberOfLines={1}
507
+ >
508
+ {resource.name}
509
+ </Text>
510
+ </View>
511
+ )}
512
+ </View>
513
+ ))}
514
+ <View style={{ height: props.bottomSpacing }} />
515
+ </View>
516
+ </ScrollView>
517
+ ) : null;
518
+
519
+ return (
520
+ <View style={styles.container}>
521
+ {/* Left: fixed resource name column (fixed-column mode only) */}
522
+ {resourceNameColumn}
523
+
524
+ {/* Right: calendar body */}
392
525
  <ScrollView
393
- ref={headerScrollRef}
394
- horizontal
395
- showsHorizontalScrollIndicator={false}
396
- bounces={false}
397
- overScrollMode="never"
398
- onScroll={handleHeaderScroll}
526
+ ref={outerScrollRef}
527
+ style={styles.calendarBody}
528
+ stickyHeaderIndices={[0]}
529
+ onScroll={handleOuterScroll}
530
+ onScrollEndDrag={handleOuterScrollEnd}
531
+ onMomentumScrollEnd={handleOuterScrollEnd}
399
532
  scrollEventThrottle={16}
400
- data-component-name="resources-calendar-header-row"
533
+ overScrollMode="never"
534
+ bounces={props.onRefresh != null}
535
+ refreshControl={
536
+ props.onRefresh != null ? (
537
+ <RefreshControl
538
+ refreshing={props.refreshing ?? false}
539
+ onRefresh={props.onRefresh}
540
+ />
541
+ ) : undefined
542
+ }
401
543
  >
402
- <View>
403
- {!props.hiddenMonth && (
404
- <View style={styles.monthHeaderRow}>
405
- {monthGroups.map(({ year, month }, index) => {
406
- const { start: cellStart, width: cellWidth } =
407
- monthGroupOffsets[index]!;
408
- const textLeft = Math.max(8, scrollOffset - cellStart + 8);
409
- return (
544
+ <ScrollView
545
+ ref={headerScrollRef}
546
+ horizontal
547
+ showsHorizontalScrollIndicator={false}
548
+ bounces={false}
549
+ overScrollMode="never"
550
+ onScroll={handleHeaderScroll}
551
+ scrollEventThrottle={16}
552
+ data-component-name="resources-calendar-header-row"
553
+ >
554
+ <View>
555
+ <View
556
+ onLayout={(e) => setHeaderHeight(e.nativeEvent.layout.height)}
557
+ >
558
+ {!props.hiddenMonth && (
559
+ <View style={styles.monthHeaderRow}>
560
+ {monthGroups.map(({ year, month }, index) => {
561
+ const { start: cellStart, width: cellWidth } =
562
+ monthGroupOffsets[index]!;
563
+ const textLeft = Math.max(8, scrollOffset - cellStart + 8);
564
+ return (
565
+ <View
566
+ key={`${year}-${month}`}
567
+ style={[styles.monthHeaderCell, { width: cellWidth }]}
568
+ >
569
+ <View style={{ marginLeft: textLeft }}>
570
+ {props.renderMonthLabel ? (
571
+ props.renderMonthLabel(year, month)
572
+ ) : (
573
+ <View>
574
+ <Text
575
+ numberOfLines={1}
576
+ allowFontScaling={props.allowFontScaling}
577
+ style={styles.monthHeaderText}
578
+ >
579
+ {dayjs(`${year}-${month}-01`).format('YYYY/MM')}
580
+ </Text>
581
+ </View>
582
+ )}
583
+ </View>
584
+ </View>
585
+ );
586
+ })}
587
+ </View>
588
+ )}
589
+
590
+ <View style={styles.headerRow}>
591
+ {dates.map((date) => (
410
592
  <View
411
- key={`${year}-${month}`}
412
- style={[styles.monthHeaderCell, { width: cellWidth }]}
593
+ key={date.getTime()}
594
+ data-component-name="resources-calendar-date-cell"
595
+ style={[
596
+ styles.dateCellContainer,
597
+ { width: dateColumnWidth },
598
+ props.dateCellContainerStyle?.(date),
599
+ ]}
413
600
  >
414
- <View style={{ marginLeft: textLeft }}>
415
- {props.renderMonthLabel ? (
416
- props.renderMonthLabel(year, month)
417
- ) : (
418
- <View>
419
- <Text
420
- numberOfLines={1}
421
- allowFontScaling={props.allowFontScaling}
422
- style={styles.monthHeaderText}
423
- >
424
- {dayjs(`${year}-${month}-01`).format('YYYY/MM')}
425
- </Text>
426
- </View>
427
- )}
428
- </View>
601
+ {props.renderDateLabel ? (
602
+ props.renderDateLabel(date)
603
+ ) : (
604
+ <View>
605
+ <Text allowFontScaling={props.allowFontScaling}>
606
+ {dayjs(date).format('D(ddd)')}
607
+ </Text>
608
+ </View>
609
+ )}
429
610
  </View>
430
- );
431
- })}
432
- </View>
433
- )}
434
-
435
- <View style={styles.headerRow}>
436
- {dates.map((date) => (
437
- <View
438
- key={date.getTime()}
439
- data-component-name="resources-calendar-date-cell"
440
- style={[
441
- styles.dateCellContainer,
442
- { width: dateColumnWidth },
443
- props.dateCellContainerStyle?.(date),
444
- ]}
445
- >
446
- {props.renderDateLabel ? (
447
- props.renderDateLabel(date)
448
- ) : (
449
- <View>
450
- <Text allowFontScaling={props.allowFontScaling}>
451
- {dayjs(date).format('D(ddd)')}
452
- </Text>
453
- </View>
454
- )}
611
+ ))}
455
612
  </View>
456
- ))}
457
- </View>
613
+ </View>
458
614
 
615
+ <View>
616
+ {fixedResources.map((resource) => (
617
+ <ResourceRow
618
+ key={resource.id}
619
+ resource={resource}
620
+ {...commonRowProps}
621
+ onLayout={(height) => handleRowLayout(resource.id, height)}
622
+ />
623
+ ))}
624
+ </View>
625
+ </View>
626
+ </ScrollView>
627
+
628
+ <ScrollView
629
+ ref={bodyScrollRef}
630
+ horizontal
631
+ showsHorizontalScrollIndicator={false}
632
+ bounces={false}
633
+ overScrollMode="never"
634
+ onScroll={handleBodyScroll}
635
+ scrollEventThrottle={16}
636
+ data-component-name="resources-calendar-body-row"
637
+ >
459
638
  <View>
460
- {fixedResources.map((resource) => (
639
+ {scrollableResources.map((resource) => (
461
640
  <ResourceRow
462
641
  key={resource.id}
463
642
  resource={resource}
464
643
  {...commonRowProps}
644
+ onLayout={(height) => handleRowLayout(resource.id, height)}
465
645
  />
466
646
  ))}
467
647
  </View>
468
- </View>
469
- </ScrollView>
470
-
471
- <ScrollView
472
- ref={bodyScrollRef}
473
- horizontal
474
- showsHorizontalScrollIndicator={false}
475
- bounces={false}
476
- overScrollMode="never"
477
- onScroll={handleBodyScroll}
478
- scrollEventThrottle={16}
479
- data-component-name="resources-calendar-body-row"
480
- >
481
- <View>
482
- {scrollableResources.map((resource) => (
483
- <ResourceRow
484
- key={resource.id}
485
- resource={resource}
486
- {...commonRowProps}
487
- />
488
- ))}
489
- </View>
648
+ </ScrollView>
649
+ <View style={{ height: props.bottomSpacing }} />
490
650
  </ScrollView>
491
- <View style={{ height: props.bottomSpacing }} />
492
- </ScrollView>
651
+ </View>
493
652
  );
494
653
  }
495
654
 
@@ -525,11 +684,6 @@ const styles = StyleSheet.create({
525
684
  borderRightWidth: CELL_BORDER_WIDTH,
526
685
  borderColor: 'lightslategrey',
527
686
  },
528
- resourceNameCellContainer: {
529
- width: 80,
530
- borderRightWidth: CELL_BORDER_WIDTH,
531
- borderColor: 'lightslategrey',
532
- },
533
687
  resourceRow: {
534
688
  flexDirection: 'column',
535
689
  borderBottomWidth: CELL_BORDER_WIDTH,
@@ -547,16 +701,44 @@ const styles = StyleSheet.create({
547
701
  borderRightWidth: CELL_BORDER_WIDTH,
548
702
  borderColor: 'lightslategrey',
549
703
  },
704
+ container: {
705
+ flexDirection: 'row',
706
+ flex: 1,
707
+ },
708
+ calendarBody: {
709
+ flex: 1,
710
+ },
550
711
  resourceNameColumn: {
551
- width: 80,
712
+ borderRightWidth: CELL_BORDER_WIDTH,
713
+ borderRightColor: 'lightslategrey',
714
+ flexGrow: 0,
715
+ flexShrink: 0,
716
+ },
717
+ resourceNameColumnFixed: {
718
+ backgroundColor: 'white',
719
+ },
720
+ resourceNameHeaderSpacer: {
721
+ borderBottomWidth: CELL_BORDER_WIDTH,
722
+ borderBottomColor: 'lightslategrey',
723
+ },
724
+ resourceNameCell: {
725
+ borderBottomWidth: CELL_BORDER_WIDTH,
726
+ borderBottomColor: 'lightslategrey',
727
+ justifyContent: 'center',
728
+ paddingHorizontal: 4,
729
+ minHeight: 30,
730
+ },
731
+ resourceNameFixedLabelText: {
732
+ fontSize: 12,
733
+ color: 'black',
552
734
  },
553
- resourceNameFixedLabel: {
735
+ resourceNameInlineBand: {
554
736
  width: '100%',
555
737
  borderBottomWidth: CELL_BORDER_WIDTH,
556
738
  borderColor: 'lightslategrey',
557
739
  backgroundColor: '#EEEEEE',
558
740
  },
559
- resourceNameFixedLabelText: {
741
+ resourceNameInlineBandText: {
560
742
  fontSize: 12,
561
743
  color: 'black',
562
744
  },