{"ast":null,"code":"import * as React from 'react';\nimport View from \"react-native-web/dist/exports/View\";\nimport StyleSheet from \"react-native-web/dist/exports/StyleSheet\";\nimport PortalManager from \"./PortalManager\";\nexport const PortalContext = React.createContext(null);\nexport default class PortalHost extends React.Component {\n  static displayName = 'Portal.Host';\n  componentDidMount() {\n    const manager = this.manager;\n    const queue = this.queue;\n    while (queue.length && manager) {\n      const action = queue.pop();\n      if (action) {\n        switch (action.type) {\n          case 'mount':\n            manager.mount(action.key, action.children);\n            break;\n          case 'update':\n            manager.update(action.key, action.children);\n            break;\n          case 'unmount':\n            manager.unmount(action.key);\n            break;\n        }\n      }\n    }\n  }\n  setManager = manager => {\n    this.manager = manager;\n  };\n  mount = children => {\n    const key = this.nextKey++;\n    if (this.manager) {\n      this.manager.mount(key, children);\n    } else {\n      this.queue.push({\n        type: 'mount',\n        key,\n        children\n      });\n    }\n    return key;\n  };\n  update = (key, children) => {\n    if (this.manager) {\n      this.manager.update(key, children);\n    } else {\n      const op = {\n        type: 'mount',\n        key,\n        children\n      };\n      const index = this.queue.findIndex(o => o.type === 'mount' || o.type === 'update' && o.key === key);\n      if (index > -1) {\n        this.queue[index] = op;\n      } else {\n        this.queue.push(op);\n      }\n    }\n  };\n  unmount = key => {\n    if (this.manager) {\n      this.manager.unmount(key);\n    } else {\n      this.queue.push({\n        type: 'unmount',\n        key\n      });\n    }\n  };\n  nextKey = 0;\n  queue = [];\n  render() {\n    return React.createElement(PortalContext.Provider, {\n      value: {\n        mount: this.mount,\n        update: this.update,\n        unmount: this.unmount\n      }\n    }, React.createElement(View, {\n      style: styles.container,\n      collapsable: false,\n      pointerEvents: \"box-none\"\n    }, this.props.children), React.createElement(PortalManager, {\n      ref: this.setManager\n    }));\n  }\n}\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1\n  }\n});","map":{"version":3,"names":["React","View","StyleSheet","PortalManager","PortalContext","createContext","PortalHost","Component","displayName","componentDidMount","manager","queue","length","action","pop","type","mount","key","children","update","unmount","setManager","nextKey","push","op","index","findIndex","o","render","createElement","Provider","value","style","styles","container","collapsable","pointerEvents","props","ref","create","flex"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/react-native-paper/src/components/Portal/PortalHost.tsx"],"sourcesContent":["import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\n\nimport PortalManager from './PortalManager';\n\nexport type Props = {\n  children: React.ReactNode;\n};\n\ntype Operation =\n  | { type: 'mount'; key: number; children: React.ReactNode }\n  | { type: 'update'; key: number; children: React.ReactNode }\n  | { type: 'unmount'; key: number };\n\nexport type PortalMethods = {\n  mount: (children: React.ReactNode) => number;\n  update: (key: number, children: React.ReactNode) => void;\n  unmount: (key: number) => void;\n};\n\nexport const PortalContext = React.createContext<PortalMethods>(null as any);\n\n/**\n * Portal host renders all of its children `Portal` elements.\n * For example, you can wrap a screen in `Portal.Host` to render items above the screen.\n * If you're using the `Provider` component, it already includes `Portal.Host`.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Text } from 'react-native';\n * import { Portal } from 'react-native-paper';\n *\n * const MyComponent = () => (\n *   <Portal.Host>\n *     <Text>Content of the app</Text>\n *   </Portal.Host>\n * );\n *\n * export default MyComponent;\n * ```\n *\n * Here any `Portal` elements under `<App />` are rendered alongside `<App />` and will appear above `<App />` like a `Modal`.\n */\nexport default class PortalHost extends React.Component<Props> {\n  static displayName = 'Portal.Host';\n\n  componentDidMount() {\n    const manager = this.manager;\n    const queue = this.queue;\n\n    while (queue.length && manager) {\n      const action = queue.pop();\n      if (action) {\n        // eslint-disable-next-line default-case\n        switch (action.type) {\n          case 'mount':\n            manager.mount(action.key, action.children);\n            break;\n          case 'update':\n            manager.update(action.key, action.children);\n            break;\n          case 'unmount':\n            manager.unmount(action.key);\n            break;\n        }\n      }\n    }\n  }\n\n  private setManager = (manager: PortalManager | undefined | null) => {\n    this.manager = manager;\n  };\n\n  private mount = (children: React.ReactNode) => {\n    const key = this.nextKey++;\n\n    if (this.manager) {\n      this.manager.mount(key, children);\n    } else {\n      this.queue.push({ type: 'mount', key, children });\n    }\n\n    return key;\n  };\n\n  private update = (key: number, children: React.ReactNode) => {\n    if (this.manager) {\n      this.manager.update(key, children);\n    } else {\n      const op: Operation = { type: 'mount', key, children };\n      const index = this.queue.findIndex(\n        (o) => o.type === 'mount' || (o.type === 'update' && o.key === key)\n      );\n\n      if (index > -1) {\n        this.queue[index] = op;\n      } else {\n        this.queue.push(op as Operation);\n      }\n    }\n  };\n\n  private unmount = (key: number) => {\n    if (this.manager) {\n      this.manager.unmount(key);\n    } else {\n      this.queue.push({ type: 'unmount', key });\n    }\n  };\n\n  private nextKey = 0;\n  private queue: Operation[] = [];\n  private manager: PortalManager | null | undefined;\n\n  render() {\n    return (\n      <PortalContext.Provider\n        value={{\n          mount: this.mount,\n          update: this.update,\n          unmount: this.unmount,\n        }}\n      >\n        {/* Need collapsable=false here to clip the elevations, otherwise they appear above Portal components */}\n        <View\n          style={styles.container}\n          collapsable={false}\n          pointerEvents=\"box-none\"\n        >\n          {this.props.children}\n        </View>\n        <PortalManager ref={this.setManager} />\n      </PortalContext.Provider>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n});\n"],"mappings":"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","ignoreList":[]},"metadata":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}