{
  "docId": "019de06f-a937-74e5-a93a-c869a1890818",
  "docSlug": "db1818cdab816d6807094fc88536c9a2",
  "documentTitle": "Roblox | Product Presentation Deck | 29 slides",
  "authorId": "roblox",
  "authorName": "Roblox",
  "documentKindSlug": "conference-presentation",
  "documentKindLabel": "Conference presentation",
  "sourceTypeSlug": "investor_relations",
  "sourceTypeLabel": "Investor relations",
  "presentationDate": "2018-07-01 00:00:00",
  "orientation": "landscape",
  "aspectRatio": 1.7927171,
  "pageNumber": 23,
  "pageCount": 29,
  "prevPage": 22,
  "nextPage": 24,
  "slideType": "other",
  "function": "present_solution",
  "density": "dense",
  "nDataPoints": 0,
  "notes": "The slide shows four steps: creating a reducer, creating a store, subscribing to changes, and dispatching actions.",
  "elementsJson": null,
  "metadataConfidence": 0.9,
  "imagePath": null,
  "slideHref": "/slides/019de06f-a937-74e5-a93a-c869a1890818/23",
  "deckHref": "/decks/019de06f-a937-74e5-a93a-c869a1890818",
  "deckJsonHref": "/decks/019de06f-a937-74e5-a93a-c869a1890818.json",
  "deckAnchorHref": "/decks/019de06f-a937-74e5-a93a-c869a1890818#slide-23",
  "components": [
    {
      "bbox": {
        "h": 0.06,
        "w": 0.48,
        "x": 0.325,
        "y": 0.49
      },
      "kind": "other",
      "text": "local store = Store.new(reducer)",
      "attrs": null,
      "subkind": "unclassified",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "10f5a418-0985-4822-8116-35bcc64c4315",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.12,
        "w": 0.48,
        "x": 0.325,
        "y": 0.62
      },
      "kind": "other",
      "text": "store:subscribe(function(count)\n  textButton.Text = count\nend)",
      "attrs": null,
      "subkind": "unclassified",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "26636128-6f9b-434d-9da5-90f2b5a0100e",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.37,
        "w": 0.48,
        "x": 0.325,
        "y": 0.075
      },
      "kind": "other",
      "text": "local function reducer(state, action)\n  state = state or 0\n\n  if action.type == \"increment\" then\n    return state + 1\n  end\n\n  return state\nend",
      "attrs": null,
      "subkind": "unclassified",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "67de0e42-fd77-432a-bfe5-7b91ecadbcd8",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.12,
        "w": 0.48,
        "x": 0.325,
        "y": 0.81
      },
      "kind": "other",
      "text": "textButton.Activated:Connect(function()\n  store:dispatch({ type = \"increment\" })\nend)",
      "attrs": null,
      "subkind": "unclassified",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "6a66a8f2-b15b-4892-88ad-b91e5bacc131",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.2,
        "x": 0.12,
        "y": 0.08
      },
      "kind": "paragraph",
      "text": "Create a reducer:",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "8f03ebe6-b7f3-4584-a619-78fab947ca2d",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.1,
        "w": 0.3,
        "x": 0.15,
        "y": 0.62
      },
      "kind": "paragraph",
      "text": "Subscribe to state changes:",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "bc3856f7-1c87-4ceb-88e4-dd06ad63355d",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.18,
        "x": 0.14,
        "y": 0.5
      },
      "kind": "paragraph",
      "text": "Create a store:",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "d1330b5b-66c8-4b4a-b7ad-dd6b92040a4f",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.2,
        "x": 0.12,
        "y": 0.82
      },
      "kind": "paragraph",
      "text": "Dispatch actions:",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "e507c7f7-c32f-41a6-adbe-aa4b3e0693b6",
      "frameworkName": null,
      "frameworkSlug": null
    }
  ],
  "metrics": [],
  "tools": [],
  "frameworks": [],
  "arcBeats": [
    {
      "to": 24,
      "from": 18,
      "beatId": "6a595c98-d8a9-4487-ab18-da553cdcbd7b",
      "arcName": "The Consultant's Gambit",
      "arcSlug": "consultants-gambit",
      "beatName": "Solution & Approach",
      "beatSlug": "consultants-gambit-solution-approach",
      "evidence": "The deck presents solutions and demonstrates their effectiveness.",
      "position": 2,
      "confidence": 0.8,
      "parentBeatName": "Turn",
      "parentBeatSlug": "turn"
    },
    {
      "to": 23,
      "from": 19,
      "beatId": "c834f6a1-de32-4eed-b670-978affb4f333",
      "arcName": "The Consultant's Gambit",
      "arcSlug": "consultants-gambit",
      "beatName": "Evidence & Proof",
      "beatSlug": "consultants-gambit-evidence-proof",
      "evidence": "The deck provides evidence and examples to support the solutions.",
      "position": 3,
      "confidence": 0.8,
      "parentBeatName": "Evidence",
      "parentBeatSlug": "evidence"
    }
  ],
  "loops": [],
  "imagePathAlt": null,
  "thumbSrc": null,
  "thumbSrcAlt": null,
  "locked": true
}