►
Description
In this pair programming session we work even more on wrapping up gl-form-fields.
A
We're
resurrecting
GL
form
fields
and
I
wasn't
finished
with
it.
So
we
have
some
unit
tests
to
write.
A
And
but
it
seems
like
maybe
I,
there's
a
validators
at
spec,
but
is
there
also
a
form
field?
Validators
aspect
like
did
I
just
commit
a
completely
empty
file.
That's
not
referencing
anything
yeah!
This
is
the
completely
empty
files.
Validators
respect.js,
oh
there's
form
field
valid
they're,
both
empty
all
right,
I!
Think
we
want
your
field.
Validator
I,
think
the
other
one
is
is
not
means.
Yes,
because
the
the
component
is
called
is
called
form
field
validators,
okay,
so
let's
go
to
validators.
A
C
A
A
It
should
call
validators.
C
A
A
C
A
Programming
language
yeah:
let's.
C
C
A
A
That's
it
I
think.
That's
it.
A
C
C
Root
yeah.
A
A
A
Actually-
and
we're
going
to
do
we
should
we
should
spy
on
this.
We
should
spy
on
this
validator.
How
do
you
do
that
with
Jeff?
You
just
adjust
Dot
mock,
validators
right
and
now
everything.
A
A
A
A
A
Fill
and
like
Matt
and
then
that
doesn't
even
really
work
because
it
has
a
length
of
10,
but
it
doesn't
iterate
over
the
empty
things.
Yes,
you
know,
you're
I
see
what
you're
saying.
Yes,
that
is
frustrating
but
I
have
like
ingrained
in
my
head
array:
number
dot
fill
0.map
whatever,
and
it's
like
that's
yeah
yeah.
So.
D
A
Still
kind
of
it's
kind
of
annoying,
though
yeah,
it's
embarrassing
how
other
languages
have
cool
like
range
functions
and
stuff
and
yeah
or
just
like
whole
constructs
where
you
can
do
like
one
dot
dot.
Five
yeah.
C
C
D
C
A
A
B
A
It's
do
not
call
validators
when
told
not
to
we're
gonna
copy
the
same
function
here,
except
we're
also
gonna,
say.
C
A
That
one
passes,
that's
how
we
write
a
whole
test
Suite.
We
just
copy
the
test
block
that
passes
into
all
of
our
other
test
cases
and
everything
important
and
then
we
add
a
little
knot
in
here.
Oh
interesting
and
look
good
at
it.
It
runs
it
passes.
This
is
some
hardcore
tdd
that
you're
you're,
seeing
right
now,
Lee.
B
A
A
All
right
we
have
tests.
Oh
my
gosh.
We
we
wrote
all
the
tests
passing
first,
try
all
right,
we
well,
we
need
it.
We
we
need
one
more
though
it
to
do
should
well
we'll
just
we
don't
need
it
to
do.
Should
emit
update.
Oh.
C
A
You're
right
is
this:
is
this
like
the
Boolean
result
or
the
string
or
it's
the
string?
It's
the
string
with
with
error.
D
Message
with
the
3D
results,
validator.
A
So
let's
create
the
wrapper
and
then
let's
set
the
prop
to
Value
of
empty
and
then
assert
that
it
did
it.
So
it's
doing
wrapper.
That's
that
crop
set
porpoise
I.
C
A
D
C
D
B
A
D
A
A
Oh,
oh,
no!
Yes,
it
emitted
a
function.
A
A
No,
that
isn't
clear
that
isn't
clear
at
all.
I
understand
why
we
did
that,
though
I
don't
know
what
we
want
to
do
to
improve
that
maybe,
but.
A
B
While
that's
pushing
and
catch
me
up,
but
we
is
this
part
of
the
form
fields
or
is
form-filled
star,
and
this
is
a
kind
of
bolt-on
on
top
of
it,
we
split
it
out
into
to
kind
of
a
validator
and
the
actual
generator
so
to
speak.
A
This
is
a
great
question,
so
this
is
a
implementation
detail
of
form
fields,
so
this
unit
is
not
expected
to
be
imported
outside
of
gitlab
UI
this
component.
A
A
We
would
run
the
validators
for
everything
again
right,
and
so
somehow
we
needed
to
make
it
smarter
so
that
it
was
selective
of
what
state
it
was
updating
based
on
what
nested
state
it
was
watching
and
I
tried.
One
round
of
that
and
I
didn't
like
what
happened,
because
I
didn't
put
it
to
a
separate
component
created
a
whole
bunch
of
Watchers
inside
of
the
main
component,
and
it
got
very
convoluted,
but
I
had
a
test
there
to
ensure
that
we
were
still
doing
it.
A
So
with
that
test
I
then
realized
components
are
just
State
Watchers,
so
I
just
pulled
this
form
field,
validator
component
out
to
watch
for
the
value
the
validators
and
it
will
update
whenever
those
change-
and
that
was
working
really
great
and
my
awesome
integration
tests
still
passed.
So
that
was
a
a
nice
refactor.
So.
B
A
I've
also
had
someone
reach
out
because
related
to
view
three.
It
sounds
like
one
of
the
validator
libraries
that's
used
in
the
customers
project
or
something
else
they're
wanting
to
move
away
from
it.
So
awesome,
yeah
cool.
Are
you
optimizing
I'm
trying
to
think
about
it?
You
know
so
like
find,
would
return
the
function,
but
it
would
have
to
run
the
function
so
that
doesn't
really
save
us
anything
with
some
some
bails
right
at
the
beginning,
the
JavaScript
yeah
it'd
be
cool.
A
If
it'd
be
cool,
if
you
could
do
the,
what
do
they
call?
It
I
forgot
what
the
functional
term
for
it
would
be,
but
if,
when
I
create
a
map,
I
haven't
streamed
through
everything
yet
like.
If.
A
How
interesting
reduce
wow
that's
a
good
idea.
I
can
see
that
being
the
Catalyst
for
some
sort
of
deferred
streaming
thing,
I
think
this
is
good
to
do
and
then
I
think
we
had.
The
docs
was
maybe
the
other
to
do.
C
A
C
A
A
C
A
B
B
A
C
A
No,
no,
let's
keep
it
like
that.
I
almost
wouldn't
even
specify
the
generic
there,
because
I
don't
want
to
freak
people
out.
You
know,
but
well
you
know,
I
understand,
I'll
I'll,
make
sure
this
is
right
before
I
push
it
up
cool
because
and
then
field
definitions-
that's
in
this
in
here
some,
oh,
yes,
I
did
in
this
JS
doc
style.
C
A
D
Has
a
has
a
has
a
validators.
A
B
A
Yes
and
I
and
I
looked
into
that
and
it's
scary,
no,
no,
no.
A
It's
still
doable
as
we
have
it,
because
the
parent
component
has
the
state
of
all
the
values,
so
you
can
actually
do
you
could
do
the
validator
just
based
on
your
state,
I.
Think
I
think
it's
not
it's
not
it's
not
as
functional
and
nice
as
like
it
could
be,
but
I
don't
I,
don't
know
my
for
some
reason,
my
memory,
if
this
is
a
little
there's,
some
cracks
there.
A
This
is
just
an
object.
We
don't
care
and
then
there's
a
label
which
is
the
screen.
A
D
A
A
When
Jarvis
when
typescript
first
came
out,
everyone
was
just
doing
like
array.
That's.
C
A
D
A
C
D
B
B
Opportunity
when
this
does
get
merged
to
look
at
some
of
our
Legacy
stuff,
you
know
a
lot
of
the
settings
that
are
still
hanging
around
in
Hamel,
where
we've
got
weird
settings
pages
with
some
view:
components
mixed
in
amongst,
like
ham,
all
forms
Etc
yeah,
maybe
if
it
makes
it
really
easy
to
to
migrate.
I
have
more
form
over
to
a
view
component,
where
we've
kind
of
got
a
bit
of
a
mix
and
match
at
the
moment.
A
A
Well,
I
just
mean
like
maintaining,
maintaining
a
view.
Template
is
different
than
maintaining
a
large
Json
object.
You
know,
I
mean
yeah
yeah
and
is
one
preferable
than
another.
Hopefully
our
Json
object.
Isn't
large
I
think
it's
going
to
be
nothing
but
helpful,
because
the
view
all
the
view
templates
so
much.
B
I
I
think
it
is
what
you're
saying
that
so
at
the
moment,
we
would
test
our
view
component
that
would
have
hard-coded
builds
in
it
and
you
can
test
those
hard-coded
fields
if
we're
defining
a
Json
object
or
an
object
that
we're
passing
to
this
component
and
this
component's
got
its
own
tests
and
we
kind
of
don't
need
to
test
the
Json
object.
Yeah.
That
then
becomes
a
bit
tricky
so,
but
you
would
yeah
what
would
you
test
me.
A
B
Think
you
would
wouldn't
you,
because
you
want
to
test
that.
You
know
if
I
type
this
in
this
box
this
in
this
box
and
this
in
this
box
and
hit
save.
Then
it
emits
this
objects,
something
like
that
yeah.
That
might
even
be
something
that's
worth
us
documenting,
what
our
sort
of
suggestion,
if
we're
allowed
to
have
a
bias
as
to
how
you
test
an
implementation
of
this.
A
I
I
think
I'd
like
to
I
think
I'd
like
for
us
to
to
merge
this.
A
B
Is
it
what's
the
word,
it's.
C
B
It
was
DB
and
I
if
it
was
if
it
was
non-inclusive.
A
A
C
A
I
guess
it
makes
sense
for
things
like
this,
because
that's
the
word
you
would
need
to
just
that's
that's
the
word.
You
move
over
to
that's
cool.
Okay.
Now
it
goes
away.
It
also
doesn't
like
are
named
as
much
because
it
has
like
I
think
it
expects
you
to
write
in
a
very
specific
tone,
but
I
kind
of
ignore
that
one.
B
Plug-In
I
mean:
what
are
you
even?
Is
this
video.
B
I'm
I'm
interested
it's
yeah
I'm,
trying
to
get
myself
in
the
habit
of
the
whole
active
voice.
Second
person
imperative
tone,
Etc
and
I
I
really
struggle
with
it
and
if
I
had
something
that
was
able
to
help
me
with
that,
that'd
be
really
awesome.
Although
clearly
I'm
not
gonna
jump
ship
to
Emax,
but
if
it's
something
that
I
can
plug
into
severe
Stone,
then.
A
How
was
because
I
know
that
the
your
Linux
machine
died
some
time
ago
Andrew.
So
how
was
how
was
porting
over
Doom
Max?
A
This
is
the
third
part
of
it.
Maybe
then
yeah
I
knew
going
in
that
it
was
going
to
work
at
least,
but
did
the
the
secret
sauce
is
that
I
have
I
use
a
I
use
a
package
manager
called
Nyx?
A
Is
that
that
even
works
on
a
map?
Yes,
it
does
with
a
minor
exception
on
this.
In
some
places:
okay,
cool
but
yeah.
You
don't
get
like
the
fun
automatic
system,
D
service
kind
of
stuff
from
it,
unfortunately,
which
means,
but
there's
some
good
translations
to
like
launch
CTL
stuff
for
important
things
like
the
Emax
Daemon
and
gpg
agent,
and
that
kind
of
stuff,
interesting.
C
A
C
C
D
Map
value,
we're
validators
custom
form.
A
B
D
B
B
A
B
A
C
A
That
sounds
like
that
reminds
me
of
Sarah
and
she
would
whenever
she
would
introduced
something
it
didn't
want,
any
anyone
to
actually
depend
on
it
or
use
it.
She
named
it
some
really
long
ridiculous
name,
yeah
the
people
away,
I
always
recommended
that
you
just
gotta
you
gotta,
you
gotta,
be
like
really
I.
Remember
that
we
did
like
a
big
CSS
migration.
It
was
like
really,
please
don't
use
this
one
like
go.
Look
somewhere
else,
don't
look
here.
What
are
you
doing.
B
That's
what
I
quite
like
actually
about
the
alpha
on
the
graphql
field,
so
they
don't
even
appear
in
the
the
all-time
complete
but
I
suppose
that's
both
a
prior,
an
account.
Isn't
it
sometimes.
A
All
right
there's
one
more
thing
with
form:
Fields
I'm
realizing
and
we
might
have
just
about
enough
time
to
take
care
of
it.
Do
you
want?
Do
you
want
yeah?
It
was
because
I
I
didn't
add
the
label
ID
stuff,
so
it
was
using
field
sets.
A
So
we
might
need
to
start
the
storybook
to
get
feedback
on
what
we
change
here.
Sure
what
if
I
told
you
it
was
running
this
whole
time,
what
wow,
where's,
zoom,
zoom,
Zoom
where's,
my
bar
Zoom.
B
A
B
Save
my
or
we
something
catch
wide.
A
Aren't
you
we
just
talked
about
this
issue
and
I
wasn't
sure
if
I
handled
it
or
not
yeah,
so
you
see
how
I'm
just
using
the
state
Works
okay,
because
yeah,
because
we
were
talking
about
how
we
weren't
sure
how
this
was
going
to
work
but
yeah
this
this.
Actually,
you
know
what
this
is.
This
is
actually
probably
fine.
This
is
a
fine
way
to
do
it.
Yeah.
A
Okay,
so
we
don't
like,
apparently
we
don't
like
field
sets
okay,
so
this
Peter
mentioned
the
fix
I.
Think
in
one
of
the
comments.
B
A
No,
no!
No.
We
want
to
generate
IDs
yeah,
that's
fine!
Let
me
generate
IDs
I
thought.
I
thought
we
could
potentially
hook
into
how
bootstrap
does
it
but
I'm
starting
to
think?
Maybe
that's
not
going
to
work
out
I,
don't
think
bootstrap
really
does
it.
Let's
use.
C
A
A
C
D
C
D
A
A
Did
the
ID
work?
Oh
yeah
field,
60
field,
61.
yeah,
so
that's
that's,
not
working.
That
makes
sense.
Let's
go
to
if
you
scroll
up
to
on
our
template.
D
A
Fields
to
render
is
where
we
actually
have
have
decorated
the
fields.
Okay,
ID
here
easy,
very
easy.
A
I
actually
have
to
I
actually
have
to
hop
off.
So
sorry,.
A
Do
we
want
to
put
it
above
here
in
case
you
pass
your
own?
No
we're
we're
not
expecting
you
to
do
that
right.
So
we
do.
We
can
just
do
field
dot
IDE.
Here
we
do.
A
That
should
be
it
and
we
look
in
here
and
we
see
divs,
we
see
we
have
form
field
for
GL
form
field
76.
The
input
has
GL
form
field,
76,
we've
done
it
all
right,
go
ahead
and
push
this
up.
The
test
might
need
to
be
slightly
updated
because
we
updated
the
validation
stuff.
But
that's
that's
easy
to
do.
I
can
do
that.
So
thanks
Andrew.
This
is
super
helpful.