@epam/ai-dial-chat-hooks 1.3.0-dev.282 → 1.3.0-dev.288

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,39 @@
1
+ import { parseProjectWatchEvent as e } from "./project-events.js";
2
+ import { readSseEvents as t } from "../shared/read-sse-events.js";
3
+ //#region src/project/project-watch-stream.ts
4
+ var n = [
5
+ 1e3,
6
+ 2e3,
7
+ 4e3,
8
+ 8e3,
9
+ 16e3
10
+ ], r = ({ watchProjects: r, ids: i, signal: a, onEvent: o, onReconnected: s, onUnavailable: c }) => {
11
+ let l;
12
+ a.addEventListener("abort", () => clearTimeout(l), { once: !0 });
13
+ let u = (t) => {
14
+ let n = e(t);
15
+ return n != null && o(n), a.aborted;
16
+ }, d = (e) => {
17
+ let t = n[e];
18
+ t == null ? c() : l = setTimeout(() => {
19
+ f(e, !0);
20
+ }, t);
21
+ }, f = async (e, n) => {
22
+ let o;
23
+ try {
24
+ o = await r(i, a);
25
+ } catch {
26
+ if (a.aborted) return;
27
+ if (!n) {
28
+ c();
29
+ return;
30
+ }
31
+ d(e + 1);
32
+ return;
33
+ }
34
+ n && s(), await t(o, u), !a.aborted && d(0);
35
+ };
36
+ f(0, !1);
37
+ };
38
+ //#endregion
39
+ export { n as WATCH_RECONNECT_DELAYS_MS, r as runProjectWatch };
@@ -69,6 +69,10 @@ export interface ProjectsConfiguredClient {
69
69
  id: string;
70
70
  conversationName: string;
71
71
  }) => Promise<void>;
72
+ markProjectConversationViewed: (request: {
73
+ id: string;
74
+ conversationName: string;
75
+ }) => Promise<void>;
72
76
  attachToProjectGenerationRaw: (request: {
73
77
  id: string;
74
78
  attachGenerationDto: {
@@ -140,6 +144,8 @@ export interface ProjectsApiClient {
140
144
  saveProjectConversation: (conversationId: string, conversation: ConversationResponseDto) => Promise<ConversationResponseDto>;
141
145
  renameProjectConversation: (conversationId: string, newTitle: string) => Promise<RenameConversationResponseDto>;
142
146
  deleteProjectConversation: (conversationId: string) => Promise<void>;
147
+ /** Records that the caller has seen the conversation's current version; a host without it keeps no read state. */
148
+ markProjectConversationViewed?: (conversationId: string) => Promise<void>;
143
149
  attachToProjectGeneration: (projectId: string, path: string, signal?: AbortSignal) => Promise<ReadableStream<Uint8Array>>;
144
150
  /** Opens the SSE stream of changes to the given projects; a host without it gets no live updates. */
145
151
  watchProjects?: (ids: string[], signal?: AbortSignal) => Promise<ReadableStream<Uint8Array>>;
@@ -1 +1 @@
1
- {"version":3,"file":"projects-api-client.d.ts","sourceRoot":"","sources":["../../src/project/projects-api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects-api-client.d.ts","sourceRoot":"","sources":["../../src/project/projects-api-client.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,7 @@ var e = (e) => {
68
68
  renameConversationBodyDto: { newTitle: r }
69
69
  }),
70
70
  deleteProjectConversation: (n) => e.deleteProjectConversation(t(n)),
71
+ markProjectConversationViewed: (n) => e.markProjectConversationViewed(t(n)),
71
72
  attachToProjectGeneration: async (t, r, i) => {
72
73
  let { raw: a } = await e.attachToProjectGenerationRaw({
73
74
  id: t,
@@ -2,20 +2,22 @@ import { ProjectConversationListItem } from '@epam/ai-dial-projects';
2
2
  import { ProjectsApiClient } from './projects-api-client';
3
3
  /**
4
4
  * Loads a project's conversations for its Chats list and keeps them in local
5
- * state: there is no live subscription, so the first page is read once per
6
- * project (and on retry), `loadMore` appends the next one, and rename and
7
- * delete update the list in place. Requests are aborted when the project
8
- * changes or the view unmounts. Rename, delete and `loadMore` reject on
9
- * failure for the caller's toast.
5
+ * state: the first page is read once per project (and on retry), `loadMore`
6
+ * appends the next one, `refresh` silently re-reads the rows already shown
7
+ * for live updates, and rename, delete and `markViewed` update the list in
8
+ * place. Requests are aborted when the project changes or the view unmounts.
9
+ * Rename, delete and `loadMore` reject on failure for the caller's toast.
10
10
  *
11
11
  * @param client - Configured project requests, from `createProjectsApiClient`; it must be referentially stable, because a new object reloads the list.
12
12
  * @param projectId - The project's DIAL id, or `null` while none is known.
13
13
  */
14
- export declare const useProjectConversations: (client: Pick<ProjectsApiClient, "listProjectConversations" | "renameProjectConversation" | "deleteProjectConversation">, projectId: string | null) => {
14
+ export declare const useProjectConversations: (client: Pick<ProjectsApiClient, "listProjectConversations" | "renameProjectConversation" | "deleteProjectConversation" | "markProjectConversationViewed">, projectId: string | null) => {
15
15
  retry: () => void;
16
16
  loadMore: () => Promise<void>;
17
17
  rename: (id: string, newTitle: string) => Promise<void>;
18
18
  remove: (id: string) => Promise<void>;
19
+ refresh: () => Promise<void>;
20
+ markViewed: (id: string) => void;
19
21
  items: ProjectConversationListItem[];
20
22
  isLoading: boolean;
21
23
  hasError: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-conversations.d.ts","sourceRoot":"","sources":["../../src/project/use-project-conversations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA8B/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,IAAI,CACV,iBAAiB,EACf,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,CAC9B,EACD,WAAW,MAAM,GAAG,IAAI;;;iBA6EX,MAAM,YAAY,MAAM;iBAaxB,MAAM;WAvIZ,2BAA2B,EAAE;eACzB,OAAO;cACR,OAAO;IACjB,8CAA8C;aACrC,OAAO;IAChB,mCAAmC;mBACpB,OAAO;CA4IvB,CAAC"}
1
+ {"version":3,"file":"use-project-conversations.d.ts","sourceRoot":"","sources":["../../src/project/use-project-conversations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA2D/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,IAAI,CACV,iBAAiB,EACf,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,+BAA+B,CAClC,EACD,WAAW,MAAM,GAAG,IAAI;;;iBAyKX,MAAM,YAAY,MAAM;iBAaxB,MAAM;;qBAlCZ,MAAM;WA/NN,2BAA2B,EAAE;eACzB,OAAO;cACR,OAAO;IACjB,8CAA8C;aACrC,OAAO;IAChB,mCAAmC;mBACpB,OAAO;CA8QvB,CAAC"}
@@ -9,30 +9,44 @@ var i = {
9
9
  }, a = {
10
10
  ...i,
11
11
  isLoading: !1
12
- }, o = ({ items: e }) => e.map(({ id: e, title: t, author: n }) => ({
13
- id: e,
14
- title: t,
15
- authorName: n
16
- })), s = (s, c) => {
17
- let [l, u] = r(i), [d, f] = r(0), p = n(null);
12
+ }, o = 50, s = 100, c = (e, t) => e.map(({ id: e, title: n, author: r, updatedAt: i, isUnread: a }) => {
13
+ let o = a;
14
+ if (t.has(e)) {
15
+ let n = t.get(e);
16
+ i != null && n != null && i > n ? t.delete(e) : o = !1;
17
+ }
18
+ return {
19
+ id: e,
20
+ title: n,
21
+ authorName: r,
22
+ ...o ? { isUnread: !0 } : {}
23
+ };
24
+ }), l = (l, u) => {
25
+ let [d, f] = r(i), [p, m] = r(0), h = n(null), g = n(null), _ = n(0), v = n(/* @__PURE__ */ new Map()), y = n(/* @__PURE__ */ new Map()), b = n(d);
18
26
  t(() => {
19
- if (c == null) {
20
- u(a);
27
+ b.current = d;
28
+ });
29
+ let x = e((e) => {
30
+ for (let { id: t, updatedAt: n } of e) y.current.set(t, n);
31
+ }, []);
32
+ t(() => {
33
+ if (v.current = /* @__PURE__ */ new Map(), y.current = /* @__PURE__ */ new Map(), u == null) {
34
+ f(a);
21
35
  return;
22
36
  }
23
37
  let e = new AbortController();
24
- return p.current = e, (async () => {
25
- u((e) => ({
38
+ return h.current = e, (async () => {
39
+ f((e) => ({
26
40
  ...e,
27
41
  isLoading: !0,
28
42
  hasError: !1,
29
43
  isLoadingMore: !1
30
44
  }));
31
45
  try {
32
- let t = await s.listProjectConversations(c, e.signal);
46
+ let t = await l.listProjectConversations(u, e.signal);
33
47
  if (e.signal.aborted) return;
34
- u({
35
- items: o(t),
48
+ x(t.items), f({
49
+ items: c(t.items, v.current),
36
50
  isLoading: !1,
37
51
  hasError: !1,
38
52
  hasMore: t.hasMore,
@@ -40,70 +54,129 @@ var i = {
40
54
  });
41
55
  } catch {
42
56
  if (e.signal.aborted) return;
43
- u({
57
+ f({
44
58
  ...a,
45
59
  hasError: !0
46
60
  });
47
61
  }
48
- })(), () => e.abort();
62
+ })(), () => {
63
+ e.abort(), g.current?.abort();
64
+ };
49
65
  }, [
50
- s,
51
- c,
52
- d
66
+ l,
67
+ u,
68
+ p,
69
+ x
53
70
  ]);
54
- let m = e(() => f((e) => e + 1), []), h = e(async () => {
55
- let e = p.current;
56
- if (c != null && e != null) {
57
- u((e) => ({
58
- ...e,
59
- isLoadingMore: !0
60
- }));
61
- try {
62
- let t = await s.listProjectConversations(c, e.signal, { offset: l.items.length });
63
- if (e.signal.aborted) return;
64
- u((e) => {
65
- let n = new Set(e.items.map((e) => e.id));
66
- return {
67
- ...e,
68
- items: [...e.items, ...o(t).filter((e) => !n.has(e.id))],
69
- hasMore: t.hasMore,
70
- isLoadingMore: !1
71
- };
72
- });
73
- } catch (t) {
74
- if (e.signal.aborted) return;
75
- throw u((e) => ({
71
+ let S = e(() => m((e) => e + 1), []), C = e(async () => {
72
+ let e = h.current;
73
+ if (u == null || e == null) return;
74
+ let t = _.current;
75
+ f((e) => ({
76
+ ...e,
77
+ isLoadingMore: !0
78
+ }));
79
+ try {
80
+ let n = await l.listProjectConversations(u, e.signal, { offset: d.items.length });
81
+ if (e.signal.aborted) return;
82
+ if (t !== _.current) {
83
+ f((e) => ({
76
84
  ...e,
77
85
  isLoadingMore: !1
78
- })), t;
86
+ }));
87
+ return;
79
88
  }
89
+ x(n.items), f((e) => {
90
+ let t = new Set(e.items.map((e) => e.id));
91
+ return {
92
+ ...e,
93
+ items: [...e.items, ...c(n.items, v.current).filter((e) => !t.has(e.id))],
94
+ hasMore: n.hasMore,
95
+ isLoadingMore: !1
96
+ };
97
+ });
98
+ } catch (t) {
99
+ if (e.signal.aborted) return;
100
+ throw f((e) => ({
101
+ ...e,
102
+ isLoadingMore: !1
103
+ })), t;
104
+ }
105
+ }, [
106
+ l,
107
+ u,
108
+ x,
109
+ d.items.length
110
+ ]), w = e(async () => {
111
+ let e = b.current;
112
+ if (u == null || e.isLoading || e.hasError) return;
113
+ g.current?.abort();
114
+ let t = new AbortController();
115
+ g.current = t, _.current += 1;
116
+ let n = Math.max(e.items.length, o), r = [], i = !0;
117
+ try {
118
+ for (; r.length < n && i;) {
119
+ let e = await l.listProjectConversations(u, t.signal, {
120
+ offset: r.length,
121
+ limit: Math.min(s, n - r.length)
122
+ });
123
+ if (t.signal.aborted) return;
124
+ if (r.push(...e.items), i = e.hasMore, e.items.length === 0) break;
125
+ }
126
+ } catch {
127
+ return;
80
128
  }
129
+ if (t.signal.aborted) return;
130
+ x(r);
131
+ let a = /* @__PURE__ */ new Set(), d = c(r, v.current).filter((e) => !a.has(e.id) && (a.add(e.id), !0));
132
+ f((e) => ({
133
+ ...e,
134
+ items: d,
135
+ hasMore: i,
136
+ isLoadingMore: !1
137
+ }));
81
138
  }, [
82
- s,
83
- c,
84
- l.items.length
85
- ]), g = e(async (e, t) => {
86
- let { name: n } = await s.renameProjectConversation(e, t);
87
- u((t) => ({
139
+ l,
140
+ u,
141
+ x
142
+ ]);
143
+ t(() => () => g.current?.abort(), []);
144
+ let T = e((e) => {
145
+ v.current.set(e, y.current.get(e)), f((t) => ({
146
+ ...t,
147
+ items: t.items.map((t) => t.id === e && t.isUnread ? {
148
+ ...t,
149
+ isUnread: !1
150
+ } : t)
151
+ })), (async () => {
152
+ try {
153
+ await l.markProjectConversationViewed?.(e);
154
+ } catch {}
155
+ })();
156
+ }, [l]), E = e(async (e, t) => {
157
+ let { name: n } = await l.renameProjectConversation(e, t);
158
+ f((t) => ({
88
159
  ...t,
89
160
  items: t.items.map((t) => t.id === e ? {
90
161
  ...t,
91
162
  title: n
92
163
  } : t)
93
164
  }));
94
- }, [s]), _ = e(async (e) => {
95
- await s.deleteProjectConversation(e), u((t) => ({
165
+ }, [l]), D = e(async (e) => {
166
+ await l.deleteProjectConversation(e), f((t) => ({
96
167
  ...t,
97
168
  items: t.items.filter((t) => t.id !== e)
98
169
  }));
99
- }, [s]);
170
+ }, [l]);
100
171
  return {
101
- ...l,
102
- retry: m,
103
- loadMore: h,
104
- rename: g,
105
- remove: _
172
+ ...d,
173
+ retry: S,
174
+ loadMore: C,
175
+ rename: E,
176
+ remove: D,
177
+ refresh: w,
178
+ markViewed: T
106
179
  };
107
180
  };
108
181
  //#endregion
109
- export { s as useProjectConversations };
182
+ export { l as useProjectConversations };
@@ -0,0 +1,24 @@
1
+ import { ProjectsApiClient } from './projects-api-client';
2
+ /** What `useProjectWatch` reports to the page that shows one project. */
3
+ export interface ProjectWatchOptions {
4
+ /** The loaded snapshot's aggregate ETag; the watch opens once it is known, and an event carrying it is skipped. */
5
+ etag: string | undefined;
6
+ /** Silent refresh of everything the page shows; at most one runs at a time, and a rejection is ignored. */
7
+ onChange: () => Promise<void>;
8
+ /** The project was deleted elsewhere; called at most once per project id. */
9
+ onDelete: () => void;
10
+ }
11
+ /**
12
+ * Keeps a page showing one project current: it watches that project, runs
13
+ * `onChange` for each change the page has not loaded yet — one at a time,
14
+ * plus one trailing run for whatever arrived meanwhile — and `onDelete` once
15
+ * when the project is deleted. A dropped stream is reopened with a bounded
16
+ * backoff and followed by one `onChange`; a watch that cannot be opened is
17
+ * not retried for the rest of the visit.
18
+ *
19
+ * @param client - Configured project requests, from `createProjectsApiClient`; it must be referentially stable, because a new object resubscribes.
20
+ * @param projectId - The watched project's DIAL id, or `null` while none is known.
21
+ * @param options - The loaded ETag and the page's callbacks; read at event time, so new identities never resubscribe.
22
+ */
23
+ export declare const useProjectWatch: (client: Pick<ProjectsApiClient, "watchProjects">, projectId: string | null, options: ProjectWatchOptions) => void;
24
+ //# sourceMappingURL=use-project-watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-watch.d.ts","sourceRoot":"","sources":["../../src/project/use-project-watch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,mHAAmH;IACnH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,2GAA2G;IAC3G,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAChD,WAAW,MAAM,GAAG,IAAI,EACxB,SAAS,mBAAmB,KAC3B,IAwEF,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { runProjectWatch as e } from "./project-watch-stream.js";
2
+ import { useEffect as t, useRef as n } from "react";
3
+ import { ProjectWatchAction as r } from "@epam/ai-dial-chat-api-client";
4
+ //#region src/project/use-project-watch.ts
5
+ var i = (i, a, o) => {
6
+ let s = n(o);
7
+ t(() => {
8
+ s.current = o;
9
+ });
10
+ let c = n(null), l = o.etag != null, { watchProjects: u } = i;
11
+ t(() => {
12
+ if (u == null || a == null || !l || c.current === a) return;
13
+ let t = new AbortController(), n = !1, i = !1, o = () => {
14
+ t.signal.aborted || (n ? i = !0 : (n = !0, (async () => {
15
+ try {
16
+ await s.current.onChange();
17
+ } catch {} finally {
18
+ n = !1, i && (i = !1, o());
19
+ }
20
+ })()));
21
+ };
22
+ return e({
23
+ watchProjects: u,
24
+ ids: [a],
25
+ signal: t.signal,
26
+ onEvent: (e) => {
27
+ e.id !== a || t.signal.aborted || (e.action === r.Delete ? (i = !1, t.abort(), s.current.onDelete()) : (e.etag == null || e.etag !== s.current.etag) && o());
28
+ },
29
+ onReconnected: o,
30
+ onUnavailable: () => {
31
+ c.current = a;
32
+ }
33
+ }), () => t.abort();
34
+ }, [
35
+ u,
36
+ a,
37
+ l
38
+ ]);
39
+ };
40
+ //#endregion
41
+ export { i as useProjectWatch };
@@ -1,10 +1,12 @@
1
1
  import { ProjectDetailsDto } from '@epam/ai-dial-chat-api-client';
2
+ import { ProjectRefreshOutcome } from './project-refresh';
2
3
  import { ProjectsApiClient } from './projects-api-client';
3
4
  /**
4
5
  * Loads one project's details. Loading is derived from whether a result
5
6
  * answers the current id and reload token, so a page never renders a stale
6
7
  * project for a new id. A `404` is a not-found result, every other failure an
7
- * error; the request is aborted on unmount and on an id change.
8
+ * error; the request is aborted on unmount and on an id change. `refresh`
9
+ * re-reads the loaded project without the loading state, for live updates.
8
10
  *
9
11
  * @param client - Configured project requests, from `createProjectsApiClient`; it must be referentially stable, because a new object reloads.
10
12
  * @param id - The project's DIAL id, or `null` when the route names none.
@@ -16,5 +18,6 @@ export declare const useProject: (client: Pick<ProjectsApiClient, "getProject">,
16
18
  hasError: boolean;
17
19
  isNotFound: boolean;
18
20
  retry: () => void;
21
+ refresh: () => Promise<ProjectRefreshOutcome>;
19
22
  };
20
23
  //# sourceMappingURL=use-project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-project.d.ts","sourceRoot":"","sources":["../../src/project/use-project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAU/D;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GACrB,QAAQ,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAC7C,IAAI,MAAM,GAAG,IAAI,EACjB,SAAS,OAAO;;;;;;CAuCjB,CAAC"}
1
+ {"version":3,"file":"use-project.d.ts","sourceRoot":"","sources":["../../src/project/use-project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAU/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,GACrB,QAAQ,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAC7C,IAAI,MAAM,GAAG,IAAI,EACjB,SAAS,OAAO;;;;;;mBA2CsB,OAAO,CAAC,qBAAqB,CAAC;CA8BrE,CAAC"}
@@ -1,17 +1,18 @@
1
1
  import { getApiErrorStatus as e } from "../api-error/api-error.js";
2
- import { useCallback as t, useEffect as n, useState as r } from "react";
2
+ import { ProjectRefreshOutcome as t } from "./project-refresh.js";
3
+ import { useCallback as n, useEffect as r, useRef as i, useState as a } from "react";
3
4
  //#region src/project/use-project.ts
4
- var i = (i, a, o) => {
5
- let [s, c] = r(0), [l, u] = r(), d = `${s}:${a ?? ""}`;
6
- n(() => {
7
- if (!o || a == null) return;
5
+ var o = (o, s, c) => {
6
+ let [l, u] = a(0), [d, f] = a(), p = `${l}:${s ?? ""}`;
7
+ r(() => {
8
+ if (!c || s == null) return;
8
9
  let t = new AbortController();
9
10
  return (async () => {
10
11
  try {
11
- let e = await i.getProject(a, t.signal);
12
+ let e = await o.getProject(s, t.signal);
12
13
  if (t.signal.aborted) return;
13
- u({
14
- key: d,
14
+ f({
15
+ key: p,
15
16
  project: e,
16
17
  hasError: !1,
17
18
  isNotFound: !1
@@ -19,8 +20,8 @@ var i = (i, a, o) => {
19
20
  } catch (n) {
20
21
  if (t.signal.aborted) return;
21
22
  let r = e(n) === 404;
22
- u({
23
- key: d,
23
+ f({
24
+ key: p,
24
25
  project: null,
25
26
  hasError: !r,
26
27
  isNotFound: r
@@ -28,21 +29,45 @@ var i = (i, a, o) => {
28
29
  }
29
30
  })(), () => t.abort();
30
31
  }, [
31
- i,
32
32
  o,
33
- a,
34
- d
33
+ c,
34
+ s,
35
+ p
36
+ ]);
37
+ let m = n(() => {
38
+ u((e) => e + 1);
39
+ }, []), h = d?.key === p ? d : void 0, g = h?.project ?? null, _ = i(null);
40
+ r(() => () => {
41
+ _.current?.abort(), _.current = null;
42
+ }, [p]);
43
+ let v = n(async () => {
44
+ if (g == null || s == null) return t.Skipped;
45
+ _.current?.abort();
46
+ let n = new AbortController();
47
+ _.current = n;
48
+ try {
49
+ let e = await o.getProject(s, n.signal);
50
+ return n.signal.aborted ? t.Skipped : (f((t) => t?.key === p ? {
51
+ ...t,
52
+ project: e
53
+ } : t), t.Updated);
54
+ } catch (r) {
55
+ return n.signal.aborted ? t.Skipped : e(r) === 404 ? t.NotFound : t.Failed;
56
+ }
57
+ }, [
58
+ o,
59
+ s,
60
+ p,
61
+ g
35
62
  ]);
36
- let f = t(() => {
37
- c((e) => e + 1);
38
- }, []), p = l?.key === d ? l : void 0;
39
63
  return {
40
- project: p?.project ?? null,
41
- isLoading: o && a != null && p == null,
42
- hasError: p?.hasError ?? !1,
43
- isNotFound: p?.isNotFound ?? !1,
44
- retry: f
64
+ project: g,
65
+ isLoading: c && s != null && h == null,
66
+ hasError: h?.hasError ?? !1,
67
+ isNotFound: h?.isNotFound ?? !1,
68
+ retry: m,
69
+ refresh: v
45
70
  };
46
71
  };
47
72
  //#endregion
48
- export { i as useProject };
73
+ export { o as useProject };
@@ -1 +1 @@
1
- {"version":3,"file":"use-projects.d.ts","sourceRoot":"","sources":["../../src/project/use-projects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAuC/D;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,IAAI,CAAC,iBAAiB,EAAE,cAAc,GAAG,eAAe,CAAC,EACjE,SAAS,OAAO;;;;;;CAoIjB,CAAC"}
1
+ {"version":3,"file":"use-projects.d.ts","sourceRoot":"","sources":["../../src/project/use-projects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAoC/D;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,IAAI,CAAC,iBAAiB,EAAE,cAAc,GAAG,eAAe,CAAC,EACjE,SAAS,OAAO;;;;;;CAmGjB,CAAC"}