-
Notifications
You must be signed in to change notification settings - Fork 80
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
chore(weave): new text based datetime dropdown #3829
base: master
Are you sure you want to change the base?
Conversation
Warning Rate limit exceeded@gtarpenning has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 5 minutes and 28 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (1)
WalkthroughA new React component, Changes
Suggested reviewers
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (4)
weave-js/src/util/date.ts (1)
14-103
: Consider edge cases and time zone handling in date parsing.The
parseDate
function is well-structured with good documentation and handles a variety of date formats. However, there are a few considerations:
- Time zone handling is implicit, which could lead to unexpected behavior when parsing dates
- Natural language parsing for relative dates could be affected by edge cases (month boundaries, leap years)
- There's no handling for future-oriented relative times like "in 2 days"
Consider adding:
- Explicit time zone handling
- Support for future-oriented relative times
- More robust handling of edge cases
export const parseDate = (dateStr: string): Date | null => { if (!dateStr || typeof dateStr !== 'string') { return null; } // Trim the input const trimmedStr = dateStr.trim(); if (!trimmedStr) { return null; } // Try parsing with moment const momentDate = moment(trimmedStr); if (momentDate.isValid()) { return momentDate.toDate(); } // Try parsing natural language dates const lowerStr = trimmedStr.toLowerCase(); const now = new Date(); // Handle "today", "yesterday", "tomorrow" if (lowerStr === 'today') { return new Date(now.setHours(0, 0, 0, 0)); } else if (lowerStr === 'yesterday') { const yesterday = new Date(now); yesterday.setDate(yesterday.getDate() - 1); yesterday.setHours(0, 0, 0, 0); return yesterday; } else if (lowerStr === 'tomorrow') { const tomorrow = new Date(now); tomorrow.setDate(tomorrow.getDate() + 1); tomorrow.setHours(0, 0, 0, 0); return tomorrow; } // Handle "last week", "next month", etc. const lastNextPattern = /^(last|next)\s+(day|week|month|year)$/i; const lastNextMatch = lowerStr.match(lastNextPattern); if (lastNextMatch) { const direction = lastNextMatch[1].toLowerCase(); const unit = lastNextMatch[2].toLowerCase(); const multiplier = direction === 'last' ? -1 : 1; const result = new Date(now); switch (unit) { case 'day': result.setDate(result.getDate() + multiplier); break; case 'week': result.setDate(result.getDate() + multiplier * 7); break; case 'month': result.setMonth(result.getMonth() + multiplier); break; case 'year': result.setFullYear(result.getFullYear() + multiplier); break; } return result; } // Handle "X days/weeks/months/years ago" const agoPattern = /^(\d+)\s+(day|week|month|year)s?\s+ago$/i; const agoMatch = lowerStr.match(agoPattern); if (agoMatch) { const amount = parseInt(agoMatch[1], 10); const unit = agoMatch[2].toLowerCase(); const result = new Date(now); switch (unit) { case 'day': result.setDate(result.getDate() - amount); break; case 'week': result.setDate(result.getDate() - amount * 7); break; case 'month': result.setMonth(result.getMonth() - amount); break; case 'year': result.setFullYear(result.getFullYear() - amount); break; } return result; } + + // Handle "in X days/weeks/months/years" + const inFuturePattern = /^in\s+(\d+)\s+(day|week|month|year)s?$/i; + const inFutureMatch = lowerStr.match(inFuturePattern); + if (inFutureMatch) { + const amount = parseInt(inFutureMatch[1], 10); + const unit = inFutureMatch[2].toLowerCase(); + + const result = new Date(now); + switch (unit) { + case 'day': + result.setDate(result.getDate() + amount); + break; + case 'week': + result.setDate(result.getDate() + amount * 7); + break; + case 'month': + result.setMonth(result.getMonth() + amount); + break; + case 'year': + result.setFullYear(result.getFullYear() + amount); + break; + } + return result; + } // If all parsing attempts fail, return null return null; };weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx (3)
9-9
: Verify import comment accuracy.The import statement has a comment suggesting uncertainty about the date parser's existence, but the utility is actually imported correctly.
-import {parseDate} from '../../../../../util/date'; // Assuming there's a date parser utility +import {parseDate} from '../../../../../util/date';
34-46
: Consider consolidating state management.The component maintains multiple pieces of state that could potentially get out of sync. Consider using a reducer pattern for more reliable state management.
You could consolidate the component's state with useReducer:
type State = { inputValue: string; parsedDate: Date | null; isDropdownVisible: boolean; hoveredIndex: number | null; selectedSuggestion: string | null; isInputHovered: boolean; isInputFocused: boolean; }; type Action = | { type: 'SET_INPUT_VALUE'; payload: string } | { type: 'SET_PARSED_DATE'; payload: Date | null } | { type: 'SET_DROPDOWN_VISIBLE'; payload: boolean } | { type: 'SET_HOVERED_INDEX'; payload: number | null } | { type: 'SET_SELECTED_SUGGESTION'; payload: string | null } | { type: 'SET_INPUT_HOVERED'; payload: boolean } | { type: 'SET_INPUT_FOCUSED'; payload: boolean } | { type: 'HANDLE_INPUT_CHANGE'; payload: string }; function reducer(state: State, action: Action): State { switch (action.type) { case 'SET_INPUT_VALUE': return { ...state, inputValue: action.payload }; case 'SET_PARSED_DATE': return { ...state, parsedDate: action.payload }; case 'SET_DROPDOWN_VISIBLE': return { ...state, isDropdownVisible: action.payload }; case 'SET_HOVERED_INDEX': return { ...state, hoveredIndex: action.payload }; case 'SET_SELECTED_SUGGESTION': return { ...state, selectedSuggestion: action.payload }; case 'SET_INPUT_HOVERED': return { ...state, isInputHovered: action.payload }; case 'SET_INPUT_FOCUSED': return { ...state, isInputFocused: action.payload }; case 'HANDLE_INPUT_CHANGE': { const newInputValue = action.payload; const date = parseInput(newInputValue); return { ...state, inputValue: newInputValue, parsedDate: date, selectedSuggestion: null, }; } default: return state; } }
167-298
: Extract inline styles to improve maintainability.The component has significant inline styling which can make maintenance difficult. Consider extracting these styles to styled components or a separate style object for better maintainability.
Extract inline styles to improve readability and maintainability:
// At the top of the file const styles = { container: { position: 'relative', display: 'flex', alignItems: 'center', marginBottom: '5px', }, icon: { position: 'absolute', top: '50%', left: '9px', transform: 'translateY(-50%)', fontSize: '16px', }, input: (isInputFocused: boolean, isInputHovered: boolean) => ({ padding: '4px 12px', paddingLeft: '32px', paddingRight: '80px', borderRadius: '4px', border: 0, boxShadow: isInputFocused ? `0 0 0 2px ${TEAL_400}` : isInputHovered ? `0 0 0 2px ${TEAL_350}` : `inset 0 0 0 1px ${MOON_250}`, outline: 'none', flex: 1, height: '32px', minHeight: '32px', boxSizing: 'border-box', fontSize: '16px', lineHeight: '24px', cursor: 'default', }), // Add more style objects for other elements }; // Then in the render: <div style={styles.container}> <Icon name="date" style={styles.icon} /> <input // ...props style={styles.input(isInputFocused, isInputHovered)} /> {/* ... */} </div>
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
(1 hunks)weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectValue.tsx
(2 hunks)weave-js/src/util/date.ts
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.{js,jsx,ts,tsx}`: Focus on architectural and logical i...
**/*.{js,jsx,ts,tsx}
: Focus on architectural and logical issues rather than style (assuming ESLint is in place).
Flag potential memory leaks and performance bottlenecks.
Check for proper error handling and async/await usage.
Avoid strict enforcement of try/catch blocks - accept Promise chains, early returns, and other clear error handling patterns. These are acceptable as long as they maintain clarity and predictability.
Ensure proper type usage in TypeScript files.
Look for security vulnerabilities in data handling.
Don't comment on formatting if prettier is configured.
Verify proper React hooks usage and component lifecycle.
Check for proper state management patterns.
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectValue.tsx
weave-js/src/util/date.ts
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
⏰ Context from checks skipped due to timeout of 90000ms (100)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, scorers)
🔇 Additional comments (6)
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectValue.tsx (2)
17-18
: LGTM! Import of the new dropdown component.The change correctly imports the new
SelectDatetimeDropdown
component that replaces the previous date picker.
52-53
: Simplified date handling with the new dropdown component.The implementation correctly replaces the old
StyledDateTimePicker
with the newSelectDatetimeDropdown
component, maintaining the same interface for value and onChange. This is a clean transition that delegates date handling to the specialized component.weave-js/src/util/date.ts (1)
112-120
: The formatDate function is well-implemented.The function correctly handles null and undefined inputs and provides a sensible default format.
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx (3)
74-84
: Consistent state updates with onChange handler.The code properly handles both valid dates and unparsable inputs by updating the parent component. This is a good pattern for maintaining component state consistency.
302-322
: Well-implemented relative date detection.The
isRelativeInput
function provides a comprehensive check for different types of relative date inputs, which is essential for proper UI feedback.
394-397
:❓ Verification inconclusive
Verify ISO string format requirements.
The
dateToISOString
function is used to convert dates to ISO strings before passing them to the parent component's onChange handler. Ensure that this format matches what the rest of the application expects.
🏁 Script executed:
#!/bin/bash # Search for patterns of ISO string date usage in the codebase echo "Searching for date string formats used with onSetValue in filter components..." rg -p "onSetValue\s*\(\s*.*\.toISOString" --type=typescript echo "Checking other datetime value handling in SelectValue.tsx..." rg -A 5 -B 5 "fieldType === 'datetime'" --type=typescriptLength of output: 495
Below is a revised shell script that doesn’t rely on an unrecognized file type. This script searches across both
.ts
and.tsx
files for ISO string conversion and date handling usage. Please run it for manual verification of whether the ISO string format produced bydateToISOString
matches the rest of the application’s expectations.After running this script, please verify that:
- The ISO string format produced by
dateToISOString
is consistent with the format expected by parent components.- There isn’t any conflicting date handling for datetime fields (e.g., in
SelectValue.tsx
or similar files).Kindly confirm the verification results or let me know if further adjustments are needed.
🏁 Script executed:
#!/bin/bash echo "Searching for onSetValue usages with .toISOString in TS/TSX files..." fd -e ts -e tsx -x grep -H "onSetValue.*\.toISOString" {} echo "" echo "Searching for ISO conversion (.toISOString) occurrences in TS/TSX files..." fd -e ts -e tsx -x grep -H "\.toISOString" {} echo "" echo "Searching for datetime field handling (fieldType === 'datetime') in TS/TSX files..." fd -e ts -e tsx -x grep -H "fieldType === 'datetime'" {}Length of output: 2142
ISO String Format Consistency Check
ThedateToISOString
function inweave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
now returns a full ISO string—or an empty string if no date is provided—which is consistent with the majority of the codebase (e.g., inErrorPanel.tsx
and the SDK files). Please verify that the parent component’s onChange handler expects this full ISO format. Note that while some components (such as inCallsTableButtons.tsx
orAudioPlayer.tsx
) further process the ISO string (e.g., splitting on the 'T'), the intended behavior in this filter is to use the unmodified ISO string.
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
Outdated
Show resolved
Hide resolved
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
Outdated
Show resolved
Hide resolved
Preview this PR with FeatureBee: https://beta.wandb.ai/?betaVersion=90ac1759e34b95de87542ea2ab0c722af81c1c0d |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (10)
weave-js/src/util/date.test.ts (2)
292-316
: Tests outside test block structureThese expect statements are outside of any test block. They should be wrapped in a properly named test function for better error reporting and test organization.
- // X days/weeks/months before/after today - expect( - areDatesEqual(parseDate('3 days before today'), createDate(2023, 6, 12)) - ).toBe(true); - expect( - areDatesEqual(parseDate('3 days after today'), createDate(2023, 6, 18)) - ).toBe(true); - expect( - areDatesEqual(parseDate('1 week before today'), createDate(2023, 6, 8)) - ).toBe(true); - expect( - areDatesEqual(parseDate('1 week after today'), createDate(2023, 6, 22)) - ).toBe(true); - expect( - areDatesEqual(parseDate('1 month before today'), createDate(2023, 5, 15)) - ).toBe(true); - expect( - areDatesEqual(parseDate('1 month after today'), createDate(2023, 7, 15)) - ).toBe(true); - expect( - areDatesEqual(parseDate('1 year before today'), createDate(2022, 6, 15)) - ).toBe(true); - expect( - areDatesEqual(parseDate('1 year after today'), createDate(2024, 6, 15)) - ).toBe(true); + test('should parse "X units before/after today" format', () => { + // X days/weeks/months before/after today + expect( + areDatesEqual(parseDate('3 days before today'), createDate(2023, 6, 12)) + ).toBe(true); + expect( + areDatesEqual(parseDate('3 days after today'), createDate(2023, 6, 18)) + ).toBe(true); + expect( + areDatesEqual(parseDate('1 week before today'), createDate(2023, 6, 8)) + ).toBe(true); + expect( + areDatesEqual(parseDate('1 week after today'), createDate(2023, 6, 22)) + ).toBe(true); + expect( + areDatesEqual(parseDate('1 month before today'), createDate(2023, 5, 15)) + ).toBe(true); + expect( + areDatesEqual(parseDate('1 month after today'), createDate(2023, 7, 15)) + ).toBe(true); + expect( + areDatesEqual(parseDate('1 year before today'), createDate(2022, 6, 15)) + ).toBe(true); + expect( + areDatesEqual(parseDate('1 year after today'), createDate(2024, 6, 15)) + ).toBe(true); + });
319-325
: Improve the "now" test cases with more precise assertions.The current tests for "now" only check individual components of the date. This approach can miss synchronization issues between components. Use a more comprehensive approach.
// Current time const now = new Date(2023, 5, 15); // Our mocked current date - expect(parseDate('now')?.getFullYear()).toBe(now.getFullYear()); - expect(parseDate('now')?.getMonth()).toBe(now.getMonth()); - expect(parseDate('now')?.getDate()).toBe(now.getDate()); - expect(parseDate('right now')?.getFullYear()).toBe(now.getFullYear()); - expect(parseDate('current time')?.getFullYear()).toBe(now.getFullYear()); + // Helper to check if two dates are close in time (within 1 second) + const areDatesCloseInTime = (date1: Date | null, date2: Date | null): boolean => { + if (!date1 || !date2) return false; + return Math.abs(date1.getTime() - date2.getTime()) < 1000; + }; + + expect(areDatesCloseInTime(parseDate('now'), now)).toBe(true); + expect(areDatesCloseInTime(parseDate('right now'), now)).toBe(true); + expect(areDatesCloseInTime(parseDate('current time'), now)).toBe(true);weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx (5)
76-100
: Consolidate duplicate logic inhandleInputChange
andhandleSuggestionClick
.The logic for parsing dates and updating state is duplicated in these two handlers. This could lead to maintenance issues and inconsistencies.
Extract the common logic into a separate function:
+ // Common function to update state and notify parent + const updateDateValue = (inputStr: string) => { + const date = parseDate(inputStr); + setParsedDate(date); + + // Call the parent onChange handler + if (date) { + onChange(dateToISOString(date)); + } else { + onChange(inputStr); + } + + // Check against predefined suggestions + const isPredefined = predefinedSuggestions.some( + s => s.abbreviation === inputStr + ); + if (!isPredefined) { + setSelectedSuggestion(null); + } + }; const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => { const newInputValue = event.target.value; setInputValue(newInputValue); - - // Parse the input to get a date - const date = parseDate(newInputValue); - setParsedDate(date); - - // Call the parent onChange handler with the timestamp - if (date) { - onChange(dateToISOString(date)); - } else { - // If we couldn't parse a date, pass the raw input - // This allows for storing relative date strings like "3d" directly - onChange(newInputValue); - } - - // Check against our predefined suggestions by their value - const isPredefined = predefinedSuggestions.some( - s => s.abbreviation === newInputValue - ); - if (!isPredefined) { - setSelectedSuggestion(null); - } + updateDateValue(newInputValue); };Then update the
handleSuggestionClick
function similarly.
117-137
: Simplify thehandleSuggestionClick
function by using the extracted helper.This handler can be simplified by using the common helper function suggested above.
const handleSuggestionClick = (suggestionValue: string) => { setInputValue(suggestionValue); - - // Parse the suggestion to get a date - const date = parseDate(suggestionValue); - setParsedDate(date); - - // Call the parent onChange handler with the timestamp - if (date) { - onChange(dateToISOString(date)); - } else { - // If we couldn't parse a date, pass the raw input - onChange(suggestionValue); - } + updateDateValue(suggestionValue); setSelectedSuggestion(suggestionValue); setDropdownVisible(false); if (inputRef.current) { inputRef.current.blur(); } };
190-221
: Extract inline styles to improve maintainability.The component has extensive inline styles that make the JSX harder to read and maintain. Consider extracting them to styled components or a separate styles object.
You could define styles at the top of the file:
+ // Component styles + const styles = { + inputContainer: { + position: 'relative', + display: 'flex', + alignItems: 'center', + marginBottom: '5px', + }, + icon: { + position: 'absolute', + top: '50%', + left: '9px', + transform: 'translateY(-50%)', + fontSize: '16px', + }, + input: (isInputFocused: boolean, isInputHovered: boolean) => ({ + padding: '4px 12px', + paddingLeft: '32px', + paddingRight: '80px', + borderRadius: '4px', + border: 0, + boxShadow: isInputFocused + ? `0 0 0 2px ${TEAL_400}` + : isInputHovered + ? `0 0 0 2px ${TEAL_350}` + : `inset 0 0 0 1px ${MOON_250}`, + outline: 'none', + flex: 1, + height: '32px', + minHeight: '32px', + boxSizing: 'border-box', + fontSize: '16px', + lineHeight: '24px', + cursor: 'default', + }), + // ... other styles + }; // In the render function: return ( <div style={styles.inputContainer}> <Icon name="date" style={styles.icon} /> <input type="text" value={inputValue} onChange={handleInputChange} onFocus={handleFocus} onBlur={handleBlur} onMouseEnter={handleInputMouseEnter} onMouseLeave={handleInputMouseLeave} placeholder="Enter a date..." style={styles.input(isInputFocused, isInputHovered)} ref={inputRef} /> {/* Rest of the component */} </div> );
62-75
: Consider memoizing computed values to improve performance.The computed values like
yesterdayString
andpredefinedSuggestions
will be recalculated on every render, but they could be memoized.- // Compute yesterday's date string (date only, no time) - const yesterdayDate = new Date(); - yesterdayDate.setDate(yesterdayDate.getDate() - 1); - const yesterdayString = formatDateOnly(yesterdayDate); - - // Predefined suggestions with a nicename for each - const yesterdaySuggestion: PredefinedSuggestion = { - abbreviation: yesterdayString, - label: 'Yesterday (Absolute)', - }; - const predefinedSuggestions: PredefinedSuggestion[] = [ - ...PREDEFINED_SUGGESTIONS, - yesterdaySuggestion, - ]; + // Memoize computations that don't depend on changing state + const predefinedSuggestions = React.useMemo(() => { + // Compute yesterday's date string (date only, no time) + const yesterdayDate = new Date(); + yesterdayDate.setDate(yesterdayDate.getDate() - 1); + const yesterdayString = formatDateOnly(yesterdayDate); + + // Predefined suggestions with a nicename for each + const yesterdaySuggestion: PredefinedSuggestion = { + abbreviation: yesterdayString, + label: 'Yesterday (Absolute)', + }; + + return [ + ...PREDEFINED_SUGGESTIONS, + yesterdaySuggestion, + ]; + }, []);
141-145
: Consider using React callback refs to avoid unnecessary renders.The
handleMouseLeave
function is recreated on every render, but it could be defined once usinguseCallback
.- const handleMouseLeave = () => { - setHoveredIndex(null); - }; + const handleMouseLeave = React.useCallback(() => { + setHoveredIndex(null); + }, []);Similar optimizations could be applied to the other simple event handlers.
weave-js/src/util/date.ts (3)
15-25
: Simplify the input validation logic.The current validation has redundant checks. The check for
typeof dateStr !== 'string'
is unnecessary since the function signature already declaresdateStr
as a string. Additionally, the early returns can be consolidated.export const parseDate = (dateStr: string): Date | null => { - if (!dateStr || typeof dateStr !== 'string') { + if (!dateStr) { return null; } const now = new Date(); // Trim the input const trimmedStr = dateStr.trim(); - if (!trimmedStr) { - return null; - } + if (!trimmedStr) return null;
154-169
: Apply consistent error handling pattern across similar blocks.Similar to the other switch statements, this one should also have its case blocks wrapped in curly braces to prevent variable leakage.
switch (unit) { case 'day': + { result.setDate(result.getDate() - amount); break; + } case 'week': + { result.setDate(result.getDate() - amount * 7); break; + } case 'month': + { result.setMonth(result.getMonth() - amount); break; + } case 'year': + { result.setFullYear(result.getFullYear() - amount); break; + } }
239-253
: Consider extracting the month pattern matching logic into a helper function.This loop pattern for matching month names appears twice in the code. Consider extracting it to a helper function to avoid duplication.
+ // Helper to check if a string matches month-year pattern + const checkMonthYearPattern = ( + str: string, + monthFirst: boolean + ): { match: boolean; year: number; monthIndex: number } | null => { + for (let i = 0; i < monthNames.length; i++) { + const fullPattern = monthFirst + ? new RegExp(`^${monthNames[i]}\\s+(\\d{4})$`, 'i') + : new RegExp(`^(\\d{4})\\s+${monthNames[i]}$`, 'i'); + const abbrPattern = monthFirst + ? new RegExp(`^${monthAbbreviations[i]}\\s+(\\d{4})$`, 'i') + : new RegExp(`^(\\d{4})\\s+${monthAbbreviations[i]}$`, 'i'); + + const fullMatch = lowerStr.match(fullPattern); + const abbrMatch = lowerStr.match(abbrPattern); + + if (fullMatch || abbrMatch) { + const yearCapture = monthFirst ? 1 : 0; + const year = parseInt(fullMatch?.[1] || abbrMatch?.[1] || '0', 10); + return { match: true, year, monthIndex: i }; + } + } + return null; + }; // Then use it in both places: // For "Month YYYY" pattern + const monthFirstResult = checkMonthYearPattern(lowerStr, true); + if (monthFirstResult) { + return new Date(monthFirstResult.year, monthFirstResult.monthIndex, 1); + } // Later for "YYYY Month" pattern + const yearFirstResult = checkMonthYearPattern(lowerStr, false); + if (yearFirstResult) { + return new Date(yearFirstResult.year, yearFirstResult.monthIndex, 1); + }
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
(1 hunks)weave-js/src/util/date.test.ts
(1 hunks)weave-js/src/util/date.ts
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.{js,jsx,ts,tsx}`: Focus on architectural and logical i...
**/*.{js,jsx,ts,tsx}
: Focus on architectural and logical issues rather than style (assuming ESLint is in place).
Flag potential memory leaks and performance bottlenecks.
Check for proper error handling and async/await usage.
Avoid strict enforcement of try/catch blocks - accept Promise chains, early returns, and other clear error handling patterns. These are acceptable as long as they maintain clarity and predictability.
Ensure proper type usage in TypeScript files.
Look for security vulnerabilities in data handling.
Don't comment on formatting if prettier is configured.
Verify proper React hooks usage and component lifecycle.
Check for proper state management patterns.
weave-js/src/util/date.ts
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
weave-js/src/util/date.test.ts
🪛 Biome (1.9.4)
weave-js/src/util/date.ts
[error] 36-36: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.
The declaration is defined in this switch clause:
Unsafe fix: Wrap the declaration in a block.
(lint/correctness/noSwitchDeclarations)
[error] 40-40: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.
The declaration is defined in this switch clause:
Unsafe fix: Wrap the declaration in a block.
(lint/correctness/noSwitchDeclarations)
[error] 44-44: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.
The declaration is defined in this switch clause:
Unsafe fix: Wrap the declaration in a block.
(lint/correctness/noSwitchDeclarations)
[error] 48-48: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.
The declaration is defined in this switch clause:
Unsafe fix: Wrap the declaration in a block.
(lint/correctness/noSwitchDeclarations)
⏰ Context from checks skipped due to timeout of 90000ms (886)
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, litellm)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, google_ai_studio)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: notify-wandb-core
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: notify-wandb-core
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: notify-wandb-core
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: notify-wandb-core
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
- GitHub Check: Legacy (Query Service) Python unit tests (1)
- GitHub Check: Legacy (Query Service) Python unit tests (0)
- GitHub Check: WeaveJS Lint and Compile
- GitHub Check: Trace nox tests (3, 13, pandas-test)
- GitHub Check: Trace nox tests (3, 13, vertexai)
- GitHub Check: Trace nox tests (3, 13, openai)
- GitHub Check: Trace nox tests (3, 13, mistral1)
- GitHub Check: Trace nox tests (3, 13, mistral0)
- GitHub Check: Trace nox tests (3, 13, llamaindex)
- GitHub Check: Trace nox tests (3, 13, instructor)
- GitHub Check: Trace nox tests (3, 13, huggingface)
- GitHub Check: Trace nox tests (3, 13, groq)
- GitHub Check: Trace nox tests (3, 13, cerebras)
- GitHub Check: Trace nox tests (3, 13, trace_server)
- GitHub Check: Trace nox tests (3, 13, trace)
- GitHub Check: Trace nox tests (3, 12, pandas-test)
- GitHub Check: Trace nox tests (3, 12, scorers)
- GitHub Check: Trace nox tests (3, 12, vertexai)
- GitHub Check: Trace nox tests (3, 12, openai)
- GitHub Check: Trace nox tests (3, 12, notdiamond)
- GitHub Check: Trace nox tests (3, 12, mistral1)
- GitHub Check: Trace nox tests (3, 12, mistral0)
- GitHub Check: Trace nox tests (3, 12, llamaindex)
- GitHub Check: Trace nox tests (3, 12, litellm)
- GitHub Check: Trace nox tests (3, 12, langchain)
- GitHub Check: Trace nox tests (3, 12, instructor)
- GitHub Check: Trace nox tests (3, 12, google_ai_studio)
- GitHub Check: Trace nox tests (3, 12, huggingface)
- GitHub Check: Trace nox tests (3, 12, groq)
- GitHub Check: Trace nox tests (3, 12, dspy)
- GitHub Check: Trace nox tests (3, 12, cohere)
- GitHub Check: Trace nox tests (3, 12, cerebras)
- GitHub Check: Trace nox tests (3, 12, bedrock)
- GitHub Check: Trace nox tests (3, 12, anthropic)
- GitHub Check: Trace nox tests (3, 12, trace_server)
- GitHub Check: Trace nox tests (3, 12, trace)
- GitHub Check: Trace nox tests (3, 11, pandas-test)
- GitHub Check: Trace nox tests (3, 11, scorers)
- GitHub Check: Trace nox tests (3, 11, vertexai)
- GitHub Check: Trace nox tests (3, 11, openai)
- GitHub Check: Trace nox tests (3, 11, notdiamond)
- GitHub Check: Trace nox tests (3, 11, mistral1)
- GitHub Check: Trace nox tests (3, 11, mistral0)
- GitHub Check: Trace nox tests (3, 11, llamaindex)
- GitHub Check: Trace nox tests (3, 11, litellm)
- GitHub Check: Trace nox tests (3, 11, langchain)
- GitHub Check: Trace nox tests (3, 11, instructor)
- GitHub Check: Trace nox tests (3, 11, google_ai_studio)
- GitHub Check: Trace nox tests (3, 11, huggingface)
- GitHub Check: Trace nox tests (3, 11, groq)
- GitHub Check: Trace nox tests (3, 11, dspy)
- GitHub Check: Trace nox tests (3, 11, cohere)
- GitHub Check: Trace nox tests (3, 11, cerebras)
- GitHub Check: Trace nox tests (3, 11, bedrock)
- GitHub Check: Trace nox tests (3, 11, anthropic)
- GitHub Check: Trace nox tests (3, 11, trace_server)
- GitHub Check: Trace nox tests (3, 11, trace)
- GitHub Check: Trace nox tests (3, 10, pandas-test)
- GitHub Check: Trace nox tests (3, 10, scorers)
- GitHub Check: Trace nox tests (3, 10, vertexai)
- GitHub Check: Trace nox tests (3, 10, openai)
- GitHub Check: Trace nox tests (3, 10, notdiamond)
- GitHub Check: Trace nox tests (3, 10, mistral1)
- GitHub Check: Trace nox tests (3, 10, mistral0)
- GitHub Check: Trace nox tests (3, 10, llamaindex)
- GitHub Check: Trace nox tests (3, 10, litellm)
- GitHub Check: Trace nox tests (3, 10, langchain)
- GitHub Check: Trace nox tests (3, 10, instructor)
- GitHub Check: Trace nox tests (3, 10, google_ai_studio)
- GitHub Check: Trace nox tests (3, 10, huggingface)
- GitHub Check: Trace nox tests (3, 10, groq)
- GitHub Check: Trace nox tests (3, 10, dspy)
- GitHub Check: Trace nox tests (3, 10, cohere)
- GitHub Check: Trace nox tests (3, 10, cerebras)
- GitHub Check: Trace nox tests (3, 10, bedrock)
- GitHub Check: Trace nox tests (3, 10, anthropic)
- GitHub Check: Trace nox tests (3, 10, trace_server)
- GitHub Check: Trace nox tests (3, 10, trace)
- GitHub Check: Trace nox tests (3, 9, pandas-test)
- GitHub Check: Trace nox tests (3, 9, scorers)
- GitHub Check: Trace nox tests (3, 9, vertexai)
- GitHub Check: Trace nox tests (3, 9, openai)
- GitHub Check: Trace nox tests (3, 9, notdiamond)
- GitHub Check: Trace nox tests (3, 9, mistral1)
- GitHub Check: Trace nox tests (3, 9, mistral0)
- GitHub Check: Trace nox tests (3, 9, llamaindex)
- GitHub Check: Trace nox tests (3, 9, litellm)
- GitHub Check: Trace nox tests (3, 9, langchain)
🔇 Additional comments (5)
weave-js/src/util/date.test.ts (1)
29-42
:✅ Verification successful
Verify that mocking restores correctly.
Using
jest.useFakeTimers()
but later only restoringDate.now
may leave the timers in a fake state. This could affect other tests in the same test suite.
🏁 Script executed:
#!/bin/bash # Check if any other test files use timers that might be affected rg "useFakeTimers|useRealTimers" --type ts --glob "!**/date.test.ts"Length of output: 70
Timers Restoration Verified – No Action Needed
The
afterAll
block correctly restores both the mockedDate.now
usingmockRestore()
and the timers by callingjest.useRealTimers()
. The search for timer-related usage outside this file did not reveal evidence of interference with other tests. No modifications are required.weave-js/src/util/date.ts (4)
180-194
: Apply consistent error handling pattern here as well.The same issue with variable leakage in switch cases exists here too.
switch (unit) { case 'day': + { result.setDate(result.getDate() + amount); break; + } case 'week': + { result.setDate(result.getDate() + amount * 7); break; + } case 'month': + { result.setMonth(result.getMonth() + amount); break; + } case 'year': + { result.setFullYear(result.getFullYear() + amount); break; + } }
283-296
: Apply consistent error handling pattern to this switch statement as well.The issue with variable leakage in switch cases applies to this block too.
switch (unit) { case 'day': + { result.setDate(result.getDate() + amount * multiplier); break; + } case 'week': + { result.setDate(result.getDate() + amount * 7 * multiplier); break; + } case 'month': + { result.setMonth(result.getMonth() + amount * multiplier); break; + } case 'year': + { result.setFullYear(result.getFullYear() + amount * multiplier); break; + } }
130-143
: Apply consistent error handling pattern to this switch statement.The same issue with variable leakage in switch cases exists here as well.
switch (unit) { case 'day': + { result.setDate(result.getDate() + multiplier); break; + } case 'week': + { result.setDate(result.getDate() + multiplier * 7); break; + } case 'month': + { result.setMonth(result.getMonth() + multiplier); break; + } case 'year': + { result.setFullYear(result.getFullYear() + multiplier); break; + } }
54-59
:✅ Verification successful
Consider handling moment deprecation warnings.
Moment.js is considered legacy and displays deprecation warnings. Consider moving to a more modern alternative like date-fns or Luxon in future iterations.
🌐 Web query:
Is Moment.js still maintained? What are the recommended alternatives?
💡 Result:
Moment.js entered maintenance mode in September 2020 and is no longer actively developed, though critical security fixes may still be addressed[1][7]. The team explicitly states it should not be used for new projects due to design limitations from its 2011 architecture[1][2].
Why Moment.js is deprecated
- Bundle size: 67.9KB minified (vs 2KB for Day.js)[3][4], causing performance issues
- Mutability: Date objects can be accidentally modified, introducing bugs[3][8]
- No tree-shaking: Entire library must be imported regardless of features used[3][8]
- Legacy design: Lacks modern ES module support and native
Intl
API integration[2][7]Recommended alternatives
Library Key Features Bundle Size Luxon Immutable API, native timezone support via Intl
, Moment-like syntax[2][5]68KB Day.js Moment-compatible API, plugin system, immutable operations[3][5] 2KB date-fns Modular functions, pure functions, TypeScript support[4][5][8] 8KB core Luxon (by Moment.js maintainers) is ideal for complex date logic and timezone handling[2][5]. Day.js offers the easiest migration path from Moment.js with nearly identical syntax[3][5]. date-fns provides functional programming patterns and optimal bundle control through tree-shaking[4][8].
For modern applications, Chrome DevTools now warns about Moment.js usage due to performance impacts[4][8]. The TC39 Temporal proposal (Stage 3) may eventually replace these libraries with native date/time APIs[5].
Citations:
- 1: https://dev.to/zenulabidin/moment-js-and-its-maintenance-mode-entry-57ai
- 2: https://dev.to/virali_vasa/momentjs-alternative-luxon-32m
- 3: https://softteco.com/blog/moment-dayjs-library-transition
- 4: https://blog.stackademic.com/why-moment-js-is-not-recommended-for-web-development-anymore-71a869c0811
- 5: https://dev.to/shameel/momentjs-is-now-legacy-project-alternatives-5738
- 6: https://www.mindbowser.com/momentjs-deprecation-guide-2025/
- 7: https://8thlight.com/insights/life-after-moment-js
- 8: https://github.com/you-dont-need/You-Dont-Need-Momentjs
- 9: https://www.versio.io/product-release-end-of-life-eol-Moment.js-Moment.js.html
- 10: https://blog.logrocket.com/5-alternatives-moment-js-internationalizing-dates/
Deprecation Warning Handling for Moment.js
The code in
weave-js/src/util/date.ts
currently uses Moment.js for date parsing, which is acceptable for now but comes with a significant caveat—Moment.js entered maintenance mode back in September 2020 and is considered legacy. This means you'll encounter deprecation warnings along with other limitations (e.g., bundle size, mutability, lack of native ES module support).For future iterations, please consider the following:
- Evaluate Alternatives: Look into modern libraries such as Luxon (for a Moment-like experience with native timezone support), Day.js (for an almost drop-in replacement with a much smaller footprint), or date-fns (for modular, functional date utilities).
- Plan for Migration: Even if no immediate change is required, planning ahead for a migration can avoid technical debt—especially as browser tools and performance audits now flag Moment.js usage.
{parsedDate && ( | ||
<li | ||
style={{ | ||
padding: '8px', | ||
borderBottom: '1px solid #eee', | ||
color: '#555', | ||
cursor: 'default', | ||
}}> | ||
{/* Dynamic label for relative or absolute */} | ||
<strong> | ||
{isRelativeDate(inputValue) ? 'Relative:' : 'Absolute:'} | ||
</strong>{' '} | ||
{formatDate(parsedDate)} | ||
</li> | ||
)} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add keyboard navigation for the dropdown suggestions.
The dropdown can be navigated with the mouse, but there's no keyboard support which limits accessibility.
Add keyboard support for navigating suggestions:
// Add keyboard navigation state and handlers
+ const [keyboardFocusIndex, setKeyboardFocusIndex] = useState<number | null>(null);
+
+ const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
+ if (!isDropdownVisible) {
+ if (event.key === 'ArrowDown' || event.key === 'Enter') {
+ setDropdownVisible(true);
+ return;
+ }
+ return;
+ }
+
+ switch (event.key) {
+ case 'ArrowDown':
+ event.preventDefault();
+ setKeyboardFocusIndex(prev =>
+ prev === null || prev >= predefinedSuggestions.length - 1 ? 0 : prev + 1
+ );
+ break;
+ case 'ArrowUp':
+ event.preventDefault();
+ setKeyboardFocusIndex(prev =>
+ prev === null || prev <= 0 ? predefinedSuggestions.length - 1 : prev - 1
+ );
+ break;
+ case 'Enter':
+ if (keyboardFocusIndex !== null) {
+ event.preventDefault();
+ handleSuggestionClick(predefinedSuggestions[keyboardFocusIndex].abbreviation);
+ }
+ break;
+ case 'Escape':
+ event.preventDefault();
+ setDropdownVisible(false);
+ break;
+ }
+ };
// Add the event handler to the input
<input
type="text"
value={inputValue}
onChange={handleInputChange}
onFocus={handleFocus}
onBlur={handleBlur}
+ onKeyDown={handleKeyDown}
onMouseEnter={handleInputMouseEnter}
onMouseLeave={handleInputMouseLeave}
placeholder="Enter a date..."
// ...
/>
// Update dropdown styling to show keyboard focus
<li
key={index}
onClick={() => handleSuggestionClick(suggestion.abbreviation)}
onMouseEnter={() => handleMouseEnter(index)}
onMouseLeave={handleMouseLeave}
style={{
padding: '8px',
cursor: 'pointer',
backgroundColor:
selectedSuggestion === suggestion.abbreviation
? hoveredIndex === index
? '#f8f8f8'
: '#E1F7FA'
: hoveredIndex === index || keyboardFocusIndex === index
? '#f8f8f8'
: '#fff',
}}
onMouseDown={e => e.preventDefault()}>
{/* ... */}
</li>
Description
Adds a new dropdown/text input widget for datetimes. This allows tying in absolute or relative dates, and will encourage more usage of datetime filtering 🤞🏻 .
Testing
Summary by CodeRabbit
New Features
Bug Fixes
Tests