re-formality icon indicating copy to clipboard operation
re-formality copied to clipboard

Record value of a field

Open alex35mil opened this issue 5 years ago • 1 comments

There are 2 possible use-cases for record value. Both can use [@field.entity] attribute.

  1. Deserialization of set of fields into single type:
type input = {
  date: [@field.entity] date',
}
and date' = {
  day: int,
  month: int,
  year: int,
};

type output = {date: Js.Date.t};

type validators = {
  date: {
    entity: date' => result(Js.Date.t, message),
    fields: {
      day: {
        strategy: Strategy.t,
        validate: input => result(int, message),
      },
      ...
    }
  }
};

// Interface
form.updateDateYear(2020)
form.dateYearResult
form.dateResult
  1. Scoping set of fields. It might be useful when there is select in the form which affects which set of fields would be shown to a user.
type input = {
  select,
  a: [@field.entity] a',
  b: [@field.entity] b',
}
and select = A | B,
and a' = { fieldA: string }
and b' = { fieldB: string };

type output = {
  select,
  a: a',
  b: b',
};

I'm not sure if the second one is useful though since it's possible to implement it using current api. But if it is, then the question is how to name each.

Also, the prototype of the former is not really thought out so suggestions are welcome.

alex35mil avatar Mar 21 '20 13:03 alex35mil

As an option:

[@field.entity {output: Abstract}] // #1: deserialization into single type
[@field.entity {output: Record}] // #2: fields scoping

Not sure about Abstract & Record naming, prolly ok.

alex35mil avatar May 23 '20 08:05 alex35mil