Skip to content

Commit

Permalink
Added type signature for generated index view code (#836)
Browse files Browse the repository at this point in the history
* Added type signature for generated index view code

* update ControllerGenerator tests

* :: -> ->
  • Loading branch information
rametta committed Mar 28, 2021
1 parent 8ac94d6 commit 8edfa92
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
1 change: 1 addition & 0 deletions IHP/IDE/CodeGen/ViewGenerator.hs
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ buildPlan' schema config =
<> " </div>\n"
<> " |]\n"
<> "\n\n"
<> "render" <> singularName <> " :: " <> singularName <> " -> Html\n"
<> "render" <> singularName <> " " <> singularVariableName <> " = [hsx|\n"
<> " <tr>\n"
<> " <td>{" <> singularVariableName <> "}</td>\n"
Expand Down
10 changes: 5 additions & 5 deletions Test/IDE/CodeGeneration/ControllerGenerator.hs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ tests = do
, AppendToMarker {marker = "-- Controller Imports", filePath = "Web/FrontController.hs", fileContent = "import Web.Controller.Pages"}
, AppendToMarker {marker = "-- Generator Marker", filePath = "Web/FrontController.hs", fileContent = " , parseRoute @PagesController"}
, EnsureDirectory {directory = "Web/View/Pages"}
, CreateFile {filePath = "Web/View/Pages/Index.hs", fileContent = "module Web.View.Pages.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { pages :: [Page] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PagesAction}>Pages</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPageAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Page</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach pages renderPage}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPage page = [hsx|\n <tr>\n <td>{page}</td>\n <td><a href={ShowPageAction (get #id page)}>Show</a></td>\n <td><a href={EditPageAction (get #id page)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePageAction (get #id page)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, CreateFile {filePath = "Web/View/Pages/Index.hs", fileContent = "module Web.View.Pages.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { pages :: [Page] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PagesAction}>Pages</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPageAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Page</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach pages renderPage}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPage :: Page -> Html\nrenderPage page = [hsx|\n <tr>\n <td>{page}</td>\n <td><a href={ShowPageAction (get #id page)}>Show</a></td>\n <td><a href={EditPageAction (get #id page)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePageAction (get #id page)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, AddImport {filePath = "Web/Controller/Pages.hs", fileContent = "import Web.View.Pages.Index"}
, EnsureDirectory {directory = "Web/View/Pages"}
, CreateFile {filePath = "Web/View/Pages/New.hs", fileContent = "module Web.View.Pages.New where\nimport Web.View.Prelude\n\ndata NewView = NewView { page :: Page }\n\ninstance View NewView where\n html NewView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item\"><a href={PagesAction}>Pages</a></li>\n <li class=\"breadcrumb-item active\">New Page</li>\n </ol>\n </nav>\n <h1>New Page</h1>\n {renderForm page}\n |]\n\nrenderForm :: Page -> Html\nrenderForm page = formFor page [hsx|\n\n {submitButton}\n|]\n"}
Expand All @@ -72,7 +72,7 @@ tests = do
, AppendToMarker {marker = "-- Controller Imports", filePath = "Web/FrontController.hs", fileContent = "import Web.Controller.Page"}
, AppendToMarker {marker = "-- Generator Marker", filePath = "Web/FrontController.hs", fileContent = " , parseRoute @PageController"}
, EnsureDirectory {directory = "Web/View/Page"}
, CreateFile {filePath = "Web/View/Page/Index.hs", fileContent = "module Web.View.Page.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { page :: [Page] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PagesAction}>Pages</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPageAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Page</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach page renderPage}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPage page = [hsx|\n <tr>\n <td>{page}</td>\n <td><a href={ShowPageAction (get #id page)}>Show</a></td>\n <td><a href={EditPageAction (get #id page)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePageAction (get #id page)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, CreateFile {filePath = "Web/View/Page/Index.hs", fileContent = "module Web.View.Page.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { page :: [Page] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PagesAction}>Pages</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPageAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Page</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach page renderPage}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPage :: Page -> Html\nrenderPage page = [hsx|\n <tr>\n <td>{page}</td>\n <td><a href={ShowPageAction (get #id page)}>Show</a></td>\n <td><a href={EditPageAction (get #id page)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePageAction (get #id page)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, AddImport {filePath = "Web/Controller/Page.hs", fileContent = "import Web.View.Page.Index"}
, EnsureDirectory {directory = "Web/View/Page"}
, CreateFile {filePath = "Web/View/Page/New.hs", fileContent = "module Web.View.Page.New where\nimport Web.View.Prelude\n\ndata NewView = NewView { page :: Page }\n\ninstance View NewView where\n html NewView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item\"><a href={PagesAction}>Pages</a></li>\n <li class=\"breadcrumb-item active\">New Page</li>\n </ol>\n </nav>\n <h1>New Page</h1>\n {renderForm page}\n |]\n\nrenderForm :: Page -> Html\nrenderForm page = formFor page [hsx|\n\n {submitButton}\n|]\n"}
Expand All @@ -99,7 +99,7 @@ tests = do
, AppendToMarker {marker = "-- Controller Imports", filePath = "Web/FrontController.hs", fileContent = "import Web.Controller.PageComment"}
, AppendToMarker {marker = "-- Generator Marker", filePath = "Web/FrontController.hs", fileContent = " , parseRoute @PageCommentController"}
, EnsureDirectory {directory = "Web/View/PageComment"}
, CreateFile {filePath = "Web/View/PageComment/Index.hs", fileContent = "module Web.View.PageComment.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { pageComment :: [PageComment] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PageCommentsAction}>PageComments</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPageCommentAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>PageComment</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach pageComment renderPageComment}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPageComment pageComment = [hsx|\n <tr>\n <td>{pageComment}</td>\n <td><a href={ShowPageCommentAction (get #id pageComment)}>Show</a></td>\n <td><a href={EditPageCommentAction (get #id pageComment)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePageCommentAction (get #id pageComment)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, CreateFile {filePath = "Web/View/PageComment/Index.hs", fileContent = "module Web.View.PageComment.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { pageComment :: [PageComment] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PageCommentsAction}>PageComments</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPageCommentAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>PageComment</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach pageComment renderPageComment}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPageComment :: PageComment -> Html\nrenderPageComment pageComment = [hsx|\n <tr>\n <td>{pageComment}</td>\n <td><a href={ShowPageCommentAction (get #id pageComment)}>Show</a></td>\n <td><a href={EditPageCommentAction (get #id pageComment)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePageCommentAction (get #id pageComment)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, AddImport {filePath = "Web/Controller/PageComment.hs", fileContent = "import Web.View.PageComment.Index"}
, EnsureDirectory {directory = "Web/View/PageComment"}
, CreateFile {filePath = "Web/View/PageComment/New.hs", fileContent = "module Web.View.PageComment.New where\nimport Web.View.Prelude\n\ndata NewView = NewView { pageComment :: PageComment }\n\ninstance View NewView where\n html NewView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item\"><a href={PageCommentsAction}>PageComments</a></li>\n <li class=\"breadcrumb-item active\">New PageComment</li>\n </ol>\n </nav>\n <h1>New PageComment</h1>\n {renderForm pageComment}\n |]\n\nrenderForm :: PageComment -> Html\nrenderForm pageComment = formFor pageComment [hsx|\n\n {submitButton}\n|]\n"}
Expand All @@ -125,7 +125,7 @@ tests = do
, AppendToMarker {marker = "-- Controller Imports", filePath = "Web/FrontController.hs", fileContent = "import Web.Controller.PageComment"}
, AppendToMarker {marker = "-- Generator Marker", filePath = "Web/FrontController.hs", fileContent = " , parseRoute @PageCommentController"}
, EnsureDirectory {directory = "Web/View/PageComment"}
, CreateFile {filePath = "Web/View/PageComment/Index.hs", fileContent = "module Web.View.PageComment.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { pageComment :: [PageComment] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PageCommentsAction}>PageComments</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPageCommentAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>PageComment</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach pageComment renderPageComment}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPageComment pageComment = [hsx|\n <tr>\n <td>{pageComment}</td>\n <td><a href={ShowPageCommentAction (get #id pageComment)}>Show</a></td>\n <td><a href={EditPageCommentAction (get #id pageComment)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePageCommentAction (get #id pageComment)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, CreateFile {filePath = "Web/View/PageComment/Index.hs", fileContent = "module Web.View.PageComment.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { pageComment :: [PageComment] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PageCommentsAction}>PageComments</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPageCommentAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>PageComment</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach pageComment renderPageComment}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPageComment :: PageComment -> Html\nrenderPageComment pageComment = [hsx|\n <tr>\n <td>{pageComment}</td>\n <td><a href={ShowPageCommentAction (get #id pageComment)}>Show</a></td>\n <td><a href={EditPageCommentAction (get #id pageComment)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePageCommentAction (get #id pageComment)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, AddImport {filePath = "Web/Controller/PageComment.hs", fileContent = "import Web.View.PageComment.Index"}
, EnsureDirectory {directory = "Web/View/PageComment"}
, CreateFile {filePath = "Web/View/PageComment/New.hs", fileContent = "module Web.View.PageComment.New where\nimport Web.View.Prelude\n\ndata NewView = NewView { pageComment :: PageComment }\n\ninstance View NewView where\n html NewView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item\"><a href={PageCommentsAction}>PageComments</a></li>\n <li class=\"breadcrumb-item active\">New PageComment</li>\n </ol>\n </nav>\n <h1>New PageComment</h1>\n {renderForm pageComment}\n |]\n\nrenderForm :: PageComment -> Html\nrenderForm pageComment = formFor pageComment [hsx|\n\n {submitButton}\n|]\n"}
Expand All @@ -152,7 +152,7 @@ tests = do
, AppendToMarker {marker = "-- Generator Marker", filePath = "Web/FrontController.hs", fileContent = " , parseRoute @PeopleController"}

, EnsureDirectory {directory = "Web/View/People"}
, CreateFile {filePath = "Web/View/People/Index.hs", fileContent = "module Web.View.People.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { people :: [Person] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PeopleAction}>People</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPersonAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Person</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach people renderPerson}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPerson person = [hsx|\n <tr>\n <td>{person}</td>\n <td><a href={ShowPersonAction (get #id person)}>Show</a></td>\n <td><a href={EditPersonAction (get #id person)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePersonAction (get #id person)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, CreateFile {filePath = "Web/View/People/Index.hs", fileContent = "module Web.View.People.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { people :: [Person] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n <nav>\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\"><a href={PeopleAction}>People</a></li>\n </ol>\n </nav>\n <h1>Index <a href={pathTo NewPersonAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Person</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach people renderPerson}</tbody>\n </table>\n </div>\n |]\n\n\nrenderPerson :: Person -> Html\nrenderPerson person = [hsx|\n <tr>\n <td>{person}</td>\n <td><a href={ShowPersonAction (get #id person)}>Show</a></td>\n <td><a href={EditPersonAction (get #id person)} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePersonAction (get #id person)} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]\n"}
, AddImport {filePath = "Web/Controller/People.hs", fileContent = "import Web.View.People.Index"}

, EnsureDirectory {directory = "Web/View/People"}
Expand Down

0 comments on commit 8edfa92

Please sign in to comment.