playbook_ui 12.36.0.pre.alpha.PLAY936momentjs1058 → 12.36.0.pre.alpha.PLAY942collapsiblenav21035
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/index.js +2 -1
- data/app/pb_kits/playbook/pb_badge/docs/example.yml +0 -7
- data/app/pb_kits/playbook/pb_collapsible/_collapsible.tsx +15 -13
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +24 -8
- data/app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb +1 -1
- data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_icons.jsx +15 -4
- data/app/pb_kits/playbook/pb_collapsible/docs/example.yml +2 -2
- data/app/pb_kits/playbook/pb_collapsible/useCollapsible.tsx +14 -0
- data/app/pb_kits/playbook/pb_date/_date.tsx +8 -7
- data/app/pb_kits/playbook/pb_date/docs/_date_alignment.jsx +2 -2
- data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +5 -29
- data/app/pb_kits/playbook/pb_date/docs/_date_unstyled.jsx +2 -2
- data/app/pb_kits/playbook/pb_date/docs/_date_variants.jsx +5 -5
- data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +31 -45
- data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.tsx +3 -5
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +21 -24
- data/app/pb_kits/playbook/pb_date_time/_date_time.tsx +1 -1
- data/app/pb_kits/playbook/pb_date_time/dateTime.test.js +1 -1
- data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +2 -2
- data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.test.js +1 -1
- data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.tsx +8 -6
- data/app/pb_kits/playbook/pb_kit/dateTime.ts +63 -146
- data/app/pb_kits/playbook/pb_label_value/_label_value.tsx +31 -52
- data/app/pb_kits/playbook/pb_logistic/_logistic.jsx +120 -0
- data/app/pb_kits/playbook/pb_message/_message.tsx +24 -24
- data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +22 -1
- data/app/pb_kits/playbook/pb_nav/_item.tsx +26 -2
- data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav.jsx +59 -79
- data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_custom_icons.jsx +4 -6
- data/app/pb_kits/playbook/pb_nav/docs/example.yml +2 -2
- data/app/pb_kits/playbook/pb_nav/item.rb +5 -1
- data/app/pb_kits/playbook/pb_pill/docs/example.yml +0 -5
- data/app/pb_kits/playbook/pb_radio/docs/example.yml +0 -11
- data/app/pb_kits/playbook/pb_time/_time.tsx +11 -9
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +49 -46
- data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.tsx +6 -4
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +11 -11
- data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +0 -8
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +11 -8
- data/dist/playbook-rails.js +7 -7
- data/lib/playbook/version.rb +1 -1
- metadata +4 -25
- data/app/pb_kits/playbook/pb_badge/docs/_badge_colors_swift.md +0 -33
- data/app/pb_kits/playbook/pb_badge/docs/_badge_default_swift.md +0 -9
- data/app/pb_kits/playbook/pb_badge/docs/_badge_notification_swift.md +0 -9
- data/app/pb_kits/playbook/pb_badge/docs/_badge_props_swift.md +0 -6
- data/app/pb_kits/playbook/pb_badge/docs/_badge_rounded_swift.md +0 -9
- data/app/pb_kits/playbook/pb_pill/docs/_pill_default_swift.md +0 -5
- data/app/pb_kits/playbook/pb_pill/docs/_pill_props_swift.md +0 -5
- data/app/pb_kits/playbook/pb_pill/docs/_pill_variants_swift.md +0 -10
- data/app/pb_kits/playbook/pb_radio/docs/_radio_alignment_swift.md +0 -16
- data/app/pb_kits/playbook/pb_radio/docs/_radio_custom_swift.md +0 -18
- data/app/pb_kits/playbook/pb_radio/docs/_radio_default_swift.md +0 -15
- data/app/pb_kits/playbook/pb_radio/docs/_radio_error_swift.md +0 -14
- data/app/pb_kits/playbook/pb_radio/docs/_radio_orientation_swift.md +0 -15
- data/app/pb_kits/playbook/pb_radio/docs/_radio_padding_swift.md +0 -31
- data/app/pb_kits/playbook/pb_radio/docs/_radio_props_swift.md +0 -10
- data/app/pb_kits/playbook/pb_radio/docs/_radio_spacing_swift.md +0 -36
- data/app/pb_kits/playbook/pb_radio/docs/_radio_subtitle_swift.md +0 -13
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align_swift.md +0 -45
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default_swift.md +0 -26
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_swift.md +0 -25
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_props_swift.md +0 -10
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_swift.md +0 -67
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_swift.md +0 -19
@@ -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
|
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={
|
58
|
+
<Caption text={dateTimestamp.toMonth().toUpperCase()} />
|
60
59
|
<Title
|
61
|
-
|
62
|
-
|
63
|
-
|
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
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
70
|
+
<Title
|
71
|
+
bold
|
72
|
+
dark={dark}
|
73
|
+
size="4"
|
74
|
+
text={dateTimestamp.toMonth()}
|
78
75
|
/>
|
79
|
-
<Title
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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>
|
@@ -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
|
92
|
+
expect(text.textContent).toEqual('2:00p JST')
|
93
93
|
})
|
94
94
|
test('renders DatePicker size', () => {
|
95
95
|
render(
|
@@ -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:
|
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:
|
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
|
-
|
32
|
-
>
|
32
|
+
className={css}>
|
33
33
|
<Title
|
34
34
|
dark={dark}
|
35
35
|
size={4}
|
36
|
-
text={`${
|
36
|
+
text={`${dateTimestamp.toDay()} ${dateTimestamp
|
37
|
+
.toMonth()
|
38
|
+
.toUpperCase()}`}
|
37
39
|
/>
|
38
|
-
<Body color="light">{
|
40
|
+
<Body color="light">{dateTimestamp.toYear()}</Body>
|
39
41
|
</div>
|
40
42
|
)
|
41
43
|
}
|
@@ -1,173 +1,90 @@
|
|
1
|
-
const ABBR_DAYS = ['SU', 'M', 'T', 'W', 'TH', 'F', 'S']
|
2
1
|
|
3
|
-
|
2
|
+
import moment, { Moment } from 'moment'
|
3
|
+
import 'moment-strftime'
|
4
|
+
import 'moment-timezone'
|
4
5
|
|
5
|
-
|
6
|
+
type DateTimeType = {
|
7
|
+
value: string | Date,
|
8
|
+
zone?: string,
|
9
|
+
}
|
6
10
|
|
7
|
-
const
|
8
|
-
const isTimelessStringDate = typeof newDate === "string" && !newDate.includes("T")
|
11
|
+
const ABBR_DAYS = ['SU', 'M', 'T', 'W', 'TH', 'F', 'S']
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
+
export default class DateTime {
|
14
|
+
value: Moment & any
|
15
|
+
constructor({ value, zone = 'America/New_York' }: DateTimeType) {
|
16
|
+
this.value = this.convertToTimestampZone(value, zone)
|
13
17
|
}
|
14
18
|
|
15
|
-
|
16
|
-
|
19
|
+
convertToTimestampZone(value: string | Date, zone: string) {
|
20
|
+
return moment(value).tz(zone)
|
21
|
+
}
|
17
22
|
|
18
|
-
|
19
|
-
|
20
|
-
if (timeZone) {
|
21
|
-
return date.toLocaleTimeString(undefined, {timeZone, hour: "2-digit", minute: "2-digit"}).slice(3, 5);
|
22
|
-
} else {
|
23
|
-
return date.toLocaleTimeString(undefined, {hour: "2-digit", minute: "2-digit"}).slice(3, 5);
|
23
|
+
convertToTimezone() {
|
24
|
+
return this.value.strftime('%Z')
|
24
25
|
}
|
25
|
-
}
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
if (timeZone) {
|
30
|
-
return date.toLocaleTimeString(undefined, {timeZone, hour: "numeric"}).split(' ')[0];
|
31
|
-
} else {
|
32
|
-
return date.toLocaleTimeString(undefined, {hour: "numeric"}).split(' ')[0];
|
27
|
+
toCustomFormat(format = '%-m/%-d') {
|
28
|
+
return this.value.strftime(format)
|
33
29
|
}
|
34
|
-
}
|
35
30
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
return date.getDate()
|
40
|
-
} else {
|
41
|
-
const date = formatDate(newDate)
|
42
|
-
return date.getDate()
|
43
|
-
}
|
44
|
-
}
|
31
|
+
toYear() {
|
32
|
+
return this.value.strftime('%Y')
|
33
|
+
}
|
45
34
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
}
|
35
|
+
toMonth() {
|
36
|
+
return this.value.strftime('%b')
|
37
|
+
}
|
50
38
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
}
|
39
|
+
toMonthNum() {
|
40
|
+
return this.value.strftime('%-m')
|
41
|
+
}
|
55
42
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
return months[date.getUTCMonth()]
|
60
|
-
} else {
|
61
|
-
const date = formatDate(newDate)
|
62
|
-
return months[date.getUTCMonth()]
|
63
|
-
}
|
64
|
-
}
|
43
|
+
toMonthFull() {
|
44
|
+
return this.value.strftime('%B')
|
45
|
+
}
|
65
46
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
}
|
47
|
+
toDay() {
|
48
|
+
return this.value.strftime('%e')
|
49
|
+
}
|
70
50
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
return date.getUTCFullYear()
|
75
|
-
} else {
|
76
|
-
const date = new Date(newDate)
|
77
|
-
return date.getUTCFullYear()
|
78
|
-
}
|
79
|
-
}
|
51
|
+
toDayAbbr() {
|
52
|
+
return ABBR_DAYS[this.value.day()]
|
53
|
+
}
|
80
54
|
|
81
|
-
|
82
|
-
|
83
|
-
if (timeZone) {
|
84
|
-
return date.toLocaleTimeString(undefined, {timeZone, timeStyle: "short"}).split(' ')[0];
|
85
|
-
} else {
|
86
|
-
return date.toLocaleTimeString(undefined, {timeStyle: "short"}).split(' ')[0];
|
55
|
+
toWeekday() {
|
56
|
+
return this.value.strftime('%a')
|
87
57
|
}
|
88
|
-
}
|
89
58
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
return date.toLocaleString(undefined, {timeZone, hour12: true }).slice(-2).charAt(0).toLocaleLowerCase();
|
94
|
-
} else {
|
95
|
-
return date.toLocaleString(undefined, {hour12: true }).slice(-2).charAt(0).toLocaleLowerCase();
|
96
|
-
}
|
97
|
-
}
|
59
|
+
toHour() {
|
60
|
+
return this.value.strftime('%l')
|
61
|
+
}
|
98
62
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
return date.toLocaleString(undefined, {timeZone, timeZoneName: "short"}).split(' ')[3];
|
103
|
-
} else {
|
104
|
-
return date.toLocaleString(undefined, {timeZoneName: "short"}).split(' ')[3];
|
105
|
-
}
|
106
|
-
}
|
63
|
+
toMinute() {
|
64
|
+
return this.value.strftime('%M')
|
65
|
+
}
|
107
66
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
}
|
67
|
+
toMeridian() {
|
68
|
+
return this.value.strftime('%P')[0]
|
69
|
+
}
|
112
70
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
}
|
71
|
+
toIso() {
|
72
|
+
return this.value.toISOString()
|
73
|
+
}
|
117
74
|
|
118
|
-
|
119
|
-
|
120
|
-
const startDate = formatDate(newDate).getTime()
|
121
|
-
const endDate = new Date().getTime()
|
122
|
-
const elapsedTime = endDate - startDate
|
123
|
-
let elapsedTimeString = `${Math.round(elapsedTime / (365.25 * 24 * 60 * 60 * 1000))} years ago.`; // 730+ days
|
124
|
-
|
125
|
-
const elapsedTimeData = [
|
126
|
-
{ min: 0, max: 44999, value: "a few seconds ago" }, // 0-44 seconds
|
127
|
-
{ min: 45000, max: 89999, value: "a minute ago" }, // 45-89 seconds
|
128
|
-
{ min: 90000, max: 2649999, value: `${Math.round(elapsedTime / 60000)} minutes ago`}, // 90s-44 minutes
|
129
|
-
{ min: 2650000, max: 7299999, value: "an hour ago" }, // 45-120 minutes
|
130
|
-
{ min: 7300000, max: 75699999, value: `${Math.round(elapsedTime / 3600000)} hours ago`}, // 2-21 hours
|
131
|
-
{ min: 75700000, max: 172899999, value: "a day ago" }, // 22-48 hours
|
132
|
-
{ min: 172900000, max: 2169999999, value: `${Math.round(elapsedTime / 86400000)} days ago`}, // 2-25 days
|
133
|
-
{ min: 2170000000, max: 5184999999, value: "a month ago"}, // 26-60 days
|
134
|
-
{ min: 5185000000, max: 27561699999, value: `${Math.round(elapsedTime / 30.44 * 24 * 60 * 60 * 1000)} months ago`}, // 60-319 days
|
135
|
-
{ min: 27561700000, max: 63072999999, value: "a year ago"}, // 320-730 days
|
136
|
-
];
|
137
|
-
|
138
|
-
for (const timeDate of elapsedTimeData) {
|
139
|
-
if (elapsedTime >= timeDate.min && elapsedTime <= timeDate.max) {
|
140
|
-
elapsedTimeString = timeDate.value;
|
141
|
-
break;
|
142
|
-
}
|
143
|
-
}
|
144
|
-
|
145
|
-
return elapsedTimeString
|
146
|
-
}
|
75
|
+
toTime() {
|
76
|
+
const time = this.value.strftime('%I:%M')
|
147
77
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
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
|
81
|
+
}
|
82
|
+
|
83
|
+
toTimezone() {
|
84
|
+
return this.value.strftime('%Z')
|
154
85
|
}
|
155
|
-
}
|
156
86
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
toDay,
|
161
|
-
toDayAbbr,
|
162
|
-
toWeekday,
|
163
|
-
toMonth,
|
164
|
-
toMonthNum,
|
165
|
-
toYear,
|
166
|
-
toTime,
|
167
|
-
toMeridiem,
|
168
|
-
toTimeZone,
|
169
|
-
toTimeWithMeridiem,
|
170
|
-
toIso,
|
171
|
-
fromNow,
|
172
|
-
toCustomFormat,
|
87
|
+
toTimeWithMeridian() {
|
88
|
+
return this.toTime() + this.toMeridian()
|
89
|
+
}
|
173
90
|
}
|
@@ -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:
|
30
|
-
const month =
|
31
|
-
const day =
|
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
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
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
|
-
|
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
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
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
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
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
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
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
|