Skip to content

Commit 39ff8a1

Browse files
authored
feat(time-gutter-wrapper): expose time gutter wrapper component (#2236)
Allows clients to override the time gutter wrapper.
1 parent 85e3769 commit 39ff8a1

File tree

4 files changed

+44
-14
lines changed

4 files changed

+44
-14
lines changed

src/Calendar.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,7 @@ class Calendar extends React.Component {
730730
* dateCellWrapper: MyDateCellWrapper,
731731
* timeSlotWrapper: MyTimeSlotWrapper,
732732
* timeGutterHeader: MyTimeGutterWrapper,
733+
* timeGutterWrapper: MyTimeGutterWrapper,
733734
* resourceHeader: MyResourceHeader,
734735
* toolbar: MyToolbar,
735736
* agenda: {
@@ -762,6 +763,7 @@ class Calendar extends React.Component {
762763
dayColumnWrapper: PropTypes.elementType,
763764
timeSlotWrapper: PropTypes.elementType,
764765
timeGutterHeader: PropTypes.elementType,
766+
timeGutterWrapper: PropTypes.elementType,
765767
resourceHeader: PropTypes.elementType,
766768

767769
toolbar: PropTypes.elementType,
@@ -930,6 +932,7 @@ class Calendar extends React.Component {
930932
dateCellWrapper: NoopWrapper,
931933
weekWrapper: NoopWrapper,
932934
timeSlotWrapper: NoopWrapper,
935+
timeGutterWrapper: NoopWrapper,
933936
}),
934937
accessors: {
935938
start: wrapAccessor(startAccessor),

src/TimeGutter.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const TimeGutter = ({
3333
getters,
3434
gutterRef,
3535
}) => {
36+
const { timeGutterWrapper: TimeGutterWrapper } = components
3637
const { start, end } = useMemo(
3738
() => adjustForDST({ min, max, localizer }),
3839
// eslint-disable-next-line react-hooks/exhaustive-deps
@@ -81,20 +82,22 @@ const TimeGutter = ({
8182
)
8283

8384
return (
84-
<div className="rbc-time-gutter rbc-time-column" ref={gutterRef}>
85-
{slotMetrics.groups.map((grp, idx) => {
86-
return (
87-
<TimeSlotGroup
88-
key={idx}
89-
group={grp}
90-
resource={resource}
91-
components={components}
92-
renderSlot={renderSlot}
93-
getters={getters}
94-
/>
95-
)
96-
})}
97-
</div>
85+
<TimeGutterWrapper slotMetrics={slotMetrics}>
86+
<div className="rbc-time-gutter rbc-time-column" ref={gutterRef}>
87+
{slotMetrics.groups.map((grp, idx) => {
88+
return (
89+
<TimeSlotGroup
90+
key={idx}
91+
group={grp}
92+
resource={resource}
93+
components={components}
94+
renderSlot={renderSlot}
95+
getters={getters}
96+
/>
97+
)
98+
})}
99+
</div>
100+
</TimeGutterWrapper>
98101
)
99102
}
100103

stories/Calendar.stories.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@ CustomTimeGutterHeader.args = {
4545
},
4646
}
4747

48+
export const CustomTimeGutterWrapper = Template.bind({})
49+
CustomTimeGutterWrapper.storyName = 'custom TimeGutter wrapper'
50+
CustomTimeGutterWrapper.args = {
51+
popup: true,
52+
events: demoEvents,
53+
onSelectEvent: action('event selected'),
54+
defaultDate: new Date(2015, 3, 1),
55+
defaultView: Views.WEEK,
56+
views: [Views.WEEK, Views.DAY],
57+
components: {
58+
timeGutterWrapper: customComponents.timeGutterWrapper,
59+
},
60+
}
61+
4862
export const CustomDateCellWrapper = Template.bind({})
4963
CustomDateCellWrapper.storyName = 'add custom dateCellWrapper'
5064
CustomDateCellWrapper.args = {

stories/resources/customComponents.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ const customComponents = {
6969
}
7070
return <div style={style}>{timeSlotWrapperProps.children}</div>
7171
},
72+
timeGutterWrapper: (timeGutterWrapperProps) => {
73+
return (
74+
<div
75+
id="my-custom-time-gutter-wrapper"
76+
style={{ backgroundColor: 'gray' }}
77+
>
78+
{timeGutterWrapperProps.children}
79+
</div>
80+
)
81+
},
7282
}
7383

7484
export default customComponents

0 commit comments

Comments
 (0)