module IHP.IDE.SchemaDesigner.View.Indexes.Edit where
import IHP.ViewPrelude
import IHP.IDE.SchemaDesigner.Types
import qualified IHP.IDE.SchemaDesigner.Compiler as SqlCompiler
import IHP.IDE.ToolServer.Types
import IHP.IDE.SchemaDesigner.View.Layout
data EditIndexView = EditIndexView
{ statements :: [Statement]
, indexName :: Text
, tableName :: Text
}
instance View EditIndexView where
html EditIndexView { .. } = [hsx|
{renderObjectSelector (zip [0..] statements) (Just tableName)}
{renderColumnSelector tableName (zip [0..] columns) statements}
{migrationStatus}
{renderModal modal}
|]
where
index :: Statement
(Just index) = statements |> find \case
CreateIndex { indexName = name } | name == indexName -> True
otherwise -> False
table :: Maybe Statement
table = findStatementByName tableName statements
columns = maybe [] ((.columns) . unsafeGetCreateTable) table
indexColumns = index.columns
|> map SqlCompiler.compileIndexColumn
|> intercalate ", "
modalContent = [hsx|
|]
modalFooter = mempty
modalCloseUrl = pathTo ShowTableAction { tableName }
modalTitle = "Edit Index"
modal = Modal { modalContent, modalFooter, modalCloseUrl, modalTitle }