{ "version": 3, "sources": ["../../../../../../owl-nest/common/project-manager-nav/src/ConfiguredNavMenu.tsx", "../../../../../../owl-nest/common/project-manager-nav/src/NavMenu.tsx", "../../../../../../owl-nest/common/project-manager-nav/src/StepBlock.tsx", "../../../../../../owl-nest/common/project-manager-nav/src/ExtraTimeBlock.tsx"], "sourcesContent": ["import * as React from 'react'\nimport { useNavigate, type NavigateFunction } from 'react-router-dom'\nimport styled, { css } from 'styled-components'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport * as hooks from '@owl-nest/hooks'\nimport * as userService from '@owl-nest/services/src/user'\nimport { t, tp } from '@owl-nest/localize'\nimport * as models from '@owl-nest/models'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as env from '@owl-nest/config'\n\nimport {\n NavMenu,\n type AdminSectionConfiguration,\n type CoachingSectionConfiguration,\n type MidZoneConfiguration,\n type MidZoneConfigurationItem,\n type NavMenuProps,\n} from './NavMenu'\n\nexport enum Screen {\n ACCOUNT = 'account',\n ANALYTICS = 'analytics',\n DASHBOARD = 'dashboard',\n DELIVERY = 'delivery',\n DISCUSSIONS = 'discussions',\n FAQ = 'faq',\n GOAL = 'goal',\n IMPACT = 'impact',\n LAUNCH = 'launch',\n LOCATION = 'location',\n MEMBERSHIPS = 'memberships',\n MEMBERS = 'members',\n MY_PROJECT = 'my-project',\n NEWS = 'news',\n OFFBOARDING = 'offboarding',\n OFFLINE_DONATIONS_LIST = 'list',\n ORDERS = 'orders',\n PRESENTATION = 'presentation',\n REWARDS = 'rewards',\n REFERRALS = 'referrals',\n TAX_DEDUCTION = 'taxdeduction',\n TEAM = 'team',\n}\n\nexport const allScreens: string[] = Object.values(Screen)\n\nexport const pureBackofficeScreens: string[] = [\n Screen.ACCOUNT,\n Screen.ANALYTICS,\n Screen.DELIVERY,\n Screen.GOAL,\n Screen.IMPACT,\n Screen.LAUNCH,\n Screen.LOCATION,\n Screen.MEMBERS,\n Screen.MEMBERSHIPS,\n Screen.NEWS,\n Screen.OFFBOARDING,\n Screen.ORDERS,\n Screen.PRESENTATION,\n Screen.REWARDS,\n Screen.TAX_DEDUCTION,\n Screen.TEAM,\n Screen.REFERRALS,\n Screen.DASHBOARD,\n]\n\nconst PURE_BACKOFFICE_PATHS = {\n ACCOUNT: `/${Screen.ACCOUNT}`,\n ANALYTICS: `/${Screen.ANALYTICS}`,\n DASHBOARD: `/${Screen.DASHBOARD}`,\n GOAL: `/${Screen.GOAL}`,\n IMPACT: `/${Screen.IMPACT}`,\n LAUNCH: `/${Screen.LAUNCH}`,\n LOCATION: `/${Screen.LOCATION}`,\n MEMBERS: `/${Screen.MEMBERS}`,\n MEMBERSHIPS: `/${Screen.MEMBERSHIPS}`,\n NEWS: `/${Screen.NEWS}`,\n OFFBOARDING: `/${Screen.OFFBOARDING}`,\n ORDERS: `/${Screen.ORDERS}`,\n PRESENTATION: '/',\n REWARD: `/${Screen.REWARDS}`,\n REFERRALS: `/${Screen.REFERRALS}`,\n TAX_DEDUCTION: `/${Screen.TAX_DEDUCTION}`,\n TEAM: `/${Screen.TEAM}`,\n} as const\n\ntype ValueOf = T[keyof T]\ntype ConfiguredNavMenuRole = ValueOf\ntype ConfiguredNavMenuProps = {\n className?: string\n mobileBreakpoint?: string\n project: api.Project<'manager' | 'default_manager' | 'unread_count' | 'account'>\n role: ConfiguredNavMenuRole | undefined\n screen: Screen\n}\n\nfunction ConfiguredNavMenuComponent({\n className,\n mobileBreakpoint,\n project,\n role,\n screen,\n}: ConfiguredNavMenuProps): React.ReactElement {\n // Note: Only pure backoffice screens have a parent router to capture useNavigate()\n // TODO : remove this hack once RB and DB dashboards are migrated\n const isPureBackoffice =\n pureBackofficeScreens.includes(screen) && (screen !== Screen.DASHBOARD || models.project.isMembership(project))\n const navigate = isPureBackoffice ? useNavigate() : undefined\n const isClientSide = hooks.useClientSide()\n const auth = userService.useAuth()\n const user = auth.type === 'loggedin' ? auth.user : undefined\n const isStaff = role === 'staff' || user?.is_staff\n const isOwnerOrStaff = Boolean(role === api.UserRole.Owner || isStaff)\n const userConfig = env.useUserEnv()\n\n return (\n \n )\n}\n\nfunction getAdminData({ project }: { project: api.Project }): AdminSectionConfiguration {\n return {\n projectId: project.id,\n }\n}\n\nfunction getCoachingData({\n project,\n screen,\n}: {\n project: api.Project<'manager' | 'default_manager' | 'unread_count'>\n screen: Screen\n}): CoachingSectionConfiguration {\n return {\n coachAvatarSrc: models.image.getUrl(\n project.manager?.avatar.versions || project.default_manager?.avatar.versions,\n '128x128',\n ),\n discussionUrl: `/projects/${project.id}/discussion/`,\n isActive: screen === Screen.DISCUSSIONS,\n unreadCount: project.unread_count,\n }\n}\n\nfunction getMidZone({\n isClientSide,\n navigate,\n project,\n user,\n role,\n screen,\n}: {\n isClientSide: boolean\n navigate: NavigateFunction | undefined\n project: api.Project<'account'>\n user: api.AuthenticatedUser | undefined\n role: ConfiguredNavMenuRole | undefined\n screen: Screen\n}): MidZoneConfiguration {\n const projectLifecycleStatus = models.project.lifecycleStatus(project)\n const isOngoing = projectLifecycleStatus === models.project.LifecycleStatus.ONGOING\n const isOnline = project.is_online\n const isRefused = projectLifecycleStatus === models.project.LifecycleStatus.REFUSED\n const isProjectDonationBased = models.project.isDonationBased(project)\n const isProjectMembership = models.project.isMembership(project)\n const isProjectRewardBased = models.project.isRewardBased(project)\n const isProjectVendorBased = models.project.isVendorBased(project)\n\n const isOwner = role === api.UserRole.Owner\n const isStaff = role === 'staff' || user?.is_staff\n\n // TODO : remove this hack once RB and DB dashboards are migrated\n const isPureBackoffice =\n pureBackofficeScreens.includes(screen) && (screen !== Screen.DASHBOARD || isProjectMembership)\n const baseBackofficePath = `/projects/${project.id}/backoffice`\n\n const hasAccessToPreview = models.project.hasAccessToPreview(project)\n\n const midZone: NavMenuProps['midZone'] = []\n\n if (isProjectVendorBased) {\n midZone.push([\n {\n label: 'Ventes',\n icon: ,\n items: [\n makeMenuEntry({\n label: 'Liste des ventes',\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.ORDERS}`,\n isActive: screen === Screen.ORDERS,\n }),\n makeMenuEntry({\n label: 'Facturation',\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.ACCOUNT}`,\n isActive: screen === Screen.ACCOUNT,\n }),\n makeMenuEntry({\n label: '\u00C9quipe',\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.TEAM}`,\n isActive: screen === Screen.TEAM,\n }),\n ],\n },\n ])\n\n return midZone\n }\n\n const myProject: NavMenuProps['midZone'][number] = []\n const myProjectItems: MidZoneConfigurationItem[] = [\n makeMenuEntry({\n label: isProjectMembership ? tp('Edit page', 'Project Backoffice') : t('Project description'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.PRESENTATION}`,\n isActive: screen === Screen.PRESENTATION,\n }),\n ]\n\n if (!isProjectMembership) {\n myProjectItems.push(\n makeMenuEntry({\n label: t('Impact and hurdles'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.IMPACT}`,\n isActive: screen === Screen.IMPACT,\n }),\n )\n myProjectItems.push({\n label: t('FAQ'),\n href: `/projects/${project.id}/edit/faq/`,\n isActive: screen === Screen.FAQ,\n })\n }\n\n if (isProjectMembership) {\n myProjectItems.splice(\n 1,\n 0,\n makeMenuEntry({\n label: t('Memberships and donations'),\n isDisabled: isRefused,\n href: isRefused ? undefined : `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.MEMBERSHIPS}`,\n isActive: screen === Screen.MEMBERSHIPS,\n }),\n )\n } else if (isProjectRewardBased) {\n myProjectItems.splice(\n 1,\n 0,\n makeMenuEntry({\n label: t('Rewards'),\n isDisabled: isRefused,\n href: isRefused ? undefined : `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.REWARD}`,\n isActive: screen === Screen.REWARDS,\n }),\n )\n }\n\n if (!isProjectMembership) {\n if (isStaff || isOwner) {\n myProjectItems.splice(\n 2,\n 0,\n makeMenuEntry({\n label: t('Goal and duration'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.GOAL}`,\n isActive: screen === Screen.GOAL,\n }),\n )\n }\n }\n\n const projectImage = models.project.mainImage(project, 'small')\n const projectTitle = models.project.name(project)\n\n myProject.push({\n label:\n projectTitle && projectTitle !== ''\n ? projectTitle\n : isProjectMembership\n ? t('My page')\n : tp('My project', 'Project Manager Menu'),\n hasPlainColorIcon: true,\n href: `/${project.slug}`,\n icon: projectImage ? (\n \n ) : (\n \n ),\n isActive: screen === Screen.MY_PROJECT,\n isClickable: true,\n isDisabled: isRefused,\n items: myProjectItems,\n subtitle: ,\n })\n\n if (isStaff || isOwner) {\n const baseSettingsEntries = [\n makeMenuEntry({\n label: tp('Team', 'Project Manager Menu'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.TEAM}`,\n isActive: screen === Screen.TEAM,\n }),\n makeMenuEntry({\n label: t('Location'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.LOCATION}`,\n isActive: screen === Screen.LOCATION,\n }),\n makeMenuEntry({\n label: t('Analysis tools'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.ANALYTICS}`,\n isActive: screen === Screen.ANALYTICS,\n }),\n ]\n\n if (project.account?.tax_receipt_accreditation && (isStaff || isOwner)) {\n baseSettingsEntries.splice(\n 1,\n 0,\n makeMenuEntry({\n label: t('Tax reduction'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.TAX_DEDUCTION}`,\n isActive: screen === Screen.TAX_DEDUCTION,\n }),\n )\n }\n\n let settingsItems: MidZoneConfigurationItem[] = baseSettingsEntries\n if (!isOnline) {\n settingsItems = [\n makeMenuEntry({\n label: t('Banking information'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.ACCOUNT}`,\n isActive: screen === Screen.ACCOUNT,\n }),\n ...baseSettingsEntries,\n ]\n }\n\n if (\n isProjectDonationBased ||\n (isProjectRewardBased && projectLifecycleStatus !== models.project.LifecycleStatus.FAILURE)\n ) {\n settingsItems.push(\n makeMenuEntry({\n label: isProjectDonationBased ? t('End of fundraising') : t('End of campaign'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.OFFBOARDING}`,\n isActive: screen === Screen.OFFBOARDING,\n }),\n )\n }\n\n myProjectItems.push({\n label: t('Settings'),\n isDisabled: isRefused,\n items: settingsItems,\n })\n }\n\n midZone.push(myProject)\n\n // TODO: make listing a MenuEntry by correctly handling orders reload when accessing several times this screen\n if (!isProjectMembership) {\n midZone.push([\n {\n label: t('Contributions'),\n icon: ,\n isDisabled: !isOnline,\n items: [\n makeMenuEntry({\n label: t('Listing'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.ORDERS}`,\n isActive: screen === Screen.ORDERS,\n }),\n makeMenuEntry({\n label: t('Referrals'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.REFERRALS}`,\n isActive: screen === Screen.REFERRALS,\n }),\n {\n label: t('Checks and transfers'),\n href: `/projects/${project.id}/edit/orders/offline/list/`,\n isActive: screen === Screen.OFFLINE_DONATIONS_LIST,\n },\n makeMenuEntry({\n label: t('Funds transfer'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.ACCOUNT}`,\n isActive: screen === Screen.ACCOUNT,\n }),\n ],\n },\n ])\n } else if (isProjectMembership) {\n midZone.push([\n makeMenuEntry({\n label: t('Members'),\n href: isOngoing ? `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.MEMBERS}` : undefined,\n icon: ,\n isActive: screen === Screen.MEMBERS,\n\n isDisabled: !isOnline,\n }),\n ])\n }\n\n midZone.push([\n makeMenuEntry({\n label: t('Posts'),\n hasPlainColorIcon: screen === Screen.NEWS,\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.NEWS}`,\n icon: ,\n isActive: screen === Screen.NEWS,\n }),\n ])\n\n if (isProjectMembership) {\n midZone.push([\n makeMenuEntry({\n label: t('Revenue'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.ACCOUNT}`,\n isActive: screen === Screen.ACCOUNT,\n hasPlainColorIcon: screen === Screen.ACCOUNT,\n icon: ,\n isDisabled: !isOnline,\n }),\n ])\n }\n\n if (isProjectMembership) {\n midZone.push([\n makeMenuEntry({\n label: t('Statistics'),\n href: `${baseBackofficePath}${PURE_BACKOFFICE_PATHS.DASHBOARD}`,\n isActive: screen === Screen.DASHBOARD,\n hasPlainColorIcon: screen === Screen.DASHBOARD,\n icon: ,\n isDisabled: !isOnline,\n }),\n ])\n }\n\n if (isProjectRewardBased) {\n midZone.push([\n {\n label: t('Statistics'),\n href: isOnline ? `/projects/${project.id}/edit/dashboard/` : undefined,\n hasPlainColorIcon: screen === Screen.DASHBOARD,\n isActive: screen === Screen.DASHBOARD,\n isDisabled: !isOnline,\n icon: ,\n },\n ])\n }\n\n const pathname = isClientSide ? window.location.pathname : `/${project.slug}/`\n midZone.push([\n {\n label: isOnline ? t('See my project') : t('Preview'),\n href:\n isRefused || !hasAccessToPreview\n ? undefined\n : pathname === `/${project.slug}/`\n ? `/${project.slug}/preview/`\n : `/${project.slug}/preview/?prev=${pathname}`,\n icon: hasAccessToPreview ? : ,\n withArrow: hasAccessToPreview,\n isDisabled: isRefused || !hasAccessToPreview,\n tooltip: !isRefused && !hasAccessToPreview ? getTooltipText() : undefined,\n },\n ])\n\n function getTooltipText(): string {\n if (isProjectDonationBased) {\n return t('You must fill in at least a title, an image and your goal to preview the rendering of your page.')\n }\n\n if (isProjectMembership) {\n return t(\n 'You must fill in at least a name, a profile picture and a paid membership to preview the rendering of your page.',\n )\n }\n\n return t(\n 'You must fill in at least a title, an image, your goal and a reward to preview the rendering of your page.',\n )\n }\n\n return midZone\n\n function makeMenuEntry({ href, ...params }: MidZoneConfigurationItem): MidZoneConfigurationItem {\n const clickHandler =\n isPureBackoffice && href && navigate\n ? hooks.makeLinkClickHandler({\n navigate: () => {\n navigate(href.replace(`${baseBackofficePath}`, ''))\n },\n })\n : undefined\n\n return {\n href,\n ...params,\n onClick: clickHandler,\n }\n }\n}\n\nfunction ProjectStatus({ project }: { project: api.Project<'account'> }): React.ReactElement {\n const status = models.project.lifecycleStatus(project)\n if (status === models.project.LifecycleStatus.EXTENDED) {\n return (\n \n \n {t('Extended')}\n \n )\n } else if (status === models.project.LifecycleStatus.ONGOING) {\n return (\n \n \n {t('Online')}\n \n )\n } else if (\n status === models.project.LifecycleStatus.FAILURE ||\n status === models.project.LifecycleStatus.SUCCESS ||\n status === models.project.LifecycleStatus.CLOSED ||\n status === models.project.LifecycleStatus.CANCELLED\n ) {\n return (\n \n \n {t('Finished')}\n \n )\n } else if (project.status === api.ProjectStatus.REFUSED) {\n return (\n \n \n {t('Refused')}\n \n )\n }\n\n return (\n \n \n {t('In progress')}\n \n )\n}\n\nfunction ProjectBaseIcon({ project }: { project: api.Project<'account'> }): React.ReactElement {\n if (project.type === 'membership') {\n return \n } else if (project.type === 'donation') {\n return \n }\n\n return \n}\n\n// TODO: Move these to appropriate collection. (+ Merge DonationIcon w/ its ProjectCard counterpart)\nfunction DonationCoinIcon(props: React.SVGAttributes): React.ReactElement {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\n// FIXME: Replace with crowdfunding.Owl\nfunction SupporterIcon(props: React.SVGAttributes): React.ReactElement {\n return (\n \n \n \n )\n}\n\nconst ProjectImage = styled(plume.styles.image.Avatar)`\n flex: none;\n\n &&& {\n margin: 0;\n }\n`\n\nconst ProjectStatusWrapper = styled(plume.styles.copy.XS)`\n color: ${plume.COLORS.PRIMARY_SAND_700};\n text-transform: none;\n`\n\nconst RoundDot = styled.span<{ color: string }>`\n border-radius: 50%;\n display: inline-block;\n height: 6px;\n margin-bottom: 1px;\n margin-right: 4px;\n width: 6px;\n\n ${({ color = plume.COLORS.PRIMARY_GREY_500 }) => {\n return css`\n background-color: ${color};\n `\n }};\n`\n\nexport const ConfiguredNavMenu = styled(ConfiguredNavMenuComponent)``\n", "import * as React from 'react'\nimport styled, { css } from 'styled-components'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport * as hooks from '@owl-nest/hooks'\nimport * as models from '@owl-nest/models'\nimport { t } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { StepBlock } from './StepBlock'\nimport { ResponsiveMenu } from './ResponsiveMenu'\nimport { ExtraTimeBlock } from './ExtraTimeBlock'\n\nconst LABEL_MARGIN = 16\nconst LIST_ITEM_HEIGHT = 34\nexport const CLOSED_MENU_HEIGHT = 53\n\nexport type AdminSectionConfiguration = {\n projectId: number\n}\n\nexport type CoachingSectionConfiguration = {\n coachAvatarSrc?: string\n discussionUrl: string\n isActive: boolean\n unreadCount?: number\n}\n\nexport type MidZoneConfigurationItem = {\n hasPlainColorIcon?: boolean\n href?: string\n icon?: React.ReactNode\n isActive?: boolean\n isClickable?: boolean\n isDisabled?: boolean\n items?: {\n href?: string\n isActive?: boolean\n isDisabled?: boolean\n items?: {\n href?: string\n isActive?: boolean\n isDisabled?: boolean\n label: string\n onClick?: (event: React.MouseEvent) => void\n tooltip?: string\n }[]\n label: string\n onClick?: (event: React.MouseEvent) => void\n tooltip?: string\n }[]\n label: string\n onClick?: (e: React.MouseEvent) => void\n subtitle?: React.ReactNode\n tooltip?: string\n withArrow?: boolean\n}\n\nexport type MidZoneConfiguration = MidZoneConfigurationItem[][]\n\nexport type NavMenuProps = {\n adminSection: AdminSectionConfiguration | undefined\n className?: string\n coachingSection: CoachingSectionConfiguration | undefined\n locale: api.Lang\n midZone: MidZoneConfiguration\n project: api.Project\n mobileBreakpoint?: string\n}\n\n// TODO: A first effort of refactoring was done with the extraction of\n// `frontend/owl-nest/features/backer-backoffice/src/components/Menu/ResponsiveMenu.tsx`\n// The `ResponsiveMenu` component handles the \"transformation\" of the menu in an\n// animated dropdown in mobile. Since the `backer-backoffice` feature needed the\n// same behavior, the component was extracted. But to limit the impact on the\n// existing `NavMenu` its code was not changed to use `ResponsiveMenu`. If you\n// change anything in `NavMenu`, remember to port the modification in\n// `ResponsiveMenu`\nexport function NavMenu({\n adminSection,\n className,\n coachingSection,\n locale,\n midZone,\n project,\n mobileBreakpoint,\n}: NavMenuProps): React.ReactElement {\n const shouldDisplayStepBlock =\n coachingSection &&\n ![api.ProjectStatus.ONLINE, api.ProjectStatus.WAITING, api.ProjectStatus.REFUSED].includes(project.status)\n\n const activeItemId = React.useMemo(() => {\n let activeItemId = ''\n for (const [i, list] of midZone.entries()) {\n for (const [j, entry] of list.entries()) {\n if (entry.isActive) {\n activeItemId = `${i}:${j}`\n }\n for (const [k, item] of (entry.items ?? []).entries()) {\n if (item.items) {\n const l = item.items.findIndex((subItem) => subItem.isActive)\n if (l > -1) {\n activeItemId = `${i}:${j}:${k}:${l}`\n }\n }\n if (item.isActive) {\n activeItemId = `${i}:${j}:${k}`\n }\n }\n }\n }\n if (coachingSection?.isActive) {\n return 'coaching'\n }\n return activeItemId\n }, [midZone])\n\n const elementMeasuresRef = React.useRef<{ top: number; id: string; isActive?: boolean }[]>([])\n\n plume.hooks.useIsoLayoutEffect(() => {\n return () => {\n elementMeasuresRef.current = []\n }\n })\n\n const breakpoint = mobileBreakpoint ?? plume.BREAKPOINTS.TABLET\n const projectIsDonationBased = models.project.isDonationBased(project)\n const projectIsOnline = models.project.isOnline(project)\n const projectIsVendorBased = models.project.isVendorBased(project)\n const isProjectRewardBased = models.project.isRewardBased(project)\n\n const openSubMenuIndices = React.useMemo(() => getOpenSubMenuIndex(midZone, projectIsOnline), [])\n const [openSubSectionIndex, setOpenSubSectionIndex] = React.useState<[number, number, number] | undefined>(\n openSubMenuIndices,\n )\n\n const setActiveTopPositionRef = React.useRef<(top: number) => void>()\n plume.hooks.useIsoLayoutEffect(() => {\n setTopPosition()\n }, [activeItemId, coachingSection])\n\n const helpURL =\n [api.ProjectStatus.NEW, api.ProjectStatus.REFUSED].includes(project.status) || !coachingSection\n ? 'https://support.ulule.com/hc/requests/new'\n : coachingSection.discussionUrl\n\n return (\n <>\n \n {({ setActiveTopPosition, isMobileNavOpen, containerRef }) => {\n plume.hooks.useIsoLayoutEffect(() => {\n setActiveTopPositionRef.current = setActiveTopPosition\n }, [])\n\n const previousMobileNavState = hooks.usePrevious(isMobileNavOpen)\n React.useEffect(() => {\n if (!isMobileNavOpen && previousMobileNavState === true) {\n setOpenSubSectionIndex(getOpenSubMenuIndex(midZone, projectIsOnline))\n // NOTE: We want to slightly delay the computing of the top offset, to take closing menus animation into account.\n new Promise((resolve) => setTimeout(resolve, 1)).then(() => {\n setTopPosition()\n })\n }\n }, [isMobileNavOpen, previousMobileNavState])\n\n return (\n }\n >\n \n {!projectIsVendorBased && coachingSection && (\n \n \n {coachingSection.coachAvatarSrc && (\n \n )}\n {t('Coaching')}\n {coachingSection.unreadCount !== undefined && coachingSection.unreadCount > 0 && (\n \n )}\n \n {adminSection && (\n \n \n \uD83D\uDE0E\n \n \n )}\n \n )}\n {isProjectRewardBased && }\n \n\n {\n // Note: coachingSection is there only for coach or staff, so we use it to hide or display this section too\n !projectIsVendorBased && shouldDisplayStepBlock && (\n \n \n \n )\n }\n \n \n {midZone.map((section, sectionIndex) => {\n const currentSection = midZone[sectionIndex][0]\n\n return (\n \n {section.map(\n (\n {\n hasPlainColorIcon,\n href,\n icon,\n isActive,\n isClickable,\n isDisabled,\n items = [],\n label,\n onClick,\n tooltip,\n subtitle,\n withArrow,\n },\n subSectionIndex,\n ) => {\n const isSectionOpen = openSubSectionIndex?.[0] === sectionIndex\n const openTertiaryIndex = openSubSectionIndex?.[2] ?? -1\n const isTertiarySectionOpen = isSectionOpen && openTertiaryIndex > -1\n const tertiaryItemsLength = isTertiarySectionOpen\n ? items[openTertiaryIndex].items?.length ?? 0\n : 0\n\n return (\n 1}\n isMobileNavOpen={isMobileNavOpen}\n key={subSectionIndex}\n breakpoint={breakpoint}\n >\n 0 ? 'div' : undefined}\n ref={getRefMeasurer(`${sectionIndex}:${subSectionIndex}`, isActive, 16)}\n href={href}\n narrow={isClickable}\n onClick={(event: React.MouseEvent) => {\n if (!isClickable) {\n toggleMenu(event)\n }\n }}\n uppercase\n breakpoint={breakpoint}\n >\n {icon && {icon}}\n {subtitle ? (\n \n \n {label}\n \n {subtitle}\n \n ) : (\n {label}\n )}\n {withArrow && }\n {tooltip && (\n \n {tooltip}\n \n )}\n \n {items.length > 0 && (\n \n \n \n )}\n {items.length > 0 && (\n \n \n {items.map((item, itemIndex) => {\n if (item.items && item.items.length > 0) {\n return (\n 1}\n isMobileNavOpen={isMobileNavOpen}\n key={subSectionIndex}\n breakpoint={breakpoint}\n >\n ) =>\n toggleMenu(event, itemIndex)\n }\n uppercase\n breakpoint={breakpoint}\n >\n {item.label}\n {!isDisabled && (\n \n )}\n {item.tooltip && (\n \n {item.tooltip}\n \n )}\n \n \n \n {item.items.map((subItem, subItemIndex) => {\n return (\n \n \n \n {subItem.label}\n \n \n \n {subItem.tooltip && subItem.isDisabled && (\n \n \n {subItem.tooltip}\n \n \n )}\n \n \n )\n })}\n \n \n \n )\n }\n return (\n \n \n {item.label}\n \n \n {item.tooltip && item.isDisabled && (\n \n {item.tooltip}\n \n )}\n \n \n )\n })}\n \n \n )}\n \n )\n\n function toggleMenu(event: React.MouseEvent, tertiarySectionIndex?: number) {\n if (!isDisabled) {\n if (items.length > 0) {\n // If there is an active 3rd level submenu entry, close its parent only while keeping the 1st level menu open. Otherwise, open up the parent (2nd level).\n if (tertiarySectionIndex) {\n if (openSubSectionIndex?.[2] === tertiarySectionIndex) {\n setOpenSubSectionIndex([sectionIndex, subSectionIndex, -1])\n } else {\n setOpenSubSectionIndex([sectionIndex, subSectionIndex, tertiarySectionIndex])\n }\n } else if (openSubSectionIndex?.[0] === sectionIndex) {\n setOpenSubSectionIndex(undefined)\n } else {\n setOpenSubSectionIndex([sectionIndex, subSectionIndex, -1])\n }\n }\n if (onClick) {\n onClick(event)\n }\n }\n }\n },\n )}\n \n )\n })}\n \n \n {!projectIsVendorBased && (\n
\n \n
\n )}\n \n )\n }}\n \n \n \n )\n\n function getOpenSubMenuIndex(\n midZone: MidZoneConfiguration,\n isProjectOnline: boolean,\n ): [number, number, number] | undefined {\n let sectionIndex = -1\n let subSectionIndex = -1\n let tertiarySectionIndex = -1\n\n if (!isProjectOnline) {\n // NOTE: When not online, we force open the first section\n sectionIndex = 0\n subSectionIndex = 0\n tertiarySectionIndex = findTertiarySectionIndex(midZone[0][sectionIndex])\n }\n\n if (isProjectOnline) {\n midZone.some((sections, i) => {\n subSectionIndex = sections.findIndex((section) => {\n if (section.isActive) {\n sectionIndex = i\n }\n return section.items?.some((item) => item.isActive || item.items?.some((subItem) => subItem.isActive))\n })\n\n if (subSectionIndex > -1) {\n sectionIndex = i\n tertiarySectionIndex = findTertiarySectionIndex(sections[sectionIndex])\n }\n\n return subSectionIndex > -1\n })\n }\n\n // NOTE: We only want to pre-open the main project nav section when project owner is cooking.\n // As soon as the project is online, the section shall be closed by default.\n if (isProjectOnline && sectionIndex === 0 && subSectionIndex === -1) {\n return undefined\n }\n\n return sectionIndex > -1 || subSectionIndex > -1 ? [sectionIndex, subSectionIndex, tertiarySectionIndex] : undefined\n\n function findTertiarySectionIndex(subSection?: MidZoneConfigurationItem): number {\n return (\n subSection?.items?.findIndex((item) =>\n item.items?.some((tertiarySectionItem) => tertiarySectionItem.isActive),\n ) ?? -1\n )\n }\n }\n\n function getRefMeasurer(id: string, isActive?: boolean, margin: number = LABEL_MARGIN) {\n return (element: any) => {\n if (element instanceof HTMLElement) {\n const { top } = element.getBoundingClientRect()\n if (elementMeasuresRef.current.find((measure) => measure.id === id) === undefined) {\n elementMeasuresRef.current.push({\n top: top - margin,\n id,\n isActive,\n })\n } else {\n elementMeasuresRef.current = elementMeasuresRef.current.map((measure) =>\n measure.id === id ? { ...measure, top: top - margin, isActive } : measure,\n )\n }\n }\n }\n }\n\n function setTopPosition() {\n const activeElementMeasure =\n elementMeasuresRef.current.find((measure) => measure.id === activeItemId) ?? elementMeasuresRef.current[0]\n\n if (activeElementMeasure !== undefined && setActiveTopPositionRef.current) {\n setActiveTopPositionRef.current(activeElementMeasure.top + LABEL_MARGIN)\n }\n }\n}\n\nfunction HelpAndResources({\n locale,\n isMobileNavOpen,\n projectIsDonationBased,\n projectIsOnline,\n helpURL,\n breakpoint,\n}: {\n helpURL: string\n isMobileNavOpen: boolean\n locale: api.Lang\n projectIsDonationBased: boolean\n projectIsOnline: boolean\n breakpoint: string\n}): React.ReactElement {\n return (\n \n \n \n {locale === 'fr' && (\n \n \n Bo\u00EEte \u00E0 outils\n \n \n )}\n \n \n {t('Support center')}\n \n \n {locale === 'fr' && !projectIsDonationBased && (\n \n \n \n {projectIsOnline ? \"Guide d'animation\" : t(\"Creator's guide\")}\n \n \n \n )}\n {locale === 'fr' && (\n \n \n Formations\n \n \n )}\n \n \n {t('Report an issue')}\n \n \n \n \n )\n}\n\nconst MobileHeightDecoy = styled.div<{ breakpoint: string }>`\n height: ${CLOSED_MENU_HEIGHT}px;\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n display: none;\n }\n`\n\nconst SubLabelList = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n`\n\nconst ListDrawer = styled.div`\n overflow: hidden;\n transition-duration: 0.3s;\n transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1);\n`\n\nconst AdminItemAction = styled.a<{ isMobileNavOpen: boolean; breakpoint: string }>`\n font-size: 20px;\n position: relative;\n right: -4px;\n text-decoration: none;\n top: 5px;\n transition: right 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n\n ${({ isMobileNavOpen = false }) => {\n if (!isMobileNavOpen) {\n return css`\n right: 32px;\n `\n }\n }};\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n right: -4px;\n }\n`\n\nconst Caret = styled(plume.glyphs.stroke.CaretUp)<{ flipped?: boolean }>`\n ${({ flipped = false }) => {\n if (!flipped) {\n return css`\n top: 2px !important;\n transform: rotate(180deg);\n transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);\n `\n } else {\n return css`\n top: 3px !important;\n transform: rotate(0deg);\n transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);\n `\n }\n }};\n`\n\nconst CoachItemAction = styled(plume.styles.link.Primary)<{ active: boolean }>`\n align-items: center;\n display: flex;\n position: relative;\n text-transform: uppercase;\n\n ${plume.styles.image.Avatar} {\n left: 0;\n margin-right: 8px;\n }\n\n ${({ active = false }) => {\n if (active) {\n return css`\n color: ${plume.COLORS.PRIMARY_BLUE_500};\n `\n }\n }}\n`\n\nconst IconWrapper = styled(plume.styles.heading.M)<{ plainBackground?: boolean }>`\n align-items: center;\n border-radius: 50%;\n border: 1px solid ${plume.COLORS.PRIMARY_SAND_200};\n box-sizing: border-box;\n color: ${plume.COLORS.PRIMARY_SAND_500};\n display: flex;\n height: 36px;\n justify-content: center;\n left: 0;\n position: absolute;\n top: -8.5px;\n width: 36px;\n\n ${plume.glyphs.Icon}, svg {\n g {\n fill: currentColor;\n }\n }\n\n ${({ plainBackground = false }) => {\n if (plainBackground) {\n return css`\n border-color: ${plume.COLORS.PRIMARY_SAND_100};\n background-color: ${plume.COLORS.PRIMARY_SAND_100};\n `\n }\n }}\n`\n\nconst Label = styled(plume.styles.link.Primary)<{ narrow?: boolean; wrapper?: boolean; breakpoint: string }>`\n ${({ wrapper = false }) =>\n wrapper &&\n css`\n cursor: initial;\n `};\n\n ${({ narrow = false, breakpoint }) =>\n narrow &&\n css`\n display: block;\n width: 90%;\n\n @media screen and ${breakpoint} {\n width: 132px;\n }\n `};\n\n &:hover {\n ${plume.Tooltip} {\n display: flex;\n }\n }\n`\n\nconst SubLabelItem = styled.li<{ disabled?: boolean }>`\n margin: ${LABEL_MARGIN}px 0px;\n\n &:hover {\n ${plume.Tooltip} {\n display: flex;\n }\n }\n\n ${({ disabled }) => {\n // NOTE: we're setting 'cursor: not-allowed' here because\n // there's a 'pointer - events: none' on SubLabel (coming from plume.styles.link.Primary)\n // already that we can't easily/properly bypass.\n if (disabled) {\n return css`\n cursor: not-allowed;\n `\n }\n }}\n`\n\nconst SubLabel = styled(plume.styles.link.Primary)<{ active?: boolean; breakpoint: string }>`\n background: none;\n border: none;\n display: block;\n padding: 0;\n white-space: nowrap;\n\n ${({ active = false }) => {\n if (active) {\n return css`\n color: ${plume.COLORS.PRIMARY_BLUE_500};\n `\n } else {\n return css`\n color: ${plume.COLORS.TEXT_SECONDARY};\n `\n }\n }};\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n ${plume.styles.heading.Card1} {\n white-space: normal;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n`\n\nconst SubLabelTooltipWrapper = styled.div`\n position: absolute;\n left: 0;\n right: 0;\n\n ${plume.Tooltip} {\n &::after {\n left: 30%;\n }\n }\n`\n\nconst NavSection = styled.li<{ isOpen?: boolean }>`\n margin: 8px 0 36px;\n\n &:first-of-type {\n margin: 0 0 28px;\n }\n\n &:last-of-type {\n margin: 33px 0 0;\n }\n\n ${({ isOpen = false }) => {\n if (isOpen) {\n return css`\n margin: 8px 0 24px;\n `\n }\n }};\n`\n\nconst NavSubSection = styled.div<{\n active?: boolean\n disabled?: boolean\n hasIcon?: boolean\n hasSiblings?: boolean\n isMobileNavOpen: boolean\n breakpoint: string\n}>`\n position: relative;\n padding-left: 46px;\n transition: padding-left 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n\n & & {\n padding-left: 0;\n }\n\n ${plume.glyphs.stroke.ArrowRight} {\n color: ${plume.COLORS.PRIMARY_SAND_500};\n position: absolute;\n right: 0;\n top: 1px;\n }\n\n ${plume.glyphs.stroke.CaretDown}, ${plume.glyphs.stroke.CaretUp} {\n color: ${plume.COLORS.PRIMARY_SAND_500};\n cursor: pointer;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n ${plume.Tooltip} {\n text-transform: initial;\n }\n\n ${({ active = false, isMobileNavOpen = false }) => {\n if (active) {\n return css`\n & > ${Label} {\n color: ${plume.COLORS.PRIMARY_BLUE_500};\n }\n\n & ${IconWrapper} {\n background-color: ${plume.COLORS.PRIMARY_BLUE_100};\n border-color: ${plume.COLORS.PRIMARY_BLUE_100};\n color: ${plume.COLORS.PRIMARY_BLUE_500};\n }\n `\n } else if (!active && !isMobileNavOpen) {\n return css<{ breakpoint: string }>`\n & ${IconWrapper} {\n display: none;\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n display: flex;\n }\n }\n `\n }\n }};\n\n ${({ active = false, hasIcon = false, isMobileNavOpen = false }) => {\n if (!isMobileNavOpen && hasIcon && !active) {\n return css<{ breakpoint: string }>`\n padding-left: 4px;\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n padding-left: 46px;\n }\n `\n }\n if (!isMobileNavOpen) {\n return css<{ breakpoint: string }>`\n ${plume.glyphs.stroke.CaretUp} {\n display: none;\n @media screen and ${({ breakpoint }) => breakpoint} {\n display: block;\n }\n }\n `\n }\n }};\n\n ${({ hasSiblings = false }) => {\n if (hasSiblings) {\n return css`\n margin: 20px 0;\n\n &:first-of-type {\n margin: 0 0 20px;\n }\n\n &:last-of-type {\n margin: 20px 0 0;\n }\n `\n }\n }};\n\n ${({ disabled = false }) => {\n if (disabled) {\n return css`\n ${Label} {\n cursor: not-allowed;\n color: ${plume.COLORS.PRIMARY_GREY_500};\n }\n\n ${IconWrapper} {\n // NOTE: Should be BORDER_DISABLED as you would think. But that color as of time of writing (#BDBDBD) is too dark, so we're using this until it is updated.\n border-color: ${plume.COLORS.BORDER_PRIMARY};\n color: ${plume.COLORS.PRIMARY_GREY_500};\n }\n\n ${plume.glyphs.stroke.CaretUp} {\n color: ${plume.COLORS.PRIMARY_SAND_200};\n cursor: not-allowed;\n }\n `\n }\n }};\n`\n\nconst NavList = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n`\n\nconst Section = styled.section`\n border-bottom: 1px solid ${plume.COLORS.PRIMARY_SAND_200};\n box-sizing: border-box;\n padding: 30px 16px 26px;\n width: 100%;\n\n &:last-of-type {\n border-bottom: none;\n }\n`\n\nconst MainSection = styled(Section)``\n\nconst TopSection = styled(Section)<{ hideBottomBorder?: boolean }>`\n padding: 16px;\n\n ${(props) => {\n if (props.hideBottomBorder) {\n return css`\n border-bottom: none;\n `\n }\n }};\n`\n\nconst Coach = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\nconst SectionTitle = styled(plume.styles.copy.XS)<{ hasSubtitle?: boolean; breakpoint: string }>`\n color: inherit;\n font-weight: 600; /* HACK: Irregular font manipulation. We'll be adding copy.XS.semiBold, so this is just by anticipation. */\n text-transform: uppercase;\n\n ${({ hasSubtitle = false }) => {\n if (hasSubtitle) {\n return css<{ breakpoint: string }>`\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n text-transform: none;\n white-space: nowrap;\n width: 90%;\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n width: 132px;\n }\n `\n }\n }};\n`\n\nconst TextAsIcon = styled.span`\n margin-top: -4px;\n`\n\nconst TitleWrapper = styled.span`\n position: relative;\n top: -10px;\n`\n\nexport const Wrapper = styled.div<{ openMobile?: boolean; breakpoint: string }>`\n ${plume.styles.heading.Card1} {\n text-transform: none;\n }\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n ${(props) => {\n if (!props.openMobile) {\n return css`\n ${IconWrapper}, ${plume.styles.image.Avatar} {\n opacity: 1;\n }\n `\n }\n }}\n }\n`\n\nconst StepBlockSection = styled(Section)`\n padding-top: 0;\n`\n", "import * as React from 'react'\nimport styled, { css } from 'styled-components'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport * as hooks from '@owl-nest/hooks'\nimport { t } from '@owl-nest/localize'\nimport * as models from '@owl-nest/models'\nimport * as plume from '@ulule/owl-kit-components/next'\n\ntype Status = 'failed' | 'pending' | 'succeeded' | 'waiting'\n\nexport function StepBlock({ project }: { project: api.Project }): React.ReactElement | null {\n const properties = getStepBlockProperties(project)\n\n if (properties === undefined) {\n return null\n }\n\n return (\n \n {t('Launch')}\n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n {properties.buttonLabel}\n \n \n )\n}\n\nfunction StepTextProperties({ status, text, project }: { status: Status; text: string; project: api.Project }) {\n return (\n <>\n {status === 'pending' ? (\n \n {text}\n \n ) : (\n {text}\n )}\n \n )\n}\n\nfunction getStepBlockProperties(project: api.Project):\n | {\n buttonLabel: string\n href: string\n preparationStatus: Status\n publishingStatus: Status\n rereadStatus: Status\n }\n | undefined {\n const isClientSide = hooks.useClientSide()\n const isOnDiscussionPage = isClientSide && window.location.pathname === getDiscussionUrl(project.id)\n\n switch (project.status) {\n case api.ProjectStatus.NEW:\n if (!models.project.isAllFieldsetsFilled(project)) {\n return {\n preparationStatus: 'pending',\n rereadStatus: 'waiting',\n publishingStatus: 'waiting',\n buttonLabel: t('Read the checklist'),\n href: getLaunchUrl(project.id),\n }\n } else\n return {\n preparationStatus: 'pending',\n rereadStatus: 'waiting',\n publishingStatus: 'waiting',\n buttonLabel: t('Submit for review'),\n href: getLaunchUrl(project.id),\n }\n case api.ProjectStatus.PENDING:\n return {\n preparationStatus: 'succeeded',\n rereadStatus: 'pending',\n publishingStatus: 'waiting',\n buttonLabel: t('Read our advices'),\n href: getLaunchUrl(project.id),\n }\n case api.ProjectStatus.PENDING_OWNER:\n case api.ProjectStatus.PENDING_FINAL_VALIDATION:\n if (project.moderation_message && !project.moderation_message.read_by_owner && !isOnDiscussionPage) {\n return {\n preparationStatus: 'succeeded',\n rereadStatus: 'pending',\n publishingStatus: 'waiting',\n buttonLabel: t('Read message'),\n href: getDiscussionUrl(project.id),\n }\n }\n return {\n preparationStatus: 'succeeded',\n rereadStatus: 'pending',\n publishingStatus: 'waiting',\n buttonLabel: t('Read our advices'),\n href: getLaunchUrl(project.id),\n }\n\n case api.ProjectStatus.VALIDATED:\n if (project.validation_message && !project.validation_message.read_by_owner && !isOnDiscussionPage) {\n return {\n preparationStatus: 'succeeded',\n rereadStatus: 'succeeded',\n publishingStatus: 'pending',\n buttonLabel: t('Read message'),\n href: getDiscussionUrl(project.id),\n }\n } else\n return {\n preparationStatus: 'succeeded',\n rereadStatus: 'succeeded',\n publishingStatus: 'pending',\n buttonLabel: t('Publish'),\n href: getLaunchUrl(project.id),\n }\n default:\n return\n }\n}\n\nfunction getLaunchUrl(id: number) {\n return `/projects/${id}/backoffice/launch/`\n}\n\nfunction getDiscussionUrl(id: number) {\n return `/projects/${id}/discussion/`\n}\n\nconst StepText = styled(plume.styles.heading.XXXXXS)<{ status: Status }>`\n font-weight: 700;\n\n ${({ status }) => {\n if (status === 'succeeded') {\n return css`\n text-decoration: line-through;\n `\n }\n\n if (status === 'pending') {\n return css`\n color: ${plume.COLORS.PRIMARY_BLACK};\n `\n }\n }}\n`\n\nconst StepBlockWrapper = styled.div`\n align-items: flex-start;\n box-shadow: ${plume.EFFECTS.SHADOW_1};\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n max-width: 60%;\n padding: 16px 8px;\n\n a {\n text-decoration: none;\n margin: 0 auto;\n }\n\n ${plume.RoundButton} {\n align-self: center;\n margin-top: 10px;\n white-space: nowrap;\n }\n\n > ${plume.styles.heading.XXXXS} {\n align-self: center;\n color: ${plume.COLORS.PRIMARY_BLACK};\n margin-bottom: 22px;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n max-width: 100%;\n\n a {\n max-width: 175px;\n\n ${plume.RoundButton} {\n width: 100%;\n }\n }\n }\n\n ${plume.styles.heading.XS} {\n margin-bottom: 12px;\n }\n`\n\nconst StepWrapper = styled.div`\n align-items: center;\n display: flex;\n margin-bottom: 15px;\n`\n", "import * as React from 'react'\nimport styled from 'styled-components'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport * as date from '@owl-nest/date'\nimport * as api from '@owl-nest/api-client/latest'\nimport { t, tc, tn } from '@owl-nest/localize'\nimport * as models from '@owl-nest/models'\nimport * as env from '@owl-nest/config'\n\nexport function ExtraTimeBlock({ project }: { project: api.Project }): React.ReactElement | null {\n const baseBackofficePath = `/projects/${project.id}/backoffice`\n\n const endDate = project.date_end\n const extraTimeEndDate = project.date_end_extra_time\n const numberMinutesLeft = endDate ? date.differenceInMinutes(date.addDays(new Date(endDate), 7), new Date()) : 0\n const numberDayToEnd = endDate ? date.differenceInDays(new Date(endDate), new Date()) : 0\n\n const extraTimeStatus = models.project.extratime.getExtraTimeStatus({\n numberMinutesLeft,\n numberDayToEnd,\n extraTimeActivated: models.project.hasExtraTime(project),\n project,\n })\n const userConfig = env.useUserEnv()\n\n if (models.project.extratime.isDisabled(extraTimeStatus) || models.project.extratime.isEnded(extraTimeStatus)) {\n return <>\n }\n\n const isextraTimeOn = extraTimeStatus === models.project.extratime.ExtraTimeStatus.EXTRA_TIME_IS_ON\n const isExtraTimeSaved = extraTimeStatus === models.project.extratime.ExtraTimeStatus.ONLINE_WITH_EXTRA_TIME_SAVED\n const locale = userConfig.lang\n\n return (\n \n {isExtraTimeSaved ? (\n \n {t('Extension activated')}\n \n ) : isextraTimeOn ? (\n \n {t('Extension in progress')}\n \n ) : (\n \n <plume.glyphs.twoToned.StopwatchPlus /> {t('Extension')}\n \n )}\n\n {(isExtraTimeSaved || isextraTimeOn) && extraTimeEndDate ? (\n \n {tc('Until %(date)s at %(hours)s. [Link: Edit]', {\n date: date.format(new Date(extraTimeEndDate), 'dd MMMM yyyy'),\n hours:\n locale === 'fr'\n ? date.format(new Date(extraTimeEndDate), \"H'h'mm\")\n : date.format(new Date(extraTimeEndDate), 'p'),\n\n Link: ,\n })}\n \n ) : (\n <>\n {models.project.isOnline(project) && !models.project.isFinished(project) ? (\n <>\n {t('Want to continue the journey? Extend your project \uD83D\uDC47')}\n \n {t('Activate')}\n \n \n ) : (\n numberMinutesLeft > 0 && (\n <>\n \n {tc(`You only have [strong: %(nbDays)d %(days)s] left to set up your extensions.`, {\n strong: ,\n nbDays:\n numberMinutesLeft > 24 * 60\n ? Math.floor(numberMinutesLeft / (24 * 60))\n : numberMinutesLeft > 60\n ? Math.floor(numberMinutesLeft / 60)\n : numberMinutesLeft,\n days:\n numberMinutesLeft > 24 * 60\n ? tn('day', 'days', Math.floor(numberMinutesLeft / (24 * 60)))\n : numberMinutesLeft > 60\n ? tn('hour', 'hours', Math.floor(numberMinutesLeft / 60))\n : tn('minute', 'minutes', numberMinutesLeft),\n })}\n \n \n {t('Activate')}\n \n \n )\n )}\n \n )}\n \n )\n}\n\nconst Title = styled(plume.styles.heading.XXXXS)`\n align-items: center;\n color: ${plume.COLORS.TEXT_PRIMARY};\n display: flex;\n\n ${plume.glyphs.twoToned.StopwatchPlus} {\n margin-right: 5px;\n }\n`\n\nconst Description = styled(plume.styles.copy.S)`\n text-align: center;\n`\n\nconst Wrapper = styled.div`\n align-items: center;\n border-radius: 8px;\n box-shadow: ${plume.EFFECTS.SHADOW_2};\n box-sizing: content-box;\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin: 16px auto;\n max-width: 172px;\n padding: 20px 12px;\n width: 196px;\n`\n\nconst SmallTitle = styled(plume.styles.copy.S)`\n align-items: center;\n display: flex;\n font-weight: 600; // HACK: Irregular font manipulation. We'll be adding copy.S.semiBold, so this is just by anticipation.\n\n ${plume.glyphs.fill.CheckCircle} {\n color: ${plume.COLORS.SECONDARY_GREEN_500};\n margin-right: 5px;\n }\n`\n\nconst TextInfo = styled(plume.styles.copy.S)`\n text-align: center;\n`\n"], "mappings": "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", "names": ["init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "React", "StepBlock", "project", "properties", "getStepBlockProperties", "StepBlockWrapper", "styles_exports", "StepWrapper", "GlyphPastille", "StepTextProperties", "RoundButton", "status", "text", "Link", "getLaunchUrl", "StepText", "isOnDiscussionPage", "useClientSide", "getDiscussionUrl", "project_exports", "id", "_a", "_b", "_c", "src_default", "__template", "css", "colors_exports", "_d", "effects_exports", "breakpoints_exports", "_e", "init_define_process_env", "init_sentry_release_injection_stub", "React", "ExtraTimeBlock", "project", "baseBackofficePath", "endDate", "extraTimeEndDate", "numberMinutesLeft", "numberDayToEnd", "extraTimeStatus", "project_exports", "userConfig", "useUserEnv", "isextraTimeOn", "isExtraTimeSaved", "locale", "Wrapper", "SmallTitle", "glyphs_exports", "Title", "TextInfo", "format", "Link", "Description", "RoundButton", "_a", "src_default", "styles_exports", "__template", "colors_exports", "_b", "_c", "effects_exports", "_d", "_e", "LABEL_MARGIN", "LIST_ITEM_HEIGHT", "CLOSED_MENU_HEIGHT", "NavMenu", "adminSection", "className", "coachingSection", "locale", "midZone", "project", "mobileBreakpoint", "shouldDisplayStepBlock", "activeItemId", "_a", "i", "list", "j", "entry", "k", "item", "l", "subItem", "elementMeasuresRef", "hooks_exports", "breakpoint", "breakpoints_exports", "projectIsDonationBased", "project_exports", "projectIsOnline", "projectIsVendorBased", "isProjectRewardBased", "openSubMenuIndices", "getOpenSubMenuIndex", "openSubSectionIndex", "setOpenSubSectionIndex", "setActiveTopPositionRef", "setTopPosition", "helpURL", "ResponsiveMenu", "setActiveTopPosition", "isMobileNavOpen", "containerRef", "previousMobileNavState", "usePrevious", "resolve", "Wrapper", "TopSection", "Coach", "CoachItemAction", "getRefMeasurer", "styles_exports", "SectionTitle", "Jewel", "AdminItemAction", "ExtraTimeBlock", "StepBlockSection", "StepBlock", "MainSection", "NavList", "section", "sectionIndex", "currentSection", "NavSection", "hasPlainColorIcon", "href", "icon", "isActive", "isClickable", "isDisabled", "items", "label", "onClick", "tooltip", "subtitle", "withArrow", "subSectionIndex", "_b", "_c", "isSectionOpen", "openTertiaryIndex", "tertiaryItemsLength", "NavSubSection", "Label", "event", "toggleMenu", "IconWrapper", "TitleWrapper", "glyphs_exports", "Tooltip", "Caret", "ListDrawer", "SubLabelList", "itemIndex", "subItemIndex", "SubLabelItem", "SubLabel", "SubLabelTooltipWrapper", "tertiarySectionIndex", "Section", "HelpAndResources", "MobileHeightDecoy", "isProjectOnline", "findTertiarySectionIndex", "sections", "subSection", "tertiarySectionItem", "id", "margin", "element", "top", "measure", "__spreadProps", "__spreadValues", "activeElementMeasure", "TextAsIcon", "src_default", "__template", "_d", "_e", "css", "_f", "_g", "_h", "flipped", "_i", "_j", "active", "colors_exports", "_k", "_l", "plainBackground", "_m", "_n", "_o", "wrapper", "narrow", "_p", "_q", "disabled", "_r", "_s", "_t", "_u", "_v", "_w", "isOpen", "_x", "_y", "_z", "_A", "_B", "_C", "_D", "hasIcon", "hasSiblings", "_E", "_F", "_G", "_H", "_I", "props", "_J", "_K", "_L", "hasSubtitle", "_M", "_N", "_O", "_P", "_Q", "Screen", "allScreens", "pureBackofficeScreens", "PURE_BACKOFFICE_PATHS", "ConfiguredNavMenuComponent", "className", "mobileBreakpoint", "project", "role", "screen", "navigate", "project_exports", "useNavigate", "isClientSide", "useClientSide", "auth", "useAuth", "user", "isStaff", "isOwnerOrStaff", "userConfig", "useUserEnv", "NavMenu", "getAdminData", "getCoachingData", "getMidZone", "_a", "_b", "image_exports", "projectLifecycleStatus", "isOngoing", "isOnline", "isRefused", "isProjectDonationBased", "isProjectMembership", "isProjectRewardBased", "isProjectVendorBased", "isOwner", "isPureBackoffice", "baseBackofficePath", "hasAccessToPreview", "midZone", "glyphs_exports", "makeMenuEntry", "myProject", "myProjectItems", "projectImage", "projectTitle", "ProjectImage", "ProjectBaseIcon", "ProjectStatus", "baseSettingsEntries", "settingsItems", "pathname", "getTooltipText", "_c", "href", "params", "__objRest", "clickHandler", "makeLinkClickHandler", "__spreadProps", "__spreadValues", "status", "ProjectStatusWrapper", "RoundDot", "colors_exports", "SupporterIcon", "DonationCoinIcon", "props", "src_default", "styles_exports", "__template", "_d", "color", "css", "_e", "ConfiguredNavMenu"] }