@finos/legend-application-studio 26.1.10 → 26.1.11

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 (76) 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/service-editor/ServiceExecutionQueryEditor.d.ts.map +1 -1
  28. package/lib/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.js +10 -14
  29. package/lib/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.js.map +1 -1
  30. package/lib/components/editor/panel-group/SQLPlaygroundPanel.d.ts.map +1 -1
  31. package/lib/components/editor/panel-group/SQLPlaygroundPanel.js +1 -1
  32. package/lib/components/editor/panel-group/SQLPlaygroundPanel.js.map +1 -1
  33. package/lib/components/editor/side-bar/Explorer.d.ts.map +1 -1
  34. package/lib/components/editor/side-bar/Explorer.js +36 -4
  35. package/lib/components/editor/side-bar/Explorer.js.map +1 -1
  36. package/lib/index.css +2 -2
  37. package/lib/index.css.map +1 -1
  38. package/lib/package.json +2 -2
  39. package/lib/stores/editor/EditorStore.d.ts.map +1 -1
  40. package/lib/stores/editor/EditorStore.js +2 -0
  41. package/lib/stores/editor/EditorStore.js.map +1 -1
  42. package/lib/stores/editor/QuickInputState.d.ts +3 -0
  43. package/lib/stores/editor/QuickInputState.d.ts.map +1 -1
  44. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.d.ts +1 -0
  45. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.d.ts.map +1 -1
  46. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.js +14 -7
  47. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.js.map +1 -1
  48. package/lib/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.d.ts +2 -2
  49. package/lib/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.d.ts.map +1 -1
  50. package/lib/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.js +48 -48
  51. package/lib/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.js.map +1 -1
  52. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.d.ts +4 -1
  53. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.d.ts.map +1 -1
  54. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.js +37 -12
  55. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.js.map +1 -1
  56. package/lib/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.js +2 -2
  57. package/lib/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.js.map +1 -1
  58. package/package.json +12 -12
  59. package/src/application/LegendStudioApplicationConfig.ts +5 -0
  60. package/src/components/editor/QuickInput.tsx +5 -1
  61. package/src/components/editor/editor-group/FunctionEditor.tsx +67 -55
  62. package/src/components/editor/editor-group/data-editor/RelationalCSVDataEditor.tsx +1 -0
  63. package/src/components/editor/editor-group/mapping-editor/DEPRECATED__MappingTestEditor.tsx +63 -69
  64. package/src/components/editor/editor-group/mapping-editor/InstanceSetImplementationEditor.tsx +1 -1
  65. package/src/components/editor/editor-group/mapping-editor/MappingExecutionBuilder.tsx +69 -48
  66. package/src/components/editor/editor-group/mapping-editor/MappingExplorer.tsx +2 -2
  67. package/src/components/editor/editor-group/mapping-editor/MappingTestableEditor.tsx +8 -12
  68. package/src/components/editor/editor-group/service-editor/ServiceExecutionQueryEditor.tsx +91 -99
  69. package/src/components/editor/panel-group/SQLPlaygroundPanel.tsx +3 -0
  70. package/src/components/editor/side-bar/Explorer.tsx +83 -1
  71. package/src/stores/editor/EditorStore.ts +3 -0
  72. package/src/stores/editor/QuickInputState.ts +3 -0
  73. package/src/stores/editor/editor-state/element-editor-state/FunctionEditorState.ts +18 -8
  74. package/src/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.ts +70 -69
  75. package/src/stores/editor/editor-state/element-editor-state/mapping/MappingExecutionState.ts +62 -36
  76. package/src/stores/editor/editor-state/element-editor-state/service/ServiceExecutionState.ts +5 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-application-studio",
3
- "version": "26.1.10",
3
+ "version": "26.1.11",
4
4
  "description": "Legend Studio application core",
5
5
  "keywords": [
6
6
  "legend",
@@ -45,15 +45,15 @@
45
45
  "test:watch": "jest --watch"
46
46
  },
47
47
  "dependencies": {
48
- "@finos/legend-application": "15.0.22",
49
- "@finos/legend-art": "7.0.22",
50
- "@finos/legend-graph": "30.0.7",
51
- "@finos/legend-lego": "1.0.20",
52
- "@finos/legend-query-builder": "4.0.11",
53
- "@finos/legend-server-depot": "6.0.14",
54
- "@finos/legend-server-sdlc": "5.0.15",
55
- "@finos/legend-shared": "10.0.13",
56
- "@finos/legend-storage": "3.0.63",
48
+ "@finos/legend-application": "15.0.23",
49
+ "@finos/legend-art": "7.0.23",
50
+ "@finos/legend-graph": "30.0.8",
51
+ "@finos/legend-lego": "1.0.21",
52
+ "@finos/legend-query-builder": "4.0.12",
53
+ "@finos/legend-server-depot": "6.0.15",
54
+ "@finos/legend-server-sdlc": "5.0.16",
55
+ "@finos/legend-shared": "10.0.14",
56
+ "@finos/legend-storage": "3.0.64",
57
57
  "@testing-library/react": "14.0.0",
58
58
  "@types/react": "18.2.12",
59
59
  "@types/react-dom": "18.2.5",
@@ -70,14 +70,14 @@
70
70
  "yaml": "2.3.1"
71
71
  },
72
72
  "devDependencies": {
73
- "@finos/legend-dev-utils": "2.0.67",
73
+ "@finos/legend-dev-utils": "2.0.68",
74
74
  "@jest/globals": "29.5.0",
75
75
  "cross-env": "7.0.3",
76
76
  "eslint": "8.42.0",
77
77
  "jest": "29.5.0",
78
78
  "npm-run-all": "4.1.5",
79
79
  "rimraf": "5.0.1",
80
- "sass": "1.63.3",
80
+ "sass": "1.63.4",
81
81
  "typescript": "5.1.3"
82
82
  },
83
83
  "peerDependencies": {
@@ -80,6 +80,11 @@ class LegendStudioApplicationCoreOptions {
80
80
  */
81
81
  TEMPORARY__enableRawSQLExecutor = false;
82
82
 
83
+ /**
84
+ * This flag can be removed when the support the new service registration input collector mechanism is official
85
+ */
86
+ TEMPORARY__enableNewServiceRegistrationInputCollectorMechanism = false;
87
+
83
88
  /**
84
89
  * Indicates whether we should render the new mapping testable editor or the deprecated legacy editor.
85
90
  * This flag will be removed once the editor for testable editor is agreed on.
@@ -34,7 +34,8 @@ function QuickInputDialog<T>(props: {
34
34
  }): React.ReactElement {
35
35
  const { quickInputState } = props;
36
36
  const editorStore = useEditorStore();
37
- const { placeholder, options, getSearchValue, onSelect } = quickInputState;
37
+ const { placeholder, options, getSearchValue, onSelect, customization } =
38
+ quickInputState;
38
39
  const inputRef = useRef<SelectComponent>(null);
39
40
  const close = (): void => editorStore.setQuickInputState(undefined);
40
41
 
@@ -75,6 +76,9 @@ function QuickInputDialog<T>(props: {
75
76
  escapeClearsValue={true}
76
77
  darkMode={true}
77
78
  menuIsOpen={true}
79
+ optionCustomization={{
80
+ rowHeight: customization?.rowHeight,
81
+ }}
78
82
  />
79
83
  </div>
80
84
  </Modal>
@@ -1082,66 +1082,78 @@ export const FunctionEditor = observer(() => {
1082
1082
  ))}
1083
1083
  </div>
1084
1084
  <div className="panel__header__actions">
1085
- {functionEditorState.isRunningQuery ? (
1086
- <button
1087
- className="function-editor__execution__stop-btn"
1088
- onClick={cancelQuery}
1089
- tabIndex={-1}
1090
- >
1091
- <div className="btn--dark btn--caution function-editor__execution__stop-btn__label">
1092
- <PauseCircleIcon className="function-editor__execution__stop-btn__label__icon" />
1093
- <div className="function-editor__execution__stop-btn__label__title">
1094
- Stop
1095
- </div>
1096
- </div>
1097
- </button>
1098
- ) : (
1099
- <div className="function-editor__execution__action-btn">
1085
+ <div className="btn__dropdown-combo btn__dropdown-combo--primary">
1086
+ {functionEditorState.isRunningQuery ? (
1100
1087
  <button
1101
- className="function-editor__execution__action-btn__label"
1102
- onClick={runQuery}
1103
- title="Run Query"
1104
- disabled={executionIsRunning}
1088
+ className="btn__dropdown-combo__canceler"
1089
+ onClick={cancelQuery}
1105
1090
  tabIndex={-1}
1106
1091
  >
1107
- <PlayIcon className="function-editor__execution__action-btn__label__icon" />
1108
- <div className="function-editor__execution__action-btn__label__title">
1109
- Run Query
1092
+ <div className="btn--dark btn--caution btn__dropdown-combo__canceler__label">
1093
+ <PauseCircleIcon className="btn__dropdown-combo__canceler__label__icon" />
1094
+ <div className="btn__dropdown-combo__canceler__label__title">
1095
+ Stop
1096
+ </div>
1110
1097
  </div>
1111
1098
  </button>
1112
- <DropdownMenu
1113
- className="function-editor__execution__action-btn__dropdown-btn"
1114
- disabled={executionIsRunning}
1115
- content={
1116
- <MenuContent>
1117
- <MenuContentItem
1118
- className="function-editor__execution__action-btn__option"
1119
- onClick={generatePlan}
1120
- >
1121
- Generate Plan
1122
- </MenuContentItem>
1123
- <MenuContentItem
1124
- className="function-editor__execution__action-btn__option"
1125
- onClick={debugPlanGeneration}
1126
- >
1127
- Debug
1128
- </MenuContentItem>
1129
- </MenuContent>
1130
- }
1131
- menuProps={{
1132
- anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
1133
- transformOrigin: { vertical: 'top', horizontal: 'right' },
1134
- }}
1135
- >
1136
- <CaretDownIcon />
1137
- </DropdownMenu>
1138
- </div>
1139
- )}
1099
+ ) : (
1100
+ <>
1101
+ <button
1102
+ className="btn__dropdown-combo__label"
1103
+ onClick={runQuery}
1104
+ title="Run Query"
1105
+ disabled={executionIsRunning}
1106
+ tabIndex={-1}
1107
+ >
1108
+ <PlayIcon className="btn__dropdown-combo__label__icon" />
1109
+ <div className="btn__dropdown-combo__label__title">
1110
+ Run Query
1111
+ </div>
1112
+ </button>
1113
+ <DropdownMenu
1114
+ className="btn__dropdown-combo__dropdown-btn"
1115
+ disabled={executionIsRunning}
1116
+ content={
1117
+ <MenuContent>
1118
+ <MenuContentItem
1119
+ className="btn__dropdown-combo__option"
1120
+ onClick={generatePlan}
1121
+ >
1122
+ Generate Plan
1123
+ </MenuContentItem>
1124
+ <MenuContentItem
1125
+ className="btn__dropdown-combo__option"
1126
+ onClick={debugPlanGeneration}
1127
+ >
1128
+ Debug
1129
+ </MenuContentItem>
1130
+ </MenuContent>
1131
+ }
1132
+ menuProps={{
1133
+ anchorOrigin: {
1134
+ vertical: 'bottom',
1135
+ horizontal: 'right',
1136
+ },
1137
+ transformOrigin: {
1138
+ vertical: 'top',
1139
+ horizontal: 'right',
1140
+ },
1141
+ }}
1142
+ >
1143
+ <CaretDownIcon />
1144
+ </DropdownMenu>
1145
+ </>
1146
+ )}
1147
+ </div>
1140
1148
  {editorStore.applicationStore.config.options
1141
1149
  .TEMPORARY__enableFunctionActivatorSupport && (
1142
1150
  <>
1143
1151
  <DropdownMenu
1144
- className="function-editor__activate-btn"
1152
+ className="btn__dropdown-combo"
1153
+ disabled={
1154
+ !editorStore.graphState.functionActivatorConfigurations
1155
+ .length
1156
+ }
1145
1157
  content={
1146
1158
  <MenuContent>
1147
1159
  {editorStore.graphState.functionActivatorConfigurations.map(
@@ -1172,15 +1184,15 @@ export const FunctionEditor = observer(() => {
1172
1184
  transformOrigin: { vertical: 'top', horizontal: 'right' },
1173
1185
  }}
1174
1186
  >
1175
- <div className="function-editor__activate-btn__label">
1176
- <div className="function-editor__activate-btn__label__icon">
1187
+ <div className="btn__dropdown-combo__label">
1188
+ <div className="btn__dropdown-combo__label__icon">
1177
1189
  <LaunchIcon />
1178
1190
  </div>
1179
- <div className="function-editor__activate-btn__label__title">
1191
+ <div className="btn__dropdown-combo__label__title">
1180
1192
  Activate
1181
1193
  </div>
1182
1194
  </div>
1183
- <div className="function-editor__activate-btn__dropdown-btn">
1195
+ <div className="btn__dropdown-combo__dropdown-btn">
1184
1196
  <CaretDownIcon />
1185
1197
  </div>
1186
1198
  </DropdownMenu>
@@ -160,6 +160,7 @@ const ImportModal = observer(
160
160
  <textarea
161
161
  className="relational-data-editor__import__textarea"
162
162
  spellCheck={false}
163
+ placeholder="CSV Text"
163
164
  value={csv}
164
165
  onChange={changeCSV}
165
166
  disabled={isReadOnly}
@@ -260,30 +260,30 @@ const MappingTestQueryEditor = observer(
260
260
  <div className="panel__header__title__label">query</div>
261
261
  </div>
262
262
  <div className="panel__header__actions">
263
- <div className="mapping-test-editor__action-btn">
263
+ <div className="btn__dropdown-combo">
264
264
  <button
265
- className="mapping-test-editor__action-btn__label"
265
+ className="btn__dropdown-combo__label"
266
266
  onClick={editWithQueryBuilder()}
267
267
  title="Edit Query"
268
268
  tabIndex={-1}
269
269
  >
270
- <PencilIcon className="mapping-test-editor__action-btn__label__icon" />
271
- <div className="mapping-test-editor__action-btn__label__title">
270
+ <PencilIcon className="btn__dropdown-combo__label__icon" />
271
+ <div className="btn__dropdown-combo__label__title">
272
272
  Edit Query
273
273
  </div>
274
274
  </button>
275
275
  <DropdownMenu
276
- className="mapping-test-editor__action-btn__dropdown-btn"
276
+ className="btn__dropdown-combo__dropdown-btn"
277
277
  content={
278
278
  <MenuContent>
279
279
  <MenuContentItem
280
- className="mapping-test-editor__action-btn__option"
280
+ className="btn__dropdown-combo__option"
281
281
  onClick={editWithQueryBuilder(true)}
282
282
  >
283
283
  Text Mode
284
284
  </MenuContentItem>
285
285
  <MenuContentItem
286
- className="mapping-test-editor__action-btn__option"
286
+ className="btn__dropdown-combo__option"
287
287
  onClick={clearQuery}
288
288
  >
289
289
  Clear Query
@@ -302,15 +302,7 @@ const MappingTestQueryEditor = observer(
302
302
  </div>
303
303
  {!isStubbed_RawLambda(queryState.query) && (
304
304
  <PanelContent>
305
- <div
306
- className="mapping-test-editor__query-panel__query"
307
- title="Double click to edit in query builder"
308
- onDoubleClick={(event) => {
309
- event.preventDefault();
310
- event.stopPropagation();
311
- editWithQueryBuilder()();
312
- }}
313
- >
305
+ <div className="mapping-test-editor__query-panel__query">
314
306
  <CodeEditor
315
307
  inputValue={queryState.lambdaString}
316
308
  isReadOnly={true}
@@ -791,64 +783,66 @@ export const DEPRECATED__MappingTestEditor = observer(
791
783
  ))}
792
784
  </div>
793
785
  <div className="panel__header__actions mapping-test-editor__header__actions">
794
- {testState.isRunningTest ? (
795
- <button
796
- className="mapping-test-editor__stop-btn"
797
- onClick={cancelTest}
798
- tabIndex={-1}
799
- >
800
- <div className="btn--dark btn--caution mapping-test-editor__stop-btn__label">
801
- <PauseCircleIcon className="mapping-test-editor__stop-btn__label__icon" />
802
- <div className="mapping-test-editor__stop-btn__label__title">
803
- Stop
804
- </div>
805
- </div>
806
- </button>
807
- ) : (
808
- <div className="mapping-test-editor__action-btn">
786
+ <div className="mapping-test-editor__action-btn btn__dropdown-combo btn__dropdown-combo--primary">
787
+ {testState.isRunningTest ? (
809
788
  <button
810
- className="mapping-test-editor__action-btn__label"
811
- onClick={runTest}
812
- disabled={
813
- testState.isExecutingTest || testState.isGeneratingPlan
814
- }
789
+ className="btn__dropdown-combo__canceler"
790
+ onClick={cancelTest}
815
791
  tabIndex={-1}
816
792
  >
817
- <PlayIcon className="mapping-test-editor__action-btn__label__icon" />
818
- <div className="mapping-test-editor__action-btn__label__title">
819
- Run Test
793
+ <div className="btn--dark btn--caution btn__dropdown-combo__canceler__label">
794
+ <PauseCircleIcon className="btn__dropdown-combo__canceler__label__icon" />
795
+ <div className="btn__dropdown-combo__canceler__label__title">
796
+ Stop
797
+ </div>
820
798
  </div>
821
799
  </button>
822
- <DropdownMenu
823
- className="mapping-test-editor__action-btn__dropdown-btn"
824
- disabled={
825
- testState.isExecutingTest || testState.isGeneratingPlan
826
- }
827
- content={
828
- <MenuContent>
829
- <MenuContentItem
830
- className="mapping-test-editor__action-btn__option"
831
- onClick={generatePlan}
832
- >
833
- Generate Plan
834
- </MenuContentItem>
835
- <MenuContentItem
836
- className="mapping-test-editor__action-btn__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
- </div>
851
- )}
800
+ ) : (
801
+ <>
802
+ <button
803
+ className="btn__dropdown-combo__label"
804
+ onClick={runTest}
805
+ disabled={
806
+ testState.isExecutingTest || testState.isGeneratingPlan
807
+ }
808
+ tabIndex={-1}
809
+ >
810
+ <PlayIcon className="btn__dropdown-combo__label__icon" />
811
+ <div className="btn__dropdown-combo__label__title">
812
+ Run Test
813
+ </div>
814
+ </button>
815
+ <DropdownMenu
816
+ className="btn__dropdown-combo__dropdown-btn"
817
+ disabled={
818
+ testState.isExecutingTest || testState.isGeneratingPlan
819
+ }
820
+ content={
821
+ <MenuContent>
822
+ <MenuContentItem
823
+ className="btn__dropdown-combo__option"
824
+ onClick={generatePlan}
825
+ >
826
+ Generate Plan
827
+ </MenuContentItem>
828
+ <MenuContentItem
829
+ className="btn__dropdown-combo__option"
830
+ onClick={debugPlanGeneration}
831
+ >
832
+ Debug
833
+ </MenuContentItem>
834
+ </MenuContent>
835
+ }
836
+ menuProps={{
837
+ anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
838
+ transformOrigin: { vertical: 'top', horizontal: 'right' },
839
+ }}
840
+ >
841
+ <CaretDownIcon />
842
+ </DropdownMenu>
843
+ </>
844
+ )}
845
+ </div>
852
846
  </div>
853
847
  </div>
854
848
  <div className="mapping-test-editor__content">
@@ -419,7 +419,7 @@ const MappingFilterEditor = observer(
419
419
  isReadOnly ||
420
420
  instanceSetImplementationState.isConvertingTransformLambdaObjects
421
421
  }
422
- forceBackdrop={!!filterState.parserError}
422
+ forceBackdrop={Boolean(filterState.parserError)}
423
423
  lambdaEditorState={filterState}
424
424
  expectedType={PrimitiveType.BOOLEAN}
425
425
  />
@@ -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}