Skip to content
This repository has been archived by the owner on Sep 1, 2024. It is now read-only.

Commit

Permalink
Merge pull request #133 from att/multiple_delete_fix
Browse files Browse the repository at this point in the history
Multiple delete fix
  • Loading branch information
ohadkoren authored Feb 18, 2024
2 parents 026de17 + 509d1eb commit 75730ed
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions portal/src/app/components/all-experiments/Experiments.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,32 +25,49 @@ const DeleteAriaLabel: string = ALL_EXPERIMENTS_TABLE_EN.BUTTONS.DELETE;
const DuplicateAriaLabel: string = ALL_EXPERIMENTS_TABLE_EN.TABLE_COLUMNS.LINKS.DUPLICATE;

export const Experiments: React.FC = () => {
const navigate = useNavigate();
const { testSuites, status }: IUseExperimentsData = useExperimentsData();
const [openDeleteModal, setOpenDeleteModal] = useState<boolean>(false);
const [checkedRows, setCheckedRows] = useState<Record<number, boolean>>({});
const experimentsData = useMemo(() => (testSuites ? parseExperimentsData(testSuites): []), [testSuites]);
const navigate = useNavigate();
const [experimentsData, setExperimentsData] = useState<ExperimentData[]>([]);
const [itemsToDelete, setItemsToDelete] = useState<ExperimentData[]>([]);


const { post, status: deleteStatus, error: deleteError, cancelRequest: cancelRequestDelete }: IHttp<unknown>
= useFetch<unknown>({ url: APIS.deleteExperiments });
useFetchSpinner(deleteStatus);
useErrorMessage(deleteError);
useEffect(() => cancelRequestDelete, [cancelRequestDelete]);

// Update the experimentsData state when testSuites changes
useEffect(() => {
if (testSuites) {
setExperimentsData(parseExperimentsData(testSuites));
}
}, [testSuites]);

// Update the experimentsData state when delete operation is successful
useEffect(() => {
if (deleteStatus === FetchDataStatus.Success) {
setExperimentsData(prevExperimentsData => prevExperimentsData.filter(experiment => !itemsToDelete.includes(experiment)));
setCheckedRows({});
}
}, [deleteStatus, itemsToDelete]);

const handleDeleteClick: () => void = useCallback((): void => {
setOpenDeleteModal(true);
}, []);

const handleCloseDeleteExperimentModal: (confirm?: boolean) => void = useCallback((confirm?: boolean): void => {
if (confirm) {
const items = experimentsData.filter(experiment => checkedRows[experiment.id]);
setItemsToDelete(items);
const ids: number[] = Object.keys(checkedRows).map((key: string) => parseInt(key))
post({
data: { ids }
});
}
setOpenDeleteModal(false);
}, [post, checkedRows]);
}, [post, experimentsData, checkedRows]);

const handleCheckboxClick = useCallback((rowInfo: ExperimentData): void => {
const rowId = rowInfo.id as number;
Expand Down Expand Up @@ -122,6 +139,7 @@ export const Experiments: React.FC = () => {
accessor: () => null,
cell: (cellInfo: CellContext<ExperimentData, unknown>) => (
<Button
key={cellInfo.row.original.id}
ariaLabel={DuplicateAriaLabel}
size={ButtonSize.NONE}
styleType={ButtonStyleType.WRAPPER}
Expand Down Expand Up @@ -151,7 +169,7 @@ export const Experiments: React.FC = () => {
<>
{ status === FetchDataStatus.Success &&
<div className={styles.title_options_container}>
<label className={styles.experiments_title}>{`${ALL_EXPERIMENTS_TABLE_EN.TITLE} (${testSuites.length})`}</label>
<label className={styles.experiments_title}>{`${ALL_EXPERIMENTS_TABLE_EN.TITLE} (${experimentsData.length})`}</label>
{Object.values(checkedRows).some((value: boolean) => value) && (
<Button
ariaLabel={DeleteAriaLabel}
Expand Down

0 comments on commit 75730ed

Please sign in to comment.