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

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 (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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6bff4ae5eea63203df312bfe5084059ccbf7c03b00e21191e8febfdadef69e40
4
- data.tar.gz: 4b2d45e698f7101b05145fe30247ceb58c007e91e9e8d239ce2ee81c9715bc99
3
+ metadata.gz: a11d84418c9c01374cd74d38a154f76d034ff440cd3a8580ffdace764232279e
4
+ data.tar.gz: fbf756271614a013e06861498022157b2a6c585f7402a6d14c2c1a34052745cd
5
5
  SHA512:
6
- metadata.gz: '082571f8a9154aae27eea5c8087db5c24d1b9439cdbe8f699a5a9c8fdf72ea8d9ed8840595d4160500586ccbe73a6720ef3d221a464e971f825fff22b78abcc9'
7
- data.tar.gz: 861ab41ccc20069e20fba759b72f8ea0d04cef37aa843ffa8ec4df6725b07a5a76ed10f90120dd3e90e1074cd86b53fa0c196a50a507b8aaa5f18885e79d6ea6
6
+ metadata.gz: 366d06de731005646685950b3bd763a791716076d22bb077265dee3ed18727fb7d6eefdc5063e1cb02b4246fee19cf8d692260294fd2c91c422cff8fec7dc0d6
7
+ data.tar.gz: ca19bd5db001368a141c1fa553313170d5fdc6ec1badb596160027f9c105cb97f7e117f9c3915b8cd039d7e8c0014dac4ba816a93e6f3cdbb90cbdb7860f6cd2
@@ -60,6 +60,7 @@ export { default as List } from './pb_list/_list'
60
60
  export { default as ListItem } from './pb_list/_list_item'
61
61
  export { default as LoadingInline } from './pb_loading_inline/_loading_inline'
62
62
  export { default as Map} from './pb_map/_map'
63
+ export { default as MapCustomButton } from './pb_map/_map_custom_button'
63
64
  export { default as Message } from './pb_message/_message'
64
65
  export { default as MultiLevelSelect} from './pb_multi_level_select/_multi_level_select'
65
66
  export { default as MultipleUsers } from './pb_multiple_users/_multiple_users'
@@ -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 { buildAriaProps, buildCss, buildDataProps } from "../utilities/props";
5
6
  import { 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";
@@ -20,7 +20,7 @@ type PbDateProps = {
20
20
  showIcon?: boolean;
21
21
  size?: "sm" | "md" | "lg";
22
22
  unstyled?: boolean;
23
- value: Date;
23
+ value: string | Date;
24
24
  };
25
25
 
26
26
  const PbDate = (props: PbDateProps) => {
@@ -37,11 +37,12 @@ const PbDate = (props: PbDateProps) => {
37
37
  value,
38
38
  } = props;
39
39
 
40
- const weekday = DateTime.toWeekday(value);
41
- const month = DateTime.toMonth(value);
42
- const day = DateTime.toDay(value);
43
- const year = DateTime.toYear(value);
44
- const currentYear = new Date().getFullYear();
40
+ const dateTimestamp = new DateTime({ value: value });
41
+ const weekday = dateTimestamp.toWeekday();
42
+ const month = dateTimestamp.toMonth();
43
+ const day = dateTimestamp.toDay();
44
+ const year = dateTimestamp.toYear();
45
+ const currentYear = new Date().getFullYear().toString();
45
46
 
46
47
  const ariaProps = buildAriaProps(aria);
47
48
  const dataProps = buildDataProps(data);
@@ -3,7 +3,7 @@ import classnames from "classnames";
3
3
 
4
4
  import { globalProps } from "../utilities/globalProps";
5
5
  import { buildCss, buildDataProps } from "../utilities/props";
6
- import DateTime from '../pb_kit/dateTime';
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";
@@ -21,16 +21,18 @@ type DateRangeInlineProps = {
21
21
  endDate?: Date;
22
22
  };
23
23
 
24
- const dateTimestamp = (dateValue: Date, includeYear: boolean) => {
24
+ const dateTimestamp = (dateValue: Date | string, includeYear: boolean) => {
25
+ const date = new DateTime({ value: dateValue });
25
26
  if (includeYear) {
26
- return `${DateTime.toMonth(dateValue)} ${DateTime.toDay(dateValue)}, ${DateTime.toYear(dateValue)}`;
27
+ return `${date.toMonth()} ${date.toDay()}, ${date.toYear()}`;
27
28
  } else {
28
- return `${DateTime.toMonth(dateValue)} ${DateTime.toDay(dateValue)}`;
29
+ return `${date.toMonth()} ${date.toDay()}`;
29
30
  }
30
31
  };
31
32
 
32
- const dateTimeIso = (dateValue: Date) => {
33
- return DateTime.toIso(dateValue);
33
+ const dateTimeIso = (dateValue: Date | string) => {
34
+ const date = new DateTime({ value: dateValue });
35
+ return date.toIso();
34
36
  };
35
37
 
36
38
  const DateRangeInline = (props: DateRangeInlineProps) => {
@@ -50,17 +52,14 @@ const DateRangeInline = (props: DateRangeInlineProps) => {
50
52
  <>
51
53
  {icon && (
52
54
  <>
53
- <Body color="light"
54
- key={Math.random()}
55
- tag="span"
56
- >
55
+ <Body color="light" key={Math.random()} tag="span">
57
56
  <Icon
58
- className="pb_date_range_inline_icon"
59
- dark={dark}
60
- fixedWidth
61
- icon="calendar-alt"
62
- size={size}
63
- tag="span"
57
+ className="pb_date_range_inline_icon"
58
+ dark={dark}
59
+ fixedWidth
60
+ icon="calendar-alt"
61
+ size={size}
62
+ tag="span"
64
63
  />
65
64
  </Body>
66
65
  </>
@@ -79,7 +78,7 @@ const DateRangeInline = (props: DateRangeInlineProps) => {
79
78
 
80
79
  const dateRangeClasses = buildCss("pb_date_range_inline_kit", align);
81
80
  const dataProps = buildDataProps(data)
82
- const renderTime = (date: Date) => {
81
+ const renderTime = (date: Date | string) => {
83
82
  return (
84
83
  <time dateTime={dateTimeIso(date)}>
85
84
  {dateInCurrentYear() ? (
@@ -93,30 +92,24 @@ const DateRangeInline = (props: DateRangeInlineProps) => {
93
92
 
94
93
  return (
95
94
  <div
96
- {...dataProps}
97
- className={classnames(dateRangeClasses, globalProps(props), className)}
95
+ {...dataProps}
96
+ className={classnames(dateRangeClasses, globalProps(props), className)}
98
97
  >
99
98
  <div className="pb_date_range_inline_wrapper">
100
99
  {size == "xs" && (
101
100
  <>
102
101
  {iconContent()}
103
- <Caption dark={dark}
104
- tag="span"
105
- >
102
+ <Caption dark={dark} tag="span">
106
103
  {renderTime(startDate)}
107
104
  </Caption>
108
- <Caption dark={dark}
109
- tag="span"
110
- >
105
+ <Caption dark={dark} tag="span">
111
106
  <Icon
112
- className="pb_date_range_inline_arrow"
113
- fixedWidth
114
- icon="long-arrow-right"
107
+ className="pb_date_range_inline_arrow"
108
+ fixedWidth
109
+ icon="long-arrow-right"
115
110
  />
116
111
  </Caption>
117
- <Caption dark={dark}
118
- tag="span"
119
- >
112
+ <Caption dark={dark} tag="span">
120
113
  {renderTime(endDate)}
121
114
  </Caption>
122
115
  </>
@@ -125,25 +118,18 @@ const DateRangeInline = (props: DateRangeInlineProps) => {
125
118
  {size == "sm" && (
126
119
  <>
127
120
  {iconContent()}
128
- <Body dark={dark}
129
- tag="span"
130
- >
121
+ <Body dark={dark} tag="span">
131
122
  {renderTime(startDate)}
132
123
  </Body>
133
- <Body color="light"
134
- dark={dark}
135
- tag="span"
136
- >
124
+ <Body color="light" dark={dark} tag="span">
137
125
  <Icon
138
- className="pb_date_range_inline_arrow"
139
- dark={dark}
140
- fixedWidth
141
- icon="long-arrow-right"
126
+ className="pb_date_range_inline_arrow"
127
+ dark={dark}
128
+ fixedWidth
129
+ icon="long-arrow-right"
142
130
  />
143
131
  </Body>
144
- <Body dark={dark}
145
- tag="span"
146
- >
132
+ <Body dark={dark} tag="span">
147
133
  {renderTime(endDate)}
148
134
  </Body>
149
135
  </>
@@ -14,9 +14,9 @@ type DateRangeStackedProps = {
14
14
  className?: string | string[],
15
15
  data?: string,
16
16
  dark?: boolean,
17
- endDate: Date,
17
+ endDate: string,
18
18
  id?: string,
19
- startDate: Date,
19
+ startDate: string,
20
20
  }
21
21
 
22
22
  const DateRangeStacked = (props: DateRangeStackedProps) => {
@@ -29,9 +29,7 @@ const DateRangeStacked = (props: DateRangeStackedProps) => {
29
29
  const dataProps = buildDataProps(data)
30
30
 
31
31
  return (
32
- <div {...dataProps}
33
- className={css}
34
- >
32
+ <div {...dataProps} className={css}>
35
33
  <Flex vertical="center">
36
34
  <FlexItem>
37
35
  <DateYearStacked
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
 
3
3
  import classnames from "classnames";
4
+ import DateTime from "../pb_kit/dateTime";
4
5
  import { buildCss, buildDataProps } from "../utilities/props";
5
6
  import { globalProps } from "../utilities/globalProps";
6
- import DateTime from '../pb_kit/dateTime';
7
7
 
8
8
  import Caption from "../pb_caption/_caption";
9
9
  import Title from "../pb_title/_title";
@@ -14,7 +14,7 @@ type DateStackedProps = {
14
14
  className?: string | string[];
15
15
  dark?: boolean;
16
16
  data?: string;
17
- date: Date;
17
+ date: string | Date;
18
18
  size?: "sm" | "md";
19
19
  id?: string;
20
20
  reverse?: boolean;
@@ -45,42 +45,39 @@ const DateStacked = (props: DateStackedProps) => {
45
45
  className
46
46
  );
47
47
 
48
- const currentYear = new Date().getFullYear()
49
- const inputYear = DateTime.toYear(date);
48
+ const currentYear = new Date().getFullYear().toString();
49
+ const dateTimestamp = new DateTime({ value: date });
50
+ const inputYear = dateTimestamp.toYear().toString();
50
51
  const dataProps = buildDataProps(data)
51
52
 
52
53
  return (
53
54
  <>
54
55
  {bold == false ? (
55
- <div {...dataProps}
56
- className={classes}
57
- >
56
+ <div {...dataProps} className={classes}>
58
57
  <div className="pb_date_stacked_day_month">
59
- <Caption text={DateTime.toMonth(date).toUpperCase()} />
58
+ <Caption text={dateTimestamp.toMonth().toUpperCase()} />
60
59
  <Title
61
- dark={dark}
62
- size={sizes[size]}
63
- text={DateTime.toDay(date).toString()}
60
+ dark={dark}
61
+ size={sizes[size]}
62
+ text={dateTimestamp.toDay()}
64
63
  />
65
64
  </div>
66
65
  {currentYear != inputYear && <Caption size="xs">{inputYear}</Caption>}
67
66
  </div>
68
67
  ) : (
69
- <div {...dataProps}
70
- className={classes}
71
- >
68
+ <div {...dataProps} className={classes}>
72
69
  <div className="pb_date_stacked_day_month">
73
- <Title
74
- bold
75
- dark={dark}
76
- size="4"
77
- text={DateTime.toMonth(date)}
70
+ <Title
71
+ bold
72
+ dark={dark}
73
+ size="4"
74
+ text={dateTimestamp.toMonth()}
78
75
  />
79
- <Title
80
- bold
81
- dark={dark}
82
- size="4"
83
- text={DateTime.toDay(date).toString()}
76
+ <Title
77
+ bold
78
+ dark={dark}
79
+ size="4"
80
+ text={dateTimestamp.toDay()}
84
81
  />
85
82
  {currentYear != inputYear && <Title size="4">{inputYear}</Title>}
86
83
  </div>
@@ -13,7 +13,7 @@ type DateTimeProps = {
13
13
  aria?: { [key: string]: string; },
14
14
  className?: string,
15
15
  data?: { [key: string]: string; },
16
- datetime: Date,
16
+ datetime: string,
17
17
  id?: string,
18
18
  size?: "sm" | "md",
19
19
  showDayOfWeek: boolean,
@@ -89,7 +89,7 @@ describe('DateTime Kit', () => {
89
89
  const kit = screen.getByTestId(testId)
90
90
  const text = kit.querySelector('.pb_time_kit_md.ml_sm')
91
91
 
92
- expect(text.textContent).toEqual('2:00p GMT+9')
92
+ expect(text.textContent).toEqual('2:00p JST')
93
93
  })
94
94
  test('renders DatePicker size', () => {
95
95
  render(
@@ -12,8 +12,8 @@ import DateStacked from '../pb_date_stacked/_date_stacked'
12
12
 
13
13
  type DateTimeStackedProps = {
14
14
  id?: string,
15
- date: Date,
16
- datetime: Date,
15
+ date: string,
16
+ datetime: string,
17
17
  dark: boolean,
18
18
  timeZone?: string,
19
19
  }
@@ -34,7 +34,7 @@ test('renders time in default timezone', () => {
34
34
  test('renders time in timezone', () => {
35
35
  props.timeZone = 'Asia/Tokyo'
36
36
  const kit = renderKit(DateTimeStacked, props)
37
- expect(kit).toHaveTextContent(`${monthDayYear}2:00aGMT+9`)
37
+ expect(kit).toHaveTextContent(`${monthDayYear}2:00aJST`)
38
38
  })
39
39
 
40
40
  test('renders time in timezone', () => {
@@ -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, buildDataProps } from '../utilities/props'
5
6
  import { globalProps } from '../utilities/globalProps'
6
- import DateTime from '../pb_kit/dateTime';
7
7
 
8
8
  import Body from '../pb_body/_body'
9
9
  import Title from '../pb_title/_title'
@@ -13,12 +13,13 @@ type DateYearStackedProps = {
13
13
  className?: string | string[],
14
14
  dark?: boolean,
15
15
  data?: string,
16
- date: Date,
16
+ date: string,
17
17
  id?: string,
18
18
  }
19
19
 
20
20
  const DateYearStacked = (props: DateYearStackedProps) => {
21
21
  const { align = 'left', className, dark = false, date, data={} } = props
22
+ const dateTimestamp = new DateTime({ value: date })
22
23
  const css = classnames(
23
24
  buildCss('pb_date_year_stacked', align),
24
25
  globalProps(props),
@@ -28,14 +29,15 @@ const DateYearStacked = (props: DateYearStackedProps) => {
28
29
 
29
30
  return (
30
31
  <div {...dataProps}
31
- className={css}
32
- >
32
+ className={css}>
33
33
  <Title
34
34
  dark={dark}
35
35
  size={4}
36
- text={`${DateTime.toDay(date)} ${DateTime.toMonth(date).toUpperCase()}`}
36
+ text={`${dateTimestamp.toDay()} ${dateTimestamp
37
+ .toMonth()
38
+ .toUpperCase()}`}
37
39
  />
38
- <Body color="light">{DateTime.toYear(date)}</Body>
40
+ <Body color="light">{dateTimestamp.toYear()}</Body>
39
41
  </div>
40
42
  )
41
43
  }
@@ -1,162 +1,90 @@
1
+
2
+ import moment, { Moment } from 'moment'
3
+ import 'moment-strftime'
4
+ import 'moment-timezone'
5
+
6
+ type DateTimeType = {
7
+ value: string | Date,
8
+ zone?: string,
9
+ }
10
+
1
11
  const ABBR_DAYS = ['SU', 'M', 'T', 'W', 'TH', 'F', 'S']
2
12
 
3
- const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
13
+ export default class DateTime {
14
+ value: Moment & any
15
+ constructor({ value, zone = 'America/New_York' }: DateTimeType) {
16
+ this.value = this.convertToTimestampZone(value, zone)
17
+ }
4
18
 
5
- const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
19
+ convertToTimestampZone(value: string | Date, zone: string) {
20
+ return moment(value).tz(zone)
21
+ }
6
22
 
7
- export const toMinute = (newDate: Date, timeZone?: string): string => {
8
- const date = new Date(newDate)
9
- if (timeZone) {
10
- return date.toLocaleTimeString(undefined, {timeZone, hour: "2-digit", minute: "2-digit"}).slice(3, 5);
11
- } else {
12
- return date.toLocaleTimeString(undefined, {hour: "2-digit", minute: "2-digit"}).slice(3, 5);
23
+ convertToTimezone() {
24
+ return this.value.strftime('%Z')
13
25
  }
14
- }
15
26
 
16
- export const toHour = (newDate: Date, timeZone?: string): string => {
17
- const date = new Date(newDate)
18
- if (timeZone) {
19
- return date.toLocaleTimeString(undefined, {timeZone, hour: "numeric"}).split(' ')[0];
20
- } else {
21
- return date.toLocaleTimeString(undefined, {hour: "numeric"}).split(' ')[0];
27
+ toCustomFormat(format = '%-m/%-d') {
28
+ return this.value.strftime(format)
22
29
  }
23
- }
24
30
 
25
- export const toDay = (newDate: Date, timeZone?: string): number => {
26
- if (timeZone) {
27
- const date = new Date(newDate.toLocaleString(undefined, { timeZone }));
28
- return date.getUTCDate()
29
- } else {
30
- const date = new Date(newDate)
31
- return date.getUTCDate()
32
- }
33
- }
31
+ toYear() {
32
+ return this.value.strftime('%Y')
33
+ }
34
34
 
35
- export const toDayAbbr = (newDate: Date): string => {
36
- const date = new Date(newDate)
37
- return ABBR_DAYS[date.getUTCDay()]
38
- }
35
+ toMonth() {
36
+ return this.value.strftime('%b')
37
+ }
39
38
 
40
- export const toWeekday = (newDate: Date): string => {
41
- const date = new Date(newDate)
42
- return days[date.getUTCDay()]
43
- }
39
+ toMonthNum() {
40
+ return this.value.strftime('%-m')
41
+ }
44
42
 
45
- export const toMonth = (newDate: Date, timeZone?: string): string => {
46
- if (timeZone) {
47
- const date = new Date(newDate.toLocaleString(undefined, { timeZone }));
48
- return months[date.getUTCMonth()]
49
- } else {
50
- const date = new Date(newDate)
51
- return months[date.getUTCMonth()]
52
- }
53
- }
43
+ toMonthFull() {
44
+ return this.value.strftime('%B')
45
+ }
54
46
 
55
- export const toMonthNum = (newDate: Date): number => {
56
- const date = new Date(newDate)
57
- return date.getUTCMonth() +1
58
- }
47
+ toDay() {
48
+ return this.value.strftime('%e')
49
+ }
59
50
 
60
- export const toYear = (newDate: Date, timeZone?: string): number => {
61
- if (timeZone) {
62
- const date = new Date(newDate.toLocaleString(undefined, { timeZone }));
63
- return date.getUTCFullYear()
64
- } else {
65
- const date = new Date(newDate)
66
- return date.getUTCFullYear()
67
- }
68
- }
51
+ toDayAbbr() {
52
+ return ABBR_DAYS[this.value.day()]
53
+ }
69
54
 
70
- export const toTime = (newDate: Date, timeZone?: string): string => {
71
- const date = new Date(newDate)
72
- if (timeZone) {
73
- return date.toLocaleTimeString(undefined, {timeZone, timeStyle: "short"}).split(' ')[0];
74
- } else {
75
- return date.toLocaleTimeString(undefined, {timeStyle: "short"}).split(' ')[0];
55
+ toWeekday() {
56
+ return this.value.strftime('%a')
76
57
  }
77
- }
78
58
 
79
- export const toMeridiem = (newDate: Date, timeZone?: string): string => {
80
- const date = new Date(newDate)
81
- if (timeZone) {
82
- return date.toLocaleString(undefined, {timeZone, hour12: true }).slice(-2).charAt(0).toLocaleLowerCase();
83
- } else {
84
- return date.toLocaleString(undefined, {hour12: true }).slice(-2).charAt(0).toLocaleLowerCase();
85
- }
86
- }
59
+ toHour() {
60
+ return this.value.strftime('%l')
61
+ }
87
62
 
88
- export const toTimeZone = (newDate: Date, timeZone?: string): string => {
89
- const date = new Date(newDate)
90
- if (timeZone) {
91
- return date.toLocaleString(undefined, {timeZone, timeZoneName: "short"}).split(' ')[3];
92
- } else {
93
- return date.toLocaleString(undefined, {timeZoneName: "short"}).split(' ')[3];
94
- }
95
- }
63
+ toMinute() {
64
+ return this.value.strftime('%M')
65
+ }
96
66
 
97
- export const toTimeWithMeridiem = (newDate: Date, timeZone: string): string => {
98
- const date = new Date(newDate)
99
- return `${toTime(date, timeZone)}${toMeridiem(date, timeZone)}`;
100
- }
67
+ toMeridian() {
68
+ return this.value.strftime('%P')[0]
69
+ }
101
70
 
102
- export const toIso = (newDate: Date): string => {
103
- const date = new Date(newDate)
104
- return date.toISOString()
105
- }
71
+ toIso() {
72
+ return this.value.toISOString()
73
+ }
106
74
 
107
- export const fromNow = (newDate: Date): string => {
108
-
109
- const startDate = new Date(newDate).getTime()
110
- const endDate = new Date().getTime()
111
- const elapsedTime = endDate - startDate
112
- let elapsedTimeString = `${Math.round(elapsedTime / (365.25 * 24 * 60 * 60 * 1000))} years ago.`; // 730+ days
113
-
114
- const elapsedTimeData = [
115
- { min: 0, max: 44999, value: "a few seconds ago" }, // 0-44 seconds
116
- { min: 45000, max: 89999, value: "a minute ago" }, // 45-89 seconds
117
- { min: 90000, max: 2649999, value: `${Math.round(elapsedTime / 60000)} minutes ago`}, // 90s-44 minutes
118
- { min: 2650000, max: 7299999, value: "an hour ago" }, // 45-120 minutes
119
- { min: 7300000, max: 75699999, value: `${Math.round(elapsedTime / 3600000)} hours ago`}, // 2-21 hours
120
- { min: 75700000, max: 172899999, value: "a day ago" }, // 22-48 hours
121
- { min: 172900000, max: 2169999999, value: `${Math.round(elapsedTime / 86400000)} days ago`}, // 2-25 days
122
- { min: 2170000000, max: 5184999999, value: "a month ago"}, // 26-60 days
123
- { min: 5185000000, max: 27561699999, value: `${Math.round(elapsedTime / 30.44 * 24 * 60 * 60 * 1000)} months ago`}, // 60-319 days
124
- { min: 27561700000, max: 63072999999, value: "a year ago"}, // 320-730 days
125
- ];
126
-
127
- for (const timeDate of elapsedTimeData) {
128
- if (elapsedTime >= timeDate.min && elapsedTime <= timeDate.max) {
129
- elapsedTimeString = timeDate.value;
130
- break;
131
- }
132
- }
133
-
134
- return elapsedTimeString
135
- }
75
+ toTime() {
76
+ const time = this.value.strftime('%I:%M')
136
77
 
137
- export const toCustomFormat = (newDate: Date, format = 'month_day'): string => {
138
- const date = new Date(newDate)
139
- if (format == "month_day") {
140
- return `${toMonthNum(date)}/${toDay(date)}`
141
- } else {
142
- return `${date.toLocaleString(undefined, {month: "short"})} ${toDay(date)}`
78
+ // strftime adds a leading 0 on single hour times. ie 08:31.
79
+ // this removes that 0 to match the rails kit.
80
+ return time.charAt() === '0' ? time.slice(1) : time
143
81
  }
144
- }
145
82
 
146
- export default {
147
- toMinute,
148
- toHour,
149
- toDay,
150
- toDayAbbr,
151
- toWeekday,
152
- toMonth,
153
- toMonthNum,
154
- toYear,
155
- toTime,
156
- toMeridiem,
157
- toTimeZone,
158
- toTimeWithMeridiem,
159
- toIso,
160
- fromNow,
161
- toCustomFormat,
162
- }
83
+ toTimezone() {
84
+ return this.value.strftime('%Z')
85
+ }
86
+
87
+ toTimeWithMeridian() {
88
+ return this.toTime() + this.toMeridian()
89
+ }
90
+ }