Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.74 KB | None | 0 0
  1. // Available variables:
  2. // - Machine
  3. // - interpret
  4. // - assign
  5. // - send
  6. // - sendParent
  7. // - spawn
  8. // - raise
  9. // - actions
  10. // - XState (all XState exports)
  11.  
  12. const fetchMachine = Machine(
  13. {
  14. id: "retailTradeDesk",
  15. initial: "entry",
  16. context: {
  17. loggedIn: false,
  18. allCampaigns: [],
  19. editing: {}
  20. },
  21. states: {
  22. entry: {
  23. on: {
  24. "": [
  25. {
  26. target: "#site",
  27. cond: "isLoggedIn"
  28. },
  29. {
  30. target: "login"
  31. }
  32. ]
  33. }
  34. },
  35. login: {
  36. initial: "loginScreen",
  37. id: "login",
  38. states: {
  39. loginScreen: {
  40. on: {
  41. SUCCESS: {
  42. target: "#site",
  43. actions: ["logIn"]
  44. },
  45. FAILURE: ""
  46. }
  47. }
  48. }
  49. },
  50. site: {
  51. initial: "dashboard",
  52. entry: ["fetchAllCampaigns", "fetchAllAudiences"],
  53. id: "site",
  54. on: {
  55. LOGOUT: {
  56. actions: ["logOut", 'clearCampaign'],
  57. target: "#login"
  58. }
  59. },
  60. states: {
  61. dashboard: {
  62. id: "dashboard",
  63. on: {
  64. CREATE_CAMPAIGN: {
  65. target: "createEditCampaign",
  66. actions: ["clearCampaign"]
  67. }
  68. }
  69. },
  70. createEditCampaign: {
  71. initial: "chooseAudience",
  72. states: {
  73. chooseAudience: {
  74. on: {
  75. NEXT: {
  76. target: "chooseBudget",
  77. actions: ["setCampaignAudience"]
  78. }
  79. }
  80. },
  81. chooseBudget: {
  82. on: {
  83. NEXT: {
  84. target: "chooseAsset",
  85. actions: ["setCampaignBudget"]
  86. }
  87. }
  88. },
  89. chooseAsset: {
  90. on: {
  91. CREATE_NEW_ASSET: "#createAsset",
  92. SELECT_EXISTING_ASSET: "#selectFromAssLibrary"
  93. }
  94. },
  95. createAsset: {
  96. id: "createAsset",
  97. initial: "selectAssetToUpload",
  98. states: {
  99. selectAssetToUpload: {
  100. on: {
  101. SUCCESS: "setNameAndDescription"
  102. }
  103. },
  104. setNameAndDescription: {
  105. on: {
  106. SUCCESS: "tryUpload"
  107. }
  108. },
  109. tryUpload: {
  110. on: {
  111. SUCCESS: {
  112. target: "#selectFromAssLibrary",
  113. actions: ["uploadToS3"]
  114. }
  115. }
  116. }
  117. }
  118. },
  119. selectFromAssetLibrary: {
  120. id: "selectFromAssLibrary",
  121. entry: ["fetchAllAssets"],
  122. on: {
  123. PICK_ASSET: {
  124. target: "#reviewCampaign",
  125. actions: ["setCampaignAsset"]
  126. }
  127. }
  128. }
  129. }
  130. },
  131. reviewCampaign: {
  132. id: "reviewCampaign",
  133. on: {
  134. LAUNCH_CAMPAIGN: {
  135. target: "dashboard",
  136. actions: ["launchCampaign", "clearCampaign"]
  137. },
  138. CONTINUE_EDITING: "createEditCampaign",
  139. CANCEL: {
  140. target: "dashboard",
  141. actions: ["clearCampaign"]
  142. }
  143. }
  144. }
  145. }
  146. }
  147. }
  148. },
  149. {
  150. actions: {
  151. launchCampaign: context => {
  152. context.allCampaigns = [...context.allCampaigns, context.editing];
  153. },
  154. clearCampaign: context => {
  155. context.editing = {
  156. audience: "",
  157. budget: "",
  158. asset: ""
  159. };
  160. },
  161. setCampaignAudience: context => {
  162. context.editing.audience = "big";
  163. },
  164. setCampaignBudget: context => {
  165. context.editing.budget = "huge";
  166. },
  167. setCampaignAsset: context => {
  168. context.editing.asset = "pic.jpg";
  169. },
  170. uploadToS3: () => {
  171. console.log("Upload file to AWS");
  172. },
  173. fetchAllAssets: () => {
  174. console.log("Fetching all assets from AWS");
  175. },
  176. fetchAllCampaigns: () => {
  177. console.log("Fetching all campaigns...");
  178. },
  179. fetchAllAudiences: () => {
  180. console.log("Fetching all audiences...");
  181. },
  182. logIn: ctx => {
  183. console.log("Log in.");
  184. ctx.loggedIn = true;
  185. },
  186. logOut: ctx => {
  187. ctx.loggedIn = false;
  188. }
  189. },
  190. guards: {
  191. isLoggedIn: ctx => ctx.loggedIn
  192. }
  193. }
  194. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement