1. 03 Jul, 2025 4 commits
  2. 02 Jul, 2025 3 commits
  3. 01 Jul, 2025 7 commits
  4. 28 Jun, 2025 3 commits
  5. 27 Jun, 2025 17 commits
  6. 26 Jun, 2025 6 commits
    • 🐛 fix(redemptions-table): correct initial page index and pagination state · 0cad369f
      Summary:
      The redemption list occasionally displayed an invalid range such as “Items -9 - 0” and failed to highlight page 1 after a refresh. This was caused by the table being initialized with `currentPage = 0`.
      
      Changes:
      • update `useEffect` to load data starting from page 1 instead of page 0
      • refactor `loadRedemptions` to accept `page` (default 1) and sanitize backend‐returned pages (`<= 0` coerced to 1)
      • keep other logic unchanged
      
      Impact:
      Pagination text and page selection now show correct values on first load or refresh, eliminating negative ranges and ensuring the first page is properly highlighted.
      t0ng7u committed
    • 🐛 fix(redemptions-table): show loading indicator while refetching data · 256b9a9f
      Previously, the table did not enter the loading state after performing actions such as deleting, enabling, or disabling a redemption code. This caused a brief period where the UI appeared unresponsive while awaiting the backend response.
      
      Changes made:
      • Added `setLoading(true)` at the beginning of `loadRedemptions` to activate the loading spinner whenever data is (re)fetched.
      • Added an explanatory code comment to clarify the intent.
      
      This improves user experience by clearly indicating that the system is processing and prevents confusion during data refresh operations.
      t0ng7u committed
    • 🎁 refactor(ui/redemption): migrate EditRedemption page to Semi Form & enhance UX · f2dd64a3
      SUMMARY
      • Re-implemented `web/src/pages/Redemption/EditRedemption.js` with Semi Form components, removing legacy local-state handling.
      • Added `formApiRef` for centralized control; external “Submit” button now triggers `formApi.submitForm()`.
      • Replaced `Input/AutoComplete/DatePicker` etc. with `<Form.*>` fields, leveraging built-in validation & accessibility.
      • Field validations:
        – `name` (create only), `quota`, `count` → required with localized messages.
      • Expiration-time flow:
        – Default value `null` (no more 1970-01-01).
        – When loading data, convert 0 → null, timestamp → Date.
        – On submit, Date → unix seconds; empty → 0.
      • Responsive grid layout (`Row/Col`) for tidy alignment.
      • Added helpful `showClear` & full-width styling for inputs; quota presets retained.
      • Cleaned unused imports & handlers; fixed linter issues.
      
      RESULT
      The Redemption form now benefits from higher performance, clearer validation, and a cleaner codebase consistent with Semi Design best practices.
      t0ng7u committed
    • refactor(ui/token): migrate EditToken page to Semi Form API and polish UX · 0900f43c
      SUMMARY
      • Re-implemented `EditToken.js` with Semi Form components, eliminating manual state handling and reducing re-renders.
      • Added grid-based layout; “Expiration Time” selector now sits inline with quick-set buttons for consistent alignment on desktop & mobile.
      • Introduced dedicated “Quota”, “Access”, “Model Limits”, and “Group” cards for clearer field grouping.
      • Reworked model-limit interaction: single multi-select list replaces checkbox toggle; backend flag `model_limits_enabled` is now inferred automatically.
      • Applied required validation rules to critical fields (`name`, `remain_quota`, `group`, `expired_time`, `tokenCount`) with localized messages.
      • Enabled dynamic option loading for models & groups; default auto-group honoured.
      • Added unlimited-quota switch, quota presets, and helpful extraText/tooltips.
      • Removed obsolete `handleInputChange` & `setUnlimitedQuota` helpers; formApi now manages all data flow.
      • Cleaned imports (e.g., dropped unused `IconUserGroup`), fixed linter errors, and updated submit logic to use `formApi.submitForm()`.
      
      RESULT
      The token creation/editing experience is faster, more accessible, and easier to maintain, fully aligned with Semi Design best practices.
      t0ng7u committed
    • fix: ratelimit style error · 8d34c572
      tbphp committed