@finos/legend-application-studio 26.1.10 → 27.0.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 (122) hide show
  1. package/lib/application/LegendStudioApplicationConfig.d.ts +4 -0
  2. package/lib/application/LegendStudioApplicationConfig.d.ts.map +1 -1
  3. package/lib/application/LegendStudioApplicationConfig.js +4 -0
  4. package/lib/application/LegendStudioApplicationConfig.js.map +1 -1
  5. package/lib/components/editor/QuickInput.d.ts.map +1 -1
  6. package/lib/components/editor/QuickInput.js +4 -2
  7. package/lib/components/editor/QuickInput.js.map +1 -1
  8. package/lib/components/editor/editor-group/FunctionEditor.d.ts.map +1 -1
  9. package/lib/components/editor/editor-group/FunctionEditor.js +13 -6
  10. package/lib/components/editor/editor-group/FunctionEditor.js.map +1 -1
  11. package/lib/components/editor/editor-group/data-editor/RelationalCSVDataEditor.d.ts.map +1 -1
  12. package/lib/components/editor/editor-group/data-editor/RelationalCSVDataEditor.js +1 -1
  13. package/lib/components/editor/editor-group/data-editor/RelationalCSVDataEditor.js.map +1 -1
  14. package/lib/components/editor/editor-group/mapping-editor/DEPRECATED__MappingTestEditor.d.ts.map +1 -1
  15. package/lib/components/editor/editor-group/mapping-editor/DEPRECATED__MappingTestEditor.js +6 -10
  16. package/lib/components/editor/editor-group/mapping-editor/DEPRECATED__MappingTestEditor.js.map +1 -1
  17. package/lib/components/editor/editor-group/mapping-editor/InstanceSetImplementationEditor.js +1 -1
  18. package/lib/components/editor/editor-group/mapping-editor/InstanceSetImplementationEditor.js.map +1 -1
  19. package/lib/components/editor/editor-group/mapping-editor/MappingExecutionBuilder.d.ts.map +1 -1
  20. package/lib/components/editor/editor-group/mapping-editor/MappingExecutionBuilder.js +13 -12
  21. package/lib/components/editor/editor-group/mapping-editor/MappingExecutionBuilder.js.map +1 -1
  22. package/lib/components/editor/editor-group/mapping-editor/MappingExplorer.js +2 -2
  23. package/lib/components/editor/editor-group/mapping-editor/MappingExplorer.js.map +1 -1
  24. package/lib/components/editor/editor-group/mapping-editor/MappingTestableEditor.d.ts.map +1 -1
  25. package/lib/components/editor/editor-group/mapping-editor/MappingTestableEditor.js +3 -7
  26. package/lib/components/editor/editor-group/mapping-editor/MappingTestableEditor.js.map +1 -1
  27. package/lib/components/editor/editor-group/project-configuration-editor/ProjectDependencyEditor.d.ts.map +1 -1
  28. package/lib/components/editor/editor-group/project-configuration-editor/ProjectDependencyEditor.js +6 -6
  29. package/lib/components/editor/editor-group/project-configuration-editor/ProjectDependencyEditor.js.map +1 -1
  30. package/lib/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.d.ts.map +1 -1
  31. package/lib/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.js +10 -14
  32. package/lib/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.js.map +1 -1
  33. package/lib/components/editor/editor-group/service-editor/testable/ServiceTestsEditor.d.ts.map +1 -1
  34. package/lib/components/editor/editor-group/service-editor/testable/ServiceTestsEditor.js +9 -3
  35. package/lib/components/editor/editor-group/service-editor/testable/ServiceTestsEditor.js.map +1 -1
  36. package/lib/components/editor/panel-group/SQLPlaygroundPanel.d.ts.map +1 -1
  37. package/lib/components/editor/panel-group/SQLPlaygroundPanel.js +1 -1
  38. package/lib/components/editor/panel-group/SQLPlaygroundPanel.js.map +1 -1
  39. package/lib/components/editor/side-bar/Explorer.d.ts.map +1 -1
  40. package/lib/components/editor/side-bar/Explorer.js +36 -4
  41. package/lib/components/editor/side-bar/Explorer.js.map +1 -1
  42. package/lib/components/editor/side-bar/testable/GlobalTestRunner.d.ts.map +1 -1
  43. package/lib/components/editor/side-bar/testable/GlobalTestRunner.js +15 -14
  44. package/lib/components/editor/side-bar/testable/GlobalTestRunner.js.map +1 -1
  45. package/lib/index.css +2 -2
  46. package/lib/index.css.map +1 -1
  47. package/lib/package.json +5 -5
  48. package/lib/stores/LegendStudioApplicationPlugin.d.ts +7 -7
  49. package/lib/stores/LegendStudioApplicationPlugin.d.ts.map +1 -1
  50. package/lib/stores/LegendStudioApplicationPlugin.js.map +1 -1
  51. package/lib/stores/editor/EditorStore.d.ts.map +1 -1
  52. package/lib/stores/editor/EditorStore.js +2 -0
  53. package/lib/stores/editor/EditorStore.js.map +1 -1
  54. package/lib/stores/editor/GraphEditFormModeState.d.ts.map +1 -1
  55. package/lib/stores/editor/GraphEditFormModeState.js +0 -1
  56. package/lib/stores/editor/GraphEditFormModeState.js.map +1 -1
  57. package/lib/stores/editor/NewElementState.d.ts.map +1 -1
  58. package/lib/stores/editor/NewElementState.js +5 -3
  59. package/lib/stores/editor/NewElementState.js.map +1 -1
  60. package/lib/stores/editor/QuickInputState.d.ts +3 -0
  61. package/lib/stores/editor/QuickInputState.d.ts.map +1 -1
  62. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.d.ts +1 -0
  63. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.d.ts.map +1 -1
  64. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.js +14 -7
  65. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.js.map +1 -1
  66. package/lib/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.d.ts +2 -2
  67. package/lib/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.d.ts.map +1 -1
  68. package/lib/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.js +48 -48
  69. package/lib/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.js.map +1 -1
  70. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.d.ts +4 -1
  71. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.d.ts.map +1 -1
  72. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.js +37 -12
  73. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.js.map +1 -1
  74. package/lib/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.js +2 -2
  75. package/lib/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.js.map +1 -1
  76. package/lib/stores/editor/editor-state/element-editor-state/service/ServicePostValidationState.js +1 -1
  77. package/lib/stores/editor/editor-state/element-editor-state/service/ServicePostValidationState.js.map +1 -1
  78. package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.d.ts.map +1 -1
  79. package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.js +3 -1
  80. package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.js.map +1 -1
  81. package/lib/stores/editor/editor-state/project-configuration-editor-state/ProjectDependencyEditorState.d.ts +1 -1
  82. package/lib/stores/editor/editor-state/project-configuration-editor-state/ProjectDependencyEditorState.d.ts.map +1 -1
  83. package/lib/stores/editor/editor-state/project-configuration-editor-state/ProjectDependencyEditorState.js +2 -2
  84. package/lib/stores/editor/editor-state/project-configuration-editor-state/ProjectDependencyEditorState.js.map +1 -1
  85. package/lib/stores/editor/sidebar-state/BulkServiceRegistrationState.js +1 -1
  86. package/lib/stores/editor/sidebar-state/BulkServiceRegistrationState.js.map +1 -1
  87. package/lib/stores/editor/utils/MockDataUtils.d.ts +1 -1
  88. package/lib/stores/editor/utils/MockDataUtils.d.ts.map +1 -1
  89. package/lib/stores/editor/utils/MockDataUtils.js.map +1 -1
  90. package/lib/stores/editor/utils/PackageTreeUtils.js +3 -3
  91. package/lib/stores/editor/utils/PackageTreeUtils.js.map +1 -1
  92. package/package.json +15 -15
  93. package/src/application/LegendStudioApplicationConfig.ts +5 -0
  94. package/src/components/editor/QuickInput.tsx +5 -1
  95. package/src/components/editor/editor-group/FunctionEditor.tsx +67 -55
  96. package/src/components/editor/editor-group/data-editor/RelationalCSVDataEditor.tsx +1 -0
  97. package/src/components/editor/editor-group/mapping-editor/DEPRECATED__MappingTestEditor.tsx +63 -69
  98. package/src/components/editor/editor-group/mapping-editor/InstanceSetImplementationEditor.tsx +1 -1
  99. package/src/components/editor/editor-group/mapping-editor/MappingExecutionBuilder.tsx +69 -48
  100. package/src/components/editor/editor-group/mapping-editor/MappingExplorer.tsx +2 -2
  101. package/src/components/editor/editor-group/mapping-editor/MappingTestableEditor.tsx +8 -12
  102. package/src/components/editor/editor-group/project-configuration-editor/ProjectDependencyEditor.tsx +6 -10
  103. package/src/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.tsx +91 -99
  104. package/src/components/editor/editor-group/service-editor/testable/ServiceTestsEditor.tsx +13 -5
  105. package/src/components/editor/panel-group/SQLPlaygroundPanel.tsx +3 -0
  106. package/src/components/editor/side-bar/Explorer.tsx +83 -1
  107. package/src/components/editor/side-bar/testable/GlobalTestRunner.tsx +21 -23
  108. package/src/stores/LegendStudioApplicationPlugin.ts +7 -11
  109. package/src/stores/editor/EditorStore.ts +3 -0
  110. package/src/stores/editor/GraphEditFormModeState.ts +0 -1
  111. package/src/stores/editor/NewElementState.ts +6 -3
  112. package/src/stores/editor/QuickInputState.ts +3 -0
  113. package/src/stores/editor/editor-state/element-editor-state/FunctionEditorState.ts +18 -8
  114. package/src/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.ts +70 -69
  115. package/src/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.ts +62 -36
  116. package/src/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.ts +5 -5
  117. package/src/stores/editor/editor-state/element-editor-state/service/ServicePostValidationState.ts +1 -1
  118. package/src/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.ts +12 -2
  119. package/src/stores/editor/editor-state/project-configuration-editor-state/ProjectDependencyEditorState.ts +2 -2
  120. package/src/stores/editor/sidebar-state/BulkServiceRegistrationState.ts +1 -1
  121. package/src/stores/editor/utils/MockDataUtils.ts +1 -1
  122. package/src/stores/editor/utils/PackageTreeUtils.ts +3 -3
@@ -47,6 +47,7 @@ import {
47
47
  PanelHeader,
48
48
  PanelHeaderActions,
49
49
  Panel,
50
+ PauseCircleIcon,
50
51
  } from '@finos/legend-art';
51
52
  import { observer } from 'mobx-react-lite';
52
53
  import {
@@ -721,6 +722,9 @@ export const MappingExecutionBuilder = observer(
721
722
  const applicationStore = useApplicationStore();
722
723
  const { queryState, inputDataState } = executionState;
723
724
  // execute
725
+ const cancelExecution = applicationStore.guardUnhandledError(() =>
726
+ flowResult(executionState.cancelExecution()),
727
+ );
724
728
  const generatePlan = applicationStore.guardUnhandledError(() =>
725
729
  flowResult(executionState.generatePlan(false)),
726
730
  );
@@ -780,54 +784,71 @@ export const MappingExecutionBuilder = observer(
780
784
  <FlaskIcon />
781
785
  </button>
782
786
  )}
783
- <div className="mapping-execution-builder__action-btn">
784
- <button
785
- className="mapping-execution-builder__action-btn__label"
786
- onClick={execute}
787
- disabled={
788
- isStubbed_RawLambda(queryState.query) ||
789
- !inputDataState.isValid ||
790
- executionState.isGeneratingPlan ||
791
- executionState.isExecuting
792
- }
793
- tabIndex={-1}
794
- >
795
- <PlayIcon className="mapping-execution-builder__action-btn__label__icon" />
796
- <div className="mapping-execution-builder__action-btn__label__title">
797
- Run Query
798
- </div>
799
- </button>
800
- <DropdownMenu
801
- className="mapping-execution-builder__action-btn__dropdown-btn"
802
- disabled={
803
- isStubbed_RawLambda(queryState.query) ||
804
- !inputDataState.isValid ||
805
- executionState.isGeneratingPlan ||
806
- executionState.isExecuting
807
- }
808
- content={
809
- <MenuContent>
810
- <MenuContentItem
811
- className="mapping-execution-builder__action-btn__option"
812
- onClick={generatePlan}
813
- >
814
- Generate Plan
815
- </MenuContentItem>
816
- <MenuContentItem
817
- className="mapping-execution-builder__action-btn__option"
818
- onClick={debugPlanGeneration}
819
- >
820
- Debug
821
- </MenuContentItem>
822
- </MenuContent>
823
- }
824
- menuProps={{
825
- anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
826
- transformOrigin: { vertical: 'top', horizontal: 'right' },
827
- }}
828
- >
829
- <CaretDownIcon />
830
- </DropdownMenu>
787
+ <div className="mapping-execution-builder__action-btn btn__dropdown-combo btn__dropdown-combo--primary">
788
+ {executionState.isExecuting ? (
789
+ <button
790
+ className="btn__dropdown-combo__canceler"
791
+ onClick={cancelExecution}
792
+ tabIndex={-1}
793
+ >
794
+ <div className="btn--dark btn--caution btn__dropdown-combo__canceler__label">
795
+ <PauseCircleIcon className="btn__dropdown-combo__canceler__label__icon" />
796
+ <div className="btn__dropdown-combo__canceler__label__title">
797
+ Stop
798
+ </div>
799
+ </div>
800
+ </button>
801
+ ) : (
802
+ <>
803
+ <button
804
+ className="btn__dropdown-combo__label"
805
+ onClick={execute}
806
+ disabled={
807
+ isStubbed_RawLambda(queryState.query) ||
808
+ !inputDataState.isValid ||
809
+ executionState.isGeneratingPlan ||
810
+ executionState.isExecuting
811
+ }
812
+ tabIndex={-1}
813
+ >
814
+ <PlayIcon className="btn__dropdown-combo__label__icon" />
815
+ <div className="btn__dropdown-combo__label__title">
816
+ Run Query
817
+ </div>
818
+ </button>
819
+ <DropdownMenu
820
+ className="btn__dropdown-combo__dropdown-btn"
821
+ disabled={
822
+ isStubbed_RawLambda(queryState.query) ||
823
+ !inputDataState.isValid ||
824
+ executionState.isGeneratingPlan ||
825
+ executionState.isExecuting
826
+ }
827
+ content={
828
+ <MenuContent>
829
+ <MenuContentItem
830
+ className="btn__dropdown-combo__option"
831
+ onClick={generatePlan}
832
+ >
833
+ Generate Plan
834
+ </MenuContentItem>
835
+ <MenuContentItem
836
+ className="btn__dropdown-combo__option"
837
+ onClick={debugPlanGeneration}
838
+ >
839
+ Debug
840
+ </MenuContentItem>
841
+ </MenuContent>
842
+ }
843
+ menuProps={{
844
+ anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
845
+ transformOrigin: { vertical: 'top', horizontal: 'right' },
846
+ }}
847
+ >
848
+ <CaretDownIcon />
849
+ </DropdownMenu>
850
+ </>
851
+ )}
831
852
  </div>
832
853
  </div>
833
854
  </div>
@@ -168,7 +168,7 @@ export const MappingExplorerContextMenu = observer(
168
168
 
169
169
  const allowRemoveFilter =
170
170
  mappingElement instanceof PureInstanceSetImplementation &&
171
- !!mappingElement.filter;
171
+ Boolean(mappingElement.filter);
172
172
 
173
173
  return (
174
174
  <MenuContent ref={ref}>
@@ -390,7 +390,7 @@ const MappingElementTreeNodeContainer = observer(
390
390
  {getMappingElementLabel(mappingElement, editorStore).value}
391
391
  </div>
392
392
  {mappingElement instanceof PureInstanceSetImplementation &&
393
- !!mappingElement.filter && (
393
+ Boolean(mappingElement.filter) && (
394
394
  <div className="mapping-explorer__item__label__filter-icon">
395
395
  <FilterIcon />
396
396
  </div>
@@ -62,6 +62,7 @@ import {
62
62
  PanelLoadingIndicator,
63
63
  ContextMenu,
64
64
  ModalHeader,
65
+ PanelFormSection,
65
66
  } from '@finos/legend-art';
66
67
  import {
67
68
  assertErrorThrown,
@@ -225,12 +226,15 @@ const CreateTestSuiteModal = observer(
225
226
  </ModalHeader>
226
227
  <ModalBody>
227
228
  <PanelLoadingIndicator
229
+ className="panel-loading-indicator--in__modal"
228
230
  isLoading={creatorState.isCreatingSuiteState.isInProgress}
229
231
  />
230
232
  {creatorState.isCreatingSuiteState.message && (
231
- <div className="service-registration-editor__progress-msg">
232
- {`${creatorState.isCreatingSuiteState.message}...`}
233
- </div>
233
+ <PanelFormSection>
234
+ <div className="service-registration-editor__progress-msg">
235
+ {`${creatorState.isCreatingSuiteState.message}...`}
236
+ </div>
237
+ </PanelFormSection>
234
238
  )}
235
239
  <PanelFormTextField
236
240
  ref={inputRef}
@@ -746,15 +750,7 @@ const MappingTestableQueryEditor = observer(
746
750
  </div>
747
751
  {!isStubbed_RawLambda(queryState.query) && (
748
752
  <PanelContent>
749
- <div
750
- className="mapping-test-editor__query-panel__query"
751
- title="Double click to edit in query builder"
752
- onDoubleClick={(event) => {
753
- event.preventDefault();
754
- event.stopPropagation();
755
- editWithQueryBuilder()();
756
- }}
757
- >
753
+ <div className="mapping-test-editor__query-panel__query">
758
754
  <CodeEditor
759
755
  inputValue={queryState.lambdaString}
760
756
  isReadOnly={true}
@@ -118,16 +118,12 @@ const ProjectDependencyActions = observer(
118
118
  dependencyEditorState.dependencyReport?.conflicts.length;
119
119
  const viewTree = (): void => {
120
120
  if (dependencyEditorState.dependencyReport) {
121
- dependencyEditorState.setDependencyReport(
122
- DEPENDENCY_REPORT_TAB.EXPLORER,
123
- );
121
+ dependencyEditorState.setReportTab(DEPENDENCY_REPORT_TAB.EXPLORER);
124
122
  }
125
123
  };
126
124
  const viewConflict = (): void => {
127
125
  if (dependencyEditorState.dependencyReport) {
128
- dependencyEditorState.setDependencyReport(
129
- DEPENDENCY_REPORT_TAB.CONFLICTS,
130
- );
126
+ dependencyEditorState.setReportTab(DEPENDENCY_REPORT_TAB.CONFLICTS);
131
127
  }
132
128
  };
133
129
  return (
@@ -604,17 +600,17 @@ const ProjectDependencyReportModal = observer(
604
600
  const changeTab =
605
601
  (tab: DEPENDENCY_REPORT_TAB): (() => void) =>
606
602
  (): void =>
607
- dependencyEditorState.setDependencyReport(tab);
603
+ dependencyEditorState.setReportTab(tab);
608
604
  const dependencyReport = dependencyEditorState.dependencyReport;
609
605
  const closeModal = (): void =>
610
- dependencyEditorState.setDependencyReport(undefined);
606
+ dependencyEditorState.setReportTab(undefined);
611
607
  const [flattenView, setFlattenView] = useState(false);
612
608
  const [isExpandingDependencies, setIsExpandingDependencies] =
613
609
  useState(false);
614
610
  const setTreeData = (
615
- treeData: TreeData<ProjectDependencyTreeNodeData>,
611
+ val: TreeData<ProjectDependencyTreeNodeData>,
616
612
  ): void => {
617
- dependencyEditorState.setTreeData(treeData, flattenView);
613
+ dependencyEditorState.setTreeData(val, flattenView);
618
614
  };
619
615
  const toggleViewAsListOrAsTree = (): void => {
620
616
  setFlattenView(!flattenView);
@@ -31,7 +31,6 @@ import {
31
31
  ModalBody,
32
32
  ModalFooter,
33
33
  ModalHeader,
34
- MoreVerticalIcon,
35
34
  } from '@finos/legend-art';
36
35
  import { assertErrorThrown } from '@finos/legend-shared';
37
36
  import { flowResult } from 'mobx';
@@ -287,24 +286,24 @@ export const ServiceExecutionQueryEditor = observer(
287
286
  </div>
288
287
  </div>
289
288
  <div className="panel__header__actions">
290
- <div className="service-editor__execution__action-btn">
289
+ <div className="btn__dropdown-combo btn__dropdown-combo--primary">
291
290
  <button
292
- className="service-editor__execution__action-btn__label service-editor__execution__action-btn__label--primary"
291
+ className="btn__dropdown-combo__label"
293
292
  onClick={editWithQueryBuilder()}
294
293
  title="Edit Query"
295
294
  tabIndex={-1}
296
295
  >
297
- <PencilIcon className="service-editor__execution__action-btn__label__icon" />
298
- <div className="service-editor__execution__action-btn__label__title">
296
+ <PencilIcon className="btn__dropdown-combo__label__icon" />
297
+ <div className="btn__dropdown-combo__label__title">
299
298
  Edit Query
300
299
  </div>
301
300
  </button>
302
301
  <DropdownMenu
303
- className="service-editor__execution__action-btn__dropdown-btn service-editor__execution__action-btn__dropdown-btn--primary"
302
+ className="btn__dropdown-combo__dropdown-btn"
304
303
  content={
305
304
  <MenuContent>
306
305
  <MenuContentItem
307
- className="service-editor__execution__action-btn__option"
306
+ className="btn__dropdown-combo__option"
308
307
  onClick={editWithQueryBuilder(true)}
309
308
  >
310
309
  Text Mode
@@ -319,96 +318,97 @@ export const ServiceExecutionQueryEditor = observer(
319
318
  <CaretDownIcon />
320
319
  </DropdownMenu>
321
320
  </div>
322
- {executionState.isRunningQuery ? (
323
- <button
324
- className="service-editor__execution__stop-btn"
325
- onClick={cancelQuery}
326
- tabIndex={-1}
327
- >
328
- <div className="btn--dark btn--caution service-editor__execution__stop-btn__label">
329
- <PauseCircleIcon className="service-editor__execution__stop-btn__label__icon" />
330
- <div className="service-editor__execution__stop-btn__label__title">
331
- Stop
332
- </div>
333
- </div>
334
- </button>
335
- ) : (
336
- <div className="service-editor__execution__action-btn">
321
+ <div className="btn__dropdown-combo btn__dropdown-combo--primary">
322
+ {executionState.isRunningQuery ? (
337
323
  <button
338
- className="service-editor__execution__action-btn__label"
339
- onClick={runQuery}
340
- title="Run Query"
341
- disabled={executionIsRunning}
324
+ className="btn__dropdown-combo__canceler"
325
+ onClick={cancelQuery}
342
326
  tabIndex={-1}
343
327
  >
344
- <PlayIcon className="service-editor__execution__action-btn__label__icon" />
345
- <div className="service-editor__execution__action-btn__label__title">
346
- Run Query
328
+ <div className="btn--dark btn--caution btn__dropdown-combo__canceler__label">
329
+ <PauseCircleIcon className="btn__dropdown-combo__canceler__label__icon" />
330
+ <div className="btn__dropdown-combo__canceler__label__title">
331
+ Stop
332
+ </div>
347
333
  </div>
348
334
  </button>
349
- <DropdownMenu
350
- className="service-editor__execution__action-btn__dropdown-btn"
351
- disabled={executionIsRunning}
352
- content={
353
- <MenuContent>
354
- <MenuContentItem
355
- className="service-editor__execution__action-btn__option"
356
- onClick={generatePlan}
357
- >
358
- Generate Plan
359
- </MenuContentItem>
360
- <MenuContentItem
361
- className="service-editor__execution__action-btn__option"
362
- onClick={debugPlanGeneration}
363
- >
364
- Debug
365
- </MenuContentItem>
366
- </MenuContent>
367
- }
368
- menuProps={{
369
- anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
370
- transformOrigin: { vertical: 'top', horizontal: 'right' },
371
- }}
372
- >
373
- <CaretDownIcon />
374
- </DropdownMenu>
375
- </div>
376
- )}
377
- <div>
378
- <DropdownMenu
379
- className="service-editor__execution__advanced-btn"
380
- disabled={executionIsRunning}
381
- content={
382
- <MenuContent>
383
- <MenuContentItem
384
- className="service-editor__execution__advanced-btn__option"
385
- onClick={importQuery}
386
- >
387
- Import Query
388
- </MenuContentItem>
389
- <MenuContentItem
390
- className="service-editor__execution__advanced-btn__option"
391
- onClick={openQueryInLegendQuery}
392
- disabled={!applicationStore.config.queryApplicationUrl}
393
- >
394
- Create an Ad-hoc Query
395
- </MenuContentItem>
396
- </MenuContent>
397
- }
398
- menuProps={{
399
- anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
400
- transformOrigin: { vertical: 'top', horizontal: 'right' },
401
- }}
402
- >
403
- <div className="service-editor__execution__advanced-btn__label">
404
- <MoreVerticalIcon className="service-editor__execution__advanced-btn__label__icon" />
335
+ ) : (
336
+ <>
337
+ <button
338
+ className="btn__dropdown-combo__label"
339
+ onClick={runQuery}
340
+ title="Run Query"
341
+ disabled={executionIsRunning}
342
+ tabIndex={-1}
343
+ >
344
+ <PlayIcon className="btn__dropdown-combo__label__icon" />
345
+ <div className="btn__dropdown-combo__label__title">
346
+ Run Query
347
+ </div>
348
+ </button>
349
+ <DropdownMenu
350
+ className="btn__dropdown-combo__dropdown-btn"
351
+ disabled={executionIsRunning}
352
+ content={
353
+ <MenuContent>
354
+ <MenuContentItem
355
+ className="btn__dropdown-combo__option"
356
+ onClick={generatePlan}
357
+ >
358
+ Generate Plan
359
+ </MenuContentItem>
360
+ <MenuContentItem
361
+ className="btn__dropdown-combo__option"
362
+ onClick={debugPlanGeneration}
363
+ >
364
+ Debug
365
+ </MenuContentItem>
366
+ </MenuContent>
367
+ }
368
+ menuProps={{
369
+ anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
370
+ transformOrigin: { vertical: 'top', horizontal: 'right' },
371
+ }}
372
+ >
373
+ <CaretDownIcon />
374
+ </DropdownMenu>
375
+ </>
376
+ )}
377
+ </div>
378
+ <DropdownMenu
379
+ className="btn__dropdown-combo"
380
+ disabled={executionIsRunning}
381
+ content={
382
+ <MenuContent>
383
+ <MenuContentItem
384
+ className="btn__dropdown-combo__option"
385
+ onClick={importQuery}
386
+ >
387
+ Import Query
388
+ </MenuContentItem>
389
+ <MenuContentItem
390
+ className="btn__dropdown-combo__option"
391
+ onClick={openQueryInLegendQuery}
392
+ disabled={!applicationStore.config.queryApplicationUrl}
393
+ >
394
+ Create an Ad-hoc Query
395
+ </MenuContentItem>
396
+ </MenuContent>
397
+ }
398
+ menuProps={{
399
+ anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
400
+ transformOrigin: { vertical: 'top', horizontal: 'right' },
401
+ }}
402
+ >
403
+ <div className="btn__dropdown-combo__label">
404
+ <div className="btn__dropdown-combo__label__title">
405
405
  Advanced
406
406
  </div>
407
- <div className="service-editor__execution__advanced-btn__icon">
408
- <CaretDownIcon />
409
- </div>
410
- </DropdownMenu>
411
- </div>
407
+ </div>
408
+ <div className="btn__dropdown-combo__dropdown-btn">
409
+ <CaretDownIcon />
410
+ </div>
411
+ </DropdownMenu>
412
412
  </div>
413
413
  </div>
414
414
  <div className="panel__content property-mapping-editor__entry__container">
@@ -417,15 +417,7 @@ export const ServiceExecutionQueryEditor = observer(
417
417
  executionState.isOpeningQueryEditor || executionIsRunning
418
418
  }
419
419
  />
420
- <div
421
- className="service-execution-query-editor__content"
422
- title="Double click to edit in query builder"
423
- onDoubleClick={(event) => {
424
- event.preventDefault();
425
- event.stopPropagation();
426
- editWithQueryBuilder()();
427
- }}
428
- >
420
+ <div className="service-execution-query-editor__content">
429
421
  <CodeEditor
430
422
  inputValue={queryState.lambdaString}
431
423
  isReadOnly={true}
@@ -225,6 +225,14 @@ const ServiceTestParameterEditor = observer(
225
225
  const type = bindingParamPair
226
226
  ? bindingParamPair.binding.contentType
227
227
  : paramState.varExpression.genericType?.value.rawType.name ?? 'unknown';
228
+ const paramValue = (
229
+ paramState.varExpression.genericType?.value.rawType === PrimitiveType.BYTE
230
+ ? atob(
231
+ (paramState.valueSpec as PrimitiveInstanceValue)
232
+ .values[0] as string,
233
+ )
234
+ : (paramState.valueSpec as PrimitiveInstanceValue).values[0]
235
+ ) as string;
228
236
 
229
237
  const openInPopUp = (): void => setShowPopUp(!showPopUp);
230
238
  const closePopUp = (): void => setShowPopUp(false);
@@ -232,7 +240,10 @@ const ServiceTestParameterEditor = observer(
232
240
  if (paramState.valueSpec instanceof PrimitiveInstanceValue) {
233
241
  instanceValue_setValue(
234
242
  paramState.valueSpec,
235
- val,
243
+ paramState.varExpression.genericType?.value.rawType ===
244
+ PrimitiveType.BYTE
245
+ ? btoa(val)
246
+ : val,
236
247
  0,
237
248
  setupState.editorStore.changeDetectionState.observerContext,
238
249
  );
@@ -261,10 +272,7 @@ const ServiceTestParameterEditor = observer(
261
272
  <textarea
262
273
  className="panel__content__form__section__textarea value-spec-editor__input"
263
274
  spellCheck={false}
264
- value={
265
- (paramState.valueSpec as PrimitiveInstanceValue)
266
- .values[0] as string
267
- }
275
+ value={paramValue}
268
276
  placeholder={
269
277
  ((paramState.valueSpec as PrimitiveInstanceValue)
270
278
  .values[0] as string) === ''
@@ -248,6 +248,9 @@ const buildRelationalDatabaseConnectionOption = (
248
248
  <div className="sql-playground__config__connection-selector__option__type">
249
249
  {connectionValue.type}
250
250
  </div>
251
+ <div className="sql-playground__config__connection-selector__option__path">
252
+ {connection.path}
253
+ </div>
251
254
  </div>
252
255
  ),
253
256
  };