@@ -4,7 +4,7 @@ import { Dayjs } from "dayjs";
4
4
import React , { useMemo , useRef } from "react" ;
5
5
import {
6
6
SchedulerController ,
7
- UnknownSchedulerController ,
7
+ SchedulerDisplayUnit ,
8
8
useControllerContext ,
9
9
} from "../controller/controller" ;
10
10
import {
@@ -27,9 +27,11 @@ import {
27
27
SchedulerEntryRenderer ,
28
28
} from "./SchedulerEntry/SchedulerEntry" ;
29
29
import { MomentStyleFn } from "./SchedulerMoment/momentStyling" ;
30
- import { SchedulerMoment } from "./SchedulerMoment/SchedulerMoment" ;
31
- import { determineSchedulerSubMomentsCount } from "./SchedulerMoment/util" ;
30
+ import { SchedulerMoments } from "./SchedulerMoment/SchedulerMoment" ;
32
31
32
+ export type DetermineSubMomentCountsFn = (
33
+ displayUnit : SchedulerDisplayUnit ,
34
+ ) => number ;
33
35
export interface SchedulerBodyProps < TData , TResource > {
34
36
startDate ?: Date ;
35
37
endDate ?: Date ;
@@ -44,9 +46,7 @@ export interface SchedulerBodyProps<TData, TResource> {
44
46
resourceLabelComponent ?: React . FC < ResourceLabelProps < TResource > > ;
45
47
entryComponent ?: React . FC < SchedulerEntryProps < TData , TResource > > ;
46
48
nowMarkerComponent ?: React . FC < NowMarkerProps > ;
47
- customDetermineSchedulerSubMomentsCount ?: (
48
- controller : UnknownSchedulerController ,
49
- ) => number ;
49
+ determineSubMomentCounts ?: DetermineSubMomentCountsFn ;
50
50
momentStyle ?: MomentStyleFn < TData , TResource > ;
51
51
}
52
52
@@ -58,17 +58,14 @@ function SchedulerBodyRow<TData, TResource>({
58
58
resourceId,
59
59
getEndDate,
60
60
getStartDate,
61
-
62
- firstMomentLoss,
63
- lastMomentLoss,
61
+ resourcesCount,
64
62
rowHeight,
65
- resources,
66
63
rowIndex,
67
- customDetermineSchedulerSubMomentsCount,
68
64
momentStyle,
65
+ subMomentCount,
69
66
} : {
70
67
data : TData [ ] ;
71
- resources : TResource [ ] ;
68
+ resourcesCount : number ;
72
69
customNowMarker : NonNullable <
73
70
SchedulerBodyProps < TData , TResource > [ "nowMarkerComponent" ]
74
71
> ;
@@ -82,16 +79,9 @@ function SchedulerBodyRow<TData, TResource>({
82
79
> ;
83
80
84
81
rowHeight : SchedulerBodyProps < TData , TResource > [ "rowHeight" ] ;
85
- firstMomentLoss : number ;
86
- lastMomentLoss : number ;
87
82
88
83
rowIndex : number ;
89
- customDetermineSchedulerSubMomentsCount : NonNullable <
90
- SchedulerBodyProps <
91
- TData ,
92
- TResource
93
- > [ "customDetermineSchedulerSubMomentsCount" ]
94
- > ;
84
+ subMomentCount : number ;
95
85
momentStyle ?: MomentStyleFn < TData , TResource > ;
96
86
} ) {
97
87
const rowRef = useRef < HTMLDivElement | null > ( null ) ;
@@ -141,10 +131,6 @@ function SchedulerBodyRow<TData, TResource>({
141
131
{ target : rowRef , wheel : { eventOptions : { passive : false } } } ,
142
132
) ;
143
133
144
- const subMomentsCount = useMemo (
145
- ( ) => customDetermineSchedulerSubMomentsCount ( controller ) ,
146
- [ controller , customDetermineSchedulerSubMomentsCount ] ,
147
- ) ;
148
134
const filteredData = useMemo (
149
135
( ) => data . filter ( ( item ) => getDataResourceId ( item ) . includes ( resourceId ) ) ,
150
136
[ data , getDataResourceId , resourceId ] ,
@@ -188,42 +174,14 @@ function SchedulerBodyRow<TData, TResource>({
188
174
) ;
189
175
} ) }
190
176
191
- { controller . moments
192
- . map ( ( moment , index ) : [ Dayjs , number ] => [
193
- moment ,
194
- controller . momentWidths [ index ] ,
195
- ] )
196
- . map ( ( [ moment , distance ] , momentIndex ) => {
197
- return (
198
- < SchedulerMoment
199
- key = { `scheduler_moment_top_${ resourceId } _${ momentIndex } ` }
200
- displayUnit = { controller . displayUnit }
201
- height = { rowHeight }
202
- moment = { moment }
203
- resourceId = { resourceId }
204
- width = { `${ distance } %` }
205
- isTop = { rowIndex === 0 }
206
- isBottom = { rowIndex === resources . length - 1 }
207
- isLeft = { momentIndex === 0 }
208
- isRight = { momentIndex === controller . moments . length - 1 }
209
- subMomentCount = { subMomentsCount }
210
- onDragEnd = { controller . momentDragEnd }
211
- onDragStartOverFactory = { controller . momentDragStartOver }
212
- firstSelectedMoment = { controller . firstSelectedMoment }
213
- lastSelectedMoment = { controller . lastSelectedMoment }
214
- selectedResource = { controller . selectedResource }
215
- momentIndex = { momentIndex }
216
- loss = {
217
- momentIndex === 0
218
- ? firstMomentLoss
219
- : momentIndex === controller . moments . length - 1
220
- ? lastMomentLoss
221
- : 1
222
- }
223
- momentStyle = { momentStyle }
224
- />
225
- ) ;
226
- } ) }
177
+ < SchedulerMoments
178
+ resourceId = { resourceId }
179
+ resourcesCount = { resourcesCount }
180
+ rowHeight = { rowHeight }
181
+ rowIndex = { rowIndex }
182
+ momentStyle = { momentStyle }
183
+ subMomentCount = { subMomentCount }
184
+ />
227
185
</ Flex >
228
186
) ;
229
187
}
@@ -238,14 +196,11 @@ export function SchedulerBody<TData, TResource>({
238
196
resourceLabelComponent,
239
197
entryComponent,
240
198
nowMarkerComponent,
241
-
242
- customDetermineSchedulerSubMomentsCount :
243
- customDetermineSchedulerSubMomentsCountParam ,
199
+ determineSubMomentCounts,
244
200
rowHeight,
245
201
momentStyle,
246
202
} : SchedulerBodyProps < TData , TResource > ) {
247
- const controller : SchedulerController < TData , TResource > =
248
- useControllerContext ( ) ;
203
+ const controller = useControllerContext ( ) ;
249
204
const getResourceId = useStringAccessor ( resourceIdField ) ;
250
205
const getDataResourceId = useStringArrayAccessor ( dataResourceIdField ) ;
251
206
const getStartDate = useDateAccessor ( startDateField ) ;
@@ -263,24 +218,9 @@ export function SchedulerBody<TData, TResource>({
263
218
[ nowMarkerComponent ] ,
264
219
) ;
265
220
266
- const customDetermineSchedulerSubMomentsCount = useMemo (
267
- ( ) =>
268
- customDetermineSchedulerSubMomentsCountParam ??
269
- determineSchedulerSubMomentsCount ,
270
- [ customDetermineSchedulerSubMomentsCountParam ] ,
271
- ) ;
272
-
273
- const firstMomentLoss = useMemo (
274
- ( ) =>
275
- ( controller . momentWidths [ 0 ] / 100 ) * ( controller . momentWidths . length - 1 ) ,
276
- [ controller . momentWidths ] ,
277
- ) ;
278
-
279
- const lastMomentLoss = useMemo (
280
- ( ) =>
281
- ( controller . momentWidths [ controller . momentWidths . length - 1 ] / 100 ) *
282
- ( controller . momentWidths . length - 1 ) ,
283
- [ controller . momentWidths ] ,
221
+ const subMomentCount = useMemo (
222
+ ( ) => determineSubMomentCounts ?.( controller . displayUnit ) ?? 0 ,
223
+ [ controller . displayUnit , determineSubMomentCounts ] ,
284
224
) ;
285
225
286
226
return (
@@ -310,21 +250,17 @@ export function SchedulerBody<TData, TResource>({
310
250
< SchedulerBodyRow
311
251
key = { rowIndex }
312
252
rowIndex = { rowIndex }
313
- customDetermineSchedulerSubMomentsCount = {
314
- customDetermineSchedulerSubMomentsCount
315
- }
316
253
customNowMarker = { customNowMarker }
317
254
data = { data }
318
255
entryComponent = { customSchedulerEntry }
319
- firstMomentLoss = { firstMomentLoss }
320
- lastMomentLoss = { lastMomentLoss }
321
256
getDataResourceId = { getDataResourceId }
322
257
getEndDate = { getEndDate }
323
258
getStartDate = { getStartDate }
324
259
resourceId = { resourceId }
325
- resources = { resources }
326
260
rowHeight = { rowHeight }
327
261
momentStyle = { momentStyle }
262
+ resourcesCount = { resources . length }
263
+ subMomentCount = { subMomentCount }
328
264
/>
329
265
</ Grid . Col >
330
266
</ resourceContext . Provider >
0 commit comments