Commit Graph

188 Commits

Author SHA1 Message Date
lan
fb67fb6d5b feat(message): implement version-based incremental sync and WS compression
Some checks failed
Frontend CI / ota-android (push) Successful in 1m58s
Frontend CI / ota-ios (push) Successful in 2m2s
Frontend CI / build-android-apk (push) Failing after 3m22s
Frontend CI / build-and-push-web (push) Successful in 4m19s
Implement a more efficient conversation synchronization mechanism using
version numbers instead of sequence numbers to reduce bandwidth usage.
This includes adding support for Gzip decompression on WebSocket
messages to optimize data transfer.

- Add `pako` for WebSocket message decompression
- Implement `getSyncByVersion` in `MessageService`
- Implement `syncByVersion` in `MessageSyncService` to handle incremental
  updates and conversation state changes
- Update `WebSocketService` to support binary frames and Gzip inflation
- Add `syncVersion` to `MessageStore` for tracking synchronization state
2026-05-17 23:37:38 +08:00
lan
404b3fabe7 style(message): remove shadow from message bubble outer container
Some checks failed
Frontend CI / ota-ios (push) Successful in 1m17s
Frontend CI / ota-android (push) Successful in 1m24s
Frontend CI / build-and-push-web (push) Successful in 3m3s
Frontend CI / build-android-apk (push) Failing after 1h47m14s
2026-05-15 14:50:00 +08:00
lan
d8d2b03f94 feat(message): implement message search functionality
Some checks failed
Frontend CI / ota-android (push) Successful in 1m19s
Frontend CI / ota-ios (push) Successful in 1m50s
Frontend CI / build-and-push-web (push) Successful in 3m28s
Frontend CI / build-android-apk (push) Failing after 8m56s
Add ability to search messages within a specific conversation. This includes:
- New `MessageSearchScreen` for displaying search results.
- `MessageRepository.searchByConversation` to query messages by keyword and conversation ID.
- Integration of search entry points in `GroupInfoScreen` and `PrivateChatInfoScreen`.
- Support for scrolling to a specific message sequence (`scrollToSeq`) when navigating from search results.
- Enhanced `HighlightText` component to support custom highlight styles.

feat(message): implement message search functionality
2026-05-14 02:26:32 +08:00
lafay
ea2cf7bcff Merge branch 'dev' of https://code.littlelan.cn/carrot_bbs/frontend into dev
Some checks failed
Frontend CI / ota-ios (push) Successful in 1m16s
Frontend CI / ota-android (push) Successful in 1m21s
Frontend CI / build-and-push-web (push) Successful in 3m26s
Frontend CI / build-android-apk (push) Failing after 46m18s
2026-05-14 01:25:56 +08:00
lafay
4308077232 ci(android): add Android NDK caching and installation to build workflow 2026-05-14 01:25:54 +08:00
lan
cbe708b53b feat(message): support group avatar in navigation and chat screen
All checks were successful
Frontend CI / ota-android (push) Successful in 1m50s
Frontend CI / ota-ios (push) Successful in 1m49s
Frontend CI / build-and-push-web (push) Successful in 2m55s
Frontend CI / build-android-apk (push) Successful in 1h10m58s
Pass group avatar through notification extras, navigation hrefs, and
route parameters. Update ChatScreen to resolve group information
(ID, name, and avatar) by prioritizing route parameters (e.g., from
push notifications) and falling back to conversation data from the
MessageManager.

- Update `NotificationBootstrap` to include `groupAvatar` in query params
- Update `hrefChat` to support `groupAvatar`
- Refactor `useChatScreen` to use `effectiveGroupId`, `effectiveGroupName`,
  and `effectiveGroupAvatar`
- Ensure `MessageManager` fetches conversation details if missing when
  activating a conversation
- Update `MessageListScreen` to pass `groupAvatar` during navigation
2026-05-13 00:31:44 +08:00
lan
7e0436a799 refactor(message): simplify state management and remove redundant service methods
All checks were successful
Frontend CI / ota-ios (push) Successful in 1m36s
Frontend CI / ota-android (push) Successful in 1m36s
Frontend CI / build-and-push-web (push) Successful in 5m6s
Frontend CI / build-android-apk (push) Successful in 39m18s
Refactor the message module to streamline state management by removing the `MessageStateManager` and `SubscriptionManager` layers, relying instead on Zustand's built-in selector mechanism for reactive updates.

- Remove redundant `setConversations`, `addMessage`, and `updateMessage` actions from the Zustand store to favor more specialized update methods.
- Clean up `MessageService` by removing deprecated conversation and message sending convenience methods.
- Update service interfaces to support new synchronization capabilities including `syncBySeq` and `restartSources`.
- Simplify documentation and comments across the message store and its associated services.
2026-05-12 18:26:27 +08:00
lan
48f31e6617 feat(message): implement incremental sync and atomic unread updates
Some checks failed
Frontend CI / ota-android (push) Successful in 1m38s
Frontend CI / ota-ios (push) Successful in 1m38s
Frontend CI / build-and-push-web (push) Successful in 4m28s
Frontend CI / build-android-apk (push) Has been cancelled
Refactor the messaging system to improve synchronization efficiency and state consistency.

- Implement incremental message synchronization using sequence numbers (seq) to reduce payload size.
- Add `markAllAsRead` batch API support to optimize read receipt processing.
- Introduce atomic state updates in `useMessageStore` to prevent inconsistent UI rendering during unread count changes.
- Implement notification deduplication in `WSMessageHandler` to prevent duplicate unread increments during reconnection.
- Optimize `MessageSyncService` to prioritize incremental sync over full snapshots when local data exists.
- Refactor `ReadReceiptManager` to use optimistic updates with proper rollback mechanisms.
- Fix minor UI issues in `SettingsScreen` and `PrivacySettingsScreen` related to theme picker z-index and style application.
2026-05-12 18:04:32 +08:00
lan
7c7aaf9108 build(config): update bundle identifier and add signing plugin
All checks were successful
Frontend CI / ota-ios (push) Successful in 1m33s
Frontend CI / ota-android (push) Successful in 1m40s
Frontend CI / build-and-push-web (push) Successful in 2m37s
Frontend CI / build-android-apk (push) Successful in 1h22m51s
feat(notification): improve JPush integration and message sync reliability

- Update iOS bundle identifier to `cn.qczlit.weiyou`
- Add `withSigning` Expo plugin
- Enhance `withJPush` plugin with improved Swift AppDelegate injection logic
- Update JPush default channel to `developer-default`
- Optimize `MessageSyncService` to prevent race conditions in unread count updates
- Implement promise deduplication for `fetchUnreadCount` to prevent redundant network requests
- Add `setConversationsWithUnread` to `useMessageStore` for atomic state updates of conversations and unread counts
2026-05-12 01:28:46 +08:00
lafay
1d9c312c6c build(android): update adaptive icon assets and background color
All checks were successful
Frontend CI / ota-ios (push) Successful in 1m23s
Frontend CI / ota-android (push) Successful in 1m41s
Frontend CI / build-and-push-web (push) Successful in 3m7s
Frontend CI / build-android-apk (push) Successful in 54m19s
Update app icons and splash assets to match new branding, changing the
adaptive icon background color from light blue (#E6F4FE) to brand blue
(#0570F9) across all Android icon variants.
2026-05-09 12:43:05 +08:00
lan
d42083a4aa feat(profile): enhance settings and privacy UI with icons and theme picker
All checks were successful
Frontend CI / ota-ios (push) Successful in 1m12s
Frontend CI / ota-android (push) Successful in 1m22s
Frontend CI / build-and-push-web (push) Successful in 54s
Frontend CI / build-android-apk (push) Successful in 1h14m5s
Refactor the profile settings and privacy screens to provide a more
modern and intuitive user experience.

- Add icons to visibility options and privacy settings items
- Implement a theme selection dropdown in the settings screen
- Restructure privacy settings layout into grouped containers
- Move account management items (blocked users, deletion) from general
  settings to privacy settings
- Improve visual hierarchy and spacing in settings screens
2026-05-09 00:34:09 +08:00
lan
d0ea2c5aea refactor(business): simplify text rendering in PostContentRenderer
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 1m4s
Frontend CI / ota-ios (push) Successful in 1m35s
Frontend CI / ota-android (push) Successful in 1m35s
Frontend CI / build-android-apk (push) Failing after 16m3s
Remove redundant `<Text>` wrapper when keyword highlighting is not applied
to improve rendering efficiency and consistency.
2026-05-08 23:49:42 +08:00
lan
81ee9ba75b feat(business): enhance block editor with segment conversion and data persistence
Some checks failed
Frontend CI / ota-android (push) Successful in 1m17s
Frontend CI / ota-ios (push) Successful in 1m32s
Frontend CI / build-and-push-web (push) Successful in 3m5s
Frontend CI / build-android-apk (push) Failing after 3h12m39s
- Implement `segmentsToBlocks` utility to convert message segments into editable blocks.
- Update `BlockEditor` and `useBlockEditor` to support initial block loading and improved image upload handling.
- Add logic to `CreatePostScreen` to automatically switch to long-post mode when image segments are detected and preserve data when toggling modes.
- Update `AboutScreen` to make the ICP filing number clickable.
- Refactor mapper imports to use the updated data model paths.
2026-05-08 13:19:40 +08:00
lan
d4c3e1f268 feat(business): implement block-based content editing and rich text rendering
All checks were successful
Frontend CI / ota-android (push) Successful in 1m18s
Frontend CI / ota-ios (push) Successful in 1m31s
Frontend CI / build-and-push-web (push) Successful in 2m49s
Frontend CI / build-android-apk (push) Successful in 1h18m20s
Introduce a new `BlockEditor` component and upgrade the post/message
rendering system to support rich text segments (images, @mentions,
votes, and post references).

- Implement `BlockEditor` for long-form post creation with image
  embedding support.
- Upgrade `PostContentRenderer` and `SegmentRenderer` to handle
  complex segment types including inline images and block elements.
- Refactor `PostCard` to use segment-based content and image
  signatures for optimized memoization.
- Centralize segment partitioning logic in `segmentUtils.ts` to ensure
  consistent rendering across chat and post modules.
- Update `PostRepository` and `Post` entity to support the new
  `segments` data structure.
2026-05-08 01:57:05 +08:00
lan
ea9e51b0b0 feat(ui): implement keyword highlighting and improve search experience
All checks were successful
Frontend CI / ota-ios (push) Successful in 1m33s
Frontend CI / ota-android (push) Successful in 1m34s
Frontend CI / build-and-push-web (push) Successful in 2m31s
Frontend CI / build-android-apk (push) Successful in 1h2m56s
- Add keyword highlighting in `PostCard` and `PostContentRenderer` using `HighlightText`.
- Implement smart excerpt logic in `PostCard` to show relevant context around search keywords.
- Update `SearchBar` styles for better visual feedback and consistency.
- Enhance `SearchScreen` with modern tab variants and improved tag styling.
- Add support for updating group descriptions in `GroupInfoScreen` and `GroupService`.
- Refactor various UI components for improved layout stability and typography.
2026-05-07 01:08:58 +08:00
lan
7f606e14dd fix(ui): adjust keyboard handling and prevent duplicate view recording
All checks were successful
Frontend CI / ota-android (push) Successful in 1m21s
Frontend CI / ota-ios (push) Successful in 1m28s
Frontend CI / build-and-push-web (push) Successful in 2m56s
Frontend CI / build-android-apk (push) Successful in 2h32m37s
- Fix keyboard avoidance logic in PostDetailScreen and ChatScreen by applying manual keyboard height offsets only on Android, preventing double padding on iOS.
- Prevent multiple view recording calls in TradeDetailScreen by using a ref to track if the view has already been recorded.
2026-05-06 12:53:39 +08:00
lan
64493baf7f fix(ui): improve layout stability and refactor trade detail styles
All checks were successful
Frontend CI / ota-android (push) Successful in 1m34s
Frontend CI / ota-ios (push) Successful in 1m34s
Frontend CI / build-and-push-web (push) Successful in 3m27s
Frontend CI / build-android-apk (push) Successful in 1h22m22s
- fix schedule screen layout by measuring day width on web to prevent overflow
- add overflow hidden to schedule grid cells
- refactor trade detail screen styles for better organization and readability
- update trade detail seller card and avatar components
- expand trade type and status maps in trade detail screen
2026-05-06 00:45:04 +08:00
lan
d879eea7d1 refactor(profile): adjust spacing for tab bar and post wrapper
Some checks failed
Frontend CI / build-android-apk (push) Failing after 16s
Frontend CI / ota-android (push) Successful in 2m3s
Frontend CI / ota-ios (push) Successful in 1m11s
Frontend CI / build-and-push-web (push) Successful in 2m52s
Reset `tabBarContainer` margin to 0 and apply `spacing.md` as `marginTop` to the `postWrapper` to correct layout positioning in the profile view.
2026-05-06 00:02:02 +08:00
lan
e18cac2dca style(ui): update profile tab bar container margin
Some checks failed
Frontend CI / ota-android (push) Successful in 1m34s
Frontend CI / ota-ios (push) Successful in 1m34s
Frontend CI / build-and-push-web (push) Successful in 3m32s
Frontend CI / build-android-apk (push) Has been cancelled
Adjust the `marginTop` of the `tabBarContainer` in `createSharedProfileStyles` from 0 to `spacing.md` to improve layout spacing.
2026-05-05 22:36:36 +08:00
lan
3196972596 refactor: restructure core architecture and responsive system
All checks were successful
Frontend CI / ota-android (push) Successful in 1m40s
Frontend CI / ota-ios (push) Successful in 1m39s
Frontend CI / build-and-push-web (push) Successful in 3m30s
Frontend CI / build-android-apk (push) Successful in 1h1m8s
This commit implements a major architectural refactor to improve modularity, type safety, and maintainability across the codebase.

Key changes include:
- **Responsive System Refactor**: Migrated from a monolithic `useResponsive` hook to a set of specialized, granular hooks (`useBreakpoint`, `useOrientation`, `usePlatform`, etc.) located in `src/presentation/hooks/responsive`. This reduces unnecessary re-renders and improves developer experience.
- **Core Service Restructuring**: Introduced a new directory structure for services, including dedicated folders for `datasources`, `mappers`, and domain-specific types (`message`, `post`).
- **Data Layer Improvements**:
    - Centralized JSON parsing logic in `src/database/core/jsonUtils.ts`.
    - Cleaned up repository implementations by removing redundant local utility functions.
    - Refactored `MessageMapper` to use the new centralized JSON utility.
- **Type System Cleanup**:
    - Decomposed the large `src/types/dto.ts` into a modular `src/types/dto/` directory.
    - Simplified `src/types/index.ts` and introduced backward-compatible aliases for core entities.
- **Utility Consolidation**:
    - Created a centralized `src/utils/formatTime.ts` to replace fragmented date formatting logic across various screens and components.
    - Removed deprecated responsive utility files in favor of the new hook-based system.
- **Service Logic Refinement**: Refactored `ApiClient` and `WebSocketService` to use a centralized `showVerificationModal` service, removing duplicated state management for verification prompts.
2026-05-05 19:07:33 +08:00
lan
f5f9c3a619 ci: add iOS OTA publishing and refactor gesture handling
Some checks failed
Frontend CI / ota-android (push) Successful in 1m10s
Frontend CI / ota-ios (push) Successful in 1m8s
Frontend CI / build-and-push-web (push) Successful in 6m1s
Frontend CI / build-android-apk (push) Has been cancelled
- Add `ota-ios` job to GitHub Actions workflow to support iOS OTA updates
- Refactor `ScheduleScreen` to use `GestureDetector` and `Gesture` from `react-native-gesture-handler` instead of `PanGestureHandler`
- Update `TradeCard` styles and layout spacing in `HomeScreen` and `MarketView`
- Refactor `MarketView` to use updated responsive spacing values
2026-05-05 17:46:31 +08:00
lan
c0ebebe3da feat(db): add getLastMessageByConversation and update conversation list preview
All checks were successful
Frontend CI / ota-android (push) Successful in 1m16s
Frontend CI / build-and-push-web (push) Successful in 2m53s
Frontend CI / build-android-apk (push) Successful in 34m6s
Add `getLastMessageByConversation` to `MessageRepository` to allow fetching the most recent message for a specific conversation.

Update `ConversationListRow` to use this new repository method as a fallback when message segments are missing, ensuring the conversation list preview displays the last message content correctly.
2026-05-05 02:01:05 +08:00
lan
8a271b2376 feat(ws): implement sync_required event and message acknowledgement
All checks were successful
Frontend CI / ota-android (push) Successful in 1m9s
Frontend CI / build-and-push-web (push) Successful in 3m36s
Frontend CI / build-android-apk (push) Successful in 37m10s
Add support for a new `sync_required` WebSocket message type to trigger
incremental synchronization of conversations, unread counts, and active
messages. Also implement an `ack` mechanism to acknowledge received
messages.
2026-05-04 18:31:22 +08:00
lan
4213d13b8f refactor(ui): implement custom header system and unify screen layouts
Some checks failed
Frontend CI / ota-android (push) Successful in 1m30s
Frontend CI / build-and-push-web (push) Successful in 12m29s
Frontend CI / build-android-apk (push) Failing after 3h10m38s
Refactor the navigation and header strategy by replacing native stack headers with a custom `SimpleHeader` component across most profile and detail screens. This provides a more consistent UI/UX and better control over layout behavior.

- Implement `SimpleHeader` component in `src/components/common`.
- Disable native header rendering in `app/(app)/(tabs)/profile/_layout.tsx` and `app/_layout.tsx`.
- Update profile sub-screens to use `SimpleHeader` and `StatusBar` from `expo-status-bar`.
- Refactor `PostDetailScreen` to use a custom header implementation for better integration with the post author information.
- Update `UserScreen` to wrap content in `SafeAreaView` with the new header.
- Adjust `AppBackButton` to support transparent backgrounds.
2026-05-03 22:01:43 +08:00
lafay
490a99ab3c refactor(chat): remove Unicode placeholder-based mention chip overlay system
All checks were successful
Frontend CI / ota-android (push) Successful in 1m8s
Frontend CI / build-and-push-web (push) Successful in 3m39s
Frontend CI / build-android-apk (push) Successful in 31m33s
Replaced the previous approach of tracking @mentions using private Unicode characters (U+E000-U+F8FF) with a simpler regex-based solution that extracts mention ranges directly from input text. This eliminates the complex overlay rendering logic and corresponding styles/types.
2026-04-29 11:29:59 +08:00
lafay
0f289e3182 feat(chat): implement @mention chip overlay rendering with Unicode placeholder tracking
Some checks failed
Frontend CI / ota-android (push) Successful in 1m12s
Frontend CI / build-and-push-web (push) Successful in 3m28s
Frontend CI / build-android-apk (push) Failing after 1h23m13s
Add visual overlay rendering for @mention chips in the chat input using Unicode private use area characters as invisible placeholders. The implementation includes chip data tracking via `MentionChipMap`, dynamic segment parsing to separate chip and text content for overlay display, and updated memo comparison in `MessageBubble` to include avatar press handlers for proper re-render prevention.
2026-04-28 22:18:42 +08:00
lafay
d2120a257d feat(auth): enhance login error handling with detailed error code mapping
All checks were successful
Frontend CI / ota-android (push) Successful in 1m29s
Frontend CI / build-and-push-web (push) Successful in 2m31s
Frontend CI / build-android-apk (push) Successful in 36m5s
- Add backend error_code support (INVALID_CREDENTIALS, USER_BANNED, etc.)
- Improve network error detection with code=0 fallback
- Add granular HTTP status code handling (400, 401, 403, 429, 5xx)
- Update LoginScreen to display authStore error or generic message
- Include notification service improvements:
  - Keep JPush connection alive in background via setKeepLongConnInBackground
  - Add manual sound/vibration for local notifications via preferences
- Fix SearchScreen layout by accounting for floating tab bar and safe area
2026-04-28 17:25:27 +08:00
lafay
cf9feeae68 feat(notification): enhance chat notification routing with flexible field handling
All checks were successful
Frontend CI / ota-android (push) Successful in 1m11s
Frontend CI / build-and-push-web (push) Successful in 3m22s
Frontend CI / build-android-apk (push) Successful in 1h31m46s
Support both 'chat_message' and 'chat' notification types with flexible field name handling (snake_case and camelCase variants). Add groupId and groupName parameters for group chats, and fall back to notifications screen when conversationId is missing.
2026-04-28 14:53:32 +08:00
lafay
2432f7bc1e feat(notification): add foreground notification vibration feedback and Android channel setup
All checks were successful
Frontend CI / ota-android (push) Successful in 1m33s
Frontend CI / build-and-push-web (push) Successful in 2m51s
Frontend CI / build-android-apk (push) Successful in 29m40s
- Add vibration feedback when app is in foreground and notification arrives
- Configure Android notification channel using expo-notifications
- Integrate notification handler to respect user push/sound preferences
- Add platform-specific local notification handling for Android
2026-04-28 08:53:28 +08:00
lafay
be0c304711 <think>
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 41s
Frontend CI / ota-android (push) Successful in 1m23s
Frontend CI / build-android-apk (push) Successful in 1h12m29s
Let me analyze the changes:

1. PrivacyPolicyScreen.tsx:
   - Updated LAST_UPDATED date from '2026年4月4日' to '2026年4月28日'
   - Added detailed third-party SDK disclosure section:
     - Added JPush (极光推送) with provider details, purpose, collected data, and privacy policy link
     - Added Expo推送服务 with provider details, purpose, and collected data

2. TermsOfServiceScreen.tsx:
   - Updated LAST_UPDATED date from '2026年4月4日' to '2026年4月28日'
   - Added section 6.4 about third-party SDKs (JPush) and reference to privacy policy

These changes are:
- Documentation/legal text updates
- Related to privacy and terms screens
- Adding third-party SDK disclosure (JPush)

The primary type should be: docs (documentation changes)
Scope could be: profile or privacy/terms related
Description should focus on the third-party SDK disclosure update

This is different from the previous commit which was about notification integration. This commit is about updating legal/policy documents to disclose third-party SDKs.

Let me craft a conventional commit message:

type: docs
scope: profile or privacy
description: update privacy policy and terms to disclose third-party SDKs

Body could explain:
- Added JPush SDK disclosure with provider info, data collected, privacy policy link
- Added Expo push service disclosure
- Updated terms of service to reference third-party SDKs
- Updated last update dates

Breaking changes: None

Footer: Could reference related issue if any, but none provided.

Let me write the commit message:

```
docs(privacy): update privacy policy and terms to disclose third-party SDKs

- Add JPush SDK disclosure with provider details, data collection purposes, and privacy policy link
- Add Expo push service disclosure with provider and collected data information
- Update terms of service to reference third-party SDK usage

- Update document dates to April 28, 2026
```

I need to verify this is sufficiently distinct from the previous commit. The last one was "feat(notification): integrate expo-notifications..." so using "docs(privacy)" with this specific focus on third-party SDK disclosure makes sense and clearly differs from the prior notification feature work.

</think>
docs(privacy): update privacy policy and terms to disclose third-party SDKs

- Add JPush SDK disclosure with provider details, data collection purposes, and privacy policy link
- Add Expo push service disclosure with provider and collected data information
- Update terms of service to reference third-party SDK usage per privacy policy
- Update document dates to April 28, 2026
2026-04-28 00:21:57 +08:00
lafay
b7ce9e3b9a feat(notification): integrate expo-notifications for permission handling and deep linking
Some checks failed
Frontend CI / ota-android (push) Successful in 1m27s
Frontend CI / build-and-push-web (push) Has been cancelled
Frontend CI / build-android-apk (push) Has been cancelled
- Add expo-notifications dependency and configure with JPush plugin
- Request notification permission on app launch for iOS/Android
- Handle notification taps to navigate to chat or notifications screen
- Add UI to check and request system notification permission in settings
- Refactor background sync: WebSocket disconnects in background, JPush handles push
- Add checkNotificationPermission() and requestNotificationPermission() to jpushService
2026-04-28 00:20:07 +08:00
lafay
296e649fbb chore(release): bump app version to 0.0.2
Some checks failed
Frontend CI / ota-android (push) Successful in 1m19s
Frontend CI / build-and-push-web (push) Failing after 1m36s
Frontend CI / build-android-apk (push) Has been cancelled
2026-04-27 23:37:49 +08:00
lafay
88d9ffe9da chore(build): remove deprecated always-auth npm config from CI workflow
Some checks failed
Frontend CI / ota-android (push) Has been cancelled
Frontend CI / build-android-apk (push) Has been cancelled
Frontend CI / build-and-push-web (push) Failing after 40s
2026-04-27 23:36:16 +08:00
lafay
9745d2209f ci: update npm registry to npmmirror.com in build workflow
Some checks failed
Frontend CI / ota-android (push) Failing after 42s
Frontend CI / build-and-push-web (push) Failing after 55s
Frontend CI / build-android-apk (push) Failing after 1m45s
2026-04-27 23:33:38 +08:00
lafay
2015a1e9dd ci: update docker image name to carrot_bbs/frontend-web in build workflow
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 2m7s
Frontend CI / ota-android (push) Failing after 6m3s
Frontend CI / build-android-apk (push) Has been cancelled
2026-04-27 23:23:17 +08:00
lafay
ba89b3dc94 feat(notification): migrate from expo-notifications to JPush push service
Some checks failed
Frontend CI / build-and-push-web (push) Has started running
Frontend CI / ota-android (push) Has been cancelled
Frontend CI / build-android-apk (push) Has been cancelled
Replace expo-notifications with JPush for push notifications across the app.
This includes adding JPush native module dependencies, configuring the JPush
plugin in app.json, implementing jpushService wrapper, and updating notification
services to use JPush APIs. Also adds device registration on token refresh for
both mobile and web platforms.

BREAKING CHANGE: expo-notifications removed in favor of JPush for push notifications
2026-04-27 23:21:08 +08:00
lafay
0e4306c3ac ci: update docker registry path from with_you to carrot_bbs
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 2m33s
Frontend CI / ota-android (push) Successful in 10m37s
Frontend CI / build-android-apk (push) Successful in 43m57s
2026-04-27 13:40:41 +08:00
lafay
f478fa3fd3 refactor(ui): enhance TradeDetailScreen with responsive design and image gallery
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 2m44s
Frontend CI / ota-android (push) Successful in 10m26s
Frontend CI / build-android-apk (push) Successful in 39m50s
- Add responsive hooks (useResponsive, useResponsiveValue, useResponsiveSpacing)
- Replace custom image handling with ImageGrid and ImageGallery components
- Update styling with modern typography and spacing adjustments
- Add image modal for fullscreen gallery view
2026-04-27 10:32:24 +08:00
lafay
e0b43ce60d build(gradle): add foojay toolchain resolver convention plugin
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 14s
Frontend CI / build-android-apk (push) Failing after 12s
Frontend CI / ota-android (push) Failing after 14s
Adds the Gradle Toolchains Foojay Resolver plugin to enable automatic JDK
downloads and toolchain management, allowing the project to specify required
JDK versions without manual installation.
2026-04-27 01:15:20 +08:00
lafay
0e2945b86b refactor(ui): modernize components with flat design and UX refinements
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 42s
Frontend CI / build-android-apk (push) Failing after 7m16s
Frontend CI / ota-android (push) Successful in 10m29s
- Redesign chat screen header with improved layout and panel styling
- Update emoji panel tab bar from emoji to icon-based navigation
- Simplify trade detail view with inline content attributes
- Add masonry layout support to market view grid
- Refactor privacy settings from card-based to list-based dropdown UI
- Improve comment item actions layout and styling
- Update trade creation flow with buy/sell specific text
- Adjust padding, gaps, and font sizes across multiple components
- Clean up unused code and imports
2026-04-27 01:02:39 +08:00
lafay
e519346261 refactor(ui): update staff identity label to "官方"
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 4m13s
Frontend CI / ota-android (push) Successful in 10m35s
Frontend CI / build-android-apk (push) Failing after 25m21s
Change staff identity display text from "职工认证" to "官方" and update
corresponding colors to gold theme in UserProfileHeader and
VerificationSettingsScreen.
2026-04-26 19:54:10 +08:00
lafay
1989cc8519 feat(ui): add verification badge to UserProfileHeader
Some checks failed
Frontend CI / build-and-push-web (push) Has been cancelled
Frontend CI / ota-android (push) Has been cancelled
Frontend CI / build-android-apk (push) Has been cancelled
Add verification status display with identity-based badge icons to the user
profile header component. Also add identity and verification_status fields
to UserDTO and UserDetailDTO types.

- Add VerificationBadge component with icon display based on identity type
- Support for student, teacher, staff, alumni, and external identity types
- Add 'none' status to VerificationStatus type for unverified users
2026-04-26 19:51:26 +08:00
lafay
6cbd2092ac refactor(ui): redesign SearchBar with compact mode and add home screen tabs
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 3m13s
Frontend CI / build-android-apk (push) Failing after 9m39s
Frontend CI / ota-android (push) Successful in 10m31s
Refactor SearchBar component to support compact mode with transparent styling,
reduced padding, and smaller icons. Add home screen tab navigation for switching
between home feed and market view with animated tab indicator. Also adjust
PostDetailScreen action button sizing and CommentItem margins for better spacing.
2026-04-26 17:13:43 +08:00
lafay
5815f1a5f7 refactor(home): redesign home screen with sort bar and add recommendation feed
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 2m49s
Frontend CI / ota-android (push) Successful in 10m29s
Frontend CI / build-android-apk (push) Successful in 40m32s
- Replace PagerView-based tabs with modern sort bar navigation
- Add "推荐" (recommended) feed option with "hot" sort type
- Update tab icons and labels to match new sort paradigm
- Optimize PostCard, MessageBubble conditional styles

perf(chat): migrate FlatList to FlashList for emoji/sticker panels

- Improve virtualized rendering performance for emoji and sticker grids
- Fix jump-to-latest scroll behavior for inverted FlashList

perf(profile): extract user header and tab bar into separate memoized renders

- Prevent unnecessary re-renders when switching tabs

feat(api): add channel_id filter support for post queries

- Include channel_id in cursor pagination requests
- Update CursorPaginationRequest type definition

style(chat-info): redesign group and private chat info screens with flat layout

- Remove card borders and shadows for cleaner appearance
- Adjust avatar sizes and spacing for consistency
2026-04-26 12:04:27 +08:00
lafay
e9d7098ad0 fix(auth): make verification code input responsive to screen width
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 2m36s
Frontend CI / ota-android (push) Successful in 10m38s
Frontend CI / build-android-apk (push) Successful in 42m53s
Adjust cell width and font size based on device screen dimensions to prevent overflow on smaller screens. Calculate available width accounting for container padding and margins, with minimum cell width of 32px. Font size scales down from 28px to 24px or 20px as cell width decreases.
2026-04-26 01:15:24 +08:00
lafay
2dc6936aac feat(post): add post reference functionality with inline cards and suggestion search
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 2m42s
Frontend CI / build-android-apk (push) Has been cancelled
Frontend CI / ota-android (push) Has been cancelled
Add support for referencing/quoting other posts within post content. Includes:
- New `post_ref` segment type with `PostRefSegmentData` interface for post references
- New `PostRefCard` component to display referenced posts inline
- Post suggestion search triggered by `#` in `PostMentionInput`
- Updated `PostContentRenderer` to render post reference segments
- Add `suggestPosts` and `recordRefClick` API methods in postService

Additional improvements:
- Add image gallery preview for user profile covers and avatars
- Make text selectable across CommentItem, PostContentRenderer, and PostDetailScreen
- Migrate FlatList to FlashList in PostDetailScreen and UserProfileScreen
- Add nestedScrollEnabled to CreatePostScreen
- Add clickable member avatars in GroupMembersScreen
2026-04-26 01:11:30 +08:00
lafay
5fa5403d6a feat(message): add conversation notification mute feature
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 57s
Frontend CI / ota-android (push) Successful in 10m53s
Frontend CI / build-android-apk (push) Failing after 1h12m12s
Add notification mute functionality for conversations with the following changes:

- Add notification_muted field to ConversationResponse and related DTOs
- Add notificationMutedMap to message store for tracking mute state
- Add setConversationNotificationMuted API method
- Integrate mute toggle in GroupInfoScreen and PrivateChatInfoScreen
- Skip system notifications for muted conversations
- Suppress vibration for muted conversations in WS handler
- Clean up selected mentions when @mentions are removed from text

Chore changes:
- Update PostCard bookmark icon from 'bookmark' to 'star'
- Refine card styles across AppsScreen, MaterialsScreen, and SubjectMaterialsScreen
- Improve week selector scrolling to center selected week in ScheduleScreen
2026-04-25 21:23:22 +08:00
lafay
de0afa93a1 fix(ws): only process unread notifications and handle multiple payload formats
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 3m37s
Frontend CI / ota-android (push) Successful in 10m50s
Frontend CI / build-android-apk (push) Failing after 17m44s
Previously, the notification handler would process all notifications regardless of read status, and only accepted `extra_data` from the payload. Now it:
- Only calls systemNotificationService and increments unread count for unread notifications
- Falls back to `payload.extra` or `payload.data` when `extra_data` is not present
2026-04-25 15:59:59 +08:00
lafay
eccfd67550 fix(android): handle hardware back button and navigation with active panels/keyboard
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 3m20s
Frontend CI / ota-android (push) Successful in 10m27s
Frontend CI / build-android-apk (push) Has been cancelled
Improve back navigation UX by checking for open panels or keyboard before leaving the chat screen. When back is triggered, dismiss keyboard or close panel first instead of immediately navigating away. Apply this logic to both the navigation gesture listener and Android hardware back button for consistent behavior.
2026-04-25 15:28:13 +08:00
lafay
6b91a7ead1 fix(message): add robust NaN validation for date handling across components
Some checks failed
Frontend CI / build-and-push-web (push) Failing after 53s
Frontend CI / ota-android (push) Has been cancelled
Frontend CI / build-android-apk (push) Has been cancelled
Add comprehensive date validation using Number.isNaN() checks to prevent crashes when timestamps are invalid or empty. Apply defensive formatting across CommentItem, SystemMessageItem, MessageBubble, LongPressMenu, and store utilities.

Refine message bubble styling: move sender name display to both sides in group chat with distinct `mySenderName` styling, adjust bubble corner radius to top-right for consistent arrow placement, and align message rows to flex-start for improved layout. Simplify group avatar rendering in ConversationListRow.
2026-04-25 15:25:42 +08:00