playbook_ui 12.28.0.pre.alpha.PLAY814removemomentjs871 → 12.28.0.pre.alpha.PLAY837MapCustomButton868

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/index.js +1 -0
  3. data/app/pb_kits/playbook/pb_date/_date.tsx +8 -7
  4. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +31 -45
  5. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.tsx +3 -5
  6. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +21 -24
  7. data/app/pb_kits/playbook/pb_date_time/_date_time.tsx +1 -1
  8. data/app/pb_kits/playbook/pb_date_time/dateTime.test.js +1 -1
  9. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +2 -2
  10. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.test.js +1 -1
  11. data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.tsx +8 -6
  12. data/app/pb_kits/playbook/pb_kit/dateTime.ts +67 -139
  13. data/app/pb_kits/playbook/pb_label_value/_label_value.tsx +31 -52
  14. data/app/pb_kits/playbook/pb_logistic/_logistic.jsx +120 -0
  15. data/app/pb_kits/playbook/pb_map/_map.scss +16 -1
  16. data/app/pb_kits/playbook/pb_map/_map.tsx +9 -26
  17. data/app/pb_kits/playbook/pb_map/_map_controls.tsx +47 -0
  18. data/app/pb_kits/playbook/pb_map/_map_custom_button.tsx +18 -0
  19. data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.jsx +83 -0
  20. data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.md +1 -0
  21. data/app/pb_kits/playbook/pb_map/docs/example.yml +1 -0
  22. data/app/pb_kits/playbook/pb_map/docs/index.js +1 -0
  23. data/app/pb_kits/playbook/pb_message/_message.tsx +25 -25
  24. data/app/pb_kits/playbook/pb_time/_time.tsx +11 -9
  25. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +49 -46
  26. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.tsx +6 -4
  27. data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +10 -10
  28. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +11 -8
  29. data/dist/playbook-rails.js +6 -6
  30. data/lib/playbook/version.rb +1 -1
  31. metadata +7 -2
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
2
  import classnames from "classnames";
3
+ import DateTime from "../pb_kit/dateTime";
3
4
  import { buildAriaProps, buildCss, buildDataProps } from "../utilities/props";
4
5
  import { globalProps } from "../utilities/globalProps";
5
- import DateTime from '../pb_kit/dateTime';
6
6
 
7
7
  import Body from "../pb_body/_body";
8
8
  import Caption from "../pb_caption/_caption";
@@ -26,9 +26,9 @@ type LabelValueProps = {
26
26
  title?: string;
27
27
  };
28
28
 
29
- const dateString = (value: Date) => {
30
- const month = DateTime.toMonthNum(value);
31
- const day = DateTime.toDay(value);
29
+ const dateString = (value: DateTime) => {
30
+ const month = value.toMonthNum();
31
+ const day = value.toDay();
32
32
 
33
33
  return ` · ${month}/${day}`;
34
34
  };
@@ -52,6 +52,7 @@ const LabelValue = (props: LabelValueProps) => {
52
52
 
53
53
  const ariaProps = buildAriaProps(aria);
54
54
  const dataProps = buildDataProps(data);
55
+ const formattedDate = new DateTime({ value: date });
55
56
  const variantClass = variant === "details" ? "details" : "";
56
57
  const classes = classnames(
57
58
  buildCss("pb_label_value_kit", variantClass),
@@ -61,81 +62,59 @@ const LabelValue = (props: LabelValueProps) => {
61
62
 
62
63
  return (
63
64
  <div
64
- {...ariaProps}
65
- {...dataProps}
66
- className={classes}
67
- id={id}
68
- title={title}
65
+ {...ariaProps}
66
+ {...dataProps}
67
+ className={classes}
68
+ id={id}
69
+ title={title}
69
70
  >
70
- <Caption dark={dark}
71
- text={label}
72
- />
71
+ <Caption dark={dark} text={label} />
73
72
  {variant === "details" ? (
74
- <Flex inline
75
- vertical="center"
76
- >
73
+ <Flex inline vertical="center">
77
74
  {icon && (
78
- <Body color="light"
79
- dark={dark}
80
- marginRight="xs"
81
- >
82
- <Icon dark={dark}
83
- fixedWidth
84
- icon={icon}
85
- />
75
+ <Body color="light" dark={dark} marginRight="xs">
76
+ <Icon dark={dark} fixedWidth icon={icon} />
86
77
  </Body>
87
78
  )}
88
79
  {description && (
89
80
  <Body
90
- color="light"
91
- dark={dark}
92
- marginRight="xs"
93
- text={description}
81
+ color="light"
82
+ dark={dark}
83
+ marginRight="xs"
84
+ text={description}
94
85
  />
95
86
  )}
96
87
  {active === true ? (
97
- <Flex inline
98
- vertical="center"
99
- >
88
+ <Flex inline vertical="center">
100
89
  {title && (
101
- <Title dark={dark}
102
- size={4}
103
- text={title}
104
- variant="link"
105
- />
90
+ <Title dark={dark} size={4} text={title} variant="link" />
106
91
  )}
107
92
  {date && (
108
93
  <Title
109
- dark={dark}
110
- marginLeft="xs"
111
- size={4}
112
- text={" " + dateString(date)}
113
- variant="link"
94
+ dark={dark}
95
+ marginLeft="xs"
96
+ size={4}
97
+ text={" " + dateString(formattedDate)}
98
+ variant="link"
114
99
  />
115
100
  )}
116
101
  </Flex>
117
102
  ) : (
118
103
  <>
119
- {title && <Title dark={dark}
120
- size={4}
121
- text={title}
122
- />
123
- }
104
+ {title && <Title dark={dark} size={4} text={title} />}
124
105
  {date && (
125
106
  <Title
126
- dark={dark}
127
- marginLeft="xs"
128
- size={4}
129
- text={" " + dateString(date)}
107
+ dark={dark}
108
+ marginLeft="xs"
109
+ size={4}
110
+ text={" " + dateString(formattedDate)}
130
111
  />
131
112
  )}
132
113
  </>
133
114
  )}
134
115
  </Flex>
135
116
  ) : (
136
- <Body dark={dark}
137
- text={value}
138
- />
117
+ <Body dark={dark} text={value} />
139
118
  )}
140
119
  </div>
141
120
  );
@@ -0,0 +1,120 @@
1
+ /* @flow */
2
+
3
+ import React from 'react'
4
+ import classnames from 'classnames'
5
+
6
+ import DateTime from '../pb_kit/dateTime'
7
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
8
+ import { globalProps } from '../utilities/globalProps'
9
+
10
+ import Body from '../pb_body/_body'
11
+ import Caption from '../pb_caption/_caption'
12
+ import Icon from '../pb_icon/_icon'
13
+ import Title from '../pb_title/_title'
14
+
15
+ const dateString = (value: DateTime) => {
16
+ const month = value.toMonthNum()
17
+ const day = value.toDay()
18
+
19
+ return ` · ${month}/${day}`
20
+ }
21
+
22
+ type LogisticProps = {
23
+ aria?: object,
24
+ className?: string,
25
+ dark?: boolean,
26
+ data?: object,
27
+ date: string,
28
+ id?: string,
29
+ link?: string,
30
+ projectName?: string,
31
+ projectNumber?: number,
32
+ }
33
+
34
+ const Logistic = (props: LogisticProps) => {
35
+ const { aria = {},
36
+ className,
37
+ dark = false,
38
+ data = {},
39
+ date,
40
+ id,
41
+ link,
42
+ projectName,
43
+ projectNumber } = props
44
+
45
+ const ariaProps = buildAriaProps(aria)
46
+ const dataProps = buildDataProps(data)
47
+ const formattedDate = new DateTime({ value: date })
48
+ const classes = classnames(
49
+ buildCss('pb_logistic_kit', { dark }),
50
+ globalProps(props),
51
+ className
52
+ )
53
+
54
+ return (
55
+ <div
56
+ {...ariaProps}
57
+ {...dataProps}
58
+ className={classes}
59
+ id={id}
60
+ >
61
+ <Body color="light">
62
+ <Caption text="Project" />
63
+ <Icon
64
+ fixedWidth
65
+ icon="home"
66
+ />
67
+
68
+ {` ${projectNumber}`}
69
+
70
+ <Choose>
71
+ <When condition={link}>
72
+ <a
73
+ className="pb_logistic_kit_links"
74
+ href={link}
75
+ >
76
+ <Choose>
77
+ <When condition={date}>
78
+ <Title
79
+ size={4}
80
+ tag="span"
81
+ text={' ' + projectName + dateString(formattedDate)}
82
+ />
83
+ </When>
84
+ <Otherwise>
85
+ <Title
86
+ size={4}
87
+ tag="span"
88
+ text={' ' + projectName}
89
+ />
90
+ </Otherwise>
91
+ </Choose>
92
+ </a>
93
+ </When>
94
+ <Otherwise>
95
+ <Choose>
96
+ <When condition={date}>
97
+ <Title
98
+ dark={dark}
99
+ size={4}
100
+ tag="span"
101
+ text={' ' + projectName + dateString(formattedDate)}
102
+ />
103
+ </When>
104
+ <Otherwise>
105
+ <Title
106
+ dark={dark}
107
+ size={4}
108
+ tag="span"
109
+ text={' ' + projectName}
110
+ />
111
+ </Otherwise>
112
+ </Choose>
113
+ </Otherwise>
114
+ </Choose>
115
+ </Body>
116
+ </div>
117
+ )
118
+ }
119
+
120
+ export default Logistic
@@ -5,6 +5,21 @@
5
5
  @import "./_pb_map_button_mixin.scss";
6
6
 
7
7
  [class*="pb_map"] {
8
+ .pb_map-custom-button {
9
+ @include pb_map_button;
10
+ position: relative;
11
+ margin-top: $space_xs;
12
+ box-shadow: $shadow_deep;
13
+ .pb_icon_kit {
14
+ width: $space_sm - 2;
15
+ height: $space_sm;
16
+ }
17
+
18
+ .pb_button_content {
19
+ height: $space_sm;
20
+ }
21
+ }
22
+
8
23
  .mapboxgl-map,
9
24
  .maplibregl-map {
10
25
  font-family: $font_family_base !important;
@@ -185,7 +200,7 @@
185
200
  }
186
201
  .map-zoom-in-button,
187
202
  .map-zoom-out-button,
188
- .map-flyto-button {
203
+ .map-flyto-button, .pb_map-custom-button {
189
204
  @include pb_map_button_dark;
190
205
  }
191
206
 
@@ -3,9 +3,7 @@ import classnames from 'classnames'
3
3
  import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
4
4
  import { globalProps, GlobalProps } from '../utilities/globalProps'
5
5
 
6
- import Flex from "../pb_flex/_flex"
7
- import Icon from '../pb_icon/_icon'
8
- import Button from '../pb_button/_button'
6
+ import MapControls from './_map_controls';
9
7
 
10
8
  type MapProps = {
11
9
  aria?: { [key: string]: string },
@@ -47,29 +45,13 @@ const Map = (props: MapProps) => {
47
45
  >
48
46
  {
49
47
  zoomBtns ? (
50
- <Flex className="custom-nav-control" orientation='column'>
51
- <div className="custom-nav-control-zoom">
52
- <Button className='map-zoom-in-button'
53
- onClick={zoomInClick}
54
- >
55
- <Icon icon="plus"/>
56
- </Button>
57
- <Button className='map-zoom-out-button'
58
- onClick={zoomOutClick}
59
- >
60
- <Icon icon="minus"/>
61
- </Button>
62
- </div>
63
- {
64
- flyTo ? (
65
- <Button className='map-flyto-button'
66
- onClick={flyToClick}
67
- >
68
- <Icon icon="eye"/>
69
- </Button>
70
- ) : null
71
- }
72
- </Flex>
48
+ <Map.Controls
49
+ flyTo={flyTo}
50
+ flyToClick={flyToClick}
51
+ zoomBtns={zoomBtns}
52
+ zoomInClick={zoomInClick}
53
+ zoomOutClick={zoomOutClick}
54
+ />
73
55
  ) : null
74
56
  }
75
57
  {children}
@@ -77,4 +59,5 @@ const Map = (props: MapProps) => {
77
59
  )
78
60
  }
79
61
 
62
+ Map.Controls = MapControls
80
63
  export default Map
@@ -0,0 +1,47 @@
1
+ import React from "react";
2
+ import Button from "../pb_button/_button";
3
+ import Icon from "../pb_icon/_icon";
4
+ import Flex from "../pb_flex/_flex";
5
+
6
+ type MapControlTypes = {
7
+ zoomBtns?: boolean,
8
+ flyTo?: boolean,
9
+ zoomInClick?: () => {},
10
+ zoomOutClick?: () => {},
11
+ flyToClick?: () => {},
12
+ children?: React.ReactNode | React.ReactNode[]
13
+ }
14
+
15
+ const MapControls = ({
16
+ zoomBtns,
17
+ zoomInClick,
18
+ zoomOutClick,
19
+ flyTo,
20
+ flyToClick,
21
+ children,
22
+ }: MapControlTypes) => {
23
+ return (
24
+ <Flex className="custom-nav-control" orientation="column">
25
+ {zoomBtns ? (
26
+ <>
27
+ <div className="custom-nav-control-zoom">
28
+ <Button className="map-zoom-in-button" onClick={zoomInClick}>
29
+ <Icon icon="plus" />
30
+ </Button>
31
+ <Button className="map-zoom-out-button" onClick={zoomOutClick}>
32
+ <Icon icon="minus" />
33
+ </Button>
34
+ </div>
35
+ {flyTo ? (
36
+ <Button className="map-flyto-button" onClick={flyToClick}>
37
+ <Icon icon="eye" />
38
+ </Button>
39
+ ) : null}
40
+ </>
41
+ ) : null}
42
+ {children}
43
+ </Flex>
44
+ );
45
+ };
46
+
47
+ export default MapControls;
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import Button from "../pb_button/_button";
3
+ import Icon from "../pb_icon/_icon";
4
+
5
+ type MapCustomButtonTypes = {
6
+ onClick?: () => {};
7
+ icon?: string;
8
+ };
9
+
10
+ const MapCustomButton = ({ onClick, icon }: MapCustomButtonTypes) => {
11
+ return (
12
+ <Button className="pb_map-custom-button" onClick={onClick}>
13
+ <Icon icon={icon} />
14
+ </Button>
15
+ );
16
+ };
17
+
18
+ export default MapCustomButton;
@@ -0,0 +1,83 @@
1
+ import React, { useRef, useEffect, useState } from 'react'
2
+ import { Map, mapTheme, MapCustomButton } from '../..'
3
+ import maplibregl from 'maplibre-gl'
4
+
5
+ const MapWithCustomButton = (props) => {
6
+
7
+ //set Map instance to access from outside useEffect
8
+ const [mapInstance, setMapInstance] = useState(null)
9
+ const mapContainerRef = useRef(null)
10
+
11
+ //Set default position
12
+ const defaultPosition = [-75.379143, 39.831200]
13
+
14
+ // linking Maplibre methods to PB custom zoom in, zoom out, and fly to buttons
15
+ const handleZoomIn = (map) => {map.zoomIn({...mapTheme.zoomConfig})}
16
+ const handleZoomOut = (map) => {map.zoomOut({...mapTheme.zoomConfig})}
17
+ const handleFlyTo = (map) => {map.flyTo({
18
+ center: defaultPosition,
19
+ ... mapTheme.flyToConfig
20
+ });}
21
+
22
+ //This function is called by the useEffect when map instance first loads
23
+ const loadMap = ( { target: map }) => {
24
+ //set marker/pin
25
+ new maplibregl.Marker({
26
+ color: mapTheme.marker,
27
+ }).setLngLat(defaultPosition)
28
+ .setPopup(new maplibregl.Popup({closeButton: false}).setHTML(`<h4 class="pb_title_kit_size_4">Hello World!</h4>`)) // add popup
29
+ .addTo(map);
30
+
31
+ // disable map zoom when using scroll
32
+ map.scrollZoom.disable();
33
+
34
+ //add attributioncontrols
35
+ map.addControl(new maplibregl.AttributionControl({
36
+ compact: true
37
+ }));
38
+
39
+ //set map instance
40
+ setMapInstance(map)
41
+ }
42
+
43
+ useEffect(() => {
44
+ new maplibregl.Map({
45
+ container: mapContainerRef.current,
46
+ center: defaultPosition,
47
+ ...mapTheme.mapConfig
48
+ }).on('load', loadMap)
49
+
50
+ }, [])
51
+
52
+ return (
53
+ <Map
54
+ {...props}
55
+ >
56
+ <Map.Controls flyTo
57
+ flyToClick={()=> {handleFlyTo(mapInstance)}}
58
+ zoomBtns
59
+ zoomInClick={() => {handleZoomIn(mapInstance)}}
60
+ zoomOutClick={()=> {handleZoomOut(mapInstance)}}
61
+ >
62
+ <MapCustomButton icon="home"
63
+ onClick={() => alert("button clicked!")}
64
+ />
65
+ <MapCustomButton icon="search"
66
+ onClick={() => alert("button clicked!")}
67
+ />
68
+ </Map.Controls>
69
+ <div
70
+ ref={mapContainerRef}
71
+ style={{
72
+ position: 'absolute',
73
+ left: 0,
74
+ right: 0,
75
+ top: 0,
76
+ bottom: 0,
77
+ }}
78
+ />
79
+ </Map>
80
+ )
81
+ }
82
+
83
+ export default MapWithCustomButton
@@ -0,0 +1 @@
1
+ If you want to add custom buttons to the Map, you can use the `MapCustomButton` component nested inside Map.Controls as shown in the code snippet below. Note that when Map.Controls is used in this way, the props for the rest of the buttons must also be passed to Map.Controls instead of the Map itself.
@@ -4,3 +4,4 @@ examples:
4
4
  react:
5
5
  - map_default: Default
6
6
  - map_with_plugin: Map With Polygon Draw Plugin
7
+ - map_with_custom_button: Map With Custom Button
@@ -1,2 +1,3 @@
1
1
  export { default as MapDefault } from './_map_default.jsx'
2
2
  export { default as MapWithPlugin } from './_map_with_plugin.jsx'
3
+ export {default as MapWithCustomButton} from './_map_with_custom_button.jsx'
@@ -23,8 +23,8 @@ type MessageProps = {
23
23
  id?: string,
24
24
  label?: string,
25
25
  message: string,
26
- timestamp?: Date,
27
- timestampObject?: Date,
26
+ timestamp?: string,
27
+ timestampObject?: string,
28
28
  timezone?: string,
29
29
  alignTimestamp?: string,
30
30
  }
@@ -61,50 +61,50 @@ const Message = (props: MessageProps) => {
61
61
 
62
62
  return (
63
63
  <div
64
- {...ariaProps}
65
- {...dataProps}
66
- className={classes}
67
- id={id}
64
+ {...ariaProps}
65
+ {...dataProps}
66
+ className={classes}
67
+ id={id}
68
68
  >
69
69
  {shouldDisplayAvatar &&
70
70
  <Avatar
71
- imageUrl={avatarUrl}
72
- name={avatarName}
73
- size="xs"
74
- status={avatarStatus}
71
+ imageUrl={avatarUrl}
72
+ name={avatarName}
73
+ size="xs"
74
+ status={avatarStatus}
75
75
  />
76
76
  }
77
77
  <div className="content_wrapper">
78
78
  <Flex
79
- justify={alignTimestamp === 'left' ? 'none' : 'between'}
80
- orientation="row"
79
+ justify={alignTimestamp === 'left' ? 'none' : 'between'}
80
+ orientation="row"
81
81
  >
82
82
  {label &&
83
83
  <Title
84
- className="message_title"
85
- size={4}
86
- text={label}
84
+ className="message_title"
85
+ size={4}
86
+ text={label}
87
87
  />
88
88
  }
89
89
  <Timestamp
90
- className={`pull-${alignTimestamp} ${timestampObject ? 'message_humanized_time' : null}`}
91
- text={timestamp.toString()}
92
- timestamp={null}
93
- timezone={timezone}
90
+ className={`pull-${alignTimestamp} ${timestampObject ? 'message_humanized_time' : null}`}
91
+ text={timestamp}
92
+ timestamp={''}
93
+ timezone={timezone}
94
94
  />
95
95
  {timestampObject &&
96
96
  <Timestamp
97
- className={`pull-${alignTimestamp} message_timestamp`}
98
- text={''}
99
- timestamp={timestampObject}
100
- timezone={timezone}
97
+ className={`pull-${alignTimestamp} message_timestamp`}
98
+ text={''}
99
+ timestamp={timestampObject}
100
+ timezone={timezone}
101
101
  />
102
102
  }
103
103
  </Flex>
104
104
  {message &&
105
105
  <Body
106
- className="pb_message_body"
107
- text={message}
106
+ className="pb_message_body"
107
+ text={message}
108
108
  />
109
109
  }
110
110
  {children}
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  import classnames from "classnames";
3
3
 
4
+ import DateTime from "../pb_kit/dateTime";
4
5
  import { buildCss } from "../utilities/props";
5
6
  import { globalProps, GlobalProps } from "../utilities/globalProps";
6
- import DateTime from '../pb_kit/dateTime';
7
7
 
8
8
  import Body from "../pb_body/_body";
9
9
  import Caption from "../pb_caption/_caption";
@@ -13,7 +13,7 @@ type TimeProps = {
13
13
  align?: "left" | "center" | "right";
14
14
  className?: string | string[];
15
15
  data?: string;
16
- date: Date;
16
+ date: string;
17
17
  dark?: boolean;
18
18
  id?: string;
19
19
  showIcon?: boolean;
@@ -41,6 +41,8 @@ const Time = (props: TimeProps) => {
41
41
  className
42
42
  );
43
43
 
44
+ const dateTimestamp = new DateTime({ value: date, zone: timeZone });
45
+
44
46
  return (
45
47
  <div className={classes}>
46
48
  {showIcon && (
@@ -68,18 +70,18 @@ const Time = (props: TimeProps) => {
68
70
  )
69
71
  )}
70
72
 
71
- <time dateTime={date.toString()}>
73
+ <time dateTime={date}>
72
74
  <span>
73
75
  {unstyled
74
76
  ? (
75
77
  <>
76
78
  <span>
77
- {DateTime.toTimeWithMeridiem(date, timeZone)}
79
+ {dateTimestamp.toTimeWithMeridian()}
78
80
  </span>
79
81
  {" "}
80
82
  {showTimezone && (
81
83
  <span>
82
- {DateTime.toTimeZone(date, timeZone)}
84
+ {dateTimestamp.toTimezone()}
83
85
  </span>
84
86
  )}
85
87
  </>
@@ -90,13 +92,13 @@ const Time = (props: TimeProps) => {
90
92
  <Body
91
93
  className="pb_time"
92
94
  tag="span"
93
- text={DateTime.toTimeWithMeridiem(date, timeZone)}
95
+ text={dateTimestamp.toTimeWithMeridian()}
94
96
  />{" "}
95
97
  {showTimezone && (
96
98
  <Body
97
99
  color="light"
98
100
  tag="span"
99
- text={DateTime.toTimeZone(date, timeZone)}
101
+ text={dateTimestamp.toTimezone()}
100
102
  />
101
103
  )}
102
104
  </>
@@ -106,13 +108,13 @@ const Time = (props: TimeProps) => {
106
108
  <Caption
107
109
  color="light"
108
110
  tag="span"
109
- text={DateTime.toTimeWithMeridiem(date, timeZone)}
111
+ text={dateTimestamp.toTimeWithMeridian()}
110
112
  />{" "}
111
113
  {showTimezone && (
112
114
  <Caption
113
115
  color="light"
114
116
  tag="span"
115
- text={DateTime.toTimeZone(date, timeZone)}
117
+ text={dateTimestamp.toTimezone()}
116
118
  />
117
119
  )}
118
120
  </>