Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[Bug] Import taxonomy wizard: "Continue" button on the Upload step silently no-ops after reopening the wizard with a previously used file

Đang mở Phù hợp với người mới
#827 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

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ó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
85/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ệ
react, typescript
Lĩnh vực
frontend

Hướng nghiên cứu

Bắt đầu với src/generic/loading-button/index.tsx và kiểm tra cách callback click theo dõi trạng thái bị vô hiệu hóa, sau đó lần theo việc sử dụng nó từ src/taxonomy/import-tags/ImportTagsWizard.tsx và hành vi cache trong src/taxonomy/data/apiHooks.ts. Tái hiện bằng cách mở lại wizard và chọn cùng một tệp; được xem là hoàn tất khi Continue chuyển sang Populate Taxonomy Information trong mọi lần thử mà không cần tải lại trang.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Environment: Master Sandbox, https://apps.master.openedx.io/authoring/home

Steps to reproduce
  1. Studio → Taxonomies → "+ Import".
  2. Upload any valid CSV/JSON file, click Continue — works, advances to the "Populate Taxonomy Information" step.
  3. Close the modal without completing the import.
  4. Reopen "+ Import", upload the same file again.
  5. Click Continue.
  6. Repeat step 4-5 on a subsequent reopen with a previously used file.
Expected result

Each time a valid file is uploaded and Continue is clicked on the Upload step, the wizard advances to the "Populate Taxonomy Information" step, regardless of whether that file was already used in an earlier session of the wizard.

Actual result

The first time through, Continue works as expected. On every subsequent reopen of the wizard where a previously used file is uploaded again, clicking Continue does nothing: no step change occurs and no error is shown. The button remains visually enabled. Only a full page reload restores normal behavior.

Observations
  • The button appears visually enabled (not disabled).
  • No console errors or warnings tied to this click.
  • Neither the successful nor the stuck click fires any network request — the Upload→Populate transition is purely client-side (setCurrentStep('populate')), so the network layer isn't involved.
Likely root cause (established by reading the code, not by a separate live test on the old version)
  • src/generic/loading-button/index.tsx — the click handler:

    const loadingOnClick = useCallback(async (e) => {
      if (disabled) { return; }
      ...
    }, [componentMounted, onClick]);
    

    disabled is missing from the useCallback dependency array, so the closure can capture a stale disabled value if the component itself isn't recreated.

  • src/taxonomy/import-tags/ImportTagsWizard.tsx — the Continue button is rendered through this ternary:

    {importPlanResult.isLoading ? <LoadingSpinner /> : (
      <LoadingButton
        disabled={!file || importPlanResult.isLoading || !!importPlanResult.error}
        onClick={reimport ? generatePlan : populateData}
      />
    )}
    

    While isLoading transitions from true to false, React unmounts and remounts LoadingButton, and the closure refreshes correctly — that's why the first attempt always works.

  • src/taxonomy/data/apiHooks.ts (useImportPlan) — the react-query cache key is built as taxonomyId + file.name + file.lastModified + file.size. If a later session uploads the same file, the key matches an already-cached entry, isLoading never transitions to true again, and LoadingButton never remounts. The click then keeps hitting the disabled=true value frozen from the earlier render, even though the button looks enabled (its visual state is updated separately, by a useEffect that does watch the current disabled/isLoading values).

  • src/index.jsx — the QueryClient is created once for the whole app, so the cache persists for the entire page session, which is why reloading the page fixes the behavior: it clears that cache.

Ngôn ngữ chính
Python
Star
10
Fork
33
Merge trung bình
2 ngày 9 giờ
Pull request đã merge (30 ngày)
9

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của openedx/openedx-core

Tất cả issue của openedx/openedx-core

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.