- Add authentication state detection using useSupabaseContext
- Detect embed page context using window.location.pathname
- Show 'Login' button with redirect parameter for unauthenticated users or embed pages
- Keep 'Go home' button for authenticated users without asset access
- Include current URL as redirect parameter in login link
Co-Authored-By: nate@buster.so <nate@buster.so>
- Update login page to be server component that extracts searchParams
- Pass redirectTo as prop to LoginForm instead of using useSearchParams
- Add helper function to reduce code duplication in middleware
- Add URL validation in layout component as suggested in PR comments
- Follow Next.js App Router best practices for server/client components
Co-Authored-By: nate@buster.so <nate@buster.so>
- Backend: Add itertools imports and case-insensitive email sorting to collections, dashboards, and metrics handlers
- Frontend: Add email sorting to React Query mutation onMutate callbacks for share/unshare operations
- Ensures consistent alphabetical ordering by email across API responses and UI state
- Addresses BUS-1477 requirements for predictable individual_permissions ordering
Co-Authored-By: nate@buster.so <nate@buster.so>
Reverted explicit icon exports back to export * pattern to ensure
all icon imports continue working while maintaining bundle optimization
benefits from other changes.
Co-Authored-By: nate@buster.so <nate@buster.so>
- Replace AppMarkdown with AppMarkdownStreaming in ChatResponseMessage_Text and ReasoningMessage_Text
- Map props correctly: markdown → content, showLoader → isStreamFinished
- Add wrapper divs to handle className prop
- Adjust spring physics in ReasoningMessageSelector to prevent height overshoot:
- Reduce stiffness from 400→300 and increase damping from 32→40 for animate
- Reduce stiffness from 450→350 and increase damping from 35→45 for exit
- Improves streaming text animation smoothness and prevents height expansion beyond content
Co-Authored-By: nate@buster.so <nate@buster.so>
- Update middleware to capture original URL and add as 'next' query param
- Modify layout redirect to include redirect parameter
- Update LoginForm to extract and pass redirect to all auth methods
- Add redirect parameter support to all sign-in functions
- Implement URL validation with fallback to home page
- Update OAuth callback to handle redirects consistently
- Support all authentication methods: email/password, Google, GitHub, Azure
Co-Authored-By: nate@buster.so <nate@buster.so>
- Create new hook to detect message insertions from external sources like Slack
- Configure useShapeStream with 'insert' operations only
- Update chat message_ids array when new messages are detected
- Integrate hook into useChatStreaming alongside existing tracking hooks
- Handle message ordering and deduplication with uniq
- Fix TypeScript errors by ensuring id property is included in onUpdateChat calls
Co-Authored-By: nate@buster.so <nate@buster.so>
- Move useThemeOperations hook from colors feature to new src/context-hooks folder
- Add README.md explaining context-hooks folder purpose for API/context related hooks
- Remove isAdmin context check from ThemeList component, now only uses hideThreeDotMenu prop
- Update all import statements to reference new hook location
- Maintain theme categorization logic in ColorsApp.tsx for proper three-dot menu hiding
Co-Authored-By: nate@buster.so <nate@buster.so>
- Move currency endpoint from /api/v2/currency to /api/v2/dictionaries/currency
- Follow existing dictionaries pattern with separate config.ts and index.ts
- Update web API calls to use new endpoint location
- Remove old currency route registration and files
- Preserve all existing functionality and types
The new endpoint is accessible at /api/v2/dictionaries/currency and maintains
the same response format and authentication requirements.
Co-Authored-By: nate@buster.so <nate@buster.so>
- Add proper type annotations for theme parameters in useThemeOperations and ColorsApp
- Make onSelectTheme async for consistency
- Remove unused imports (useGetUser, useUpdateOrganization)
- Add userConfig to useMemo dependency array
Co-Authored-By: nate@buster.so <nate@buster.so>
- Move hook from generic src/hooks to src/components/features/colors for better organization
- Update import paths in ColorsApp and DefaultThemeSelector
- Remove export from generic hooks index file
Co-Authored-By: nate@buster.so <nate@buster.so>
- Add hideThreeDotMenu optional boolean prop to IColorTheme interface
- Update ThemeList component to check admin status and hideThreeDotMenu prop before showing three dot menu
- Set hideThreeDotMenu: false for userConfig organization themes and true for dictionary themes in ColorsApp
- Create reusable useThemeOperations hook for theme operations (onCreateCustomTheme, onDeleteCustomTheme, onModifyCustomTheme, onSelectTheme)
- Update DefaultThemeSelector to use the new hook
- Wrap EditCustomThemeMenu with AddThemeProviderWrapper in ColorsApp
Co-Authored-By: nate@buster.so <nate@buster.so>
- Introduced `count_workspace_members` utility function to retrieve the number of active users in a workspace.
- Updated chat, collection, dashboard, and metric handlers to include `workspace_member_count` in their responses.
- Modified relevant types to accommodate the new `workspace_member_count` field.
- Adjusted frontend components to display the number of workspace members in the ShareMenu and related UI elements.
These changes improve the visibility of workspace member information and enhance the overall user experience.
- Adjusted the ShareMenu component styles for improved layout consistency.
- Added `workspace_sharing` property with a default value of 'none' in metric-related mocks and tests.
- Updated the mock dashboard to include the new `workspace_sharing` field.
These changes improve the UI and ensure that the workspace sharing feature is properly represented in the mock data.
- Updated the `WorkspaceSharing` enum to use camelCase for serialization.
- Introduced `workspace_permissions` field in update requests for chats, collections, dashboards, and metrics.
- Implemented handling of workspace sharing permissions in respective update handlers, allowing for setting and removing permissions.
- Adjusted frontend components and API interfaces to align with the new `workspace_sharing` naming convention.
This change enhances the consistency and usability of workspace sharing across different asset types.
- Updated maxDuration to 600 seconds to align with analyst agent task.
- Added logic to handle cases where no messages are found, sending a direct response to Slack and updating message reactions accordingly.
- Improved type safety in SlackSharingPermissions component by defining a specific type for sharing permissions.