Skip to content

Instantly share code, notes, and snippets.

@Gooseus
Last active April 5, 2022 07:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Gooseus/0ad5b1284e8f51738cf97123ad7ac1c8 to your computer and use it in GitHub Desktop.
Save Gooseus/0ad5b1284e8f51738cf97123ad7ac1c8 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
// - XState (all XState exports)
const businessApprovalMachine = {
id: 'contract-business-approval',
initial: 'checking_tier5',
states: {
checking_tier5: {
on: {
APPROVED: 'checking_tier4',
REQUEST_APPROVAL: 'requesting_tier5',
}
},
requesting_tier5: {
on: {
APPROVED: 'checking_tier4',
APPROVED_WITH_CHANGES: 'confirming_tier5_changes',
REJECTED: '#contract.business_rejected',
}
},
confirming_tier5_changes: {
on: {
APPROVE: 'checking_tier4',
REJECT: '#contract.business_rejected',
EDIT: '#contract-create.editing'
}
},
checking_tier4: {
on: {
APPROVED: 'checking_tier3',
REQUEST_APPROVAL: 'requesting_tier4'
}
},
requesting_tier4: {
on: {
APPROVED: 'checking_tier3',
APPROVED_WITH_CHANGES: 'confirming_tier4_changes',
REJECTED: '#contract.business_rejected',
}
},
confirming_tier4_changes: {
on: {
APPROVE: 'checking_tier3',
REJECT: '#contract.business_rejected',
EDIT: '#contract-create.editing'
}
},
checking_tier3: {
on: {
APPROVED: 'checking_tier2',
REQUEST_APPROVAL: 'requesting_tier3'
}
},
requesting_tier3: {
on: {
APPROVED: 'checking_tier2',
APPROVED_WITH_CHANGES: 'confirming_tier3_changes',
REJECTED: '#contract.business_rejected',
}
},
confirming_tier3_changes: {
on: {
APPROVE: 'checking_tier2',
REJECT: '#contract.business_rejected',
EDIT: '#contract-create.editing'
}
},
checking_tier2: {
on: {
APPROVED: 'checking_tier1',
REQUEST_APPROVAL: 'requesting_tier2'
}
},
requesting_tier2: {
on: {
APPROVED: 'checking_tier1',
APPROVED_WITH_CHANGES: 'confirming_tier2_changes',
REJECTED: '#contract.business_rejected',
}
},
confirming_tier2_changes: {
on: {
APPROVE: 'checking_tier1',
REJECT: '#contract.business_rejected',
EDIT: '#contract-create.editing'
}
},
checking_tier1: {
on: {
APPROVED: 'checking_tier0',
REQUEST_APPROVAL: 'requesting_tier1'
}
},
requesting_tier1: {
on: {
APPROVED: 'checking_tier0',
APPROVED_WITH_CHANGES: 'confirming_tier1_changes',
REJECTED: '#contract.business_rejected',
}
},
confirming_tier1_changes: {
on: {
APPROVE: 'checking_tier0',
REJECT: '#contract.business_rejected',
EDIT: '#contract-create.editing'
}
},
checking_tier0: {
on: {
APPROVED: '#contract.peer_review',
REQUEST_APPROVAL: '#contract.legal_review'
}
},
}
};
const createContractMachine = {
id: 'contract-create',
initial: 'saved',
states: {
saved: {
on: {
PREVIEW: 'previewing',
EDIT: 'editing',
}
},
editing: {
on: {
SAVE: 'saving'
}
},
saving: {
on: {
SAVED: 'saved',
EDIT: 'editing',
}
},
previewing: {
on: {
EDIT: 'editing',
SUBMIT: '#contract.reviewing'
}
},
}
};
const peerReviewMachine = {
initial: 'requesting_peer',
states: {
requesting_peer: {
on: {
APPROVED: '#contract.contract_execute',
REJECT: '#contract.peer_rejected',
}
}
}
};
const contractExecuteMachine = {
initial: 'ready_for_client',
states: {
ready_for_client: {
on: {
SEND_TO_CLIENT: 'wait_for_signature'
}
},
wait_for_signature: {
on: {
SIGNATURE_RECEIVED: '#contract.contract_finalized'
}
}
}
};
const legalFlowMachine = {
id: 'contract-legal-approval',
initial: 'pending_legal',
states: {
pending_legal: {
on: {
DOWNLOAD_DOCUMENT: 'document_downloaded'
}
},
document_downloaded: {
on: {
LEGAL_UPLOAD_MARKUP: 'markup_uploaded'
}
},
markup_uploaded: {
on: {
LEGAL_UPLOAD_CLEAN: 'clean_uploaded',
REJECT_LEGAL_MARKUP: 'markup_rejected'
}
},
markup_rejected: {
on: {
LEGAL_UPLOAD_MARKUP: 'markup_uploaded',
REJECTED: '#contract.legal_rejected'
}
},
clean_uploaded: {
on: {
ACCEPT_LEGAL_CLEAN: '#contract.reviewing'
}
}
}
};
const contractMachine = Machine({
id: 'contract',
initial: 'initializing',
states: {
initializing: {
on: {
INITIALIZED: 'contract_create'
}
},
contract_create: {
...createContractMachine
},
reviewing: {
on: {
REQUEST_BUSINESS: 'business_review',
REQUEST_LEGAL: 'legal_review',
REQUEST_PEER: 'peer_review',
}
},
business_review: {
...businessApprovalMachine
},
business_rejected: {
on: {
EDIT: '#contract-create.saved'
}
},
legal_review: {
...legalFlowMachine
},
legal_rejected: {
},
peer_review: {
...peerReviewMachine
},
peer_rejected: {
on: {
EDIT: '#contract-create.saved'
}
},
contract_execute: {
...contractExecuteMachine
},
contract_finalized: {
type: 'final'
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment