- Move ExpireOrApp logic into standalone component under components/ExpireOrApp
- Remove unused React hooks and CompanyExpireGuard import from app.tsx
- Use dayjs.utc for validity date to prevent timezone offset issues
- Remove stale console.log from CompanyExpireWarning
Resolved conflicts:
- typings.d.ts: Keep both validity fields and platform quota fields in CompanyListItem
- company/Popup.tsx: Merge imports (Card, Col, Row from platform-limit + Dayjs from company-expire)
- company/index.tsx: Keep useAccess and Typography imports needed by company-expire
- rules/index.tsx: Keep validityStatus check from company-expire, adopt simplified clone button from platform-limit
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add CompanyExpireWarning component to layout header for expiring subscription alerts
- Add CompanyExpire wrapper to guard rules and data-source routes
- Refactor CompanyExpireGuard to support optional fullscreen mode via prop
- Add responsive Popover support to VoiceCheck for mobile breakpoints
- Hide rule CRUD action buttons when company validity is expired
- Update profile page to display expiry status alongside validity date
- Update i18n strings for clearer expiry messaging
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add validity period fields to company CRUD, display expiry info in
table and profile, and block access for expired companies via a
full-screen guard component.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Extract MultiCopyPopupContext to standalone context.ts file
- Add Task type and improve type safety in BatchCloneModal
- Use useRef/useCallback to stabilize batch clone handlers
- Add cleanup effect for selectRules in RuleCheckCard on unmount
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Remove the restriction that prevents cloning to the same data source
- Disable (instead of hide) target options with different sourceType
- Add sourceType label (MT4/MT5) to data source select options
- Preserve groupFilter/param1/param2 when cloning to same source
- Auto-reset target when source changes to incompatible sourceType
- Remove parent-level check requiring at least 2 data sources
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add userPlatform hook to derive available platforms from company config
- Add platform access section in company popup with MT4/MT5 switch and quota limits
- Add platform access column in company list showing quota usage
- Replace hardcoded platform options with dynamic userPlatform in account/alert/data-source pages
- Add getPlatformList API and extend CompanyListItem typings
- Add i18n translations for platform access related keys
- Update dev proxy target port to 8082
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Implement PermissionGuard component for route-level permission enforcement
- Add tree-based permission checkbox group in role management popup
- Gate SSE connection, unread count fetch, and rule edit actions on user permissions
- Add skip401Refresh option and auto token refresh on 401 response
- Improve alert table with fixed columns, explicit widths, and text ellipsis
- Add i18n entries for permission guide and rule menu descriptions (en/zh)
- Add expo-api nginx proxy configuration
- Add .claude to .gitignore
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>