This is an automated email from the ASF dual-hosted git repository.

zqr10159 pushed a commit to branch 2.0.0
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git

commit 43b8d665f307af5f86490d7c850533fe7266733d
Author: Logic <[email protected]>
AuthorDate: Fri May 29 15:52:23 2026 +0800

    fix(web-next): align alert setting import lifecycle
---
 web-next/app/alert/setting/alert-setting-page.tsx |  7 +++++++
 web-next/app/alert/setting/page.test.tsx          | 13 +++++++++++++
 web-next/app/ui-lab/page.test.tsx                 |  6 ++++++
 web-next/app/ui-lab/page.tsx                      |  7 +++++++
 4 files changed, 33 insertions(+)

diff --git a/web-next/app/alert/setting/alert-setting-page.tsx 
b/web-next/app/alert/setting/alert-setting-page.tsx
index 9f98ef86a4..cc144b59b8 100644
--- a/web-next/app/alert/setting/alert-setting-page.tsx
+++ b/web-next/app/alert/setting/alert-setting-page.tsx
@@ -323,6 +323,7 @@ export default function AlertSettingPage({ 
initialRouteState }: { initialRouteSt
   }
 
   function handleImportClick() {
+    if (pendingActionId) return;
     importInputRef.current?.click();
   }
 
@@ -330,6 +331,7 @@ export default function AlertSettingPage({ 
initialRouteState }: { initialRouteSt
     const file = event.target.files?.[0];
     event.target.value = '';
     if (!file) return;
+    if (pendingActionId) return;
     await runSettingAction(
       'import',
       t('common.notify.import-submitted', { taskName: file.name }),
@@ -424,8 +426,13 @@ export default function AlertSettingPage({ 
initialRouteState }: { initialRouteSt
             <HzFileInput
               ref={importInputRef}
               aria-label={t('alert.setting.import.input')}
+              multiple={false}
               data-alert-setting-import-input-owner="hertzbeat-ui-file-input"
               data-alert-setting-import-file-input="true"
+              
data-alert-setting-import-upload-contract="angular-nz-upload-limit-one-no-list"
+              data-alert-setting-import-show-list="false"
+              
data-alert-setting-import-refresh-contract="angular-success-refresh"
+              
data-alert-setting-import-failure-refresh-contract="angular-failure-no-refresh"
               onChange={event => void handleImportChange(event)}
             />
             <AlertSettingCreateDialog
diff --git a/web-next/app/alert/setting/page.test.tsx 
b/web-next/app/alert/setting/page.test.tsx
index 5aa3ccf9ca..f4974b2d04 100644
--- a/web-next/app/alert/setting/page.test.tsx
+++ b/web-next/app/alert/setting/page.test.tsx
@@ -322,6 +322,19 @@ describe('alert setting page', () => {
     expect(source).not.toContain("return 
t('common.notify.import-success-detail'");
   });
 
+  it('keeps threshold import upload lifecycle on the Angular single-file 
reload contract', () => {
+    const source = readFileSync(resolve(process.cwd(), 
'app/alert/setting/alert-setting-page.tsx'), 'utf8');
+
+    expect(source).toContain('if (pendingActionId) return;');
+    expect(source).toContain('multiple={false}');
+    
expect(source).toContain('data-alert-setting-import-upload-contract="angular-nz-upload-limit-one-no-list"');
+    expect(source).toContain('data-alert-setting-import-show-list="false"');
+    
expect(source).toContain('data-alert-setting-import-refresh-contract="angular-success-refresh"');
+    
expect(source).toContain('data-alert-setting-import-failure-refresh-contract="angular-failure-no-refresh"');
+    expect(source).toContain('setRefreshKey(value => value + 1)');
+    expect(source).not.toContain('multiple={true}');
+  });
+
   it('keeps threshold export success silent while mapping failures to the 
Angular notify title', () => {
     const source = readFileSync(resolve(process.cwd(), 
'app/alert/setting/alert-setting-page.tsx'), 'utf8');
 
diff --git a/web-next/app/ui-lab/page.test.tsx 
b/web-next/app/ui-lab/page.test.tsx
index 27435228ff..0297d90fcf 100644
--- a/web-next/app/ui-lab/page.test.tsx
+++ b/web-next/app/ui-lab/page.test.tsx
@@ -2963,6 +2963,9 @@ describe('HertzBeat UI lab page', () => {
     
expect(html).toContain('data-alert-setting-import-trigger-owner="hertzbeat-ui-batch-toolbar"');
     
expect(html).toContain('data-alert-setting-delete-trigger-owner="hertzbeat-ui-batch-toolbar"');
     
expect(html).toContain('data-hz-ui-lab-alert-setting-import-feedback="shared"');
+    
expect(html).toContain('data-hz-ui-lab-alert-setting-import-lifecycle="angular-success-refresh-failure-stays"');
+    
expect(html).toContain('data-alert-setting-import-refresh-contract="angular-success-refresh"');
+    
expect(html).toContain('data-alert-setting-import-failure-refresh-contract="angular-failure-no-refresh"');
     
expect(html).toContain('data-hz-ui-lab-alert-center-entity-batch="shared"');
     
expect(html).toContain('data-alert-center-entity-batch-owner="hertzbeat-ui-batch-toolbar"');
     
expect(html).toContain('data-alert-center-batch-toolbar="selected-entity-alerts"');
@@ -3052,7 +3055,10 @@ describe('HertzBeat UI lab page', () => {
     
expect(html).toContain('data-alert-setting-save-feedback-title="common.notify.edit-fail"');
     
expect(html).toContain('data-alert-setting-save-feedback-detail="backend-message"');
     
expect(html).toContain('data-hz-ui-lab-alert-setting-import-input="shared"');
+    
expect(html).toContain('data-hz-ui-lab-alert-setting-import-upload="angular-nz-upload-limit-one-no-list"');
     
expect(html).toContain('data-alert-setting-import-input-owner="hertzbeat-ui-file-input"');
+    
expect(html).toContain('data-alert-setting-import-upload-contract="angular-nz-upload-limit-one-no-list"');
+    expect(html).toContain('data-alert-setting-import-show-list="false"');
     expect(html).toContain('Import [alert-defines.json] submitted');
     
expect(html).toContain('data-hz-ui-lab-alert-setting-import-success="angular-import-success-notification"');
     
expect(html).toContain('data-alert-setting-import-success-owner="hertzbeat-ui-inline-feedback"');
diff --git a/web-next/app/ui-lab/page.tsx b/web-next/app/ui-lab/page.tsx
index fc01c95888..f49f175e4c 100644
--- a/web-next/app/ui-lab/page.tsx
+++ b/web-next/app/ui-lab/page.tsx
@@ -8216,6 +8216,9 @@ export default function HertzBeatUiLabPage() {
             meta="Preparing threshold import"
             variant="embedded"
             data-hz-ui-lab-alert-setting-import-feedback="shared"
+            
data-hz-ui-lab-alert-setting-import-lifecycle="angular-success-refresh-failure-stays"
+            
data-alert-setting-import-refresh-contract="angular-success-refresh"
+            
data-alert-setting-import-failure-refresh-contract="angular-failure-no-refresh"
             
data-alert-setting-action-feedback-owner="hertzbeat-ui-inline-feedback"
           />
           <HzInlineFeedback
@@ -8311,8 +8314,12 @@ export default function HertzBeatUiLabPage() {
           />
           <HzFileInput
             aria-label="Import threshold rules file"
+            multiple={false}
             data-hz-ui-lab-alert-setting-import-input="shared"
+            
data-hz-ui-lab-alert-setting-import-upload="angular-nz-upload-limit-one-no-list"
             data-alert-setting-import-input-owner="hertzbeat-ui-file-input"
+            
data-alert-setting-import-upload-contract="angular-nz-upload-limit-one-no-list"
+            data-alert-setting-import-show-list="false"
           />
           <HzExportTypeDialog
             open={alertSettingExportDialogOpen}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to