Skip to content

Commit c7396a9

Browse files
authored
feat: start/stop functionality subscriptions (#4320)
1 parent 644fd98 commit c7396a9

File tree

6 files changed

+102
-35
lines changed

6 files changed

+102
-35
lines changed

src/shared/copy/notifications/categories/subscriptions.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,8 @@ export const subscriptionUpdateFail = (): Notification => ({
1111
...defaultErrorNotification,
1212
message: `Failed to update Subscription, please try again.`,
1313
})
14+
15+
export const subscriptionStatusUpdateFail = (): Notification => ({
16+
...defaultErrorNotification,
17+
message: `Failed to update Subscription status, please try again.`,
18+
})

src/writeData/subscriptions/components/SubscriptionDetailsPage.scss

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,8 @@
3131
}
3232
}
3333
&__status {
34-
width: 75%;
35-
float: right;
3634
padding-left: 24px;
3735
padding-top: 64px;
38-
display: flex;
3936
text-transform: uppercase;
4037

4138
&--RUNNING {
@@ -58,5 +55,8 @@
5855
color: #4d4d60;
5956
margin-left: 10px;
6057
}
58+
&--button {
59+
margin-right: 24px;
60+
}
6161
}
6262
}

src/writeData/subscriptions/components/SubscriptionDetailsPage.tsx

Lines changed: 56 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@ import {
1717
FontWeight,
1818
SubwayNav,
1919
SubwayNavModel,
20+
Button,
21+
ComponentColor,
22+
ComponentStatus,
23+
ButtonType,
2024
} from '@influxdata/clockface'
2125
import BrokerDetails from 'src/writeData/subscriptions/components/BrokerDetails'
2226
import ParsingDetails from 'src/writeData/subscriptions/components/ParsingDetails'
2327
import SubscriptionDetails from 'src/writeData/subscriptions/components/SubscriptionDetails'
24-
import CloudUpgradeButton from 'src/shared/components/CloudUpgradeButton'
2528
import GetResources from 'src/resources/components/GetResources'
2629

2730
// Contexts
@@ -38,9 +41,6 @@ import {AppState, ResourceType, Bucket} from 'src/types'
3841
// Utils
3942
import {getAll} from 'src/resources/selectors'
4043

41-
// Actions
42-
import {shouldShowUpgradeButton} from 'src/me/selectors'
43-
4444
// Graphics
4545
import {FormLogo} from 'src/writeData/subscriptions/graphics/FormLogo'
4646

@@ -82,11 +82,14 @@ const navigationSteps: SubscriptionNavigationModel[] = [
8282

8383
const SubscriptionDetailsPage: FC = () => {
8484
const [active, setFormActive] = useState<Steps>(Steps.BrokerForm)
85-
const {currentSubscription, loading, saveForm, updateForm} = useContext(
86-
SubscriptionUpdateContext
87-
)
85+
const {
86+
currentSubscription,
87+
loading,
88+
saveForm,
89+
updateForm,
90+
setStatus,
91+
} = useContext(SubscriptionUpdateContext)
8892
const {change} = useContext(SubscriptionListContext)
89-
const showUpgradeButton = useSelector(shouldShowUpgradeButton)
9093
const {id} = useParams<{id: string}>()
9194
const buckets = useSelector((state: AppState) =>
9295
getAll<Bucket>(state, ResourceType.Buckets).filter(b => b.type === 'user')
@@ -122,15 +125,6 @@ const SubscriptionDetailsPage: FC = () => {
122125
scrollable={true}
123126
className="subscription-details-page"
124127
>
125-
{showUpgradeButton && (
126-
<FlexBox
127-
justifyContent={JustifyContent.FlexEnd}
128-
alignItems={AlignItems.FlexEnd}
129-
stretchToFitHeight={true}
130-
>
131-
<CloudUpgradeButton />
132-
</FlexBox>
133-
)}
134128
<div className="subscription-details-page__progress">
135129
<SubwayNav
136130
currentStep={getActiveStep(active)}
@@ -140,21 +134,53 @@ const SubscriptionDetailsPage: FC = () => {
140134
settingUpText="MQTT Connector"
141135
/>
142136
</div>
143-
<Heading
144-
element={HeadingElement.H3}
145-
weight={FontWeight.Regular}
146-
className="subscription-details-page__status"
137+
<FlexBox
138+
justifyContent={JustifyContent.SpaceBetween}
139+
alignItems={AlignItems.FlexEnd}
140+
stretchToFitHeight={true}
147141
>
148-
Status:
149-
<span
150-
className={
151-
currentSubscription &&
152-
`subscription-details-page__status--${currentSubscription.status}`
153-
}
142+
<Heading
143+
element={HeadingElement.H3}
144+
weight={FontWeight.Regular}
145+
className="subscription-details-page__status"
154146
>
155-
{currentSubscription && currentSubscription.status}
156-
</span>
157-
</Heading>
147+
Status:
148+
<span
149+
className={
150+
currentSubscription &&
151+
`subscription-details-page__status--${currentSubscription.status}`
152+
}
153+
>
154+
{currentSubscription && currentSubscription.status}
155+
</span>
156+
</Heading>
157+
{!(
158+
currentSubscription.status === 'VALIDATING' ||
159+
currentSubscription.status === 'INVALID'
160+
) && (
161+
<Button
162+
text={
163+
currentSubscription.status === 'RUNNING' ? 'stop' : 'start'
164+
}
165+
color={
166+
currentSubscription.status === 'RUNNING'
167+
? ComponentColor.Danger
168+
: ComponentColor.Success
169+
}
170+
onClick={() => {
171+
if (currentSubscription.status === 'RUNNING') {
172+
setStatus(false)
173+
} else {
174+
setStatus(true)
175+
}
176+
}}
177+
type={ButtonType.Submit}
178+
testID="subscription-details-page--status-button"
179+
status={ComponentStatus.Default}
180+
className="subscription-details-page__status--button"
181+
/>
182+
)}
183+
</FlexBox>
158184
{active === Steps.BrokerForm && (
159185
<BrokerDetails
160186
setFormActive={setFormActive}

src/writeData/subscriptions/context/api.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export const getByIDAPI = async (id: typeof GetBrokerSubParams) => {
7373
if (res.status != 200) {
7474
throw new Error(res.data.message)
7575
}
76+
return res.data
7677
}
7778

7879
export const getStatusAPI = async (id: typeof GetBrokerSubsStatusParams) => {

src/writeData/subscriptions/context/subscription.create.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export const SubscriptionCreateProvider: FC = ({children}) => {
107107
history.push(`/orgs/${org.id}/${LOAD_DATA}/${SUBSCRIPTIONS}`)
108108
})
109109
.catch(() => {
110+
setLoading(RemoteDataState.Done)
110111
dispatch(notify(subscriptionCreateFail()))
111112
})
112113
}

src/writeData/subscriptions/context/subscription.update.tsx

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
// Libraries
22
import React, {FC, useState, useCallback, useContext, useEffect} from 'react'
3-
import {updateAPI} from 'src/writeData/subscriptions/context/api'
3+
import {
4+
updateAPI,
5+
updateStatusAPI,
6+
getByIDAPI,
7+
} from 'src/writeData/subscriptions/context/api'
48
import {useHistory} from 'react-router-dom'
59
import {useDispatch, useSelector} from 'react-redux'
610

@@ -13,7 +17,10 @@ import {sanitizeUpdateForm} from '../utils/form'
1317
// Types
1418
import {RemoteDataState} from 'src/types'
1519
import {Subscription} from 'src/types/subscriptions'
16-
import {subscriptionUpdateFail} from 'src/shared/copy/notifications'
20+
import {
21+
subscriptionUpdateFail,
22+
subscriptionStatusUpdateFail,
23+
} from 'src/shared/copy/notifications'
1724

1825
// Contexts
1926

@@ -25,6 +32,7 @@ export interface SubscriptionUpdateContextType {
2532
saveForm: (subscription) => void
2633
updateForm: (subscription) => void
2734
loading: RemoteDataState
35+
setStatus: (isActive) => void
2836
}
2937

3038
export const DEFAULT_CONTEXT: SubscriptionUpdateContextType = {
@@ -91,6 +99,7 @@ export const DEFAULT_CONTEXT: SubscriptionUpdateContextType = {
9199
},
92100
updateForm: () => {},
93101
loading: RemoteDataState.NotStarted,
102+
setStatus: () => {},
94103
} as SubscriptionUpdateContextType
95104

96105
export const SubscriptionUpdateContext = React.createContext<
@@ -125,6 +134,7 @@ export const SubscriptionUpdateProvider: FC = ({children}) => {
125134
history.push(`/orgs/${org.id}/${LOAD_DATA}/${SUBSCRIPTIONS}`)
126135
})
127136
.catch(() => {
137+
setLoading(RemoteDataState.Done)
128138
dispatch(notify(subscriptionUpdateFail()))
129139
})
130140
}
@@ -144,6 +154,29 @@ export const SubscriptionUpdateProvider: FC = ({children}) => {
144154
update(currentSubscription)
145155
}
146156

157+
const setStatus = (isActive: boolean): any => {
158+
setLoading(RemoteDataState.Loading)
159+
const params = {id: currentID, data: {isActive}}
160+
updateStatusAPI(params)
161+
.then(() => {
162+
getSubscription()
163+
})
164+
.catch(() => {
165+
setLoading(RemoteDataState.Done)
166+
dispatch(notify(subscriptionStatusUpdateFail()))
167+
})
168+
}
169+
170+
const getSubscription = async (): Promise<void> => {
171+
const sub = await getByIDAPI({id: currentID})
172+
if (sub) {
173+
setCurrentSubscription(sub)
174+
setLoading(RemoteDataState.Done)
175+
} else {
176+
history.push(`/orgs/${org.id}/${LOAD_DATA}/${SUBSCRIPTIONS}`)
177+
setLoading(RemoteDataState.Done)
178+
}
179+
}
147180
return (
148181
<SubscriptionUpdateContext.Provider
149182
value={{
@@ -152,6 +185,7 @@ export const SubscriptionUpdateProvider: FC = ({children}) => {
152185
updateForm,
153186
saveForm,
154187
loading,
188+
setStatus,
155189
}}
156190
>
157191
{children}

0 commit comments

Comments
 (0)