websiteListMenuBuilder.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import * as _ from 'lodash-es'
  2. import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
  3. import type { MenuGroup, MenuItems } from '~/types/layout'
  4. import { MENU_LINK_TYPE } from '~/types/enum/layout'
  5. import UrlUtils from '~/services/utils/urlUtils'
  6. import type { BaseOrganizationProfile } from '~/types/interfaces'
  7. /**
  8. * Menu : Liste des sites internet de la structure et de ses structures parentes
  9. */
  10. export default class WebsiteListMenuBuilder extends AbstractMenuBuilder {
  11. static readonly menuName = 'WebsiteList'
  12. /**
  13. * Construit le menu Site internet, ou null si aucune page accessible
  14. */
  15. build(): MenuGroup | null {
  16. const children: MenuItems = []
  17. // Add organization website
  18. if (this.organizationProfile.website) {
  19. const url = UrlUtils.join(this.organizationProfile.website, '/typo3')
  20. children.push(
  21. this.createItem(
  22. this.organizationProfile.name as string,
  23. undefined,
  24. url,
  25. MENU_LINK_TYPE.EXTERNAL,
  26. ),
  27. )
  28. }
  29. // Add parents websites
  30. _.each(
  31. this.organizationProfile.parents,
  32. (parent: BaseOrganizationProfile) => {
  33. if (
  34. parent.id &&
  35. parent.name &&
  36. parent.website &&
  37. parent.id !== this.runtimeConfig.OPENTALENT_MANAGER_ID
  38. ) {
  39. children.push(
  40. this.createItem(
  41. parent.name,
  42. undefined,
  43. parent.website,
  44. MENU_LINK_TYPE.EXTERNAL,
  45. ),
  46. )
  47. }
  48. },
  49. )
  50. if (children.length > 0) {
  51. return this.createGroup(
  52. 'websiteList',
  53. { name: 'fas fa-globe-americas' },
  54. children,
  55. )
  56. }
  57. return null
  58. }
  59. }