playbook_ui 12.5.0.pre.alpha.datepickerinput1 → 12.5.0.pre.alpha.filter1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d384648066bfca20bd817be4065e8d4710f06672a2a335e451a7748b60c2a74
4
- data.tar.gz: 5b95638a4466aedc9ad816b84b22fda494c6c3556ad78bcb9b8053a3a18766fd
3
+ metadata.gz: f38164cc9c607578c2f74686bf2715e8006cffd060879d9c23cc52021e42109e
4
+ data.tar.gz: 00bdea5c26205ae76a885adc0872c05b36c4965d7736ad60aa685d8cb7ac268c
5
5
  SHA512:
6
- metadata.gz: cfb26ce98684faae10c092af1ae16e9f8b3b5641343a5c60164eb489290c1e328e355c3c400822adc0366965ba9d00d4600073b3791b5ef754a6150baa00445e
7
- data.tar.gz: c09f2ff8f7b8b8e3f803021421783fc98d931d838e0485c4b0345ac3d654999a08fa07e038e3be68ff2947aba85c4e070e4e80327c8a14fc60dc9e6a26270851
6
+ metadata.gz: 42f54dad230676a4f4a9546ac425c3cd0e3772540df2b367a811a83c488176461f5253305865d93e50283d482eb0dbe2cb14ca4feb9e4c52f83d4eac7b576875
7
+ data.tar.gz: b7f08be337b4876fc30ac264aa70332793e463526c1b90ddfc32a4335009e61506d313bd4b246d80c301e0019d3867fffcda77ea526f46c16a2dcd2b321ce487
@@ -5,7 +5,8 @@
5
5
  @import "./sass_partials/inline_styles";
6
6
  @import "./sass_partials/month_and_year_styles";
7
7
  @import "./sass_partials/time_selection_styles";
8
- @import "./sass_partials/input_styles";
8
+
9
+
9
10
 
10
11
  [class^=pb_date_picker_kit] {
11
12
  .input_wrapper {
@@ -19,10 +20,8 @@
19
20
  @import "./sass_partials/calendar_input_icon";
20
21
  }
21
22
 
22
- &:focus,
23
- :focus-within {
24
- div.cal_icon_wrapper,
25
- input.date_picker_input {
23
+ &:focus, :focus-within {
24
+ div.cal_icon_wrapper, input.text_input{
26
25
  @include transition_default;
27
26
  border-color: $primary;
28
27
  }
@@ -34,20 +33,18 @@
34
33
  @import "./sass_partials/header_styles";
35
34
  @import "./sass_partials/overrides";
36
35
 
37
- .date_picker_input.flatpickr-input {
36
+ .text_input.flatpickr-input {
38
37
  text-overflow: ellipsis;
39
38
  padding-right: $space_xl + 10 !important;
40
39
  }
41
-
42
40
  // Calendar Shadow and Border
43
41
  .flatpickr-calendar {
44
42
  box-shadow: $shadow_deeper;
45
43
  border: 1px solid $border_light;
46
44
  }
47
-
48
45
  // Hide Caret
49
46
  &:before,
50
47
  &:after {
51
48
  content: none;
52
49
  }
53
- }
50
+ }
@@ -5,13 +5,13 @@ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
5
5
  import { deprecatedProps, globalProps, GlobalProps } from '../utilities/globalProps'
6
6
 
7
7
  import datePickerHelper from './date_picker_helper'
8
+
8
9
  import Icon from '../pb_icon/_icon'
9
- import Caption from '../pb_caption/_caption'
10
- import Body from '../pb_body/_body'
10
+ import TextInput from '../pb_text_input/_text_input'
11
11
 
12
12
  type DatePickerProps = {
13
13
  allowInput?: boolean,
14
- aria?: { [key: string]: string },
14
+ aria?: {[key: string]: string},
15
15
  className?: string,
16
16
  dark?: boolean,
17
17
  data?: { [key: string]: string },
@@ -27,15 +27,15 @@ type DatePickerProps = {
27
27
  hideLabel?: boolean,
28
28
  id?: string,
29
29
  inLine?: boolean,
30
- inputAria?: { [key: string]: string },
31
- inputData?: { [key: string]: string },
32
- inputOnChange?: (e: React.FormEvent<HTMLInputElement>) => void,
30
+ inputAria?: {[key: string]: string},
31
+ inputData?: {[key: string]: string},
32
+ inputOnChange?: (arg: string) => void,
33
33
  inputValue?: any,
34
34
  label?: string,
35
35
  maxDate: string,
36
36
  minDate: string,
37
37
  name: string,
38
- pickerId?: string,
38
+ pickerId?: ArrayLike<Node> | Node | string,
39
39
  placeholder?: string,
40
40
  positionElement?: HTMLElement | null,
41
41
  scrollContainer?: string,
@@ -68,8 +68,8 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
68
68
  hideLabel = false,
69
69
  id,
70
70
  inLine = false,
71
- inputAria = {},
72
- inputData = {},
71
+ inputAria,
72
+ inputData,
73
73
  inputOnChange,
74
74
  inputValue,
75
75
  label = 'Date Picker',
@@ -87,14 +87,11 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
87
87
  selectionType = '',
88
88
  showTimezone = false,
89
89
  staticPosition = true,
90
- yearRange = [1900, 2100],
90
+ yearRange = [ 1900, 2100 ],
91
91
  } = props
92
92
 
93
93
  const ariaProps = buildAriaProps(aria)
94
94
  const dataProps = buildDataProps(data)
95
- const inputAriaProps = buildAriaProps(inputAria)
96
- const inputDataProps = buildDataProps(inputData)
97
-
98
95
  const classes = classnames(
99
96
  buildCss('pb_date_picker_kit'),
100
97
  globalProps(props),
@@ -131,13 +128,13 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
131
128
 
132
129
  const iconWrapperClass = () => {
133
130
  let base = 'cal_icon_wrapper'
134
- if (dark) {
131
+ if (dark){
135
132
  base += ' dark'
136
133
  }
137
- if (hideLabel) {
134
+ if (hideLabel){
138
135
  base += ' no_label_shift'
139
136
  }
140
- if (error) {
137
+ if (error){
141
138
  base += ' error'
142
139
  }
143
140
  return base
@@ -145,75 +142,61 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
145
142
 
146
143
  return (
147
144
  <div
148
- {...ariaProps}
149
- {...dataProps}
150
- className={classes}
151
- id={id}
145
+ {...ariaProps}
146
+ {...dataProps}
147
+ className={classes}
148
+ id={id}
152
149
  >
153
- <div
154
- {...inputAriaProps}
155
- {...inputDataProps}
156
- className="input_wrapper">
157
-
158
- <Caption
159
- className="pb_date_picker_kit_label"
160
- text={hideLabel ? null : label}
161
- />
162
-
163
- <div className="date_picker_input_wrapper">
164
- <input
150
+ <div className="input_wrapper">
151
+ <TextInput
152
+ aria={inputAria}
165
153
  autoComplete="off"
166
- className="date_picker_input"
154
+ dark={dark}
155
+ data={inputData}
167
156
  disabled={disableInput}
157
+ error={error}
168
158
  id={pickerId}
159
+ label={hideLabel ? null : label}
169
160
  name={name}
170
161
  onChange={inputOnChange}
171
162
  placeholder={placeholder}
172
163
  value={inputValue}
173
- />
174
-
175
- {error && <Body
176
- status="negative"
177
- text={error}
178
- variant={null}
179
- />
180
- }
181
- </div>
164
+ />
182
165
 
183
- {!hideIcon &&
166
+ { !hideIcon &&
184
167
  <div
185
- className={iconWrapperClass()}
186
- id={`cal-icon-${pickerId}`}
168
+ className={iconWrapperClass()}
169
+ id={`cal-icon-${pickerId}`}
187
170
  >
188
- <Icon
171
+ <Icon
189
172
  className="cal_icon"
190
173
  icon="calendar-alt"
191
- />
192
- </div>
174
+ />
175
+ </div>
193
176
  }
194
177
 
195
- {hideIcon && inLine ?
178
+ { hideIcon && inLine ?
196
179
  <div>
197
180
  <div
198
- className={iconWrapperClass()}
199
- id={`${pickerId}-icon-plus`}
181
+ className={iconWrapperClass()}
182
+ id={`${pickerId}-icon-plus`}
200
183
  >
201
184
  <Icon
202
- className="date-picker-plus-icon"
203
- icon="plus"
185
+ className="date-picker-plus-icon"
186
+ icon="plus"
204
187
  />
205
188
  </div>
206
189
  <div
207
- className={iconWrapperClass()}
208
- id={`${pickerId}-angle-down`}
190
+ className={iconWrapperClass()}
191
+ id={`${pickerId}-angle-down`}
209
192
  >
210
- <Icon
211
- className="angle_down_icon"
212
- icon="angle-down"
213
- />
193
+ <Icon
194
+ className="angle_down_icon"
195
+ icon="angle-down"
196
+ />
214
197
  </div>
215
- </div>
216
- : null}
198
+ </div>
199
+ : null }
217
200
  </div>
218
201
  </div>
219
202
  )
@@ -112,7 +112,6 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT
112
112
  // ===========================================================
113
113
 
114
114
  flatpickr(`#${pickerId}`, {
115
- allowInput,
116
115
  closeOnSelect,
117
116
  disableMobile: true,
118
117
  dateFormat: getDateFormat(),
@@ -0,0 +1,72 @@
1
+ import React from 'react'
2
+ import { isEmpty, map, omitBy } from 'lodash'
3
+
4
+ import Body from '../../pb_body/_body'
5
+ import Caption from '../../pb_caption/_caption'
6
+ import Title from '../../pb_title/_title'
7
+
8
+ export type FilterDescription = {
9
+ [key: string]: string | null | boolean,
10
+ }
11
+
12
+ export type CurrentFiltersProps = {
13
+ dark: boolean,
14
+ filters: FilterDescription,
15
+ }
16
+
17
+ const hiddenFilters = (value: any) => isEmpty(value) && value !== true
18
+
19
+ const CurrentFilters = ({ dark, filters }: CurrentFiltersProps): React.ReactElement => {
20
+ const displayableFilters = omitBy(filters, hiddenFilters)
21
+
22
+ return (
23
+ <div className="maskContainer">
24
+ { isEmpty(filters) &&
25
+ <div className="filters">
26
+ <Body
27
+ color="light"
28
+ paddingLeft="xs"
29
+ size={4}
30
+ tag="h4"
31
+ text="No Filter Selected"
32
+ />
33
+ </div>
34
+ }
35
+ { !isEmpty(filters) &&
36
+ <div className="filters">
37
+ <div className="left_gradient" />
38
+ {map(displayableFilters, (value, name) => (
39
+ <div
40
+ className="filter"
41
+ key={`filter-${name}`}
42
+ >
43
+ { value === true ?
44
+ <Title
45
+ dark={dark}
46
+ size={4}
47
+ tag="h4"
48
+ text={name}
49
+ /> :
50
+ <div>
51
+ <Caption
52
+ dark={dark}
53
+ text={name}
54
+ />
55
+ <Title
56
+ dark={dark}
57
+ size={4}
58
+ tag="h4"
59
+ text={value}
60
+ />
61
+ </div>
62
+ }
63
+ </div>
64
+ ))}
65
+ <div className="right_gradient" />
66
+ </div>
67
+ }
68
+ </div>
69
+ )
70
+ }
71
+
72
+ export default CurrentFilters
@@ -1,35 +1,33 @@
1
- /* @flow */
2
-
3
- import React, { Node } from 'react'
1
+ import React from 'react'
4
2
  import classnames from 'classnames'
5
3
 
6
- import { globalProps } from '../../utilities/globalProps'
4
+ import { GlobalProps, globalProps } from '../../utilities/globalProps'
7
5
 
8
6
  import Card from '../../pb_card/_card'
9
7
 
10
- type FilterBackgroundProps = {
8
+ export type FilterBackgroundProps = {
11
9
  background: boolean,
12
10
  className: string,
13
- children: Node,
11
+ children?: React.ReactChild[] | React.ReactChild,
14
12
  dark: boolean,
15
- }
13
+ } & GlobalProps
16
14
 
17
- const FilterBackground = (props: FilterBackgroundProps) => {
15
+ const FilterBackground = (props: FilterBackgroundProps): React.ReactElement => {
18
16
  const { background = true, className, children, dark } = props
19
17
 
20
18
  return (
21
19
  <div className={classnames(`pb_filter_kit ${className}`, globalProps(props))}>
22
- <Choose>
23
- <When condition={background}>
20
+ { background ?
24
21
  <Card
25
22
  dark={dark}
26
23
  padding="none"
27
24
  >
28
25
  {children}
29
- </Card>
30
- </When>
31
- <Otherwise>{children}</Otherwise>
32
- </Choose>
26
+ </Card> :
27
+ <>
28
+ {children}
29
+ </>
30
+ }
33
31
  </div>
34
32
  )
35
33
  }
@@ -1,5 +1,3 @@
1
- /* @flow */
2
-
3
1
  import React from 'react'
4
2
 
5
3
  import CurrentFilters, { FilterDescription } from './CurrentFilters'
@@ -15,13 +13,14 @@ import SortMenu, {
15
13
  import Caption from '../../pb_caption/_caption'
16
14
  import Flex from '../../pb_flex/_flex'
17
15
  import SectionSeparator from '../../pb_section_separator/_section_separator'
16
+
18
17
  export type FilterDoubleProps = {
19
- children: Node,
18
+ children?: React.ReactChild[] | React.ReactChild,
20
19
  filters?: FilterDescription,
21
- onSortChange: SortingChangeCallback,
20
+ onSortChange?: SortingChangeCallback,
22
21
  results?: number,
23
- sortOptions: SortOptions,
24
- sortValue?: SortValue,
22
+ sortOptions?: SortOptions,
23
+ sortValue?: SortValue[],
25
24
  } & FilterBackgroundProps
26
25
 
27
26
  const FilterDouble = ({
@@ -35,7 +34,7 @@ const FilterDouble = ({
35
34
  minWidth,
36
35
  placement,
37
36
  ...bgProps
38
- }: FilterDoubleProps) => (
37
+ }: FilterDoubleProps): React.ReactElement => (
39
38
  <FilterBackground
40
39
  dark={dark}
41
40
  {...bgProps}
@@ -49,7 +48,7 @@ const FilterDouble = ({
49
48
  minWidth={minWidth}
50
49
  placement={placement}
51
50
  >
52
- {children}
51
+ {children}
53
52
  </FiltersPopover>
54
53
  <CurrentFilters
55
54
  dark={dark}
@@ -1,5 +1,3 @@
1
- /* @flow */
2
-
3
1
  import React from 'react'
4
2
  import { isEmpty } from 'lodash'
5
3
 
@@ -16,12 +14,12 @@ import SortMenu, {
16
14
  } from './SortMenu'
17
15
 
18
16
  export type FilterSingleProps = {
19
- children?: Node,
17
+ children?: React.ReactChild[] | React.ReactChild,
20
18
  filters?: FilterDescription,
21
19
  onSortChange?: SortingChangeCallback,
22
20
  results?: number,
23
21
  sortOptions?: SortOptions,
24
- sortValue?: SortValue,
22
+ sortValue?: SortValue[],
25
23
  } & FilterBackgroundProps
26
24
 
27
25
  const FilterSingle = ({
@@ -35,7 +33,7 @@ const FilterSingle = ({
35
33
  minWidth,
36
34
  placement,
37
35
  ...bgProps
38
- }: FilterSingleProps) => {
36
+ }: FilterSingleProps): React.ReactElement => {
39
37
  return (
40
38
  <FilterBackground
41
39
  dark={dark}
@@ -46,31 +44,33 @@ const FilterSingle = ({
46
44
  paddingRight="lg"
47
45
  vertical="center"
48
46
  >
49
- <If condition={children}>
50
- <FiltersPopover
51
- dark={dark}
52
- minWidth={minWidth}
53
- placement={placement}
54
- >
47
+ { children &&
48
+ <>
49
+ <FiltersPopover
50
+ dark={dark}
51
+ minWidth={minWidth}
52
+ placement={placement}
53
+ >
55
54
  {children}
56
- </FiltersPopover>
57
- <CurrentFilters
58
- dark={dark}
59
- filters={filters}
60
- />
61
- </If>
55
+ </FiltersPopover>
56
+ <CurrentFilters
57
+ dark={dark}
58
+ filters={filters}
59
+ />
60
+ </>
61
+ }
62
62
  <ResultsCount
63
63
  dark={dark}
64
64
  results={results}
65
65
  />
66
- <If condition={!isEmpty(sortOptions)}>
67
- <SortMenu
68
- dark={dark}
69
- onChange={onSortChange}
70
- options={sortOptions}
71
- value={sortValue}
72
- />
73
- </If>
66
+ { !isEmpty(sortOptions) &&
67
+ <SortMenu
68
+ dark={dark}
69
+ onChange={onSortChange}
70
+ options={sortOptions}
71
+ value={sortValue}
72
+ />
73
+ }
74
74
  </Flex>
75
75
  </FilterBackground>
76
76
  )
@@ -1,12 +1,15 @@
1
- /* @flow */
2
-
3
- import React, { Node, useState } from 'react'
1
+ import React, { ReactNode, useState } from 'react'
4
2
 
5
3
  import CircleIconButton from '../../pb_circle_icon_button/_circle_icon_button'
6
4
  import PbReactPopover from '../../pb_popover/_popover'
7
5
 
8
- const FiltersPopoverProps = { children: Node }
9
- const FiltersPopover = ({ children, dark, minWidth, placement = "bottom-start" }: FiltersPopoverProps) => {
6
+ type FiltersPopoverProps = {
7
+ children?: React.ReactChild[] | React.ReactChild | (({closePopover}: {closePopover: () => void}) => ReactNode),
8
+ dark?: boolean,
9
+ minWidth?: string,
10
+ placement?: "top" | "right" | "bottom" | "left" | "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end",
11
+ }
12
+ const FiltersPopover = ({ children, dark, minWidth, placement = "bottom-start" }: FiltersPopoverProps): React.ReactElement => {
10
13
  const [hide, updateHide] = useState(true)
11
14
  const toggle = () => updateHide(!hide)
12
15
 
@@ -16,7 +19,6 @@ const FiltersPopover = ({ children, dark, minWidth, placement = "bottom-start" }
16
19
  icon="filter"
17
20
  id="filter"
18
21
  onClick={toggle}
19
- text="filter"
20
22
  variant="secondary"
21
23
  />
22
24
  )
@@ -30,11 +32,11 @@ const FiltersPopover = ({ children, dark, minWidth, placement = "bottom-start" }
30
32
  shouldClosePopover={updateHide}
31
33
  show={!hide}
32
34
  >
33
- <div className="pb-form">
34
- {typeof children === 'function'
35
- ? children({ closePopover: () => (updateHide(true)) })
36
- : children}
37
- </div>
35
+ <div className="pb-form">
36
+ {typeof children === 'function'
37
+ ? children({ closePopover: () => (updateHide(true)) })
38
+ : children}
39
+ </div>
38
40
  </PbReactPopover>
39
41
  )
40
42
  }
@@ -1,5 +1,3 @@
1
- /* @flow */
2
-
3
1
  import React from 'react'
4
2
 
5
3
  import Caption from '../../pb_caption/_caption'
@@ -9,31 +7,58 @@ const resultsText = (results: number): string => results == 1 ? 'Result' : 'Resu
9
7
 
10
8
  type ResultsCountProps = {
11
9
  dark?: boolean,
12
- results?: ?number,
10
+ results?: number | null,
13
11
  title?: boolean,
14
12
  }
15
- const ResultsCount = ({ dark, results, title }: ResultsCountProps) => (
16
- <Choose>
17
- <When condition={results && title}>
13
+ const ResultsCount = ({ dark, results, title }: ResultsCountProps): React.ReactElement => {
14
+
15
+ const resultTitle = () => {
16
+ return (
18
17
  <TitleCount
19
18
  align="center"
20
19
  count={results}
21
20
  dark={dark}
22
21
  title={`${resultsText(results)}:`}
23
22
  />
24
- </When>
25
- <When condition={results}>
23
+ )
24
+ }
25
+
26
+ const justResults = () => {
27
+ return (
26
28
  <Caption
27
29
  className="filter-results"
28
30
  dark={dark}
29
31
  size="xs"
30
32
  text={`${results} ${resultsText(results)}`}
31
33
  />
32
- </When>
33
- <Otherwise>
34
- <div />
35
- </Otherwise>
36
- </Choose>
37
- )
34
+ )
35
+ }
36
+
37
+ const displayResultsCount = () => {
38
+ if (results && title) {
39
+ return (
40
+ <>
41
+ {resultTitle()}
42
+ </>
43
+ )
44
+ } else if (results) {
45
+ return (
46
+ <>
47
+ {justResults()}
48
+ </>
49
+ )
50
+ } else {
51
+ return (
52
+ <div />
53
+ )
54
+ }
55
+ }
56
+
57
+ return (
58
+ <>
59
+ {displayResultsCount()}
60
+ </>
61
+ )
62
+ }
38
63
 
39
64
  export default ResultsCount
@@ -1,5 +1,3 @@
1
- /* @flow */
2
-
3
1
  import React, { useState } from 'react'
4
2
  import { find, map, partial } from 'lodash'
5
3
 
@@ -12,9 +10,9 @@ import PbReactPopover from '../../pb_popover/_popover'
12
10
  export type Direction = 'asc' | 'desc'
13
11
  export type SortOptions = { [name: string]: string }
14
12
  export type SortValue = { name: string, dir: Direction }
15
- export type SortingChangeCallback = (SortValue[]) => void
13
+ export type SortingChangeCallback = (value: SortValue[]) => void
16
14
 
17
- const nextValue = (value: SortValue[], name: string): Direction => {
15
+ const nextValue = (value: SortValue[], name: string): SortValue => {
18
16
  const current = find(value, { name })
19
17
  return {
20
18
  name,
@@ -26,12 +24,13 @@ const directionIcon = (dir: Direction) => (
26
24
  dir == 'asc' ? 'sort-amount-up' : 'sort-amount-down'
27
25
  )
28
26
 
29
- const renderOptions = (options: SortOptions, value: SortValue[], handleChange: (SortValue) => void) => (
27
+ const renderOptions = (options: SortOptions, value: SortValue[], handleChange: (arg0: SortValue) => void) => (
30
28
  map(options, (label, name) => {
31
29
  const next = nextValue(value, name)
32
30
  return (
33
31
  <ListItem key={`option-${next.name}-${next.dir}`}>
34
32
  <Button
33
+ htmlType={undefined}
35
34
  onClick={partial(handleChange, next)}
36
35
  text={` ${label}`}
37
36
  variant="link"
@@ -47,7 +46,7 @@ export type SortMenuProps = {
47
46
  options: SortOptions,
48
47
  value?: SortValue[],
49
48
  }
50
- const SortMenu = ({ dark, options, value, onChange }: SortMenuProps) => {
49
+ const SortMenu = ({ dark, options, value, onChange }: SortMenuProps): React.ReactElement => {
51
50
  const [hide, updateHide] = useState(true)
52
51
  const toggle = () => updateHide(!hide)
53
52
  const handleChange = (value: SortValue) => {
@@ -58,6 +57,7 @@ const SortMenu = ({ dark, options, value, onChange }: SortMenuProps) => {
58
57
  const sortButton = (
59
58
  <Button
60
59
  dark={dark}
60
+ htmlType={undefined}
61
61
  id="sort-button"
62
62
  onClick={toggle}
63
63
  paddingRight="none"
@@ -1,5 +1,3 @@
1
- /* @flow */
2
-
3
1
  import React from 'react'
4
2
  import FilterSingle, { FilterSingleProps } from './FilterSingle'
5
3
  import FilterDouble, { FilterDoubleProps } from './FilterDouble'
@@ -10,16 +8,25 @@ type FilterProps =
10
8
  double?: boolean,
11
9
  })
12
10
 
13
- const Filter = ({ double = false, ...templateProps }: FilterProps) => {
14
- return (
15
- <Choose>
16
- <When condition={double}>
11
+ const Filter = ({
12
+ double = false,
13
+ ...templateProps
14
+ }: FilterProps): React.ReactElement => {
15
+ const displayFilter = () => {
16
+ if (double === true) {
17
+ return (
17
18
  <FilterDouble {...templateProps} />
18
- </When>
19
- <Otherwise>
19
+ )
20
+ } else {
21
+ return (
20
22
  <FilterSingle {...templateProps} />
21
- </Otherwise>
22
- </Choose>
23
+ )
24
+ }
25
+ }
26
+ return (
27
+ <>
28
+ {displayFilter()}
29
+ </>
23
30
  )
24
31
  }
25
32
 
@@ -1,3 +1 @@
1
- /* @flow */
2
-
3
1
  export { default } from './Filter'
@@ -11,14 +11,14 @@ type ListProps = {
11
11
  dark?: boolean;
12
12
  data?: object;
13
13
  id?: string;
14
- layout: "" | "left" | "right";
14
+ layout?: "" | "left" | "right";
15
15
  ordered?: boolean;
16
16
  role?: string;
17
17
  tabIndex?: number;
18
18
  text?: string;
19
19
  size?: string;
20
20
  variant?: string;
21
- xpadding: boolean;
21
+ xpadding?: boolean;
22
22
  };
23
23
 
24
24
  const List = (props: ListProps) => {
@@ -1,6 +1,5 @@
1
1
  import React, { useEffect } from "react";
2
2
  import ReactDOM from "react-dom";
3
-
4
3
  import {
5
4
  Popper,
6
5
  Manager as PopperManager,
@@ -23,7 +22,7 @@ type PbPopoverProps = {
23
22
  aria?: { [key: string]: string };
24
23
  className?: string;
25
24
  closeOnClick?: "outside" | "inside" | "any";
26
- data?: object;
25
+ data?: { [key: string]: string },
27
26
  id?: string;
28
27
  offset?: boolean;
29
28
  reference: PopperReference & any;
@@ -100,31 +99,31 @@ const Popover = (props: PbPopoverProps) => {
100
99
 
101
100
  return (
102
101
  <Popper
103
- modifiers={popoverModifiers({ modifiers, offset })}
104
- placement={placement}
105
- referenceElement={referenceElement}
102
+ modifiers={popoverModifiers({ modifiers, offset })}
103
+ placement={placement}
104
+ referenceElement={referenceElement}
106
105
  >
107
106
  {({ placement, ref, style }) => {
108
107
  return (
109
108
  <div
110
- {...ariaProps}
111
- {...dataProps}
112
- className={classes}
113
- data-placement={placement}
114
- id={id}
115
- ref={ref}
116
- style={Object.assign({}, style, zIndexStyle)}
109
+ {...ariaProps}
110
+ {...dataProps}
111
+ className={classes}
112
+ data-placement={placement}
113
+ id={id}
114
+ ref={ref}
115
+ style={Object.assign({}, style, zIndexStyle)}
117
116
  >
118
117
  <div
119
- className={classnames(`${buildCss("pb_popover_tooltip")} show`)}
118
+ className={classnames(`${buildCss("pb_popover_tooltip")} show`)}
120
119
  >
121
120
  <div
122
- className={classnames(
123
- "pb_popover_body",
124
- popoverSpacing,
125
- overflowHandling
126
- )}
127
- style={widthHeightStyles()}
121
+ className={classnames(
122
+ "pb_popover_body",
123
+ popoverSpacing,
124
+ overflowHandling
125
+ )}
126
+ style={widthHeightStyles()}
128
127
  >
129
128
  {children}
130
129
  </div>
@@ -192,17 +191,17 @@ const PbReactPopover = (props: PbPopoverProps) => {
192
191
 
193
192
  const popoverComponent = (
194
193
  <Popover
195
- className={className}
196
- maxHeight={maxHeight}
197
- maxWidth={maxWidth}
198
- minHeight={minHeight}
199
- minWidth={minWidth}
200
- modifiers={modifiers}
201
- offset={offset}
202
- placement={placement}
203
- referenceElement={referenceElement}
204
- zIndex={zIndex}
205
- {...props}
194
+ className={className}
195
+ maxHeight={maxHeight}
196
+ maxWidth={maxWidth}
197
+ minHeight={minHeight}
198
+ minWidth={minWidth}
199
+ modifiers={modifiers}
200
+ offset={offset}
201
+ placement={placement}
202
+ referenceElement={referenceElement}
203
+ zIndex={zIndex}
204
+ {...props}
206
205
  >
207
206
  {children}
208
207
  </Popover>
@@ -214,7 +213,9 @@ const PbReactPopover = (props: PbPopoverProps) => {
214
213
  {reference && !referenceElement && (
215
214
  <PopperReference>
216
215
  {({ ref }) => (
217
- <span className="pb_popover_reference_wrapper" ref={ref}>
216
+ <span
217
+ className="pb_popover_reference_wrapper"
218
+ ref={ref}>
218
219
  <reference.type {...reference.props} />
219
220
  </span>
220
221
  )}
@@ -236,4 +237,4 @@ const PbReactPopover = (props: PbPopoverProps) => {
236
237
  );
237
238
  };
238
239
 
239
- export default PbReactPopover;
240
+ export default PbReactPopover;
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- PREVIOUS_VERSION = "12.5.0"
5
- VERSION = "12.5.0.pre.alpha.datepickerinput1"
4
+ PREVIOUS_VERSION = "12.5.0.pre.alpha.filter1"
5
+ VERSION = "12.5.0.pre.alpha.filter1"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.5.0.pre.alpha.datepickerinput1
4
+ version: 12.5.0.pre.alpha.filter1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-03-03 00:00:00.000000000 Z
12
+ date: 2023-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -754,7 +754,6 @@ files:
754
754
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_flatpickr_styles.scss
755
755
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_header_styles.scss
756
756
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss
757
- - app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss
758
757
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_month_and_year_styles.scss
759
758
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_overrides.scss
760
759
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_time_selection_styles.scss
@@ -911,16 +910,16 @@ files:
911
910
  - app/pb_kits/playbook/pb_file_upload/docs/example.yml
912
911
  - app/pb_kits/playbook/pb_file_upload/docs/index.js
913
912
  - app/pb_kits/playbook/pb_file_upload/fileupload.test.js
914
- - app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.jsx
915
- - app/pb_kits/playbook/pb_filter/Filter/FilterBackground.jsx
916
- - app/pb_kits/playbook/pb_filter/Filter/FilterDouble.jsx
917
- - app/pb_kits/playbook/pb_filter/Filter/FilterSingle.jsx
918
- - app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.jsx
919
- - app/pb_kits/playbook/pb_filter/Filter/ResultsCount.jsx
920
- - app/pb_kits/playbook/pb_filter/Filter/SortMenu.jsx
921
- - app/pb_kits/playbook/pb_filter/Filter/index.jsx
922
- - app/pb_kits/playbook/pb_filter/_filter.jsx
913
+ - app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx
914
+ - app/pb_kits/playbook/pb_filter/Filter/FilterBackground.tsx
915
+ - app/pb_kits/playbook/pb_filter/Filter/FilterDouble.tsx
916
+ - app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx
917
+ - app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.tsx
918
+ - app/pb_kits/playbook/pb_filter/Filter/ResultsCount.tsx
919
+ - app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx
920
+ - app/pb_kits/playbook/pb_filter/Filter/index.tsx
923
921
  - app/pb_kits/playbook/pb_filter/_filter.scss
922
+ - app/pb_kits/playbook/pb_filter/_filter.tsx
924
923
  - app/pb_kits/playbook/pb_filter/docs/_description.md
925
924
  - app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb
926
925
  - app/pb_kits/playbook/pb_filter/docs/_filter_default.jsx
@@ -1,68 +0,0 @@
1
- @import "../../pb_textarea/textarea_mixin";
2
-
3
- [class^=pb_date_picker_kit] {
4
- margin-bottom: $space_sm;
5
-
6
- .pb_date_picker_kit_label {
7
- margin-bottom: $space_xs;
8
- display: block;
9
- }
10
-
11
- .date_picker_input_wrapper {
12
- display: block;
13
-
14
- input::placeholder,
15
- .date_picker_input .placeholder {
16
- @include pb_body_light;
17
- }
18
-
19
- input,
20
- .date_picker_input {
21
- max-height: 45px;
22
- @include pb_textarea_light;
23
- overflow: hidden;
24
- }
25
-
26
- input:hover,
27
- .date_picker_input:hover {
28
- background-color: rgba($focus_input_light, $opacity_5);
29
- }
30
-
31
- input:focus,
32
- .date_picker_input:focus,
33
- input:-webkit-autofill:focus,
34
- .date_picker_input:-webkit-autofill:focus {
35
- @include pb_textarea_focus;
36
- @include transition_default;
37
- border-color: $primary;
38
- background-color: rgba($focus_input_light, $opacity_5);
39
- }
40
- }
41
-
42
- &.error {
43
- .date_picker_input_wrapper {
44
- [class*=pb_body_kit] {
45
- margin-top: $space_xs / 2;
46
- }
47
-
48
- input,
49
- .date_picker_input {
50
- border-color: $error;
51
- }
52
- }
53
- }
54
-
55
- &.inline {
56
- .date_picker_input_wrapper input::placeholder,
57
- .date_picker_input_wrapper .date_picker_input .placeholder {
58
- opacity: 1;
59
- }
60
-
61
- &:not(:hover) {
62
- .date_picker_input_wrapper input:not(:focus) {
63
- background-color: transparent;
64
- border-color: transparent;
65
- }
66
- }
67
- }
68
- }
@@ -1,76 +0,0 @@
1
- /* @flow */
2
-
3
- import React from 'react'
4
- import { isEmpty, map, omitBy } from 'lodash'
5
-
6
- import Body from '../../pb_body/_body'
7
- import Caption from '../../pb_caption/_caption'
8
- import Title from '../../pb_title/_title'
9
-
10
- export type FilterDescription = {
11
- [key: string]: ?string | boolean,
12
- }
13
-
14
- export type CurrentFiltersProps = {
15
- dark: boolean,
16
- filters: FilterDescription,
17
- }
18
-
19
- const hiddenFilters = (value) => isEmpty(value) && value !== true
20
-
21
- const CurrentFilters = ({ dark, filters }: CurrentFiltersProps) => {
22
- const displayableFilters = omitBy(filters, hiddenFilters)
23
-
24
- return (
25
- <div className="maskContainer">
26
- <If condition={isEmpty(filters)}>
27
- <div className="filters">
28
- <Body
29
- color="light"
30
- paddingLeft="xs"
31
- size={4}
32
- tag="h4"
33
- text="No Filter Selected"
34
- />
35
- </div>
36
- </If>
37
- <If condition={!isEmpty(filters)}>
38
- <div className="filters">
39
- <div className="left_gradient" />
40
- {map(displayableFilters, (value, name) => (
41
- <div
42
- className="filter"
43
- key={`filter-${name}`}
44
- >
45
- <Choose>
46
- <When condition={value === true}>
47
- <Title
48
- dark={dark}
49
- size={4}
50
- tag="h4"
51
- text={name}
52
- />
53
- </When>
54
- <Otherwise>
55
- <Caption
56
- dark={dark}
57
- text={name}
58
- />
59
- <Title
60
- dark={dark}
61
- size={4}
62
- tag="h4"
63
- text={value}
64
- />
65
- </Otherwise>
66
- </Choose>
67
- </div>
68
- ))}
69
- <div className="right_gradient" />
70
- </div>
71
- </If>
72
- </div>
73
- )
74
- }
75
-
76
- export default CurrentFilters