Skip to content

Instantly share code, notes, and snippets.

@riccardo-forina
Last active March 26, 2021 17:35
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 riccardo-forina/c7d7da3772a750a97dc17b908432c8d4 to your computer and use it in GitHub Desktop.
Save riccardo-forina/c7d7da3772a750a97dc17b908432c8d4 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const fetchKafkaInstances = (_authToken) => new Promise((resolve) => setTimeout(() => resolve([{ id: 1, name: 'test' }]), 2000));
const kafkaInstancesMachine = Machine({
id: 'kafka-instances',
initial: 'loading',
states: {
loading: {
invoke: {
id: 'fetchKafkaInstances',
src: (context) => fetchKafkaInstances(context.authToken),
onDone: {
target: 'ready',
actions: assign({ instances: (_context, event) => event.data }),
},
onError: {
target: 'failure',
actions: assign({ error: (_context, event) => event.data }),
},
},
},
failure: {},
ready: {
on: {
SELECT: {
target: "ready",
actions: assign({
selectedInstance: (context, event) => {
var _a, _b;
return (_b = (_a = context.instances) === null || _a === void 0 ? void 0 : _a.find(i => i.id == event.data)) === null || _b === void 0 ? void 0 : _b.id;
}
})
}
}
},
selected: {
type: "final",
data: (context) => ({
selectedInstance: context.selectedInstance
})
},
},
on: {
NEXT: {
target: "selected",
cond: (context) => context.selectedInstance !== undefined
}
}
});
const configuratorMachine = Machine({
id: 'connector-configurator',
initial: 'selectKafka',
context: {
authToken: "asdasdasd",
selectedKafkaInstance: undefined
},
states: {
selectKafka: {
invoke: {
id: 'select-kafka-instance',
src: kafkaInstancesMachine,
data: (context) => ({
authToken: context.authToken,
selectedInstance: context.selectedKafkaInstance
}),
onDone: {
target: "selectCluster",
actions: assign({
selectedKafkaInstance: (_context, event) => event.data.selectedInstance
})
}
},
},
selectCluster: {
on: {
NEXT: 'selectConnector',
PREV: 'selectKafka',
},
},
selectConnector: {
on: {
NEXT: 'configureConnector',
PREV: 'selectCluster',
},
},
configureConnector: {
on: {
NEXT: 'reviewConfiguration',
PREV: 'selectConnector',
},
},
reviewConfiguration: {
on: {
NEXT: 'complete',
PREV: 'configureConnector',
},
},
complete: {
type: 'final',
},
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment