@@ -263,6 +266,9 @@ export const JiraTrackers: React.FC = () => {
name={tracker.name}
connected={tracker.connected}
message={tracker.message}
+ isTrackerUpdating={updatingTrackerIds.has(
+ tracker.id
+ )}
/>
@@ -307,6 +313,7 @@ export const JiraTrackers: React.FC = () => {
>
setTrackerModalState(null)}
/>
diff --git a/client/src/app/pages/external/jira/useUpdatingTrackerIds.ts b/client/src/app/pages/external/jira/useUpdatingTrackerIds.ts
new file mode 100644
index 0000000000..7f0eb3331a
--- /dev/null
+++ b/client/src/app/pages/external/jira/useUpdatingTrackerIds.ts
@@ -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
+ >(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;
diff --git a/client/src/app/queries/trackers.ts b/client/src/app/queries/trackers.ts
index a0a05cffb2..c7706ff3fc 100644
--- a/client/src/app/queries/trackers.ts
+++ b/client/src/app/queries/trackers.ts
@@ -49,14 +49,14 @@ export const useCreateTrackerMutation = (
};
export const useUpdateTrackerMutation = (
- onSuccess: (res: any) => void,
+ onSuccess: (res: any, tracker: Tracker) => void,
onError: (err: AxiosError) => void
) => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: updateTracker,
- onSuccess: (res) => {
- onSuccess(res);
+ onSuccess: (res, tracker) => {
+ onSuccess(res, tracker);
queryClient.invalidateQueries([TrackersQueryKey]);
},
onError: onError,
|