UNPKG

@canterbury-air-patrol/scenario-weighting-worksheet

Version:
1 lines 11.4 kB
{"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":[]}