getto-systems / elm-field / Getto.Field.Edit

edit field utilities

fields =
  { name = "name" |> Conflict.init signature ""
  }

form = fields |> Edit.form

name_ = Form.prop .name (\v m -> { m | name = v })
get_name = .name

blank = Validate.blank "blank"

(isStatic,options) =
  { error       = "conflict"
  , form        = form
  , last        = http.get.response
  , isConflict  = http.put.isConflict
  , isDifferent = response.isDifferentResponse
  }
  |> Edit.options

view a =
  { name = a
  }

( isStatic
, Conflict.compose view
  ( options |> ( ( name_,  get_name  ) |> Conflict.single [ fields.name |> V.blank ] ) )
)
|> Edit.view
  { data = "data"
  }
{-
  { isStatic = True
  , state = HasError
  , data =
    { data = "data"
    }
  , form =
    { name =
      ( "name"
      , { field = model.name
        , prop  = name_
        }
      , { errors = [ "blank" ] -- model.name |> blank
        , isModified = True
        }
      )
    }
  }
-}

Definition


type Form response fields

edit/static state and fields


type alias View data model =
{ isStatic : Basics.Bool
, state : AggregateState
, data : data
, form : model 
}

isStatic, state (HasError, HasModified) and form


type AggregateState
    = Same
    | HasError
    | HasModified

fields HasError or HasModified or Same

Construction

form : fields -> Form response fields

construct form

{ name = "name" |> Conflict.init signature ""
}
|> Edit.form

options : Options response fields -> ( Basics.Bool, Getto.Field.Conflict.Options (Form response fields) response )

construct Conflict.Options

{ error       = "conflict"
, form        = form
, last        = http.get.response
, isConflict  = http.put.isConflict
, isDifferent = response.isDifferentResponse
}
|> Edit.options
-- ( isStatic, options )

view : data -> ( Basics.Bool, Getto.Field.Conflict.View model ) -> View data model

construct Conflict.Options

let
  fields = form |> Edit.fields
in
  ( isStatic
  , Conflict.compose view
    ( options |> ( ( name_,  get_name  ) |> Conflict.single [ fields.name |> V.blank ] ) )
  )
  |> Edit.view

Getter

fields : Form response fields -> fields

form fields

Update

update : (fields -> fields) -> Form response fields -> Form response fields

update fields

edit : (response -> Form response fields -> Form response fields) -> Maybe response -> Form response fields -> Form response fields

to edit state

cancel : Form response fields -> Form response fields

to static state

commit : Form response fields -> Form response fields

to commit state

change : Form response fields -> Form response fields

to changed state

Encode/Decode

encode : (response -> Json.Encode.Value) -> (fields -> Json.Encode.Value) -> Form response fields -> Json.Encode.Value

encode fields

decode : Json.Decode.Decoder response -> (Json.Decode.Value -> Form response fields -> Form response fields) -> Json.Decode.Value -> Form response fields -> Form response fields

decode fields