buckaroo-js-core 0.8.0

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 (159) hide show
  1. package/.prettierrc +16 -0
  2. package/CHANGELOG.md +23 -0
  3. package/LICENSE +15 -0
  4. package/README.md +66 -0
  5. package/buckaroo_js/baked_data/colorMap.d.ts +3 -0
  6. package/buckaroo_js/baked_data/colorMap.d.ts.map +1 -0
  7. package/buckaroo_js/baked_data/colorMap.js +520 -0
  8. package/buckaroo_js/baked_data/colorMap.js.map +1 -0
  9. package/buckaroo_js/baked_data/staticData.d.ts +124 -0
  10. package/buckaroo_js/baked_data/staticData.d.ts.map +1 -0
  11. package/buckaroo_js/baked_data/staticData.js +459 -0
  12. package/buckaroo_js/baked_data/staticData.js.map +1 -0
  13. package/buckaroo_js/components/ColumnsEditor.d.ts +19 -0
  14. package/buckaroo_js/components/ColumnsEditor.d.ts.map +1 -0
  15. package/buckaroo_js/components/ColumnsEditor.js +68 -0
  16. package/buckaroo_js/components/ColumnsEditor.js.map +1 -0
  17. package/buckaroo_js/components/CommandUtils.d.ts +22 -0
  18. package/buckaroo_js/components/CommandUtils.d.ts.map +1 -0
  19. package/buckaroo_js/components/CommandUtils.js +17 -0
  20. package/buckaroo_js/components/CommandUtils.js.map +1 -0
  21. package/buckaroo_js/components/DCFCell.d.ts +28 -0
  22. package/buckaroo_js/components/DCFCell.d.ts.map +1 -0
  23. package/buckaroo_js/components/DCFCell.js +120 -0
  24. package/buckaroo_js/components/DCFCell.js.map +1 -0
  25. package/buckaroo_js/components/DFViewerParts/DFViewer.d.ts +29 -0
  26. package/buckaroo_js/components/DFViewerParts/DFViewer.d.ts.map +1 -0
  27. package/buckaroo_js/components/DFViewerParts/DFViewer.js +163 -0
  28. package/buckaroo_js/components/DFViewerParts/DFViewer.js.map +1 -0
  29. package/buckaroo_js/components/DFViewerParts/DFWhole.d.ts +111 -0
  30. package/buckaroo_js/components/DFViewerParts/DFWhole.d.ts.map +1 -0
  31. package/buckaroo_js/components/DFViewerParts/DFWhole.js +17 -0
  32. package/buckaroo_js/components/DFViewerParts/DFWhole.js.map +1 -0
  33. package/buckaroo_js/components/DFViewerParts/Displayer.d.ts +19 -0
  34. package/buckaroo_js/components/DFViewerParts/Displayer.d.ts.map +1 -0
  35. package/buckaroo_js/components/DFViewerParts/Displayer.js +221 -0
  36. package/buckaroo_js/components/DFViewerParts/Displayer.js.map +1 -0
  37. package/buckaroo_js/components/DFViewerParts/HistogramCell.d.ts +20 -0
  38. package/buckaroo_js/components/DFViewerParts/HistogramCell.d.ts.map +1 -0
  39. package/buckaroo_js/components/DFViewerParts/HistogramCell.js +184 -0
  40. package/buckaroo_js/components/DFViewerParts/HistogramCell.js.map +1 -0
  41. package/buckaroo_js/components/DFViewerParts/SeriesSummaryTooltip.d.ts +5 -0
  42. package/buckaroo_js/components/DFViewerParts/SeriesSummaryTooltip.d.ts.map +1 -0
  43. package/buckaroo_js/components/DFViewerParts/SeriesSummaryTooltip.js +18 -0
  44. package/buckaroo_js/components/DFViewerParts/SeriesSummaryTooltip.js.map +1 -0
  45. package/buckaroo_js/components/DFViewerParts/gridUtils.d.ts +24 -0
  46. package/buckaroo_js/components/DFViewerParts/gridUtils.d.ts.map +1 -0
  47. package/buckaroo_js/components/DFViewerParts/gridUtils.js +230 -0
  48. package/buckaroo_js/components/DFViewerParts/gridUtils.js.map +1 -0
  49. package/buckaroo_js/components/DependentTabs.d.ts +33 -0
  50. package/buckaroo_js/components/DependentTabs.d.ts.map +1 -0
  51. package/buckaroo_js/components/DependentTabs.js +108 -0
  52. package/buckaroo_js/components/DependentTabs.js.map +1 -0
  53. package/buckaroo_js/components/OperationDetail.d.ts +16 -0
  54. package/buckaroo_js/components/OperationDetail.d.ts.map +1 -0
  55. package/buckaroo_js/components/OperationDetail.js +144 -0
  56. package/buckaroo_js/components/OperationDetail.js.map +1 -0
  57. package/buckaroo_js/components/OperationUtils.d.ts +17 -0
  58. package/buckaroo_js/components/OperationUtils.d.ts.map +1 -0
  59. package/buckaroo_js/components/OperationUtils.js +14 -0
  60. package/buckaroo_js/components/OperationUtils.js.map +1 -0
  61. package/buckaroo_js/components/Operations.d.ts +24 -0
  62. package/buckaroo_js/components/Operations.d.ts.map +1 -0
  63. package/buckaroo_js/components/Operations.js +209 -0
  64. package/buckaroo_js/components/Operations.js.map +1 -0
  65. package/buckaroo_js/components/StatusBar.d.ts +12 -0
  66. package/buckaroo_js/components/StatusBar.d.ts.map +1 -0
  67. package/buckaroo_js/components/StatusBar.js +155 -0
  68. package/buckaroo_js/components/StatusBar.js.map +1 -0
  69. package/buckaroo_js/components/WidgetTypes.d.ts +25 -0
  70. package/buckaroo_js/components/WidgetTypes.d.ts.map +1 -0
  71. package/buckaroo_js/components/WidgetTypes.js +3 -0
  72. package/buckaroo_js/components/WidgetTypes.js.map +1 -0
  73. package/buckaroo_js/components/bakedOperationDefaults.d.ts +5 -0
  74. package/buckaroo_js/components/bakedOperationDefaults.d.ts.map +1 -0
  75. package/buckaroo_js/components/bakedOperationDefaults.js +15 -0
  76. package/buckaroo_js/components/bakedOperationDefaults.js.map +1 -0
  77. package/buckaroo_js/components/utils.d.ts +294 -0
  78. package/buckaroo_js/components/utils.d.ts.map +1 -0
  79. package/buckaroo_js/components/utils.js +143 -0
  80. package/buckaroo_js/components/utils.js.map +1 -0
  81. package/buckaroo_js/extension.d.ts +2 -0
  82. package/buckaroo_js/extension.d.ts.map +1 -0
  83. package/buckaroo_js/extension.js +20 -0
  84. package/buckaroo_js/extension.js.map +1 -0
  85. package/buckaroo_js/index.d.ts +25 -0
  86. package/buckaroo_js/index.d.ts.map +1 -0
  87. package/buckaroo_js/index.js +46 -0
  88. package/buckaroo_js/index.js.map +1 -0
  89. package/buckaroo_js/vendor/RechartExtra.d.ts +38 -0
  90. package/buckaroo_js/vendor/RechartExtra.d.ts.map +1 -0
  91. package/buckaroo_js/vendor/RechartExtra.js +17 -0
  92. package/buckaroo_js/vendor/RechartExtra.js.map +1 -0
  93. package/buckaroo_js/vendor/RechartTooltip.d.ts +82 -0
  94. package/buckaroo_js/vendor/RechartTooltip.d.ts.map +1 -0
  95. package/buckaroo_js/vendor/RechartTooltip.js +232 -0
  96. package/buckaroo_js/vendor/RechartTooltip.js.map +1 -0
  97. package/codecov.yml +16 -0
  98. package/eslint.config.mjs +88 -0
  99. package/examples/App.tsx +160 -0
  100. package/examples/CodeBlock.tsx +27 -0
  101. package/examples/CodePenButton.tsx +77 -0
  102. package/examples/ReadmeBlock.tsx +11 -0
  103. package/examples/app.css +29 -0
  104. package/examples/ex/ColumnsEditorEx.tsx +5 -0
  105. package/examples/ex/CommandViewerEx.tsx +20 -0
  106. package/examples/ex/DFViewerEx.tsx +3 -0
  107. package/examples/ex/DFViewerEx_large.tsx +266 -0
  108. package/examples/ex/DFViewerEx_real_summary.tsx +20 -0
  109. package/examples/ex/DFViewerEx_short_data.tsx +22 -0
  110. package/examples/ex/DFViewerEx_string_index.tsx +1012 -0
  111. package/examples/ex/HistogramEx.tsx +67 -0
  112. package/examples/ex/StatusBarEx.tsx +46 -0
  113. package/examples/ex/WidgetDCFCellEx.tsx +6 -0
  114. package/examples/example.css +20 -0
  115. package/examples/index-iframe.hnottml +24 -0
  116. package/examples/index-react18.tsx +8 -0
  117. package/examples/index.html +20 -0
  118. package/examples/jsx-loader.ts +16 -0
  119. package/examples/tsconfig.json +31 -0
  120. package/index.d.ts +2 -0
  121. package/index.d.ts.map +1 -0
  122. package/index.js +7 -0
  123. package/index.js.map +1 -0
  124. package/jest.config.js +24 -0
  125. package/package.json +117 -0
  126. package/screen-animation.gif +0 -0
  127. package/src/buckaroo_js/baked_data/colorMap.ts +523 -0
  128. package/src/buckaroo_js/baked_data/staticData.ts +503 -0
  129. package/src/buckaroo_js/components/ColumnsEditor.tsx +66 -0
  130. package/src/buckaroo_js/components/CommandUtils.ts +40 -0
  131. package/src/buckaroo_js/components/DCFCell.tsx +175 -0
  132. package/src/buckaroo_js/components/DFViewerParts/DFViewer.tsx +215 -0
  133. package/src/buckaroo_js/components/DFViewerParts/DFWhole.ts +190 -0
  134. package/src/buckaroo_js/components/DFViewerParts/Displayer.ts +215 -0
  135. package/src/buckaroo_js/components/DFViewerParts/HistogramCell.tsx +251 -0
  136. package/src/buckaroo_js/components/DFViewerParts/SeriesSummaryTooltip.tsx +20 -0
  137. package/src/buckaroo_js/components/DFViewerParts/gridUtils.ts +290 -0
  138. package/src/buckaroo_js/components/DependentTabs.tsx +134 -0
  139. package/src/buckaroo_js/components/OperationDetail.tsx +203 -0
  140. package/src/buckaroo_js/components/OperationUtils.ts +33 -0
  141. package/src/buckaroo_js/components/Operations.tsx +243 -0
  142. package/src/buckaroo_js/components/StatusBar.tsx +190 -0
  143. package/src/buckaroo_js/components/WidgetTypes.tsx +42 -0
  144. package/src/buckaroo_js/components/bakedOperationDefaults.ts +14 -0
  145. package/src/buckaroo_js/components/utils.ts +60 -0
  146. package/src/buckaroo_js/extension.ts +15 -0
  147. package/src/buckaroo_js/index.ts +34 -0
  148. package/src/buckaroo_js/style/dcf-npm.css +244 -0
  149. package/src/buckaroo_js/style/icons/arrow-down-short-dark.svg +4 -0
  150. package/src/buckaroo_js/style/icons/arrow-down-short.svg +4 -0
  151. package/src/buckaroo_js/style/icons/arrow-up-short-dark.svg +4 -0
  152. package/src/buckaroo_js/style/icons/arrow-up-short.svg +4 -0
  153. package/src/buckaroo_js/style/icons/filter-dark.svg +3 -0
  154. package/src/buckaroo_js/style/icons/filter.svg +3 -0
  155. package/src/buckaroo_js/vendor/RechartExtra.ts +60 -0
  156. package/src/buckaroo_js/vendor/RechartTooltip.tsx +357 -0
  157. package/src/index.tsx +3 -0
  158. package/tsconfig.json +41 -0
  159. package/webpack.config.ts +97 -0
@@ -0,0 +1,175 @@
1
+ import React, {useState, Dispatch, SetStateAction} from 'react';
2
+ import _ from 'lodash';
3
+ import {OperationResult, baseOperationResults} from './DependentTabs';
4
+ import {ColumnsEditor} from './ColumnsEditor';
5
+ import {
6
+ dfviewer_config_no_pinned,
7
+ realSummaryConfig,
8
+ realSummaryTableData,
9
+ summaryDfForTableDf,
10
+ tableDf
11
+ } from '../baked_data/staticData';
12
+ import {DFData, DFViewerConfig} from './DFViewerParts/DFWhole';
13
+ import {DFViewer} from './DFViewerParts/DFViewer';
14
+ import {StatusBar} from './StatusBar';
15
+ import {BuckarooState} from './WidgetTypes';
16
+ import {BuckarooOptions} from './WidgetTypes';
17
+ import {DFMeta} from './WidgetTypes';
18
+ import {CommandConfigT} from './CommandUtils';
19
+ import {bakedCommandConfig} from './bakedOperationDefaults';
20
+ import {Operation, bakedOperations} from './OperationUtils';
21
+
22
+ export type CommandConfigSetterT = (setter: Dispatch<SetStateAction<CommandConfigT>>) => void;
23
+
24
+ /*
25
+ Widget DCFCell is meant to be used with callback functions and passed values, not explicit http calls
26
+
27
+ TODO:add height settings to dfConfig rather than hardcoded.
28
+ */
29
+ export interface IDisplayArgs {
30
+ data_key: string;
31
+ df_viewer_config: DFViewerConfig;
32
+ summary_stats_key: string;
33
+ }
34
+ export function WidgetDCFCell({
35
+ df_data_dict,
36
+ df_display_args,
37
+ df_meta,
38
+ operations,
39
+ on_operations,
40
+ operation_results,
41
+ commandConfig,
42
+ buckaroo_state,
43
+ on_buckaroo_state,
44
+ buckaroo_options
45
+ }: {
46
+ df_meta: DFMeta;
47
+ df_data_dict: Record<string, DFData>;
48
+ df_display_args: Record<string, IDisplayArgs>;
49
+ operations: Operation[];
50
+ on_operations: (ops: Operation[]) => void;
51
+ operation_results: OperationResult;
52
+ commandConfig: CommandConfigT;
53
+ buckaroo_state: BuckarooState;
54
+ on_buckaroo_state: React.Dispatch<React.SetStateAction<BuckarooState>>;
55
+ buckaroo_options: BuckarooOptions;
56
+ }) {
57
+ const [activeCol, setActiveCol] = useState('stoptime');
58
+
59
+ const cDisp = df_display_args[buckaroo_state.df_display];
60
+ if (cDisp === undefined) {
61
+ console.log('cDisp undefined', buckaroo_state.df_display, buckaroo_options.df_display);
62
+ } else {
63
+ // console.log("cDisp", cDisp);
64
+ }
65
+ const dfData = df_data_dict[cDisp.data_key];
66
+ //console.log("dfData", dfData);
67
+ const summaryStatsData = df_data_dict[cDisp.summary_stats_key];
68
+
69
+ return (
70
+ <div className='dcf-root flex flex-col' style={{width: '100%', height: '100%'}}>
71
+ <div
72
+ className='orig-df flex flex-row'
73
+ style={{
74
+ // height: '450px',
75
+ overflow: 'hidden'
76
+ }}
77
+ >
78
+ <StatusBar
79
+ dfMeta={df_meta}
80
+ buckarooState={buckaroo_state}
81
+ setBuckarooState={on_buckaroo_state}
82
+ buckarooOptions={buckaroo_options}
83
+ />
84
+ <DFViewer
85
+ df_data={dfData}
86
+ df_viewer_config={cDisp.df_viewer_config}
87
+ summary_stats_data={summaryStatsData}
88
+ activeCol={activeCol}
89
+ setActiveCol={setActiveCol}
90
+ />
91
+ </div>
92
+ {buckaroo_state.show_commands ? (
93
+ <ColumnsEditor
94
+ df_viewer_config={cDisp.df_viewer_config}
95
+ activeColumn={activeCol}
96
+ operations={operations}
97
+ setOperations={on_operations}
98
+ operationResult={operation_results}
99
+ commandConfig={commandConfig}
100
+ />
101
+ ) : (
102
+ <span></span>
103
+ )}
104
+ </div>
105
+ );
106
+ }
107
+
108
+ export function WidgetDCFCellExample() {
109
+ const dfm: DFMeta = {
110
+ columns: 5,
111
+ rows_shown: 20,
112
+ filtered_rows: 89,
113
+ total_rows: 877
114
+ };
115
+
116
+ const [bState, setBState] = useState<BuckarooState>({
117
+ auto_clean: '',
118
+ sampled: false,
119
+ show_commands: false,
120
+ df_display: 'main',
121
+ post_processing: '',
122
+ quick_command_args: {}
123
+ });
124
+
125
+ const bOptions: BuckarooOptions = {
126
+ auto_clean: ['', 'aggressive', 'conservative'],
127
+ df_display: ['main', 'realSummary', 'no_pinned'],
128
+ sampled: ['random'],
129
+ post_processing: ['', 'foo', 'bar'],
130
+ show_commands: ['on']
131
+ // 'summary_stats' : ['full', 'all', 'typing_stats']
132
+ };
133
+
134
+ const [operations, setOperations] = useState<Operation[]>(bakedOperations);
135
+
136
+ const bakedDfDisplay: Record<string, IDisplayArgs> = {
137
+ main: {
138
+ data_key: 'main',
139
+ df_viewer_config: tableDf.dfviewer_config,
140
+ summary_stats_key: 'all'
141
+ },
142
+ realSummary: {
143
+ data_key: 'empty',
144
+ df_viewer_config: realSummaryConfig,
145
+ summary_stats_key: 'real_summary'
146
+ },
147
+
148
+ no_pinned: {
149
+ data_key: 'main',
150
+ df_viewer_config: dfviewer_config_no_pinned,
151
+ summary_stats_key: 'all'
152
+ }
153
+ };
154
+
155
+ const df_data_dict = {
156
+ main: tableDf.data,
157
+ all: summaryDfForTableDf,
158
+ real_summary: realSummaryTableData,
159
+ empty: [{index: 'distinct_count'}]
160
+ };
161
+ return (
162
+ <WidgetDCFCell
163
+ df_meta={dfm}
164
+ df_display_args={bakedDfDisplay}
165
+ df_data_dict={df_data_dict}
166
+ buckaroo_options={bOptions}
167
+ buckaroo_state={bState}
168
+ on_buckaroo_state={setBState}
169
+ commandConfig={bakedCommandConfig}
170
+ operations={operations}
171
+ on_operations={setOperations}
172
+ operation_results={baseOperationResults}
173
+ />
174
+ );
175
+ }
@@ -0,0 +1,215 @@
1
+ import React, {useRef, CSSProperties, useState} from 'react';
2
+ import _ from 'lodash';
3
+ import {ComponentConfig, DFData, DFViewerConfig} from './DFWhole';
4
+
5
+ import {dfToAgrid, extractPinnedRows} from './gridUtils';
6
+ import {replaceAtMatch} from '../utils';
7
+ import {AgGridReact} from 'ag-grid-react'; // the AG Grid React Component
8
+ import {
9
+ DomLayoutType,
10
+ GridOptions,
11
+ SizeColumnsToContentStrategy,
12
+ SizeColumnsToFitProvidedWidthStrategy
13
+ } from 'ag-grid-community';
14
+ import {summaryDfForTableDf, tableDf} from '../../baked_data/staticData';
15
+
16
+ import {getCellRendererSelector} from './gridUtils';
17
+
18
+ export type setColumFunc = (newCol: string) => void;
19
+
20
+ export function DFViewer({
21
+ df_data: df,
22
+ df_viewer_config,
23
+ summary_stats_data,
24
+ style,
25
+ activeCol,
26
+ setActiveCol
27
+ }: {
28
+ df_data: DFData;
29
+ df_viewer_config: DFViewerConfig;
30
+ summary_stats_data?: DFData;
31
+ style?: CSSProperties;
32
+ activeCol?: string;
33
+ setActiveCol?: setColumFunc;
34
+ }) {
35
+ /* = {
36
+ df: EmptyDf.data,
37
+ df_viewer_config: EmptyDf.dfviewer_config,
38
+ summary_stats_data: [],
39
+ style: { height: '300px' },
40
+ setActiveCol: () => null,
41
+ }*/
42
+ //console.log("dfviewer df_viewer_config", df_viewer_config);
43
+ // console.log("summary_stats_data", summary_stats_data);
44
+ // console.log("full_object", {'df':df, 'df_viewer_config':df_viewer_config, 'summary_stats_data': summary_stats_data})
45
+ const [agColsPure, agData] = dfToAgrid(df, df_viewer_config, summary_stats_data || []);
46
+
47
+ const styledColumns = replaceAtMatch(_.clone(agColsPure), activeCol || '___never', {
48
+ cellStyle: {background: 'var(--ag-range-selection-background-color-3)'}
49
+ });
50
+
51
+ const defaultColDef = {
52
+ sortable: true,
53
+ type: 'rightAligned',
54
+ cellRendererSelector: getCellRendererSelector(df_viewer_config.pinned_rows)
55
+ };
56
+
57
+ const gridOptions: GridOptions = {
58
+ rowSelection: 'single',
59
+
60
+ enableCellTextSelection: true,
61
+ onRowClicked: (event) => {
62
+ // console.log('A row was clicked')
63
+ // console.log("event", event)
64
+ const sel = document.getSelection();
65
+ if (sel === null) {
66
+ return;
67
+ }
68
+ const range = document.createRange();
69
+ const el = event?.event?.target;
70
+ if (el === null || el === undefined) {
71
+ return;
72
+ }
73
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
74
+ //@ts-ignore
75
+ range.selectNodeContents(el);
76
+ sel.removeAllRanges();
77
+ sel.addRange(range);
78
+ },
79
+ tooltipShowDelay: 0,
80
+
81
+ // defaultColDef needs to be specifically passed in as a prop to the component, not defined here,
82
+ // otherwise updates aren't reactive
83
+
84
+ onCellClicked: (event) => {
85
+ const colName = event.column.getColId();
86
+ if (setActiveCol === undefined || colName === undefined) {
87
+ return;
88
+ } else {
89
+ setActiveCol(colName);
90
+ }
91
+ },
92
+ ...(df_viewer_config.extra_grid_config ? df_viewer_config.extra_grid_config : {})
93
+ };
94
+ const gridRef = useRef<AgGridReact<unknown>>(null);
95
+ const pinned_rows = df_viewer_config.pinned_rows;
96
+ const topRowData = summary_stats_data
97
+ ? extractPinnedRows(summary_stats_data, pinned_rows ? pinned_rows : [])
98
+ : [];
99
+
100
+ const getAutoSize = ():
101
+ | SizeColumnsToFitProvidedWidthStrategy
102
+ | SizeColumnsToContentStrategy => {
103
+ if (styledColumns.length < 1) {
104
+ return {
105
+ type: 'fitProvidedWidth',
106
+ width: window.innerWidth - 100
107
+ };
108
+ }
109
+ return {
110
+ type: 'fitCellContents'
111
+ };
112
+ };
113
+
114
+ const hs = heightStyle({
115
+ numRows: agData.length,
116
+ pinnedRowLen: df_viewer_config.pinned_rows.length,
117
+ location: window.location,
118
+ compC: df_viewer_config?.component_config,
119
+ rowHeight: df_viewer_config?.extra_grid_config?.rowHeight
120
+ });
121
+
122
+ return (
123
+ <div className={`df-viewer ${hs.classMode} ${hs.inIframe}`}>
124
+ <div style={hs.applicableStyle} className='theme-hanger ag-theme-alpine-dark '>
125
+ <AgGridReact
126
+ ref={gridRef}
127
+ domLayout={hs.domLayout}
128
+ defaultColDef={defaultColDef}
129
+ gridOptions={gridOptions}
130
+ rowData={agData}
131
+ pinnedTopRowData={topRowData}
132
+ columnDefs={_.cloneDeep(styledColumns)}
133
+ autoSizeStrategy={getAutoSize()}
134
+ ></AgGridReact>
135
+ </div>
136
+ </div>
137
+ );
138
+ }
139
+
140
+ interface HeightStyleArgs {
141
+ numRows: number;
142
+ pinnedRowLen: number;
143
+ readonly location: Location;
144
+ rowHeight?: number;
145
+ compC?: ComponentConfig;
146
+ }
147
+ interface HeightStyleI {
148
+ domLayout: DomLayoutType;
149
+ inIframe: string;
150
+ classMode: 'short-mode' | 'regular-mode';
151
+ applicableStyle: CSSProperties;
152
+ }
153
+
154
+ export const heightStyle = (hArgs: HeightStyleArgs): HeightStyleI => {
155
+ const {numRows, pinnedRowLen, location, rowHeight, compC} = hArgs;
156
+ const isGoogleColab = location.host.indexOf('colab.googleusercontent.com') !== -1;
157
+
158
+ const inIframe = window.parent !== window;
159
+ const regularCompHeight = window.innerHeight / (compC?.height_fraction || 2);
160
+ const dfvHeight = compC?.dfvHeight || regularCompHeight;
161
+ const regularDivStyle = {height: dfvHeight};
162
+ const shortDivStyle = {minHeight: 50, maxHeight: dfvHeight};
163
+
164
+ const belowMinRows = numRows + pinnedRowLen < 10;
165
+
166
+ const shortMode = compC?.shortMode || (belowMinRows && rowHeight === undefined);
167
+ console.log(
168
+ 'shortMode',
169
+ shortMode,
170
+ 'dfvHeight',
171
+ dfvHeight,
172
+ 'isGoogleColab',
173
+ isGoogleColab,
174
+ 'inIframe',
175
+ inIframe
176
+ );
177
+ const inIframeClass = inIframe ? 'inIframe' : '';
178
+ if (isGoogleColab || inIframe) {
179
+ return {
180
+ classMode: 'regular-mode',
181
+ domLayout: 'normal',
182
+ applicableStyle: {height: 500},
183
+ inIframe: inIframeClass
184
+ };
185
+ }
186
+ const domLayout: DomLayoutType = compC?.layoutType || (shortMode ? 'autoHeight' : 'normal');
187
+ const applicableStyle = shortMode ? shortDivStyle : regularDivStyle;
188
+ const classMode = shortMode ? 'short-mode' : 'regular-mode';
189
+ return {
190
+ classMode,
191
+ domLayout,
192
+ applicableStyle,
193
+ inIframe: inIframeClass
194
+ };
195
+
196
+ /*
197
+ ab = window.location.host;
198
+ "cskfus796ts-496ff2e9c6d22116-0-colab.googleusercontent.com"
199
+ bc = window.location.pathname
200
+ "/outputframe.html"
201
+ */
202
+ };
203
+
204
+ export function DFViewerEx() {
205
+ const [activeCol, setActiveCol] = useState('tripduration');
206
+ return (
207
+ <DFViewer
208
+ df_data={tableDf.data}
209
+ df_viewer_config={tableDf.dfviewer_config}
210
+ summary_stats_data={summaryDfForTableDf}
211
+ activeCol={activeCol}
212
+ setActiveCol={setActiveCol}
213
+ />
214
+ );
215
+ }
@@ -0,0 +1,190 @@
1
+ // I'm not sure about adding underlying types too
2
+
3
+ import {ColDef, GridOptions} from 'ag-grid-community';
4
+ import _ from 'lodash';
5
+
6
+ type AGGrid_ColDef = ColDef;
7
+
8
+ export interface ObjDisplayerA {
9
+ displayer: 'obj';
10
+ max_length?: number;
11
+ }
12
+ export interface BooleanDisplayerA {
13
+ displayer: 'boolean';
14
+ }
15
+ export interface StringDisplayerA {
16
+ displayer: 'string';
17
+ max_length?: number;
18
+ }
19
+ export interface FloatDisplayerA {
20
+ displayer: 'float';
21
+ min_fraction_digits: number;
22
+ max_fraction_digits: number;
23
+ }
24
+
25
+ export interface DatetimeDefaultDisplayerA {
26
+ displayer: 'datetimeDefault';
27
+ }
28
+ export interface IntegerDisplayerA {
29
+ displayer: 'integer';
30
+ min_digits: number;
31
+ max_digits: number;
32
+ }
33
+
34
+ export interface DatetimeLocaleDisplayerA {
35
+ displayer: 'datetimeLocaleString';
36
+ locale: 'en-US' | 'en-GB' | 'en-CA' | 'fr-FR' | 'es-ES' | 'de-DE' | 'ja-JP';
37
+ args: Intl.DateTimeFormatOptions;
38
+ }
39
+
40
+ // Used DisplayerA instead of FormatterArgs, Displayer makes sense from the python side
41
+ // python doesn't care that histogram requires a cellRenderer and Integer only changes the formatter
42
+ export type FormatterArgs =
43
+ | ObjDisplayerA
44
+ | BooleanDisplayerA
45
+ | StringDisplayerA
46
+ | FloatDisplayerA
47
+ | DatetimeDefaultDisplayerA
48
+ | DatetimeLocaleDisplayerA
49
+ | IntegerDisplayerA;
50
+
51
+ export interface HistogramDisplayerA {
52
+ displayer: 'histogram';
53
+ }
54
+
55
+ export interface LinkifyDisplayerA {
56
+ displayer: 'linkify';
57
+ }
58
+ export interface BooleanCheckboxDisplayerA {
59
+ displayer: 'boolean_checkbox';
60
+ }
61
+
62
+ export interface Base64PNGImageDisplayerA {
63
+ displayer: 'Base64PNGImageDisplayer';
64
+ }
65
+
66
+ export interface SVGDisplayerA {
67
+ displayer: 'SVGDisplayer';
68
+ }
69
+
70
+ export type CellRendererArgs =
71
+ | HistogramDisplayerA
72
+ | LinkifyDisplayerA
73
+ | BooleanCheckboxDisplayerA
74
+ | Base64PNGImageDisplayerA
75
+ | SVGDisplayerA;
76
+
77
+ export type DisplayerArgs = FormatterArgs | CellRendererArgs;
78
+
79
+ export const cellRendererDisplayers = [
80
+ 'histogram',
81
+ 'linkify',
82
+ 'Base64PNGImageDisplayer',
83
+ 'SVGDisplayer'
84
+ ];
85
+
86
+ //ColorMapRules
87
+ export interface ColorMapRules {
88
+ color_rule: 'color_map';
89
+ map_name: 'BLUE_TO_YELLOW' | 'DIVERGING_RED_WHITE_BLUE';
90
+ //optional, the column to base the ranges on. the proper histogram_bins must still be sent in for that column
91
+ val_column?: string;
92
+ }
93
+
94
+ //if exist_column is not null, set cell style to condtional_color... used for highlighting changed values or errored_rows
95
+ export interface ColorWhenNotNullRules {
96
+ color_rule: 'color_not_null';
97
+ conditional_color: string | 'red';
98
+ exist_column: string;
99
+ }
100
+
101
+ export interface ColorFromColumn {
102
+ color_rule: 'color_from_column';
103
+ col_name: string;
104
+ }
105
+
106
+ export type ColorMappingConfig = ColorMapRules | ColorWhenNotNullRules | ColorFromColumn;
107
+
108
+ //TooltipRules
109
+ export interface SimpleTooltip {
110
+ tooltip_type: 'simple';
111
+ val_column: string;
112
+ }
113
+
114
+ export interface SummarySeriesTooltip {
115
+ tooltip_type: 'summary_series';
116
+ }
117
+
118
+ export type TooltipConfig = SimpleTooltip | SummarySeriesTooltip; //more to be added
119
+
120
+ export type ColumnConfig = {
121
+ col_name: string;
122
+ displayer_args: DisplayerArgs;
123
+ color_map_config?: ColorMappingConfig;
124
+ tooltip_config?: TooltipConfig;
125
+ ag_grid_specs?: AGGrid_ColDef;
126
+ };
127
+
128
+ export type PinnedRowConfig = {
129
+ primary_key_val: string;
130
+ displayer_args: DisplayerArgs;
131
+ //used to render index column values with string not the specified displayer, otherwise the column will be listed as NaN or blank
132
+ //by default the "index" column is always rendered with "obj"
133
+ default_renderer_columns?: string[];
134
+ };
135
+
136
+ export type ComponentConfig = {
137
+ height_fraction?: number;
138
+ // temporary debugging props
139
+ dfvHeight?: number;
140
+ layoutType?: 'autoHeight' | 'normal';
141
+ shortMode?: boolean;
142
+ };
143
+
144
+ export interface DFViewerConfig {
145
+ pinned_rows: PinnedRowConfig[];
146
+ column_config: ColumnConfig[];
147
+ extra_grid_config?: GridOptions;
148
+ component_config?: ComponentConfig;
149
+ }
150
+
151
+ export type DFDataRow = Record<
152
+ string,
153
+ string | number | boolean | any[] | Record<string, any> | null
154
+ >;
155
+
156
+ export type DFData = DFDataRow[];
157
+
158
+ /*
159
+ When I want to start tagging metadata onto DFData
160
+ export interface DFData {
161
+ rows: DFDataRow[];
162
+ //data_meta expansion point for typing info about the data as needed by non-display stuff
163
+ // typing, sorting, null handling I'm not sure about it
164
+ };
165
+ */
166
+
167
+ export interface DFWhole {
168
+ dfviewer_config: DFViewerConfig;
169
+ data: DFData;
170
+ }
171
+
172
+ export const EmptyDf: DFWhole = {
173
+ dfviewer_config: {
174
+ pinned_rows: [],
175
+ column_config: []
176
+ },
177
+ data: []
178
+ };
179
+
180
+ //actually SDFT is summary stats transposed to be useful
181
+ // SDFT[col][stat_name]
182
+ // SDFT really only needs histogramBins and histogramLogBins and...? at this point
183
+ //type SDFT = any;
184
+
185
+ export interface SDFMeasure {
186
+ histogram_bins: number[];
187
+ histogram_log_bins: number[];
188
+ }
189
+
190
+ export type SDFT = Record<string, SDFMeasure>;