-
Notifications
You must be signed in to change notification settings - Fork 4
Export
Ricardo Canastro edited this page Mar 6, 2022
·
2 revisions
Modeling statemachines might feel a bit abstract at times, having a way to visualize it and share with others is a major improvement on the developer experience.
Luckily for us, XState's visualizer is a wonderful tool. Automata exposes exportToXStateViz
that given a StateMachine
creates a javascript file with a XState machine.
Given the following state machine:
import 'package:automata/automata.dart';
final machine = StateMachine.create(
(g) => g
..initial<Inactive>()
..state<Inactive>(
builder: (g) => g..on<OnToggle, Active>()
)
..state<Active>(
builder: (g) => g..on<OnToggle, Inactive>()
),
),
id: 'my_machine',
);
If you call:
await exportToXStateViz(machine);
It will create a file named my_machine.dart
with the following content:
import { createMachine } from 'xstate';
const machine = createMachine(
{
id: 'my_machine',
type: 'compound',
initial: 'Inactive',
states: {
Inactive: {
id: '{RootState, Inactive}',
type: 'atomic',
on: {
OnToggle: {
target: '#{RootState, Active}',
},
},
},
Active: {
id: '{RootState, Active}',
type: 'atomic',
on: {
OnToggle: {
target: '#{RootState, Inactive}',
},
},
},
},
},
{
guards: {
canTransition: () => true,
},
}
);
Which you'll be able to copy to Stately's XState Visualizer.
Two notes about the generated content:
- We create a dummy guard that is used on every transition that has a transition defined
- We always use identifiers on our targets to be able to transition to parent compound state, see this issue