Skip to content

Commit

Permalink
Update to allow multiple ids to be edited
Browse files Browse the repository at this point in the history
Signed-off-by: ibolton336 <ibolton@redhat.com>
  • Loading branch information
ibolton336 committed Oct 5, 2023
1 parent 41d47c3 commit 0eeb915
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 55 deletions.
21 changes: 15 additions & 6 deletions client/src/app/pages/external/jira/components/tracker-status.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import "./tracker-status.css";
import React, { useState } from "react";

import spacing from "@patternfly/react-styles/css/utilities/Spacing/spacing";
import { useTranslation } from "react-i18next";
import {
Expand All @@ -10,26 +10,33 @@ import {
Popover,
Text,
TextContent,
Spinner,
} from "@patternfly/react-core";
import ExclamationCircleIcon from "@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon";

import { IconedStatus } from "@app/components/IconedStatus";
import "./tracker-status.css";

interface ITrackerStatusProps {
name: string;
connected: boolean;
message: string;
isTrackerUpdating?: boolean;
}
const TrackerStatus = ({ name, connected, message }: ITrackerStatusProps) => {
const TrackerStatus = ({
name,
connected,
message,
isTrackerUpdating,
}: ITrackerStatusProps) => {
const { t } = useTranslation();

const [isExpanded, setIsExpanded] = useState(false);
const needsExpanding = message.length > 300;
const messageFirst = message.slice(0, 300);
const messageRest = message.slice(300);

return (
return isTrackerUpdating ? (
<Spinner size="sm" />
) : (
<>
<IconedStatus
preset={connected ? "Ok" : "Error"}
Expand All @@ -42,7 +49,9 @@ const TrackerStatus = ({ name, connected, message }: ITrackerStatusProps) => {
aria-label="More information about no connection"
alertSeverityVariant="danger"
headerIcon={<ExclamationCircleIcon />}
headerContent={t("composed.error", { what: t("terms.instance") })}
headerContent={t("composed.error", {
what: t("terms.instance"),
})}
hasAutoWidth
onHidden={() => setIsExpanded(false)}
bodyContent={
Expand Down
10 changes: 4 additions & 6 deletions client/src/app/pages/external/jira/tracker-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,14 @@ interface FormValues {

export interface TrackerFormProps {
onClose: () => void;
setUpdatingTrackerId: React.Dispatch<
React.SetStateAction<number | null | string>
>;
addUpdatingTrackerId: (id: number) => void;
tracker?: Tracker;
}

export const TrackerForm: React.FC<TrackerFormProps> = ({
tracker,
onClose,
setUpdatingTrackerId,
addUpdatingTrackerId,
}) => {
const { t } = useTranslation();

Expand All @@ -86,7 +84,7 @@ export const TrackerForm: React.FC<TrackerFormProps> = ({
variant: "success",
});

setUpdatingTrackerId(_.data.id);
addUpdatingTrackerId(_.data.id);
};

const onUpdateTrackerSuccess = (
Expand All @@ -100,7 +98,7 @@ export const TrackerForm: React.FC<TrackerFormProps> = ({
variant: "success",
});

setUpdatingTrackerId(tracker.id);
addUpdatingTrackerId(tracker.id);
};

const onCreateUpdatetrackerError = (error: AxiosError) => {
Expand Down
27 changes: 11 additions & 16 deletions client/src/app/pages/external/jira/trackers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import {
Modal,
PageSection,
PageSectionVariants,
Spinner,
Text,
TextContent,
Title,
Expand Down Expand Up @@ -45,7 +44,7 @@ import { ConditionalRender } from "@app/components/ConditionalRender";
import { AppPlaceholder } from "@app/components/AppPlaceholder";
import { ConfirmDialog } from "@app/components/ConfirmDialog";
import { AppTableActionButtons } from "@app/components/AppTableActionButtons";
import useUpdatingTrackerId from "./useUpdatingTrackerId";
import useUpdatingTrackerIds from "./useUpdatingTrackerIds";

export const JiraTrackers: React.FC = () => {
const { t } = useTranslation();
Expand Down Expand Up @@ -149,10 +148,7 @@ export const JiraTrackers: React.FC = () => {
},
} = tableControls;

//Handle tracker update temporary loading state
const [updatingTrackerId, setUpdatingTrackerId] = useUpdatingTrackerId(10000);

//
const [updatingTrackerIds, addUpdatingTrackerId] = useUpdatingTrackerIds();

return (
<>
Expand Down Expand Up @@ -266,15 +262,14 @@ export const JiraTrackers: React.FC = () => {
width={10}
{...getTdProps({ columnKey: "connection" })}
>
{updatingTrackerId === tracker.id ? (
<Spinner size="sm" />
) : (
<TrackerStatus
name={tracker.name}
connected={tracker.connected}
message={tracker.message}
/>
)}
<TrackerStatus
name={tracker.name}
connected={tracker.connected}
message={tracker.message}
isTrackerUpdating={updatingTrackerIds.has(
tracker.id
)}
/>
</Td>
<Td width={20}>
<AppTableActionButtons
Expand Down Expand Up @@ -318,7 +313,7 @@ export const JiraTrackers: React.FC = () => {
>
<TrackerForm
tracker={trackerToUpdate ? trackerToUpdate : undefined}
setUpdatingTrackerId={setUpdatingTrackerId}
addUpdatingTrackerId={addUpdatingTrackerId}
onClose={() => setTrackerModalState(null)}
/>
</Modal>
Expand Down
27 changes: 0 additions & 27 deletions client/src/app/pages/external/jira/useUpdatingTrackerId.ts

This file was deleted.

42 changes: 42 additions & 0 deletions client/src/app/pages/external/jira/useUpdatingTrackerIds.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { useState } from "react";
import dayjs from "dayjs";

export type UpdatableId = {
id: number;
expirationTime: dayjs.ConfigType;
};

const useUpdatingTrackerIds = () => {
const [updatingTrackerIds, setUpdatingTrackerIds] = useState<
Map<number, dayjs.Dayjs>
>(new Map());

const addUpdatingTrackerId = (id: number) => {
const now = dayjs();
const existingExpiry = updatingTrackerIds.get(id);

if (!existingExpiry || existingExpiry.isBefore(now)) {
const expiryDate = dayjs().add(8, "seconds");

setUpdatingTrackerIds((prevMap) => {
const updatedMap = new Map(prevMap);
updatedMap.set(id, expiryDate);
return updatedMap;
});

const timeRemaining = expiryDate.diff(now);

setTimeout(() => {
setUpdatingTrackerIds((prevMap) => {
const updatedMap = new Map(prevMap);
updatedMap.delete(id);
return updatedMap;
});
}, timeRemaining);
}
};

return [updatingTrackerIds, addUpdatingTrackerId] as const;
};

export default useUpdatingTrackerIds;

0 comments on commit 0eeb915

Please sign in to comment.