-
Notifications
You must be signed in to change notification settings - Fork 1
feat(utils): Add WatchListManager for client-side sorting optimization #87
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
This adds a watch() method to EntityHandler that allows subscribing to
filtered subsets of entities with real-time change notifications.
Features:
- watch(options, callback) method with filter, sort, fields, limit options
- WatchEvent with changeType ('added', 'modified', 'removed')
- subscribeQuery/unsubscribeQuery socket events for server communication
- Proper cleanup on unsubscribe
The watch() method differs from subscribe() in that:
- It supports filter, sort, fields, and limit options
- It returns changeType indicating how the change affects the filtered results
- It uses dedicated subscribe_query socket events
Example usage:
```typescript
const unsubscribe = base44.entities.Task.watch(
{ filter: { status: 'active' }, sort: '-created_date', limit: 10 },
(event) => {
if (event.changeType === 'added') {
console.log('New matching task:', event.data);
}
}
);
```
Fixes #83
Co-Authored-By: Claude Opus 4.5 <[email protected]>
This adds a utility class for maintaining a sorted list of entities from
watch() subscription events, optimizing for common operations like
insertions in sorted order and removals.
Features:
- WatchListManager class for managing sorted watch results
- createComparatorFromSort helper for creating sort comparators from strings
- Support for limit enforcement (truncates list to limit)
- Binary search insertion for O(log n) sorted insertions
- O(1) lookup by ID using Map
- Automatic re-sorting when sort field changes on update
Example usage:
```typescript
const manager = new WatchListManager<Task>({
sort: '-created_date',
limit: 10,
});
// Initialize with existing data
manager.initialize(await base44.entities.Task.filter({ status: 'active' }));
// Handle watch events
const unsubscribe = base44.entities.Task.watch(
{ filter: { status: 'active' }, sort: '-created_date', limit: 10 },
(event) => {
manager.handleEvent(event);
renderTaskList(manager.getItems());
}
);
```
Fixes #84
Co-Authored-By: Claude Opus 4.5 <[email protected]>
|
Claude finished @guyofeck's task —— View job Pull Request Review: WatchListManager ImplementationI've completed my review of the Review Checklist
Overall AssessmentThe implementation is well-designed and provides a solid foundation for client-side sorting optimization of watch subscriptions. The code is clean, well-documented, and includes comprehensive test coverage. Code Quality and Best Practices ✅Strengths:
Minor Suggestions:
Performance Considerations 🚀Excellent performance optimizations:
Potential improvements:
Potential Bugs or Issues 🐛
Security Concerns 🔒No significant security issues identified. The implementation:
Test Coverage 🧪Excellent test coverage including:
Missing test scenarios:
Additional Suggestions
Code-Specific Feedbacksrc/utils/watch-list-manager.ts:184-190: The src/utils/watch-list-manager.ts:38-40: Good null handling, but consider making the "push to end" behavior configurable, as some use cases might prefer pushing nulls to the beginning. SummaryThis is a solid implementation that will significantly improve the performance of client-side sorted lists from watch subscriptions. The code is production-ready with minor improvements suggested above. Great work on the comprehensive documentation and test coverage! 🎉 |
Summary
WatchListManagerclass for maintaining sorted watch results on the clientcreateComparatorFromSorthelper for creating sort comparators from stringsFeatures
Usage
Test plan
Depends on: #86
Fixes #84
🤖 Generated with Claude Code