@deephaven/iris-grid 0.26.2-beta.3 → 0.27.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.
@@ -8,7 +8,7 @@ type Input = {
8
8
  name: string;
9
9
  formula: string;
10
10
  };
11
- interface CustomColumnBuilderProps {
11
+ export interface CustomColumnBuilderProps {
12
12
  model: IrisGridModel;
13
13
  customColumns: string[];
14
14
  onSave: (columns: string[]) => void;
@@ -23,11 +23,6 @@ interface CustomColumnBuilderState {
23
23
  }
24
24
  declare class CustomColumnBuilder extends Component<CustomColumnBuilderProps, CustomColumnBuilderState> {
25
25
  static SUCCESS_SHOW_DURATION: number;
26
- static defaultProps: {
27
- customColumns: never[];
28
- onSave: () => void;
29
- onCancel: () => void;
30
- };
31
26
  static makeCustomColumnInputEventKey(): string;
32
27
  static createCustomColumnInput(): Input;
33
28
  constructor(props: CustomColumnBuilderProps);
@@ -52,7 +47,7 @@ declare class CustomColumnBuilder extends Component<CustomColumnBuilderProps, Cu
52
47
  resetRequestFailed(): void;
53
48
  renderInputs(): ReactElement[];
54
49
  renderSaveButton(): ReactElement;
55
- render(): ReactElement;
50
+ render(): JSX.Element;
56
51
  }
57
52
  export default CustomColumnBuilder;
58
53
  //# sourceMappingURL=CustomColumnBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAA8B,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK7E,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9D,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AACD,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;;sBAEL,IAAI;wBACF,IAAI;MAClB;IAEF,MAAM,CAAC,6BAA6B,IAAI,MAAM;IAI9C,MAAM,CAAC,uBAAuB,IAAI,KAAK;gBAQ3B,KAAK,EAAE,wBAAwB;IAyB3C,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAO5B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,kBAAkB,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAEzD,QAAQ,WAAoB,KAAK,EAAE,OAAO,MAAM,uBAE9C;IAEF,aAAa,WAAoB,KAAK,EAAE,OAAO,MAAM,YAEnD;IAEF,iBAAiB,IAAI,IAAI;IAIzB,cAAc,IAAI,IAAI;IAgBtB,aAAa,IAAI,IAAI;IAgBrB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBjD,oBAAoB,IAAI,IAAI;IAS5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GACZ,IAAI;IAeP,yBAAyB,IAAI,IAAI;IAgBjC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA0BvC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAmBvC,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5E,eAAe,IAAI,IAAI;IAkBvB,kBAAkB,IAAI,IAAI;IAS1B,YAAY,IAAI,YAAY,EAAE;IAqB9B,gBAAgB,IAAI,YAAY;IA8BhC,MAAM,IAAI,YAAY;CA2DvB;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"CustomColumnBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAA8B,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAM7E,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9D,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AACD,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,6BAA6B,IAAI,MAAM;IAI9C,MAAM,CAAC,uBAAuB,IAAI,KAAK;gBAQ3B,KAAK,EAAE,wBAAwB;IAyB3C,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAO5B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,kBAAkB,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAEzD,QAAQ,WAAoB,KAAK,EAAE,OAAO,MAAM,uBAE9C;IAEF,aAAa,WAAoB,KAAK,EAAE,OAAO,MAAM,YAEnD;IAEF,iBAAiB,IAAI,IAAI;IAIzB,cAAc,IAAI,IAAI;IAgBtB,aAAa,IAAI,IAAI;IAgBrB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBjD,oBAAoB,IAAI,IAAI;IAS5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GACZ,IAAI;IAeP,yBAAyB,IAAI,IAAI;IAgBjC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA0BvC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAmBvC,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5E,eAAe,IAAI,IAAI;IAsBvB,kBAAkB,IAAI,IAAI;IAS1B,YAAY,IAAI,YAAY,EAAE;IA4B9B,gBAAgB,IAAI,YAAY;IAyChC,MAAM,IAAI,GAAG,CAAC,OAAO;CA2DtB;AAED,eAAe,mBAAmB,CAAC"}
@@ -12,6 +12,7 @@ import { DragDropContext, Droppable } from 'react-beautiful-dnd';
12
12
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
13
13
  import { Button, DragUtils, LoadingSpinner } from '@deephaven/components';
14
14
  import { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';
15
+ import { DbNameValidator } from '@deephaven/utils';
15
16
  import CustomColumnInput from "./CustomColumnInput.js";
16
17
  import "./CustomColumnBuilder.css";
17
18
  import IrisGridModel from "../IrisGridModel.js";
@@ -203,12 +204,12 @@ class CustomColumnBuilder extends Component {
203
204
  // focus on drag handle
204
205
  if (shiftKey) {
205
206
  var _this$container;
206
- ((_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.querySelectorAll(".btn-drag-handle")[focusEditorIndex]).focus();
207
+ ((_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.querySelectorAll('.btn-drag-handle')[focusEditorIndex]).focus();
207
208
  return;
208
209
  }
209
210
  if (focusEditorIndex === inputs.length - 1) {
210
- var _this$container2;
211
- ((_this$container2 = this.container) === null || _this$container2 === void 0 ? void 0 : _this$container2.querySelectorAll(".btn-add-column")[focusEditorIndex]).focus();
211
+ var _this$container2, _this$container2$quer;
212
+ (_this$container2 = this.container) === null || _this$container2 === void 0 ? void 0 : (_this$container2$quer = _this$container2.querySelector('.btn-add-column')) === null || _this$container2$quer === void 0 ? void 0 : _this$container2$quer.focus();
212
213
  } else {
213
214
  var _this$container3;
214
215
  // focus on next column name input
@@ -218,7 +219,8 @@ class CustomColumnBuilder extends Component {
218
219
  }
219
220
  handleSaveClick() {
220
221
  var {
221
- onSave
222
+ onSave,
223
+ customColumns: originalCustomColumns
222
224
  } = this.props;
223
225
  var {
224
226
  inputs,
@@ -239,7 +241,8 @@ class CustomColumnBuilder extends Component {
239
241
  });
240
242
  this.resetErrorMessage();
241
243
  this.setState({
242
- isCustomColumnApplying: true
244
+ // If both are 0, then moving from no custom to no custom. The parent won't re-render to cancel the loading state
245
+ isCustomColumnApplying: customColumns.length > 0 || originalCustomColumns.length > 0
243
246
  });
244
247
  onSave(customColumns);
245
248
  }
@@ -261,12 +264,22 @@ class CustomColumnBuilder extends Component {
261
264
  inputs,
262
265
  hasRequestFailed
263
266
  } = this.state;
267
+ var nameCount = new Map();
268
+ inputs.forEach(_ref2 => {
269
+ var _nameCount$get;
270
+ var {
271
+ name
272
+ } = _ref2;
273
+ return nameCount.set(name, ((_nameCount$get = nameCount.get(name)) !== null && _nameCount$get !== void 0 ? _nameCount$get : 0) + 1);
274
+ });
264
275
  return inputs.map((input, index) => {
276
+ var _nameCount$get2;
265
277
  var {
266
278
  eventKey,
267
279
  name,
268
280
  formula
269
281
  } = input;
282
+ var isDuplicate = ((_nameCount$get2 = nameCount.get(name)) !== null && _nameCount$get2 !== void 0 ? _nameCount$get2 : 0) > 1;
270
283
  return /*#__PURE__*/React.createElement(CustomColumnInput, {
271
284
  key: eventKey,
272
285
  inputIndex: index,
@@ -276,7 +289,8 @@ class CustomColumnBuilder extends Component {
276
289
  onChange: this.handleInputChange,
277
290
  onDeleteColumn: this.handleDeleteColumn,
278
291
  onTabInEditor: this.handleEditorTabNavigation,
279
- invalid: hasRequestFailed
292
+ invalid: hasRequestFailed,
293
+ isDuplicate: isDuplicate
280
294
  });
281
295
  });
282
296
  }
@@ -287,17 +301,33 @@ class CustomColumnBuilder extends Component {
287
301
  isSuccessShowing
288
302
  } = this.state;
289
303
  var saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';
304
+ var areNamesValid = inputs.every(_ref3 => {
305
+ var {
306
+ name
307
+ } = _ref3;
308
+ return name === '' || DbNameValidator.isValidColumnName(name);
309
+ });
310
+ var filteredNames = inputs.filter(_ref4 => {
311
+ var {
312
+ name
313
+ } = _ref4;
314
+ return name !== '';
315
+ }).map(_ref5 => {
316
+ var {
317
+ name
318
+ } = _ref5;
319
+ return name;
320
+ });
321
+ var areNamesUnique = new Set(filteredNames).size === filteredNames.length;
290
322
  return /*#__PURE__*/React.createElement(Button, {
291
323
  kind: isSuccessShowing ? 'success' : 'primary',
292
324
  className: classNames('btn-apply', {
293
325
  'btn-spinner': isCustomColumnApplying
294
326
  }),
295
- disabled: isSuccessShowing || isCustomColumnApplying,
327
+ disabled: isSuccessShowing || isCustomColumnApplying || !areNamesValid || !areNamesUnique,
296
328
  onClick: this.handleSaveClick
297
329
  }, isCustomColumnApplying && /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(LoadingSpinner, null), /*#__PURE__*/React.createElement("span", {
298
330
  className: "btn-normal-content"
299
- }, "Applying"), /*#__PURE__*/React.createElement("span", {
300
- className: "btn-hover-content"
301
331
  }, "Applying")), !isSuccessShowing && !isCustomColumnApplying && saveText, isSuccessShowing && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
302
332
  icon: vsPass
303
333
  }), " Success"));
@@ -350,10 +380,5 @@ class CustomColumnBuilder extends Component {
350
380
  }
351
381
  }
352
382
  _defineProperty(CustomColumnBuilder, "SUCCESS_SHOW_DURATION", 750);
353
- _defineProperty(CustomColumnBuilder, "defaultProps", {
354
- customColumns: [],
355
- onSave: () => undefined,
356
- onCancel: () => undefined
357
- });
358
383
  export default CustomColumnBuilder;
359
384
  //# sourceMappingURL=CustomColumnBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","undefined"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\ninterface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static defaultProps = {\n customColumns: [],\n onSave: (): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll(`.btn-drag-handle`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelectorAll(`.btn-add-column`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </Button>\n );\n }\n\n render(): ReactElement {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\n Add Another Column\n </Button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <Button kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\n Cancel\n </Button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","DbNameValidator","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","querySelector","nextFocusIndex","onSave","originalCustomColumns","forEach","renderInputs","nameCount","Map","set","get","isDuplicate","renderSaveButton","saveText","areNamesValid","every","isValidColumnName","filteredNames","filter","areNamesUnique","Set","size","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport { DbNameValidator } from '@deephaven/utils';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\nexport interface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll('.btn-drag-handle')[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelector(\n '.btn-add-column'\n ) as HTMLButtonElement)?.focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave, customColumns: originalCustomColumns } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({\n // If both are 0, then moving from no custom to no custom. The parent won't re-render to cancel the loading state\n isCustomColumnApplying:\n customColumns.length > 0 || originalCustomColumns.length > 0,\n });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n const nameCount = new Map();\n inputs.forEach(({ name }) =>\n nameCount.set(name, (nameCount.get(name) ?? 0) + 1)\n );\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n const isDuplicate = (nameCount.get(name) ?? 0) > 1;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n isDuplicate={isDuplicate}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n const areNamesValid = inputs.every(\n ({ name }) => name === '' || DbNameValidator.isValidColumnName(name)\n );\n const filteredNames = inputs\n .filter(({ name }) => name !== '')\n .map(({ name }) => name);\n const areNamesUnique = new Set(filteredNames).size === filteredNames.length;\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={\n isSuccessShowing ||\n isCustomColumnApplying ||\n !areNamesValid ||\n !areNamesUnique\n }\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </Button>\n );\n }\n\n render(): JSX.Element {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\n Add Another Column\n </Button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <Button kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\n Cancel\n </Button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"mappings":";;;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAsB,OAAO;AACtD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,SAAS;AAC7B,OAAOC,OAAO,MAAM,aAAa;AACjC,SAASC,eAAe,EAAEC,SAAS,QAAoB,qBAAqB;AAC5E,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,EAAEC,SAAS,EAAEC,cAAc,QAAQ,uBAAuB;AACzE,SAASC,sBAAsB,EAAEC,SAAS,EAAEC,MAAM,QAAQ,kBAAkB;AAC5E,SAASC,eAAe,QAAQ,kBAAkB;AAAC,OAC5CC,iBAAiB;AAAA;AAAA,OAEjBC,aAAa;AAuBpB,MAAMC,mBAAmB,SAAShB,SAAS,CAGzC;EAGA,OAAOiB,6BAA6B,GAAW;IAC7C,OAAOf,OAAO,CAACgB,QAAQ,EAAE;EAC3B;EAEA,OAAOC,uBAAuB,GAAU;IACtC,OAAO;MACLC,QAAQ,EAAElB,OAAO,CAACgB,QAAQ,EAAE;MAC5BG,IAAI,EAAE,EAAE;MACRC,OAAO,EAAE;IACX,CAAC;EACH;EAEAC,WAAW,CAACC,KAA+B,EAAE;IAC3C,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA,kCAyCJrB,OAAO,CAAC,CAACsB,MAAe,EAAEC,GAAW,KAC9CD,MAAM,CAACE,IAAI,CAACC,KAAK,IAAIA,KAAK,CAACR,QAAQ,KAAKM,GAAG,CAAC,CAC7C;IAAA,uCAEevB,OAAO,CAAC,CAACsB,MAAe,EAAEC,GAAW,KACnDD,MAAM,CAACI,SAAS,CAACD,KAAK,IAAIA,KAAK,CAACR,QAAQ,KAAKM,GAAG,CAAC,CAClD;IA7CC,IAAI,CAACI,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACD,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACE,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACG,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACI,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC1E,IAAI,CAACK,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACL,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACM,aAAa,GAAG,IAAI,CAACA,aAAa,CAACN,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACO,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACP,IAAI,CAAC,IAAI,CAAC;IAE5D,IAAI,CAACQ,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAACR,IAAI,CAAC,IAAI,CAAC;IAE1E,IAAI,CAACS,KAAK,GAAG;MACXf,MAAM,EAAE,EAAE;MACVgB,sBAAsB,EAAE,KAAK;MAC7BC,YAAY,EAAE,IAAI;MAClBC,gBAAgB,EAAE,KAAK;MACvBC,gBAAgB,EAAE;IACpB,CAAC;IACD,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,kBAAkB,GAAG,IAAI;EAChC;EAEAC,iBAAiB,GAAS;IACxB,IAAM;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACxB,KAAK;IACpC,IAAI,CAACyB,kBAAkB,CAACD,aAAa,CAAC;IACtC,IAAI,CAACE,cAAc,EAAE;EACvB;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACC,aAAa,EAAE;IACpB,IAAI,IAAI,CAACN,kBAAkB,EAAE;MAC3BO,YAAY,CAAC,IAAI,CAACP,kBAAkB,CAAC;IACvC;EACF;EAcAQ,iBAAiB,GAAS;IACxB,IAAI,CAACC,QAAQ,CAAC;MAAEb,YAAY,EAAE;IAAK,CAAC,CAAC;EACvC;EAEAQ,cAAc,GAAS;IACrB,IAAM;MAAEM;IAAM,CAAC,GAAG,IAAI,CAAChC,KAAK;IAC5BgC,KAAK,CAACC,gBAAgB,CACpB1C,aAAa,CAAC2C,KAAK,CAACC,eAAe,EACnC,IAAI,CAACxB,yBAAyB,CAC/B;IACDqB,KAAK,CAACC,gBAAgB,CACpB1C,aAAa,CAAC2C,KAAK,CAACE,OAAO,EAC3B,IAAI,CAACzB,yBAAyB,CAC/B;IACDqB,KAAK,CAACC,gBAAgB,CACpB1C,aAAa,CAAC2C,KAAK,CAACG,cAAc,EAClC,IAAI,CAACzB,mBAAmB,CACzB;EACH;EAEAgB,aAAa,GAAS;IACpB,IAAM;MAAEI;IAAM,CAAC,GAAG,IAAI,CAAChC,KAAK;IAC5BgC,KAAK,CAACM,mBAAmB,CACvB/C,aAAa,CAAC2C,KAAK,CAACC,eAAe,EACnC,IAAI,CAACxB,yBAAyB,CAC/B;IACDqB,KAAK,CAACM,mBAAmB,CACvB/C,aAAa,CAAC2C,KAAK,CAACE,OAAO,EAC3B,IAAI,CAACzB,yBAAyB,CAC/B;IACDqB,KAAK,CAACM,mBAAmB,CACvB/C,aAAa,CAAC2C,KAAK,CAACG,cAAc,EAClC,IAAI,CAACzB,mBAAmB,CACzB;EACH;EAEAa,kBAAkB,CAACD,aAAuB,EAAQ;IAChD,IAAIA,aAAa,CAACe,MAAM,GAAG,CAAC,EAAE;MAC5B,IAAMC,kBAAkB,GAAGhB,aAAa,CAACiB,GAAG,CAACC,YAAY,IAAI;QAC3D,IAAMtC,KAAK,GAAGsC,YAAY,CAACC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,OAAO;UACL/C,QAAQ,EAAEJ,mBAAmB,CAACC,6BAA6B,EAAE;UAC7DI,IAAI,EAAEO,KAAK,CAAC,CAAC,CAAC;UACdN,OAAO,EAAEM,KAAK,CAAC,CAAC;QAClB,CAAC;MACH,CAAC,CAAC;MACF,IAAI,CAAC2B,QAAQ,CAAC;QAAE9B,MAAM,EAAEuC;MAAmB,CAAC,CAAC;IAC/C,CAAC,MAAM;MACL,IAAI,CAACT,QAAQ,CAAC;QACZ9B,MAAM,EAAE,CAACT,mBAAmB,CAACG,uBAAuB,EAAE;MACxD,CAAC,CAAC;IACJ;EACF;EAEAW,oBAAoB,GAAS;IAC3B,IAAM;MAAEL;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B,IAAM4B,SAAS,GAAG,CAAC,GAAG3C,MAAM,CAAC;IAC7B2C,SAAS,CAACC,IAAI,CAACrD,mBAAmB,CAACG,uBAAuB,EAAE,CAAC;IAC7D,IAAI,CAACoC,QAAQ,CAAC;MACZ9B,MAAM,EAAE2C;IACV,CAAC,CAAC;EACJ;EAEAlC,kBAAkB,CAACd,QAAgB,EAAQ;IACzC,IAAM;MAAEK;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B,IAAM8B,iBAAiB,GAAG,IAAI,CAACC,aAAa,CAAC9C,MAAM,EAAEL,QAAQ,CAAC;IAC9D,IAAMgD,SAAS,GAAG,CAAC,GAAG3C,MAAM,CAAC;IAC7B2C,SAAS,CAACI,MAAM,CAACF,iBAAiB,EAAE,CAAC,CAAC;IACtC,IAAIF,SAAS,CAACL,MAAM,KAAK,CAAC,EAAE;MAC1BK,SAAS,CAACC,IAAI,CAACrD,mBAAmB,CAACG,uBAAuB,EAAE,CAAC;IAC/D;IACA,IAAI,CAACoC,QAAQ,CAAC;MACZ9B,MAAM,EAAE2C;IACV,CAAC,CAAC;EACJ;EAEAnC,iBAAiB,CACfb,QAAgB,EAChBqD,IAAqB,EACrBC,KAAa,EACP;IACN,IAAM;MAAEjD;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B,IAAM8B,iBAAiB,GAAG,IAAI,CAACC,aAAa,CAAC9C,MAAM,EAAEL,QAAQ,CAAC;IAC9D,IAAMuD,iBAAiB,GAAG,IAAI,CAACC,QAAQ,CAACnD,MAAM,EAAEL,QAAQ,CAAC;IAEzD,IAAMyD,cAAc,qBAAQF,iBAAiB,CAAW;IACxDE,cAAc,CAACJ,IAAI,CAAC,GAAGC,KAAK;IAE5B,IAAMN,SAAS,GAAG,CAAC,GAAG3C,MAAM,CAAC;IAC7B2C,SAAS,CAACI,MAAM,CAACF,iBAAiB,EAAE,CAAC,EAAEO,cAAc,CAAC;IACtD,IAAI,CAACtB,QAAQ,CAAC;MACZ9B,MAAM,EAAE2C;IACV,CAAC,CAAC;EACJ;EAEAjC,yBAAyB,GAAS;IAChC,IAAM;MAAEM;IAAuB,CAAC,GAAG,IAAI,CAACD,KAAK;IAC7C,IAAI,CAACC,sBAAsB,EAAE;MAC3B;IACF;IACA,IAAI,CAACc,QAAQ,CACX;MAAEd,sBAAsB,EAAE,KAAK;MAAEG,gBAAgB,EAAE;IAAK,CAAC,EACzD,MAAM;MACJ,IAAI,CAACE,kBAAkB,GAAGgC,UAAU,CAClC,MAAM,IAAI,CAACvB,QAAQ,CAAC;QAAEX,gBAAgB,EAAE;MAAM,CAAC,CAAC,EAChD5B,mBAAmB,CAAC+D,qBAAqB,CAC1C;IACH,CAAC,CACF;EACH;EAEA3C,mBAAmB,CAAC4C,KAAY,EAAQ;IACtC,IAAMC,WAAW,GAAGD,KAAoB;IACxC,IAAM;MAAEvC;IAAuB,CAAC,GAAG,IAAI,CAACD,KAAK;IAC7C,IAAI,CAACC,sBAAsB,EAAE;MAC3B;IACF;IAEA,IAAI,CAACc,QAAQ,CAAC;MACZd,sBAAsB,EAAE,KAAK;MAC7BC,YAAY,eACV,uDACE,4CACE,oBAAC,eAAe;QAAC,IAAI,EAAE/B;MAAU,EAAG,oCACtC,CAAI,eACJ;QAAK,SAAS,EAAC;MAAW,GACvBsE,WAAW,CAACC,MAAM,CAACxC,YAAY,eAChC,+BAAM,wBACc,EAAC,GAAG,EACvByC,IAAI,CAACC,SAAS,CAACH,WAAW,CAACC,MAAM,CAACG,aAAa,CAAC,CAC7C,CAET;MACD1C,gBAAgB,EAAE;IACpB,CAAC,CAAC;EACJ;EAEAN,aAAa,CAACiD,MAAkB,EAAQ;IACtC9E,SAAS,CAAC+E,YAAY,EAAE;;IAExB;IACA,IAAI,CAACD,MAAM,CAACE,WAAW,EAAE;MACvB;IACF;IACA,IAAM;MAAE/D;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B,IAAMiD,WAAW,GAAGH,MAAM,CAACI,MAAM,CAACC,KAAK;IACvC,IAAMC,gBAAgB,GAAGN,MAAM,CAACE,WAAW,CAACG,KAAK;IACjD,IAAMvB,SAAS,GAAG,CAAC,GAAG3C,MAAM,CAAC;IAC7B,IAAMoE,WAAW,GAAGpE,MAAM,CAACgE,WAAW,CAAC;IAEvCrB,SAAS,CAACI,MAAM,CAACiB,WAAW,EAAE,CAAC,CAAC;IAChCrB,SAAS,CAACI,MAAM,CAACoB,gBAAgB,EAAE,CAAC,EAAEC,WAAW,CAAC;IAElD,IAAI,CAACtC,QAAQ,CAAC;MAAE9B,MAAM,EAAE2C;IAAU,CAAC,CAAC;EACtC;EAEA7B,yBAAyB,CAACuD,gBAAwB,EAAEC,QAAiB,EAAQ;IAC3E,IAAM;MAAEtE;IAAO,CAAC,GAAG,IAAI,CAACe,KAAK;IAC7B;IACA,IAAIuD,QAAQ,EAAE;MAAA;MACZ,oBAAC,IAAI,CAAClD,SAAS,oDAAd,gBAAgBmD,gBAAgB,CAAC,kBAAkB,CAAC,CACnDF,gBAAgB,CACjB,EAAuBG,KAAK,EAAE;MAC/B;IACF;IACA,IAAIH,gBAAgB,KAAKrE,MAAM,CAACsC,MAAM,GAAG,CAAC,EAAE;MAAA;MAC1C,oBAAC,IAAI,CAAClB,SAAS,8EAAd,iBAAgBqD,aAAa,CAC5B,iBAAiB,CAClB,0DAFD,sBAEyBD,KAAK,EAAE;IAClC,CAAC,MAAM;MAAA;MACL;MACA,IAAME,cAAc,GAAGL,gBAAgB,GAAG,CAAC;MAC3C,qBAAC,IAAI,CAACjD,SAAS,qDAAd,iBAAgBmD,gBAAgB,wBAAwB,CACvDG,cAAc,CACf,EAAsBF,KAAK,EAAE;IAChC;EACF;EAEAjE,eAAe,GAAS;IACtB,IAAM;MAAEoE,MAAM;MAAEpD,aAAa,EAAEqD;IAAsB,CAAC,GAAG,IAAI,CAAC7E,KAAK;IACnE,IAAM;MAAEC,MAAM;MAAEgB;IAAuB,CAAC,GAAG,IAAI,CAACD,KAAK;IACrD,IAAIC,sBAAsB,EAAE;MAC1B;IACF;IACA,IAAMO,aAAa,GAAG,EAAc;IACpCvB,MAAM,CAAC6E,OAAO,CAAC1E,KAAK,IAAI;MACtB,IAAM;QAAEP,IAAI;QAAEC;MAAQ,CAAC,GAAGM,KAAK;MAC/B,IAAIP,IAAI,IAAIC,OAAO,EAAE;QACnB0B,aAAa,CAACqB,IAAI,WAAIhD,IAAI,cAAIC,OAAO,EAAG;MAC1C;IACF,CAAC,CAAC;IACF,IAAI,CAACgC,iBAAiB,EAAE;IACxB,IAAI,CAACC,QAAQ,CAAC;MACZ;MACAd,sBAAsB,EACpBO,aAAa,CAACe,MAAM,GAAG,CAAC,IAAIsC,qBAAqB,CAACtC,MAAM,GAAG;IAC/D,CAAC,CAAC;IACFqC,MAAM,CAACpD,aAAa,CAAC;EACvB;EAEAV,kBAAkB,GAAS;IACzB,IAAI,CAACiB,QAAQ,CAAC,QAA0B;MAAA,IAAzB;QAAEZ;MAAiB,CAAC;MACjC,IAAIA,gBAAgB,EAAE;QACpB,OAAO;UAAEA,gBAAgB,EAAE;QAAM,CAAC;MACpC;MACA,OAAO,IAAI;IACb,CAAC,CAAC;EACJ;EAEA4D,YAAY,GAAmB;IAC7B,IAAM;MAAE9E,MAAM;MAAEkB;IAAiB,CAAC,GAAG,IAAI,CAACH,KAAK;IAE/C,IAAMgE,SAAS,GAAG,IAAIC,GAAG,EAAE;IAC3BhF,MAAM,CAAC6E,OAAO,CAAC;MAAA;MAAA,IAAC;QAAEjF;MAAK,CAAC;MAAA,OACtBmF,SAAS,CAACE,GAAG,CAACrF,IAAI,EAAE,mBAACmF,SAAS,CAACG,GAAG,CAACtF,IAAI,CAAC,2DAAI,CAAC,IAAI,CAAC,CAAC;IAAA,EACpD;IAED,OAAOI,MAAM,CAACwC,GAAG,CAAC,CAACrC,KAAK,EAAE+D,KAAK,KAAK;MAAA;MAClC,IAAM;QAAEvE,QAAQ;QAAEC,IAAI;QAAEC;MAAQ,CAAC,GAAGM,KAAK;MACzC,IAAMgF,WAAW,GAAG,oBAACJ,SAAS,CAACG,GAAG,CAACtF,IAAI,CAAC,6DAAI,CAAC,IAAI,CAAC;MAClD,oBACE,oBAAC,iBAAiB;QAChB,GAAG,EAAED,QAAS;QACd,UAAU,EAAEuE,KAAM;QAClB,QAAQ,EAAEvE,QAAS;QACnB,IAAI,EAAEC,IAAK;QACX,OAAO,EAAEC,OAAQ;QACjB,QAAQ,EAAE,IAAI,CAACW,iBAAkB;QACjC,cAAc,EAAE,IAAI,CAACC,kBAAmB;QACxC,aAAa,EAAE,IAAI,CAACK,yBAA0B;QAC9C,OAAO,EAAEI,gBAAiB;QAC1B,WAAW,EAAEiE;MAAY,EACzB;IAEN,CAAC,CAAC;EACJ;EAEAC,gBAAgB,GAAiB;IAC/B,IAAM;MAAEpF,MAAM;MAAEgB,sBAAsB;MAAEG;IAAiB,CAAC,GAAG,IAAI,CAACJ,KAAK;IACvE,IAAMsE,QAAQ,GAAGrF,MAAM,CAACsC,MAAM,GAAG,CAAC,GAAG,cAAc,GAAG,aAAa;IACnE,IAAMgD,aAAa,GAAGtF,MAAM,CAACuF,KAAK,CAChC;MAAA,IAAC;QAAE3F;MAAK,CAAC;MAAA,OAAKA,IAAI,KAAK,EAAE,IAAIR,eAAe,CAACoG,iBAAiB,CAAC5F,IAAI,CAAC;IAAA,EACrE;IACD,IAAM6F,aAAa,GAAGzF,MAAM,CACzB0F,MAAM,CAAC;MAAA,IAAC;QAAE9F;MAAK,CAAC;MAAA,OAAKA,IAAI,KAAK,EAAE;IAAA,EAAC,CACjC4C,GAAG,CAAC;MAAA,IAAC;QAAE5C;MAAK,CAAC;MAAA,OAAKA,IAAI;IAAA,EAAC;IAC1B,IAAM+F,cAAc,GAAG,IAAIC,GAAG,CAACH,aAAa,CAAC,CAACI,IAAI,KAAKJ,aAAa,CAACnD,MAAM;IAE3E,oBACE,oBAAC,MAAM;MACL,IAAI,EAAEnB,gBAAgB,GAAG,SAAS,GAAG,SAAU;MAC/C,SAAS,EAAE3C,UAAU,CAAC,WAAW,EAAE;QACjC,aAAa,EAAEwC;MACjB,CAAC,CAAE;MACH,QAAQ,EACNG,gBAAgB,IAChBH,sBAAsB,IACtB,CAACsE,aAAa,IACd,CAACK,cACF;MACD,OAAO,EAAE,IAAI,CAACpF;IAAgB,GAE7BS,sBAAsB,iBACrB,+CACE,oBAAC,cAAc,OAAG,eAClB;MAAM,SAAS,EAAC;IAAoB,GAAC,UAAQ,CAAO,CAEvD,EACA,CAACG,gBAAgB,IAAI,CAACH,sBAAsB,IAAIqE,QAAQ,EACxDlE,gBAAgB,iBACf,uDACE,oBAAC,eAAe;MAAC,IAAI,EAAEhC;IAAO,EAAG,YACnC,CACD,CACM;EAEb;EAEA2G,MAAM,GAAgB;IACpB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAChG,KAAK;IAC/B,IAAM;MAAEkB;IAAa,CAAC,GAAG,IAAI,CAACF,KAAK;IACnC,oBACE;MACE,IAAI,EAAC,cAAc;MACnB,SAAS,EAAC,iCAAiC;MAC3C,GAAG,EAAEK,SAAS,IAAI;QAChB,IAAI,CAACA,SAAS,GAAGA,SAAS;MAC5B,CAAE;MACF,OAAO,EAAE,IAAI,CAACP,kBAAmB;MACjC,OAAO,EAAE,IAAI,CAACA;IAAmB,gBAEjC,+BAAM,eACN,oBAAC,eAAe;MACd,WAAW,EAAE9B,SAAS,CAACiH,aAAc;MACrC,SAAS,EAAE,IAAI,CAACpF;IAAc,gBAE9B,oBAAC,SAAS;MAAC,WAAW,EAAC;IAA0B,GAC9C,CAACqF,QAAQ,EAAEC,QAAQ,kBAClB;MACE,GAAG,EAAED,QAAQ,CAACE;MACd;IAAA,GACIF,QAAQ,CAACG,cAAc;MAC3B,SAAS,EAAE5H,UAAU,CAAC,qBAAqB,EAAE;QAC3C6H,QAAQ,EAAEH,QAAQ,CAACI;MACrB,CAAC;IAAE,IAEF,IAAI,CAACxB,YAAY,EAAE,EACnBmB,QAAQ,CAACM,WAAW,CAExB,CACS,CACI,eAElB;MAAK,SAAS,EAAC;IAAW,gBACxB,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,gBAAgB;MAC1B,OAAO,EAAE,IAAI,CAAClG,oBAAqB;MACnC,IAAI,EAAEpB;IAAuB,GAC9B,oBAED,CAAS,CACL,eAEN;MAAK,SAAS,EAAC;IAA8B,GAC1CgC,YAAY,iBAAI;MAAK,SAAS,EAAC;IAAe,GAAEA,YAAY,CAAO,eAEpE;MAAK,SAAS,EAAC;IAA4B,gBACzC,oBAAC,MAAM;MAAC,IAAI,EAAC,WAAW;MAAC,SAAS,EAAC,MAAM;MAAC,OAAO,EAAE8E;IAAS,GAAC,QAE7D,CAAS,EACR,IAAI,CAACX,gBAAgB,EAAE,CACpB,CACF,CACF;EAEV;AACF;AAAC,gBArZK7F,mBAAmB,2BAIQ,GAAG;AAmZpC,eAAeA,mBAAmB"}
@@ -1,6 +1,6 @@
1
- import { PureComponent, ReactElement } from 'react';
1
+ /// <reference types="react" />
2
2
  import { CustomColumnKey } from './CustomColumnBuilder';
3
- interface CustomColumnInputProps {
3
+ export interface CustomColumnInputProps {
4
4
  eventKey: string;
5
5
  inputIndex: number;
6
6
  name: string;
@@ -9,24 +9,8 @@ interface CustomColumnInputProps {
9
9
  onDeleteColumn: (eventKey: string) => void;
10
10
  onTabInEditor: (editorIndex: number, shiftKey: boolean) => void;
11
11
  invalid: boolean;
12
+ isDuplicate: boolean;
12
13
  }
13
- declare class CustomColumnInput extends PureComponent<CustomColumnInputProps, Record<string, never>> {
14
- static INPUT_TYPE: {
15
- NAME: string;
16
- FORMULA: string;
17
- };
18
- static defaultProps: {
19
- name: string;
20
- inputIndex: number;
21
- formula: string;
22
- onChange: () => void;
23
- onDeleteColumn: () => void;
24
- onTabInEditor: () => void;
25
- invalid: boolean;
26
- };
27
- constructor(props: CustomColumnInputProps);
28
- handleFormulaEditorContentChanged(formulaValue?: string): void;
29
- render(): ReactElement;
30
- }
14
+ declare function CustomColumnInput({ eventKey, name, inputIndex, formula, onChange, onDeleteColumn, onTabInEditor, invalid, isDuplicate, }: CustomColumnInputProps): JSX.Element;
31
15
  export default CustomColumnInput;
32
16
  //# sourceMappingURL=CustomColumnInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnInput.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnInput.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAO3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CACR,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,OAAO,EAAE,OAAO,CAAC;CAClB;AACD,cAAM,iBAAkB,SAAQ,aAAa,CAC3C,sBAAsB,EACtB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,UAAU;;;MAGf;IAEF,MAAM,CAAC,YAAY;;;;wBAIH,IAAI;8BACE,IAAI;6BACL,IAAI;;MAEvB;gBAEU,KAAK,EAAE,sBAAsB;IAOzC,iCAAiC,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAY9D,MAAM,IAAI,YAAY;CA6EvB;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"CustomColumnInput.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnInput.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CACR,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAWD,iBAAS,iBAAiB,CAAC,EACzB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACP,QAAQ,EACR,cAAc,EACd,aAAa,EACb,OAAO,EACP,WAAW,GACZ,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAgFtC;AAED,eAAe,iBAAiB,CAAC"}
@@ -1,101 +1,90 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
4
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
5
- import React, { PureComponent } from 'react';
2
+ import React, { useCallback } from 'react';
6
3
  import classNames from 'classnames';
7
4
  import { Draggable } from 'react-beautiful-dnd';
8
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
- import { Button, Tooltip } from '@deephaven/components';
5
+ import { Button } from '@deephaven/components';
10
6
  import { vsTrash, vsGripper } from '@deephaven/icons';
7
+ import { DbNameValidator } from '@deephaven/utils';
11
8
  import InputEditor from "./InputEditor.js";
12
- class CustomColumnInput extends PureComponent {
13
- constructor(props) {
14
- super(props);
15
- this.handleFormulaEditorContentChanged = this.handleFormulaEditorContentChanged.bind(this);
16
- }
17
- handleFormulaEditorContentChanged(formulaValue) {
18
- var {
19
- onChange,
20
- eventKey
21
- } = this.props;
22
- if (formulaValue !== undefined && formulaValue !== '') {
23
- formulaValue.replace(/(\r\n|\n|\r)/gm, ''); // remove line break
24
- onChange(eventKey, CustomColumnInput.INPUT_TYPE.FORMULA, formulaValue);
25
- }
26
- }
27
- render() {
28
- var {
29
- eventKey,
30
- name,
31
- formula,
32
- onChange: _onChange,
33
- onDeleteColumn,
34
- inputIndex,
35
- onTabInEditor,
36
- invalid
37
- } = this.props;
38
- return /*#__PURE__*/React.createElement(Draggable, {
39
- draggableId: eventKey,
40
- index: inputIndex,
41
- disableInteractiveElementBlocking: true
42
- }, (provided, snapshot) => /*#__PURE__*/React.createElement("div", _extends({
43
- className: classNames('draggable-container', {
44
- dragging: snapshot.isDragging
45
- }),
46
- ref: provided.innerRef
47
- // eslint-disable-next-line react/jsx-props-no-spreading
48
- }, provided.draggableProps), /*#__PURE__*/React.createElement("div", {
49
- className: "custom-column-input-container"
50
- }, /*#__PURE__*/React.createElement("div", {
51
- className: "d-flex flex-row pb-3 custom-column-name"
52
- }, /*#__PURE__*/React.createElement("input", {
53
- className: classNames('form-control custom-column-input', {
54
- 'is-invalid': invalid
55
- }),
56
- placeholder: "Column Name",
57
- value: name,
58
- onChange: event => {
59
- _onChange(eventKey, CustomColumnInput.INPUT_TYPE.NAME, event.target.value);
60
- }
61
- }), /*#__PURE__*/React.createElement(Button, {
62
- kind: "ghost",
63
- className: "ml-1 px-2",
64
- onClick: () => {
65
- onDeleteColumn(eventKey);
66
- },
67
- icon: vsTrash,
68
- tooltip: "Delete custom column"
69
- }), /*#__PURE__*/React.createElement("button", _extends({
70
- type: "button",
71
- className: "btn btn-link btn-link-icon px-2 btn-drag-handle"
72
- // eslint-disable-next-line react/jsx-props-no-spreading
73
- }, provided.dragHandleProps), /*#__PURE__*/React.createElement(Tooltip, null, "Drag column to re-order"), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
74
- icon: vsGripper
75
- }))), /*#__PURE__*/React.createElement(InputEditor, {
76
- editorSettings: {
77
- language: 'deephavenDb'
78
- },
79
- editorIndex: inputIndex,
80
- value: formula,
81
- onContentChanged: this.handleFormulaEditorContentChanged,
82
- onTab: onTabInEditor,
83
- invalid: invalid
84
- })), /*#__PURE__*/React.createElement("hr", null)));
85
- }
86
- }
87
- _defineProperty(CustomColumnInput, "INPUT_TYPE", {
9
+ var INPUT_TYPE = Object.freeze({
88
10
  NAME: 'name',
89
11
  FORMULA: 'formula'
90
12
  });
91
- _defineProperty(CustomColumnInput, "defaultProps", {
92
- name: '',
93
- inputIndex: 0,
94
- formula: '',
95
- onChange: () => undefined,
96
- onDeleteColumn: () => undefined,
97
- onTabInEditor: () => undefined,
98
- invalid: false
99
- });
13
+ var EMPTY_FN = () => {
14
+ // no-op
15
+ };
16
+ function CustomColumnInput(_ref) {
17
+ var {
18
+ eventKey,
19
+ name,
20
+ inputIndex,
21
+ formula,
22
+ onChange: _onChange,
23
+ onDeleteColumn,
24
+ onTabInEditor,
25
+ invalid,
26
+ isDuplicate
27
+ } = _ref;
28
+ var isValidName = name === '' || DbNameValidator.isValidColumnName(name);
29
+ var handleFormulaEditorContentChanged = useCallback(formulaValue => {
30
+ if (formulaValue !== undefined) {
31
+ formulaValue.replace(/(\r\n|\n|\r)/gm, ''); // remove line break
32
+ _onChange(eventKey, INPUT_TYPE.FORMULA, formulaValue);
33
+ }
34
+ }, [_onChange, eventKey]);
35
+ return /*#__PURE__*/React.createElement(Draggable, {
36
+ draggableId: eventKey,
37
+ index: inputIndex,
38
+ disableInteractiveElementBlocking: true
39
+ }, (provided, snapshot) => /*#__PURE__*/React.createElement("div", _extends({
40
+ className: classNames('draggable-container', {
41
+ dragging: snapshot.isDragging
42
+ }),
43
+ ref: provided.innerRef
44
+ // eslint-disable-next-line react/jsx-props-no-spreading
45
+ }, provided.draggableProps), /*#__PURE__*/React.createElement("div", {
46
+ className: "custom-column-input-container"
47
+ }, /*#__PURE__*/React.createElement("div", {
48
+ className: "pb-3"
49
+ }, /*#__PURE__*/React.createElement("div", {
50
+ className: "d-flex flex-row custom-column-name"
51
+ }, /*#__PURE__*/React.createElement("input", {
52
+ className: classNames('form-control custom-column-input', {
53
+ 'is-invalid': invalid || !isValidName || isDuplicate
54
+ }),
55
+ placeholder: "Column Name",
56
+ value: name,
57
+ onChange: event => {
58
+ _onChange(eventKey, INPUT_TYPE.NAME, event.target.value);
59
+ }
60
+ }), /*#__PURE__*/React.createElement(Button, {
61
+ kind: "ghost",
62
+ className: "ml-1 px-2",
63
+ onClick: () => {
64
+ onDeleteColumn(eventKey);
65
+ },
66
+ icon: vsTrash,
67
+ tooltip: "Delete custom column"
68
+ }), /*#__PURE__*/React.createElement(Button, _extends({
69
+ kind: "ghost",
70
+ className: "btn-drag-handle",
71
+ onClick: EMPTY_FN
72
+ // eslint-disable-next-line react/jsx-props-no-spreading
73
+ }, provided.dragHandleProps, {
74
+ icon: vsGripper,
75
+ tooltip: "Drag column to re-order"
76
+ }))), (!isValidName || isDuplicate) && /*#__PURE__*/React.createElement("p", {
77
+ className: "validate-label-error text-danger mb-0 mt-2 pl-1"
78
+ }, !isValidName ? 'Invalid name' : 'Duplicate name')), /*#__PURE__*/React.createElement(InputEditor, {
79
+ editorSettings: {
80
+ language: 'deephavenDb'
81
+ },
82
+ editorIndex: inputIndex,
83
+ value: formula,
84
+ onContentChanged: handleFormulaEditorContentChanged,
85
+ onTab: onTabInEditor,
86
+ invalid: invalid
87
+ })), /*#__PURE__*/React.createElement("hr", null)));
88
+ }
100
89
  export default CustomColumnInput;
101
90
  //# sourceMappingURL=CustomColumnInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnInput.js","names":["React","PureComponent","classNames","Draggable","FontAwesomeIcon","Button","Tooltip","vsTrash","vsGripper","InputEditor","CustomColumnInput","constructor","props","handleFormulaEditorContentChanged","bind","formulaValue","onChange","eventKey","undefined","replace","INPUT_TYPE","FORMULA","render","name","formula","onDeleteColumn","inputIndex","onTabInEditor","invalid","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","NAME","target","value","dragHandleProps","language"],"sources":["../../src/sidebar/CustomColumnInput.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, Tooltip } from '@deephaven/components';\nimport { vsTrash, vsGripper } from '@deephaven/icons';\nimport InputEditor from './InputEditor';\nimport { CustomColumnKey } from './CustomColumnBuilder';\n\ninterface CustomColumnInputProps {\n eventKey: string;\n inputIndex: number;\n name: string;\n formula: string;\n onChange: (\n eventKey: string,\n inputType: CustomColumnKey,\n value: string\n ) => void;\n onDeleteColumn: (eventKey: string) => void;\n onTabInEditor: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n}\nclass CustomColumnInput extends PureComponent<\n CustomColumnInputProps,\n Record<string, never>\n> {\n static INPUT_TYPE = {\n NAME: 'name',\n FORMULA: 'formula',\n };\n\n static defaultProps = {\n name: '',\n inputIndex: 0,\n formula: '',\n onChange: (): void => undefined,\n onDeleteColumn: (): void => undefined,\n onTabInEditor: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: CustomColumnInputProps) {\n super(props);\n this.handleFormulaEditorContentChanged = this.handleFormulaEditorContentChanged.bind(\n this\n );\n }\n\n handleFormulaEditorContentChanged(formulaValue?: string): void {\n const { onChange, eventKey } = this.props;\n if (formulaValue !== undefined && formulaValue !== '') {\n formulaValue.replace(/(\\r\\n|\\n|\\r)/gm, ''); // remove line break\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.FORMULA as CustomColumnKey,\n formulaValue\n );\n }\n }\n\n render(): ReactElement {\n const {\n eventKey,\n name,\n formula,\n onChange,\n onDeleteColumn,\n inputIndex,\n onTabInEditor,\n invalid,\n } = this.props;\n return (\n <Draggable\n draggableId={eventKey}\n index={inputIndex}\n disableInteractiveElementBlocking\n >\n {(provided, snapshot) => (\n <div\n className={classNames('draggable-container', {\n dragging: snapshot.isDragging,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <div className=\"custom-column-input-container\">\n <div className=\"d-flex flex-row pb-3 custom-column-name\">\n <input\n className={classNames('form-control custom-column-input', {\n 'is-invalid': invalid,\n })}\n placeholder=\"Column Name\"\n value={name}\n onChange={event => {\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.NAME as CustomColumnKey,\n event.target.value\n );\n }}\n />\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n onDeleteColumn(eventKey);\n }}\n icon={vsTrash}\n tooltip=\"Delete custom column\"\n />\n\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2 btn-drag-handle\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <Tooltip>Drag column to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </button>\n </div>\n <InputEditor\n editorSettings={{ language: 'deephavenDb' }}\n editorIndex={inputIndex}\n value={formula}\n onContentChanged={this.handleFormulaEditorContentChanged}\n onTab={onTabInEditor}\n invalid={invalid}\n />\n </div>\n <hr />\n </div>\n )}\n </Draggable>\n );\n }\n}\n\nexport default CustomColumnInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CustomColumnInput.js","names":["React","useCallback","classNames","Draggable","Button","vsTrash","vsGripper","DbNameValidator","InputEditor","INPUT_TYPE","Object","freeze","NAME","FORMULA","EMPTY_FN","CustomColumnInput","eventKey","name","inputIndex","formula","onChange","onDeleteColumn","onTabInEditor","invalid","isDuplicate","isValidName","isValidColumnName","handleFormulaEditorContentChanged","formulaValue","undefined","replace","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","target","value","dragHandleProps","language"],"sources":["../../src/sidebar/CustomColumnInput.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { Button } from '@deephaven/components';\nimport { vsTrash, vsGripper } from '@deephaven/icons';\nimport { DbNameValidator } from '@deephaven/utils';\nimport InputEditor from './InputEditor';\nimport { CustomColumnKey } from './CustomColumnBuilder';\n\nexport interface CustomColumnInputProps {\n eventKey: string;\n inputIndex: number;\n name: string;\n formula: string;\n onChange: (\n eventKey: string,\n inputType: CustomColumnKey,\n value: string\n ) => void;\n onDeleteColumn: (eventKey: string) => void;\n onTabInEditor: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n isDuplicate: boolean;\n}\n\nconst INPUT_TYPE = Object.freeze({\n NAME: 'name',\n FORMULA: 'formula',\n});\n\nconst EMPTY_FN = () => {\n // no-op\n};\n\nfunction CustomColumnInput({\n eventKey,\n name,\n inputIndex,\n formula,\n onChange,\n onDeleteColumn,\n onTabInEditor,\n invalid,\n isDuplicate,\n}: CustomColumnInputProps): JSX.Element {\n const isValidName = name === '' || DbNameValidator.isValidColumnName(name);\n const handleFormulaEditorContentChanged = useCallback(\n (formulaValue?: string) => {\n if (formulaValue !== undefined) {\n formulaValue.replace(/(\\r\\n|\\n|\\r)/gm, ''); // remove line break\n onChange(eventKey, INPUT_TYPE.FORMULA, formulaValue);\n }\n },\n [onChange, eventKey]\n );\n\n return (\n <Draggable\n draggableId={eventKey}\n index={inputIndex}\n disableInteractiveElementBlocking\n >\n {(provided, snapshot) => (\n <div\n className={classNames('draggable-container', {\n dragging: snapshot.isDragging,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <div className=\"custom-column-input-container\">\n <div className=\"pb-3\">\n <div className=\"d-flex flex-row custom-column-name\">\n <input\n className={classNames('form-control custom-column-input', {\n 'is-invalid': invalid || !isValidName || isDuplicate,\n })}\n placeholder=\"Column Name\"\n value={name}\n onChange={event => {\n onChange(eventKey, INPUT_TYPE.NAME, event.target.value);\n }}\n />\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n onDeleteColumn(eventKey);\n }}\n icon={vsTrash}\n tooltip=\"Delete custom column\"\n />\n\n <Button\n kind=\"ghost\"\n className=\"btn-drag-handle\"\n onClick={EMPTY_FN}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n icon={vsGripper}\n tooltip=\"Drag column to re-order\"\n />\n </div>\n {(!isValidName || isDuplicate) && (\n <p className=\"validate-label-error text-danger mb-0 mt-2 pl-1\">\n {!isValidName ? 'Invalid name' : 'Duplicate name'}\n </p>\n )}\n </div>\n <InputEditor\n editorSettings={{ language: 'deephavenDb' }}\n editorIndex={inputIndex}\n value={formula}\n onContentChanged={handleFormulaEditorContentChanged}\n onTab={onTabInEditor}\n invalid={invalid}\n />\n </div>\n <hr />\n </div>\n )}\n </Draggable>\n );\n}\n\nexport default CustomColumnInput;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React, { Component, ReactElement } from 'react';
1
+ import { Component, ReactElement } from 'react';
2
2
  import * as monaco from 'monaco-editor';
3
3
  import './InputEditor.scss';
4
4
  interface InputEditorProps {
@@ -36,7 +36,7 @@ export default class InputEditor extends Component<InputEditorProps, InputEditor
36
36
  handleEditorFocus(): void;
37
37
  handleEditorBlur(): void;
38
38
  handleContainerClick(): void;
39
- handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void;
39
+ handleKeyDown(event: monaco.IKeyboardEvent): void;
40
40
  render(): ReactElement;
41
41
  }
42
42
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"InputEditor.d.ts","sourceRoot":"","sources":["../../src/sidebar/InputEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,gBAAgB;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;AACD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS,CAChD,gBAAgB,EAChB,gBAAgB,CACjB;IACC,MAAM,CAAC,YAAY;;gCAEK,IAAI;;;qBAGf,IAAI;;MAEf;gBAEU,KAAK,EAAE,gBAAgB;IAgBnC,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB,IAAI,IAAI;IAI5B,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IAEvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAE7C,UAAU,IAAI,IAAI;IA+ClB,aAAa,IAAI,IAAI;IAKrB,oBAAoB,IAAI,IAAI;IAS5B,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB,IAAI,IAAI;IAYxB,oBAAoB,IAAI,IAAI;IAQ5B,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,IAAI;IAO/D,MAAM,IAAI,YAAY;CAyBvB"}
1
+ {"version":3,"file":"InputEditor.d.ts","sourceRoot":"","sources":["../../src/sidebar/InputEditor.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,gBAAgB;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;AACD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS,CAChD,gBAAgB,EAChB,gBAAgB,CACjB;IACC,MAAM,CAAC,YAAY;;gCAEK,IAAI;;;qBAGf,IAAI;;MAEf;gBAEU,KAAK,EAAE,gBAAgB;IAgBnC,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB,IAAI,IAAI;IAI5B,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IAEvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAE7C,UAAU,IAAI,IAAI;IAkDlB,aAAa,IAAI,IAAI;IAKrB,oBAAoB,IAAI,IAAI;IAS5B,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB,IAAI,IAAI;IASxB,oBAAoB,IAAI,IAAI;IAQ5B,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI;IASjD,MAAM,IAAI,YAAY;CAwBvB"}