From e4867a2fecfe085e592f50571f0eef1dda120347 Mon Sep 17 00:00:00 2001
From: Dmitry Kuzin <dk981234@gmail.com>
Date: Thu, 20 Jun 2024 16:47:17 +0400
Subject: [PATCH] Fix afterRerender sometimes throws error

---
 src/base.ts        |  2 +-
 tests/basetests.ts | 15 +++++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/base.ts b/src/base.ts
index 5cda981c1b..061ad8ac9d 100644
--- a/src/base.ts
+++ b/src/base.ts
@@ -1172,7 +1172,7 @@ export class Base {
     return this.supportOnElementRenderedEvent && this.onElementRenderedEventEnabled ? this._onElementRerendered : undefined;
   }
   public afterRerender(): void {
-    this.onElementRerendered.fire(this, undefined);
+    this.onElementRerendered?.fire(this, undefined);
   }
 }
 
diff --git a/tests/basetests.ts b/tests/basetests.ts
index 3f867e2e30..7771926556 100644
--- a/tests/basetests.ts
+++ b/tests/basetests.ts
@@ -816,3 +816,18 @@ QUnit.test("check animationAllowed", function (assert) {
   assert.ok(question.animationAllowed);
   settings.animationEnabled = false;
 });
+
+QUnit.test("check afterRerender function", (assert) => {
+  const survey = new SurveyModel({});
+  assert.notOk(!!survey.onElementRerendered);
+  survey.afterRerender();
+  survey.enableOnElementRenderedEvent();
+  let log = "";
+  survey.onElementRerendered.add(() => log += "->callback");
+  survey.afterRerender();
+  assert.equal(log, "->callback");
+  log = "";
+  survey.disableOnElementRenderedEvent();
+  survey.afterRerender();
+  assert.equal(log, "");
+});
\ No newline at end of file