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|
{forEach tableCols renderFormField} {renderFlashMessages}
|] modalFooter = mempty modalCloseUrl = pathTo ShowTableRowsAction { tableName } modalTitle = "Add Row" modal = Modal { modalContent, modalFooter, modalCloseUrl, modalTitle } renderFormField col = [hsx|
{col.columnType}
{renderInputMethod col}
|] 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|