@lv-x-software-house/x_view 1.2.5-dev.33 → 1.2.5-dev.35

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.
package/dist/index.js CHANGED
@@ -8843,7 +8843,6 @@ function InSceneQuestForm({
8843
8843
  }
8844
8844
  };
8845
8845
  const handleSubmit = (e) => {
8846
- var _a2, _b2, _c, _d;
8847
8846
  e.preventDefault();
8848
8847
  if (!name.trim()) {
8849
8848
  alert("O campo 'T\xEDtulo' \xE9 obrigat\xF3rio.");
@@ -8853,21 +8852,7 @@ function InSceneQuestForm({
8853
8852
  customProps.filter((prop) => prop.key.trim() && !prop.isEditing)
8854
8853
  );
8855
8854
  const processedSections = processDescriptionForSave(description, []);
8856
- const initialTimeline = [
8857
- createTimelineEntry(
8858
- ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
8859
- `Quest criada por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`,
8860
- "quest_created"
8861
- )
8862
- ];
8863
- if (assigneeId) {
8864
- initialTimeline.push(createTimelineEntry(
8865
- ((_c = session == null ? void 0 : session.user) == null ? void 0 : _c.id) || "unknown",
8866
- `Quest atribu\xEDda para ${((_d = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _d.name) || "respons\xE1vel"}.`,
8867
- "assignee_changed",
8868
- { metadata: { to_assignee_id: assigneeId } }
8869
- ));
8870
- }
8855
+ const initialTimeline = [];
8871
8856
  onSave({
8872
8857
  name: standardizedName,
8873
8858
  // SALVA O NOME FORMATADO
@@ -9711,16 +9696,7 @@ var import_fi18 = require("react-icons/fi");
9711
9696
  // src/components/QuestTimeline.jsx
9712
9697
  var import_react19 = __toESM(require("react"));
9713
9698
  var import_fi17 = require("react-icons/fi");
9714
- var EVENT_ICONS = {
9715
- "quest_created": { icon: import_fi17.FiPlusCircle, color: "text-sky-400", bg: "bg-sky-400/10" },
9716
- "assignee_changed": { icon: import_fi17.FiUserPlus, color: "text-indigo-400", bg: "bg-indigo-400/10" },
9717
- "status_changed": { icon: import_fi17.FiRotateCcw, color: "text-amber-400", bg: "bg-amber-400/10" },
9718
- "review_cycle_started": { icon: import_fi17.FiSearch, color: "text-purple-400", bg: "bg-purple-400/10" },
9719
- "review_completed": { icon: import_fi17.FiCheckSquare, color: "text-emerald-400", bg: "bg-emerald-400/10" },
9720
- "comment": { icon: import_fi17.FiMessageSquare, color: "text-slate-400", bg: "bg-slate-400/10" },
9721
- "quest_finished": { icon: import_fi17.FiTarget, color: "text-green-400", bg: "bg-green-400/10" },
9722
- "default": { icon: import_fi17.FiGitCommit, color: "text-slate-500", bg: "bg-slate-500/10" }
9723
- };
9699
+ var DEFAULT_ICON_CONFIG = { icon: import_fi17.FiGitCommit, color: "text-indigo-400", bg: "bg-indigo-400/10" };
9724
9700
  function QuestTimeline({
9725
9701
  timeline = [],
9726
9702
  viewMembers = [],
@@ -9748,7 +9724,7 @@ function QuestTimeline({
9748
9724
  return /* @__PURE__ */ import_react19.default.createElement("div", { className: "py-6 flex flex-col items-center justify-center gap-2 border border-white/5 bg-white/5 rounded-xl" }, /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiAlertCircle, { className: "text-slate-600", size: 16 }), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[10px] text-slate-500 font-light uppercase tracking-widest" }, "Nenhum hist\xF3rico dispon\xEDvel"));
9749
9725
  }
9750
9726
  return /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider flex items-center gap-2" }, "Hist\xF3rico (Timeline)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative pl-10 space-y-6 before:content-[''] before:absolute before:left-[21px] before:top-2 before:bottom-2 before:w-[2px] before:bg-white/5" }, sortedTimeline.map((event, index) => {
9751
- const config = EVENT_ICONS[event.type] || EVENT_ICONS.default;
9727
+ const config = DEFAULT_ICON_CONFIG;
9752
9728
  const Icon = config.icon;
9753
9729
  const actorName = getMemberName(event.actorId);
9754
9730
  return /* @__PURE__ */ import_react19.default.createElement("div", { key: event.id || index, className: "relative animate-in fade-in slide-in-from-left-2 duration-300", style: { animationDelay: `${index * 50}ms` } }, /* @__PURE__ */ import_react19.default.createElement("div", { className: `absolute -left-[35px] top-0 w-8 h-8 rounded-full ${config.bg} flex items-center justify-center ring-4 ring-slate-950 border border-white/5` }, /* @__PURE__ */ import_react19.default.createElement(Icon, { className: config.iconColor || config.color, size: 14 })), /* @__PURE__ */ import_react19.default.createElement("div", { className: "group space-y-1" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-xs font-semibold text-slate-200" }, actorName), canEdit && onAddNote && /* @__PURE__ */ import_react19.default.createElement(
@@ -9941,12 +9917,12 @@ function QuestDetailsPanel({
9941
9917
  const actorName = (currentUser == null ? void 0 : currentUser.name) || "Revisor";
9942
9918
  const targetMember = viewMembers.find((m) => String(m.id) === String(returnAssigneeId));
9943
9919
  const targetName = (targetMember == null ? void 0 : targetMember.name) || "executor";
9944
- const newEvent = {
9945
- type: "review_returned",
9946
- timestamp: Date.now(),
9920
+ const newEvent = createTimelineEntry(
9947
9921
  actorId,
9948
- description: `Review finalizada com retorno para opera\xE7\xE3o por ${actorName}. Novo respons\xE1vel: ${targetName}.`
9949
- };
9922
+ `Status "In Progress" - Respons\xE1vel: ${targetName}`,
9923
+ "status_changed",
9924
+ { metadata: { to_assignee_id: returnAssigneeId } }
9925
+ );
9950
9926
  const updatedTimeline = [...timeline, newEvent];
9951
9927
  const updatedStatus = "In Progress";
9952
9928
  const updatedColor = "#eab308";
@@ -10059,8 +10035,19 @@ ${noteText}` : noteText : entry.notes,
10059
10035
  const handleStatusChange = (newStatus) => {
10060
10036
  setStatus(newStatus);
10061
10037
  const newColor = QUEST_STATUS_COLORS3[newStatus];
10038
+ const actorId = (currentUser == null ? void 0 : currentUser.id) || "unknown";
10039
+ const currentAssignee = viewMembers.find((m) => String(m.id) === String(assigneeId));
10040
+ const assigneeName = (currentAssignee == null ? void 0 : currentAssignee.name) || (currentAssignee == null ? void 0 : currentAssignee.email) || "Nenhum";
10041
+ const newEvent = createTimelineEntry(
10042
+ actorId,
10043
+ `Status "${newStatus}" - Respons\xE1vel: ${assigneeName}`,
10044
+ "status_changed",
10045
+ { metadata: { to_assignee_id: assigneeId } }
10046
+ );
10047
+ const newTimeline = [...timeline, newEvent];
10048
+ setTimeline(newTimeline);
10062
10049
  onColorChange == null ? void 0 : onColorChange(node.id, newColor);
10063
- onDataUpdate == null ? void 0 : onDataUpdate({ ...node, status: newStatus, color: newColor });
10050
+ onDataUpdate == null ? void 0 : onDataUpdate({ ...node, status: newStatus, color: newColor, timeline: newTimeline });
10064
10051
  setHasUnsavedChanges(true);
10065
10052
  };
10066
10053
  const handleAddType = (newType) => {
@@ -10281,13 +10268,11 @@ ${noteText}` : noteText : entry.notes,
10281
10268
  {
10282
10269
  onClick: () => {
10283
10270
  setAssigneeId("");
10284
- const newTimeline = [...timeline, {
10285
- type: "assignee_changed",
10286
- timestamp: Date.now(),
10287
- actorId: "user",
10288
- to_assignee_id: null,
10289
- description: `Respons\xE1vel removido.`
10290
- }];
10271
+ const newTimeline = [...timeline, createTimelineEntry(
10272
+ (currentUser == null ? void 0 : currentUser.id) || "unknown",
10273
+ `Status "${status}" - Respons\xE1vel: Nenhum`,
10274
+ "status_changed"
10275
+ )];
10291
10276
  setTimeline(newTimeline);
10292
10277
  setHasUnsavedChanges(true);
10293
10278
  setIsAssigneeDropdownOpen(false);
@@ -10315,13 +10300,11 @@ ${noteText}` : noteText : entry.notes,
10315
10300
  key: member.id,
10316
10301
  onClick: () => {
10317
10302
  setAssigneeId(member.id);
10318
- const newTimeline = [...timeline, {
10319
- type: "assignee_changed",
10320
- timestamp: Date.now(),
10321
- actorId: "user",
10322
- to_assignee_id: member.id,
10323
- description: `Quest atribu\xEDda para ${member.name || member.email}.`
10324
- }];
10303
+ const newTimeline = [...timeline, createTimelineEntry(
10304
+ (currentUser == null ? void 0 : currentUser.id) || "unknown",
10305
+ `Status "${status}" - Respons\xE1vel: ${member.name || member.email}`,
10306
+ "status_changed"
10307
+ )];
10325
10308
  setTimeline(newTimeline);
10326
10309
  setHasUnsavedChanges(true);
10327
10310
  setIsAssigneeDropdownOpen(false);
@@ -14026,7 +14009,7 @@ function XViewScene({
14026
14009
  } = questNode;
14027
14010
  const newTimeline = [...cleanQuestNode.timeline || [], createTimelineEntry(
14028
14011
  ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
14029
- `Quest iniciada ("In Progress") por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`,
14012
+ `Status "In Progress" - Respons\xE1vel: ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}`,
14030
14013
  "status_changed"
14031
14014
  )];
14032
14015
  const updatedNode = {
@@ -14042,7 +14025,7 @@ function XViewScene({
14042
14025
  setDetailsNode(updatedNode);
14043
14026
  }, [session, actionHandlerContext]);
14044
14027
  const handleFinishQuestQuick = (0, import_react28.useCallback)((questNode) => {
14045
- var _a2, _b2, _c2, _d2, _e2, _f2;
14028
+ var _a2, _b2, _c2, _d2;
14046
14029
  if (!questNode || !actionHandlerContext) return;
14047
14030
  const {
14048
14031
  labelObject,
@@ -14062,18 +14045,8 @@ function XViewScene({
14062
14045
  if (currentReviewerIdx !== -1 && reviewStack[currentReviewerIdx].userId === cleanQuestNode.assignee_id) {
14063
14046
  reviewStack[currentReviewerIdx].status = "completed";
14064
14047
  nextIdxToAssign = currentReviewerIdx + 1;
14065
- newTimeline.push(createTimelineEntry(
14066
- ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || cleanQuestNode.assignee_id,
14067
- `Review conclu\xEDda por ${((_b2 = viewMembers.find((m) => m.id === cleanQuestNode.assignee_id)) == null ? void 0 : _b2.name) || "revisor"}.`,
14068
- "review_completed"
14069
- ));
14070
14048
  } else {
14071
14049
  nextIdxToAssign = currentReviewerIdx !== -1 ? currentReviewerIdx : reviewStack.length;
14072
- newTimeline.push(createTimelineEntry(
14073
- ((_c2 = session == null ? void 0 : session.user) == null ? void 0 : _c2.id) || cleanQuestNode.assignee_id,
14074
- `Tarefa principal entregue por ${((_d2 = viewMembers.find((m) => m.id === cleanQuestNode.assignee_id)) == null ? void 0 : _d2.name) || ((_e2 = session == null ? void 0 : session.user) == null ? void 0 : _e2.name) || "respons\xE1vel"}.`,
14075
- "task_completed"
14076
- ));
14077
14050
  }
14078
14051
  if (nextIdxToAssign < reviewStack.length) {
14079
14052
  const remainingMandatory = reviewStack.slice(nextIdxToAssign).some((r) => r.mandatory);
@@ -14082,12 +14055,6 @@ function XViewScene({
14082
14055
  const nextReviewer = reviewStack[nextIdxToAssign];
14083
14056
  nextAssigneeId = nextReviewer.userId;
14084
14057
  nextStatus = "Review";
14085
- newTimeline.push(createTimelineEntry(
14086
- "system",
14087
- `Quest atribu\xEDda para revis\xE3o a ${((_f2 = viewMembers.find((m) => m.id === nextAssigneeId)) == null ? void 0 : _f2.name) || "revisor"}.`,
14088
- "assignee_changed",
14089
- { metadata: { to_assignee_id: nextAssigneeId } }
14090
- ));
14091
14058
  } else {
14092
14059
  nextStatus = "Done";
14093
14060
  for (let i = nextIdxToAssign; i < reviewStack.length; i++) {
@@ -14097,11 +14064,23 @@ function XViewScene({
14097
14064
  } else {
14098
14065
  nextStatus = "Done";
14099
14066
  }
14100
- if (nextStatus === "Done") {
14067
+ if (nextStatus === "Review") {
14068
+ const nextReviewerName = ((_a2 = viewMembers.find((m) => m.id === nextAssigneeId)) == null ? void 0 : _a2.name) || "revisor";
14101
14069
  newTimeline.push(createTimelineEntry(
14102
14070
  "system",
14103
- `Quest finalizada!`,
14104
- "quest_finished"
14071
+ `Status "Review" - Respons\xE1vel: ${nextReviewerName}`,
14072
+ "status_changed",
14073
+ { metadata: { to_assignee_id: nextAssigneeId } }
14074
+ ));
14075
+ } else if (nextStatus === "Done") {
14076
+ const finisherName = ((_b2 = viewMembers.find((m) => {
14077
+ var _a3;
14078
+ return m.id === (((_a3 = session == null ? void 0 : session.user) == null ? void 0 : _a3.id) || cleanQuestNode.assignee_id);
14079
+ })) == null ? void 0 : _b2.name) || ((_c2 = session == null ? void 0 : session.user) == null ? void 0 : _c2.name) || "respons\xE1vel";
14080
+ newTimeline.push(createTimelineEntry(
14081
+ ((_d2 = session == null ? void 0 : session.user) == null ? void 0 : _d2.id) || cleanQuestNode.assignee_id,
14082
+ `Status "Done" - Finalizado por ${finisherName}`,
14083
+ "status_changed"
14105
14084
  ));
14106
14085
  }
14107
14086
  const updatedNode = {
package/dist/index.mjs CHANGED
@@ -8860,7 +8860,6 @@ function InSceneQuestForm({
8860
8860
  }
8861
8861
  };
8862
8862
  const handleSubmit = (e) => {
8863
- var _a2, _b2, _c, _d;
8864
8863
  e.preventDefault();
8865
8864
  if (!name.trim()) {
8866
8865
  alert("O campo 'T\xEDtulo' \xE9 obrigat\xF3rio.");
@@ -8870,21 +8869,7 @@ function InSceneQuestForm({
8870
8869
  customProps.filter((prop) => prop.key.trim() && !prop.isEditing)
8871
8870
  );
8872
8871
  const processedSections = processDescriptionForSave(description, []);
8873
- const initialTimeline = [
8874
- createTimelineEntry(
8875
- ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
8876
- `Quest criada por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`,
8877
- "quest_created"
8878
- )
8879
- ];
8880
- if (assigneeId) {
8881
- initialTimeline.push(createTimelineEntry(
8882
- ((_c = session == null ? void 0 : session.user) == null ? void 0 : _c.id) || "unknown",
8883
- `Quest atribu\xEDda para ${((_d = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _d.name) || "respons\xE1vel"}.`,
8884
- "assignee_changed",
8885
- { metadata: { to_assignee_id: assigneeId } }
8886
- ));
8887
- }
8872
+ const initialTimeline = [];
8888
8873
  onSave({
8889
8874
  name: standardizedName,
8890
8875
  // SALVA O NOME FORMATADO
@@ -9740,16 +9725,7 @@ import {
9740
9725
  FiSearch as FiSearch6,
9741
9726
  FiLink as FiLink6
9742
9727
  } from "react-icons/fi";
9743
- var EVENT_ICONS = {
9744
- "quest_created": { icon: FiPlusCircle, color: "text-sky-400", bg: "bg-sky-400/10" },
9745
- "assignee_changed": { icon: FiUserPlus, color: "text-indigo-400", bg: "bg-indigo-400/10" },
9746
- "status_changed": { icon: FiRotateCcw, color: "text-amber-400", bg: "bg-amber-400/10" },
9747
- "review_cycle_started": { icon: FiSearch6, color: "text-purple-400", bg: "bg-purple-400/10" },
9748
- "review_completed": { icon: FiCheckSquare2, color: "text-emerald-400", bg: "bg-emerald-400/10" },
9749
- "comment": { icon: FiMessageSquare, color: "text-slate-400", bg: "bg-slate-400/10" },
9750
- "quest_finished": { icon: FiTarget2, color: "text-green-400", bg: "bg-green-400/10" },
9751
- "default": { icon: FiGitCommit, color: "text-slate-500", bg: "bg-slate-500/10" }
9752
- };
9728
+ var DEFAULT_ICON_CONFIG = { icon: FiGitCommit, color: "text-indigo-400", bg: "bg-indigo-400/10" };
9753
9729
  function QuestTimeline({
9754
9730
  timeline = [],
9755
9731
  viewMembers = [],
@@ -9777,7 +9753,7 @@ function QuestTimeline({
9777
9753
  return /* @__PURE__ */ React18.createElement("div", { className: "py-6 flex flex-col items-center justify-center gap-2 border border-white/5 bg-white/5 rounded-xl" }, /* @__PURE__ */ React18.createElement(FiAlertCircle, { className: "text-slate-600", size: 16 }), /* @__PURE__ */ React18.createElement("p", { className: "text-[10px] text-slate-500 font-light uppercase tracking-widest" }, "Nenhum hist\xF3rico dispon\xEDvel"));
9778
9754
  }
9779
9755
  return /* @__PURE__ */ React18.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider flex items-center gap-2" }, "Hist\xF3rico (Timeline)"), /* @__PURE__ */ React18.createElement("div", { className: "relative pl-10 space-y-6 before:content-[''] before:absolute before:left-[21px] before:top-2 before:bottom-2 before:w-[2px] before:bg-white/5" }, sortedTimeline.map((event, index) => {
9780
- const config = EVENT_ICONS[event.type] || EVENT_ICONS.default;
9756
+ const config = DEFAULT_ICON_CONFIG;
9781
9757
  const Icon = config.icon;
9782
9758
  const actorName = getMemberName(event.actorId);
9783
9759
  return /* @__PURE__ */ React18.createElement("div", { key: event.id || index, className: "relative animate-in fade-in slide-in-from-left-2 duration-300", style: { animationDelay: `${index * 50}ms` } }, /* @__PURE__ */ React18.createElement("div", { className: `absolute -left-[35px] top-0 w-8 h-8 rounded-full ${config.bg} flex items-center justify-center ring-4 ring-slate-950 border border-white/5` }, /* @__PURE__ */ React18.createElement(Icon, { className: config.iconColor || config.color, size: 14 })), /* @__PURE__ */ React18.createElement("div", { className: "group space-y-1" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React18.createElement("span", { className: "text-xs font-semibold text-slate-200" }, actorName), canEdit && onAddNote && /* @__PURE__ */ React18.createElement(
@@ -9970,12 +9946,12 @@ function QuestDetailsPanel({
9970
9946
  const actorName = (currentUser == null ? void 0 : currentUser.name) || "Revisor";
9971
9947
  const targetMember = viewMembers.find((m) => String(m.id) === String(returnAssigneeId));
9972
9948
  const targetName = (targetMember == null ? void 0 : targetMember.name) || "executor";
9973
- const newEvent = {
9974
- type: "review_returned",
9975
- timestamp: Date.now(),
9949
+ const newEvent = createTimelineEntry(
9976
9950
  actorId,
9977
- description: `Review finalizada com retorno para opera\xE7\xE3o por ${actorName}. Novo respons\xE1vel: ${targetName}.`
9978
- };
9951
+ `Status "In Progress" - Respons\xE1vel: ${targetName}`,
9952
+ "status_changed",
9953
+ { metadata: { to_assignee_id: returnAssigneeId } }
9954
+ );
9979
9955
  const updatedTimeline = [...timeline, newEvent];
9980
9956
  const updatedStatus = "In Progress";
9981
9957
  const updatedColor = "#eab308";
@@ -10088,8 +10064,19 @@ ${noteText}` : noteText : entry.notes,
10088
10064
  const handleStatusChange = (newStatus) => {
10089
10065
  setStatus(newStatus);
10090
10066
  const newColor = QUEST_STATUS_COLORS3[newStatus];
10067
+ const actorId = (currentUser == null ? void 0 : currentUser.id) || "unknown";
10068
+ const currentAssignee = viewMembers.find((m) => String(m.id) === String(assigneeId));
10069
+ const assigneeName = (currentAssignee == null ? void 0 : currentAssignee.name) || (currentAssignee == null ? void 0 : currentAssignee.email) || "Nenhum";
10070
+ const newEvent = createTimelineEntry(
10071
+ actorId,
10072
+ `Status "${newStatus}" - Respons\xE1vel: ${assigneeName}`,
10073
+ "status_changed",
10074
+ { metadata: { to_assignee_id: assigneeId } }
10075
+ );
10076
+ const newTimeline = [...timeline, newEvent];
10077
+ setTimeline(newTimeline);
10091
10078
  onColorChange == null ? void 0 : onColorChange(node.id, newColor);
10092
- onDataUpdate == null ? void 0 : onDataUpdate({ ...node, status: newStatus, color: newColor });
10079
+ onDataUpdate == null ? void 0 : onDataUpdate({ ...node, status: newStatus, color: newColor, timeline: newTimeline });
10093
10080
  setHasUnsavedChanges(true);
10094
10081
  };
10095
10082
  const handleAddType = (newType) => {
@@ -10310,13 +10297,11 @@ ${noteText}` : noteText : entry.notes,
10310
10297
  {
10311
10298
  onClick: () => {
10312
10299
  setAssigneeId("");
10313
- const newTimeline = [...timeline, {
10314
- type: "assignee_changed",
10315
- timestamp: Date.now(),
10316
- actorId: "user",
10317
- to_assignee_id: null,
10318
- description: `Respons\xE1vel removido.`
10319
- }];
10300
+ const newTimeline = [...timeline, createTimelineEntry(
10301
+ (currentUser == null ? void 0 : currentUser.id) || "unknown",
10302
+ `Status "${status}" - Respons\xE1vel: Nenhum`,
10303
+ "status_changed"
10304
+ )];
10320
10305
  setTimeline(newTimeline);
10321
10306
  setHasUnsavedChanges(true);
10322
10307
  setIsAssigneeDropdownOpen(false);
@@ -10344,13 +10329,11 @@ ${noteText}` : noteText : entry.notes,
10344
10329
  key: member.id,
10345
10330
  onClick: () => {
10346
10331
  setAssigneeId(member.id);
10347
- const newTimeline = [...timeline, {
10348
- type: "assignee_changed",
10349
- timestamp: Date.now(),
10350
- actorId: "user",
10351
- to_assignee_id: member.id,
10352
- description: `Quest atribu\xEDda para ${member.name || member.email}.`
10353
- }];
10332
+ const newTimeline = [...timeline, createTimelineEntry(
10333
+ (currentUser == null ? void 0 : currentUser.id) || "unknown",
10334
+ `Status "${status}" - Respons\xE1vel: ${member.name || member.email}`,
10335
+ "status_changed"
10336
+ )];
10354
10337
  setTimeline(newTimeline);
10355
10338
  setHasUnsavedChanges(true);
10356
10339
  setIsAssigneeDropdownOpen(false);
@@ -14068,7 +14051,7 @@ function XViewScene({
14068
14051
  } = questNode;
14069
14052
  const newTimeline = [...cleanQuestNode.timeline || [], createTimelineEntry(
14070
14053
  ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
14071
- `Quest iniciada ("In Progress") por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`,
14054
+ `Status "In Progress" - Respons\xE1vel: ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}`,
14072
14055
  "status_changed"
14073
14056
  )];
14074
14057
  const updatedNode = {
@@ -14084,7 +14067,7 @@ function XViewScene({
14084
14067
  setDetailsNode(updatedNode);
14085
14068
  }, [session, actionHandlerContext]);
14086
14069
  const handleFinishQuestQuick = useCallback4((questNode) => {
14087
- var _a2, _b2, _c2, _d2, _e2, _f2;
14070
+ var _a2, _b2, _c2, _d2;
14088
14071
  if (!questNode || !actionHandlerContext) return;
14089
14072
  const {
14090
14073
  labelObject,
@@ -14104,18 +14087,8 @@ function XViewScene({
14104
14087
  if (currentReviewerIdx !== -1 && reviewStack[currentReviewerIdx].userId === cleanQuestNode.assignee_id) {
14105
14088
  reviewStack[currentReviewerIdx].status = "completed";
14106
14089
  nextIdxToAssign = currentReviewerIdx + 1;
14107
- newTimeline.push(createTimelineEntry(
14108
- ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || cleanQuestNode.assignee_id,
14109
- `Review conclu\xEDda por ${((_b2 = viewMembers.find((m) => m.id === cleanQuestNode.assignee_id)) == null ? void 0 : _b2.name) || "revisor"}.`,
14110
- "review_completed"
14111
- ));
14112
14090
  } else {
14113
14091
  nextIdxToAssign = currentReviewerIdx !== -1 ? currentReviewerIdx : reviewStack.length;
14114
- newTimeline.push(createTimelineEntry(
14115
- ((_c2 = session == null ? void 0 : session.user) == null ? void 0 : _c2.id) || cleanQuestNode.assignee_id,
14116
- `Tarefa principal entregue por ${((_d2 = viewMembers.find((m) => m.id === cleanQuestNode.assignee_id)) == null ? void 0 : _d2.name) || ((_e2 = session == null ? void 0 : session.user) == null ? void 0 : _e2.name) || "respons\xE1vel"}.`,
14117
- "task_completed"
14118
- ));
14119
14092
  }
14120
14093
  if (nextIdxToAssign < reviewStack.length) {
14121
14094
  const remainingMandatory = reviewStack.slice(nextIdxToAssign).some((r) => r.mandatory);
@@ -14124,12 +14097,6 @@ function XViewScene({
14124
14097
  const nextReviewer = reviewStack[nextIdxToAssign];
14125
14098
  nextAssigneeId = nextReviewer.userId;
14126
14099
  nextStatus = "Review";
14127
- newTimeline.push(createTimelineEntry(
14128
- "system",
14129
- `Quest atribu\xEDda para revis\xE3o a ${((_f2 = viewMembers.find((m) => m.id === nextAssigneeId)) == null ? void 0 : _f2.name) || "revisor"}.`,
14130
- "assignee_changed",
14131
- { metadata: { to_assignee_id: nextAssigneeId } }
14132
- ));
14133
14100
  } else {
14134
14101
  nextStatus = "Done";
14135
14102
  for (let i = nextIdxToAssign; i < reviewStack.length; i++) {
@@ -14139,11 +14106,23 @@ function XViewScene({
14139
14106
  } else {
14140
14107
  nextStatus = "Done";
14141
14108
  }
14142
- if (nextStatus === "Done") {
14109
+ if (nextStatus === "Review") {
14110
+ const nextReviewerName = ((_a2 = viewMembers.find((m) => m.id === nextAssigneeId)) == null ? void 0 : _a2.name) || "revisor";
14143
14111
  newTimeline.push(createTimelineEntry(
14144
14112
  "system",
14145
- `Quest finalizada!`,
14146
- "quest_finished"
14113
+ `Status "Review" - Respons\xE1vel: ${nextReviewerName}`,
14114
+ "status_changed",
14115
+ { metadata: { to_assignee_id: nextAssigneeId } }
14116
+ ));
14117
+ } else if (nextStatus === "Done") {
14118
+ const finisherName = ((_b2 = viewMembers.find((m) => {
14119
+ var _a3;
14120
+ return m.id === (((_a3 = session == null ? void 0 : session.user) == null ? void 0 : _a3.id) || cleanQuestNode.assignee_id);
14121
+ })) == null ? void 0 : _b2.name) || ((_c2 = session == null ? void 0 : session.user) == null ? void 0 : _c2.name) || "respons\xE1vel";
14122
+ newTimeline.push(createTimelineEntry(
14123
+ ((_d2 = session == null ? void 0 : session.user) == null ? void 0 : _d2.id) || cleanQuestNode.assignee_id,
14124
+ `Status "Done" - Finalizado por ${finisherName}`,
14125
+ "status_changed"
14147
14126
  ));
14148
14127
  }
14149
14128
  const updatedNode = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lv-x-software-house/x_view",
3
- "version": "1.2.5-dev.33",
3
+ "version": "1.2.5-dev.35",
4
4
  "description": "Pacote privado contendo os componentes e lógica de renderização 3D do X View.",
5
5
  "author": "iv.x - Engenharia de Software - ivxsoftwarehouse@gmail.com",
6
6
  "license": "UNLICENSED",