@rytass/bpm-core-react 0.21.2 → 0.21.3
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/CHANGELOG.md +16 -0
- package/dist/chunks/{FormBuilderView-CGKkuVFi.cjs → FormBuilderView-Bq4TXdxF.cjs} +2 -2
- package/dist/chunks/{FormBuilderView-CGKkuVFi.cjs.map → FormBuilderView-Bq4TXdxF.cjs.map} +1 -1
- package/dist/chunks/{FormBuilderView-6KdApi-D.js → FormBuilderView-DNsFwZgk.js} +2 -2
- package/dist/chunks/{FormBuilderView-6KdApi-D.js.map → FormBuilderView-DNsFwZgk.js.map} +1 -1
- package/dist/chunks/{FormRendererView-BcQKUi1A.js → FormRendererView-BF8Ge0Zk.js} +178 -153
- package/dist/chunks/FormRendererView-BF8Ge0Zk.js.map +1 -0
- package/dist/chunks/FormRendererView-ZIfSRWPi.cjs +6 -0
- package/dist/chunks/FormRendererView-ZIfSRWPi.cjs.map +1 -0
- package/dist/chunks/admin-pickers-BjbkBpSJ.cjs.map +1 -1
- package/dist/chunks/admin-pickers-DfGxsjpp.js.map +1 -1
- package/dist/chunks/approval-instance-list-page-BI5fIXc-.js.map +1 -1
- package/dist/chunks/approval-instance-list-page-Cv5I1YPX.cjs.map +1 -1
- package/dist/chunks/auth-provider-4BeCw7cI.cjs.map +1 -1
- package/dist/chunks/auth-provider-C2b-5mGt.js.map +1 -1
- package/dist/chunks/categories-CyyqG6wG.cjs.map +1 -1
- package/dist/chunks/categories-f7E-RJEc.js.map +1 -1
- package/dist/chunks/{compose-M-GR6smM.js → compose-C_Y38ENa.js} +4 -4
- package/dist/chunks/{compose-M-GR6smM.js.map → compose-C_Y38ENa.js.map} +1 -1
- package/dist/chunks/{compose-CtWuunwB.cjs → compose-NHbyjV73.cjs} +2 -2
- package/dist/chunks/{compose-CtWuunwB.cjs.map → compose-NHbyjV73.cjs.map} +1 -1
- package/dist/chunks/dashboard-page-BoqNhjT_.js.map +1 -1
- package/dist/chunks/dashboard-page-D7YJ3udk.cjs.map +1 -1
- package/dist/chunks/delegations-ClRCwD1I.cjs.map +1 -1
- package/dist/chunks/delegations-CqND-Qtz.js.map +1 -1
- package/dist/chunks/delegations-D43VDSz1.cjs.map +1 -1
- package/dist/chunks/delegations-zisffLwk.js.map +1 -1
- package/dist/chunks/{designer-BnMeiMVe.js → designer-BRYIpeTC.js} +3 -3
- package/dist/chunks/{designer-BnMeiMVe.js.map → designer-BRYIpeTC.js.map} +1 -1
- package/dist/chunks/{designer-D6fCDq_q.cjs → designer-oDGvHWBJ.cjs} +2 -2
- package/dist/chunks/{designer-D6fCDq_q.cjs.map → designer-oDGvHWBJ.cjs.map} +1 -1
- package/dist/chunks/{detail-C5KrUC7s.cjs → detail-BLhZp1mO.cjs} +2 -2
- package/dist/chunks/detail-BLhZp1mO.cjs.map +1 -0
- package/dist/chunks/{detail-Dnc4PPWO.js → detail-CkRgfU7l.js} +2 -2
- package/dist/chunks/detail-CkRgfU7l.js.map +1 -0
- package/dist/chunks/login-D6cc3bo7.js.map +1 -1
- package/dist/chunks/login-uvVcltrS.cjs.map +1 -1
- package/dist/chunks/notifications-Bc4mgSds.cjs.map +1 -1
- package/dist/chunks/notifications-Cvme5Qbl.js.map +1 -1
- package/dist/chunks/orgs-B_2J2tLX.cjs.map +1 -1
- package/dist/chunks/orgs-DqxMds26.js.map +1 -1
- package/dist/chunks/users-BBtiZ9QQ.js.map +1 -1
- package/dist/chunks/users-EqSzDhuj.cjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pages/instances/detail/index.cjs +1 -1
- package/dist/pages/instances/detail/index.js +1 -1
- package/dist/pages/templates/compose/index.cjs +1 -1
- package/dist/pages/templates/compose/index.js +1 -1
- package/dist/pages/templates/designer/index.cjs +1 -1
- package/dist/pages/templates/designer/index.js +1 -1
- package/dist/views/forms/builder/index.cjs +1 -1
- package/dist/views/forms/builder/index.js +1 -1
- package/dist/views/forms/renderer/form-control-menu.d.cts +7 -0
- package/dist/views/forms/renderer/form-control-menu.d.ts +7 -0
- package/dist/views/forms/renderer/form-data-source-field.d.cts +12 -0
- package/dist/views/forms/renderer/form-data-source-field.d.ts +12 -0
- package/dist/views/forms/renderer/index.cjs +1 -1
- package/dist/views/forms/renderer/index.js +1 -1
- package/dist/views/instances/detail/index.cjs +1 -1
- package/dist/views/instances/detail/index.js +1 -1
- package/dist/views/instances/new/index.cjs +1 -1
- package/dist/views/instances/new/index.js +1 -1
- package/dist/views/templates/compose/index.cjs +1 -1
- package/dist/views/templates/compose/index.js +1 -1
- package/dist/views/templates/designer/index.cjs +1 -1
- package/dist/views/templates/designer/index.js +1 -1
- package/package.json +3 -3
- package/dist/chunks/FormRendererView-B-xycC9S.cjs +0 -6
- package/dist/chunks/FormRendererView-B-xycC9S.cjs.map +0 -1
- package/dist/chunks/FormRendererView-BcQKUi1A.js.map +0 -1
- package/dist/chunks/detail-C5KrUC7s.cjs.map +0 -1
- package/dist/chunks/detail-Dnc4PPWO.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
export { o as InstanceAttachmentsSection, t as InstanceDetailView, s as InstanceFormSection, r as InstanceHistorySection, i as InstanceSignaturesSection, a as InstanceTasksSection, n as InstanceWebhookDeliveriesSection } from "../../../chunks/detail-
|
|
1
|
+
export { o as InstanceAttachmentsSection, t as InstanceDetailView, s as InstanceFormSection, r as InstanceHistorySection, i as InstanceSignaturesSection, a as InstanceTasksSection, n as InstanceWebhookDeliveriesSection } from "../../../chunks/detail-CkRgfU7l.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/rolldown-runtime-BocRIvOZ.cjs"),t=require("../../../chunks/instance-error-message-BpCLCOjp.cjs"),n=require("../../../chunks/format-date-time-D-cx5M8z.cjs"),r=require("../../../chunks/auth-provider-4BeCw7cI.cjs"),i=require("../../../chunks/router-adapter--gYs13E8.cjs"),a=require("../../../chunks/routes-config-C1j_vFKo.cjs"),o=require("../../../chunks/FormRendererView-
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/rolldown-runtime-BocRIvOZ.cjs"),t=require("../../../chunks/instance-error-message-BpCLCOjp.cjs"),n=require("../../../chunks/format-date-time-D-cx5M8z.cjs"),r=require("../../../chunks/auth-provider-4BeCw7cI.cjs"),i=require("../../../chunks/router-adapter--gYs13E8.cjs"),a=require("../../../chunks/routes-config-C1j_vFKo.cjs"),o=require("../../../chunks/FormRendererView-ZIfSRWPi.cjs");let s=require("react"),c=require("@mezzanine-ui/react"),l=require("react/jsx-runtime"),u=require("@rytass/bpm-core-client/workflow"),d=require("@mezzanine-ui/react/ContentHeader");d=e.t(d,1);let f=require("@rytass/bpm-core-client/form"),p=require("@mezzanine-ui/icons");var m={display:`grid`,gap:16};function h(e={}){return(0,l.jsx)(s.Suspense,{fallback:(0,l.jsx)(_,{}),children:(0,l.jsx)(g,{templateId:e.templateId??void 0})})}function g({templateId:e}){let h=i.r(),g=a.r(),{member:_}=r.n(),v=_?.memberId??null,y=e??null,[b,x]=(0,s.useState)(null),[S,C]=(0,s.useState)({}),[w,T]=(0,s.useState)([]),[E,D]=(0,s.useState)(null),[O,k]=(0,s.useState)({}),[A,j]=(0,s.useState)(!0),[M,N]=(0,s.useState)(!1),[P,F]=(0,s.useState)({}),I=o.o(),L=(0,s.useMemo)(()=>b?t.r(b.formVersion.schema,b.templateVersion.workflowDefinition):null,[b]),R=(0,s.useCallback)((e,t)=>{F(n=>{let r=n[e];return r?.hasValue===t.hasValue&&r.selectionExpired===(t.selectionExpired===!0)&&r.status===t.status?n:{...n,[e]:{hasValue:t.hasValue,selectionExpired:t.selectionExpired===!0,status:t.status}}})},[]);(0,s.useEffect)(()=>{y?U(y):H()},[y]);let z=(0,s.useMemo)(()=>w.map(e=>({...e,key:e.id,updatedAt:n.t(e.updatedAt),versionLabel:`v${e.version}`})),[w]),B=(0,s.useMemo)(()=>[{dataIndex:`name`,key:`name`,title:`模板名稱`,width:240},{dataIndex:`versionLabel`,key:`versionLabel`,title:`發布版本`,width:120},{dataIndex:`updatedAt`,key:`updatedAt`,title:`更新時間`,width:220}],[]),V=(0,s.useMemo)(()=>({render:e=>[{name:`發起`,onClick:()=>h.push(g.caseNew(e.id)),variant:`base-primary`}],variant:`base-secondary`,width:88}),[h]);async function H(){j(!0),D(null),x(null),F({});try{T(await(0,u.listLaunchableTemplates)())}catch(e){D(t.t(e))}finally{j(!1)}}async function U(e){j(!0),D(null),T([]),F({});try{x(await(0,u.readLaunchContext)(e))}catch(e){D(t.t(e))}finally{j(!1)}}async function W(){if(!b||!L||!v)return;N(!0),D(null),k({});let e=o.l(Object.values(P));if(e){D(e),N(!1);return}if(I.blockMessage){D(I.blockMessage),N(!1);return}let n=t.i((0,f.buildFormRendererValues)(L.fields,S),b.templateVersion.workflowDefinition);try{let e=await(0,f.validateFormRendererValuesInWorker)({schema:L,uiSchema:b.formVersion.uiSchema,values:n});if(!e.valid){k(e.errors),D(`請先修正表單中標示的欄位。`),e.firstInvalidFieldKey&&(0,f.focusFormRendererField)(e.firstInvalidFieldKey);return}let t=await(0,u.submitApprovalInstance)({formData:n,initiatorMemberId:v,templateId:b.template.id,title:(0,u.readFormDataCaseTitle)({fallbackTitle:b.template.name,formData:n,schema:L,uiSchema:b.formVersion.uiSchema})});h.push(g.caseDetail(t))}catch(e){D(t.t(e))}finally{N(!1)}}async function G(e,t){if(!v)throw Error(`尚未登入,無法上傳附件`);return{id:(await(0,u.uploadAttachment)({file:t,formFieldPath:`form.${e.fieldKey}`})).id}}return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.PageHeader,{children:(0,l.jsx)(d.default,{description:b?`${b.template.name} · 表單 v${b.formVersion.version}`:`選擇可發起的已發布模板後填寫表單內容。`,title:`發起簽核`,children:b?(0,l.jsx)(c.Button,{disabled:A||M,icon:p.CheckedIcon,iconType:`leading`,onClick:W,variant:`base-primary`,children:`送出`}):null})}),(0,l.jsx)(c.SectionGroup,{children:(0,l.jsx)(c.Section,{children:(0,l.jsxs)(`div`,{style:m,children:[E?(0,l.jsx)(c.Typography,{color:`text-error`,variant:`body`,children:E}):null,A?(0,l.jsx)(c.Typography,{color:`text-neutral`,variant:`body`,children:`載入中...`}):null,b&&L?(0,l.jsx)(o.t,{dataSourceContext:{kind:`runtime`,templateId:b.template.id},errors:O,maxWidth:480,onChange:e=>{C(e),k({})},onDataSourceStateChange:R,onFileUploadStateChange:I.onFileUploadStateChange,onUploadAttachment:G,schema:L,singleColumn:!0,uiSchema:b.formVersion.uiSchema,value:S}):null,!y&&!A?z.length>0?(0,l.jsx)(c.Table,{actions:V,columns:B,dataSource:z,fullWidth:!0}):(0,l.jsx)(c.Typography,{color:`text-neutral`,variant:`body`,children:`目前沒有可發起的已發布模板。`}):null]})})})]})}function _(){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.PageHeader,{children:(0,l.jsx)(d.default,{description:`選擇可發起的已發布模板後填寫表單內容。`,title:`發起簽核`})}),(0,l.jsx)(c.SectionGroup,{children:(0,l.jsx)(c.Section,{children:(0,l.jsx)(c.Typography,{color:`text-neutral`,variant:`body`,children:`載入中...`})})})]})}exports.InstanceNewView=h;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -4,7 +4,7 @@ import { t as r } from "../../../chunks/format-date-time-B0LdmWg4.js";
|
|
|
4
4
|
import { n as i } from "../../../chunks/auth-provider-C2b-5mGt.js";
|
|
5
5
|
import { r as a } from "../../../chunks/router-adapter-CkxCyzf5.js";
|
|
6
6
|
import { r as o } from "../../../chunks/routes-config-BcNaWJWJ.js";
|
|
7
|
-
import { l as s, o as c, t as l } from "../../../chunks/FormRendererView-
|
|
7
|
+
import { l as s, o as c, t as l } from "../../../chunks/FormRendererView-BF8Ge0Zk.js";
|
|
8
8
|
import { Suspense as u, useCallback as d, useEffect as f, useMemo as p, useState as m } from "react";
|
|
9
9
|
import { Button as ee, PageHeader as h, Section as g, SectionGroup as _, Table as v, Typography as y } from "@mezzanine-ui/react";
|
|
10
10
|
import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/compose-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/compose-NHbyjV73.cjs");exports.EMPTY_COMPOSE_FORM_SCHEMA=e.n,exports.EMPTY_COMPOSE_FORM_UI_SCHEMA=e.r,exports.TemplateComposeWizardView=e.t,exports.useTemplateComposeWizard=e.i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { n as EMPTY_COMPOSE_FORM_SCHEMA, r as EMPTY_COMPOSE_FORM_UI_SCHEMA, t as TemplateComposeWizardView, i as useTemplateComposeWizard } from "../../../chunks/compose-
|
|
1
|
+
export { n as EMPTY_COMPOSE_FORM_SCHEMA, r as EMPTY_COMPOSE_FORM_UI_SCHEMA, t as TemplateComposeWizardView, i as useTemplateComposeWizard } from "../../../chunks/compose-C_Y38ENa.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/designer-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/designer-oDGvHWBJ.cjs");exports.TemplateDesignerView=e.t;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as TemplateDesignerView } from "../../../chunks/designer-
|
|
1
|
+
export { t as TemplateDesignerView } from "../../../chunks/designer-BRYIpeTC.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rytass/bpm-core-react",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.3",
|
|
4
4
|
"description": "BPM approval workflow React components and views for the Rytass BPM stack. Ships AuthProvider, NotificationDrawer + bell widget, host-facing hooks (useBPMMember / useBPMLogout / useBPMRoutes), and full page-body views for inbox / instances / templates / forms / admin / settings on top of Mezzanine UI and the BPM client functions. The host owns the navigation shell — BPM does not bundle a layout.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bpm",
|
|
@@ -536,8 +536,8 @@
|
|
|
536
536
|
"@mezzanine-ui/core": ">=1.0.0",
|
|
537
537
|
"@mezzanine-ui/icons": ">=1.0.0",
|
|
538
538
|
"@mezzanine-ui/react": ">=1.0.0",
|
|
539
|
-
"@rytass/bpm-core-client": "^0.21.
|
|
540
|
-
"@rytass/bpm-core-shared": "^0.21.
|
|
539
|
+
"@rytass/bpm-core-client": "^0.21.3",
|
|
540
|
+
"@rytass/bpm-core-shared": "^0.21.3",
|
|
541
541
|
"@uiw/react-codemirror": ">=4.0.0",
|
|
542
542
|
"@xyflow/react": ">=12.0.0",
|
|
543
543
|
"ai": ">=6.0.0",
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use client";const e=require("./bpm-form-field-Bc6k4ZEO.cjs"),t=require("./format-member-label-t7ANTF62.cjs");let n=require("react"),r=require("@mezzanine-ui/react"),i=require("@rytass/bpm-core-client"),a=require("react/jsx-runtime"),o=require("@rytass/bpm-core-client/form"),s=require("@mezzanine-ui/icons"),c=require("@rytass/bpm-core-shared/form"),l=require("@rytass/bpm-core-client/organization");var u={canRetry:!1,error:null,hasValue:!1,hasNextPage:!1,invalidValues:[],onReachBottom:()=>void 0,onSearch:()=>void 0,options:[],retry:()=>void 0,status:`IDLE`},d=[],f=10,p=300,m=[`FORM_DATA_SOURCE_SEARCH_NOT_SUPPORTED`,`FORM_DATA_SOURCE_SEARCH_TOO_SHORT`];function h(e,t){if(!t.row)return e;let n=t.fieldPath?.indexOf(`.`)??-1;return t.fieldPath&&n>0?t.fieldPath.slice(0,n):null}function g(e,t){return t===null?e:Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))}function _(e,t){let n=e.from;switch(n.kind){case`FIELD`:return{fieldKey:n.fieldKey,value:t.formData[n.fieldKey]};case`CONSTANT`:return{value:n.value};case`ROW_FIELD`:return{columnKey:n.columnKey,value:t.rowValues?.[n.columnKey]};case`EXPRESSION`:return{expression:n.expression,form:g(t.formData,t.ownFormKey),row:t.rowValues?g(t.rowValues,t.ownRowKey):null};default:return v(n)}}function v(e){return{unsupported:!0}}function y(e){return JSON.stringify(b(e))??`null`}function b(e){return Array.isArray(e)?e.map(b):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0).sort(([e],[t])=>e<t?-1:+(e>t)).map(([e,t])=>[e,b(t)])):e}function x(e){let t=(0,c.isFormDataSourceFieldDefinition)(e.field)?e.field:null,r=e.fieldPath??t?.fieldKey??``,i=t?e.optionSnapshots?.[e.snapshotKey??t.fieldKey]:void 0,a=t?JSON.stringify({dataSource:t.dataSource,fieldKey:t.fieldKey,type:t.type}):``,s=JSON.stringify(i??null),l=(0,n.useMemo)(()=>i?.options??[],[s]),d=JSON.stringify(e.formData),g=JSON.stringify(e.initialFormData??{}),v=JSON.stringify(e.schema),b=JSON.stringify(e.uiSchema),x=e.context?.kind,C=e.context?.kind===`runtime`?e.context.instanceId:void 0,w=e.context?.kind===`runtime`?e.context.templateId:void 0,T=JSON.stringify(e.row?.values??null),ne=JSON.stringify(e.row?.initialValues??null),j=t?e.row?e.row.values[t.fieldKey]:e.formData[t.fieldKey]:void 0,M=(0,o.readFormDataSourceValueSignature)(j),N=(0,n.useMemo)(()=>(0,o.readFormDataSourceSelectedValues)(j),[M]),P=N.length>0,re=t?JSON.stringify(t.dataSource.bindings.map(n=>_(n,{formData:e.formData,ownFormKey:h(t.fieldKey,e),ownRowKey:e.row?t.fieldKey:null,rowValues:e.row?.values}))):``,ie=t?JSON.stringify(e.initialFormData!==void 0||e.initialValue!==void 0?j??null:null):``,ae=t?`${re}\u0000${ie}`:``,F=S(re,t?.dataSource.bindings.some(e=>e.from.kind===`EXPRESSION`)?p:0),oe=F!==re,I=(0,n.useMemo)(()=>{if(x===`preview`)return{kind:`preview`};if(x===`runtime`&&!e.readonly)return{instanceId:C,kind:`runtime`,templateId:w}},[C,x,w,e.readonly]),se=t?(e.initialFormData!==void 0||e.initialValue!==void 0)&&(0,o.readFormDataSourceValueSignature)(e.initialValue)!==M:!1,ce=t?e.initialFormData!==void 0&&t.dataSource.bindings.some(n=>{if(n.from.kind===`FIELD`)return(0,o.readFormDataSourceValueSignature)(e.initialFormData?.[n.from.fieldKey])!==(0,o.readFormDataSourceValueSignature)(e.formData[n.from.fieldKey]);if(n.from.kind===`ROW_FIELD`&&e.row?.initialValues)return(0,o.readFormDataSourceValueSignature)(e.row.initialValues[n.from.columnKey])!==(0,o.readFormDataSourceValueSignature)(e.row.values[n.from.columnKey]);if(n.from.kind===`EXPRESSION`){if(!I)return!1;let r={ownFormKey:h(t.fieldKey,e),ownRowKey:e.row?t.fieldKey:null};return y(_(n,{...r,formData:(0,o.buildFormRendererValues)(e.schema.fields,e.initialFormData??{}),rowValues:e.row?.initialValues??e.row?.values}))!==y(_(n,{...r,formData:(0,o.buildFormRendererValues)(e.schema.fields,e.formData),rowValues:e.row?.values}))}return!1}):!1,le=!!t?.dataSource.bindings.some(e=>e.from.kind===`EXPRESSION`),[ue,de]=(0,n.useState)(()=>({bindings:F,value:M}));ue.value!==M&&de({bindings:F,value:M});let fe=!!(le&&I&&P&&ue.value===M&&ue.bindings!==F),L=!!((i||P)&&(se||ce||fe)),R=!!(t&&I&&L&&P),z=D({hasSnapshot:!!i,hasValue:P,isStale:L,readonly:e.readonly}),B=!!(t&&I&&t.type!==`autocomplete`),V=O(L,B&&t!==null&&(0,o.readMissingFormDataSourceDependencies)(t,e.formData,e.row?.values).length>0),pe=(0,n.useRef)(z);pe.current=z;let[H,U]=(0,n.useState)([]),[me,he]=(0,n.useState)(``),[W,ge]=(0,n.useState)(null),[G,_e]=(0,n.useState)(null),[ve,K]=(0,n.useState)(()=>t?B?V:z:`IDLE`),[ye,q]=(0,n.useState)(null),J=(0,n.useRef)(0),Y=(0,n.useRef)(0),be=(0,n.useRef)(0),X=(0,n.useRef)(null),xe=(0,n.useRef)(null),Se=(0,n.useRef)({cursor:null,searchText:``}),Z=(0,n.useMemo)(()=>te(e.formData),[d]),Q=(0,n.useMemo)(()=>e.row?te(e.row.values):void 0,[T]),Ce=(0,n.useMemo)(()=>(0,o.mergeFormDataSourceOptions)(l,H),[H,l]),we=G&&G.signature===ae&&G.valueSignature===M?G:null,Te=R&&!we,Ee=!!(fe&&we&&we.unresolvedValues.length>0),De=E({options:Ce,resolution:we,resolvePending:Te,value:j}),$=(0,n.useCallback)((n,i)=>{if(!t||!I)return;let a=Y.current+1;Y.current=a,Se.current={cursor:i,searchText:n},X.current?.abort();let s=new AbortController;X.current=s,K(V),q(null),(I.kind===`preview`?(0,o.previewFormFieldOptions)({cursor:i,fieldKey:r,formData:Z,rowValues:Q,schema:e.schema,searchText:n,signal:s.signal,uiSchema:e.uiSchema}):(0,o.readFormFieldOptions)({cursor:i,fieldKey:r,formData:Z,instanceId:I.instanceId??null,rowValues:Q,searchText:n,signal:s.signal,templateId:I.templateId??null})).then(e=>{A(s,Y,a)||(U(t=>{let n=(0,o.readSelectedFormDataSourceOptions)(j,t);return(0,o.mergeFormDataSourceOptions)(n,i?t:[],e.options)}),ge(e.nextCursor),q(null),J.current=i?J.current+e.options.length:e.options.length,e.nextCursor&&e.options.length>0&&J.current<f&&Oe.current(n,e.nextCursor),K(e.waitingForFieldKeys.length?`WAITING_FOR_DEPENDENCIES`:`VALID`))}).catch(e=>{if(A(s,Y,a))return;let t=(0,o.readFormDataSourceErrorMessage)(e)??`選項來源暫時無法使用。`,n=(0,o.readFormDataSourceErrorCode)(e);q(t),K(k(!!(n&&m.includes(n)),P))})},[M,a,I,P,V,r,Z,Q,v,b]),Oe=(0,n.useRef)($);Oe.current=$;let ke=(0,n.useCallback)(()=>{if(!t||!I||N.length===0)return;let n=ae,i=M,a=be.current+1;be.current=a,xe.current?.abort();let s=new AbortController;xe.current=s,q(null),(I.kind===`preview`?(0,o.previewResolveFormFieldOptions)({fieldKey:r,formData:Z,rowValues:Q,schema:e.schema,signal:s.signal,uiSchema:e.uiSchema,values:N}):(0,o.resolveFormFieldOptions)({fieldKey:r,formData:Z,instanceId:I.instanceId??null,rowValues:Q,signal:s.signal,templateId:I.templateId??null,values:N})).then(e=>{A(s,be,a)||(e.waitingForFieldKeys.length?K(`WAITING_FOR_DEPENDENCIES`):(U(t=>(0,o.mergeFormDataSourceOptions)(t,e.options)),_e({signature:n,unresolvedValues:e.unresolvedValues,valueSignature:i}),K(`VALID`)))}).catch(e=>{A(s,be,a)||(K(`UNAVAILABLE`),q((0,o.readFormDataSourceErrorMessage)(e)??`選項來源暫時無法使用。`))})},[M,ae,a,I,r,Z,Q,v,N,b]),Ae=(0,n.useRef)(ke);Ae.current=ke,(0,n.useEffect)(()=>{Y.current+=1,X.current?.abort(),U(e=>(0,o.readSelectedFormDataSourceOptions)(j,e)),ge(e=>e===null?e:null),he(e=>e&&``),q(e=>e&&null),t?B?Oe.current(``,null):K(pe.current):K(`IDLE`)},[B,a,I,F,ie,g,ne,e.readonly,s]),(0,n.useEffect)(()=>{t&&!B&&K(z)},[B,a,z]),(0,n.useEffect)(()=>{R&&!oe&&Ae.current()},[I,R,oe,F,ie]),(0,n.useEffect)(()=>()=>{X.current?.abort(),xe.current?.abort()},[]);let je=(0,n.useCallback)(e=>{he(e),U(e=>(0,o.readSelectedFormDataSourceOptions)(j,e)),ge(null),$(e,null)},[$]),Me=(0,n.useCallback)(()=>{W&&$(me,W)},[$,W,me]),Ne=(0,n.useCallback)(()=>{I&&($(Se.current.searchText,Se.current.cursor),R&&Ae.current())},[I,$,R]);return t?{canRetry:!!I,error:ye,hasValue:P,hasNextPage:!!W,invalidValues:De,onReachBottom:Me,onSearch:je,options:Ce,retry:Ne,selectionExpired:Ee,status:oe&&I&&(B||P)?B?V:`STALE`:ee({invalidValues:De,resolvePending:Te,status:ve})}:u}function S(e,t){let[r,i]=(0,n.useState)(e);return(0,n.useEffect)(()=>{if(t<=0)return;let n=setTimeout(()=>{i(e)},t);return()=>{clearTimeout(n)}},[t,e]),t>0?r:e}function C(e){switch(e.status){case`WAITING_FOR_DEPENDENCIES`:return`請先填寫相依欄位。`;case`STALE`:return`選項需要重新載入或驗證。`;case`INVALID`:return e.selectionExpired?(0,o.readFormDataSourceErrorMessage)(`FORM_DATA_SOURCE_VALUE_NOT_RESOLVED`):e.invalidValues.length?`無法辨識選項:${e.invalidValues.join(`、`)}`:`目前選項已失效,請重新選擇。`;case`UNAVAILABLE`:return e.error??`選項來源暫時無法使用。`;case`VALID`:return e.error??(e.options.length?null:`目前沒有可用選項。`);default:return e.error}}function w(e){return e.hasValue&&e.status!==`VALID`}function T(e){let t=e.filter(w);return t.length===0?null:t.some(e=>e.status===`INVALID`&&e.selectionExpired===!0)?(0,o.readFormDataSourceErrorMessage)(`FORM_DATA_SOURCE_VALUE_NOT_RESOLVED`):t.every(e=>e.status===`LOADING`||e.status===`STALE`)?`選項驗證中,請稍候再送出。`:`請先完成動態選項驗證。`}function E(e){return e.resolution?e.resolution.unresolvedValues:e.resolvePending?d:(0,o.readMissingFormDataSourceOptionValues)(e.value,e.options)}function D(e){return e.isStale?`STALE`:e.hasSnapshot?`VALID`:e.readonly&&e.hasValue?`UNAVAILABLE`:`IDLE`}function O(e,t){return t?`WAITING_FOR_DEPENDENCIES`:e?`STALE`:`LOADING`}function k(e,t){return e?t?`VALID`:`IDLE`:`UNAVAILABLE`}function ee(e){return e.status===`LOADING`||e.status===`UNAVAILABLE`||e.status===`WAITING_FOR_DEPENDENCIES`?e.status:e.invalidValues.length?`INVALID`:e.resolvePending?`STALE`:e.status}function A(e,t,n){return e.signal.aborted||t.current!==n}function te(e){return Object.entries(e).reduce((e,[t,n])=>n===void 0?e:{...e,[t]:n},{})}function ne(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:[]}function j(e){return e.some(e=>e.pendingCount>0)?`附件仍在上傳中,請稍候再送出。`:e.some(e=>e.failedCount>0)?`有附件上傳失敗,請重試或移除後再送出。`:null}function M(){let[e,t]=(0,n.useState)({}),r=(0,n.useCallback)((e,n)=>t(t=>({...t,[e]:n})),[]);return{blockMessage:j(Object.values(e)),onFileUploadStateChange:r}}var N=`無法讀取檔名的附件`,P=`此處無法上傳附件`;function re({attachments:e,field:t,onChange:i,onDownloadAttachment:o,onStateChange:s,onUploadAttachment:c,readonly:l,value:u}){let[d,f]=(0,n.useState)([]),[p,m]=(0,n.useState)(()=>new Map),[h,g]=(0,n.useState)([]),_=ne(u),v=_.join(`
|
|
2
|
-
`),y=(0,n.useMemo)(()=>new Map((e??[]).map(e=>[e.id,e])),[e]),b=(0,n.useMemo)(()=>{let e=new Map(h.map((e,t)=>[e,t]));return[..._.map(e=>p.get(e)??ie(e,y.get(e))),...d].sort((t,n)=>(e.get(t.id)??-1)-(e.get(n.id)??-1))},[y,h,p,d,v]),x=(0,n.useRef)(b),S=(0,n.useRef)(!0),C=(0,n.useRef)(O);C.current=O,(0,n.useEffect)(()=>{x.current=b},[b]);let w=(0,n.useCallback)(e=>C.current(e),[]),T=d.filter(e=>e.status===`loading`).length,E=d.filter(e=>e.status===`error`).length,D=(0,n.useRef)(s);D.current=s,(0,n.useEffect)(()=>{D.current?.({failedCount:E,pendingCount:T})},[E,T]),(0,n.useEffect)(()=>(S.current=!0,()=>{S.current=!1,D.current?.({failedCount:0,pendingCount:0})}),[]);function O(e){if(!S.current)return;let t=e.filter(e=>e.status===`done`),n=t.map(e=>e.id),r=new Set(_),a=t.filter(e=>e.file!==void 0&&!r.has(e.id));x.current=e,g(e.map(e=>e.id)),f(e.filter(e=>e.status!==`done`)),a.length>0&&m(e=>new Map([...e,...a.map(e=>[e.id,e])])),n.join(`
|
|
3
|
-
`)!==v&&i(n.length?n:void 0)}async function k(e){if(!c)throw Error(P);return{file:e,id:(await c(t,e)).id,progress:100,status:`done`}}async function ee(e,t){let n=await k(t).catch(n=>({errorMessage:F(n),file:t,id:e,status:`error`}));C.current(x.current.map(t=>t.id===e?n:t))}function A(e,t){p.has(e)?oe(t):o?.(e)}let te=!!c&&!l,j=[...!l&&!c?[{label:P,type:`info`}]:[],...d.filter(e=>e.status===`error`).map(e=>({label:`${e.file?.name??`檔案`}:${e.errorMessage??`上傳失敗`},未附加。請重試或刪除。`,type:`error`}))];return(0,a.jsx)(r.Upload,{accept:t.acceptedMimeTypes?.join(`,`),disabled:!te,files:b,...j.length>0?{hints:j}:{},maxFiles:t.maxFiles,mode:`button-list`,...(t.maxFiles??1)>1?{multiple:!0}:{},onChange:w,onDownload:A,onReload:(e,t)=>{ee(e,t)},onUpload:async e=>Promise.all(e.map(async e=>k(e).catch(t=>({errorMessage:F(t),file:e,id:`failed-${e.name}-${e.lastModified}-${Math.random()}`,status:`error`})))),size:`sub`})}function ie(e,t){return t?{file:ae(t),id:e,progress:100,status:`done`}:{id:e,progress:100,status:`done`,url:N}}function ae(e){let t=new File([],e.filename),n=Number(e.sizeBytes);return Number.isFinite(n)&&n>=0&&Object.defineProperty(t,"size",{value:n}),t}function F(e){return e instanceof Error&&e.message?`上傳失敗:${e.message}`:`上傳失敗,請重試。`}function oe(e){let t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=e.name,n.style.display=`none`,document.body.appendChild(n),n.click(),n.remove(),setTimeout(()=>URL.revokeObjectURL(t),3e4)}var I=/\s/u;function se(e){return[...e].some(e=>{let t=e.codePointAt(0)??0;return t<=32||t>=127&&t<=160||I.test(e)})}var ce=/^https?:\/\//iu;function le(e){return typeof e!=`string`||!e||e.includes(`\\`)||se(e)?null:e.startsWith(`/`)?!e.startsWith(`//`)&&de(e)?{external:!1,href:e}:null:ce.test(e)&&fe(e)?{external:!0,href:e}:null}var ue=`http://placeholder.invalid`;function de(e){try{let t=new URL(e,ue);return t.origin===ue&&!t.pathname.startsWith(`//`)}catch{return!1}}function fe(e){try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&!!t.hostname&&!t.username&&!t.password}catch{return!1}}async function L(e,t,n={}){let r=n.maxPerIdRequests??20,i=Math.max(1,n.concurrency??4);try{return{failedIds:[],profiles:await t(e),skippedIds:[]}}catch{if(e.length<=1)return{failedIds:e,profiles:[],skippedIds:[]}}let a=e.slice(0,r),o=await z(a,i,e=>t([e]));return{failedIds:a.filter((e,t)=>o[t].status===`rejected`),profiles:o.flatMap(e=>e.status===`fulfilled`?e.value:[]),skippedIds:e.slice(r)}}function R(e,t){return e.filter(e=>!t.has(e))}async function z(e,t,n){let r=[],i=0;async function a(){for(;i<e.length;){let t=i;i+=1,r[t]=await n(e[t]).then(e=>({status:`fulfilled`,value:e}),e=>({reason:e,status:`rejected`}))}}return await Promise.all(Array.from({length:Math.min(t,e.length)},a)),r}var B=`未知會員`;function V(e){return{id:e.memberId,name:t.t(e.name,e.email)}}function pe(e){return{id:e,name:B,unresolved:!0}}function H(e,t){let n=new Map(t.filter(e=>!e.unresolved).map(e=>[e.id,e])),r=new Set(e.map(e=>e.id)),i=t.filter((e,n)=>!r.has(e.id)&&t.findIndex(t=>t.id===e.id)===n),a=e.map(e=>(e.unresolved?n.get(e.id):void 0)??e);return i.length>0||a.some((t,n)=>t!==e[n])?[...a,...i]:e}function U(e,t){let n=new Set(t.filter(e=>!e.unresolved).map(e=>e.id));return(0,c.readFormMemberIds)(e).filter(e=>!n.has(e))}function me(e,t){return(0,c.readFormMemberIds)(e).map(e=>t.find(t=>t.id===e)??pe(e))}function he(e,t){if(e.length!==0)return t?e.map(e=>e.id):e[0]?.id}function W({multiple:e,name:t,onChange:o,placeholder:s,readonly:c,size:l,value:u}){let[d,f]=(0,n.useState)([]),[p,m]=(0,n.useState)([]),[h,g]=(0,n.useState)(!1),_=(0,n.useRef)(0),v=(0,n.useRef)(new Set),y=U(u,d).join(`
|
|
4
|
-
`);(0,n.useEffect)(()=>{let e=R(y?y.split(`
|
|
5
|
-
`):[],v.current),t=!1;return e.length===0?()=>void 0:(L(e,i.resolveMembers).then(({profiles:n,skippedIds:r})=>{if(t)return;let i=n.map(V),a=e.filter(e=>!i.some(t=>t.id===e)).map(pe);a.filter(e=>!r.includes(e.id)).forEach(e=>v.current.add(e.id)),f(e=>H(e,[...i,...a]))}),()=>{t=!0})},[y]);async function b(e){let t=_.current+1;_.current=t,g(!0);try{let n=(await(0,i.searchMembers)(e)).map(V);_.current===t&&(m(n),f(e=>H(e,n)))}catch{_.current===t&&m([])}finally{_.current===t&&g(!1)}}let x=me(u,d),S=[...H(x,p)],C={asyncData:!0,clearSearchText:!0,disabled:c,disabledOptionsFilter:!0,emptyText:`沒有符合的成員`,globalPortal:!0,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:t,spellCheck:!1},loading:h,loadingText:`搜尋成員中...`,onSearch:b,onVisibilityChange:e=>{e&&(m([]),b(``))},options:S,placeholder:s??`搜尋姓名或信箱`,readOnly:c,searchDebounceTime:300,size:l};return e?(0,a.jsx)(r.AutoComplete,{...C,mode:`multiple`,onChange:e=>o(he(e,!0)),value:[...x]}):(0,a.jsx)(r.AutoComplete,{...C,mode:`single`,onChange:e=>o(he(e?[e]:[],!1)),value:x[0]??null})}var ge=`未知組織`,G=`(已刪除)`;function _e(e){return{id:e.id,name:e.deleted?`${e.name}${G}`:e.name}}function ve(e){return{id:e,name:e,unresolved:!0}}function K(e){return{id:e,name:ge,unresolved:!0}}function ye(e){return typeof e==`string`&&e.trim()?e:null}function q(e){return e.toLowerCase()}function J(e,t){return q(e)===q(t)}function Y(e,t){let n=ye(e);return n===null?null:t.find(e=>J(e.id,n))??ve(n)}function be(e,t){let n=ye(e);return n!==null&&!t.some(e=>J(e.id,n))?n:null}function X(e,t){let n=new Map(t.filter(e=>!e.unresolved).map(e=>[q(e.id),e])),r=new Set(e.map(e=>q(e.id))),i=t.filter((e,n)=>!r.has(q(e.id))&&t.findIndex(t=>J(t.id,e.id))===n),a=e.map(e=>(e.unresolved?n.get(q(e.id)):void 0)??e);return i.length>0||a.some((t,n)=>t!==e[n])?[...a,...i]:e}function xe(e){return e?e.id:void 0}var Se=`搜尋組織失敗,請稍後再試。`;function Z({name:e,onChange:t,placeholder:i,readonly:o,size:s,value:c}){let[u,d]=(0,n.useState)([]),[f,p]=(0,n.useState)([]),[m,h]=(0,n.useState)(!1),[g,_]=(0,n.useState)(!1),v=(0,n.useRef)(0),y=be(c,u);(0,n.useEffect)(()=>{let e=!1;return y===null?()=>void 0:((0,l.resolveOrgUnitOptions)([y]).then(e=>{let t=e.map(_e);return t.some(e=>e.id.toLowerCase()===y.toLowerCase())?t:[...t,K(y)]}).catch(()=>[K(y)]).then(t=>{e||d(e=>X(e,t))}),()=>{e=!0})},[y]);async function b(e){let t=v.current+1;v.current=t,h(!0);try{let n=(await(0,l.searchOrgUnitOptions)(e)).map(_e);v.current===t&&(p(n),_(!1),d(e=>X(e,n)))}catch{v.current===t&&(p([]),_(!0))}finally{v.current===t&&h(!1)}}let x=Y(c,u),S=[...X(x?[x]:[],f)];return(0,a.jsxs)(`div`,{children:[(0,a.jsx)(r.AutoComplete,{asyncData:!0,clearSearchText:!0,disabled:o,disabledOptionsFilter:!0,emptyText:`沒有符合的組織`,globalPortal:!0,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:e,spellCheck:!1},loading:m,loadingText:`搜尋組織中...`,mode:`single`,onChange:e=>t(xe(e??null)),onSearch:b,onVisibilityChange:e=>{e&&(p([]),b(``))},options:S,placeholder:i??`搜尋組織名稱`,readOnly:o,searchDebounceTime:300,size:s,value:x}),g?(0,a.jsx)(r.Typography,{color:`text-error`,variant:`caption`,children:Se}):null]})}var Q={alignItems:`start`,display:`grid`,gap:12,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},Ce={gridColumn:`1 / -1`},we={alignItems:`start`,display:`grid`,gap:8,minWidth:0},Te={minWidth:`100%`,width:`100%`};function Ee(e){e&&(e.style.width=`100%`)}function De({attachments:e,dataSourceContext:t,dataSourceInitialValues:i,emptyText:s=`尚未建立欄位。`,errors:l={},fieldAccess:u,fieldLabelMarkers:d,maxWidth:f,onChange:p,onDataSourceStateChange:m,onDownloadAttachment:h,onFileUploadStateChange:g,onUploadAttachment:_,optionSnapshots:v,readonly:y=!1,schema:b,singleColumn:x=!1,uiSchema:S,value:C}){let w=(0,n.useMemo)(()=>({attachments:e,onDownloadAttachment:h,onStateChange:g,onUploadAttachment:_}),[e,h,g,_]),[T,E]=(0,n.useState)(()=>(0,o.buildFormRendererValues)(b.fields,C??{})),D=(0,n.useMemo)(()=>(0,o.buildFormRendererValues)(b.fields,C??T),[T,b.fields,C]),O=(0,n.useRef)(D),k=(0,n.useMemo)(()=>(0,o.readVisibleFormRendererFields)(b,S,D).filter(e=>$(u,e.fieldKey)?.visible!==!1),[u,b,S,D]);(0,n.useEffect)(()=>{O.current=D},[D]),(0,n.useEffect)(()=>{E(e=>(0,o.buildFormRendererValues)(b.fields,C??e))},[b.fields,C]);function ee(e,t){let n={...O.current,[e]:t};O.current=n,C||E(n),p?.(n)}return k.length?(0,a.jsx)(`div`,{style:{...Q,...x?{width:`100%`}:{}},children:k.map(e=>(0,a.jsx)(ke,{dataSourceContext:t,dataSourceInitialValues:i,field:e,error:l[e.fieldKey]??null,errors:l,fields:b.fields,labelMarker:d!==void 0&&Object.prototype.hasOwnProperty.call(d,e.fieldKey)?d[e.fieldKey]:void 0,onChange:ee,fileUpload:w,onDataSourceStateChange:m,optionSnapshots:v,readonly:Oe($(u,e.fieldKey),y),schema:b,style:{...we,gridColumn:`span ${x?12:Ye(e,S)}`,...x&&!(0,c.isTableFieldDefinition)(e)?{maxWidth:f}:{}},value:D[e.fieldKey],values:D,uiSchema:S},e.fieldKey))}):(0,a.jsx)(`div`,{style:Q,children:(0,a.jsx)(r.Typography,{color:`text-neutral`,style:Ce,variant:`body`,children:b.fields.length>0?`目前條件下沒有可填寫欄位。`:s})})}function $(e,t){return e!==void 0&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}function Oe(e,t){return e===void 0?t:!e.editable}function ke({dataSourceContext:t,dataSourceInitialValues:i,error:s,errors:l,field:u,fields:d,fileUpload:f,labelMarker:p,onChange:m,onDataSourceStateChange:h,optionSnapshots:g,readonly:_,schema:v,style:y,value:b,values:S,uiSchema:w}){let T=(0,o.isFormRendererFieldRequired)(u,d,S),E=_||(0,o.isFormRendererFieldReadonly)(u,d,S),D=x({context:t,field:u,formData:S,initialFormData:i,initialValue:i?.[u.fieldKey],optionSnapshots:g,readonly:E,schema:v,uiSchema:w}),O=C(D),k=JSON.stringify({hasValue:D.hasValue,invalidValues:D.invalidValues,selectionExpired:D.selectionExpired===!0,status:D.status});return(0,n.useEffect)(()=>{(0,c.isFormDataSourceFieldDefinition)(u)&&h?.(u.fieldKey,{hasValue:D.hasValue,invalidValues:D.invalidValues,selectionExpired:D.selectionExpired===!0,status:D.status})},[k,u.fieldKey,h]),(0,a.jsxs)(`div`,{"data-form-field-key":u.fieldKey,style:y,children:[(0,a.jsx)(e.t,{label:u.label,...p?{labelOptionalMarker:p}:{},name:u.fieldKey,required:T,children:(0,c.isTableFieldDefinition)(u)?(0,a.jsx)(Be,{dataSourceContext:t,dataSourceInitialValues:i,errors:l,field:u,onChange:m,onDataSourceStateChange:h,optionSnapshots:g,readonly:E,schema:v,uiSchema:w,value:b,values:S}):Ke(u,b,E,m,f,t,D)}),s?(0,a.jsx)(r.Typography,{color:`text-error`,variant:`caption`,children:s}):null,O?(0,a.jsxs)(`div`,{style:Ne,children:[(0,a.jsx)(r.Typography,{color:D.status===`INVALID`||D.status===`UNAVAILABLE`?`text-error`:`text-neutral`,variant:`caption`,children:O}),D.status===`UNAVAILABLE`&&D.canRetry?(0,a.jsx)(r.Button,{onClick:D.retry,size:`sub`,type:`button`,variant:`base-ghost`,children:`重試`}):null]}):null]})}var Ae=`(另開新分頁)`,je=`另開新分頁`,Me={color:`inherit`,textDecoration:`underline`,wordBreak:`break-all`},Ne={alignItems:`center`,display:`flex`,gap:8},Pe={display:`grid`,gap:8,minWidth:0,width:`100%`},Fe={display:`flex`,justifyContent:`flex-start`},Ie={maxWidth:`100%`,overflowX:`auto`},Le=160,Re=56,ze={display:`grid`,gap:4,minWidth:0};function Be({dataSourceContext:e,dataSourceInitialValues:t,errors:i,field:c,onChange:l,onDataSourceStateChange:u,optionSnapshots:d,readonly:f,schema:p,uiSchema:m,value:h,values:g}){let _=(0,o.readFormTableRows)(h),v=(0,o.readFormTableRowBounds)(c),y=(0,n.useRef)(0),[b,x]=(0,n.useState)(()=>_.map(()=>Ue(y)));(0,n.useEffect)(()=>{b.length!==_.length&&x(_.map(()=>Ue(y)))},[b.length,_.length]);function S(e){l(c.fieldKey,e)}function C(){x([...b,Ue(y)]),S([..._,(0,o.createFormTableRow)(c.columns)])}function w(e){x(b.filter((t,n)=>n!==e)),S(_.filter((t,n)=>n!==e))}function T(e,t,n){S(_.map((r,i)=>i===e?We(r,t,n):r))}let E=_.map((e,t)=>({...e,index:t,key:b[t]??`row-${t}`})),D=c.columns.map(n=>({key:n.fieldKey,render:r=>(0,a.jsx)(Ve,{column:n,dataSourceContext:e,error:i[(0,o.readFormTableCellPath)(c.fieldKey,r.index,n.fieldKey)]??null,fieldPath:`${c.fieldKey}.${n.fieldKey}`,formData:g,initialFormData:t,initialRowValues:He(t?.[c.fieldKey],r.index),onChange:e=>T(r.index,n.fieldKey,e),onDataSourceStateChange:u,optionSnapshots:d,path:(0,o.readFormTableCellPath)(c.fieldKey,r.index,n.fieldKey),readonly:f,rowValues:_[r.index]??{},schema:p,uiSchema:m},`${b[r.index]??r.index}-${n.fieldKey}`),title:n.label||n.fieldKey})),O=f?void 0:{render:e=>[{disabled:()=>_.length<=v.minRows,icon:s.TrashIcon,iconType:`icon-only`,name:`刪除此列`,onClick:()=>w(e.index),variant:`destructive-ghost`}],width:56};return(0,a.jsxs)(`div`,{style:Pe,children:[(0,a.jsx)(`div`,{style:Ie,children:(0,a.jsx)(`div`,{style:{minWidth:c.columns.length*Le+(O?Re:0)},children:(0,a.jsx)(r.Table,{...O?{actions:O}:{},columns:D,dataSource:[...E],rowHeightPreset:`roomy`,showHeader:!0,size:`sub`})})}),f?null:(0,a.jsx)(`div`,{style:Fe,children:(0,a.jsx)(r.Button,{disabled:_.length>=v.maxRows,icon:s.PlusIcon,iconType:`leading`,onClick:C,size:`sub`,type:`button`,variant:`base-secondary`,children:c.addRowLabel||`新增一列`})})]})}function Ve({column:e,dataSourceContext:t,error:i,fieldPath:o,formData:s,initialFormData:l,initialRowValues:u,onChange:d,onDataSourceStateChange:f,optionSnapshots:p,path:m,readonly:h,rowValues:g,schema:_,uiSchema:v}){let y=Ge(g,e.fieldKey),b=x({context:t,field:e,fieldPath:o,formData:s,initialFormData:l,initialValue:u?Ge(u,e.fieldKey):void 0,optionSnapshots:p,readonly:h,row:{initialValues:u,values:g},schema:_,snapshotKey:m,uiSchema:v}),S=C(b),w=JSON.stringify({hasValue:b.hasValue,invalidValues:b.invalidValues,selectionExpired:b.selectionExpired===!0,status:b.status});return(0,n.useEffect)(()=>{if((0,c.isFormDataSourceFieldDefinition)(e))return f?.(m,{hasValue:b.hasValue,invalidValues:b.invalidValues,selectionExpired:b.selectionExpired===!0,status:b.status}),()=>{f?.(m,{hasValue:!1,invalidValues:[],status:`IDLE`})}},[f,m,w]),(0,a.jsxs)(`div`,{"data-form-field-key":m,style:ze,children:[Ke(e,y,h,(e,t)=>d(t),void 0,t,b,`sub`),i?(0,a.jsx)(r.Typography,{color:`text-error`,variant:`caption`,children:i}):null,S?(0,a.jsxs)(`div`,{style:Ne,children:[(0,a.jsx)(r.Typography,{color:b.status===`INVALID`||b.status===`UNAVAILABLE`?`text-error`:`text-neutral`,variant:`caption`,children:S}),b.status===`UNAVAILABLE`&&b.canRetry?(0,a.jsx)(r.Button,{onClick:b.retry,size:`sub`,type:`button`,variant:`base-ghost`,children:`重試`}):null]}):null]})}function He(e,t){return(0,o.readFormTableRows)(e)[t]}function Ue(e){return e.current+=1,`table-row-${e.current}`}function We(e,t,n){return n===void 0||!(0,c.isFormTableCellValue)(n)?Object.fromEntries(Object.entries(e).filter(([e])=>e!==t)):{...e,[t]:n}}function Ge(e,t){if(e&&Object.prototype.hasOwnProperty.call(e,t))return e[t]}function Ke(e,t,n,r,i,a,o,s=`main`){return(0,c.isFormDataSourceFieldDefinition)(e)?Je(e,t,n,r,a,o,s):qe(e,t,n,r,i,s)}function qe(e,t,n,i,s,l=`main`){let u=n&&(e.type===`text`||e.type===`textarea`)&&e.displayAs===`link`?le(t):null;if(u)return(0,a.jsx)(r.Typography,{color:`text-brand`,component:`span`,variant:`body`,children:(0,a.jsx)(`a`,{href:u.href,style:Me,...u.external?{"aria-label":`${u.href}${Ae}`,rel:`noopener noreferrer`,target:`_blank`,title:je}:{},children:u.href})});if(e.type===`textarea`)return(0,a.jsx)(r.Textarea,{onChange:t=>i(e.fieldKey,t.target.value),placeholder:e.placeholder??`請輸入多行文字`,readOnly:n,ref:Ee,rows:3,style:Te,value:Xe(t)});if(e.type===`boolean`)return(0,a.jsx)(r.Toggle,{checked:t===!0,disabled:n,label:`啟用`,onChange:t=>i(e.fieldKey,t.target.checked),size:l});if((0,c.isFormStaticOptionFieldDefinition)(e)&&e.type===`checkbox`){let s=e.options.map(o.readFieldOptionAsSelectOption);return(0,a.jsx)(r.Select,{mode:`multiple`,onChange:t=>i(e.fieldKey,t?.length?t.map(e=>e.id):void 0),options:s,placeholder:e.placeholder??`請選擇一或多個選項`,readOnly:n,size:l,value:s.filter(e=>ne(t).includes(e.id))})}if((0,c.isFormStaticOptionFieldDefinition)(e)){let s=e.options.map(o.readFieldOptionAsSelectOption);return(0,a.jsx)(r.Select,{onChange:t=>i(e.fieldKey,t?.id??void 0),options:s,placeholder:e.placeholder??`請選擇`,readOnly:n,size:l,value:(0,o.readSelectOption)(s,Xe(t))})}return e.type===`member`?(0,a.jsx)(W,{multiple:e.multiple===!0,name:e.fieldKey,onChange:t=>i(e.fieldKey,t),placeholder:e.placeholder,readonly:n,size:l,value:t}):e.type===`org_unit`?(0,a.jsx)(Z,{name:e.fieldKey,onChange:t=>i(e.fieldKey,t),placeholder:e.placeholder??Qe(e.type),readonly:n,size:l,value:t}):e.type===`file_upload`?(0,a.jsx)(re,{attachments:s?.attachments,field:e,onChange:t=>i(e.fieldKey,t),onDownloadAttachment:s?.onDownloadAttachment,onStateChange:t=>s?.onStateChange?.(e.fieldKey,t),onUploadAttachment:s?.onUploadAttachment,readonly:n,value:t}):e.type===`date`?(0,a.jsx)(r.DatePicker,{format:`YYYY-MM-DD`,fullWidth:!0,onChange:t=>i(e.fieldKey,(0,o.formatDatePickerValue)(t)),placeholder:e.placeholder??Qe(e.type),readOnly:n,value:(0,o.readDatePickerValue)(t)}):e.type===`datetime`?(0,a.jsx)(r.DateTimePicker,{formatDate:`YYYY-MM-DD`,formatTime:`HH:mm`,fullWidth:!0,hideSecond:!0,onChange:t=>i(e.fieldKey,(0,o.formatDateTimePickerValue)(t)),placeholderLeft:`選擇日期`,placeholderRight:`選擇時間`,readOnly:n,value:(0,o.readDatePickerValue)(t)}):e.type===`number`||e.type===`money`?(0,a.jsx)(r.Input,{fullWidth:!0,max:e.maximum,min:e.minimum,size:l,onChange:t=>i(e.fieldKey,(0,o.clampOptionalNumber)((0,o.parseOptionalNumberInput)(t.target.value),{max:e.maximum,min:e.minimum})),placeholder:e.placeholder??Qe(e.type),...n?{readonly:!0}:{},showSpinner:!0,value:Ze(t),variant:`measure`}):(0,a.jsx)(r.Input,{fullWidth:!0,onChange:t=>i(e.fieldKey,t.target.value),placeholder:e.placeholder??Qe(e.type),...n?{readonly:!0}:{},size:l,value:Xe(t),variant:`base`})}function Je(e,t,n,i,s,l,u=`main`){let d=l.options.map(o.readFieldOptionAsSelectOption),f=(0,o.readSelectedFormDataSourceOptions)(t,l.options).map(o.readFieldOptionAsSelectOption),p=l.status===`LOADING`,m=l.status===`WAITING_FOR_DEPENDENCIES`,h=!!s&&!n,g=n||m,_=n;return e.type===`autocomplete`?(0,c.readFormFieldSelectionMode)(e)===`multiple`?(0,a.jsx)(r.AutoComplete,{asyncData:h,clearSearchText:!0,disabled:_,disabledOptionsFilter:h,globalPortal:!0,loading:p,mode:`multiple`,onChange:t=>i(e.fieldKey,t.length?t.map(e=>e.id):void 0),onReachBottom:l.hasNextPage?l.onReachBottom:void 0,onSearch:h?l.onSearch:void 0,options:d,placeholder:e.placeholder??`請輸入或選擇`,readOnly:n,searchDebounceTime:300,size:u,value:f}):(0,a.jsx)(r.AutoComplete,{asyncData:h,clearSearchText:!0,disabled:_,disabledOptionsFilter:h,globalPortal:!0,loading:p,mode:`single`,onChange:t=>i(e.fieldKey,t?.id??void 0),onReachBottom:l.hasNextPage?l.onReachBottom:void 0,onSearch:h?l.onSearch:void 0,options:d,placeholder:e.placeholder??`請輸入或選擇`,readOnly:n,searchDebounceTime:300,size:u,value:f[0]??null}):e.type===`radio`?(0,a.jsx)(r.RadioGroup,{disabled:g,name:e.fieldKey,onChange:t=>i(e.fieldKey,t.target.value||void 0),options:d,value:Xe(t)}):e.type===`checkbox`?(0,a.jsx)(r.CheckboxGroup,{disabled:g,name:e.fieldKey,onChange:t=>i(e.fieldKey,t.target.values.length?t.target.values:void 0),options:d.map(e=>({label:e.name,value:e.id})),value:[...ne(t)]}):(0,c.readFormFieldSelectionMode)(e)===`multiple`?(0,a.jsx)(r.Select,{disabled:g,loading:p,mode:`multiple`,onChange:t=>i(e.fieldKey,t.length?t.map(e=>e.id):void 0),onReachBottom:l.hasNextPage?l.onReachBottom:void 0,options:d,placeholder:e.placeholder??`請選擇一或多個選項`,readOnly:n,size:u,value:f}):(0,a.jsx)(r.Select,{disabled:g,loading:p,onChange:t=>i(e.fieldKey,t?.id??void 0),onReachBottom:l.hasNextPage?l.onReachBottom:void 0,options:d,placeholder:e.placeholder??`請選擇`,readOnly:n,size:u,value:f[0]??null})}function Ye(e,t){return{FULL:12,HALF:6,THIRD:4}[t.layout.find(t=>t.fieldKey===e.fieldKey)?.width??`FULL`]}function Xe(e){return typeof e==`string`?e:``}function Ze(e){return typeof e==`number`?String(e):``}function Qe(e){return{boolean:``,autocomplete:`請輸入或選擇`,checkbox:`請選擇一或多個選項`,date:`請選擇日期`,datetime:`請選擇日期與時間`,file_upload:`請上傳附件`,member:`搜尋姓名或信箱`,money:`請輸入金額`,number:`請輸入數字`,org_unit:`搜尋組織名稱`,radio:`請選擇一個選項`,select:`請選擇一個選項`,table:``,text:`請輸入文字`,textarea:`請輸入多行文字`}[e]}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return x}});
|
|
6
|
-
//# sourceMappingURL=FormRendererView-B-xycC9S.cjs.map
|