getto-systems/elm-field/1.0.0

NOTE: the latest version is 2.0.0

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 : Bool
, hasModified : Bool
, form : model
}

models and that has error, has modified

type alias Model form opts =
Model form { opts | isModified : 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 =

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 =
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 ""
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 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" ] ) )
(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 [] ) )
(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

(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

( 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

( 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

( 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

( 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

( 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

( 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

( 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

( 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

( 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

( 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

( 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

( 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