playbook_ui 14.22.0.pre.alpha.customheaderat8564 → 14.22.0.pre.alpha.play2261highchartsbargraphimportedstyles8730

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +6 -7
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/SubRowHeaderRow.tsx +32 -11
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +6 -0
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_sort.jsx +65 -0
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_sort.md +5 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -2
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +2 -2
  10. data/app/pb_kits/playbook/pb_bar_graph/barGraphTheme.ts +106 -0
  11. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_colors.jsx +33 -15
  12. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_default.jsx +33 -15
  13. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_height.jsx +52 -22
  14. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_height.md +3 -0
  15. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_horizontal.jsx +12 -16
  16. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend.jsx +31 -15
  17. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_non_clickable.jsx +39 -16
  18. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.jsx +86 -38
  19. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_negative_numbers.jsx +33 -15
  20. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.jsx +72 -22
  21. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.md +1 -1
  22. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_spline.jsx +32 -15
  23. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_stacked.jsx +37 -16
  24. data/app/pb_kits/playbook/pb_bar_graph/docs/_description.md +1 -3
  25. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -3
  26. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -2
  27. data/app/pb_kits/playbook/pb_table/_table.tsx +4 -4
  28. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns.jsx +8 -8
  29. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns_react.md +1 -1
  30. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns.jsx +12 -12
  31. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_react.md +3 -3
  32. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns.jsx +12 -12
  33. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns_react.md +3 -3
  34. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.html.erb +18 -0
  35. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input_rails.md +1 -0
  36. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -0
  37. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -0
  38. data/dist/chunks/_bar_graph-iq9-hk-x.js +1 -0
  39. data/dist/chunks/{_typeahead-B7FRYVtS.js → _typeahead-DeLOYzLb.js} +3 -3
  40. data/dist/chunks/_weekday_stacked-bjb7ElwG.js +45 -0
  41. data/dist/chunks/{lib-Carqm8Ip.js → lib-GtpYwIew.js} +1 -1
  42. data/dist/chunks/{pb_form_validation-DqRmTS8m.js → pb_form_validation-BCfG-8Zp.js} +1 -1
  43. data/dist/chunks/vendor.js +1 -1
  44. data/dist/playbook-doc.js +2 -2
  45. data/dist/playbook-rails-react-bindings.js +1 -1
  46. data/dist/playbook-rails.js +1 -1
  47. data/lib/playbook/version.rb +1 -1
  48. metadata +14 -11
  49. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.jsx +0 -72
  50. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.md +0 -6
  51. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
  52. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
  53. data/dist/chunks/_weekday_stacked-CEJcIpjK.js +0 -45
  54. /data/app/pb_kits/playbook/pb_typeahead/docs/{_typeahead_preserve_input.md → _typeahead_preserve_input_react.md} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae6b3ef179ba514261a9c3f24c44b3609980ad8295193eca7bf5ea78599e3f32
4
- data.tar.gz: 59f4da05e7dc18142518d658c9dcb6e02938972abce9ca14af52a725839bf150
3
+ metadata.gz: d54d5b30f8aa5a3674fbcf5e138889fa5621bf8f0ce5b4fa55106804e4dbb43e
4
+ data.tar.gz: 5ea3e7bdd1b718cfb5a6795512874bb12b012627edd9b82b82a04f2ca27f683f
5
5
  SHA512:
6
- metadata.gz: e891d0c03d22b2b4d0ae5faeac636fb884e54619f00b236a6cba2988a4432880f305f1d894f06005c4aa45dfefd83a440bf13395d43303cb875d129a140b6d24
7
- data.tar.gz: 72d84a27a4f5ec1c18d7f7b1da0d093336282250ebf56351639b7da26ee64593ae9ac79caa56a8a15df148e7091642afb56f390860a9a97c095c6e964128b178
6
+ metadata.gz: 9b544a9e3c00e1a0cc07bc8f676349059100aad6ed934eefe690853543695c75f13e9a422da64cdd479f9d75375c6e6eab9829e0b8da497844928652e15e195c
7
+ data.tar.gz: 6f03c79d01b1bd9ab12a6be7c13cda2c02ad0f5d27d18eb64975d51d26b04cfddbf7c7faf694661c7c5f76afc65d6295076237726cdca20f007c68a25e67845a
@@ -20,7 +20,7 @@ interface CustomCellProps {
20
20
  customRenderer?: (row: Row<GenericObject>, value: string | undefined) => React.ReactNode
21
21
  selectableRows?: boolean
22
22
  customStyle?: GenericObject
23
- }
23
+ }
24
24
 
25
25
  export const CustomCell = ({
26
26
  getValue,
@@ -35,7 +35,7 @@ export const CustomCell = ({
35
35
 
36
36
  const handleOnExpand = (row: Row<GenericObject>) => {
37
37
  onRowToggleClick && onRowToggleClick(row);
38
-
38
+
39
39
  if (!expandedControl) {
40
40
  setExpanded({ ...expanded, [row.id]: !row.getIsExpanded() });
41
41
  }
@@ -46,8 +46,8 @@ export const CustomCell = ({
46
46
 
47
47
  return (
48
48
  <div style={{ paddingLeft: `${row.depth * 1.25}em`}}>
49
- <Flex
50
- alignItems="center"
49
+ <Flex
50
+ alignItems="center"
51
51
  columnGap="xs"
52
52
  justify="start"
53
53
  orientation="row"
@@ -71,12 +71,11 @@ export const CustomCell = ({
71
71
  >
72
72
  {row.getIsExpanded() ? (
73
73
  <Icon cursor="pointer"
74
- icon="circle-play"
75
- rotation={90}
74
+ icon="circle-play-down"
76
75
  />
77
76
  ) : (
78
77
  <Icon cursor="pointer"
79
- icon="circle-play"
78
+ icon="circle-play"
80
79
  />
81
80
  )}
82
81
  </button>
@@ -7,6 +7,7 @@ import { GlobalProps } from "../../utilities/globalProps"
7
7
 
8
8
  import Flex from "../../pb_flex/_flex"
9
9
  import Caption from "../../pb_caption/_caption"
10
+ import Icon from "../../pb_icon/_icon"
10
11
 
11
12
  import { ToggleIconButton } from "./ToggleIconButton"
12
13
  import { renderCollapsibleTrail } from "./CollapsibleTrail"
@@ -32,17 +33,19 @@ export const SubRowHeaderRow = ({
32
33
  subRowHeaders,
33
34
  table,
34
35
  }: SubRowHeaderRowProps & GlobalProps) => {
35
- const { inlineRowLoading } = useContext(AdvancedTableContext)
36
+ const { inlineRowLoading, customSort, onCustomSortClick } = useContext(AdvancedTableContext)
36
37
 
37
38
  const numberOfColumns = table.getAllFlatColumns().length
38
39
  const rowHasChildren = row.original.children ? true : false
39
40
  const canExpand = inlineRowLoading ? rowHasChildren : row.getCanExpand()
41
+ const hasSubrowsToSort = row.getParentRow()?.subRows
42
+
40
43
 
41
44
  return (
42
45
  <tr className="custom-row bg-silver">
43
46
  <td
44
47
  className={`custom-row-first-column ${
45
- isChrome() ? "chrome-styles" : ""
48
+ isChrome() ? "chrome-styles" : ""
46
49
  }`}
47
50
  colSpan={1}
48
51
  >
@@ -50,21 +53,39 @@ export const SubRowHeaderRow = ({
50
53
  <div style={{ paddingLeft: `${row.depth * 1.25}em` }}>
51
54
  <Flex align="center"
52
55
  columnGap="xs"
56
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
57
+ //@ts-ignore
58
+ justifyContent={customSort && hasSubrowsToSort && hasSubrowsToSort.length > 1 ? "between" : undefined}
53
59
  >
54
- {enableToggleExpansion === "all" && canExpand ? (
55
- <ToggleIconButton onClick={onClick}
56
- row={row}
60
+ <Flex columnGap="xs">
61
+ {enableToggleExpansion === "all" && canExpand ? (
62
+ <ToggleIconButton onClick={onClick}
63
+ row={row}
64
+ />
65
+ ) : null}
66
+ <Caption
67
+ marginLeft={canExpand ? "none" : "xs"}
68
+ text={subRowHeaders[row.depth - 1]}
57
69
  />
58
- ) : null}
59
- <Caption
60
- marginLeft={canExpand ? "none" : "xs"}
61
- text={subRowHeaders[row.depth - 1]}
62
- />
70
+ </Flex>
71
+ {customSort && hasSubrowsToSort && hasSubrowsToSort.length > 1 && (
72
+ <button
73
+ aria-label="Sort this group"
74
+ className="sort-button-icon gray-icon"
75
+ onClick={() => { onCustomSortClick && onCustomSortClick(row.getParentRow()?.subRows)}}
76
+ >
77
+ <Icon
78
+ cursor="pointer"
79
+ fixedWidth
80
+ icon="sort"
81
+ />
82
+ </button>
83
+ )}
63
84
  </Flex>
64
85
  </div>
65
86
  </td>
66
87
 
67
88
  <td colSpan={numberOfColumns - 1} />
68
89
  </tr>
69
- )
90
+ );
70
91
  }
@@ -36,6 +36,7 @@ type AdvancedTableProps = {
36
36
  columnDefinitions: GenericObject[]
37
37
  columnGroupBorderColor?: "text_lt_default" | "text_lt_light" | "text_lt_lighter" | "text_dk_default" | "text_dk_light" | "text_dk_lighter"
38
38
  columnVisibilityControl?: GenericObject
39
+ customSort?:boolean;
39
40
  dark?: boolean
40
41
  data?: { [key: string]: string }
41
42
  enableToggleExpansion?: "all" | "header" | "none"
@@ -67,6 +68,7 @@ type AdvancedTableProps = {
67
68
  tableProps?: GenericObject
68
69
  toggleExpansionIcon?: string | string[]
69
70
  onRowSelectionChange?: (arg: RowSelectionState) => void
71
+ onCustomSortClick?: (arg: GenericObject[]) => void
70
72
  virtualizedRows?: boolean
71
73
  allowFullScreen?: boolean
72
74
  fullScreenControl?: (controls: FullscreenControls) => void
@@ -81,6 +83,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
81
83
  columnDefinitions,
82
84
  columnGroupBorderColor,
83
85
  columnVisibilityControl,
86
+ customSort,
84
87
  dark = false,
85
88
  data = {},
86
89
  enableToggleExpansion = "header",
@@ -95,6 +98,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
95
98
  maxHeight,
96
99
  onRowToggleClick,
97
100
  onToggleExpansionClick,
101
+ onCustomSortClick,
98
102
  pagination = false,
99
103
  paginationProps,
100
104
  pinnedRows,
@@ -325,6 +329,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
325
329
  columnDefinitions={columnDefinitions}
326
330
  columnGroupBorderColor={columnGroupBorderColor}
327
331
  columnVisibilityControl={columnVisibilityControl}
332
+ customSort={customSort}
328
333
  enableToggleExpansion={enableToggleExpansion}
329
334
  enableVirtualization={virtualizedRows}
330
335
  expandByDepth={expandByDepth}
@@ -336,6 +341,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
336
341
  isActionBarVisible={isActionBarVisible}
337
342
  isFullscreen={isFullscreen}
338
343
  loading={loading}
344
+ onCustomSortClick={onCustomSortClick}
339
345
  onExpandByDepthClick={onExpandByDepthClick}
340
346
  pinnedRows={pinnedRows}
341
347
  responsive={responsive}
@@ -0,0 +1,65 @@
1
+ import React from "react"
2
+ import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
+ import MOCK_DATA from "./advanced_table_mock_data.json"
4
+
5
+ const AdvancedTableCustomSort = (props) => {
6
+ const columnDefinitions = [
7
+ {
8
+ accessor: "year",
9
+ label: "Year",
10
+ id: "year",
11
+ cellAccessors: ["quarter", "month", "day"],
12
+ },
13
+ {
14
+ accessor: "newEnrollments",
15
+ id: "newEnrollments",
16
+ label: "New Enrollments",
17
+ },
18
+ {
19
+ accessor: "scheduledMeetings",
20
+ id: "scheduledMeetings",
21
+ label: "Scheduled Meetings",
22
+ },
23
+ {
24
+ accessor: "attendanceRate",
25
+ id: "attendanceRate",
26
+ label: "Attendance Rate",
27
+ },
28
+ {
29
+ accessor: "completedClasses",
30
+ id: "completedClasses",
31
+ label: "Completed Classes",
32
+ },
33
+ {
34
+ accessor: "classCompletionRate",
35
+ id: "classCompletionRate",
36
+ label: "Class Completion Rate",
37
+ },
38
+ {
39
+ accessor: "graduatedStudents",
40
+ id: "graduatedStudents",
41
+ label: "Graduated Students",
42
+ },
43
+ ]
44
+
45
+ //Render the subRow header rows
46
+ const subRowHeaders = ["Quarter", "Month", "Day"]
47
+
48
+ return (
49
+ <div>
50
+ <AdvancedTable
51
+ columnDefinitions={columnDefinitions}
52
+ customSort
53
+ enableToggleExpansion="all"
54
+ onCustomSortClick={(subrows)=>{console.log("Custom sort clicked", subrows)}}
55
+ tableData={MOCK_DATA}
56
+ {...props}
57
+ >
58
+ <AdvancedTable.Header enableSorting />
59
+ <AdvancedTable.Body subRowHeaders={subRowHeaders} />
60
+ </AdvancedTable>
61
+ </div>
62
+ )
63
+ }
64
+
65
+ export default AdvancedTableCustomSort
@@ -0,0 +1,5 @@
1
+ The optional `customSort` prop can be used to add a sort button within a subrow header. The button will only appear if that subrowheader has more than one subrow nested within it. This button comes with a callback function called `onCustomSortClick`.
2
+
3
+ The `onCustomSortClick` provides as an argument an array of all the subrows nested within that level of the table.
4
+
5
+ __NOTE__: `customSort` must be used in conjunction with the `subRowHeaders` prop. The `customSort` DOES NOT handle the sort logic, this must be handled on the frontend using the callback provided.
@@ -19,14 +19,15 @@ examples:
19
19
  - advanced_table_selectable_rows_actions_rails: Selectable Rows (With Actions)
20
20
  - advanced_table_selectable_rows_header_rails: Selectable Rows (No Actions Bar)
21
21
  - advanced_table_scrollbar_none: Advanced Table Scrollbar None
22
- # - advanced_table_column_styling_rails: Column Styling
23
- # - advanced_table_column_styling_column_headers_rails: Column Styling with Multiple Headers
22
+ - advanced_table_column_styling_rails: Column Styling
23
+ - advanced_table_column_styling_column_headers_rails: Column Styling with Multiple Headers
24
24
 
25
25
  react:
26
26
  - advanced_table_default: Default (Required Props)
27
27
  - advanced_table_loading: Loading State
28
28
  - advanced_table_sort: Enable Sorting
29
29
  - advanced_table_sort_control: Sort Control
30
+ - advanced_table_custom_sort: Custom Sort
30
31
  - advanced_table_expanded_control: Expanded Control
31
32
  - advanced_table_expand_by_depth: Expand by Depth
32
33
  - advanced_table_subrow_headers: SubRow Headers
@@ -38,4 +38,5 @@ export { default as AdvancedTableRowStyling } from './_advanced_table_row_stylin
38
38
  export { default as AdvancedTableColumnStyling } from './_advanced_table_column_styling.jsx'
39
39
  export { default as AdvancedTableColumnStylingColumnHeaders } from './_advanced_table_column_styling_column_headers.jsx'
40
40
  export { default as AdvancedTableInfiniteScroll} from './_advanced_table_infinite_scroll.jsx'
41
- export {default as AdvancedTableWithCustomHeader} from './_advanced_table_with_custom_header.jsx'
41
+ export {default as AdvancedTableWithCustomHeader} from './_advanced_table_with_custom_header.jsx'
42
+ export { default as AdvancedTableCustomSort } from './_advanced_table_custom_sort.jsx'
@@ -30,11 +30,11 @@
30
30
  class="gray-icon expand-toggle-icon"
31
31
  data-advanced-table="true">
32
32
  <%= pb_rails("icon", props: { id: "advanced-table_open_icon", icon: "circle-play", cursor: "pointer" }) %>
33
- <%= pb_rails("icon", props: { id: "advanced-table_close_icon", icon: "circle-play", cursor: "pointer", rotation: 90 }) %>
33
+ <%= pb_rails("icon", props: { id: "advanced-table_close_icon", icon: "circle-play-down", cursor: "pointer" }) %>
34
34
  </button>
35
35
  <% end %>
36
36
  <% end %>
37
- <%= pb_rails("flex/flex_item") do %>
37
+ <%= pb_rails("flex/flex_item") do %>
38
38
  <% if column[:custom_renderer].present? %>
39
39
  <%= raw(column[:custom_renderer].call(object.row, custom_renderer_value(column, index))) %>
40
40
  <% elsif index.zero? %>
@@ -0,0 +1,106 @@
1
+ import colors from '../tokens/exports/_colors.module.scss'
2
+ import typography from '../tokens/exports/_typography.module.scss'
3
+
4
+ const barGraphTheme = {
5
+ title: {
6
+ text: "",
7
+ style: {
8
+ color: colors.text_lt_default,
9
+ fontFamily: typography.font_family_base,
10
+ fontWeight: typography.bold,
11
+ fontSize: typography.heading_3,
12
+ },
13
+ },
14
+ subtitle: {
15
+ text: "",
16
+ style: {
17
+ fontFamily: typography.font_family_base,
18
+ color: colors.text_lt_light,
19
+ fontWeight: typography.regular,
20
+ fontSize: typography.text_base,
21
+ },
22
+ },
23
+ chart: {
24
+ type: "column",
25
+ },
26
+ tooltip: {
27
+ backgroundColor: {
28
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
29
+ stops: [
30
+ [0, colors.bg_dark],
31
+ [1, colors.bg_dark],
32
+ ],
33
+ },
34
+ style: {
35
+ fontFamily: typography.font_family_base,
36
+ color: colors.text_dk_default,
37
+ fontWeight: typography.regular,
38
+ fontSize: typography.text_smaller,
39
+ },
40
+ },
41
+ colors: [
42
+ colors.data_1,
43
+ colors.data_2,
44
+ colors.data_3,
45
+ colors.data_4,
46
+ colors.data_5,
47
+ colors.data_6,
48
+ colors.data_7,
49
+ ],
50
+ credits: { enabled: false },
51
+ legend: {
52
+ enabled: false,
53
+ itemStyle: {
54
+ color: colors.text_lt_light,
55
+ fill: colors.text_lt_light,
56
+ fontSize: typography.text_smaller,
57
+ },
58
+ },
59
+ xAxis: {
60
+ gridLineWidth: 0,
61
+ lineColor: colors.border_light,
62
+ tickColor: colors.border_light,
63
+ labels: {
64
+ style: {
65
+ fontFamily: typography.font_family_base,
66
+ color: colors.text_lt_lighter,
67
+ fontWeight: typography.bold,
68
+ fontSize: typography.text_smaller,
69
+ },
70
+ },
71
+ title: {
72
+ style: {
73
+ color: colors.text_lt_default,
74
+ fontFamily: typography.font_family_base,
75
+ fontWeight: typography.regular,
76
+ fontSize: typography.heading_4,
77
+ },
78
+ },
79
+ },
80
+ yAxis: {
81
+ alternateGridColor: undefined as string | undefined,
82
+ minorTickInterval: null as number | null,
83
+ gridLineColor: colors.border_light,
84
+ minorGridLineColor: colors.border_light,
85
+ lineWidth: 0,
86
+ tickWidth: 0,
87
+ labels: {
88
+ style: {
89
+ fontFamily: typography.font_family_base,
90
+ color: colors.text_lt_lighter,
91
+ fontWeight: typography.bold,
92
+ fontSize: typography.text_smaller,
93
+ },
94
+ },
95
+ title: {
96
+ style: {
97
+ fontFamily: typography.font_family_base,
98
+ color: colors.text_lt_lighter,
99
+ fontWeight: typography.bold,
100
+ fontSize: typography.text_smaller,
101
+ },
102
+ },
103
+ },
104
+ }
105
+
106
+ export default barGraphTheme;
@@ -1,6 +1,10 @@
1
1
  import React from 'react'
2
+ import colors from '../../tokens/exports/_colors.module.scss'
3
+ import Highcharts from "highcharts";
4
+ import HighchartsReact from "highcharts-react-official";
5
+
6
+ import barGraphTheme from '../barGraphTheme';
2
7
 
3
- import BarGraph from '../_bar_graph'
4
8
 
5
9
  const chartData = [{
6
10
  name: 'Installation',
@@ -19,19 +23,33 @@ const chartData = [{
19
23
  data: [1111, 677, 3245, 500, 200],
20
24
  }]
21
25
 
22
- const BarGraphColors = (props) => (
23
- <div>
24
- <BarGraph
25
- axisTitle="Number of Employees"
26
- chartData={chartData}
27
- colors={['data-4', 'data-5', 'data-6', 'data-7', 'data-8']}
28
- id="bar-colors"
29
- title="Bar Graph with Custom Data Colors"
30
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May']}
31
- yAxisMin={0}
32
- {...props}
33
- />
34
- </div>
35
- )
26
+ const chartOptions = {
27
+ series: chartData,
28
+ title: {
29
+ text: "Bar Graph with Custom Data Colors",
30
+ },
31
+ xAxis: {
32
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
33
+ },
34
+ yAxis: {
35
+ title: {
36
+ text: "Number of Employees",
37
+ },
38
+ },
39
+ colors: [colors.data_4, colors.data_5, colors.data_6, colors.data_7, colors.data_8],
40
+ }
41
+
42
+ const BarGraphColors = () => {
43
+ const options = Highcharts.merge({}, barGraphTheme, chartOptions)
44
+
45
+ return (
46
+ <div>
47
+ <HighchartsReact
48
+ highcharts={Highcharts}
49
+ options={options}
50
+ />
51
+ </div>
52
+ )
53
+ }
36
54
 
37
55
  export default BarGraphColors
@@ -1,6 +1,8 @@
1
1
  import React from 'react'
2
+ import Highcharts from "highcharts";
3
+ import HighchartsReact from "highcharts-react-official";
2
4
 
3
- import BarGraph from '../_bar_graph'
5
+ import barGraphTheme from '../barGraphTheme';
4
6
 
5
7
  const chartData = [{
6
8
  name: 'Installation',
@@ -19,19 +21,35 @@ const chartData = [{
19
21
  data: [1111, 677, 3245, 500, 200],
20
22
  }]
21
23
 
22
- const BarGraphDefault = (props) => (
23
- <div>
24
- <BarGraph
25
- axisTitle="Number of Employees"
26
- chartData={chartData}
27
- id="bar-default"
28
- subTitle="Source: thesolarfoundation.com"
29
- title="Solar Employment Growth by Sector, 2010-2016"
30
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May']}
31
- yAxisMin={0}
32
- {...props}
33
- />
34
- </div>
35
- )
24
+ const chartOptions = {
25
+ series: chartData,
26
+ title: {
27
+ text: 'Solar Employment Growth by Sector, 2010-2016',
28
+ },
29
+ subtitle: {
30
+ text: 'Source: thesolarfoundation.com',
31
+ },
32
+ xAxis: {
33
+ categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
34
+ },
35
+ yAxis: {
36
+ title: {
37
+ text: 'Number of Employees',
38
+ },
39
+ },
40
+ }
41
+
42
+ const BarGraphDefault = () => {
43
+ const options = Highcharts.merge({}, barGraphTheme, chartOptions)
44
+
45
+ return (
46
+ <div>
47
+ <HighchartsReact
48
+ highcharts={Highcharts}
49
+ options={options}
50
+ />
51
+ </div>
52
+ )
53
+ }
36
54
 
37
55
  export default BarGraphDefault
@@ -1,39 +1,69 @@
1
1
  import React from 'react'
2
+ import Highcharts from "highcharts";
3
+ import HighchartsReact from "highcharts-react-official";
2
4
 
3
- import BarGraph from '../_bar_graph'
5
+ import barGraphTheme from '../barGraphTheme';
4
6
 
5
7
  const chartData = [{
6
8
  name: 'Number of Installations',
7
9
  data: [1475, 200, 3000, 654, 656],
8
10
  }]
9
11
 
10
- const BarGraphDefault = (props) => (
12
+ const pixelHeightChartOptions = {
13
+ chart: {
14
+ height: "300"
15
+ },
16
+ series: chartData,
17
+ title: {
18
+ text: "Fixed Height (300px)",
19
+ },
20
+ xAxis: {
21
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
22
+ },
23
+ yAxis: {
24
+ title: {
25
+ text: "Number of Employees",
26
+ },
27
+ },
28
+ };
29
+
30
+ const percentageHeightChartOptions = {
31
+ chart: {
32
+ height: "50%"
33
+ },
34
+ series: chartData,
35
+ title: {
36
+ text: "Percentage Height (50%)",
37
+ },
38
+ xAxis: {
39
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
40
+ },
41
+ yAxis: {
42
+ title: {
43
+ text: "Number of Employees",
44
+ },
45
+ },
46
+ };
47
+
48
+ const pixelOptions = Highcharts.merge({}, barGraphTheme, pixelHeightChartOptions)
49
+
50
+ const percentageOptions = Highcharts.merge({}, barGraphTheme, percentageHeightChartOptions)
51
+
52
+ const BarGraphHeight = () => (
11
53
  <div>
12
- <BarGraph
13
- axisTitle="Number of Employees"
14
- chartData={chartData}
15
- height="300"
16
- id="bar-fixed-height"
17
- title="Fixed Height (300px)"
18
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']}
19
- yAxisMin={0}
20
- {...props}
21
- />
54
+ <HighchartsReact
55
+ highcharts={Highcharts}
56
+ options={pixelOptions}
57
+ />
22
58
 
23
59
  <br />
24
60
  <br />
25
61
 
26
- <BarGraph
27
- axisTitle="Number of Employees"
28
- chartData={chartData}
29
- height="50%"
30
- id="bar-percentage-height"
31
- title="Percentage Height (50%)"
32
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']}
33
- yAxisMin={0}
34
- {...props}
62
+ <HighchartsReact
63
+ highcharts={Highcharts}
64
+ options={percentageOptions}
35
65
  />
36
66
  </div>
37
67
  )
38
68
 
39
- export default BarGraphDefault
69
+ export default BarGraphHeight
@@ -0,0 +1,3 @@
1
+ By default, Highcharts have a height of 400px, but this can be customized. You can override the default by specifying either a percentage or a fixed pixel value.
2
+
3
+ Using a percentage maintains a consistent aspect ratio across different responsive sizes. For example, setting the height to 50% makes the chart’s height half of its width.
@@ -1,9 +1,10 @@
1
1
  import React from 'react'
2
+ import Highcharts from "highcharts";
3
+ import HighchartsReact from "highcharts-react-official";
2
4
 
3
- import BarGraph from '../_bar_graph'
5
+ import barGraphTheme from '../barGraphTheme';
4
6
 
5
-
6
- const barGraphOptions = {
7
+ const chartOptions = {
7
8
  chart: {
8
9
  type: 'bar'
9
10
  },
@@ -22,13 +23,8 @@ const barGraphOptions = {
22
23
  lineWidth: 0
23
24
  },
24
25
  yAxis: {
25
- min: 0,
26
26
  title: {
27
- text: 'Population (millions)',
28
- align: 'high'
29
- },
30
- labels: {
31
- overflow: 'justify'
27
+ text: '',
32
28
  },
33
29
  },
34
30
  tooltip: {
@@ -51,16 +47,16 @@ const barGraphOptions = {
51
47
  }, {
52
48
  name: 'Year 2018',
53
49
  data: [1276, 1007, 4561, 746]
54
- }]
50
+ }],
55
51
  }
56
52
 
57
- const BarGraphHorizontal = (props) => (
53
+ const options = Highcharts.merge({}, barGraphTheme, chartOptions)
54
+
55
+ const BarGraphHorizontal = () => (
58
56
  <div>
59
- <BarGraph
60
- customOptions={barGraphOptions}
61
- id="bar-horizontal"
62
- yAxisMin={0}
63
- {...props}
57
+ <HighchartsReact
58
+ highcharts={Highcharts}
59
+ options={options}
64
60
  />
65
61
  </div>
66
62
  )