module IHP.IDE.Data.View.NewRow where
import IHP.ViewPrelude
import IHP.IDE.ToolServer.Types
import IHP.IDE.Data.View.ShowDatabase
import IHP.IDE.Data.View.Layout
import Data.Maybe
import qualified Data.Text as Text
data NewRowView = NewRowView
{ tableNames :: [Text]
, tableName :: Text
, rows :: [[DynamicField]]
, tableCols :: [ColumnDefinition]
}
instance View NewRowView where
html NewRowView { .. } = [hsx|
{headerNav}
{renderTableSelector tableNames tableName}
{renderRows rows tableBody tableName}
{renderModal modal}
|]
where
tableBody = [hsx|{forEach rows renderRow}|]
renderRow fields = [hsx|{forEach fields (renderField id)}
|]
where
id = (cs (fromMaybe "" ((fromJust (headMay fields)).fieldValue)))
renderField id DynamicField { .. } | fieldName == "id" = [hsx|{renderId (sqlValueToText fieldValue)} | |]
renderField id DynamicField { .. } | isBoolField fieldName tableCols && not (isNothing fieldValue) = [hsx| | |]
renderField id DynamicField { .. } = [hsx|{sqlValueToText fieldValue} | |]
modalContent = [hsx|
|]
modalFooter = mempty
modalCloseUrl = pathTo ShowTableRowsAction { tableName }
modalTitle = "Add Row"
modal = Modal { modalContent, modalFooter, modalCloseUrl, modalTitle }
renderFormField col = [hsx|
|]
onClick tableName fieldName id = "window.location.assign(" <> tshow (pathTo (ToggleBooleanFieldAction tableName (cs fieldName) id)) <> ")"
renderInputMethod :: ColumnDefinition -> Html
renderInputMethod col | (col.columnType) == "boolean" = [hsx|
{isBooleanParam True col}
"-alt"}
type="text"
name={col.columnName <> "-inactive"}
class="form-control text-monospace text-secondary d-none"
/>
"-boxcontainer"}>
"-input"}
type="checkbox"
name={col.columnName}
checked={col.columnDefault == Just "true"}
/>
"-hidden"}
type="hidden"
name={col.columnName}
value={inputValue False}
/>
|]
renderInputMethod col = [hsx|
{isBooleanParam False col}
{if isForeignKeyColumn
then select
else theInput
}
|]
where
isForeignKeyColumn :: Bool
isForeignKeyColumn = "_id" `Text.isSuffixOf` (col.columnName)
theInput :: Html
theInput = [hsx|
"-input"}
type="text"
name={col.columnName}
class={classes ["form-control", ("text-monospace", isSqlFunction (getColDefaultValue col)), ("is-foreign-key-column", isForeignKeyColumn)]}
value={renderDefaultWithoutType (getColDefaultValue col)}
oninput={"stopSqlModeOnInput('" <> col.columnName <> "')"}
/>
|]
select :: Html
select = [hsx|