{"version":3,"sources":["../scenario-weighting-worksheet.tsx"],"sourcesContent":["import React from 'react'\nimport Table from 'react-bootstrap/Table'\nimport Button from 'react-bootstrap/Button'\n\ninterface ScenarioWeightingTitleBlockProps {\n  operationName: string\n}\n\nclass ScenarioWeightingTitleBlock extends React.Component<ScenarioWeightingTitleBlockProps, never> {\n  render() {\n    return (\n      <div>\n        <Table>\n          <tbody>\n            <tr>\n              <th>Operation Name:</th>\n              <td>\n                <input type=\"text\" value={this.props.operationName}></input>\n              </td>\n              <th>Time:</th>\n              <td>\n                <input type=\"text\"></input>\n              </td>\n            </tr>\n            <tr>\n              <th>Prepared by:</th>\n              <td>\n                <input type=\"text\"></input>\n              </td>\n              <th>Date:</th>\n              <td>\n                <input type=\"text\"></input>\n              </td>\n            </tr>\n          </tbody>\n        </Table>\n      </div>\n    )\n  }\n}\n\ninterface ScenarioWeightingScenarioNamesProps {\n  scenarios: string[]\n  addScenario: () => void\n  updateScenarioName: (id: number, value: string) => void\n}\n\nclass ScenarioWeightingScenarioNames extends React.Component<ScenarioWeightingScenarioNamesProps, never> {\n  constructor(props: ScenarioWeightingScenarioNamesProps) {\n    super(props)\n\n    this.updateScenarioName = this.updateScenarioName.bind(this)\n  }\n\n  updateScenarioName(event: React.ChangeEvent<HTMLInputElement>) {\n    const target = event.target\n    const value = target.value\n    const id = target.id\n    this.props.updateScenarioName(Number(id), value)\n  }\n\n  render() {\n    const scenarios = []\n    for (const scenario in this.props.scenarios) {\n      scenarios.push(\n        <tr key={scenario}>\n          <td>{scenario}</td>\n          <td>\n            <input type=\"text\" defaultValue={this.props.scenarios[scenario]} onChange={this.updateScenarioName} id={scenario} />\n          </td>\n        </tr>\n      )\n    }\n\n    return (\n      <div>\n        <Table>\n          <thead>\n            <tr>\n              <td>Scenario</td>\n              <td>Short Description</td>\n            </tr>\n          </thead>\n          <tbody>\n            {scenarios}\n            <tr key=\"new\">\n              <td colSpan={2}>\n                <Button type=\"button\" onClick={this.props.addScenario}>\n                  Add Scenario\n                </Button>\n              </td>\n            </tr>\n          </tbody>\n        </Table>\n      </div>\n    )\n  }\n}\n\ninterface ScenarioWeightingWeightingsProps {\n  updateRanking: (participant: number, scenario: number, ranking: number) => void\n  addParticipant: () => void\n  participants: string[]\n  scenarios: string[]\n  rankings: number[][]\n}\n\nclass ScenarioWeightingWeightings extends React.Component<ScenarioWeightingWeightingsProps, never> {\n  constructor(props: ScenarioWeightingWeightingsProps) {\n    super(props)\n\n    this.updateRanking = this.updateRanking.bind(this)\n  }\n\n  updateRanking(event: React.ChangeEvent<HTMLInputElement>) {\n    const target = event.target\n    const value = target.value\n    const id = target.id\n    const components = id.split('_')\n    this.props.updateRanking(Number(components[0]), Number(components[1]), Number(value))\n  }\n\n  render() {\n    const rows = []\n    const scenarios = []\n    const scenarioTotals = []\n    const relativeWeights = [<th key=\"blank\">Relative Weights</th>]\n    for (const participant in this.props.participants) {\n      const data = [<th key={participant}>{participant}</th>]\n      for (const scenario in this.props.scenarios) {\n        data.push(\n          <td key={participant + '_' + scenario}>\n            <input type=\"number\" min={0} max={100} id={participant + '_' + scenario} onChange={this.updateRanking} value={this.props.rankings[participant][scenario]} />\n          </td>\n        )\n      }\n      rows.push(<tr key={participant}>{data}</tr>)\n    }\n    let allScenariosTotal = 0\n    for (const scenario in this.props.scenarios) {\n      scenarios.push(<th key={scenario}>{this.props.scenarios[scenario]}</th>)\n      let total = 0\n      for (const participant in this.props.participants) {\n        total += this.props.rankings[participant][scenario]\n      }\n      scenarioTotals.push(total)\n      allScenariosTotal += total\n    }\n    for (const scenario in scenarioTotals) {\n      relativeWeights.push(<td key={scenario}>{Math.trunc((scenarioTotals[scenario] / allScenariosTotal) * 100)}%</td>)\n    }\n    return (\n      <Table bordered hover>\n        <thead>\n          <tr>\n            <th key=\"label\">Participant</th>\n            {scenarios}\n          </tr>\n        </thead>\n        <tbody>\n          {rows}\n          <tr key=\"new\">\n            <td>\n              <Button type=\"button\" onClick={this.props.addParticipant}>\n                Add Participant\n              </Button>\n            </td>\n          </tr>\n        </tbody>\n        <thead>\n          <tr>{relativeWeights}</tr>\n        </thead>\n      </Table>\n    )\n  }\n}\n\ninterface ScenarioWeightingWorksheetState {\n  operationName: string\n  scenarios: string[]\n  participants: string[]\n  rankings: number[][]\n}\n\nexport class ScenarioWeightingWorksheet extends React.Component<object, ScenarioWeightingWorksheetState> {\n  constructor(props: object) {\n    super(props)\n\n    this.state = {\n      operationName: '',\n      scenarios: [],\n      participants: [],\n      rankings: []\n    }\n\n    this.addScenario = this.addScenario.bind(this)\n    this.updateScenarioName = this.updateScenarioName.bind(this)\n    this.addParticipant = this.addParticipant.bind(this)\n    this.updateRanking = this.updateRanking.bind(this)\n  }\n\n  addScenario() {\n    this.setState(function (oldState) {\n      oldState.scenarios.push('')\n      for (const participant in oldState.participants) {\n        oldState.rankings[participant].push(0)\n      }\n      return oldState\n    })\n  }\n\n  addParticipant() {\n    this.setState(function (oldState) {\n      oldState.participants.push('')\n      const rankings = oldState.scenarios.map(() => 0)\n      oldState.rankings.push(rankings)\n      return oldState\n    })\n  }\n\n  updateScenarioName(scenarioId: number, name: string) {\n    this.setState(function (oldState) {\n      oldState.scenarios[scenarioId] = name\n      return oldState\n    })\n  }\n\n  updateRanking(participant: number, scenario: number, ranking: number) {\n    this.setState(function (oldState) {\n      oldState.rankings[participant][scenario] = ranking\n      return oldState\n    })\n  }\n\n  render() {\n    return (\n      <div>\n        <ScenarioWeightingTitleBlock operationName={this.state.operationName} />\n        <ScenarioWeightingScenarioNames scenarios={this.state.scenarios} addScenario={this.addScenario} updateScenarioName={this.updateScenarioName} />\n        <ScenarioWeightingWeightings\n          scenarios={this.state.scenarios}\n          participants={this.state.participants}\n          addParticipant={this.addParticipant}\n          rankings={this.state.rankings}\n          updateRanking={this.updateRanking}\n        />\n      </div>\n    )\n  }\n}\n"],"mappings":"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","names":[]}