Skip to content

Commit 258ab51

Browse files
committed
Move functions to helpers file
1 parent 1733f07 commit 258ab51

File tree

2 files changed

+321
-181
lines changed

2 files changed

+321
-181
lines changed

src/components/KymaModules/KymaModulesList.js

Lines changed: 79 additions & 181 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ import {
5151
useModuleTemplatesQuery,
5252
} from './kymaModulesQueries';
5353
import { findModuleStatus } from './support';
54+
import {
55+
checkIfAssociatedResourceLeft,
56+
deleteAssociatedResources,
57+
deleteCrResources,
58+
fetchResourceCounts,
59+
generateAssociatedResourcesUrls,
60+
getAssociatedResources,
61+
getCRResource,
62+
handleItemClick,
63+
} from './deleteModulesHelpers';
5464
import { UnmanagedModuleInfo } from './components/UnmanagedModuleInfo';
5565
import { useDelete } from 'shared/hooks/BackendAPI/useMutation';
5666

@@ -78,7 +88,7 @@ export default function KymaModulesList({
7888
const setLayoutColumn = useSetRecoilState(columnLayoutState);
7989
const setIsFormOpen = useSetRecoilState(isFormOpenState);
8090
const { clusterUrl, namespaceUrl } = useUrl();
81-
const fetch = useSingleGet();
91+
const fetchFn = useSingleGet();
8292
const getScope = useGetScope();
8393
const navigate = useNavigate();
8494
const deleteResourceMutation = useDelete();
@@ -393,150 +403,47 @@ export default function KymaModulesList({
393403
);
394404
};
395405

396-
const getAssociatedResources = () => {
397-
if (!chosenModuleIndex) {
398-
return [];
399-
}
400-
const selectedModule = selectedModules[chosenModuleIndex];
401-
const moduleChannel =
402-
selectedModule?.channel || kymaResource?.spec?.channel;
403-
const moduleVersion =
404-
selectedModule?.version ||
405-
findModuleStatus(kymaResource, selectedModule?.name)?.version;
406-
407-
const module = findModuleTemplate(
408-
selectedModule?.name,
409-
moduleChannel,
410-
moduleVersion,
411-
);
412-
return module?.spec?.associatedResources || [];
413-
};
414-
415-
const getCRResource = () => {
416-
if (!chosenModuleIndex) {
417-
return [];
418-
}
419-
const selectedModule = selectedModules[chosenModuleIndex];
420-
const moduleChannel =
421-
selectedModule?.channel || kymaResource?.spec?.channel;
422-
const moduleVersion =
423-
selectedModule?.version ||
424-
findModuleStatus(kymaResource, selectedModule?.name)?.version;
425-
426-
const module = findModuleTemplate(
427-
selectedModule?.name,
428-
moduleChannel,
429-
moduleVersion,
430-
);
431-
432-
const resource = {};
433-
if (module.spec.data) {
434-
resource.group = module.spec.data.apiVersion.split('/')[0];
435-
resource.version = module.spec.data.apiVersion.split('/')[1];
436-
resource.kind = module.spec.data.kind;
437-
}
438-
return resource ? [resource] : [];
439-
};
440-
441-
const handleItemClick = async (kind, group, version) => {
442-
const isNamespaced = await getScope(group, version, kind);
443-
const path = `${pluralize(kind.toLowerCase())}`;
444-
const link = isNamespaced
445-
? namespaceUrl(path, { namespace: '-all-' })
446-
: clusterUrl(path);
447-
448-
navigate(link);
449-
};
450-
451-
const getResources = async (kind, group, version) => {
452-
const url =
453-
group === 'v1'
454-
? '/api/v1'
455-
: `/apis/${group}/${version}/${pluralize(kind.toLowerCase())}`;
456-
457-
try {
458-
const response = await fetch(url);
459-
const json = await response.json();
460-
return json.items;
461-
} catch (e) {
462-
console.warn(e);
463-
return 'Error';
464-
}
465-
};
466-
467-
const getUrlsByNamespace = resources => {
468-
return resources.reduce((urls, resource) => {
469-
const url = `/apis/${resource.apiVersion}/namespaces/${
470-
resource.metadata.namespace
471-
}/${pluralize(resource.kind.toLowerCase())}`;
472-
473-
if (!urls.includes(url)) {
474-
urls.push(url);
475-
}
476-
return urls;
477-
}, []);
478-
};
479-
480-
const generateAssociatedResourcesUrls = async resources => {
481-
const allUrls = [];
482-
483-
for (const resource of resources) {
484-
const isNamespaced = await getScope(
485-
resource.group,
486-
resource.version,
487-
resource.kind,
488-
);
489-
let resources,
490-
urls = [];
491-
if (isNamespaced) {
492-
resources = await getResources(
493-
resource.kind,
494-
resource.group,
495-
resource.version,
496-
);
497-
urls = getUrlsByNamespace(resources);
498-
} else {
499-
urls = [
500-
resource.group === 'v1'
501-
? '/api/v1'
502-
: `/apis/${resource.group}/${resource.version}/${pluralize(
503-
resource.kind.toLowerCase(),
504-
)}`,
505-
];
506-
}
507-
508-
allUrls.push(...urls);
509-
}
510-
511-
return allUrls;
512-
};
513-
514-
const fetchResourceCounts = async resources => {
515-
const counts = {};
516-
for (const resource of resources) {
517-
const resources = await getResources(
518-
resource.kind,
519-
resource.group,
520-
resource.version,
521-
);
522-
counts[`${resource.kind}-${resource.group}-${resource.version}`] =
523-
resources.length;
524-
}
525-
return counts;
526-
};
527-
528406
const [resourceCounts, setResourceCounts] = useState({});
529407
const [forceDeleteUrls, setForceDeleteUrls] = useState([]);
530408
const [crUrls, setCrUrls] = useState([]);
531409
const [allowForceDelete, setAllowForceDelete] = useState(false);
410+
const [associatedResourceLeft, setAssociatedResourceLeft] = useState(false);
532411

533412
useEffect(() => {
534413
const fetchCounts = async () => {
535-
const resources = getAssociatedResources();
414+
const resources = getAssociatedResources(
415+
chosenModuleIndex,
416+
findModuleTemplate,
417+
selectedModules,
418+
kymaResource,
419+
);
420+
536421
const counts = await fetchResourceCounts(resources);
537-
const urls = await generateAssociatedResourcesUrls(resources);
538-
const crUResources = getCRResource();
539-
const crUrl = await generateAssociatedResourcesUrls(crUResources);
422+
423+
const urls = await generateAssociatedResourcesUrls(
424+
resources,
425+
fetchFn,
426+
clusterUrl,
427+
getScope,
428+
namespaceUrl,
429+
navigate,
430+
);
431+
432+
const crUResources = getCRResource(
433+
chosenModuleIndex,
434+
findModuleTemplate,
435+
selectedModules,
436+
kymaResource,
437+
);
438+
439+
const crUrl = await generateAssociatedResourcesUrls(
440+
crUResources,
441+
fetchFn,
442+
clusterUrl,
443+
getScope,
444+
namespaceUrl,
445+
navigate,
446+
);
540447

541448
setResourceCounts(counts);
542449
setForceDeleteUrls(urls);
@@ -547,56 +454,30 @@ export default function KymaModulesList({
547454
// eslint-disable-next-line react-hooks/exhaustive-deps
548455
}, [chosenModuleIndex]);
549456

550-
const checkIfAssociatedResourceLeft = () => {
551-
const resources = getAssociatedResources();
552-
for (const resource of resources) {
553-
if (
554-
resourceCounts[
555-
`${resource.kind}-${resource.group}-${resource.version}`
556-
] > 0
557-
) {
558-
return true;
559-
}
560-
}
561-
return false;
562-
};
457+
useEffect(() => {
458+
const resourcesLeft = checkIfAssociatedResourceLeft(
459+
resourceCounts,
460+
chosenModuleIndex,
461+
findModuleTemplate,
462+
selectedModules,
463+
kymaResource,
464+
);
563465

564-
const deleteAssociatedResources = async () => {
565-
try {
566-
await Promise.all(
567-
forceDeleteUrls.map(async url => {
568-
return await deleteResourceMutation(url);
569-
}),
570-
);
571-
} catch (e) {
572-
console.warn(e);
573-
return 'Error while deleting Associated Resources';
574-
}
575-
};
466+
setAssociatedResourceLeft(resourcesLeft);
576467

577-
const deleteCrResources = async () => {
578-
try {
579-
await Promise.all(
580-
crUrls.map(async url => {
581-
return await deleteResourceMutation(url);
582-
}),
583-
);
584-
} catch (e) {
585-
console.warn(e);
586-
return 'Error while deleting Custom Resource';
587-
}
588-
};
468+
// eslint-disable-next-line react-hooks/exhaustive-deps
469+
}, [resourceCounts]);
589470

590471
return (
591472
<React.Fragment key="modules-list">
592473
{!detailsOpen &&
593474
createPortal(
594475
<DeleteMessageBox
595476
disableDeleteButton={
596-
checkIfAssociatedResourceLeft() ? !allowForceDelete : false
477+
associatedResourceLeft ? !allowForceDelete : false
597478
}
598479
customDeleteText={
599-
checkIfAssociatedResourceLeft() && allowForceDelete
480+
associatedResourceLeft && allowForceDelete
600481
? 'common.buttons.force-delete'
601482
: null
602483
}
@@ -611,7 +492,12 @@ export default function KymaModulesList({
611492
name: selectedModules[chosenModuleIndex]?.name,
612493
})}
613494
</Text>
614-
{getAssociatedResources().length > 0 && (
495+
{getAssociatedResources(
496+
chosenModuleIndex,
497+
findModuleTemplate,
498+
selectedModules,
499+
kymaResource,
500+
).length > 0 && (
615501
<>
616502
<MessageStrip design="Critical" hideCloseButton>
617503
{t('kyma-modules.associated-resources-warning')}
@@ -621,7 +507,12 @@ export default function KymaModulesList({
621507
mode="None"
622508
separators="All"
623509
>
624-
{getAssociatedResources().map(assResource => {
510+
{getAssociatedResources(
511+
chosenModuleIndex,
512+
findModuleTemplate,
513+
selectedModules,
514+
kymaResource,
515+
).map(assResource => {
625516
const resourceCount =
626517
resourceCounts[
627518
`${assResource.kind}-${assResource.group}-${assResource.version}`
@@ -635,6 +526,10 @@ export default function KymaModulesList({
635526
assResource.kind,
636527
assResource.group,
637528
assResource.version,
529+
clusterUrl,
530+
getScope,
531+
namespaceUrl,
532+
navigate,
638533
);
639534
}}
640535
type="Active"
@@ -649,7 +544,7 @@ export default function KymaModulesList({
649544
);
650545
})}
651546
</List>
652-
{checkIfAssociatedResourceLeft() && (
547+
{associatedResourceLeft && (
653548
<CheckBox
654549
checked={allowForceDelete}
655550
onChange={() =>
@@ -666,7 +561,10 @@ export default function KymaModulesList({
666561
resourceTitle={selectedModules[chosenModuleIndex]?.name}
667562
deleteFn={() => {
668563
if (allowForceDelete && forceDeleteUrls.length > 0) {
669-
deleteAssociatedResources();
564+
deleteAssociatedResources(
565+
deleteResourceMutation,
566+
forceDeleteUrls,
567+
);
670568
}
671569
selectedModules.splice(chosenModuleIndex, 1);
672570
setKymaResourceState({
@@ -679,7 +577,7 @@ export default function KymaModulesList({
679577
handleModuleUninstall();
680578
setInitialUnchangedResource(cloneDeep(kymaResourceState));
681579
if (allowForceDelete && forceDeleteUrls.length > 0) {
682-
deleteCrResources();
580+
deleteCrResources(deleteResourceMutation, crUrls);
683581
}
684582
}}
685583
/>,

0 commit comments

Comments
 (0)