eat-js-sdk 2.0.43 → 2.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5862,7 +5862,7 @@ function FeedbackAlert($$anchor, $$props) {
5862
5862
  }
5863
5863
  };
5864
5864
  if_block(node_1, ($$render) => {
5865
- if (showIcon() && type() !== "skipped") $$render(consequent);
5865
+ if (showIcon()) $$render(consequent);
5866
5866
  });
5867
5867
  }
5868
5868
  var div_1 = sibling(node_1, 2);
@@ -5893,7 +5893,7 @@ function FeedbackAlert($$anchor, $$props) {
5893
5893
  append($$anchor2, div);
5894
5894
  };
5895
5895
  if_block(node, ($$render) => {
5896
- if (message()) $$render(consequent_2);
5896
+ if (message() && type() !== "skipped") $$render(consequent_2);
5897
5897
  });
5898
5898
  }
5899
5899
  append($$anchor, fragment);
@@ -11717,6 +11717,138 @@ const useFilterUniqueObject = (data, identifier = "id") => {
11717
11717
  const uniqueMap = new Map(data.map((obj) => [obj[identifier], obj]));
11718
11718
  return Array.from(uniqueMap.values());
11719
11719
  };
11720
+ const stripStatus = (itemId) => {
11721
+ return itemId.includes(CATEGORISE.DASH) ? itemId.split(CATEGORISE.DASH)[0] : itemId;
11722
+ };
11723
+ function useCategoriseFeedback(interactionState, config, api) {
11724
+ const totalRemainingItems = interactionState.data.wordBinItems.filter((id) => {
11725
+ const status = id.split(CATEGORISE.DASH)[1];
11726
+ return status !== "missed";
11727
+ }).length;
11728
+ let isFeedbackShown = false;
11729
+ let allAnswersCorrect = false;
11730
+ let isItemSkipped = false;
11731
+ let resultFeedback = "";
11732
+ if (config.isFinished && config.mode !== "preview") {
11733
+ const { answerList } = config.scoringMetadata || {};
11734
+ if (!answerList) {
11735
+ return {
11736
+ isFeedbackShown,
11737
+ allAnswersCorrect,
11738
+ isItemSkipped,
11739
+ resultFeedback
11740
+ };
11741
+ }
11742
+ const { correct: correctFeedback, incorrect: incorrectFeedback } = config.feedback || {};
11743
+ let hasIncorrect = false;
11744
+ let hasCorrect = false;
11745
+ const hasWordBinItems = totalRemainingItems > 0;
11746
+ config.category_groups.forEach((category) => {
11747
+ const categoryAnswerList = answerList[category.id] || [];
11748
+ const categoryItems = api.getCategoryItems(interactionState, category.id);
11749
+ categoryItems.forEach((item) => {
11750
+ const itemIdNoStatus = stripStatus(item);
11751
+ if (categoryAnswerList.includes(itemIdNoStatus)) {
11752
+ hasCorrect = true;
11753
+ } else {
11754
+ hasIncorrect = true;
11755
+ }
11756
+ });
11757
+ });
11758
+ allAnswersCorrect = hasCorrect && !hasIncorrect && !hasWordBinItems;
11759
+ isItemSkipped = totalRemainingItems === config.totalCategoryItems;
11760
+ resultFeedback = allAnswersCorrect ? correctFeedback : incorrectFeedback;
11761
+ isFeedbackShown = !allAnswersCorrect;
11762
+ } else if (config.mode === "interactive") {
11763
+ const allItemsPlaced = totalRemainingItems === 0;
11764
+ if (allItemsPlaced) {
11765
+ const { answerList } = config.scoringMetadata || {};
11766
+ if (answerList) {
11767
+ let hasIncorrect = false;
11768
+ let hasCorrect = false;
11769
+ config.category_groups.forEach((category) => {
11770
+ const categoryAnswerList = answerList[category.id] || [];
11771
+ const categoryItems = api.getCategoryItems(interactionState, category.id);
11772
+ categoryItems.forEach((item) => {
11773
+ const itemIdNoStatus = stripStatus(item);
11774
+ if (categoryAnswerList.includes(itemIdNoStatus)) {
11775
+ hasCorrect = true;
11776
+ } else {
11777
+ hasIncorrect = true;
11778
+ }
11779
+ });
11780
+ });
11781
+ allAnswersCorrect = hasCorrect && !hasIncorrect;
11782
+ resultFeedback = allAnswersCorrect ? config.feedback?.correct : config.feedback?.incorrect;
11783
+ isFeedbackShown = true;
11784
+ }
11785
+ } else {
11786
+ isFeedbackShown = false;
11787
+ }
11788
+ } else {
11789
+ isFeedbackShown = false;
11790
+ }
11791
+ return {
11792
+ isFeedbackShown,
11793
+ allAnswersCorrect,
11794
+ isItemSkipped,
11795
+ resultFeedback
11796
+ };
11797
+ }
11798
+ function CategoriseFeedback($$anchor, $$props) {
11799
+ push($$props, true);
11800
+ let feedbackState = prop($$props, "feedbackState", 7), isInteractiveMode2 = prop($$props, "isInteractiveMode", 7, false);
11801
+ const feedbackType = /* @__PURE__ */ user_derived(() => {
11802
+ if (feedbackState().isItemSkipped) return "skipped";
11803
+ if (feedbackState().allAnswersCorrect) return "correct";
11804
+ return "incorrect";
11805
+ });
11806
+ var $$exports = {
11807
+ get feedbackState() {
11808
+ return feedbackState();
11809
+ },
11810
+ set feedbackState($$value) {
11811
+ feedbackState($$value);
11812
+ flushSync();
11813
+ },
11814
+ get isInteractiveMode() {
11815
+ return isInteractiveMode2();
11816
+ },
11817
+ set isInteractiveMode($$value = false) {
11818
+ isInteractiveMode2($$value);
11819
+ flushSync();
11820
+ }
11821
+ };
11822
+ var fragment = comment();
11823
+ var node = first_child(fragment);
11824
+ {
11825
+ var consequent = ($$anchor2) => {
11826
+ {
11827
+ let $0 = /* @__PURE__ */ user_derived(() => !isInteractiveMode2());
11828
+ FeedbackAlert($$anchor2, {
11829
+ get type() {
11830
+ return get$1(feedbackType);
11831
+ },
11832
+ get message() {
11833
+ return feedbackState().resultFeedback;
11834
+ },
11835
+ showIcon: true,
11836
+ get isAlert() {
11837
+ return get$1($0);
11838
+ },
11839
+ iconProps: "h-6 w-6 flex items-center pt-0.5 mr-2",
11840
+ iconType: "info"
11841
+ });
11842
+ }
11843
+ };
11844
+ if_block(node, ($$render) => {
11845
+ if (feedbackState().isFeedbackShown) $$render(consequent);
11846
+ });
11847
+ }
11848
+ append($$anchor, fragment);
11849
+ return pop($$exports);
11850
+ }
11851
+ create_custom_element(CategoriseFeedback, { feedbackState: {}, isInteractiveMode: {} }, [], [], true);
11720
11852
  function ownKeys(object, enumerableOnly) {
11721
11853
  var keys = Object.keys(object);
11722
11854
  if (Object.getOwnPropertySymbols) {
@@ -15452,71 +15584,7 @@ function CategoriseComponent($$anchor, $$props) {
15452
15584
  return status !== "missed";
15453
15585
  }).length);
15454
15586
  const totalPlacedItems = /* @__PURE__ */ user_derived(() => config().totalCategoryItems - get$1(totalRemainingItems));
15455
- let isFeedbackShown = /* @__PURE__ */ state(false);
15456
- let allAnswersCorrect = /* @__PURE__ */ state(false);
15457
- let isItemSkipped = /* @__PURE__ */ state(false);
15458
- let resultFeedback = /* @__PURE__ */ state("");
15459
- const stripStatus = (itemId) => {
15460
- return itemId.includes(CATEGORISE.DASH) ? itemId.split(CATEGORISE.DASH)[0] : itemId;
15461
- };
15462
- user_effect(() => {
15463
- if (config().isFinished && config().mode !== "preview") {
15464
- const { answerList } = config().scoringMetadata || {};
15465
- if (!answerList) return;
15466
- const { correct: correctFeedback, incorrect: incorrectFeedback } = config().feedback || {};
15467
- let hasIncorrect = false;
15468
- let hasCorrect = false;
15469
- const hasWordBinItems = get$1(totalRemainingItems) > 0;
15470
- config().category_groups.forEach((category) => {
15471
- const categoryAnswerList = answerList[category.id] || [];
15472
- const categoryItems = api().getCategoryItems(get$1(interactionState), category.id);
15473
- categoryItems.forEach((item) => {
15474
- const itemIdNoStatus = stripStatus(item);
15475
- if (categoryAnswerList.includes(itemIdNoStatus)) {
15476
- hasCorrect = true;
15477
- } else {
15478
- hasIncorrect = true;
15479
- }
15480
- });
15481
- });
15482
- set(allAnswersCorrect, hasCorrect && !hasIncorrect && !hasWordBinItems, true);
15483
- set(isItemSkipped, get$1(totalRemainingItems) === config().totalCategoryItems);
15484
- set(resultFeedback, get$1(allAnswersCorrect) ? correctFeedback : incorrectFeedback, true);
15485
- set(isFeedbackShown, !get$1(allAnswersCorrect));
15486
- } else if (config().mode === "interactive") {
15487
- const allItemsPlaced = get$1(totalRemainingItems) === 0;
15488
- if (allItemsPlaced) {
15489
- const { answerList } = config().scoringMetadata || {};
15490
- if (answerList) {
15491
- let hasIncorrect = false;
15492
- let hasCorrect = false;
15493
- config().category_groups.forEach((category) => {
15494
- const categoryAnswerList = answerList[category.id] || [];
15495
- const categoryItems = api().getCategoryItems(get$1(interactionState), category.id);
15496
- categoryItems.forEach((item) => {
15497
- const itemIdNoStatus = stripStatus(item);
15498
- if (categoryAnswerList.includes(itemIdNoStatus)) {
15499
- hasCorrect = true;
15500
- } else {
15501
- hasIncorrect = true;
15502
- }
15503
- });
15504
- });
15505
- set(allAnswersCorrect, hasCorrect && !hasIncorrect, true);
15506
- set(
15507
- resultFeedback,
15508
- get$1(allAnswersCorrect) ? config().feedback?.correct : config().feedback?.incorrect,
15509
- true
15510
- );
15511
- set(isFeedbackShown, true);
15512
- }
15513
- } else {
15514
- set(isFeedbackShown, false);
15515
- }
15516
- } else {
15517
- set(isFeedbackShown, false);
15518
- }
15519
- });
15587
+ const feedbackState = /* @__PURE__ */ user_derived(() => useCategoriseFeedback(get$1(interactionState), config(), api()));
15520
15588
  const dropContainerId = /* @__PURE__ */ user_derived(() => get$1(interactionState).data.dropContainerId);
15521
15589
  const hasAddItemAnimation = /* @__PURE__ */ user_derived(() => get$1(interactionState).data.hasAddItemAnimation);
15522
15590
  const wordBinItems = /* @__PURE__ */ user_derived(() => get$1(interactionState).data.wordBinItems.map((id) => ({
@@ -15673,6 +15741,8 @@ function CategoriseComponent($$anchor, $$props) {
15673
15741
  }
15674
15742
  }
15675
15743
  }
15744
+ } else {
15745
+ set(dragSourceContainerId, null);
15676
15746
  }
15677
15747
  });
15678
15748
  user_effect(() => {
@@ -15889,6 +15959,7 @@ function CategoriseComponent($$anchor, $$props) {
15889
15959
  set(interactionState, api().reset(get$1(interactionState)), true);
15890
15960
  dispatchStateChange();
15891
15961
  set(currentMobileIndex, 0);
15962
+ set(dragSourceContainerId, null);
15892
15963
  set(isModalOpen, false);
15893
15964
  };
15894
15965
  var $$exports = {
@@ -16128,34 +16199,17 @@ function CategoriseComponent($$anchor, $$props) {
16128
16199
  append($$anchor2, fragment_1);
16129
16200
  };
16130
16201
  const feedback = ($$anchor2) => {
16131
- var fragment_4 = comment();
16132
- var node_7 = first_child(fragment_4);
16133
16202
  {
16134
- var consequent_1 = ($$anchor3) => {
16135
- {
16136
- let $02 = /* @__PURE__ */ user_derived(() => get$1(allAnswersCorrect) ? "correct" : get$1(isItemSkipped) ? "skipped" : "incorrect");
16137
- let $12 = /* @__PURE__ */ user_derived(() => config().mode !== "interactive");
16138
- FeedbackAlert($$anchor3, {
16139
- get type() {
16140
- return get$1($02);
16141
- },
16142
- get message() {
16143
- return get$1(resultFeedback);
16144
- },
16145
- showIcon: true,
16146
- get isAlert() {
16147
- return get$1($12);
16148
- },
16149
- iconProps: "h-6 w-6 flex items-center pt-0.5 mr-2",
16150
- iconType: "info"
16151
- });
16203
+ let $02 = /* @__PURE__ */ user_derived(() => config().mode === "interactive");
16204
+ CategoriseFeedback($$anchor2, {
16205
+ get feedbackState() {
16206
+ return get$1(feedbackState);
16207
+ },
16208
+ get isInteractiveMode() {
16209
+ return get$1($02);
16152
16210
  }
16153
- };
16154
- if_block(node_7, ($$render) => {
16155
- if (get$1(isFeedbackShown)) $$render(consequent_1);
16156
16211
  });
16157
16212
  }
16158
- append($$anchor2, fragment_4);
16159
16213
  };
16160
16214
  let $0 = /* @__PURE__ */ user_derived(() => config().rubric?.text || "");
16161
16215
  let $1 = /* @__PURE__ */ user_derived(() => config().prompt || "");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eat-js-sdk",
3
- "version": "2.0.43",
3
+ "version": "2.0.44",
4
4
  "change version": "2.0.0",
5
5
  "description": "Authoring tool frontend SDK",
6
6
  "contributors": [