Skip to content

Commit

Permalink
Add 'Stage' option ('Preserved users')
Browse files Browse the repository at this point in the history
The 'Stage' option allows to move
a given user from 'Preserved' to
'Stage'.

Signed-off-by: Carla Martinez <carlmart@redhat.com>
  • Loading branch information
carma12 committed Jan 19, 2024
1 parent 2b98ce4 commit f1c92f9
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 16 deletions.
24 changes: 23 additions & 1 deletion src/components/UserSettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,12 @@ import UnlockUser from "./modals/UnlockUser";
import ResetPassword from "./modals/ResetPassword";
import IssueNewCertificate from "./modals/IssueNewCertificate";
import AddOtpToken from "./modals/AddOtpToken";
import StagePreservedUsers from "./modals/StagePreservedUsers";
// Utils
import { API_VERSION_BACKUP } from "src/utils/utils";
// Navigation
import { useNavigate } from "react-router-dom";
import { URL_PREFIX } from "src/navigation/NavRoutes";

export interface PropsToUserSettings {
originalUser: Partial<User>;
Expand All @@ -82,6 +86,9 @@ const UserSettings = (props: PropsToUserSettings) => {
// Alerts to show in the UI
const alerts = useAlerts();

// Navigate
const navigate = useNavigate();

// RTK hook: save user (acive/preserved and stage)
let [saveUser] = useSaveUserMutation();
if (props.from === "stage-users") {
Expand Down Expand Up @@ -233,6 +240,12 @@ const UserSettings = (props: PropsToUserSettings) => {
});
};

// Preserved users - 'Stage' option
const [isStageModalOpen, setIsStageModalOpen] = React.useState(false);
const onCloseStageModal = () => {
setIsStageModalOpen(false);
};

// Kebab
const [isKebabOpen, setIsKebabOpen] = useState(false);

Expand Down Expand Up @@ -302,7 +315,9 @@ const UserSettings = (props: PropsToUserSettings) => {
];

const preservedDropdownItems = [
<DropdownItem key="stage">Stage</DropdownItem>,
<DropdownItem key="stage" onClick={() => setIsStageModalOpen(true)}>
Stage
</DropdownItem>,
<DropdownItem key="restore">Restore</DropdownItem>,
<DropdownItem key="delete" onClick={() => setIsDeleteModalOpen(true)}>
Delete
Expand Down Expand Up @@ -603,6 +618,13 @@ const UserSettings = (props: PropsToUserSettings) => {
onClose={onCloseAddOtpTokenModal}
/>
)}
<StagePreservedUsers
show={isStageModalOpen}
handleModalToggle={onCloseStageModal}
selectedUsers={selectedUsers}
updateSelectedUsers={setSelectedUsers}
onSuccess={() => navigate(URL_PREFIX + "/preserved-users")}
/>
</>
);
};
Expand Down
4 changes: 4 additions & 0 deletions src/components/modals/RestorePreservedUsers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import ErrorModal from "./ErrorModal";
import { ErrorData } from "src/utils/datatypes/globalDataTypes";
// Hooks
import useAlerts from "src/hooks/useAlerts";
// Navigation
import { NavigateFunction } from "react-router-dom";

interface SelectedUsersData {
selectedUsers: string[];
Expand All @@ -38,6 +40,8 @@ export interface PropsToPreservedUsers {
handleModalToggle: () => void;
selectedUsersData: SelectedUsersData;
onRefresh?: () => void;
navigateFunc?: NavigateFunction;
navigateTo?: string;
}

const RestorePreservedUsers = (props: PropsToPreservedUsers) => {
Expand Down
28 changes: 17 additions & 11 deletions src/components/modals/StagePreservedUsers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,16 @@ import ErrorModal from "./ErrorModal";
import { ErrorData } from "src/utils/datatypes/globalDataTypes";
// Hooks
import useAlerts from "src/hooks/useAlerts";
import { PropsToPreservedUsers } from "./RestorePreservedUsers";

const StagePreservedUsers = (props: PropsToPreservedUsers) => {
export interface PropsToStagePreservedUsers {
show: boolean;
handleModalToggle: () => void;
selectedUsers: string[];
updateSelectedUsers: (newSelectedUsers: string[]) => void;
onSuccess: () => void;
}

const StagePreservedUsers = (props: PropsToStagePreservedUsers) => {
// Set dispatch (Redux)
const dispatch = useAppDispatch();

Expand All @@ -55,7 +62,7 @@ const StagePreservedUsers = (props: PropsToPreservedUsers) => {
id: "stage-users-table",
pfComponent: (
<UsersDisplayTable
usersToDisplay={props.selectedUsersData.selectedUsers}
usersToDisplay={props.selectedUsers}
from={"preserved-users"}
/>
),
Expand Down Expand Up @@ -115,7 +122,7 @@ const StagePreservedUsers = (props: PropsToPreservedUsers) => {

setBtnSpinning(true);

props.selectedUsersData.selectedUsers.map((uid) => {
props.selectedUsers.map((uid) => {
const payloadItem = {
method: "user_stage",
params: [[uid], {}],
Expand Down Expand Up @@ -147,22 +154,21 @@ const StagePreservedUsers = (props: PropsToPreservedUsers) => {
handleAPIError(error);
} else {
// Update data from Redux
props.selectedUsersData.selectedUsers.map((user) => {
props.selectedUsers.map((user) => {
dispatch(removePreservedUser(user[0]));
});

// Reset selected values
props.selectedUsersData.updateSelectedUsers([]);

// Refresh data
if (props.onRefresh !== undefined) {
props.onRefresh();
}
props.updateSelectedUsers([]);

// Show alert: success
alerts.addAlert("stage-users-success", "Users staged", "success");

// Close modal
closeModal();

// Navigate to selected page
props.onSuccess();
}
} else if (error) {
// Handle error
Expand Down
4 changes: 2 additions & 2 deletions src/components/tables/UsersDisplayTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ const UsersDisplayTable = (props: PropsToDisplayUsersTable) => {
case "stage-users":
stageUsersListCopy.map((user) => {
props.usersToDisplay.map((selected) => {
if (user.uid === selected || user.uid[0] === selected) {
if (user.uid[0] === selected[0] || user.uid[0] === selected) {
usersToDisplay.push(user);
}
});
Expand All @@ -63,7 +63,7 @@ const UsersDisplayTable = (props: PropsToDisplayUsersTable) => {
case "preserved-users":
preservedUsersListCopy.map((user) => {
props.usersToDisplay.map((selected) => {
if (user.uid === selected || user.uid[0] === selected) {
if (user.uid[0] === selected[0] || user.uid[0] === selected) {
usersToDisplay.push(user);
}
});
Expand Down
5 changes: 3 additions & 2 deletions src/pages/PreservedUsers/PreservedUsers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -502,8 +502,9 @@ const PreservedUsers = () => {
<StagePreservedUsers
show={showStageModal}
handleModalToggle={onStageModalToggle}
selectedUsersData={selectedUsersData}
onRefresh={refreshUsersData}
selectedUsers={selectedUsers}
updateSelectedUsers={setSelectedUsers}
onSuccess={refreshUsersData}
/>
</Page>
);
Expand Down

0 comments on commit f1c92f9

Please sign in to comment.