Commit d88977d
authored
feat(react-sdk): implement useAISearch hook for AI search state management (dotCMS#33851)
## Summary
This PR implements the `useAISearch` React hook for managing AI search
state in React applications and improves the AI search API response
structure for better developer experience.
### Key Changes
#### 1. New `useAISearch` React Hook
(`libs/sdk/react/src/lib/next/hooks/useAISearch.ts`)
- **State Management**: Manages AI search lifecycle with `idle`,
`loading`, `success`, and `error` states
- **Type-Safe**: Full TypeScript support with generic content type
parameter
- **API Integration**: Seamlessly integrates with the dotCMS client AI
search API
- **Exposed Methods**:
- `search(prompt: string)` - Executes AI search with the provided prompt
- `reset()` - Resets search state to idle
- **Return Values**:
- `response` - Full AI search response with metadata
- `results` - Direct access to content results array
- `status` - Current operation status with error details
#### 2. API Response Refactoring
- **Breaking Change**: Renamed `dotCMSResults` → `results` in
`DotCMSAISearchResponse`
- **Rationale**: More intuitive naming convention aligned with modern
API design
- **Internal Transformation**: Client SDK now transforms raw API
response to user-facing format
- **New Internal Type**: `DotCMSAISearchRawResponse` for backend
compatibility
- **Updated**: All documentation and examples in README.md
#### 3. Content Drive Improvements (Merged from dotCMS#33764)
- **Enhanced Error Handling**: Upload failures now show specific error
messages from API response
- **UI Fix**: Toolbar grid layout adjusted to properly accommodate
search input (2 columns + flexible space)
- **Code Cleanup**: Removed unnecessary path state updates and unused
test cases in sidebar store
#### 4. Type System Enhancements
- **New Generic Status Type**: `DotCMSEntityStatus` for consistent state
management patterns
- **Internal Types Export**: Added `internal.ts` exports for AI types to
support SDK implementation
- **Enhanced Type Safety**: Better type inference for AI search
responses
### Files Changed
**Core Implementation:**
- `libs/sdk/react/src/lib/next/hooks/useAISearch.ts` - New React hook
- `libs/sdk/react/src/lib/next/shared/types.ts` - Type definitions
- `libs/sdk/react/src/index.ts` - Public API exports
**API Layer:**
- `libs/sdk/client/src/lib/client/ai/search/search.ts` - Response
transformation
- `libs/sdk/types/src/lib/ai/public.ts` - Public API types
- `libs/sdk/types/src/lib/ai/internal.ts` - Internal types
- `libs/sdk/types/src/lib/components/generic/public.ts` - Shared status
type
**Documentation:**
- `libs/sdk/client/README.md` - Comprehensive examples and usage
**Content Drive:**
-
`libs/portlets/dot-content-drive/portlet/src/lib/dot-content-drive-shell/dot-content-drive-shell.component.ts`
-
`libs/portlets/dot-content-drive/portlet/src/lib/components/dot-content-drive-toolbar/dot-content-drive-toolbar.component.scss`
-
`libs/portlets/dot-content-drive/portlet/src/lib/store/features/sidebar/withSidebar.ts`
## Test Plan
- [ ] Verify `useAISearch` hook properly manages state transitions (idle
→ loading → success/error)
- [ ] Test AI search with various prompts and configuration options
- [ ] Confirm `results` property contains expected content data
- [ ] Validate error handling when search fails
- [ ] Test `reset()` functionality returns to idle state
- [ ] Verify TypeScript types are correctly inferred for custom content
types
- [ ] Check Content Drive upload error messages display correctly
- [ ] Validate toolbar layout renders properly across different screen
sizes
- [ ] Run existing AI search tests to ensure backward compatibility in
SDK client
- [ ] Verify documentation examples work as expected
## Breaking Changes
1 parent 229a197 commit d88977d
File tree
19 files changed
+898
-59
lines changed- core-web/libs
- portlets/dot-content-drive/portlet/src/lib
- components/dot-content-drive-toolbar
- dot-content-drive-shell
- store/features/sidebar
- sdk
- client
- src/lib/client/ai
- search
- react
- src
- lib/next
- __test__/hook
- hooks
- types/src
- lib
- ai
- components/generic
19 files changed
+898
-59
lines changedLines changed: 1 addition & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
62 | | - | |
63 | | - | |
| 62 | + | |
64 | 63 | | |
65 | 64 | | |
66 | 65 | | |
| |||
Lines changed: 40 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
655 | 655 | | |
656 | 656 | | |
657 | 657 | | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
658 | 698 | | |
659 | 699 | | |
660 | 700 | | |
| |||
Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
371 | 371 | | |
372 | 372 | | |
373 | 373 | | |
374 | | - | |
375 | | - | |
376 | | - | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
377 | 377 | | |
378 | 378 | | |
379 | 379 | | |
| |||
Lines changed: 0 additions & 22 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
215 | 215 | | |
216 | 216 | | |
217 | 217 | | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
240 | 218 | | |
241 | 219 | | |
242 | 220 | | |
| |||
Lines changed: 2 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
101 | | - | |
102 | | - | |
103 | | - | |
| 101 | + | |
104 | 102 | | |
105 | 103 | | |
106 | 104 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
241 | 241 | | |
242 | 242 | | |
243 | 243 | | |
244 | | - | |
| 244 | + | |
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
| 248 | + | |
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
252 | 252 | | |
253 | 253 | | |
254 | | - | |
| 254 | + | |
255 | 255 | | |
256 | 256 | | |
257 | 257 | | |
| |||
270 | 270 | | |
271 | 271 | | |
272 | 272 | | |
273 | | - | |
| 273 | + | |
274 | 274 | | |
275 | 275 | | |
276 | 276 | | |
| |||
286 | 286 | | |
287 | 287 | | |
288 | 288 | | |
289 | | - | |
| 289 | + | |
290 | 290 | | |
291 | 291 | | |
292 | 292 | | |
| |||
306 | 306 | | |
307 | 307 | | |
308 | 308 | | |
309 | | - | |
| 309 | + | |
310 | 310 | | |
311 | 311 | | |
312 | 312 | | |
| |||
416 | 416 | | |
417 | 417 | | |
418 | 418 | | |
419 | | - | |
| 419 | + | |
420 | 420 | | |
421 | 421 | | |
422 | 422 | | |
| |||
432 | 432 | | |
433 | 433 | | |
434 | 434 | | |
435 | | - | |
| 435 | + | |
436 | 436 | | |
437 | 437 | | |
438 | 438 | | |
| |||
818 | 818 | | |
819 | 819 | | |
820 | 820 | | |
821 | | - | |
| 821 | + | |
822 | 822 | | |
823 | 823 | | |
824 | 824 | | |
| |||
867 | 867 | | |
868 | 868 | | |
869 | 869 | | |
870 | | - | |
871 | | - | |
872 | | - | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
873 | 873 | | |
874 | 874 | | |
875 | 875 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
63 | | - | |
| 63 | + | |
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
86 | | - | |
87 | | - | |
| 86 | + | |
| 87 | + | |
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
| |||
Lines changed: 18 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| |||
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
40 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
41 | 50 | | |
42 | 51 | | |
43 | 52 | | |
| |||
73 | 82 | | |
74 | 83 | | |
75 | 84 | | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
76 | 90 | | |
77 | 91 | | |
78 | 92 | | |
| |||
82 | 96 | | |
83 | 97 | | |
84 | 98 | | |
85 | | - | |
| 99 | + | |
86 | 100 | | |
87 | 101 | | |
88 | 102 | | |
| |||
151 | 165 | | |
152 | 166 | | |
153 | 167 | | |
154 | | - | |
155 | | - | |
| 168 | + | |
| 169 | + | |
156 | 170 | | |
157 | 171 | | |
158 | 172 | | |
| |||
Lines changed: 12 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| |||
87 | 88 | | |
88 | 89 | | |
89 | 90 | | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
90 | 95 | | |
91 | | - | |
92 | | - | |
93 | | - | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
94 | 100 | | |
95 | 101 | | |
96 | | - | |
| 102 | + | |
97 | 103 | | |
98 | 104 | | |
99 | 105 | | |
| |||
130 | 136 | | |
131 | 137 | | |
132 | 138 | | |
133 | | - | |
| 139 | + | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | 143 | | |
138 | | - | |
| 144 | + | |
139 | 145 | | |
140 | 146 | | |
141 | 147 | | |
| |||
0 commit comments