README
Electrum Field
The electrum-field module handles state associated with form fields and is
used by electrum.
Manipulating field states
A field can have multiple states associated with it:
- A state describing whether the field is enabled or read-only.
- A state describing the position of the cursor or the selection.
- etc.
Each state is represented as a simple object.
Fingerprint
The fingerprint of a state is built by concatenating the sorted
names of the state's properties (property id is not included in
the computation of the fingerprint).
import {FieldStates} from 'electrum-field';
const state = {
id: '1234',
begin: 12,
end: 23
};
expect (FieldStates.fingerprint (state)).to.equal ('begin,end');
FieldStates
The states are managed by class FieldStates, which maintains a read-only
array of simple state objects. An instance of FieldStates is immutable.
To create a FieldStates instance, use one of the static methods:
FieldStates.create ()→ creates an empty states collection.FieldStates.from (s1, s2, ...)→ create a states collection based on the provided statess1,s2, etc.
To manipulate a FieldStates instance:
add (state)→ adds or updates the state based; matching with any existing states is based on the fingerprint.remove (state)→ removes the state.find (state)→ returns the immutable state (if it is found) orundefinedotherwise.get ()→ returns an immutable array of immutable states, as they are stored in theFieldStatesinstance.
Methods remove() and find() accept either a simple object (the
values of the fields are not used in the comparison) or a fingerprint
to specify the state.
Methods add() and remove() return a new instance of FieldStates if
the state changes; otherwise, they just return the same instance.
Note: states are considered to be equal if they respond
trueto shallow equality. Since states should be simple objects where all properties are just value types, a shallow comparison is enough.