ihp-ide-1.4.0: IHP/IDE/CodeGen/View/NewAction.hs
module IHP.IDE.CodeGen.View.NewAction where
import IHP.ViewPrelude
import IHP.IDE.ToolServer.Types
import IHP.IDE.CodeGen.Types
import IHP.IDE.CodeGen.View.Generators (renderPlan)
data NewActionView = NewActionView
{ plan :: Either Text [GeneratorAction]
, actionName :: Text
, controllerName :: Text
, applicationName :: Text
, doGenerateView :: Bool
, controllers :: [Text]
, applications :: [Text]
}
instance View NewActionView where
html NewActionView { .. } = [hsx|
<div class="generators">
<div class="container pt-5">
<div class="code-generator new-script">
{if isEmpty then renderEmpty else renderPreview}
{unless isEmpty (renderPlan plan)}
</div>
</div>
</div>
|]
where
renderEmpty = [hsx|<form method="POST" action={NewActionAction}>
<div class="d-flex">
{when (length applications /= 1) renderApplicationSelector}
<select
name="controllerName"
class="form-control select2-simple"
size="1"
>
{renderControllerOptions}
</select>
<input
type="text"
name="name"
placeholder="Action name"
class="form-control"
autofocus="autofocus"
value={actionName}
/>
<button class="btn btn-primary" type="submit">Preview</button>
</div>
<div class="generator-options">
<input
type="checkbox"
name="doGenerateView"
id="doGenerateView"
/>
<label class="pl-1" for="doGenerateView">With View</label>
</div>
</form>|]
renderControllerOptions = forM_ controllers (\x -> [hsx|<option>{x}</option>|])
renderApplicationOptions = forM_ applications (\x -> [hsx|<option selected={x == applicationName}>{x}</option>|])
renderApplicationSelector = [hsx|
<select
name="applicationName"
class="form-control select2-simple"
size="1"
>
{renderApplicationOptions}
</select>|]
renderPreview = [hsx|
<form method="POST" action={CreateActionAction} class="d-flex">
<div class="object-name flex-grow-1">{controllerName}.{actionName}</div>
<input type="hidden" name="name" value={actionName}/>
<input type="hidden" name="controllerName" value={controllerName}/>
<input type="hidden" name="applicationName" value={applicationName}/>
<input type="hidden" name="doGenerateView" value={(if doGenerateView then "on" else "off") :: Text}/>
<button class="btn btn-primary" type="submit">Generate</button>
</form>
<div class="generator-options">
<form method="POST" action={NewActionAction}>
<input
type="checkbox"
name="doGenerateView"
id="doGenerateView"
checked = {doGenerateView}
onchange = "this.form.submit()"
/>
<label class="pl-1" for="doGenerateView">With View</label>
<input type="hidden" name="name" value={actionName}/>
<input type="hidden" name="controllerName" value={controllerName}/>
</form>
</div>
|]
isEmpty = null actionName