Last active
June 10, 2021 20:06
-
-
Save NoMan2000/4f34af639ff08245149fea5d5ac0b132 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var AdCreationPages; | |
(function (AdCreationPages) { | |
AdCreationPages["CHOOSE_ORGANIC_OR_PAID"] = "organicOrPaid"; | |
AdCreationPages["AD_CREATION_FORM"] = "adCreationForm"; | |
AdCreationPages["ORGANIC_POSTS"] = "organicPosts"; | |
AdCreationPages["PAID_POSTS"] = "paidPosts"; | |
AdCreationPages["PAID_POSTS_CURATED"] = "paidPostsCuration"; | |
AdCreationPages["PAID_POSTS_BESPOKE"] = "paidPostsBespoke"; | |
AdCreationPages["POSTS_PUBLISHED"] = "postsPublished"; | |
AdCreationPages["SAVE_DRAFT"] = "saveDraft"; | |
})(AdCreationPages || (AdCreationPages = {})); | |
var PaidPostsCurationTypes; | |
(function (PaidPostsCurationTypes) { | |
PaidPostsCurationTypes["CREDITS"] = "credits"; | |
PaidPostsCurationTypes["PRODUCTS"] = "products"; | |
PaidPostsCurationTypes["COMPETITORS"] = "competitors"; | |
PaidPostsCurationTypes["AUDIENCE"] = "audience"; | |
})(PaidPostsCurationTypes || (PaidPostsCurationTypes = {})); | |
var PaidPostsBespokeTypes; | |
(function (PaidPostsBespokeTypes) { | |
PaidPostsBespokeTypes["OBJECTIVES"] = "objectives"; | |
PaidPostsBespokeTypes["AUDIENCE"] = "audience"; | |
PaidPostsBespokeTypes["CREATIVE"] = "creative"; | |
PaidPostsBespokeTypes["PAYMENT"] = "payment"; | |
PaidPostsBespokeTypes["OVERVIEW"] = "overview"; | |
})(PaidPostsBespokeTypes || (PaidPostsBespokeTypes = {})); | |
// States specific to an action. | |
var AdCreationEventNames; | |
(function (AdCreationEventNames) { | |
AdCreationEventNames["CHOOSE_ORGANIC_OR_PAID"] = "chooseOrganicOrPaid"; | |
// Can do one of the two below | |
AdCreationEventNames["CHOOSE_ORGANIC"] = "chooseOrganic"; | |
AdCreationEventNames["CHOOSE_PAID"] = "choosePaid"; | |
// If they choose paid, can do one of the two below. | |
AdCreationEventNames["CHOOSE_PAID_CURATED"] = "choosePaidCurated"; | |
AdCreationEventNames["CHOOSE_PAID_BESPOKE"] = "choosePaidBespoke"; | |
// If they choose curated, they can choose one of the four paths below | |
AdCreationEventNames["CHOOSE_PAID_CURATED_CREDITS"] = "choosePaidCuratedCredits"; | |
AdCreationEventNames["CHOOSE_PAID_CURATED_PRODUCTS"] = "choosePaidCuratedProducts"; | |
AdCreationEventNames["CHOOSE_PAID_CURATED_COMPETITORS"] = "choosePaidCuratedCompetitors"; | |
AdCreationEventNames["CHOOSE_PAID_CURATED_AUDIENCE"] = "choosePaidCuratedAudience"; | |
// Final curated states | |
AdCreationEventNames["CHOOSE_PAID_CURATED_POST_DETAILS"] = "choosePaidCuratedPostDetails"; | |
// If they choose bespoke, they can choosen one of the five paths below. | |
AdCreationEventNames["CHOOSE_PAID_BESPOKE_OBJECTIVES"] = "choosePaidBespokeObjectives"; | |
AdCreationEventNames["CHOOSE_PAID_BESPOKE_AUDIENCE"] = "choosePaidBespokeAudience"; | |
AdCreationEventNames["CHOOSE_PAID_BESPOKE_CREATIVE"] = "choosePaidBespokeCreative"; | |
AdCreationEventNames["CHOOSE_PAID_BESPOKE_PAYMENT"] = "choosePaidBespokePayment"; | |
AdCreationEventNames["CHOOSE_PAID_BESPOKE_OVERVIEW"] = "choosePaidBespokeOverview"; | |
AdCreationEventNames["CHOOSE_PAID_BESPOKE_POST_DETAILS"] = "choosePaidBespokePostDetails"; | |
// Paid final state. | |
AdCreationEventNames["SUBMITTED_PREVIEW"] = "submittedPreview"; | |
// GENERIC, will require useContext to make it do what it needs to. | |
AdCreationEventNames["FETCH"] = "fetch"; | |
// FINAL PAGE | |
AdCreationEventNames["DONE"] = "DONE"; | |
})(AdCreationEventNames || (AdCreationEventNames = {})); | |
var ExternalMachineStates; | |
(function (ExternalMachineStates) { | |
ExternalMachineStates["FETCH_ACTION"] = "FETCH_ACTION"; | |
ExternalMachineStates["RESOLVE_ACTION"] = "RESOLVE_ACTION"; | |
ExternalMachineStates["REJECT_ACTION"] = "REJECT_ACTION"; | |
})(ExternalMachineStates || (ExternalMachineStates = {})); | |
var AdGuards; | |
(function (AdGuards) { | |
AdGuards["IS_FETCHING"] = "isFetching"; | |
AdGuards["HAS_FAILED"] = "hasFailed"; | |
AdGuards["NOT_FAILING"] = "notFailing"; | |
})(AdGuards || (AdGuards = {})); | |
const isFetching = (context) => { | |
return context.isLoading; | |
}; | |
const hasFailed = (context) => { | |
return Boolean(context.errorMessage); | |
}; | |
const successActions = [ | |
assign({ | |
isLoading: false, | |
}), | |
send(ExternalMachineStates.RESOLVE_ACTION), | |
assign({ | |
errorMessage: '', | |
results: (_ctx, evt) => { | |
return evt.data; | |
}, | |
}), | |
]; | |
const failActions = [ | |
assign({ | |
isLoading: false, | |
}), | |
send(ExternalMachineStates.REJECT_ACTION), | |
assign({ | |
results: [], | |
errorMessage: (_ctx, evt) => { | |
return evt.data || 'Unknown error occurred!'; | |
}, | |
}), | |
]; | |
const targetCreator = (name) => { | |
return [ | |
{ | |
id: `${name}_REQUEST`, | |
actions: [ | |
assign({ | |
isLoading: true, | |
}), | |
send(ExternalMachineStates.FETCH_ACTION), | |
], | |
on: { | |
[`${name}_FAILURE`]: { | |
actions: failActions, | |
target: `${name}_FAILURE`, | |
}, | |
[`${name}_SUCCESS`]: { | |
actions: successActions, | |
target: `${name}_SUCCESS`, | |
cond: AdGuards.NOT_FAILING, | |
}, | |
}, | |
}, | |
{ | |
id: `${name}_FAILURE`, | |
actions: failActions, | |
on: { | |
[`${name}_REQUEST`]: { | |
actions: [ | |
assign({ | |
isLoading: true, | |
errorMessage: '', | |
}), | |
], | |
target: `#${name}_REQUEST`, | |
}, | |
}, | |
}, | |
]; | |
}; | |
const stateCreator = (name, onArr) => { | |
const on = onArr.reduce((acc, curr) => { | |
return Object.assign(Object.assign({}, acc), { [curr]: { target: `#${curr}` } }); | |
}, {}); | |
const targets = targetCreator(name); | |
return { | |
[`${name}_REQUEST`]: Object.assign({}, targets[0]), | |
[`${name}_FAILURE`]: Object.assign({}, targets[1]), | |
[`${name}_SUCCESS`]: { | |
id: `${name}_SUCCESS`, | |
actions: successActions, | |
on, | |
}, | |
}; | |
}; | |
const AD_CREATION_MACHINE_ID = 'AdCreationMachine'; | |
const defaultCtx = { | |
results: [], | |
errorMessage: '', | |
isLoading: false, | |
}; | |
const adCreationMachine = Machine({ | |
id: AD_CREATION_MACHINE_ID, | |
initial: AdCreationEventNames.CHOOSE_ORGANIC_OR_PAID, | |
context: Object.assign({}, defaultCtx), | |
states: { | |
[AdCreationEventNames.CHOOSE_ORGANIC_OR_PAID]: { | |
id: AdCreationEventNames.CHOOSE_ORGANIC_OR_PAID, | |
initial: `${AdCreationEventNames.CHOOSE_ORGANIC_OR_PAID}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_ORGANIC_OR_PAID, [ | |
AdCreationEventNames.CHOOSE_ORGANIC, | |
AdCreationEventNames.CHOOSE_PAID, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_ORGANIC]: { | |
id: AdCreationEventNames.CHOOSE_ORGANIC, | |
initial: `${AdCreationEventNames.CHOOSE_ORGANIC}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_ORGANIC, [ | |
AdCreationEventNames.CHOOSE_ORGANIC_OR_PAID, | |
AdCreationEventNames.DONE, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID]: { | |
id: AdCreationEventNames.CHOOSE_PAID, | |
initial: `${AdCreationEventNames.CHOOSE_PAID}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID, [ | |
AdCreationEventNames.CHOOSE_ORGANIC_OR_PAID, | |
AdCreationEventNames.CHOOSE_PAID_CURATED, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_CURATED]: { | |
id: AdCreationEventNames.CHOOSE_PAID_CURATED, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_CURATED}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_CURATED, [ | |
AdCreationEventNames.CHOOSE_PAID, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_CREDITS, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_PRODUCTS, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_COMPETITORS, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_AUDIENCE, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_CURATED_CREDITS]: { | |
id: AdCreationEventNames.CHOOSE_PAID_CURATED_CREDITS, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_CURATED_CREDITS}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_CURATED_CREDITS, [ | |
AdCreationEventNames.CHOOSE_PAID_CURATED, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_CURATED_PRODUCTS]: { | |
id: AdCreationEventNames.CHOOSE_PAID_CURATED_PRODUCTS, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_CURATED_PRODUCTS}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_CURATED_PRODUCTS, [ | |
AdCreationEventNames.CHOOSE_PAID_CURATED, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_CURATED_COMPETITORS]: { | |
id: AdCreationEventNames.CHOOSE_PAID_CURATED_COMPETITORS, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_CURATED_COMPETITORS}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_CURATED_COMPETITORS, [ | |
AdCreationEventNames.CHOOSE_PAID_CURATED, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_CURATED_AUDIENCE]: { | |
id: AdCreationEventNames.CHOOSE_PAID_CURATED_AUDIENCE, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_CURATED_AUDIENCE}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_CURATED_AUDIENCE, [ | |
AdCreationEventNames.CHOOSE_PAID_CURATED, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_CURATED_POST_DETAILS]: { | |
id: AdCreationEventNames.CHOOSE_PAID_CURATED_POST_DETAILS, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_CURATED_POST_DETAILS}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_CURATED_POST_DETAILS, [AdCreationEventNames.SUBMITTED_PREVIEW])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_BESPOKE]: { | |
id: AdCreationEventNames.CHOOSE_PAID_BESPOKE, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_BESPOKE}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_BESPOKE, [ | |
AdCreationEventNames.CHOOSE_PAID, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE_OBJECTIVES, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE_AUDIENCE, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_COMPETITORS, | |
AdCreationEventNames.CHOOSE_PAID_CURATED_AUDIENCE, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE_OVERVIEW, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_BESPOKE_OBJECTIVES]: { | |
id: AdCreationEventNames.CHOOSE_PAID_BESPOKE_OBJECTIVES, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_BESPOKE_OBJECTIVES}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_BESPOKE_OBJECTIVES, [ | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_BESPOKE_AUDIENCE]: { | |
id: AdCreationEventNames.CHOOSE_PAID_BESPOKE_AUDIENCE, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_BESPOKE_AUDIENCE}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_BESPOKE_AUDIENCE, [ | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_BESPOKE_CREATIVE]: { | |
id: AdCreationEventNames.CHOOSE_PAID_BESPOKE_CREATIVE, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_BESPOKE_CREATIVE}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_BESPOKE_CREATIVE, [ | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_BESPOKE_PAYMENT]: { | |
id: AdCreationEventNames.CHOOSE_PAID_BESPOKE_PAYMENT, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_BESPOKE_PAYMENT}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_BESPOKE_PAYMENT, [ | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_BESPOKE_OVERVIEW]: { | |
id: AdCreationEventNames.CHOOSE_PAID_BESPOKE_OVERVIEW, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_BESPOKE_OVERVIEW}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_BESPOKE_OVERVIEW, [ | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE, | |
AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS, | |
])), | |
}, | |
[AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS]: { | |
id: AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS, | |
initial: `${AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.CHOOSE_PAID_BESPOKE_POST_DETAILS, [AdCreationEventNames.SUBMITTED_PREVIEW])), | |
}, | |
[AdCreationEventNames.SUBMITTED_PREVIEW]: { | |
id: AdCreationEventNames.SUBMITTED_PREVIEW, | |
initial: `${AdCreationEventNames.SUBMITTED_PREVIEW}_REQUEST`, | |
states: Object.assign({}, stateCreator(AdCreationEventNames.SUBMITTED_PREVIEW, [ | |
AdCreationEventNames.DONE, | |
])), | |
}, | |
[AdCreationEventNames.DONE]: { | |
id: AdCreationEventNames.DONE, | |
type: 'final', | |
}, | |
}, | |
}, { | |
guards: { | |
[AdGuards.IS_FETCHING]: (ctx) => { | |
return ctx.isLoading; | |
}, | |
[AdGuards.HAS_FAILED]: (ctx) => { | |
return Boolean(ctx.errorMessage); | |
}, | |
[AdGuards.NOT_FAILING]: (ctx) => { | |
return !ctx.errorMessage; | |
}, | |
}, | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment