From 78adb84030942b46b90904c7d71ea5bdb6851229 Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 09:00:29 -0600
Subject: [PATCH 01/10] Expose prettyDuration and commonDurationRanges
---
src/components/date_picker/index.d.ts | 15 +++++++++++++++
src/components/date_picker/index.js | 7 ++++++-
.../date_picker/super_date_picker/index.js | 2 ++
.../super_date_picker/pretty_duration.js | 11 +++++++++++
.../super_date_picker/super_date_picker.js | 19 ++++++++-----------
src/components/index.js | 2 ++
6 files changed, 44 insertions(+), 12 deletions(-)
diff --git a/src/components/date_picker/index.d.ts b/src/components/date_picker/index.d.ts
index 2647f4e4891..ff810cec0be 100644
--- a/src/components/date_picker/index.d.ts
+++ b/src/components/date_picker/index.d.ts
@@ -86,4 +86,19 @@ declare module '@elastic/eui' {
export const ReactDatePicker: typeof _ReactDatePicker;
export const ReactDatePickerProps: _ReactDatePickerProps;
+
+ interface DurationRange {
+ start: string;
+ end: string;
+ label: string;
+ }
+
+ export const commonDurationRanges: DurationRange[];
+
+ export function prettyDuration(
+ timeFrom: string,
+ timeTo: string,
+ quickRanges: DurationRange[],
+ dateFormat: string
+ ): string;
}
diff --git a/src/components/date_picker/index.js b/src/components/date_picker/index.js
index 4cd12a69bf6..69a0ec433e7 100644
--- a/src/components/date_picker/index.js
+++ b/src/components/date_picker/index.js
@@ -2,4 +2,9 @@ export { EuiDatePicker } from './date_picker';
export { EuiDatePickerRange } from './date_picker_range';
-export { EuiSuperDatePicker, EuiSuperUpdateButton } from './super_date_picker';
+export {
+ EuiSuperDatePicker,
+ EuiSuperUpdateButton,
+ prettyDuration,
+ commonDurationRanges,
+} from './super_date_picker';
diff --git a/src/components/date_picker/super_date_picker/index.js b/src/components/date_picker/super_date_picker/index.js
index 148086735d8..978ec874cc6 100644
--- a/src/components/date_picker/super_date_picker/index.js
+++ b/src/components/date_picker/super_date_picker/index.js
@@ -1,3 +1,5 @@
export { EuiSuperDatePicker } from './super_date_picker';
export { EuiSuperUpdateButton } from './super_update_button';
+
+export { prettyDuration, commonDurationRanges } from './pretty_duration';
diff --git a/src/components/date_picker/super_date_picker/pretty_duration.js b/src/components/date_picker/super_date_picker/pretty_duration.js
index 86c6ac9a1e1..bbc05bede46 100644
--- a/src/components/date_picker/super_date_picker/pretty_duration.js
+++ b/src/components/date_picker/super_date_picker/pretty_duration.js
@@ -6,6 +6,17 @@ import { parseRelativeParts } from './relative_utils';
const ISO_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSZ';
+export const commonDurationRanges = [
+ { start: 'now/d', end: 'now/d', label: 'Today' },
+ { start: 'now/w', end: 'now/w', label: 'This week' },
+ { start: 'now/M', end: 'now/M', label: 'This month' },
+ { start: 'now/y', end: 'now/y', label: 'This year' },
+ { start: 'now-1d/d', end: 'now-1d/d', label: 'Yesterday' },
+ { start: 'now/w', end: 'now', label: 'Week to date' },
+ { start: 'now/M', end: 'now', label: 'Month to date' },
+ { start: 'now/y', end: 'now', label: 'Year to date' },
+];
+
function cantLookup(timeFrom, timeTo, dateFormat) {
const displayFrom = formatTimeString(timeFrom, dateFormat);
const displayTo = formatTimeString(timeTo, dateFormat, true);
diff --git a/src/components/date_picker/super_date_picker/super_date_picker.js b/src/components/date_picker/super_date_picker/super_date_picker.js
index a2c0f75d0ec..45e0527fd8b 100644
--- a/src/components/date_picker/super_date_picker/super_date_picker.js
+++ b/src/components/date_picker/super_date_picker/super_date_picker.js
@@ -6,7 +6,11 @@ import {
recentlyUsedRangeShape,
quickSelectPanelShape,
} from './types';
-import { prettyDuration, showPrettyDuration } from './pretty_duration';
+import {
+ prettyDuration,
+ showPrettyDuration,
+ commonDurationRanges,
+} from './pretty_duration';
import { prettyInterval } from './pretty_interval';
import dateMath from '@elastic/datemath';
@@ -20,6 +24,8 @@ import { EuiFormControlLayout } from '../../form';
import { EuiFlexGroup, EuiFlexItem } from '../../flex';
import { AsyncInterval } from './async_interval';
+export { prettyDuration, commonDurationRanges };
+
function isRangeInvalid(start, end) {
if (start === 'now' && end === 'now') {
return true;
@@ -105,16 +111,7 @@ export class EuiSuperDatePicker extends Component {
end: 'now',
isPaused: true,
refreshInterval: 0,
- commonlyUsedRanges: [
- { start: 'now/d', end: 'now/d', label: 'Today' },
- { start: 'now/w', end: 'now/w', label: 'This week' },
- { start: 'now/M', end: 'now/M', label: 'This month' },
- { start: 'now/y', end: 'now/y', label: 'This year' },
- { start: 'now-1d/d', end: 'now-1d/d', label: 'Yesterday' },
- { start: 'now/w', end: 'now', label: 'Week to date' },
- { start: 'now/M', end: 'now', label: 'Month to date' },
- { start: 'now/y', end: 'now', label: 'Year to date' },
- ],
+ commonlyUsedRanges: commonDurationRanges,
dateFormat: 'MMM D, YYYY @ HH:mm:ss.SSS',
recentlyUsedRanges: [],
showUpdateButton: true,
diff --git a/src/components/index.js b/src/components/index.js
index 2e93265dd77..9218bd62cdc 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -50,6 +50,8 @@ export {
EuiDatePickerRange,
EuiSuperDatePicker,
EuiSuperUpdateButton,
+ prettyDuration,
+ commonDurationRanges,
} from './date_picker';
export { EuiDelayHide } from './delay_hide';
From f6ff44145a67f31c964f962307e89894b667717c Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 09:50:37 -0600
Subject: [PATCH 02/10] prettyDuration docs
---
src-docs/src/routes.js | 3 +
.../views/pretty_duration/pretty_duration.js | 74 +++++++++++++++++++
.../pretty_duration_example.js | 65 ++++++++++++++++
3 files changed, 142 insertions(+)
create mode 100644 src-docs/src/views/pretty_duration/pretty_duration.js
create mode 100644 src-docs/src/views/pretty_duration/pretty_duration_example.js
diff --git a/src-docs/src/routes.js b/src-docs/src/routes.js
index 1cb118d3e5e..90ec7b00241 100644
--- a/src-docs/src/routes.js
+++ b/src-docs/src/routes.js
@@ -29,6 +29,8 @@ import { ColorPaletteExample } from './views/color_palette/color_palette_example
import { IsColorDarkExample } from './views/is_color_dark/is_color_dark_example';
+import { PrettyDurationExample } from './views/pretty_duration/pretty_duration_example';
+
import { UtilityClassesExample } from './views/utility_classes/utility_classes_example';
// Component examples
@@ -376,6 +378,7 @@ const navigation = [
InnerTextExample,
I18nExample,
IsColorDarkExample,
+ PrettyDurationExample,
MutationObserverExample,
OutsideClickDetectorExample,
PortalExample,
diff --git a/src-docs/src/views/pretty_duration/pretty_duration.js b/src-docs/src/views/pretty_duration/pretty_duration.js
new file mode 100644
index 00000000000..57f04ef8889
--- /dev/null
+++ b/src-docs/src/views/pretty_duration/pretty_duration.js
@@ -0,0 +1,74 @@
+import React, { Fragment } from 'react';
+
+import {
+ EuiSpacer,
+ EuiCodeBlock,
+ prettyDuration,
+} from '../../../../src/components';
+
+const examples = [
+ {
+ start: '2018-01-17T18:57:57.149Z',
+ end: '2018-01-17T20:00:00.000Z',
+ quickRanges: [],
+ dateFormat: 'MMMM Do YYYY, HH:mm:ss.SSS',
+ },
+ {
+ start: '2018-01-17T18:57:57.149Z',
+ end: '2018-01-17T20:00:00.000Z',
+ quickRanges: [],
+ dateFormat: 'MMMM Do YYYY @ HH:mm:ss.SSS',
+ },
+ {
+ start: '2018-01-17T18:57:57.149Z',
+ end: 'now-2h',
+ quickRanges: [],
+ dateFormat: 'MMMM Do YYYY @ HH:mm:ss.SSS',
+ },
+ {
+ start: 'now-17m',
+ end: 'now',
+ quickRanges: [],
+ dateFormat: 'MMMM Do YYYY @ HH:mm:ss.SSS',
+ },
+ {
+ start: 'now-17m',
+ end: 'now-1m',
+ quickRanges: [],
+ dateFormat: 'MMMM Do YYYY @ HH:mm:ss.SSS',
+ },
+ {
+ start: 'now-15m',
+ end: 'now',
+ quickRanges: [
+ {
+ start: 'now-15m',
+ end: 'now',
+ label: 'quick range 15 minutes custom display',
+ },
+ ],
+ dateFormat: 'MMMM Do YYYY, HH:mm:ss.SSS',
+ },
+];
+
+export default function prettyDurationExample() {
+ return (
+
+ {examples.map(({ start, end, quickRanges, dateFormat }, idx) => (
+
+
+ prettyDuration('{start}', '{end}',{' '}
+ {JSON.stringify(quickRanges)}, '
+ {dateFormat}')
+
+
+
+
+ {prettyDuration(start, end, quickRanges, dateFormat)}
+
+
+
+ ))}
+
+ );
+}
diff --git a/src-docs/src/views/pretty_duration/pretty_duration_example.js b/src-docs/src/views/pretty_duration/pretty_duration_example.js
new file mode 100644
index 00000000000..12d308ee620
--- /dev/null
+++ b/src-docs/src/views/pretty_duration/pretty_duration_example.js
@@ -0,0 +1,65 @@
+import React, { Fragment } from 'react';
+
+import { renderToHtml } from '../../services';
+
+import { GuideSectionTypes } from '../../components';
+
+import {
+ EuiAccordion,
+ EuiCode,
+ EuiCodeBlock,
+ commonDurationRanges,
+} from '../../../../src/components';
+
+import PrettyDuration from './pretty_duration';
+const prettyDurationSource = require('!!raw-loader!./pretty_duration');
+const prettyDurationHtml = renderToHtml(PrettyDuration);
+
+export const PrettyDurationExample = {
+ title: 'Pretty Duration',
+ sections: [
+ {
+ source: [
+ {
+ type: GuideSectionTypes.JS,
+ code: prettyDurationSource,
+ },
+ {
+ type: GuideSectionTypes.HTML,
+ code: prettyDurationHtml,
+ },
+ ],
+ text: (
+
+
+ Use prettyDuration to convert a start and end
+ date string to a human-friendly format.
+
+
+
+ Start and end values for the duration are passed as the first and
+ second arguments, respectively. These can be timestamps (
+ 2018-01-17T18:57:57.149Z) or relative times (
+ now-15m).
+
+
+
+ An array of quick range values is passed as the third argument.
+ These are used to pretty format custom ranges. EUI exports
+ commonDurationRanges which can be passed here.
+
+
+ {JSON.stringify(commonDurationRanges, null, 2)}
+
+
+
+
+
+ The output date/time format is specified by the fourth argument.
+
+
+ ),
+ demo: ,
+ },
+ ],
+};
From 88abe91e5697a251df58034440be80a7184a1f3e Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 09:54:36 -0600
Subject: [PATCH 03/10] changelog
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 217a8248753..e325528916b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
- Centered the square of the `popout` glyph in the artboard ([#2120](https://github.com/elastic/eui/pull/2120))
- Added `useInnerText` and `EuiInnerText` component utilities for retrieving text content of elements ([#2100](https://github.com/elastic/eui/pull/2100))
+- Exported `prettyDuration` and `commonDurationRanges` for pretty printing date ranges outside `EuiSuperDatePicker` ([#2100](https://github.com/elastic/eui/pull/2100))
**Bug fixes**
From 460a02bd0e8fa5241ff29e4a36998155e5e7f41d Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 11:24:27 -0600
Subject: [PATCH 04/10] changelog
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 679f00ab075..a0241c071a5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,7 @@
- Added `useInnerText` and `EuiInnerText` component utilities for retrieving text content of elements ([#2100](https://github.com/elastic/eui/pull/2100))
- Converted `EuiRangeHightlight`, `EuiRangeLabel`, `EuiRangeLevels`, `EuiRangeSlider`, `EuiRangeThumb`, `EuiRangeTicks`, `EuiRangeTrack`, and `EuiRangeWrapper` to TypeScript ([#2124](https://github.com/elastic/eui/pull/2124))
- Converted `EuiAccordion` to TypeScript ([#2128](https://github.com/elastic/eui/pull/2128))
-- Exported `prettyDuration` and `commonDurationRanges` for pretty printing date ranges outside `EuiSuperDatePicker` ([#2100](https://github.com/elastic/eui/pull/2100))
+- Exported `prettyDuration` and `commonDurationRanges` for pretty printing date ranges outside `EuiSuperDatePicker` ([#2132](https://github.com/elastic/eui/pull/2132))
**Bug fixes**
From 899e953281e96ada64d20f9825cfe6b62ef609ac Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 11:26:09 -0600
Subject: [PATCH 05/10] Update
src-docs/src/views/pretty_duration/pretty_duration.js
Co-Authored-By: dave.snider@gmail.com
---
src-docs/src/views/pretty_duration/pretty_duration.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src-docs/src/views/pretty_duration/pretty_duration.js b/src-docs/src/views/pretty_duration/pretty_duration.js
index 57f04ef8889..77925c55c31 100644
--- a/src-docs/src/views/pretty_duration/pretty_duration.js
+++ b/src-docs/src/views/pretty_duration/pretty_duration.js
@@ -56,7 +56,7 @@ export default function prettyDurationExample() {
{examples.map(({ start, end, quickRanges, dateFormat }, idx) => (
-
+
prettyDuration('{start}', '{end}',{' '}
{JSON.stringify(quickRanges)}, '
{dateFormat}')
From 5bfe17156f1ae28a4288c3bb2b48341e373810b2 Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 13:00:30 -0600
Subject: [PATCH 06/10] Update
src-docs/src/views/pretty_duration/pretty_duration_example.js
Co-Authored-By: Caroline Horn <549577+cchaos@users.noreply.github.com>
---
src-docs/src/views/pretty_duration/pretty_duration_example.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src-docs/src/views/pretty_duration/pretty_duration_example.js b/src-docs/src/views/pretty_duration/pretty_duration_example.js
index 12d308ee620..eb06da74192 100644
--- a/src-docs/src/views/pretty_duration/pretty_duration_example.js
+++ b/src-docs/src/views/pretty_duration/pretty_duration_example.js
@@ -47,7 +47,8 @@ export const PrettyDurationExample = {
An array of quick range values is passed as the third argument.
These are used to pretty format custom ranges. EUI exports
commonDurationRanges which can be passed here.
-
+
+
{JSON.stringify(commonDurationRanges, null, 2)}
From f0fcd065b7820ce11dab8be46275289c1c52a768 Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 13:00:40 -0600
Subject: [PATCH 07/10] Update
src-docs/src/views/pretty_duration/pretty_duration.js
Co-Authored-By: Caroline Horn <549577+cchaos@users.noreply.github.com>
---
src-docs/src/views/pretty_duration/pretty_duration.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src-docs/src/views/pretty_duration/pretty_duration.js b/src-docs/src/views/pretty_duration/pretty_duration.js
index 77925c55c31..fc06a41e672 100644
--- a/src-docs/src/views/pretty_duration/pretty_duration.js
+++ b/src-docs/src/views/pretty_duration/pretty_duration.js
@@ -62,7 +62,7 @@ export default function prettyDurationExample() {
{dateFormat}')
-
+
{prettyDuration(start, end, quickRanges, dateFormat)}
From 10faccc0a20386e3dffd6c84088c23438cac6560 Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 13:00:48 -0600
Subject: [PATCH 08/10] Update
src-docs/src/views/pretty_duration/pretty_duration.js
Co-Authored-By: Caroline Horn <549577+cchaos@users.noreply.github.com>
---
src-docs/src/views/pretty_duration/pretty_duration.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src-docs/src/views/pretty_duration/pretty_duration.js b/src-docs/src/views/pretty_duration/pretty_duration.js
index fc06a41e672..ce2a612b106 100644
--- a/src-docs/src/views/pretty_duration/pretty_duration.js
+++ b/src-docs/src/views/pretty_duration/pretty_duration.js
@@ -64,7 +64,7 @@ export default function prettyDurationExample() {
- {prettyDuration(start, end, quickRanges, dateFormat)}
+ {prettyDuration(start, end, quickRanges, dateFormat)}
From 389449cdd948c76c0e417d02191ebb457b242177 Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 13:10:53 -0600
Subject: [PATCH 09/10] docs tweaks
---
.../views/pretty_duration/pretty_duration.js | 1 +
.../pretty_duration/pretty_duration_example.js | 17 +++++++++++------
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/src-docs/src/views/pretty_duration/pretty_duration.js b/src-docs/src/views/pretty_duration/pretty_duration.js
index ce2a612b106..2097c0d9ab9 100644
--- a/src-docs/src/views/pretty_duration/pretty_duration.js
+++ b/src-docs/src/views/pretty_duration/pretty_duration.js
@@ -3,6 +3,7 @@ import React, { Fragment } from 'react';
import {
EuiSpacer,
EuiCodeBlock,
+ EuiText,
prettyDuration,
} from '../../../../src/components';
diff --git a/src-docs/src/views/pretty_duration/pretty_duration_example.js b/src-docs/src/views/pretty_duration/pretty_duration_example.js
index eb06da74192..e28292a2f12 100644
--- a/src-docs/src/views/pretty_duration/pretty_duration_example.js
+++ b/src-docs/src/views/pretty_duration/pretty_duration_example.js
@@ -8,6 +8,7 @@ import {
EuiAccordion,
EuiCode,
EuiCodeBlock,
+ EuiSpacer,
commonDurationRanges,
} from '../../../../src/components';
@@ -47,14 +48,18 @@ export const PrettyDurationExample = {
An array of quick range values is passed as the third argument.
These are used to pretty format custom ranges. EUI exports
commonDurationRanges which can be passed here.
-
-
-
- {JSON.stringify(commonDurationRanges, null, 2)}
-
-
+
+
+ {JSON.stringify(commonDurationRanges, null, 2)}
+
+
+
+
+
The output date/time format is specified by the fourth argument.
From 7213fc1f332f50114f11395b099abc5652b377ab Mon Sep 17 00:00:00 2001
From: Chandler Prall
Date: Wed, 17 Jul 2019 21:55:59 -0600
Subject: [PATCH 10/10] lint fix
---
src-docs/src/views/pretty_duration/pretty_duration.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src-docs/src/views/pretty_duration/pretty_duration.js b/src-docs/src/views/pretty_duration/pretty_duration.js
index 2097c0d9ab9..791a3bfaf2f 100644
--- a/src-docs/src/views/pretty_duration/pretty_duration.js
+++ b/src-docs/src/views/pretty_duration/pretty_duration.js
@@ -65,7 +65,9 @@ export default function prettyDurationExample() {
- {prettyDuration(start, end, quickRanges, dateFormat)}
+
+ {prettyDuration(start, end, quickRanges, dateFormat)}
+