diff --git a/packages/editor-ui/src/components/ExpressionEdit.vue b/packages/editor-ui/src/components/ExpressionEdit.vue
index 7540d020c..7e4deea9a 100644
--- a/packages/editor-ui/src/components/ExpressionEdit.vue
+++ b/packages/editor-ui/src/components/ExpressionEdit.vue
@@ -65,9 +65,10 @@
{{ $locale.baseText('expressionEdit.resultOfItem1') }}
-
@@ -82,7 +83,6 @@
import { defineComponent } from 'vue';
import { mapStores } from 'pinia';
import ExpressionEditorModalInput from '@/components/ExpressionEditorModal/ExpressionEditorModalInput.vue';
-import ExpressionEditorModalOutput from '@/components/ExpressionEditorModal/ExpressionEditorModalOutput.vue';
import VariableSelector from '@/components/VariableSelector.vue';
import type { IVariableItemSelected } from '@/Interface';
@@ -96,12 +96,14 @@ import { createExpressionTelemetryPayload } from '@/utils/telemetryUtils';
import { useDebounce } from '@/composables/useDebounce';
import type { Segment } from '@/types/expressions';
+import ExpressionOutput from './InlineExpressionEditor/ExpressionOutput.vue';
+import { outputTheme } from './ExpressionEditorModal/theme';
export default defineComponent({
name: 'ExpressionEdit',
components: {
ExpressionEditorModalInput,
- ExpressionEditorModalOutput,
+ ExpressionOutput,
VariableSelector,
},
props: {
@@ -149,6 +151,7 @@ export default defineComponent({
latestValue: '',
segments: [] as Segment[],
expressionsDocsUrl: EXPRESSIONS_DOCS_URL,
+ theme: outputTheme(),
};
},
computed: {
@@ -160,11 +163,7 @@ export default defineComponent({
this.latestValue = this.modelValue;
const resolvedExpressionValue =
- (
- this.$refs.expressionResult as {
- getValue: () => string;
- }
- )?.getValue() || '';
+ (this.$refs.expressionResult as InstanceType)?.getValue() || '';
void this.externalHooks.run('expressionEdit.dialogVisibleChanged', {
dialogVisible: newValue,
parameter: this.parameter,
diff --git a/packages/editor-ui/src/components/ExpressionEditorModal/ExpressionEditorModalOutput.vue b/packages/editor-ui/src/components/ExpressionEditorModal/ExpressionEditorModalOutput.vue
deleted file mode 100644
index 3e1d84524..000000000
--- a/packages/editor-ui/src/components/ExpressionEditorModal/ExpressionEditorModalOutput.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
-
-
diff --git a/packages/editor-ui/src/components/InlineExpressionEditor/ExpressionOutput.vue b/packages/editor-ui/src/components/InlineExpressionEditor/ExpressionOutput.vue
new file mode 100644
index 000000000..ab545be0a
--- /dev/null
+++ b/packages/editor-ui/src/components/InlineExpressionEditor/ExpressionOutput.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
diff --git a/packages/editor-ui/src/components/InlineExpressionEditor/InlineExpressionEditorOutput.vue b/packages/editor-ui/src/components/InlineExpressionEditor/InlineExpressionEditorOutput.vue
index ba45d6d1b..3c160848d 100644
--- a/packages/editor-ui/src/components/InlineExpressionEditor/InlineExpressionEditorOutput.vue
+++ b/packages/editor-ui/src/components/InlineExpressionEditor/InlineExpressionEditorOutput.vue
@@ -1,13 +1,11 @@
@@ -116,7 +35,11 @@ onBeforeUnmount(() => {
{{ i18n.baseText('parameterInput.resultForItem') }} {{ hoveringItemNumber }}
-
+
{
+ test('should render duplicate segments correctly', async () => {
+ const { getByTestId } = renderComponent(InlineExpressionEditorOutput, {
+ pinia: createTestingPinia(),
+ props: {
+ hoveringItemNumber: 0,
+ segments: [
+ {
+ from: 0,
+ to: 5,
+ plaintext: '[1,2]',
+ kind: 'plaintext',
+ },
+ {
+ from: 0,
+ to: 1,
+ plaintext: '[',
+ kind: 'plaintext',
+ },
+ {
+ from: 1,
+ to: 2,
+ plaintext: '1',
+ kind: 'plaintext',
+ },
+ {
+ from: 2,
+ to: 3,
+ plaintext: ',',
+ kind: 'plaintext',
+ },
+ {
+ from: 3,
+ to: 4,
+ plaintext: '2',
+ kind: 'plaintext',
+ },
+ {
+ from: 4,
+ to: 5,
+ plaintext: ']',
+ kind: 'plaintext',
+ },
+ ],
+ },
+ });
+ expect(getByTestId('inline-expression-editor-output')).toHaveTextContent('[1,2]');
+ });
+
+ test('should render segments with resolved expressions', () => {
+ const { getByTestId } = renderComponent(InlineExpressionEditorOutput, {
+ pinia: createTestingPinia(),
+ props: {
+ hoveringItemNumber: 0,
+ segments: [
+ {
+ kind: 'plaintext',
+ from: 0,
+ to: 6,
+ plaintext: 'before>',
+ },
+ {
+ kind: 'plaintext',
+ from: 6,
+ to: 7,
+ plaintext: ' ',
+ },
+ {
+ kind: 'resolvable',
+ from: 7,
+ to: 17,
+ resolvable: '{{ $now }}',
+ resolved: '[Object: "2024-04-18T09:03:26.651-04:00"]',
+ state: 'valid',
+ error: null,
+ },
+ {
+ kind: 'plaintext',
+ from: 17,
+ to: 18,
+ plaintext: ' ',
+ },
+ {
+ kind: 'plaintext',
+ from: 18,
+ to: 24,
+ plaintext: ' [Object: "2024-04-18T09:03:26.651-04:00"]