Failed Image Storage status poll leaves settings controls disabled
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 68/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- javascript, wordpress
- Lĩnh vực
- frontend
Hướng nghiên cứu
Bắt đầu trong assets/src/dashboard/utils/api.js tại callSync(), đặc biệt là phần thiết lập trạng thái loading và rejected-request handler, sau đó theo dõi cách assets/src/dashboard/parts/connected/settings/OffloadMedia.js sử dụng các flag đó. Tái hiện một rejected transfer status request và xác minh rằng các control của Image Storage được khôi phục và lỗi của thao tác được hiển thị. Thêm coverage phù hợp nếu test setup của dashboard hỗ trợ, sau đó chạy npm test.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
The Image Storage settings can remain non-interactive after a transfer status request fails. The interface is expected to restore usable controls and display the operation error. Instead, the transfer indicator can disappear while the Image Storage choices and Sync control remain disabled, preventing the user from cancelling or restarting the operation from the screen.
Customer context
- Product / area: Optimole Pro, Image Storage settings UI
- Version: Customer version not provided; inspected source is 4.2.10
- Environment: WordPress; Windows 10 and Firefox reported by ticket metadata
- Integration / third party: No cache reported; the precise failed REST request was not captured
- Reported error / symptom: Image Storage is frozen and controls cannot be clicked
- Impact: The user cannot access normal transfer controls or logs from the affected screen
Reproduction notes
Reported workflow:
- Return to
Optimole > Settings > Image Storagewhile the transfer remains active. - Attempt to use the Image Storage controls.
- Observe that the screen is non-interactive and Cancel, restart, or log actions cannot be used.
A deterministic source-level trigger is to reject the transfer status request after callSync() sets global loading. No browser runtime reproduction was performed, and the original screenshot is unavailable.
Diagnosis
Conclusion
callSync() sets the dashboard-wide loading state before each transfer status request. Its rejected-request handler clears only transfer-specific loading flags, leaving the global loading state enabled. The Image Storage component then hides the progress controls because transfer loading is false while disabling the normal choices and Sync control because global loading remains true. This is a definite UI state defect for the rejected-poll path and closely matches the reported non-interactive screen.
Where this likely occurs
assets/src/dashboard/utils/api.js—callSync()lines 479–590: setsisLoadingat line 498; the rejection handler at lines 585–589 clearsloadingSyncandloadingRollbackwithout clearingisLoading.assets/src/dashboard/parts/connected/settings/OffloadMedia.js—OffloadMedialines 312–322 and 370–436: transfer controls depend on transfer-specific flags, while the radio choices and Sync button independently become non-interactive when globalisLoadingremains true.assets/src/dashboard/parts/connected/settings/OffloadMedia.js— mount effect lines 100–114: resumes polling when persisted offload or rollback status is active.- Git history: blame attributes the current loading/polling behavior to the 2023 transfer UI work, including commits
46e18ee9,23b50eba, andb070f477; it remains present in inspected version 4.2.10.
Engineering notes
A request rejection, JSON parsing rejection, or unexpected response object can reach the stale-loading path. A handled non-2xx response clears global loading before the following promise rejects, so that narrower branch does not retain the stale flag. The source confirms disabled controls rather than a blocked browser event loop. The original screenshot was unavailable, and no browser console or network response was supplied, so the customer's exact request failure is inferred from the symptom.
Test coverage status
No relevant JavaScript unit or e2e coverage for callSync(), OffloadMedia, rejected status polling, or loading-state recovery was found during inspection. tests/test-media.php covers direct PHP rollback/offload behavior but does not exercise the dashboard state path.
What to verify or explore next
- May be worth reproducing an active rollback followed by a rejected
number_of_images_and_pagesrequest and checking the Image Storage controls. - May be worth checking malformed JSON, nonce rejection, network interruption, and component remount cases separately.
- If reproducible, browser network and console output can identify which rejection branch matches the ticket.
- The dashboard JavaScript test command
npm testand relevant e2e dashboard coverage are appropriate verification surfaces if such coverage exists outside the inspected search results.
Unknowns / follow-up
The failing request response, browser console output, customer plugin version, and whether navigation outside Image Storage was also disabled are unavailable. The sanctioned ticket images contained only email signature graphics, not the reported UI screenshot.
Confidence
Confidence: 94/100
Two independently verifiable defects in the Optimole WordPress plugin match the reported stalled rollback and disabled Image Storage UI. The screenshot and site-specific logs are unavailable, so confidence is based on direct source-path evidence rather than a customer-site reproduction.
Source: HelpScout #3411333716
Generated by bug-report-triage (ID: bug-report-triage_6a7f1f81ead033.88694331)
- Ngôn ngữ chính
- PHP
- Star
- 73
- Fork
- 14
- Merge trung bình
- 2 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 16
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Codeinwp/optimole-wp
-
bug-report bug-report-triage crash-report
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 65/100
Codeinwp/optimole-wp#1162 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
customer report feature-request-triage
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 65/100
Codeinwp/optimole-wp#1161 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug-report bug-report-triage customer report regression
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 56/100
Codeinwp/optimole-wp#1159 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
customer report feature-request-triage
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
Codeinwp/optimole-wp#1151 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug-report bug-report-triage crash-report
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 55/100
Codeinwp/optimole-wp#1139 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của Codeinwp/optimole-wp
Issue tương tự
-
sync-en
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
az-digital/az_quickstart#6077 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Toolkit
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug] v-quick-install-app install crashes with ValueError if no supported PHP version is installedĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Add `kjkpc.net`Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
FGRibreau/mailchecker#625 ·