sy-form-components 0.2.4 → 0.2.5

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.mjs CHANGED
@@ -4331,21 +4331,65 @@ var TASK_STATUS_META = {
4331
4331
  };
4332
4332
 
4333
4333
  // src/core/processApi.ts
4334
+ var normalizeProcessTask = (value) => {
4335
+ const taskId = value?.taskId ?? value?.id ?? value?.task_id ?? "";
4336
+ return {
4337
+ ...value,
4338
+ id: value?.id ?? taskId,
4339
+ taskId,
4340
+ nodeId: value?.nodeId ?? value?.node_id ?? "",
4341
+ nodeType: value?.nodeType ?? value?.node_type ?? "approval",
4342
+ nodeName: value?.nodeName ?? value?.title ?? value?.name ?? value?.nodeId ?? "\u5BA1\u6279\u8282\u70B9",
4343
+ status: value?.status ?? "pending",
4344
+ assigneeId: value?.assigneeId ?? value?.assignee
4345
+ };
4346
+ };
4334
4347
  var normalizeProcessTasks = (value) => {
4335
- if (Array.isArray(value)) return value;
4348
+ if (Array.isArray(value)) return value.map(normalizeProcessTask);
4336
4349
  if (!value || typeof value !== "object") return [];
4337
- if (Array.isArray(value.tasks)) return value.tasks;
4338
- if (Array.isArray(value.list)) return value.list;
4339
- if (Array.isArray(value.items)) return value.items;
4340
- if (Array.isArray(value.records)) return value.records;
4350
+ if (Array.isArray(value.tasks)) return value.tasks.map(normalizeProcessTask);
4351
+ if (Array.isArray(value.currentTasks)) return value.currentTasks.map(normalizeProcessTask);
4352
+ if (Array.isArray(value.list)) return value.list.map(normalizeProcessTask);
4353
+ if (Array.isArray(value.items)) return value.items.map(normalizeProcessTask);
4354
+ if (Array.isArray(value.records)) return value.records.map(normalizeProcessTask);
4341
4355
  return [];
4342
4356
  };
4357
+ var normalizeProcessBasic = (value) => {
4358
+ const raw = value ?? {};
4359
+ const instance = raw.instance ?? raw;
4360
+ const currentTask = raw.currentTask ? normalizeProcessTask(raw.currentTask) : void 0;
4361
+ return {
4362
+ ...raw,
4363
+ instanceId: raw.instanceId ?? raw.id ?? instance.formInstanceId ?? instance.id,
4364
+ processStatus: raw.processStatus ?? raw.status ?? instance.processStatus ?? instance.status,
4365
+ formUuid: raw.formUuid ?? instance.formUuid ?? instance.definition?.formUuid,
4366
+ appType: raw.appType ?? instance.appType ?? instance.definition?.appType,
4367
+ title: raw.title ?? instance.title,
4368
+ originatorId: raw.originatorId ?? instance.originatorId ?? instance.startedBy,
4369
+ originatorName: raw.originatorName ?? instance.originatorName ?? instance.startedByName,
4370
+ originatorDepartment: raw.originatorDepartment ?? instance.originatorDepartment ?? instance.startedDepartmentName,
4371
+ createdAt: raw.createdAt ?? instance.createdAt ?? instance.startedAt,
4372
+ currentTask
4373
+ };
4374
+ };
4375
+ var normalizeApprovalPermission = (value) => {
4376
+ const raw = value ?? {};
4377
+ const currentTasks = normalizeProcessTasks(raw.currentTasks);
4378
+ const hasPermission = Boolean(raw.hasPermission ?? raw.isApprover ?? currentTasks.length > 0);
4379
+ return {
4380
+ ...raw,
4381
+ hasPermission,
4382
+ isApprover: Boolean(raw.isApprover ?? hasPermission),
4383
+ canUndo: Boolean(raw.canUndo ?? raw.canWithdraw),
4384
+ currentTasks
4385
+ };
4386
+ };
4343
4387
  async function getProcessBasic(request, formInstId) {
4344
4388
  const response = await request({
4345
4389
  url: `/workflow/instance/${formInstId}/basic`,
4346
4390
  method: "get"
4347
4391
  });
4348
- return response.data || response.result;
4392
+ return normalizeProcessBasic(response.data || response.result);
4349
4393
  }
4350
4394
  async function getProcessProgress(request, formInstId) {
4351
4395
  const response = await request({
@@ -4359,7 +4403,7 @@ async function checkUserApproval(request, formInstId) {
4359
4403
  url: `/workflow/instance/${formInstId}/permission`,
4360
4404
  method: "get"
4361
4405
  });
4362
- return response.data || response.result;
4406
+ return normalizeApprovalPermission(response.data || response.result);
4363
4407
  }
4364
4408
  async function handleApproval(request, params) {
4365
4409
  const response = await request({
@@ -5143,7 +5187,23 @@ function useFormDetail(options) {
5143
5187
  }
5144
5188
 
5145
5189
  // src/hooks/useProcessDetail.ts
5146
- import { useState as useState21, useEffect as useEffect28, useCallback as useCallback8, useRef as useRef8 } from "react";
5190
+ import { useState as useState21, useEffect as useEffect28, useCallback as useCallback8, useRef as useRef8, useMemo as useMemo8 } from "react";
5191
+ var DEFAULT_APPROVAL_ACTIONS = [
5192
+ { action: "agree", name: { zh_CN: "\u540C\u610F" } },
5193
+ { action: "rejected", name: { zh_CN: "\u62D2\u7EDD" } }
5194
+ ];
5195
+ var WITHDRAW_ACTION = { action: "withdraw", name: { zh_CN: "\u64A4\u9500" } };
5196
+ function mergeCurrentTask(processTask, approvalTask) {
5197
+ if (!approvalTask) return processTask ?? null;
5198
+ if (!processTask) return approvalTask;
5199
+ return {
5200
+ ...processTask,
5201
+ ...approvalTask,
5202
+ nodeName: processTask.nodeName || approvalTask.nodeName,
5203
+ title: processTask.title || approvalTask.title,
5204
+ actions: processTask.actions ?? approvalTask.actions
5205
+ };
5206
+ }
5147
5207
  function useProcessDetail(options) {
5148
5208
  const { formUuid, appType, formInstanceId, fieldIds } = options;
5149
5209
  const { api } = useFormContext();
@@ -5156,6 +5216,7 @@ function useProcessDetail(options) {
5156
5216
  const [instanceInfo, setInstanceInfo] = useState21(null);
5157
5217
  const [isApprover, setIsApprover] = useState21(false);
5158
5218
  const [canWithdraw, setCanWithdraw] = useState21(false);
5219
+ const [approvalTasks, setApprovalTasks] = useState21([]);
5159
5220
  const [permissions, setPermissions] = useState21(null);
5160
5221
  const [processDefinition, setProcessDefinition] = useState21(null);
5161
5222
  const mountedRef = useRef8(true);
@@ -5165,7 +5226,10 @@ function useProcessDetail(options) {
5165
5226
  mountedRef.current = false;
5166
5227
  };
5167
5228
  }, []);
5168
- const currentTask = processInfo?.currentTask ?? null;
5229
+ const currentTask = useMemo8(
5230
+ () => mergeCurrentTask(processInfo?.currentTask, approvalTasks[0]),
5231
+ [processInfo?.currentTask, approvalTasks]
5232
+ );
5169
5233
  const processStatus = processInfo?.processStatus ?? null;
5170
5234
  const isOriginatorReturn = currentTask?.nodeType === "originator_return";
5171
5235
  const isProcessCompleted = processStatus === "completed" || processStatus === "terminated";
@@ -5176,7 +5240,14 @@ function useProcessDetail(options) {
5176
5240
  isApprover,
5177
5241
  mode
5178
5242
  });
5179
- const activeActions = isApprover && currentTask?.actions ? currentTask.actions : [];
5243
+ const activeActions = useMemo8(() => {
5244
+ if (!isApprover) return [];
5245
+ const actions = currentTask?.actions && currentTask.actions.length > 0 ? [...currentTask.actions] : [...DEFAULT_APPROVAL_ACTIONS];
5246
+ if (canWithdraw && !actions.some((action) => action.action === "withdraw")) {
5247
+ actions.push(WITHDRAW_ACTION);
5248
+ }
5249
+ return actions;
5250
+ }, [isApprover, currentTask?.actions, canWithdraw]);
5180
5251
  const loadData = useCallback8(async () => {
5181
5252
  if (!mountedRef.current) return;
5182
5253
  setLoading(true);
@@ -5191,6 +5262,7 @@ function useProcessDetail(options) {
5191
5262
  setProcessInfo(basicResult);
5192
5263
  setIsApprover(approvalResult?.isApprover ?? false);
5193
5264
  setCanWithdraw(approvalResult?.canUndo ?? false);
5265
+ setApprovalTasks(approvalResult?.currentTasks ?? []);
5194
5266
  setPermissions(permResult);
5195
5267
  setInstanceInfo(formResult);
5196
5268
  setFormData(extractFormValues(formResult, fieldIds));
@@ -5221,6 +5293,7 @@ function useProcessDetail(options) {
5221
5293
  setProcessInfo(null);
5222
5294
  setFormData(null);
5223
5295
  setInstanceInfo(null);
5296
+ setApprovalTasks([]);
5224
5297
  }
5225
5298
  } finally {
5226
5299
  if (mountedRef.current) {
@@ -5951,8 +6024,9 @@ var ApprovalTimeline = ({
5951
6024
  return /* @__PURE__ */ jsx77("div", { className: `bg-white rounded-xl shadow-sm border border-gray-100 p-6 ${className}`, children: /* @__PURE__ */ jsx77("p", { className: "text-sm text-gray-400 text-center", children: "\u6682\u65E0\u5BA1\u6279\u8BB0\u5F55" }) });
5952
6025
  }
5953
6026
  return /* @__PURE__ */ jsx77("div", { className: `${className}`, children: taskList.map((task, index) => {
6027
+ const taskKey = task.taskId || task.id || `${task.nodeId}-${index}`;
5954
6028
  if (renderNode) {
5955
- return /* @__PURE__ */ jsx77("div", { children: renderNode(task, index) }, task.taskId);
6029
+ return /* @__PURE__ */ jsx77("div", { children: renderNode(task, index) }, taskKey);
5956
6030
  }
5957
6031
  const phase = getNodePhase(task);
5958
6032
  const isLast = index === taskList.length - 1;
@@ -6009,7 +6083,7 @@ var ApprovalTimeline = ({
6009
6083
  ]
6010
6084
  }
6011
6085
  ) })
6012
- ] }, task.taskId);
6086
+ ] }, taskKey);
6013
6087
  }) });
6014
6088
  };
6015
6089
 
@@ -6605,7 +6679,7 @@ var FormSubmitTemplate = ({
6605
6679
  };
6606
6680
 
6607
6681
  // src/templates/FormDetailTemplate.tsx
6608
- import { useCallback as useCallback14, useMemo as useMemo8 } from "react";
6682
+ import { useCallback as useCallback14, useMemo as useMemo9 } from "react";
6609
6683
 
6610
6684
  // src/templates/PageSkeleton.tsx
6611
6685
  import { Skeleton as Skeleton3 } from "antd";
@@ -6685,7 +6759,7 @@ var InnerDetailContent = ({
6685
6759
  onDelete,
6686
6760
  onSave
6687
6761
  }) => {
6688
- const fieldIds = useMemo8(() => schema.fields.map((field) => field.fieldId), [schema.fields]);
6762
+ const fieldIds = useMemo9(() => schema.fields.map((field) => field.fieldId), [schema.fields]);
6689
6763
  const {
6690
6764
  loading,
6691
6765
  mode,
@@ -6810,7 +6884,7 @@ var FormDetailTemplate = (props) => {
6810
6884
  };
6811
6885
 
6812
6886
  // src/templates/ProcessDetailTemplate.tsx
6813
- import { useCallback as useCallback15, useMemo as useMemo9, useRef as useRef12 } from "react";
6887
+ import { useCallback as useCallback15, useMemo as useMemo10, useRef as useRef12 } from "react";
6814
6888
  import { Fragment as Fragment7, jsx as jsx85, jsxs as jsxs31 } from "react/jsx-runtime";
6815
6889
  function FormDataBridge({
6816
6890
  formDataRef
@@ -6832,7 +6906,7 @@ var InnerProcessContent = ({
6832
6906
  onActionComplete
6833
6907
  }) => {
6834
6908
  const formDataRef = useRef12(void 0);
6835
- const fieldIds = useMemo9(() => schema.fields.map((field) => field.fieldId), [schema.fields]);
6909
+ const fieldIds = useMemo10(() => schema.fields.map((field) => field.fieldId), [schema.fields]);
6836
6910
  const {
6837
6911
  loading,
6838
6912
  processInfo,
@@ -6854,7 +6928,7 @@ var InnerProcessContent = ({
6854
6928
  formInstanceId,
6855
6929
  formUuid,
6856
6930
  appType,
6857
- currentTaskId: currentTask?.taskId,
6931
+ currentTaskId: currentTask?.taskId ?? currentTask?.id,
6858
6932
  onActionComplete: async (action) => {
6859
6933
  onActionComplete?.(action);
6860
6934
  await refreshProgress();