@finos/legend-query-builder 2.0.1 → 2.1.1

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 (38) hide show
  1. package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
  2. package/lib/components/QueryBuilderResultPanel.js +6 -7
  3. package/lib/components/QueryBuilderResultPanel.js.map +1 -1
  4. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
  5. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +19 -17
  6. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
  7. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts.map +1 -1
  8. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js +31 -29
  9. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js.map +1 -1
  10. package/lib/index.css +2 -2
  11. package/lib/index.css.map +1 -1
  12. package/lib/package.json +2 -2
  13. package/lib/stores/QueryBuilderResultState.d.ts +7 -3
  14. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
  15. package/lib/stores/QueryBuilderResultState.js +14 -20
  16. package/lib/stores/QueryBuilderResultState.js.map +1 -1
  17. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts +3 -0
  18. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts.map +1 -1
  19. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js.map +1 -1
  20. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts +10 -1
  21. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
  22. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +36 -1
  23. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
  24. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +6 -0
  25. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
  26. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +21 -2
  27. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
  28. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThanEqual.js +4 -4
  29. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThanEqual.js.map +1 -1
  30. package/package.json +9 -9
  31. package/src/components/QueryBuilderResultPanel.tsx +18 -20
  32. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +128 -126
  33. package/src/components/fetch-structure/QueryBuilderTDSWindowPanel.tsx +254 -251
  34. package/src/stores/QueryBuilderResultState.ts +28 -33
  35. package/src/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.ts +5 -0
  36. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +44 -0
  37. package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +28 -0
  38. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThanEqual.ts +4 -4
@@ -24,18 +24,18 @@ import {
24
24
  MenuContent,
25
25
  MenuContentItem,
26
26
  CaretDownIcon,
27
- VerticalDragHandleIcon,
28
27
  ContextMenu,
29
28
  InputWithInlineValidation,
30
29
  SigmaIcon,
31
30
  PanelDropZone,
32
31
  DragPreviewLayer,
33
- PanelEntryDropZonePlaceholder,
34
32
  useDragPreviewLayer,
35
33
  OptionsIcon,
36
34
  PlusIcon,
37
35
  PanelContent,
38
36
  TrashIcon,
37
+ PanelDnDEntry,
38
+ PanelDnDEntryDragHandle,
39
39
  } from '@finos/legend-art';
40
40
  import {
41
41
  type QueryBuilderExplorerTreeDragSource,
@@ -223,8 +223,8 @@ const QueryBuilderDerivationProjectionColumnEditor = observer(
223
223
 
224
224
  const QueryBuilderProjectionColumnEditor = observer(
225
225
  (props: { projectionColumnState: QueryBuilderProjectionColumnState }) => {
226
+ const handleRef = useRef<HTMLDivElement>(null);
226
227
  const ref = useRef<HTMLDivElement>(null);
227
-
228
228
  const [isSelectedFromContextMenu, setIsSelectedFromContextMenu] =
229
229
  useState(false);
230
230
  const onContextMenuOpen = (): void => setIsSelectedFromContextMenu(true);
@@ -275,6 +275,7 @@ const QueryBuilderProjectionColumnEditor = observer(
275
275
  }
276
276
  // move the item being hovered on when the dragged item position is beyond the its middle point
277
277
  const hoverBoundingReact = ref.current?.getBoundingClientRect();
278
+
278
279
  const distanceThreshold =
279
280
  ((hoverBoundingReact?.bottom ?? 0) - (hoverBoundingReact?.top ?? 0)) /
280
281
  2;
@@ -329,141 +330,142 @@ const QueryBuilderProjectionColumnEditor = observer(
329
330
  );
330
331
  const isBeingDragged =
331
332
  projectionColumnState === projectionColumnBeingDragged;
332
- dragConnector(dropConnector(ref));
333
+ dragConnector(handleRef);
334
+ dropConnector(ref);
335
+
333
336
  useDragPreviewLayer(dragPreviewConnector);
334
337
 
335
338
  return (
336
- <div ref={ref} className="query-builder__projection__column">
337
- <PanelEntryDropZonePlaceholder
338
- showPlaceholder={isBeingDragged}
339
- className="query-builder__dnd__placeholder"
339
+ <PanelDnDEntry
340
+ ref={ref}
341
+ showPlaceholder={isBeingDragged}
342
+ className="query-builder__projection__column"
343
+ >
344
+ <ContextMenu
345
+ content={
346
+ <QueryBuilderProjectionColumnContextMenu
347
+ projectionColumnState={projectionColumnState}
348
+ />
349
+ }
350
+ disabled={
351
+ !(
352
+ projectionColumnState instanceof
353
+ QueryBuilderSimpleProjectionColumnState
354
+ )
355
+ }
356
+ className={clsx('query-builder__projection__column__context-menu', {
357
+ 'query-builder__projection__column--selected-from-context-menu':
358
+ isSelectedFromContextMenu,
359
+ })}
360
+ menuProps={{ elevation: 7 }}
361
+ onOpen={onContextMenuOpen}
362
+ onClose={onContextMenuClose}
340
363
  >
341
- <ContextMenu
342
- content={
343
- <QueryBuilderProjectionColumnContextMenu
364
+ <PanelDnDEntryDragHandle
365
+ isBeingDragged={isBeingDragged}
366
+ dropTargetConnector={handleRef}
367
+ className="query-builder__projection__column__drag-handle__container"
368
+ />
369
+ <div className="query-builder__projection__column__name">
370
+ <InputWithInlineValidation
371
+ className="query-builder__projection__column__name__input input-group__input"
372
+ spellCheck={false}
373
+ value={projectionColumnState.columnName}
374
+ onChange={changeColumnName}
375
+ validationErrorMessage={
376
+ isDuplicatedColumnName ? 'Duplicated column' : undefined
377
+ }
378
+ />
379
+ </div>
380
+ <div className="query-builder__projection__column__value">
381
+ {projectionColumnState instanceof
382
+ QueryBuilderSimpleProjectionColumnState && (
383
+ <QueryBuilderSimpleProjectionColumnEditor
344
384
  projectionColumnState={projectionColumnState}
345
385
  />
346
- }
347
- disabled={
348
- !(
349
- projectionColumnState instanceof
350
- QueryBuilderSimpleProjectionColumnState
351
- )
352
- }
353
- className={clsx('query-builder__projection__column__context-menu', {
354
- 'query-builder__projection__column--selected-from-context-menu':
355
- isSelectedFromContextMenu,
356
- })}
357
- menuProps={{ elevation: 7 }}
358
- onOpen={onContextMenuOpen}
359
- onClose={onContextMenuClose}
360
- >
361
- <div className="query-builder__projection__column__drag-handle__container">
362
- <div className="query-builder__projection__column__drag-handle">
363
- <VerticalDragHandleIcon />
364
- </div>
365
- </div>
366
- <div className="query-builder__projection__column__name">
367
- <InputWithInlineValidation
368
- className="query-builder__projection__column__name__input input-group__input"
369
- spellCheck={false}
370
- value={projectionColumnState.columnName}
371
- onChange={changeColumnName}
372
- validationErrorMessage={
373
- isDuplicatedColumnName ? 'Duplicated column' : undefined
374
- }
386
+ )}
387
+ {projectionColumnState instanceof
388
+ QueryBuilderDerivationProjectionColumnState && (
389
+ <QueryBuilderDerivationProjectionColumnEditor
390
+ projectionColumnState={projectionColumnState}
375
391
  />
376
- </div>
377
- <div className="query-builder__projection__column__value">
378
- {projectionColumnState instanceof
379
- QueryBuilderSimpleProjectionColumnState && (
380
- <QueryBuilderSimpleProjectionColumnEditor
381
- projectionColumnState={projectionColumnState}
382
- />
383
- )}
384
- {projectionColumnState instanceof
385
- QueryBuilderDerivationProjectionColumnState && (
386
- <QueryBuilderDerivationProjectionColumnEditor
387
- projectionColumnState={projectionColumnState}
388
- />
392
+ )}
393
+ </div>
394
+ <div className="query-builder__projection__column__aggregate">
395
+ <div className="query-builder__projection__column__aggregate__operator">
396
+ {aggregateColumnState && (
397
+ <div className="query-builder__projection__column__aggregate__operator__label">
398
+ {aggregateColumnState.operator.getLabel(
399
+ projectionColumnState,
400
+ )}
401
+ </div>
389
402
  )}
390
- </div>
391
- <div className="query-builder__projection__column__aggregate">
392
- <div className="query-builder__projection__column__aggregate__operator">
393
- {aggregateColumnState && (
394
- <div className="query-builder__projection__column__aggregate__operator__label">
395
- {aggregateColumnState.operator.getLabel(
396
- projectionColumnState,
403
+ <DropdownMenu
404
+ className="query-builder__projection__column__aggregate__operator__dropdown"
405
+ title="Choose Aggregate Operator..."
406
+ disabled={!aggreateOperators.length}
407
+ content={
408
+ <MenuContent>
409
+ {aggregateColumnState && (
410
+ <MenuContentItem
411
+ className="query-builder__projection__column__aggregate__operator__dropdown__option"
412
+ onClick={changeOperator(undefined)}
413
+ >
414
+ (none)
415
+ </MenuContentItem>
397
416
  )}
398
- </div>
399
- )}
400
- <DropdownMenu
401
- className="query-builder__projection__column__aggregate__operator__dropdown"
402
- title="Choose Aggregate Operator..."
403
- disabled={!aggreateOperators.length}
404
- content={
405
- <MenuContent>
406
- {aggregateColumnState && (
407
- <MenuContentItem
408
- className="query-builder__projection__column__aggregate__operator__dropdown__option"
409
- onClick={changeOperator(undefined)}
410
- >
411
- (none)
412
- </MenuContentItem>
413
- )}
414
- {aggreateOperators.map((op) => (
415
- <MenuContentItem
416
- key={op.uuid}
417
- className="query-builder__projection__column__aggregate__operator__dropdown__option"
418
- onClick={changeOperator(op)}
419
- >
420
- {op.getLabel(projectionColumnState)}
421
- </MenuContentItem>
422
- ))}
423
- </MenuContent>
424
- }
425
- menuProps={{
426
- anchorOrigin: { vertical: 'bottom', horizontal: 'left' },
427
- transformOrigin: { vertical: 'top', horizontal: 'left' },
428
- elevation: 7,
429
- }}
430
- >
431
- <div
432
- className={clsx(
433
- 'query-builder__projection__column__aggregate__operator__badge',
434
- {
435
- 'query-builder__projection__column__aggregate__operator__badge--activated':
436
- Boolean(aggregateColumnState),
437
- },
438
- )}
439
- >
440
- <SigmaIcon />
441
- </div>
442
- <div className="query-builder__projection__column__aggregate__operator__dropdown__trigger">
443
- <CaretDownIcon />
444
- </div>
445
- </DropdownMenu>
446
- </div>
447
- </div>
448
- <div className="query-builder__projection__column__actions">
449
- <button
450
- className="query-builder__projection__column__action"
451
- tabIndex={-1}
452
- onClick={removeColumn}
453
- disabled={isRemovalDisabled}
454
- title={
455
- isRemovalDisabled
456
- ? // TODO: We may want to provide a list of all places where column is in use
457
- "This column is used and can't be removed"
458
- : 'Remove'
417
+ {aggreateOperators.map((op) => (
418
+ <MenuContentItem
419
+ key={op.uuid}
420
+ className="query-builder__projection__column__aggregate__operator__dropdown__option"
421
+ onClick={changeOperator(op)}
422
+ >
423
+ {op.getLabel(projectionColumnState)}
424
+ </MenuContentItem>
425
+ ))}
426
+ </MenuContent>
459
427
  }
428
+ menuProps={{
429
+ anchorOrigin: { vertical: 'bottom', horizontal: 'left' },
430
+ transformOrigin: { vertical: 'top', horizontal: 'left' },
431
+ elevation: 7,
432
+ }}
460
433
  >
461
- <TimesIcon />
462
- </button>
434
+ <div
435
+ className={clsx(
436
+ 'query-builder__projection__column__aggregate__operator__badge',
437
+ {
438
+ 'query-builder__projection__column__aggregate__operator__badge--activated':
439
+ Boolean(aggregateColumnState),
440
+ },
441
+ )}
442
+ >
443
+ <SigmaIcon />
444
+ </div>
445
+ <div className="query-builder__projection__column__aggregate__operator__dropdown__trigger">
446
+ <CaretDownIcon />
447
+ </div>
448
+ </DropdownMenu>
463
449
  </div>
464
- </ContextMenu>
465
- </PanelEntryDropZonePlaceholder>
466
- </div>
450
+ </div>
451
+ <div className="query-builder__projection__column__actions">
452
+ <button
453
+ className="query-builder__projection__column__action"
454
+ tabIndex={-1}
455
+ onClick={removeColumn}
456
+ disabled={isRemovalDisabled}
457
+ title={
458
+ isRemovalDisabled
459
+ ? // TODO: We may want to provide a list of all places where column is in use
460
+ "This column is used and can't be removed"
461
+ : 'Remove'
462
+ }
463
+ >
464
+ <TimesIcon />
465
+ </button>
466
+ </div>
467
+ </ContextMenu>
468
+ </PanelDnDEntry>
467
469
  );
468
470
  },
469
471
  );