Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ebf0011

Browse files
committed
Refactor primary buttons
1 parent 17f692a commit ebf0011

File tree

2 files changed

+55
-54
lines changed

2 files changed

+55
-54
lines changed

site/src/components/WorkspaceActions/WorkspaceActions.tsx

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next"
44
import { WorkspaceStatus } from "../../api/typesGenerated"
55
import {
66
ActionLoadingButton,
7+
CancelButton,
78
ChangeVersionButton,
89
DeleteButton,
910
DisabledButton,
@@ -43,7 +44,8 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
4344
canChangeVersions,
4445
}) => {
4546
const { t } = useTranslation("workspacePage")
46-
const { canCancel, canAcceptJobs, actions } = buttonAbilities(workspaceStatus)
47+
const { canCancel, canAcceptJobs, primaryActions, secondaryActions } =
48+
buttonAbilities(workspaceStatus)
4749
const canBeUpdated = isOutdated && canAcceptJobs
4850

4951
// A mapping of button type to the corresponding React component
@@ -83,26 +85,36 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
8385
),
8486
}
8587

86-
// memoize so this isn't recalculated every time we fetch the workspace
87-
const [primaryAction, ...secondaryActions] = useMemo(
88-
() =>
89-
isUpdating
90-
? [ButtonTypesEnum.updating, ...actions]
91-
: canBeUpdated
92-
? [ButtonTypesEnum.update, ...actions]
93-
: actions,
94-
[actions, canBeUpdated, isUpdating],
95-
)
96-
9788
return (
98-
<DropdownButton
99-
primaryAction={buttonMapping[primaryAction]}
100-
canCancel={canCancel}
101-
handleCancel={handleCancel}
102-
secondaryActions={secondaryActions.map((action) => ({
103-
action,
104-
button: buttonMapping[action],
105-
}))}
106-
/>
89+
<div>
90+
{canBeUpdated &&
91+
(isUpdating
92+
? buttonMapping[ButtonTypesEnum.updating]
93+
: buttonMapping[ButtonTypesEnum.update])}
94+
{primaryActions.map((primaryAction) => buttonMapping[primaryAction])}
95+
{canCancel && <CancelButton handleAction={handleCancel} />}
96+
</div>
10797
)
98+
// // memoize so this isn't recalculated every time we fetch the workspace
99+
// const [primaryAction, ...secondaryActions] = useMemo(
100+
// () =>
101+
// isUpdating
102+
// ? [ButtonTypesEnum.updating, ...actions]
103+
// : canBeUpdated
104+
// ? [ButtonTypesEnum.update, ...actions]
105+
// : actions,
106+
// [actions, canBeUpdated, isUpdating],
107+
// )
108+
109+
// return (
110+
// <DropdownButton
111+
// primaryAction={buttonMapping[primaryAction]}
112+
// canCancel={canCancel}
113+
// handleCancel={handleCancel}
114+
// secondaryActions={secondaryActions.map((action) => ({
115+
// action,
116+
// button: buttonMapping[action],
117+
// }))}
118+
// />
119+
// )
108120
}

site/src/components/WorkspaceActions/constants.ts

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ export type ButtonMapping = {
2424
}
2525

2626
interface WorkspaceAbilities {
27-
actions: ButtonTypesEnum[]
27+
primaryActions: ButtonTypesEnum[]
28+
secondaryActions?: ButtonTypesEnum[]
2829
canCancel: boolean
2930
canAcceptJobs: boolean
3031
}
@@ -35,80 +36,68 @@ export const buttonAbilities = (
3536
return statusToAbilities[status]
3637
}
3738

39+
const defaultSecondaryActions = [
40+
ButtonTypesEnum.settings,
41+
ButtonTypesEnum.changeVersion,
42+
ButtonTypesEnum.delete,
43+
]
44+
3845
const statusToAbilities: Record<WorkspaceStatus, WorkspaceAbilities> = {
3946
starting: {
40-
actions: [ButtonTypesEnum.starting],
47+
primaryActions: [ButtonTypesEnum.starting],
4148
canCancel: true,
4249
canAcceptJobs: false,
4350
},
4451
running: {
45-
actions: [
46-
ButtonTypesEnum.stop,
47-
ButtonTypesEnum.settings,
48-
ButtonTypesEnum.changeVersion,
49-
ButtonTypesEnum.delete,
50-
],
52+
primaryActions: [ButtonTypesEnum.stop],
53+
secondaryActions: defaultSecondaryActions,
5154
canCancel: false,
5255
canAcceptJobs: true,
5356
},
5457
stopping: {
55-
actions: [ButtonTypesEnum.stopping],
58+
primaryActions: [ButtonTypesEnum.stopping],
5659
canCancel: true,
5760
canAcceptJobs: false,
5861
},
5962
stopped: {
60-
actions: [
61-
ButtonTypesEnum.start,
62-
ButtonTypesEnum.settings,
63-
ButtonTypesEnum.changeVersion,
64-
ButtonTypesEnum.delete,
65-
],
63+
primaryActions: [ButtonTypesEnum.start],
64+
secondaryActions: defaultSecondaryActions,
6665
canCancel: false,
6766
canAcceptJobs: true,
6867
},
6968
canceled: {
70-
actions: [
71-
ButtonTypesEnum.start,
72-
ButtonTypesEnum.stop,
73-
ButtonTypesEnum.settings,
74-
ButtonTypesEnum.changeVersion,
75-
ButtonTypesEnum.delete,
76-
],
69+
primaryActions: [ButtonTypesEnum.start, ButtonTypesEnum.stop],
70+
secondaryActions: defaultSecondaryActions,
7771
canCancel: false,
7872
canAcceptJobs: true,
7973
},
8074
// in the case of an error
8175
failed: {
82-
actions: [
83-
ButtonTypesEnum.start,
84-
ButtonTypesEnum.stop,
85-
ButtonTypesEnum.settings,
86-
ButtonTypesEnum.changeVersion,
87-
ButtonTypesEnum.delete,
88-
],
76+
primaryActions: [ButtonTypesEnum.start, ButtonTypesEnum.stop],
77+
secondaryActions: defaultSecondaryActions,
8978
canCancel: false,
9079
canAcceptJobs: true,
9180
},
9281
/**
9382
* disabled states
9483
*/
9584
canceling: {
96-
actions: [ButtonTypesEnum.canceling],
85+
primaryActions: [ButtonTypesEnum.canceling],
9786
canCancel: false,
9887
canAcceptJobs: false,
9988
},
10089
deleting: {
101-
actions: [ButtonTypesEnum.deleting],
90+
primaryActions: [ButtonTypesEnum.deleting],
10291
canCancel: true,
10392
canAcceptJobs: false,
10493
},
10594
deleted: {
106-
actions: [ButtonTypesEnum.deleted],
95+
primaryActions: [ButtonTypesEnum.deleted],
10796
canCancel: false,
10897
canAcceptJobs: true,
10998
},
11099
pending: {
111-
actions: [ButtonTypesEnum.pending],
100+
primaryActions: [ButtonTypesEnum.pending],
112101
canCancel: false,
113102
canAcceptJobs: false,
114103
},

0 commit comments

Comments
 (0)