@@ -49,6 +49,13 @@ export type EnvelopeSigner = Omit<Partial<Pick<SignerDetailRecord, 'me' | 'signR
4949 sign_request_uuid ?: string | null
5050}
5151
52+ type EnvelopeOwnSigner = EnvelopeSigner & {
53+ me : true
54+ signRequestId : number
55+ sign_request_uuid : string
56+ level : 'top' | 'file'
57+ }
58+
5259export type EnvelopeFileForSubmission = {
5360 signers ?: EnvelopeSigner [ ]
5461}
@@ -142,7 +149,10 @@ export function getEnvelopeSubmitRequests({
142149 continue
143150 }
144151
145- const signerElements = elements . filter ( ( element ) => element . signRequestId === signer . signRequestId )
152+ const matchingElements = elements . filter ( ( element ) => element . signRequestId === signer . signRequestId )
153+ const signerElements = signer . level === 'top' && matchingElements . length === 0
154+ ? elements
155+ : matchingElements
146156 requests . push ( {
147157 signRequestUuid : signer . sign_request_uuid ,
148158 payload : buildSubmitSignaturePayload ( {
@@ -161,15 +171,12 @@ function getEnvelopeOwnSigners(document: SignDocumentForSubmission): Array<Envel
161171 me : true
162172 signRequestId : number
163173 sign_request_uuid : string
174+ level : 'top' | 'file'
164175} > {
165- const ownSigners : Array < EnvelopeSigner & {
166- me : true
167- signRequestId : number
168- sign_request_uuid : string
169- } > = [ ]
176+ const ownSigners : EnvelopeOwnSigner [ ] = [ ]
170177 const seen = new Set < string > ( )
171178
172- const addSigner = ( signer : EnvelopeSigner ) => {
179+ const addSigner = ( signer : EnvelopeSigner , level : 'top' | 'file' ) => {
173180 if ( ! isOwnEnvelopeSigner ( signer ) ) {
174181 return
175182 }
@@ -179,30 +186,47 @@ function getEnvelopeOwnSigners(document: SignDocumentForSubmission): Array<Envel
179186 }
180187
181188 seen . add ( signer . sign_request_uuid )
182- ownSigners . push ( signer )
189+ ownSigners . push ( {
190+ ...signer ,
191+ level,
192+ } )
193+ }
194+
195+ const topOwnSigners : EnvelopeSigner [ ] = [ ]
196+ for ( const signer of document . signers ?? [ ] ) {
197+ if ( isOwnEnvelopeSigner ( signer ) ) {
198+ topOwnSigners . push ( signer )
199+ }
183200 }
184201
185- const fileOwnSigners : EnvelopeSigner [ ] = [ ]
202+ if ( topOwnSigners . length > 0 ) {
203+ for ( const signer of topOwnSigners ) {
204+ addSigner ( signer , 'top' )
205+ }
206+
207+ return ownSigners
208+ }
209+
210+ const fileOwnSigners : EnvelopeOwnSigner [ ] = [ ]
186211 for ( const file of document . files ?? [ ] ) {
187212 for ( const signer of file . signers ?? [ ] ) {
188213 if ( isOwnEnvelopeSigner ( signer ) ) {
189- fileOwnSigners . push ( signer )
214+ fileOwnSigners . push ( {
215+ ...signer ,
216+ level : 'file' ,
217+ } )
190218 }
191219 }
192220 }
193221
194222 if ( fileOwnSigners . length > 0 ) {
195223 for ( const signer of fileOwnSigners ) {
196- addSigner ( signer )
224+ addSigner ( signer , 'file' )
197225 }
198226
199227 return ownSigners
200228 }
201229
202- for ( const signer of document . signers ?? [ ] ) {
203- addSigner ( signer )
204- }
205-
206230 return ownSigners
207231}
208232
0 commit comments