diff --git a/back/src/Guide/Api/Methods.hs b/back/src/Guide/Api/Methods.hs index 0e2ea53..fb68dcc 100644 --- a/back/src/Guide/Api/Methods.hs +++ b/back/src/Guide/Api/Methods.hs @@ -97,10 +97,21 @@ deleteCategory catId = ---------------------------------------------------------------------------- -- | Get item by item ID. -getItem :: Uid Item -> Guider CItemFull -getItem itemId = +-- +-- Pass 'True' to ignore disabled sections and get full item. +getItem :: Bool -> Uid Item -> Guider CItemFull +getItem isIgnored itemId = logHandler "getItem" [attr "itemId" itemId] $ do - toCItemFull <$> getItemOrFail itemId + item <- getItemOrFail itemId + sections <- categoryEnabledSections <$> dbQuery (GetCategoryByItem itemId) + if isIgnored then pure $ toCItemFull allSections item + else pure $ toCItemFull sections item + where + allSections = S.fromList + [ ItemProsConsSection + , ItemEcosystemSection + , ItemNotesSection + ] -- | Create a new item, given the name. -- diff --git a/back/src/Guide/Api/Types.hs b/back/src/Guide/Api/Types.hs index e00de5d..cf2f0eb 100644 --- a/back/src/Guide/Api/Types.hs +++ b/back/src/Guide/Api/Types.hs @@ -153,6 +153,10 @@ data ItemSite route = ItemSite { _getItem :: route :- Summary "Get item by id" :> ErrorResponse 404 "Item not found" + :> "ignore selections" + :> QueryParam' '[Required, Strict, + Description "Ignore disabled sections to get full item"] + "bool" Bool :> "item" :> Capture "itemId" (Uid Item) :> Get '[JSON] CItemFull @@ -505,7 +509,7 @@ toCCategoryFull $(fields 'Category) = CCategoryFull , ccfStatus = categoryStatus , ccfDescription = toCMarkdown categoryNotes , ccfSections = categoryEnabledSections - , ccfItems = fmap toCItemFull categoryItems + , ccfItems = fmap (toCItemFull categoryEnabledSections) categoryItems } where -- Ignored fields @@ -674,23 +678,34 @@ instance ToSchema CItemFull where field "toc" . inlineSchema . description ?= "Table of contents" -- | Factory to create a 'CItemFull' from an 'Item' -toCItemFull :: Item -> CItemFull -toCItemFull $(fields 'Item) = CItemFull +-- +-- Pass to 'Set ItemSection' all kinds of sections +-- to ignore disabled sections and get full item content. +toCItemFull :: Set ItemSection -> Item -> CItemFull +toCItemFull selections $(fields 'Item) = CItemFull { cifId = itemUid , cifName = itemName , cifCreated = itemCreated , cifHackage = itemHackage , cifSummary = toCMarkdown itemSummary - , cifPros = fmap toCTrait itemPros - , cifCons = fmap toCTrait itemCons - , cifEcosystem = toCMarkdown itemEcosystem - , cifNotes = toCMarkdown itemNotes + , cifPros = fmap toCTrait pros + , cifCons = fmap toCTrait cons + , cifEcosystem = toCMarkdown ecosystem + , cifNotes = toCMarkdown notes , cifLink = itemLink , cifToc = map toCTocHeading (markdownTreeTOC itemNotes) } where - -- Ignored fields _ = (itemProsDeleted, itemConsDeleted) + ecosystem = if (ItemEcosystemSection `elem` selections) + then itemEcosystem + else toMarkdownBlock "" + notes = if (ItemNotesSection `elem` selections) + then itemNotes + else toMarkdownTree "" "" + (pros, cons) = if (ItemProsConsSection `elem` selections) + then (itemPros, itemCons) + else ([],[]) ---------------------------------------------------------------------------- -- CTrait diff --git a/back/src/Guide/State.hs b/back/src/Guide/State.hs index dce91b6..992a105 100644 --- a/back/src/Guide/State.hs +++ b/back/src/Guide/State.hs @@ -845,6 +845,7 @@ deriving instance Show GetGlobalState -- category deriving instance Show GetCategories deriving instance Show GetCategoryMaybe +deriving instance Show GetCategoryByItem deriving instance Show AddCategory deriving instance Show DeleteCategory deriving instance Show SetCategoryGroup