@ixo/editor 3.0.0-beta.16 → 3.0.0-beta.17

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.
@@ -16,7 +16,7 @@ import {
16
16
  isActorAuthorized,
17
17
  parseLinkedEntities,
18
18
  transformSurveyToCredentialSubject
19
- } from "./chunk-UHF7YDII.mjs";
19
+ } from "./chunk-MB36TYBB.mjs";
20
20
 
21
21
  // src/mantine/hooks/useCreateIxoEditor.ts
22
22
  import { useCreateBlockNote } from "@blocknote/react";
@@ -25638,8 +25638,13 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
25638
25638
  const [evaluationLoading, setEvaluationLoading] = useState99(false);
25639
25639
  const [evaluationResult, setEvaluationResult] = useState99(null);
25640
25640
  const [activeFilter, setActiveFilter] = useState99("all");
25641
+ const [outcomeTemplateJson, setOutcomeTemplateJson] = useState99(null);
25642
+ const [outcomeTemplateLoading, setOutcomeTemplateLoading] = useState99(false);
25643
+ const [outcomeResponses, setOutcomeResponses] = useState99({});
25644
+ const [outcomeComplete, setOutcomeComplete] = useState99(false);
25641
25645
  const [submissionOpen, setSubmissionOpen] = useState99(false);
25642
25646
  const [aiEvalOpen, setAiEvalOpen] = useState99(false);
25647
+ const [outcomeOpen, setOutcomeOpen] = useState99(true);
25643
25648
  const [evaluationOpen, setEvaluationOpen] = useState99(true);
25644
25649
  const [isEvaluatorAuthorized, setIsEvaluatorAuthorized] = useState99(false);
25645
25650
  const [authChecking, setAuthChecking] = useState99(true);
@@ -25662,6 +25667,21 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
25662
25667
  model.data = claimData;
25663
25668
  return model;
25664
25669
  }, [surveyJson, claimData]);
25670
+ const outcomeSurveyModel = useMemo96(() => {
25671
+ if (!outcomeTemplateJson) return null;
25672
+ const model = new SurveyModel11(outcomeTemplateJson);
25673
+ model.applyTheme(surveyTheme2);
25674
+ model.showQuestionNumbers = "off";
25675
+ model.questionsOnPageMode = "singlePage";
25676
+ model.onValueChanged.add((sender) => {
25677
+ setOutcomeResponses({ ...sender.data });
25678
+ });
25679
+ model.onComplete.add((sender) => {
25680
+ setOutcomeResponses({ ...sender.data });
25681
+ setOutcomeComplete(true);
25682
+ });
25683
+ return model;
25684
+ }, [outcomeTemplateJson]);
25665
25685
  const refreshClaims = useCallback79(async () => {
25666
25686
  if (!deedDid || !collectionId) return;
25667
25687
  setLoadingClaims(true);
@@ -25694,6 +25714,17 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
25694
25714
  setClaimData(claimDataResult || null);
25695
25715
  const surveyResult = await handlers.getDeedSurveyTemplate(deedDid);
25696
25716
  setSurveyJson(surveyResult?.surveyTemplate || null);
25717
+ if (handlers.getEvaluationTemplate) {
25718
+ setOutcomeTemplateLoading(true);
25719
+ try {
25720
+ const evalTemplateResult = await handlers.getEvaluationTemplate(deedDid);
25721
+ setOutcomeTemplateJson(evalTemplateResult?.surveyTemplate || null);
25722
+ } catch {
25723
+ setOutcomeTemplateJson(null);
25724
+ } finally {
25725
+ setOutcomeTemplateLoading(false);
25726
+ }
25727
+ }
25697
25728
  if (handlers.getDeedRubric && handlers.evaluateWithRubric && claimDataResult) {
25698
25729
  setEvaluationLoading(true);
25699
25730
  try {
@@ -25734,6 +25765,9 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
25734
25765
  setClaimData(null);
25735
25766
  setSurveyJson(null);
25736
25767
  setEvaluationResult(null);
25768
+ setOutcomeTemplateJson(null);
25769
+ setOutcomeResponses({});
25770
+ setOutcomeComplete(false);
25737
25771
  }, [deedDid, collectionId]);
25738
25772
  useEffect82(() => {
25739
25773
  if (!deedDid || !collectionId) return;
@@ -25827,14 +25861,18 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
25827
25861
  }
25828
25862
  setSubmissionOpen(false);
25829
25863
  setAiEvalOpen(false);
25864
+ setOutcomeOpen(true);
25830
25865
  setEvaluationOpen(true);
25831
25866
  setPaymentRows([createPaymentRow2()]);
25867
+ setOutcomeResponses({});
25868
+ setOutcomeComplete(false);
25832
25869
  loadClaimDetail(selectedClaim);
25833
25870
  }, [selectedClaim, loadClaimDetail]);
25834
25871
  const isClaimAlreadyEvaluated = useMemo96(() => {
25835
25872
  if (!selectedClaim) return false;
25836
25873
  return isClaimEvaluated(selectedClaim);
25837
25874
  }, [selectedClaim]);
25875
+ const outcomeNotReady = Boolean(outcomeTemplateJson && !outcomeComplete);
25838
25876
  const addPaymentRow = useCallback79(() => {
25839
25877
  setPaymentRows((prev) => [...prev, createPaymentRow2()]);
25840
25878
  }, []);
@@ -25901,6 +25939,7 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
25901
25939
  capabilityCid: capabilityId,
25902
25940
  rubricAuthority: deedDid,
25903
25941
  rubricId: deedDid,
25942
+ patch: Object.keys(outcomeResponses).length > 0 ? outcomeResponses : void 0,
25904
25943
  traceCid: evaluationResult?.trace?.result?.executionId,
25905
25944
  items: evaluationResult?.trace?.result?.steps?.map((step) => ({
25906
25945
  id: step.stepId,
@@ -25974,7 +26013,8 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
25974
26013
  updateRuntime,
25975
26014
  refreshClaims,
25976
26015
  buildPaymentCoins,
25977
- evaluationResult
26016
+ evaluationResult,
26017
+ outcomeResponses
25978
26018
  ]
25979
26019
  );
25980
26020
  if (selectedClaim) {
@@ -26025,6 +26065,17 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
26025
26065
  },
26026
26066
  /* @__PURE__ */ React246.createElement(UnstyledButton4, { onClick: () => setAiEvalOpen((v) => !v), style: { width: "100%" } }, /* @__PURE__ */ React246.createElement(Group93, { gap: "xs", align: "center" }, aiEvalOpen ? /* @__PURE__ */ React246.createElement(IconChevronDown10, { size: 16 }) : /* @__PURE__ */ React246.createElement(IconChevronRight13, { size: 16 }), /* @__PURE__ */ React246.createElement(Text140, { fw: 500, size: "sm" }, "AI Evaluation"))),
26027
26067
  /* @__PURE__ */ React246.createElement(Collapse10, { in: aiEvalOpen }, /* @__PURE__ */ React246.createElement(Box48, { mt: "sm" }, evaluationLoading ? /* @__PURE__ */ React246.createElement(Group93, { gap: "xs" }, /* @__PURE__ */ React246.createElement(Loader42, { size: "xs" }), /* @__PURE__ */ React246.createElement(Text140, { size: "xs", c: "dimmed" }, "Running rubric evaluation...")) : evaluationResult ? /* @__PURE__ */ React246.createElement(ScrollArea8, { h: 280 }, /* @__PURE__ */ React246.createElement(RubricEvaluationResults, { evaluation: evaluationResult })) : /* @__PURE__ */ React246.createElement(Text140, { size: "xs", c: "dimmed" }, "No rubric evaluation available for this claim.")))
26068
+ ), (outcomeTemplateLoading || outcomeTemplateJson) && /* @__PURE__ */ React246.createElement(
26069
+ Box48,
26070
+ {
26071
+ p: "sm",
26072
+ style: {
26073
+ borderRadius: 16,
26074
+ background: "var(--mantine-color-neutralColor-5)"
26075
+ }
26076
+ },
26077
+ /* @__PURE__ */ React246.createElement(UnstyledButton4, { onClick: () => setOutcomeOpen((v) => !v), style: { width: "100%" } }, /* @__PURE__ */ React246.createElement(Group93, { gap: "xs", align: "center" }, outcomeOpen ? /* @__PURE__ */ React246.createElement(IconChevronDown10, { size: 16 }) : /* @__PURE__ */ React246.createElement(IconChevronRight13, { size: 16 }), /* @__PURE__ */ React246.createElement(Text140, { fw: 500, size: "sm" }, "Outcome"), outcomeTemplateJson && !outcomeComplete && /* @__PURE__ */ React246.createElement(Text140, { size: "xs", c: "yellow" }, "(required)"), outcomeComplete && /* @__PURE__ */ React246.createElement(IconCheck19, { size: 14, color: "var(--mantine-color-green-6)" }))),
26078
+ /* @__PURE__ */ React246.createElement(Collapse10, { in: outcomeOpen }, /* @__PURE__ */ React246.createElement(Box48, { mt: "sm" }, outcomeTemplateLoading ? /* @__PURE__ */ React246.createElement(Group93, { gap: "xs" }, /* @__PURE__ */ React246.createElement(Loader42, { size: "xs" }), /* @__PURE__ */ React246.createElement(Text140, { size: "xs", c: "dimmed" }, "Loading evaluation template...")) : outcomeSurveyModel ? /* @__PURE__ */ React246.createElement(ScrollArea8, { h: 320 }, /* @__PURE__ */ React246.createElement(Survey11, { model: outcomeSurveyModel })) : /* @__PURE__ */ React246.createElement(Text140, { size: "xs", c: "dimmed" }, "No evaluation template available.")))
26028
26079
  ), /* @__PURE__ */ React246.createElement(
26029
26080
  Box48,
26030
26081
  {
@@ -26066,12 +26117,12 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
26066
26117
  disabled: isDisabled || submitting
26067
26118
  }
26068
26119
  ))), /* @__PURE__ */ React246.createElement(Button43, { variant: "light", size: "xs", onClick: addPaymentRow, disabled: isDisabled || submitting }, "Add Payment"), /* @__PURE__ */ React246.createElement(Checkbox12, { label: "Generate UDID proof before evaluation", checked: createUdid, onChange: (event) => setCreateUdid(event.currentTarget.checked) })))
26069
- ), isClaimAlreadyEvaluated && /* @__PURE__ */ React246.createElement(Alert43, { color: "yellow", styles: actionAlertStyles }, "This claim is already evaluated. Re-evaluation is disabled."), !authChecking && !isEvaluatorAuthorized && /* @__PURE__ */ React246.createElement(Alert43, { color: "yellow", styles: actionAlertStyles }, "You need evaluator authorization for this collection to approve or reject claims."), /* @__PURE__ */ React246.createElement(Group93, { gap: "xs" }, /* @__PURE__ */ React246.createElement(
26120
+ ), outcomeNotReady && /* @__PURE__ */ React246.createElement(Alert43, { color: "yellow", styles: actionAlertStyles }, "Complete the Outcome evaluation template before approving or rejecting."), isClaimAlreadyEvaluated && /* @__PURE__ */ React246.createElement(Alert43, { color: "yellow", styles: actionAlertStyles }, "This claim is already evaluated. Re-evaluation is disabled."), !authChecking && !isEvaluatorAuthorized && /* @__PURE__ */ React246.createElement(Alert43, { color: "yellow", styles: actionAlertStyles }, "You need evaluator authorization for this collection to approve or reject claims."), /* @__PURE__ */ React246.createElement(Group93, { gap: "xs" }, /* @__PURE__ */ React246.createElement(
26070
26121
  BasePrimaryButton,
26071
26122
  {
26072
26123
  leftSection: /* @__PURE__ */ React246.createElement(IconThumbUp4, { size: 16 }),
26073
26124
  onClick: () => executeEvaluation("approve"),
26074
- disabled: isDisabled || submitting || authChecking || !isEvaluatorAuthorized || !adminAddress || isClaimAlreadyEvaluated
26125
+ disabled: isDisabled || submitting || authChecking || !isEvaluatorAuthorized || !adminAddress || isClaimAlreadyEvaluated || outcomeNotReady
26075
26126
  },
26076
26127
  "Approve"
26077
26128
  ), /* @__PURE__ */ React246.createElement(
@@ -26079,7 +26130,7 @@ var EvaluateClaimFlowDetail = ({ inputs, editor, block, runtime, updateRuntime,
26079
26130
  {
26080
26131
  leftSection: /* @__PURE__ */ React246.createElement(IconThumbDown2, { size: 16 }),
26081
26132
  onClick: () => executeEvaluation("reject"),
26082
- disabled: isDisabled || submitting || authChecking || !isEvaluatorAuthorized || !adminAddress || isClaimAlreadyEvaluated
26133
+ disabled: isDisabled || submitting || authChecking || !isEvaluatorAuthorized || !adminAddress || isClaimAlreadyEvaluated || outcomeNotReady
26083
26134
  },
26084
26135
  "Reject"
26085
26136
  )), error && /* @__PURE__ */ React246.createElement(Alert43, { color: "red", styles: actionAlertStyles }, error));
@@ -32366,4 +32417,4 @@ export {
32366
32417
  getExtraSlashMenuItems,
32367
32418
  useCreateIxoEditor
32368
32419
  };
32369
- //# sourceMappingURL=chunk-5GSAEIOW.mjs.map
32420
+ //# sourceMappingURL=chunk-5KCGR3WU.mjs.map