-
Notifications
You must be signed in to change notification settings - Fork 336
/
Copy pathJiraServerProviderRow.tsx
95 lines (89 loc) · 3.02 KB
/
JiraServerProviderRow.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
93
94
95
import graphql from 'babel-plugin-relay/macro'
import {useFragment} from 'react-relay'
import {JiraServerProviderRow_viewer$key} from '~/__generated__/JiraServerProviderRow_viewer.graphql'
import JiraServerConfigMenu from '../../../../components/JiraServerConfigMenu'
import JiraServerProviderLogo from '../../../../components/JiraServerProviderLogo'
import useAtmosphere from '../../../../hooks/useAtmosphere'
import {MenuPosition} from '../../../../hooks/useCoords'
import useMenu from '../../../../hooks/useMenu'
import useMutationProps, {MenuMutationProps} from '../../../../hooks/useMutationProps'
import {ExternalLinks, Providers} from '../../../../types/constEnums'
import JiraServerClientManager from '../../../../utils/JiraServerClientManager'
import SendClientSideEvent from '../../../../utils/SendClientSideEvent'
import ProviderRowContactUs from './ProviderRowContactUs'
interface Props {
teamId: string
viewerRef: JiraServerProviderRow_viewer$key
}
graphql`
fragment JiraServerProviderRowTeamMember on TeamMember {
integrations {
jiraServer {
auth {
id
isActive
}
sharedProviders {
id
}
}
}
}
`
const JiraServerProviderRow = (props: Props) => {
const {viewerRef, teamId} = props
const viewer = useFragment(
graphql`
fragment JiraServerProviderRow_viewer on User {
teamMember(teamId: $teamId) {
id
...JiraServerProviderRowTeamMember @relay(mask: false)
}
}
`,
viewerRef
)
const atmosphere = useAtmosphere()
const {submitting, submitMutation, onError, onCompleted} = useMutationProps()
const mutationProps = {submitting, submitMutation, onError, onCompleted} as MenuMutationProps
const {teamMember} = viewer
const {integrations} = teamMember!
const {jiraServer} = integrations
const isActive = !!jiraServer?.auth?.isActive
const {togglePortal, originRef, menuPortal, menuProps} = useMenu(MenuPosition.UPPER_RIGHT)
const provider = jiraServer?.sharedProviders[0]
const openOAuth = () => {
if (provider) {
JiraServerClientManager.openOAuth(atmosphere, provider.id, teamId, mutationProps)
}
}
return (
<>
<ProviderRowContactUs
connected={!!(isActive && provider)}
onConnectClick={openOAuth}
submitting={submitting}
togglePortal={togglePortal}
menuRef={originRef}
providerName={Providers.JIRA_SERVER_NAME}
providerDescription={Providers.JIRA_SERVER_DESC}
providerLogo={<JiraServerProviderLogo />}
contactUsUrl={ExternalLinks.INTEGRATIONS_JIRASERVER}
onContactUsSubmit={() => {
SendClientSideEvent(atmosphere, 'Clicked Jira Server Request Button')
}}
hasProvider={!!provider}
/>
{provider &&
menuPortal(
<JiraServerConfigMenu
menuProps={menuProps}
mutationProps={mutationProps}
teamId={teamId}
providerId={provider.id}
/>
)}
</>
)
}
export default JiraServerProviderRow