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

edit field utilities - conflict

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

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

blank = Validate.blank "blank"

opts =
  { error = "conflict"
  , form  = model
  , response =
    { first = form.response
    , last  = http.response
    }
  }

view a =
  { name = a
  }

Conflict.compose view
  ( model |> ( ( name_, get_name ) |> Conflict.single [ model.name |> blank ] ) )
{-
  { hasError = True
  , hasModified = True
  , form =
    { name =
      ( "name"
      , { field = model.name
        , prop  = name_
        }
      , { errors = [ "blank" ] -- model.name |> blank
        , isModified = True
        }
      )
    }
  }
-}

Definition


type alias View model =
{ hasError : Basics.Bool
, hasModified : Basics.Bool
, form : model 
}

models and that has error, has modified


type alias Model form opts =
Getto.Field.Validate.Model form { opts | isModified : Basics.Bool }

field name, form and errors


type alias Single form opts a =
Model (Form form a) opts

single form model


type Attribute a

attribute of conflict state and resolve operation


type alias Field a =
Getto.Field.Model (Attribute a) a

conflict attribute field


type alias Form form a =
{ field : Field a
, prop : Prop form a
, last : a 
}

field, prop and last value


type alias Prop form a =
Getto.Field.Form.Prop form (Attribute a) a

Prop for conflict attribute field


type alias Getter response a =
response -> a

response to value getter


type alias Options form response =
{ error : String
, form : form
, response : { first : Maybe response
, last : response } 
}

initialize options

{ error : String -- error message
, form  : form   -- fields
, response :
  { first : Maybe response -- response of edit start
  , last  : response       -- last response
  }
}


type State lastValue
    = NoProblem
    | Conflict lastValue

conflict state


type Resolve value

resolve type

Construction

init : String -> value -> String -> Field value

construct Field

"name" |> Conflict.init signature ""

single : List (Maybe String) -> ( Prop form a, Getter response a ) -> Options form response -> Model (Form form a) {}

construct Single

{ error = "conflict"
, form  = form
, response =
  { first = form.response
  , last  = http.response
  }
}
|> ( ( name_, get_name ) |> Conflict.single [ form.name |> Validate.blank "blank" ] )

Getter

state : Form form a -> State a

get conflict state

form |> Conflict.state

Setter

toConflict : a -> Field a -> Field a

set conflict

Resolve

resolve : Prop form a -> Resolve a -> form -> form

resolve conflict

model |> Conflict.resolve prop Conflict.leave
model |> Conflict.resolve prop (Conflict.revert value)

leave : Resolve a

leave editing value

revert : a -> Resolve a

revert original value

Helper

compose : (Model a opts -> model) -> Model a opts -> View model

compose models

type alias Form =
  { name = Conflict.Field String
  }

type alias Model =
  { name = Conflict.Single Form {} String
  }

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

opts =
  { error = "conflict"
  , form  = form
  , response =
    { first = form.response
    , last  = http.response
    }
  }

Conflict.compose Model
  ( opts |> ( ( name_, get_name ) |> Conflict.single [ form.name |> Validate.blank "blank" ] ) )

compose2 : (Model a opts -> Model b opts -> model) -> Model a opts -> Model b opts -> View model

compose models with 2 args

Conflict.compose2 Model
  ( opts |> ( ( name_, get_name ) |> Conflict.single [ form.name |> Validate.blank "blank" ] ) )
  ( opts |> ( ( age_,  get_age )  |> Conflict.single [] ) )

compose3 : (Model a opts -> Model b opts -> Model c opts -> model) -> Model a opts -> Model b opts -> Model c opts -> View model

compose models with 3 args

compose4 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> View model

compose models with 4 args

compose5 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> View model

compose models with 5 args

compose6 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> View model

compose models with 6 args

compose7 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> View model

compose models with 7 args

compose8 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> View model

compose models with 8 args

compose9 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> View model

compose models with 9 args

compose10 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> View model

compose models with 10 args

compose11 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> View model

compose models with 11 args

compose12 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> View model

compose models with 12 args

compose13 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> Model m opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> Model m opts -> View model

compose models with 13 args

compose14 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> Model m opts -> Model n opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> Model m opts -> Model n opts -> View model

compose models with 14 args

compose15 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> Model m opts -> Model n opts -> Model o opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> Model m opts -> Model n opts -> Model o opts -> View model

compose models with 15 args

compose16 : (Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> Model m opts -> Model n opts -> Model o opts -> Model p opts -> model) -> Model a opts -> Model b opts -> Model c opts -> Model d opts -> Model e opts -> Model f opts -> Model g opts -> Model h opts -> Model i opts -> Model j opts -> Model k opts -> Model l opts -> Model m opts -> Model n opts -> Model o opts -> Model p opts -> View model

compose models with 16 args