Skip to content

key-value

Editable map of string pairs, bound to an object attribute (typically a JSON column).

The pairs are FLAT and both sides are strings — that is the §11.1 row (vine.record(vine.string())), and it is what makes the type safe to hand an editor that lets a user invent keys. Nested or typed documents are F.json, which validates through the author’s own rules().

Builder F.keyValue(attribute: string): KeyValueField
Wire type key key-value
Class chain KeyValueFieldField
Detail projection key-value-entry
Column counterpart (not tabulatable)

Example

import { F } from '@adonia/core'

F.keyValue('meta')
  .label('Metadata')
  .keyLabel('Property')
  .valueLabel('Value')
  .editableKeys()
  .maxPairs(20)

Props

Beyond the shared field DSL:

Prop Declared on Behaviour
keyLabel(text: string): this KeyValueField Header of the key column; the client’s own wording applies when unset.
valueLabel(text: string): this KeyValueField Header of the value column.
addable(enabled = true): this KeyValueField Whether the editor offers an “add pair” control (default true). addable(false) with editableKeys() off pins the key set to whatever the record already carries — the shape for a fixed settings map.
deletable(enabled = true): this KeyValueField Whether existing pairs may be removed (default true).
editableKeys(enabled = true): this KeyValueField Whether existing KEYS may be renamed (default false).
minPairs(count: number): this KeyValueField Minimum number of pairs; compiles to the record’s minLength (§11.1).
maxPairs(count: number): this KeyValueField Maximum number of pairs; compiles to the record’s maxLength (§11.1).

Validation

Vine base: vine.string().

§11.1 mapping: vine.record(vine.string()) with the declared pair bounds.

Contributed by KeyValueField.vineSchema() in packages/core/src/schema/fields/key_value.ts. The shared modifiers (required, nullable, requiredWhen, unique, optionality) are applied on top by Field.buildValidation, and a rules() override replaces the base entirely — the validator compiler never branches on the field class.

Declared in

  • packages/core/src/schema/fields/key_value.tsKeyValueField
Navigation

Type to search…

↑↓ navigate↵ selectEsc close