mirror of
https://github.com/portainer/portainer.git
synced 2025-07-19 05:19:39 +02:00
feat(helm): helm actions [r8s-259] (#715)
Co-authored-by: James Player <james.player@portainer.io> Co-authored-by: Cara Ryan <cara.ryan@portainer.io> Co-authored-by: stevensbkang <skan070@gmail.com>
This commit is contained in:
parent
dfa32b6755
commit
4ee349bd6b
117 changed files with 4161 additions and 696 deletions
|
@ -0,0 +1,77 @@
|
|||
import { compact } from 'lodash';
|
||||
import { Event } from 'kubernetes-types/core/v1';
|
||||
|
||||
import { createStore } from '@/react/kubernetes/datatables/default-kube-datatable-store';
|
||||
import { EventsDatatable } from '@/react/kubernetes/components/EventsDatatable';
|
||||
import { useEvents } from '@/react/kubernetes/queries/useEvents';
|
||||
import { useEnvironmentId } from '@/react/hooks/useEnvironmentId';
|
||||
|
||||
import { useTableState } from '@@/datatables/useTableState';
|
||||
import { Widget } from '@@/Widget';
|
||||
import { TextTip } from '@@/Tip/TextTip';
|
||||
|
||||
import { GenericResource } from '../../types';
|
||||
|
||||
export const storageKey = 'k8sHelmEventsDatatable';
|
||||
export const settingsStore = createStore(storageKey, {
|
||||
id: 'Date',
|
||||
desc: true,
|
||||
});
|
||||
|
||||
export function HelmEventsDatatable({
|
||||
namespace,
|
||||
releaseResources,
|
||||
}: {
|
||||
namespace: string;
|
||||
releaseResources: GenericResource[];
|
||||
}) {
|
||||
const environmentId = useEnvironmentId();
|
||||
const tableState = useTableState(settingsStore, storageKey);
|
||||
|
||||
const eventsQuery = useEvents(environmentId, {
|
||||
namespace,
|
||||
queryOptions: {
|
||||
autoRefreshRate: tableState.autoRefreshRate * 1000,
|
||||
select: (data) => filterRelatedEvents(data, releaseResources),
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<Widget>
|
||||
<EventsDatatable
|
||||
dataset={eventsQuery.data || []}
|
||||
title={
|
||||
<TextTip inline color="blue" className="!text-xs">
|
||||
Events reflect the latest revision only.
|
||||
</TextTip>
|
||||
}
|
||||
titleIcon={null}
|
||||
tableState={tableState}
|
||||
isLoading={eventsQuery.isInitialLoading}
|
||||
data-cy="k8sAppDetail-eventsTable"
|
||||
// no widget to avoid extra padding from app/react/components/datatables/TableContainer.tsx
|
||||
noWidget
|
||||
/>
|
||||
</Widget>
|
||||
);
|
||||
}
|
||||
|
||||
export function useHelmEventsTableState() {
|
||||
return useTableState(settingsStore, storageKey);
|
||||
}
|
||||
|
||||
export function filterRelatedEvents(
|
||||
events: Event[],
|
||||
resources: GenericResource[]
|
||||
) {
|
||||
const relatedUids = getReleaseUids(resources);
|
||||
const relatedUidsSet = new Set(relatedUids);
|
||||
return events.filter(
|
||||
(event) =>
|
||||
event.involvedObject.uid && relatedUidsSet.has(event.involvedObject.uid)
|
||||
);
|
||||
}
|
||||
|
||||
function getReleaseUids(resources: GenericResource[]) {
|
||||
return compact(resources.map((resource) => resource.metadata.uid));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue