{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/client/reactive/components/rewritten/conduit/rpComponents/router-rp19.js"],"names":["_","ReactiveMorph","_router","router","Router","config","attachedCallback","isDummy","attachChildPropsListener","detachedCallback","undefined","children","child","addAExpr","newProps","updateConfig","navigateTo","next","checkMinimumNavigationRequirements","target","showOn","has","condition","debug","cloneDeep","navigation","start","checkMinimumPropRequirements","node","cloneNode","props","hasIn","render"],"mappings":"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","file":"router-rp19.js","sourcesContent":["'enable rp19-jsx';\n\nimport _ from 'src/external/lodash/lodash.js';\nimport ReactiveMorph from 'src/client/reactive/components/rewritten/conduit/rpComponents/reactiveMorph.js';\n\nlet _router;\nexport const router = () => _router;\n\nclass Router extends ReactiveMorph {\n  \n  get config() {\n    return this._config || (this._config = {});\n  }\n  \n  attachedCallback() {\n    super.attachedCallback().then(() => {\n      if (this.isDummy()) return;\n      this.attachChildPropsListener(this.children);\n      _router = this;\n    });\n  }\n  \n  detachedCallback() {\n    super.detachedCallback();\n    if (_router === this)\n      _router = undefined;\n  }\n  \n  attachChildPropsListener(children) {\n    _([...children]).forEach(child => {\n      this.addAExpr(aexpr(() => child.props).onChange(newProps => \n        this.updateConfig(newProps, child)\n      ), 'children');\n      this.updateConfig(child.props, child);\n    });\n  }\n  \n  navigateTo(next) {\n    this.checkMinimumNavigationRequirements(next);\n    const { [next.target]: { showOn } } = this.config;\n    if (_.has(showOn, 'condition') && !showOn.condition(next)) {\n      console.debug('Routing condition not met. Will not change route!');\n      return;\n    }\n    this.current = _.cloneDeep(next);\n  }\n  \n  checkMinimumNavigationRequirements(navigation) {\n    if (!_.has(navigation, 'target')) \n      throw Error('Attribute `target` of object `next` is missing');\n    if (!_.has(this.config, navigation['target']))\n      throw Error('Target not found');\n  }\n  \n  updateConfig(newProps, child) {\n    const { start } = this.props;\n    this.checkMinimumPropRequirements(newProps);\n    this.config[newProps.showOn.target] = {\n      showOn: newProps.showOn,\n      node: child.cloneNode(true)\n    };\n    if (!this.current && newProps.showOn.target === start.target)\n      this.navigateTo(start);\n  }\n  \n  checkMinimumPropRequirements(props) {\n    if (!_.hasIn(props, 'showOn.target'))\n      throw Error('Attribute `target` in routing properties is missing')\n  }\n  \n  render() {\n    return this.current && \n      this.config[this.current.target] && \n      this.config[this.current.target]['node'];\n  }\n}\n\nexport default Router;"]}