@epam/ai-dial-chat-hooks 1.3.0-dev.10 → 1.3.0-dev.13

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.
package/file-manager.d.ts CHANGED
@@ -407,7 +407,9 @@ export declare enum FileOperationKind {
407
407
  FilesMoved = "filesMoved",
408
408
  /** A copy whose every item landed in its own source folder (Duplicate). */
409
409
  FileDuplicated = "fileDuplicated",
410
- FilesDuplicated = "filesDuplicated"
410
+ FilesDuplicated = "filesDuplicated",
411
+ /** One or more shared-with-me items were removed from the Shared tab. */
412
+ FilesUnshared = "filesUnshared"
411
413
  }
412
414
 
413
415
  /**
@@ -775,6 +777,11 @@ export declare interface UseDialFileListingResult {
775
777
  mergeCreatedFolder: (parentApiPath: string, created: CreateFolderResponseDto, inheritedPermissions?: string[]) => void;
776
778
  /** Forces the listing effect to re-fetch the currently browsed folder. */
777
779
  bumpRetry: () => void;
780
+ /**
781
+ * Drops the named root rows from the Shared tab's cached listing, so an
782
+ * unshared item disappears at once instead of waiting for the refetch.
783
+ */
784
+ removeSharedRootItems: (names: string[]) => void;
778
785
  }
779
786
 
780
787
  /**
@@ -1096,7 +1103,7 @@ export declare interface UseDialFileMutationsResult {
1096
1103
  * shared retry counter after each mutation settles rather than holding its
1097
1104
  * own cache copy.
1098
1105
  */
1099
- export declare const useDialFileSharing: ({ filesApi, bucket, rootLabel, bumpRetry, onNotification, }: UseDialFileSharingOptions) => UseDialFileSharingResult;
1106
+ export declare const useDialFileSharing: ({ filesApi, bucket, rootLabel, bumpRetry, onNotification, onOperationSuccess, removeSharedRootItems, }: UseDialFileSharingOptions) => UseDialFileSharingResult;
1100
1107
 
1101
1108
  /** Options accepted by `useDialFileSharing`. */
1102
1109
  export declare interface UseDialFileSharingOptions {
@@ -1110,6 +1117,10 @@ export declare interface UseDialFileSharingOptions {
1110
1117
  bumpRetry: () => void;
1111
1118
  /** Called when a sharing mutation fails and should surface a toast notification. */
1112
1119
  onNotification?: (notification: FileManagerNotification) => void;
1120
+ /** Called with a structured event once an unshare succeeds, so the host can show its success toast. */
1121
+ onOperationSuccess?: (event: FileOperationSuccessEvent) => void;
1122
+ /** Removes the unshared root rows from the cached Shared listing ahead of the refetch. */
1123
+ removeSharedRootItems?: (names: string[]) => void;
1113
1124
  }
1114
1125
 
1115
1126
  /** Values returned by `useDialFileSharing`. */
@@ -4,7 +4,7 @@ var e = /* @__PURE__ */ function(e) {
4
4
  }({}), t = /* @__PURE__ */ function(e) {
5
5
  return e.Empty = "empty", e.ForbiddenSymbols = "forbiddenSymbols", e.ReservedName = "reservedName", e.TooLong = "tooLong", e.DuplicateName = "duplicateName", e;
6
6
  }({}), n = /* @__PURE__ */ function(e) {
7
- return e.FolderCreated = "folderCreated", e.FileRenamed = "fileRenamed", e.FileDownloaded = "fileDownloaded", e.FilesDownloaded = "filesDownloaded", e.FileCopied = "fileCopied", e.FilesCopied = "filesCopied", e.FileMoved = "fileMoved", e.FilesMoved = "filesMoved", e.FileDuplicated = "fileDuplicated", e.FilesDuplicated = "filesDuplicated", e;
7
+ return e.FolderCreated = "folderCreated", e.FileRenamed = "fileRenamed", e.FileDownloaded = "fileDownloaded", e.FilesDownloaded = "filesDownloaded", e.FileCopied = "fileCopied", e.FilesCopied = "filesCopied", e.FileMoved = "fileMoved", e.FilesMoved = "filesMoved", e.FileDuplicated = "fileDuplicated", e.FilesDuplicated = "filesDuplicated", e.FilesUnshared = "filesUnshared", e;
8
8
  }({});
9
9
  //#endregion
10
10
  export { e as FileManagerNotificationReason, t as FileNameValidationErrorReason, n as FileOperationKind };
@@ -144,6 +144,15 @@ var _ = ({ filesApi: _, bucket: v, rootLabel: y, activeTab: b, onNotification: x
144
144
  ]), ve = l((e, t, n) => {
145
145
  E((r) => re(r, e, t, n));
146
146
  }, []), ye = l((e) => {
147
+ if (e.length === 0) return;
148
+ let t = new Set(e);
149
+ E((e) => {
150
+ let n = e.get("");
151
+ if (n == null) return e;
152
+ let r = new Map(e);
153
+ return r.set("", n.filter((e) => !t.has(e.name))), r;
154
+ }), F((t) => t?.filter((t) => !e.some((e) => t === `/${y}/${e}`)));
155
+ }, [y]), be = l((e) => {
147
156
  if (!S) return;
148
157
  let n = e == null ? "" : o(e, y), r = e ?? `/${y}`;
149
158
  if (J((e) => {
@@ -185,7 +194,7 @@ var _ = ({ filesApi: _, bucket: v, rootLabel: y, activeTab: b, onNotification: x
185
194
  S,
186
195
  x,
187
196
  y
188
- ]), be = d(() => {
197
+ ]), xe = d(() => {
189
198
  let e = /* @__PURE__ */ new Set(), t = new Set([...W, ...q]);
190
199
  for (let n of t) {
191
200
  let t = o(n, y);
@@ -197,7 +206,7 @@ var _ = ({ filesApi: _, bucket: v, rootLabel: y, activeTab: b, onNotification: x
197
206
  q,
198
207
  T,
199
208
  y
200
- ]), xe = l((e) => {
209
+ ]), Se = l((e) => {
201
210
  S && (W.forEach((t) => {
202
211
  e.has(t) || U.current.delete(o(t, y));
203
212
  }), G(e), [...e].filter((e) => {
@@ -230,9 +239,9 @@ var _ = ({ filesApi: _, bucket: v, rootLabel: y, activeTab: b, onNotification: x
230
239
  S,
231
240
  x,
232
241
  y
233
- ]), Se = l(() => {
242
+ ]), Ce = l(() => {
234
243
  B.current != null && (clearTimeout(B.current), B.current = null), V.current?.(), V.current = null, z(null), R(!1);
235
- }, []), Ce = l((e, t) => {
244
+ }, []), we = l((e, t) => {
236
245
  if (S) {
237
246
  if (B.current != null && (clearTimeout(B.current), B.current = null), V.current?.(), V.current = null, !t.trim()) {
238
247
  z(null), R(!1);
@@ -267,7 +276,7 @@ var _ = ({ filesApi: _, bucket: v, rootLabel: y, activeTab: b, onNotification: x
267
276
  C,
268
277
  S,
269
278
  y
270
- ]), $ = C ? `/${y}/${C}` : `/${y}`, we = d(() => {
279
+ ]), $ = C ? `/${y}/${C}` : `/${y}`, Te = d(() => {
271
280
  let e = Z[0];
272
281
  if (e) return a($) === a(`/${y}`) ? e : i(e.items ?? [], $);
273
282
  }, [
@@ -283,25 +292,26 @@ var _ = ({ filesApi: _, bucket: v, rootLabel: y, activeTab: b, onNotification: x
283
292
  folderPath: C,
284
293
  onPathChange: he,
285
294
  retry: Q,
286
- onSearchFiles: Ce,
295
+ onSearchFiles: we,
287
296
  isSearching: fe,
288
297
  searchResults: pe,
289
- clearSearchResults: Se,
298
+ clearSearchResults: Ce,
290
299
  expandedPaths: W,
291
- loadedPaths: be,
292
- onExpandedPathsChange: xe,
293
- onFolderPopupPathChange: ye,
300
+ loadedPaths: xe,
301
+ onExpandedPathsChange: Se,
302
+ onFolderPopupPathChange: be,
294
303
  folderPopupLoadingPaths: me,
295
304
  sharedWithMeIds: d(() => b === g.Shared ? P : void 0, [b, P]),
296
305
  sharedByMePaths: de,
297
- currentFolder: we,
306
+ currentFolder: Te,
298
307
  cache: T,
299
308
  listingPermissionsCache: O,
300
309
  sharedRootMetaRef: L,
301
310
  setFolderPath: w,
302
311
  invalidateFolders: _e,
303
312
  mergeCreatedFolder: ve,
304
- bumpRetry: ge
313
+ bumpRetry: ge,
314
+ removeSharedRootItems: ye
305
315
  };
306
316
  };
307
317
  //#endregion
@@ -51,7 +51,9 @@ var b = ({ filesApi: b, bucket: x, rootLabel: S = "My files", activeTab: C = y.M
51
51
  bucket: x,
52
52
  rootLabel: S,
53
53
  bumpRetry: L.bumpRetry,
54
- onNotification: E
54
+ onNotification: E,
55
+ onOperationSuccess: D,
56
+ removeSharedRootItems: L.removeSharedRootItems
55
57
  }), V = l({
56
58
  filesApi: b,
57
59
  bucket: x,
@@ -1,70 +1,76 @@
1
- import { FileManagerNotificationReason as e } from "../dial-file-manager.types.js";
2
- import { resolveDialFileApiPath as t } from "../resolve-dial-file-api-path.js";
3
- import { useCallback as n, useState as r } from "react";
4
- import { NotificationVariant as i } from "@epam/ai-dial-ui-kit";
1
+ import { FileManagerNotificationReason as e, FileOperationKind as t } from "../dial-file-manager.types.js";
2
+ import { resolveDialFileApiPath as n } from "../resolve-dial-file-api-path.js";
3
+ import { useCallback as r, useState as i } from "react";
4
+ import { NotificationVariant as a } from "@epam/ai-dial-ui-kit";
5
5
  //#region src/files/useDialFileSharing/useDialFileSharing.ts
6
- var a = ({ filesApi: a, bucket: o, rootLabel: s, bumpRetry: c, onNotification: l }) => {
7
- let [u, d] = r(!1), [f, p] = r(!1);
6
+ var o = ({ filesApi: o, bucket: s, rootLabel: c, bumpRetry: l, onNotification: u, onOperationSuccess: d, removeSharedRootItems: f }) => {
7
+ let [p, m] = i(!1), [h, g] = i(!1);
8
8
  return {
9
- isUnsharing: u,
10
- isRemovingAccess: f,
11
- onUnshareFiles: n((n) => {
12
- n.length !== 0 && (async () => {
13
- d(!0);
14
- let r = n.map((e) => {
15
- let n = e.bucket ?? o;
9
+ isUnsharing: p,
10
+ isRemovingAccess: h,
11
+ onUnshareFiles: r((r) => {
12
+ r.length !== 0 && (async () => {
13
+ m(!0);
14
+ let i = r.map((e) => {
15
+ let t = e.bucket ?? s;
16
16
  return {
17
- bucket: n,
18
- path: t(e, n, s)
17
+ bucket: t,
18
+ path: n(e, t, c)
19
19
  };
20
20
  });
21
21
  try {
22
- await a.discardShared(r), c();
22
+ await o.discardShared(i), f?.(r.map((e) => e.name)), d?.({
23
+ kind: t.FilesUnshared,
24
+ name: r[0].name,
25
+ count: r.length
26
+ }), l();
23
27
  } catch {
24
- l?.({
25
- variant: i.Error,
28
+ u?.({
29
+ variant: a.Error,
26
30
  reason: e.UnshareFailed
27
31
  });
28
32
  } finally {
29
- d(!1);
33
+ m(!1);
30
34
  }
31
35
  })();
32
36
  }, [
33
- o,
34
37
  s,
35
- l,
36
- a,
37
- c
38
+ c,
39
+ u,
40
+ d,
41
+ f,
42
+ o,
43
+ l
38
44
  ]),
39
- onRemoveFilesAccess: n((n) => {
40
- n.length !== 0 && (async () => {
41
- p(!0);
42
- let r = n.map((e) => {
43
- let n = e.bucket ?? o;
45
+ onRemoveFilesAccess: r((t) => {
46
+ t.length !== 0 && (async () => {
47
+ g(!0);
48
+ let r = t.map((e) => {
49
+ let t = e.bucket ?? s;
44
50
  return {
45
- bucket: n,
46
- path: t(e, n, s)
51
+ bucket: t,
52
+ path: n(e, t, c)
47
53
  };
48
54
  });
49
55
  try {
50
- await a.revokeAccess(r), c();
56
+ await o.revokeAccess(r), l();
51
57
  } catch {
52
- l?.({
53
- variant: i.Error,
58
+ u?.({
59
+ variant: a.Error,
54
60
  reason: e.RemoveAccessFailed
55
61
  });
56
62
  } finally {
57
- p(!1);
63
+ g(!1);
58
64
  }
59
65
  })();
60
66
  }, [
61
- o,
62
67
  s,
63
- l,
64
- a,
65
- c
68
+ c,
69
+ u,
70
+ o,
71
+ l
66
72
  ])
67
73
  };
68
74
  };
69
75
  //#endregion
70
- export { a as useDialFileSharing };
76
+ export { o as useDialFileSharing };
package/index.d.ts CHANGED
@@ -1742,7 +1742,9 @@ export declare enum FileOperationKind {
1742
1742
  FilesMoved = "filesMoved",
1743
1743
  /** A copy whose every item landed in its own source folder (Duplicate). */
1744
1744
  FileDuplicated = "fileDuplicated",
1745
- FilesDuplicated = "filesDuplicated"
1745
+ FilesDuplicated = "filesDuplicated",
1746
+ /** One or more shared-with-me items were removed from the Shared tab. */
1747
+ FilesUnshared = "filesUnshared"
1746
1748
  }
1747
1749
 
1748
1750
  /**
@@ -5518,6 +5520,11 @@ export declare interface UseDialFileListingResult {
5518
5520
  mergeCreatedFolder: (parentApiPath: string, created: CreateFolderResponseDto, inheritedPermissions?: string[]) => void;
5519
5521
  /** Forces the listing effect to re-fetch the currently browsed folder. */
5520
5522
  bumpRetry: () => void;
5523
+ /**
5524
+ * Drops the named root rows from the Shared tab's cached listing, so an
5525
+ * unshared item disappears at once instead of waiting for the refetch.
5526
+ */
5527
+ removeSharedRootItems: (names: string[]) => void;
5521
5528
  }
5522
5529
 
5523
5530
  /**
@@ -5839,7 +5846,7 @@ export declare interface UseDialFileMutationsResult {
5839
5846
  * shared retry counter after each mutation settles rather than holding its
5840
5847
  * own cache copy.
5841
5848
  */
5842
- export declare const useDialFileSharing: ({ filesApi, bucket, rootLabel, bumpRetry, onNotification, }: UseDialFileSharingOptions) => UseDialFileSharingResult;
5849
+ export declare const useDialFileSharing: ({ filesApi, bucket, rootLabel, bumpRetry, onNotification, onOperationSuccess, removeSharedRootItems, }: UseDialFileSharingOptions) => UseDialFileSharingResult;
5843
5850
 
5844
5851
  /** Options accepted by `useDialFileSharing`. */
5845
5852
  export declare interface UseDialFileSharingOptions {
@@ -5853,6 +5860,10 @@ export declare interface UseDialFileSharingOptions {
5853
5860
  bumpRetry: () => void;
5854
5861
  /** Called when a sharing mutation fails and should surface a toast notification. */
5855
5862
  onNotification?: (notification: FileManagerNotification) => void;
5863
+ /** Called with a structured event once an unshare succeeds, so the host can show its success toast. */
5864
+ onOperationSuccess?: (event: FileOperationSuccessEvent) => void;
5865
+ /** Removes the unshared root rows from the cached Shared listing ahead of the refetch. */
5866
+ removeSharedRootItems?: (names: string[]) => void;
5856
5867
  }
5857
5868
 
5858
5869
  /** Values returned by `useDialFileSharing`. */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@epam/ai-dial-chat-hooks",
3
3
  "description": "Framework-level React hooks extracted from AI DIAL Chat for building custom chat interfaces",
4
- "version": "1.3.0-dev.10",
4
+ "version": "1.3.0-dev.13",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "./index.js",
@@ -111,7 +111,7 @@
111
111
  }
112
112
  },
113
113
  "dependencies": {
114
- "@epam/ai-dial-chat-api-client": "1.3.0-dev.10",
114
+ "@epam/ai-dial-chat-api-client": "1.3.0-dev.13",
115
115
  "dompurify": "3.4.16",
116
116
  "fflate": "^0.8.3",
117
117
  "lru-cache": "^10.4.3",
@@ -120,21 +120,21 @@
120
120
  },
121
121
  "peerDependencies": {
122
122
  "react": "^19.2.8",
123
- "@epam/ai-dial-attachment-canvas": "1.3.0-dev.10",
124
- "@epam/ai-dial-attachment-input": "1.3.0-dev.10",
125
- "@epam/ai-dial-catalog": "1.3.0-dev.10",
126
- "@epam/ai-dial-chat-overlay": "1.3.0-dev.10",
127
- "@epam/ai-dial-chat-shared": "1.3.0-dev.10",
128
- "@epam/ai-dial-mcp-apps": "1.3.0-dev.10",
129
- "@epam/ai-dial-publish-panel": "1.3.0-dev.10",
130
- "@epam/ai-dial-quotations": "1.3.0-dev.10",
123
+ "@epam/ai-dial-attachment-canvas": "1.3.0-dev.13",
124
+ "@epam/ai-dial-attachment-input": "1.3.0-dev.13",
125
+ "@epam/ai-dial-catalog": "1.3.0-dev.13",
126
+ "@epam/ai-dial-chat-overlay": "1.3.0-dev.13",
127
+ "@epam/ai-dial-chat-shared": "1.3.0-dev.13",
128
+ "@epam/ai-dial-mcp-apps": "1.3.0-dev.13",
129
+ "@epam/ai-dial-publish-panel": "1.3.0-dev.13",
130
+ "@epam/ai-dial-quotations": "1.3.0-dev.13",
131
131
  "@epam/ai-dial-react-file-manager": "^0.3.0",
132
- "@epam/ai-dial-scheduled-tasks": "1.3.0-dev.10",
133
- "@epam/ai-dial-share": "1.3.0-dev.10",
134
- "@epam/ai-dial-skill-editor": "1.3.0-dev.10",
135
- "@epam/ai-dial-source-panel": "1.3.0-dev.10",
132
+ "@epam/ai-dial-scheduled-tasks": "1.3.0-dev.13",
133
+ "@epam/ai-dial-share": "1.3.0-dev.13",
134
+ "@epam/ai-dial-skill-editor": "1.3.0-dev.13",
135
+ "@epam/ai-dial-source-panel": "1.3.0-dev.13",
136
136
  "@epam/ai-dial-ui-kit": "^0.15.0",
137
- "@epam/ai-dial-usage-dashboard": "1.3.0-dev.10",
137
+ "@epam/ai-dial-usage-dashboard": "1.3.0-dev.13",
138
138
  "@modelcontextprotocol/sdk": "^1.32.1",
139
139
  "@epam/pdf-highlighter-kit": "^0.0.19",
140
140
  "@mcp-ui/client": "^7.1.1"