Use labels from the engine if they are available (#9290)

Fix small regression on develop for dropdown labels.

<img width="645" alt="Screenshot 2024-03-05 at 7 09 22 PM" src="https://github.com/enso-org/enso/assets/6566674/caec9cbc-ef8d-4ac2-8ec1-cf2de909f2d4">
This commit is contained in:
Ilya Bogdanov 2024-03-11 14:56:56 +04:00 committed by GitHub
parent 8e1bb16afd
commit 793fb8f48e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 13 deletions

View File

@ -100,8 +100,8 @@ test('Selection widgets in Data.read node', async ({ page }) => {
const pathArg = argumentNames.filter({ has: page.getByText('path') }) const pathArg = argumentNames.filter({ has: page.getByText('path') })
await pathArg.click() await pathArg.click()
await expect(page.locator('.dropdownContainer')).toBeVisible() await expect(page.locator('.dropdownContainer')).toBeVisible()
await dropDown.expectVisibleWithOptions(page, ['"File 1"', '"File 2"']) await dropDown.expectVisibleWithOptions(page, ['File 1', 'File 2'])
await dropDown.clickOption(page, '"File 2"') await dropDown.clickOption(page, 'File 2')
await expect(pathArg.locator('.WidgetText > input')).toHaveValue('File 2') await expect(pathArg.locator('.WidgetText > input')).toHaveValue('File 2')
// Change value on `path` (dynamic config) // Change value on `path` (dynamic config)
@ -114,8 +114,8 @@ test('Selection widgets in Data.read node', async ({ page }) => {
notAppliedArguments: [1], notAppliedArguments: [1],
}) })
await page.getByText('path').click() await page.getByText('path').click()
await dropDown.expectVisibleWithOptions(page, ['"File 1"', '"File 2"']) await dropDown.expectVisibleWithOptions(page, ['File 1', 'File 2'])
await dropDown.clickOption(page, '"File 1"') await dropDown.clickOption(page, 'File 1')
await expect(pathArg.locator('.WidgetText > input')).toHaveValue('File 1') await expect(pathArg.locator('.WidgetText > input')).toHaveValue('File 1')
}) })
@ -193,8 +193,8 @@ test('Managing aggregates in `aggregate` node', async ({ page }) => {
// Set column // Set column
const columnArg = firstItem.locator('.WidgetSelection').first() const columnArg = firstItem.locator('.WidgetSelection').first()
await columnArg.click() await columnArg.click()
await dropDown.expectVisibleWithOptions(page, ['"column 1"', '"column 2"']) await dropDown.expectVisibleWithOptions(page, ['column 1', 'column 2'])
await dropDown.clickOption(page, '"column 1"') await dropDown.clickOption(page, 'column 1')
await expect(columnsArg.locator('.WidgetToken')).toContainText([ await expect(columnsArg.locator('.WidgetToken')).toContainText([
'Aggregate_Column', 'Aggregate_Column',
'.', '.',
@ -232,8 +232,8 @@ test('Managing aggregates in `aggregate` node', async ({ page }) => {
const secondItem = columnsArg.locator('.item > .WidgetPort > .WidgetSelection').nth(1) const secondItem = columnsArg.locator('.item > .WidgetPort > .WidgetSelection').nth(1)
const secondColumnArg = secondItem.locator('.WidgetSelection').first() const secondColumnArg = secondItem.locator('.WidgetSelection').first()
await secondColumnArg.click() await secondColumnArg.click()
await dropDown.expectVisibleWithOptions(page, ['"column 1"', '"column 2"']) await dropDown.expectVisibleWithOptions(page, ['column 1', 'column 2'])
await dropDown.clickOption(page, '"column 2"') await dropDown.clickOption(page, 'column 2')
await expect(secondItem.locator('.WidgetToken')).toContainText([ await expect(secondItem.locator('.WidgetToken')).toContainText([
'Aggregate_Column', 'Aggregate_Column',
'.', '.',

View File

@ -19,6 +19,7 @@ import { Ast } from '@/util/ast'
import { targetIsOutside } from '@/util/autoBlur' import { targetIsOutside } from '@/util/autoBlur'
import { ArgumentInfoKey } from '@/util/callTree' import { ArgumentInfoKey } from '@/util/callTree'
import { arrayEquals } from '@/util/data/array' import { arrayEquals } from '@/util/data/array'
import type { Opt } from '@/util/data/opt'
import { qnLastSegment, tryQualifiedName } from '@/util/qualifiedName' import { qnLastSegment, tryQualifiedName } from '@/util/qualifiedName'
import { computed, ref, watch } from 'vue' import { computed, ref, watch } from 'vue'
@ -36,13 +37,13 @@ interface Tag {
parameters?: ArgumentWidgetConfiguration[] parameters?: ArgumentWidgetConfiguration[]
} }
function tagFromExpression(expression: string): Tag { function tagFromExpression(expression: string, label?: Opt<string>): Tag {
const qn = tryQualifiedName(expression) const qn = tryQualifiedName(expression)
if (!qn.ok) return { expression } if (!qn.ok) return { expression, ...(label ? { label } : {}) }
const entry = suggestions.entries.getEntryByQualifiedName(qn.value) const entry = suggestions.entries.getEntryByQualifiedName(qn.value)
if (entry) return tagFromEntry(entry) if (entry) return tagFromEntry(entry)
return { return {
label: qnLastSegment(qn.value), label: label ?? qnLastSegment(qn.value),
expression: qn.value, expression: qn.value,
} }
} }
@ -61,14 +62,14 @@ function tagFromEntry(entry: SuggestionEntry): Tag {
const staticTags = computed<Tag[]>(() => { const staticTags = computed<Tag[]>(() => {
const tags = props.input[ArgumentInfoKey]?.info?.tagValues const tags = props.input[ArgumentInfoKey]?.info?.tagValues
if (tags == null) return [] if (tags == null) return []
return tags.map(tagFromExpression) return tags.map((t) => tagFromExpression(t))
}) })
const dynamicTags = computed<Tag[]>(() => { const dynamicTags = computed<Tag[]>(() => {
const config = props.input.dynamicConfig const config = props.input.dynamicConfig
if (config?.kind !== 'Single_Choice') return [] if (config?.kind !== 'Single_Choice') return []
return config.values.map((value) => ({ return config.values.map((value) => ({
...tagFromExpression(value.value), ...tagFromExpression(value.value, value.label),
parameters: value.parameters, parameters: value.parameters,
})) }))
}) })