{"version":3,"sources":["../../../src/client/ui/renderer.tsx"],"names":["Fragment","jsxs","useEffect","useState","usePilot","PilotRenderer","props","name","persistPlaceholder","Placeholder","renderContent","renderPlaceholder","tag","pilot","logTag","content","setContent","showPlaceholder","setShowPlaceholder","loadCompleteHookId","_","event","loadStartHookId","PlaceholderElement","shouldRenderPlaceholder"],"mappings":"AA4DE,mBAAAA,EAAA,QAAAC,MAAA,oBAxDF,OAA0C,aAAAC,EAAW,YAAAC,MAAgB,QAErE,OAAS,YAAAC,MAAgB,oBAUlB,MAAMC,EAAwDC,GAA8B,CAClG,KAAM,CAAE,KAAAC,EAAM,mBAAAC,EAAoB,YAAAC,EAAa,cAAAC,EAAgB,SAAU,kBAAAC,EAAoB,SAAU,IAAAC,CAAI,EAAIN,EACzGO,EAAQT,EAASG,CAAI,EACrBO,EAASF,EAAM,IAAIA,IAAQ,GAG3B,CAACG,EAASC,CAAU,EAAIb,EAC7BO,IAAkB,UAAYA,IAAkB,aAAeG,EAAM,OAAO,EAAI,IACjF,EAIM,CAACI,EAAiBC,CAAkB,EAAIf,EAAS,EAAK,EAC5DD,EAAU,IAAM,CACf,MAAMiB,EAAqBN,EAAM,QAAQ,gBAAiB,CAACO,EAAGC,IAAsB,CACnFR,EAAM,IAAI,QAAS,oBAAoBC,sBAA2BO,EAAM,OAAO,EAC/EH,EAAmB,EAAK,GACpBR,IAAkB,UAAaA,IAAkB,cAAgB,CAACK,IACrEC,EAAWH,EAAM,OAAO,CAAC,CAE3B,CAAC,EACKS,EAAkBT,EAAM,QAAQ,aAAc,CAACO,EAAGC,IAAsB,CAC7ER,EAAM,IAAI,QAAS,oBAAoBC,sBAA2BO,EAAM,OAAO,EAC/EH,EAAmB,EAAI,CACxB,CAAC,EACD,MAAO,IAAM,CACZL,EAAM,WAAWM,CAAkB,EACnCN,EAAM,WAAWS,CAAe,CACjC,CACD,EAAG,CAACZ,CAAa,CAAC,EAGlB,IAAIa,EAAqB,KACrBd,IAAgBD,GAAsBS,KACzCM,EAAqBd,EAAYQ,CAAe,GAGjD,MAAMO,EAA0Bb,IAAsB,UAAaA,IAAsB,cAAgB,CAACI,EAC1G,OAAIS,GAA2BD,GAAsBN,EACpDJ,EAAM,IAAI,QAAS,oBAAoBC,wCAA6C,EAEpFD,EAAM,IAAI,QAAS,oBAAoBC,iBAAsB,EAG7Db,EAAAD,EAAA,CACE,UAAAe,EACAS,EAA0BD,EAAqB,MACjD,CAEF","sourcesContent":["/**\n * © 2022 WavePlay <dev@waveplay.com>\n */\n'use client'\nimport { FunctionComponent, ReactElement, useEffect, useState } from 'react'\nimport type { PilotEvent, PilotStateProps } from '../types'\nimport { usePilot } from '../core/use-pilot'\n\ninterface PilotRendererProps {\n\tname?: string\n\tpersistPlaceholder?: boolean\n\tPlaceholder?: (visible: boolean) => ReactElement<PilotStateProps>\n\trenderContent?: 'always' | 'first-load' | 'never'\n\trenderPlaceholder?: 'always' | 'first-load' | 'never'\n\ttag?: string\n}\nexport const PilotRenderer: FunctionComponent<PilotRendererProps> = (props: PilotRendererProps) => {\n\tconst { name, persistPlaceholder, Placeholder, renderContent = 'always', renderPlaceholder = 'always', tag } = props\n\tconst pilot = usePilot(name)\n\tconst logTag = tag ? `#${tag}` : ''\n\n\t// Update content after navigating to a new page\n\tconst [content, setContent] = useState<ReactElement | null>(\n\t\trenderContent === 'always' || renderContent === 'first-load' ? pilot.render() : null\n\t)\n\n\t// If enabled, show placeholder while we wait for a new load\n\t// Or you know, an error... if things... go bad\n\tconst [showPlaceholder, setShowPlaceholder] = useState(false)\n\tuseEffect(() => {\n\t\tconst loadCompleteHookId = pilot.addHook('load-complete', (_, event: PilotEvent) => {\n\t\t\tpilot.log('debug', `PilotAreaRenderer${logTag}: Received event \"${event.type}\"`)\n\t\t\tsetShowPlaceholder(false)\n\t\t\tif (renderContent === 'always' || (renderContent === 'first-load' && !content)) {\n\t\t\t\tsetContent(pilot.render())\n\t\t\t}\n\t\t})\n\t\tconst loadStartHookId = pilot.addHook('load-start', (_, event: PilotEvent) => {\n\t\t\tpilot.log('debug', `PilotAreaRenderer${logTag}: Received event \"${event.type}\"`)\n\t\t\tsetShowPlaceholder(true)\n\t\t})\n\t\treturn () => {\n\t\t\tpilot.removeHook(loadCompleteHookId)\n\t\t\tpilot.removeHook(loadStartHookId)\n\t\t}\n\t}, [renderContent])\n\n\t// Render placeholder if enabled\n\tlet PlaceholderElement = null\n\tif (Placeholder && (persistPlaceholder || showPlaceholder)) {\n\t\tPlaceholderElement = Placeholder(showPlaceholder)\n\t}\n\n\tconst shouldRenderPlaceholder = renderPlaceholder === 'always' || (renderPlaceholder === 'first-load' && !content)\n\tif (shouldRenderPlaceholder && PlaceholderElement && showPlaceholder) {\n\t\tpilot.log('debug', `PilotAreaRenderer${logTag}: Rendering with valid placeholder...`)\n\t} else {\n\t\tpilot.log('debug', `PilotAreaRenderer${logTag}: Rendering...`)\n\t}\n\treturn (\n\t\t<>\n\t\t\t{content}\n\t\t\t{shouldRenderPlaceholder ? PlaceholderElement : null}\n\t\t</>\n\t)\n}\n"]}