-
Notifications
You must be signed in to change notification settings - Fork 151
/
PartnerApp.tsx
92 lines (80 loc) · 2.69 KB
/
PartnerApp.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import * as React from "react"
import { Separator, FullBleed, Marquee } from "@artsy/palette"
import { createFragmentContainer, graphql } from "react-relay"
import { NavigationTabsFragmentContainer as NavigationTabs } from "v2/Apps/Partner/Components/NavigationTabs"
import { PartnerHeaderFragmentContainer as PartnerHeader } from "./Components/PartnerHeader"
import { PartnerApp_partner } from "v2/__generated__/PartnerApp_partner.graphql"
import { PartnerHeaderImageFragmentContainer as PartnerHeaderImage } from "./Components/PartnerHeader/PartnerHeaderImage"
import { PartnerMetaFragmentContainer } from "./Components/PartnerMeta"
import { StickyProvider } from "v2/Components/Sticky"
import { PartnerArtistsLoadingContextProvider } from "./Utils/PartnerArtistsLoadingContext"
import { HttpError } from "found"
export interface PartnerAppProps {
partner: PartnerApp_partner
}
export const PartnerApp: React.FC<PartnerAppProps> = ({
partner,
children,
}) => {
const {
profile,
partnerType,
displayFullPartnerPage,
isDefaultProfilePublic,
partnerPageEligible,
categories,
} = partner
if (!isDefaultProfilePublic || !partnerPageEligible) {
throw new HttpError(404)
}
const galleryBadges = ["Black Owned", "Women Owned"]
const eligibleCategories = (categories || []).filter(Boolean)
const categoryNames: string[] = eligibleCategories.map(
category => category?.name || ""
)
const firstEligibleBadgeName: string | undefined = galleryBadges.find(badge =>
categoryNames.includes(badge)
)
return (
<PartnerArtistsLoadingContextProvider>
<StickyProvider>
{profile && displayFullPartnerPage && (
<PartnerHeaderImage profile={profile} />
)}
<PartnerMetaFragmentContainer partner={partner} />
<PartnerHeader partner={partner} />
<FullBleed mb={[2, 4]}>
{firstEligibleBadgeName ? (
<Marquee speed="static" marqueeText={firstEligibleBadgeName} />
) : (
<Separator />
)}
</FullBleed>
{(displayFullPartnerPage || partnerType === "Brand") && (
<NavigationTabs partner={partner} />
)}
{children}
</StickyProvider>
</PartnerArtistsLoadingContextProvider>
)
}
export const PartnerAppFragmentContainer = createFragmentContainer(PartnerApp, {
partner: graphql`
fragment PartnerApp_partner on Partner {
partnerType
displayFullPartnerPage
partnerPageEligible
isDefaultProfilePublic
categories {
id
name
}
profile {
...PartnerHeaderImage_profile
}
...PartnerMeta_partner
...PartnerHeader_partner
...NavigationTabs_partner
}
`,
})