| 4 | import { ResponseStatus, ServiceResponse } from '@/common/models/serviceResponse' |
| 5 | |
| 6 | export default class SideBarController { |
| 7 | public async getAllTemplates(search: string, filter: string[], pageType: string): Promise<ServiceResponse<Template[] | null>> { |
| 8 | try { |
| 9 | let blocksData: FullTemplate[] = await FullTemplateModel.find({}) |
| 10 | |
| 11 | if (!blocksData) { |
| 12 | return this.handleNullBlocksData() |
| 13 | } |
| 14 | |
| 15 | blocksData = this.sortBlocksByFeatured(blocksData) |
| 16 | |
| 17 | // search goes through templates and returns ones that match title or description |
| 18 | if (search.length) { |
| 19 | blocksData = blocksData.filter((block: FullTemplate) => { |
| 20 | return block.title.toLowerCase().includes(search.toLowerCase()) || block.description.toLowerCase().includes(search.toLowerCase()) |
| 21 | }) |
| 22 | } |
| 23 | |
| 24 | // filter by template tags (array) |
| 25 | // Returns blocks that have tags that match the filter |
| 26 | if (filter.length) { |
| 27 | blocksData = blocksData.filter((block: FullTemplate) => { |
| 28 | return block.tags.some((tag) => { |
| 29 | return filter.includes(tag.url) |
| 30 | }) |
| 31 | }) |
| 32 | } |
| 33 | |
| 34 | // filter by pageType |
| 35 | if (pageType.length && pageType !== 'None') { |
| 36 | blocksData = blocksData.filter((block: FullTemplate) => { |
| 37 | return pageType.includes(block.pageType) |
| 38 | }) |
| 39 | } |
| 40 | |
| 41 | return new ServiceResponse<Template[]>(ResponseStatus.Success, 'Success', blocksData, StatusCodes.OK) |
| 42 | } catch (ex) { |
| 43 | return new ServiceResponse(ResponseStatus.Failed, 'Failed to get templates', null, StatusCodes.INTERNAL_SERVER_ERROR) |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | public async getAllSidebar(): Promise<ServiceResponse<SideBarOptions[] | null>> { |
| 48 | try { |
| 49 | let blocksData: FullTemplate[] = await FullTemplateModel.find({}) |
| 50 | |
| 51 | if (!blocksData) { |
| 52 | return this.handleNullBlocksData() |
| 53 | } |
| 54 | const sidebarOptionsSet: Set<string> = new Set<string>() |
| 55 | |
| 56 | blocksData.map((block: FullTemplate) => { |
| 57 | block.tags.forEach((tag) => { |
| 58 | sidebarOptionsSet.add(JSON.stringify({ label: tag.name, value: tag.url })) |
| 59 | }) |
| 60 | }) |
| 61 | |
| 62 | const sidebarOptions: SideBarOptions[] = Array.from(sidebarOptionsSet).map((option: string) => { |
| 63 | return JSON.parse(option) |
nothing calls this directly
no outgoing calls
no test coverage detected