Skip to content

Commit 68b9821

Browse files
Show edit disable schedule button
1 parent 78ba545 commit 68b9821

File tree

3 files changed

+93
-100
lines changed

3 files changed

+93
-100
lines changed

portal/src/graphql/adminapi/UserDetailsAccountStatus.module.css

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,16 @@
1-
.cell--not-first {
2-
@apply mt-6;
3-
}
4-
5-
.cell--last {
6-
@apply border-b-0;
7-
}
8-
91
.actionCell {
10-
padding-left: 1px;
11-
display: grid;
122
grid-template:
13-
"plabel paction"
14-
"pbody paction"
15-
"pspacer pspacer"
3+
"plabel paction"
4+
"pbody paction"
5+
"pdescription paction"
166
/ auto min-content min-content;
17-
grid-gap: 4px 8px;
7+
@apply grid;
8+
@apply gap-x-2 gap-y-1;
9+
@apply py-6;
1810
}
1911

20-
.actionCellSpacer {
21-
grid-area: pspacer;
22-
@apply h-4;
12+
.actionCell:last-child {
13+
@apply border-b-0;
2314
}
2415

2516
.actionCellLabel {
@@ -30,8 +21,13 @@
3021
grid-area: pbody;
3122
}
3223

24+
.actionCellDescription {
25+
grid-area: pdescription;
26+
@apply flex flex-col;
27+
}
28+
3329
.actionCellActionButtonContainer {
34-
@apply flex flex-row place-self-center justify-between items-center gap-2;
30+
@apply flex flex-col place-self-center justify-between items-end gap-4;
3531
grid-area: paction;
3632
}
3733

portal/src/graphql/adminapi/UserDetailsAccountStatus.tsx

Lines changed: 78 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { IStyle, Label, Text } from "@fluentui/react";
22
import { FormattedMessage, Context } from "@oursky/react-messageformat";
33
import React, { useContext } from "react";
4-
import cn from "classnames";
54
import styles from "./UserDetailsAccountStatus.module.css";
65
import ListCellLayout from "../../ListCellLayout";
76
import { useSystemConfig } from "../../context/SystemConfigContext";
@@ -120,9 +119,7 @@ const DisableUserCell: React.VFC<DisableUserCellProps> =
120119
const { data } = props;
121120
const buttonStates = useButtonStates(data);
122121
return (
123-
<ListCellLayout
124-
className={cn(styles.actionCell, styles["cell--not-first"])}
125-
>
122+
<ListCellLayout className={styles.actionCell}>
126123
<div className={styles.actionCellLabel}>
127124
<Text
128125
styles={{
@@ -140,66 +137,75 @@ const DisableUserCell: React.VFC<DisableUserCellProps> =
140137
>
141138
<FormattedMessage id="UserDetailsAccountStatus.disable-user.body" />
142139
</Text>
140+
</div>
141+
{buttonStates.toggleDisable.isDisabledIndefinitelyOrTemporarily &&
142+
(buttonStates.toggleDisable.disableReason != null ||
143+
buttonStates.toggleDisable.temporarilyDisabledUntil != null) ? (
144+
<div className={styles.actionCellDescription}>
145+
{buttonStates.toggleDisable.disableReason != null ? (
146+
<>
147+
<Text
148+
styles={{
149+
root: labelTextStyle,
150+
}}
151+
>
152+
{buttonStates.toggleDisable.disableReason}
153+
</Text>
154+
</>
155+
) : null}
143156

144-
{buttonStates.toggleDisable.isDisabledIndefinitelyOrTemporarily &&
145-
buttonStates.toggleDisable.disableReason != null ? (
146-
<>
147-
<br />
148-
<Text
149-
styles={{
150-
root: labelTextStyle,
151-
}}
152-
>
153-
{buttonStates.toggleDisable.disableReason}
154-
</Text>
155-
</>
156-
) : null}
157-
158-
{buttonStates.toggleDisable.isDisabledIndefinitelyOrTemporarily &&
159-
buttonStates.toggleDisable.temporarilyDisabledUntil != null ? (
160-
<>
161-
<br />
162-
<Text
163-
styles={{
164-
root: labelTextStyle,
165-
}}
166-
>
167-
<FormattedMessage
168-
id="UserDetailsAccountStatus.disable-user.until"
169-
values={{
170-
until:
171-
formatDatetime(
172-
locale,
173-
buttonStates.toggleDisable.temporarilyDisabledUntil
174-
) ?? "",
157+
{buttonStates.toggleDisable.temporarilyDisabledUntil != null ? (
158+
<>
159+
<Text
160+
styles={{
161+
root: labelTextStyle,
175162
}}
176-
/>
177-
</Text>
178-
</>
179-
) : null}
180-
</div>
181-
<OutlinedActionButton
182-
disabled={buttonStates.toggleDisable.buttonDisabled}
183-
theme={
184-
buttonStates.toggleDisable.isDisabledIndefinitelyOrTemporarily
185-
? themes.actionButton
186-
: themes.destructive
187-
}
188-
className={cn(styles.actionCellActionButton)}
189-
iconProps={
190-
buttonStates.toggleDisable.isDisabledIndefinitelyOrTemporarily
191-
? { iconName: "Play" }
192-
: { iconName: "Blocked" }
193-
}
194-
text={
195-
buttonStates.toggleDisable.isDisabledIndefinitelyOrTemporarily ? (
196-
<FormattedMessage id="UserDetailsAccountStatus.disable-user.action.enable" />
197-
) : (
163+
>
164+
<FormattedMessage
165+
id="UserDetailsAccountStatus.disable-user.until"
166+
values={{
167+
until:
168+
formatDatetime(
169+
locale,
170+
buttonStates.toggleDisable.temporarilyDisabledUntil
171+
) ?? "",
172+
}}
173+
/>
174+
</Text>
175+
</>
176+
) : null}
177+
</div>
178+
) : null}
179+
{buttonStates.toggleDisable.isDisabledIndefinitelyOrTemporarily ? (
180+
<div className={styles.actionCellActionButtonContainer}>
181+
<OutlinedActionButton
182+
disabled={buttonStates.toggleDisable.buttonDisabled}
183+
theme={themes.actionButton}
184+
iconProps={{ iconName: "Play" }}
185+
text={
186+
<FormattedMessage id="UserDetailsAccountStatus.disable-user.action.enable" />
187+
}
188+
/>
189+
<OutlinedActionButton
190+
disabled={buttonStates.toggleDisable.buttonDisabled}
191+
theme={themes.destructive}
192+
iconProps={{ iconName: "Calendar" }}
193+
text={
194+
<FormattedMessage id="UserDetailsAccountStatus.disable-user.action.edit-schedule" />
195+
}
196+
/>
197+
</div>
198+
) : (
199+
<OutlinedActionButton
200+
disabled={buttonStates.toggleDisable.buttonDisabled}
201+
theme={themes.destructive}
202+
className={styles.actionCellActionButton}
203+
iconProps={{ iconName: "Blocked" }}
204+
text={
198205
<FormattedMessage id="UserDetailsAccountStatus.disable-user.action.disable" />
199-
)
200-
}
201-
/>
202-
<div className={cn(styles.actionCellSpacer)} />
206+
}
207+
/>
208+
)}
203209
</ListCellLayout>
204210
);
205211
};
@@ -210,19 +216,17 @@ const AnonymizeUserCell: React.VFC<AnonymizeUserCellProps> =
210216
const { data } = props;
211217
const buttonStates = useButtonStates(data);
212218
return (
213-
<ListCellLayout
214-
className={cn(styles.actionCell, styles["cell--not-first"])}
215-
>
219+
<ListCellLayout className={styles.actionCell}>
216220
<Text
217-
className={cn(styles.actionCellLabel)}
221+
className={styles.actionCellLabel}
218222
styles={{
219223
root: labelTextStyle,
220224
}}
221225
>
222226
<FormattedMessage id="UserDetailsAccountStatus.anonymize-user.title" />
223227
</Text>
224228
<Text
225-
className={cn(styles.actionCellBody)}
229+
className={styles.actionCellBody}
226230
styles={{
227231
root: bodyTextStyle,
228232
}}
@@ -236,7 +240,7 @@ const AnonymizeUserCell: React.VFC<AnonymizeUserCellProps> =
236240
? themes.actionButton
237241
: themes.destructive
238242
}
239-
className={cn(styles.actionCellActionButton)}
243+
className={styles.actionCellActionButton}
240244
iconProps={
241245
buttonStates.anonymize.anonymizeAt != null
242246
? { iconName: "Undo" }
@@ -250,7 +254,6 @@ const AnonymizeUserCell: React.VFC<AnonymizeUserCellProps> =
250254
)
251255
}
252256
/>
253-
<div className={cn(styles.actionCellSpacer)} />
254257
</ListCellLayout>
255258
);
256259
};
@@ -262,35 +265,29 @@ const RemoveUserCell: React.VFC<RemoveUserCellProps> = function RemoveUserCell(
262265
const { data } = props;
263266
const buttonStates = useButtonStates(data);
264267
return (
265-
<ListCellLayout
266-
className={cn(
267-
styles.actionCell,
268-
styles["cell--not-first"],
269-
styles["cell--last"]
270-
)}
271-
>
268+
<ListCellLayout className={styles.actionCell}>
272269
<Text
273-
className={cn(styles.actionCellLabel)}
270+
className={styles.actionCellLabel}
274271
styles={{
275272
root: labelTextStyle,
276273
}}
277274
>
278275
<FormattedMessage id="UserDetailsAccountStatus.remove-user.title" />
279276
</Text>
280277
<Text
281-
className={cn(styles.actionCellBody)}
278+
className={styles.actionCellBody}
282279
styles={{
283280
root: bodyTextStyle,
284281
}}
285282
>
286283
<FormattedMessage id="UserDetailsAccountStatus.remove-user.body" />
287284
</Text>
288285
{buttonStates.delete.deleteAt != null ? (
289-
<div className={cn(styles.actionCellActionButtonContainer)}>
286+
<div className={styles.actionCellActionButtonContainer}>
290287
<OutlinedActionButton
291288
disabled={buttonStates.delete.buttonDisabled}
292289
theme={themes.actionButton}
293-
className={cn(styles.actionCellActionButton)}
290+
className={styles.actionCellActionButton}
294291
iconProps={{ iconName: "Undo" }}
295292
text={
296293
<FormattedMessage id="UserDetailsAccountStatus.remove-user.action.cancel" />
@@ -299,7 +296,7 @@ const RemoveUserCell: React.VFC<RemoveUserCellProps> = function RemoveUserCell(
299296
<OutlinedActionButton
300297
disabled={buttonStates.delete.buttonDisabled}
301298
theme={themes.destructive}
302-
className={cn(styles.actionCellActionButton)}
299+
className={styles.actionCellActionButton}
303300
iconProps={{ iconName: "Delete" }}
304301
text={
305302
<FormattedMessage id="UserDetailsAccountStatus.remove-user.action.remove-now" />
@@ -310,14 +307,13 @@ const RemoveUserCell: React.VFC<RemoveUserCellProps> = function RemoveUserCell(
310307
<OutlinedActionButton
311308
disabled={buttonStates.delete.buttonDisabled}
312309
theme={themes.destructive}
313-
className={cn(styles.actionCellActionButton)}
310+
className={styles.actionCellActionButton}
314311
iconProps={{ iconName: "Delete" }}
315312
text={
316313
<FormattedMessage id="UserDetailsAccountStatus.remove-user.action.remove" />
317314
}
318315
/>
319316
)}
320-
<div className={cn(styles.actionCellSpacer)} />
321317
</ListCellLayout>
322318
);
323319
};

portal/src/locale-data/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,7 @@
458458
"UserDetailsAccountStatus.disable-user.until": "Disabled until {until}",
459459
"UserDetailsAccountStatus.disable-user.action.disable": "Disable user",
460460
"UserDetailsAccountStatus.disable-user.action.enable": "Enable user",
461+
"UserDetailsAccountStatus.disable-user.action.edit-schedule": "Edit Disable Schedule",
461462
"UserDetailsAccountStatus.anonymize-user.title": "Anonymize User",
462463
"UserDetailsAccountStatus.anonymize-user.body": "Delete all data of this user, only the user ID is retained.",
463464
"UserDetailsAccountStatus.anonymize-user.action.anonymize": "Anonymize user",

0 commit comments

Comments
 (0)