Skip to main content
Glama
nrwl

Nx MCP Server

Official
by nrwl
array-field.ts3.21 kB
import { html, LitElement } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { Field } from './mixins/field-mixin'; import { spread } from '@open-wc/lit-helpers'; import { intellijErrorRingStyles, intellijFieldColors, intellijFieldPadding, intellijFocusRing, vscodeErrorStyleOverrides, } from '@nx-console/shared-ui-components'; import { FieldWrapper } from './mixins/field-wrapper-mixin'; @customElement('array-field') export class ArrayField extends FieldWrapper(Field(LitElement)) { @state() private elements: string[] = []; renderField() { return html`<div> <div class="flex flex-row gap-2"> ${this.renderInputField()} <button-element text="Add" appearance="secondary" @click="${this.addValue}" data-cy="${this.fieldId}-add-button" class="flex items-center self-center" style="${this.shouldRenderError() ? '--field-border-color: var(--error-color); --focus-border-color: var(--error-color);' : ''}" ></button-element> </div> <div class="mt-2"> <p>${this.elements.length} items</p> <div class="mt-2 flex flex-row gap-4"> ${this.elements.map( (element, index) => html`<badge-element text="${element}" fieldId="${this.fieldId}" @remove="${() => this.removeValue(index)}" ></badge-element>`, )} </div> </div> </div>`; } private renderInputField() { if (this.editor === 'intellij') { return html` <input class="${intellijFieldColors} ${intellijFocusRing} ${intellijFieldPadding} ${intellijErrorRingStyles( this.shouldRenderError(), )})} grow rounded" type="text" @keydown="${this.handleEnterKeyAdd}" ${spread(this.ariaAttributes)} />`; } else { return html`<vscode-textfield type="text" class="focus:border-focusBorder grow" @keydown="${this.handleEnterKeyAdd}" style="border-width: calc(var(--border-width) * 1px);" ?invalid=${this.shouldRenderError()} ${spread(this.ariaAttributes)} ></vscode-textfield>`; } } private get inputFieldSelector() { return this.editor === 'intellij' ? 'input' : 'vscode-textfield'; } private handleEnterKeyAdd(event: KeyboardEvent) { if (event.key === 'Enter') { this.addValue(); } } private addValue() { const textfield = this.querySelector(this.inputFieldSelector); const inputValue = textfield?.value; if (!inputValue) { return; } this.elements = [...this.elements, inputValue]; textfield.value = ''; this.dispatchValue(this.elements); } private removeValue(index: number) { const copy = [...this.elements]; copy.splice(index, 1); this.elements = copy; this.dispatchValue(this.elements); } setFieldValue(value: string | boolean | number | string[] | undefined) { if (typeof value === 'string') { this.elements = value.split(','); } else if (Array.isArray(value)) { this.elements = value; } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nrwl/nx-console'

If you have feedback or need assistance with the MCP directory API, please join our Discord server