{"version":3,"sources":["images/English.png","images/French.jpg","images/German.jpg","components/NavMenu.tsx","components/Layout.tsx","types.ts","components/Paper.tsx","components/cards/LanguageTypeCard.tsx","components/cards/ProjectTypeCard.tsx","components/cards/BuildingTypeCard.tsx","components/cards/CommercialOfficeTypeCard.tsx","components/cards/ProductTypeCard.tsx","components/cards/RecessedSizeTypeCard.tsx","components/cards/ControlTypeCard.tsx","components/cards/CCTTypeCard.tsx","components/cards/CCTTemperatureTypeCard.tsx","components/cards/CCTDynamicTypeCard.tsx","components/cards/HousingColourCard.tsx","components/cards/HousingFinishCard.tsx","components/cards/RoomDimensionCard.tsx","components/cards/ResultsCard.tsx","components/cards/PDFSenderCard.tsx","components/cards/ResultSelectionCard.tsx","components/Home.tsx","components/Projects.tsx","components/ProjectLuminaire.tsx","components/ProjectResults.tsx","App.tsx","registerServiceWorker.tsx","index.tsx"],"names":["module","exports","NavMenu","props","Navbar","className","style","backgroundColor","secondaryColour","NavbarBrand","tag","Link","to","src","logoPath","alt","color","primaryColour","Layout","this","Container","children","Component","displayName","name","LanguageType","BuildingType","CommercialOfficeType","ProductType","RecessedSizeType","ControlType","CCTType","CCTTemperatureType","HousingColourType","HousingFinishType","CardType","ClientClient","baseUrl","http","jsonParseReviver","undefined","window","url_","replace","fetch","method","headers","then","_response","processGet","response","status","_headers","forEach","v","k","text","_responseText","JSON","parse","throwException","Promise","resolve","DesignSelectionClient","designSelections","options_","body","stringify","processPostNextCard","processPostPreviousCard","processPostOptimise","EnumDescriptionClient","enumValue","Error","encodeURIComponent","processGetCCTTemperatureType","processGetCCTType","processGetBuildingType","processGetControlType","processGetRecessedSize","PDFClient","emailAddress","processGeneratePDF","ProjectClient","processGetAll","id","processDelete","ApiException","message","result","isApiException","obj","PaperWithIcon","Box","sx","display","flexWrap","disabled","Paper","elevation","header","icon","selected","border","onClick","PaperWithPicture","picture","PaperNoIcon","LanguageTypeCard","handleClick","languageType","newDesignSelections","setDesignSelections","English","EnglishFlag","French","FrenchFlag","German","GermanFlag","ProjectTypeCard","TextField","label","variant","type","width","defaultValue","projectName","onBlur","e","setProjectName","target","value","BuildingTypeCard","buildingType","CommercialOffices","Business","Hospitality","Hotel","Education","School","Ancillary","Garage","Warehouse","Handyman","Workshop","ChairAlt","CommercialOfficeCard","commercialOfficeType","GeneralOffice","ComputerWorkstation","DrawingOffice","PrintRoom","FilingArchiveRoom","ProductTypeCard","productType","availableProductTypes","includes","Recessed","Surface","Suspended","Downlights","Industrial","CCTTypeCard","recessedSizeType","availableRecessedTypes","S600x600","S1200x600","S1200x300","ControlTypeCard","controlType","availableControlTypes","TrailingEdge","LeadingEdge","V1to10","DALI","cctType","Static","DynamicWhite","availableCCTTypes","WarmDimming","CCTTemperatureTypeCard","temperatureType","cctTemperatureType","availableColourTemperatures","K2700","K3000","K3500","K4000","K5000","CCTDynamicTypeCard","React","useState","value2","setValue2","Slider","getAriaLabel","valueLabelDisplay","disableSwap","onChange","event","newValue","activeThumb","Array","isArray","clamped","Math","min","max","values","cctDynamicType","setValues","marks","HousingColourCard","housingColour","housingColourType","availableHousingColours","White","Black","Other","HousingFinishCard","housingFinish","housingFinishType","Any","availableHousingFinishes","Aluminium","RoomDimensionCard","optionalText","disableOptionalSettings","setDisableOptionalSettings","height","setHeight","setWidth","length","setLength","roomProperties","workingPlaneHeight","setWorkingPlaneHeight","ceilingDrop","setCeilingDrop","targetIlluminance","setTargetIlluminance","reflectanceCeiling","setReflectanceCeiling","reflectanceWall","setReflectanceWall","reflectanceFloor","setReflectanceFloor","maintenanceFactor","setMaintenanceFactor","inputProps","step","parseFloat","Switch","checked","Button","fetchOptimise","alert","setDimensions","Row","row","open","setOpen","Fragment","TableRow","borderBottom","TableCell","IconButton","aria-label","size","component","scope","luminaire","manufactureName","luminaireName","totalSchemeWatts","setSelectedRow","padding","colSpan","Collapse","in","timeout","unmountOnExit","margin","Table","marginBottom","marginTop","TableHead","TableBody","availability","wattagePerArea","numberRequired","rowsRequired","columnsRequired","luxLevel","CollapsibleTable","selectedRow","useEffect","solutions","find","x","setSelectedSolution","TableContainer","map","key","PDFSenderCard","email","setEmail","path","location","href","minWidth","generatePDF","setShowPdfSender","ResultSelectionCard","colourTemperature","setColourTemperature","cCTType","setCCTType","setBuildingType","showEmail","setShowEmail","solution","luminaireColourTemperature","None","getCCTTemperatureType","getCCTType","luminaireColourType","getBuildingType","fetchColourTemperature","deliveredLumens","ipRating","ikRating","luminaireHousingColour","luminaireHousingFinish","mount","luminaireProductType","driver","luminaireControlType","image1Path","image2Path","toFixed","heightMM","lengthMM","widthMM","weightKG","uniformity","DefaultDesignSelections","selection","atStart","atEnd","DefaultSelectedSolution","projectInputId","luminaireId","dateCreated","Date","luminaireRecessedSize","projectInput","projectId","ceilingGridSize","luminaireCorrelatedColourTemperatureType","luminaireEfficacy","Home","selectedSolution","document","title","fetchNext","postNextCard","nextDesignSelections","console","log","ProjectType","CCTDynamicType","ResultsCard","CommercialOfficeTypeCard","RecessedSizeTypeCard","RoomDimensionType","defaultDesignSelections","postOptimise","postPreviousCard","fetchPrevious","dateFormat","deleteProject","projects","setProjects","history","useHistory","delete","reload","getAll","push","setShowLuminaire","showLuminaire","get","ProjectLuminaire","App","setLogoPath","setPrimaryColour","setSecondaryColour","client","exact","Projects","render","match","params","isLocalhost","Boolean","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","catch","error","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","basename","URL","process","toString","origin","addEventListener","indexOf","ready","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.ea8b1092.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/French.e8305cdd.jpg\";","module.exports = __webpack_public_path__ + \"static/media/German.76d25b1c.jpg\";","import React, { Component, useEffect, useState } from 'react';\r\nimport { Navbar, NavbarBrand } from 'reactstrap';\r\nimport { Link, NavLink } from 'react-router-dom';\r\nimport './NavMenu.css';\r\nimport { Client, ClientClient } from '../types';\r\n\r\ntype Props = {\r\n    logoPath: string,\r\n    primaryColour: string,\r\n    secondaryColour: string\r\n}\r\n\r\nconst NavMenu = (props: Props): React.ReactElement => {\r\n    return (\r\n      <header>\r\n            <Navbar className=\"navbar-expand-sm border-bottom box-shadow mb-3\" style={{ backgroundColor: `${props.secondaryColour}` }}>\r\n                <NavbarBrand tag={Link} to=\"/\"><img src={props.logoPath} alt=\"Logo\" className=\"logo\" /></NavbarBrand>\r\n                <h1 style={{ color: `${props.primaryColour}` }} className=\"text-left mr-auto my-1\">Lighting Selector</h1>\r\n        </Navbar>\r\n      </header>\r\n    );\r\n}\r\n\r\nexport default NavMenu;\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport NavMenu from './NavMenu';\r\n\r\ntype Props = {\r\n    logoPath: string,\r\n    primaryColour: string,\r\n    secondaryColour: string\r\n}\r\n\r\nexport class Layout extends Component<Props> {\r\n  static displayName = Layout.name;\r\n\r\n  render () {\r\n    return (\r\n      <div>\r\n            <NavMenu logoPath={this.props.logoPath} primaryColour={this.props.primaryColour} secondaryColour={this.props.secondaryColour} />\r\n        <Container>\r\n          {this.props.children}\r\n        </Container>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n//----------------------\r\n// <auto-generated>\r\n//     Generated using the NSwag toolchain v13.15.9.0 (NJsonSchema v10.6.8.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n// ReSharper disable InconsistentNaming\r\n// @ts-nocheck\r\n\r\nexport interface IClientClient {\r\n\r\n    get(): Promise<Client>;\r\n}\r\n\r\nexport class ClientClient implements IClientClient {\r\n    private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };\r\n    private baseUrl: string;\r\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n    constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {\r\n        this.http = http ? http : window as any;\r\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"https://localhost:5001\";\r\n    }\r\n\r\n    get(): Promise<Client> {\r\n        let url_ = this.baseUrl + \"/Client\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"GET\",\r\n            headers: {\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGet(_response);\r\n        });\r\n    }\r\n\r\n    protected processGet(response: Response): Promise<Client> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Client;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<Client>(null as any);\r\n    }\r\n}\r\n\r\nexport interface IDesignSelectionClient {\r\n\r\n    postNextCard(designSelections: DesignSelections): Promise<DesignSelections>;\r\n\r\n    postPreviousCard(designSelections: DesignSelections): Promise<DesignSelections>;\r\n\r\n    postOptimise(designSelections: DesignSelections): Promise<DesignSelections>;\r\n}\r\n\r\nexport class DesignSelectionClient implements IDesignSelectionClient {\r\n    private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };\r\n    private baseUrl: string;\r\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n    constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {\r\n        this.http = http ? http : window as any;\r\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"https://localhost:5001\";\r\n    }\r\n\r\n    postNextCard(designSelections: DesignSelections): Promise<DesignSelections> {\r\n        let url_ = this.baseUrl + \"/DesignSelection/next\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        const content_ = JSON.stringify(designSelections);\r\n\r\n        let options_: RequestInit = {\r\n            body: content_,\r\n            method: \"POST\",\r\n            headers: {\r\n                \"Content-Type\": \"application/json\",\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processPostNextCard(_response);\r\n        });\r\n    }\r\n\r\n    protected processPostNextCard(response: Response): Promise<DesignSelections> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as DesignSelections;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<DesignSelections>(null as any);\r\n    }\r\n\r\n    postPreviousCard(designSelections: DesignSelections): Promise<DesignSelections> {\r\n        let url_ = this.baseUrl + \"/DesignSelection/previous\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        const content_ = JSON.stringify(designSelections);\r\n\r\n        let options_: RequestInit = {\r\n            body: content_,\r\n            method: \"POST\",\r\n            headers: {\r\n                \"Content-Type\": \"application/json\",\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processPostPreviousCard(_response);\r\n        });\r\n    }\r\n\r\n    protected processPostPreviousCard(response: Response): Promise<DesignSelections> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as DesignSelections;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<DesignSelections>(null as any);\r\n    }\r\n\r\n    postOptimise(designSelections: DesignSelections): Promise<DesignSelections> {\r\n        let url_ = this.baseUrl + \"/DesignSelection/optimise\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        const content_ = JSON.stringify(designSelections);\r\n\r\n        let options_: RequestInit = {\r\n            body: content_,\r\n            method: \"POST\",\r\n            headers: {\r\n                \"Content-Type\": \"application/json\",\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processPostOptimise(_response);\r\n        });\r\n    }\r\n\r\n    protected processPostOptimise(response: Response): Promise<DesignSelections> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as DesignSelections;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<DesignSelections>(null as any);\r\n    }\r\n}\r\n\r\nexport interface IEnumDescriptionClient {\r\n\r\n    getCCTTemperatureType(enumValue: CCTTemperatureType | undefined): Promise<string>;\r\n\r\n    getCCTType(enumValue: CCTType | undefined): Promise<string>;\r\n\r\n    getBuildingType(enumValue: BuildingType | undefined): Promise<string>;\r\n\r\n    getControlType(enumValue: ControlType | undefined): Promise<string>;\r\n\r\n    getRecessedSize(enumValue: RecessedSizeType | undefined): Promise<string>;\r\n}\r\n\r\nexport class EnumDescriptionClient implements IEnumDescriptionClient {\r\n    private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };\r\n    private baseUrl: string;\r\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n    constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {\r\n        this.http = http ? http : window as any;\r\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"https://localhost:5001\";\r\n    }\r\n\r\n    getCCTTemperatureType(enumValue: CCTTemperatureType | undefined): Promise<string> {\r\n        let url_ = this.baseUrl + \"/EnumDescription/CCTTemperatureType?\";\r\n        if (enumValue === null)\r\n            throw new Error(\"The parameter 'enumValue' cannot be null.\");\r\n        else if (enumValue !== undefined)\r\n            url_ += \"enumValue=\" + encodeURIComponent(\"\" + enumValue) + \"&\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"GET\",\r\n            headers: {\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGetCCTTemperatureType(_response);\r\n        });\r\n    }\r\n\r\n    protected processGetCCTTemperatureType(response: Response): Promise<string> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<string>(null as any);\r\n    }\r\n\r\n    getCCTType(enumValue: CCTType | undefined): Promise<string> {\r\n        let url_ = this.baseUrl + \"/EnumDescription/CCTType?\";\r\n        if (enumValue === null)\r\n            throw new Error(\"The parameter 'enumValue' cannot be null.\");\r\n        else if (enumValue !== undefined)\r\n            url_ += \"enumValue=\" + encodeURIComponent(\"\" + enumValue) + \"&\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"GET\",\r\n            headers: {\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGetCCTType(_response);\r\n        });\r\n    }\r\n\r\n    protected processGetCCTType(response: Response): Promise<string> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<string>(null as any);\r\n    }\r\n\r\n    getBuildingType(enumValue: BuildingType | undefined): Promise<string> {\r\n        let url_ = this.baseUrl + \"/EnumDescription/BuildingType?\";\r\n        if (enumValue === null)\r\n            throw new Error(\"The parameter 'enumValue' cannot be null.\");\r\n        else if (enumValue !== undefined)\r\n            url_ += \"enumValue=\" + encodeURIComponent(\"\" + enumValue) + \"&\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"GET\",\r\n            headers: {\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGetBuildingType(_response);\r\n        });\r\n    }\r\n\r\n    protected processGetBuildingType(response: Response): Promise<string> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<string>(null as any);\r\n    }\r\n\r\n    getControlType(enumValue: ControlType | undefined): Promise<string> {\r\n        let url_ = this.baseUrl + \"/EnumDescription/ControlType?\";\r\n        if (enumValue === null)\r\n            throw new Error(\"The parameter 'enumValue' cannot be null.\");\r\n        else if (enumValue !== undefined)\r\n            url_ += \"enumValue=\" + encodeURIComponent(\"\" + enumValue) + \"&\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"GET\",\r\n            headers: {\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGetControlType(_response);\r\n        });\r\n    }\r\n\r\n    protected processGetControlType(response: Response): Promise<string> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<string>(null as any);\r\n    }\r\n\r\n    getRecessedSize(enumValue: RecessedSizeType | undefined): Promise<string> {\r\n        let url_ = this.baseUrl + \"/EnumDescription/RecessedSizeType?\";\r\n        if (enumValue === null)\r\n            throw new Error(\"The parameter 'enumValue' cannot be null.\");\r\n        else if (enumValue !== undefined)\r\n            url_ += \"enumValue=\" + encodeURIComponent(\"\" + enumValue) + \"&\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"GET\",\r\n            headers: {\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGetRecessedSize(_response);\r\n        });\r\n    }\r\n\r\n    protected processGetRecessedSize(response: Response): Promise<string> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<string>(null as any);\r\n    }\r\n}\r\n\r\nexport interface IPDFClient {\r\n\r\n    generatePDF(designSelections: DesignSelections, emailAddress: string | null | undefined): Promise<void>;\r\n}\r\n\r\nexport class PDFClient implements IPDFClient {\r\n    private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };\r\n    private baseUrl: string;\r\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n    constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {\r\n        this.http = http ? http : window as any;\r\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"https://localhost:5001\";\r\n    }\r\n\r\n    generatePDF(designSelections: DesignSelections, emailAddress: string | null | undefined): Promise<void> {\r\n        let url_ = this.baseUrl + \"/PDF/generatePDF?\";\r\n        if (emailAddress !== undefined && emailAddress !== null)\r\n            url_ += \"emailAddress=\" + encodeURIComponent(\"\" + emailAddress) + \"&\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        const content_ = JSON.stringify(designSelections);\r\n\r\n        let options_: RequestInit = {\r\n            body: content_,\r\n            method: \"POST\",\r\n            headers: {\r\n                \"Content-Type\": \"application/json\",\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGeneratePDF(_response);\r\n        });\r\n    }\r\n\r\n    protected processGeneratePDF(response: Response): Promise<void> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            return;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<void>(null as any);\r\n    }\r\n}\r\n\r\nexport interface IProjectClient {\r\n\r\n    getAll(): Promise<Project[]>;\r\n\r\n    get(id: string | undefined): Promise<DesignSelections>;\r\n\r\n    delete(id: string | undefined): Promise<void>;\r\n}\r\n\r\nexport class ProjectClient implements IProjectClient {\r\n    private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };\r\n    private baseUrl: string;\r\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n    constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {\r\n        this.http = http ? http : window as any;\r\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"https://localhost:5001\";\r\n    }\r\n\r\n    getAll(): Promise<Project[]> {\r\n        let url_ = this.baseUrl + \"/Project/GetAll\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"GET\",\r\n            headers: {\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGetAll(_response);\r\n        });\r\n    }\r\n\r\n    protected processGetAll(response: Response): Promise<Project[]> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Project[];\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<Project[]>(null as any);\r\n    }\r\n\r\n    get(id: string | undefined): Promise<DesignSelections> {\r\n        let url_ = this.baseUrl + \"/Project/Get?\";\r\n        if (id === null)\r\n            throw new Error(\"The parameter 'id' cannot be null.\");\r\n        else if (id !== undefined)\r\n            url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"GET\",\r\n            headers: {\r\n                \"Accept\": \"application/json\"\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processGet(_response);\r\n        });\r\n    }\r\n\r\n    protected processGet(response: Response): Promise<DesignSelections> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            let result200: any = null;\r\n            result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as DesignSelections;\r\n            return result200;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<DesignSelections>(null as any);\r\n    }\r\n\r\n    delete(id: string | undefined): Promise<void> {\r\n        let url_ = this.baseUrl + \"/Project/Delete?\";\r\n        if (id === null)\r\n            throw new Error(\"The parameter 'id' cannot be null.\");\r\n        else if (id !== undefined)\r\n            url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n        url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n        let options_: RequestInit = {\r\n            method: \"DELETE\",\r\n            headers: {\r\n            }\r\n        };\r\n\r\n        return this.http.fetch(url_, options_).then((_response: Response) => {\r\n            return this.processDelete(_response);\r\n        });\r\n    }\r\n\r\n    protected processDelete(response: Response): Promise<void> {\r\n        const status = response.status;\r\n        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n        if (status === 200) {\r\n            return response.text().then((_responseText) => {\r\n            return;\r\n            });\r\n        } else if (status !== 200 && status !== 204) {\r\n            return response.text().then((_responseText) => {\r\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n            });\r\n        }\r\n        return Promise.resolve<void>(null as any);\r\n    }\r\n}\r\n\r\nexport interface Client {\r\n    id: string;\r\n    dateCreated: Date;\r\n    dateUpdated?: Date | undefined;\r\n    name?: string | undefined;\r\n    domainName?: string | undefined;\r\n    primaryColour?: string | undefined;\r\n    secondaryColour?: string | undefined;\r\n    tertiaryColour?: string | undefined;\r\n    logoPath?: string | undefined;\r\n}\r\n\r\nexport interface DesignSelections {\r\n    languageType: LanguageType;\r\n    projectName?: string | undefined;\r\n    buildingType: BuildingType;\r\n    commercialOfficeType: CommercialOfficeType;\r\n    productType: ProductType;\r\n    availableProductTypes?: ProductType[] | undefined;\r\n    availableRecessedTypes?: RecessedSizeType[] | undefined;\r\n    availableControlTypes?: ControlType[] | undefined;\r\n    availableCCTTypes?: CCTType[] | undefined;\r\n    availableColourTemperatures?: CCTTemperatureType[] | undefined;\r\n    availableHousingColours?: HousingColourType[] | undefined;\r\n    availableHousingFinishes?: HousingFinishType[] | undefined;\r\n    recessedSizeType: RecessedSizeType;\r\n    controlType: ControlType;\r\n    cctType: CCTType;\r\n    cctTemperatureType: CCTTemperatureType;\r\n    cctDynamicType?: number[] | undefined;\r\n    housingColourType: HousingColourType;\r\n    housingFinishType: HousingFinishType;\r\n    height: number;\r\n    width: number;\r\n    length: number;\r\n    roomProperties?: RoomProperties | undefined;\r\n    selection: CardType;\r\n    atStart: boolean;\r\n    atEnd: boolean;\r\n    solutions?: ProjectResult[] | undefined;\r\n    solution?: ProjectResult | undefined;\r\n}\r\n\r\nexport enum LanguageType {\r\n    None = \"None\",\r\n    English = \"English\",\r\n    French = \"French\",\r\n    German = \"German\",\r\n}\r\n\r\nexport enum BuildingType {\r\n    None = \"None\",\r\n    CommercialOffices = \"CommercialOffices\",\r\n    Education = \"Education\",\r\n    DomesticArea = \"DomesticArea\",\r\n    Ancillary = \"Ancillary\",\r\n    Warehouse = \"Warehouse\",\r\n    Workshop = \"Workshop\",\r\n    Hospitality = \"Hospitality\",\r\n}\r\n\r\nexport enum CommercialOfficeType {\r\n    None = \"None\",\r\n    GeneralOffice = \"GeneralOffice\",\r\n    ComputerWorkstation = \"ComputerWorkstation\",\r\n    DrawingOffice = \"DrawingOffice\",\r\n    PrintRoom = \"PrintRoom\",\r\n    FilingArchiveRoom = \"FilingArchiveRoom\",\r\n}\r\n\r\nexport enum ProductType {\r\n    None = \"None\",\r\n    Recessed = \"Recessed\",\r\n    Surface = \"Surface\",\r\n    Suspended = \"Suspended\",\r\n    Downlights = \"Downlights\",\r\n    Industrial = \"Industrial\",\r\n}\r\n\r\nexport enum RecessedSizeType {\r\n    None = \"None\",\r\n    S600x600 = \"s600x600\",\r\n    S1200x600 = \"s1200x600\",\r\n    S1200x300 = \"s1200x300\",\r\n}\r\n\r\nexport enum ControlType {\r\n    None = \"None\",\r\n    TrailingEdge = \"TrailingEdge\",\r\n    LeadingEdge = \"LeadingEdge\",\r\n    V1to10 = \"v1to10\",\r\n    DALI = \"DALI\",\r\n}\r\n\r\nexport enum CCTType {\r\n    None = \"None\",\r\n    Static = \"Static\",\r\n    DynamicWhite = \"DynamicWhite\",\r\n    WarmDimming = \"WarmDimming\",\r\n}\r\n\r\nexport enum CCTTemperatureType {\r\n    None = \"None\",\r\n    K2700 = \"K2700\",\r\n    K3000 = \"K3000\",\r\n    K3500 = \"K3500\",\r\n    K4000 = \"K4000\",\r\n    K5000 = \"K5000\",\r\n}\r\n\r\nexport enum HousingColourType {\r\n    None = \"None\",\r\n    White = \"White\",\r\n    Black = \"Black\",\r\n    Other = \"Other\",\r\n}\r\n\r\nexport enum HousingFinishType {\r\n    None = \"None\",\r\n    Any = \"Any\",\r\n    Aluminium = \"Aluminium\",\r\n}\r\n\r\nexport interface RoomProperties {\r\n    reflectanceCeiling: number;\r\n    reflectanceWall: number;\r\n    reflectanceFloor: number;\r\n    targetIlluminance: number;\r\n    ceilingDrop: number;\r\n    workingPlaneHeight: number;\r\n    maintenanceFactor: number;\r\n}\r\n\r\nexport enum CardType {\r\n    None = \"None\",\r\n    LanguageType = \"LanguageType\",\r\n    ProjectType = \"ProjectType\",\r\n    BuildingType = \"BuildingType\",\r\n    CommercialOfficeType = \"CommercialOfficeType\",\r\n    ProductType = \"ProductType\",\r\n    RecessedSizeType = \"RecessedSizeType\",\r\n    ControlType = \"ControlType\",\r\n    CCTType = \"CCTType\",\r\n    CCTTemperatureType = \"CCTTemperatureType\",\r\n    CCTDynamicType = \"CCTDynamicType\",\r\n    HousingColourType = \"HousingColourType\",\r\n    HousingFinishType = \"HousingFinishType\",\r\n    RoomDimensionType = \"RoomDimensionType\",\r\n    ResultsCard = \"ResultsCard\",\r\n    ResultSelectionCard = \"ResultSelectionCard\",\r\n}\r\n\r\nexport interface ProjectResult {\r\n    id: string;\r\n    dateCreated: Date;\r\n    dateUpdated?: Date | undefined;\r\n    projectInputId: string;\r\n    projectInput?: ProjectInput | undefined;\r\n    luminaireId: string;\r\n    luminaire?: Luminaire | undefined;\r\n    numberRequired: number;\r\n    luxLevel: number;\r\n    availability?: string | undefined;\r\n    rowsRequired: number;\r\n    columnsRequired: number;\r\n    wattagePerArea: number;\r\n    totalSchemeWatts: number;\r\n    luminaireEfficacy: number;\r\n}\r\n\r\nexport interface ProjectInput {\r\n    id: string;\r\n    dateCreated: Date;\r\n    dateUpdated?: Date | undefined;\r\n    projectId: string;\r\n    project?: Project | undefined;\r\n    buildingType: BuildingType;\r\n    commercialOfficeType: CommercialOfficeType;\r\n    luminaireProductType: ProductType;\r\n    ceilingGridSize: RecessedSizeType;\r\n    luminaireControlType: ControlType;\r\n    luminaireCorrelatedColourTemperatureType: CCTType;\r\n    luminaireColourTemperature: CCTTemperatureType;\r\n    luminaireHousingColour: HousingColourType;\r\n    luminaireHousingFinish: HousingFinishType;\r\n    height: number;\r\n    width: number;\r\n    length: number;\r\n    reflectanceCeiling: number;\r\n    reflectanceWall: number;\r\n    reflectanceFloor: number;\r\n    targetIlluminance: number;\r\n    ceilingDrop: number;\r\n    workingPlaneHeight: number;\r\n    maintenanceFactor: number;\r\n}\r\n\r\nexport interface Project {\r\n    id: string;\r\n    dateCreated: Date;\r\n    dateUpdated?: Date | undefined;\r\n    deleted: boolean;\r\n    projectName?: string | undefined;\r\n}\r\n\r\nexport interface Luminaire {\r\n    id: string;\r\n    dateCreated: Date;\r\n    dateUpdated?: Date | undefined;\r\n    manufactureName?: string | undefined;\r\n    luminaireName?: string | undefined;\r\n    luminaireColourTemperature: CCTTemperatureType;\r\n    luminaireColourType: CCTType;\r\n    luminaireControlType: ControlType;\r\n    luminaireHousingColour: HousingColourType;\r\n    luminaireHousingFinish: HousingFinishType;\r\n    luminaireRecessedSize: RecessedSizeType;\r\n    luminaireProductType: ProductType;\r\n    heightMM: number;\r\n    widthMM: number;\r\n    lengthMM: number;\r\n    weightKG: number;\r\n    deliveredLumens: number;\r\n    ipRating?: string | undefined;\r\n    ikRating?: string | undefined;\r\n    mount?: string | undefined;\r\n    driver?: string | undefined;\r\n    uniformity: number;\r\n    image1Path?: string | undefined;\r\n    image2Path?: string | undefined;\r\n}\r\n\r\nexport class ApiException extends Error {\r\n    message: string;\r\n    status: number;\r\n    response: string;\r\n    headers: { [key: string]: any; };\r\n    result: any;\r\n\r\n    constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n        super();\r\n\r\n        this.message = message;\r\n        this.status = status;\r\n        this.response = response;\r\n        this.headers = headers;\r\n        this.result = result;\r\n    }\r\n\r\n    protected isApiException = true;\r\n\r\n    static isApiException(obj: any): obj is ApiException {\r\n        return obj.isApiException === true;\r\n    }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any {\r\n    if (result !== null && result !== undefined)\r\n        throw result;\r\n    else\r\n        throw new ApiException(message, status, response, headers, null);\r\n}","import * as React from 'react';\r\nimport Box from '@mui/material/Box';\r\nimport Paper from '@mui/material/Paper';\r\n\r\ninterface CardProps {\r\n    icon?: JSX.Element;\r\n    picture?: JSX.Element;\r\n    header: string;\r\n    onClick: () => void;\r\n    disabled: boolean;\r\n    selected: boolean;\r\n}\r\n\r\nexport const PaperWithIcon = (props: CardProps): JSX.Element => {\r\n    return (\r\n        <Box\r\n            sx={{\r\n                display: 'flex',\r\n                flexWrap: 'wrap',\r\n            }}\r\n            className={\"paper-selector paper-with-icon\"}\r\n        >\r\n            {props.disabled ?\r\n                <Paper style={{ color: '#cccccc' }} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                    <div id=\"cardIcon\" className=\"text-center\">\r\n                        {props.icon}\r\n                    </div>\r\n                </Paper>\r\n                :\r\n                props.selected ?\r\n                    <Paper style={{ backgroundColor: '#f5f5f5', border: '4px solid' }} onClick={props.onClick} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                        <div id=\"cardIcon\" className=\"text-center\">\r\n                                {props.icon}\r\n                        </div>\r\n                    </Paper>\r\n                    :\r\n                    <Paper onClick={props.onClick} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                        <div id=\"cardIcon\" className=\"text-center\">\r\n                            {props.icon}\r\n                        </div>\r\n                    </Paper>\r\n            }\r\n\r\n        </Box>\r\n    );\r\n}\r\n\r\nexport const PaperWithPicture = (props: CardProps): JSX.Element => {\r\n    return (\r\n        <Box\r\n            sx={{\r\n                display: 'flex',\r\n                flexWrap: 'wrap',\r\n            }}\r\n            className={\"paper-selector paper-with-img\"}\r\n        >\r\n            {props.disabled ?\r\n                <Paper style={{ color: '#cccccc' }} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                    <div className=\"text-center paper-picture\">\r\n                        {props.picture}\r\n                    </div>\r\n                </Paper>\r\n                :\r\n                props.selected ?\r\n                    <Paper onClick={props.onClick} style={{ backgroundColor: '#f5f5f5', border: '4px solid' }} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                        <div className=\"text-center paper-picture\">\r\n                            {props.picture}\r\n                        </div>\r\n                    </Paper>\r\n                    :\r\n                    <Paper onClick={props.onClick} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                        <div className=\"text-center paper-picture\">\r\n                            {props.picture}\r\n                        </div>\r\n                    </Paper>\r\n            }\r\n        </Box>\r\n    );\r\n}\r\n\r\nexport const PaperNoIcon = (props: CardProps): JSX.Element => {\r\n    return (\r\n        <Box\r\n            sx={{\r\n                display: 'flex',\r\n                flexWrap: 'wrap',\r\n            }}\r\n            className={\"paper-selector\"}\r\n        >\r\n            {props.disabled ?\r\n                <Paper style={{ color: '#cccccc' }} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                </Paper>\r\n                :\r\n                props.selected ?\r\n                    <Paper onClick={props.onClick} style={{ backgroundColor: '#f5f5f5', border: '4px solid' }} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                    </Paper>\r\n                    :\r\n                    <Paper onClick={props.onClick} elevation={3}><h3 className=\"text-center\">{props.header}</h3>\r\n                    </Paper>\r\n            }\r\n        </Box>\r\n    );\r\n}\r\n\r\nexport default PaperWithIcon;","import React from 'react';\r\nimport { PaperWithPicture } from '../Paper';\r\nimport { DesignSelections, LanguageType } from '../../types';\r\nimport EnglishFlag from '../../images/English.png'\r\nimport FrenchFlag from '../../images/French.jpg'\r\nimport GermanFlag from '../../images/German.jpg'\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst LanguageTypeCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (languageType: LanguageType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.languageType = languageType;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Language</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperWithPicture disabled={false} selected={props.designSelections.languageType === LanguageType.English} onClick={() => handleClick(LanguageType.English)} picture={<img src={EnglishFlag} alt=\"English\" />} header=\"English\" />\r\n                <PaperWithPicture disabled={false} selected={props.designSelections.languageType === LanguageType.French} onClick={() => handleClick(LanguageType.French)} picture={<img src={FrenchFlag} alt=\"French\" />} header=\"French\" />\r\n                <PaperWithPicture disabled={false} selected={props.designSelections.languageType === LanguageType.German} onClick={() => handleClick(LanguageType.German)} picture={<img src={GermanFlag} alt=\"German\" />} header=\"German\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default LanguageTypeCard;\r\n","import React from 'react';\r\nimport { TextField } from '@mui/material';\r\nimport { DesignSelections } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst ProjectTypeCard = (props: Props): React.ReactElement => {\r\n    const setProjectName = (projectName: string): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.projectName = projectName;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Project Name</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <TextField id=\"projectName\" label=\"Project Name\" variant=\"outlined\" type=\"text\" style={{ width: 350 }} defaultValue={props.designSelections.projectName} onBlur={(e) => setProjectName(e.target.value)} />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default ProjectTypeCard;\r\n","import React from 'react';\r\nimport { PaperWithIcon } from '../Paper';\r\nimport { Business, School, ChairAlt, Garage, Hotel, Handyman } from '@mui/icons-material';\r\nimport { BuildingType, DesignSelections } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst BuildingTypeCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (buildingType: BuildingType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.buildingType = buildingType;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Building Type</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperWithIcon disabled={false} selected={props.designSelections.buildingType === BuildingType.CommercialOffices} onClick={() => handleClick(BuildingType.CommercialOffices)} icon={<Business className=\"icon\" />} header=\"Commercial Office\" />\r\n                <PaperWithIcon disabled={false} selected={props.designSelections.buildingType === BuildingType.Hospitality} onClick={() => handleClick(BuildingType.Hospitality)} icon={<Hotel className=\"icon\" />} header=\"Hospitality\" />\r\n                <PaperWithIcon disabled={false} selected={props.designSelections.buildingType === BuildingType.Education} onClick={() => handleClick(BuildingType.Education)} icon={<School className=\"icon\" />} header=\"Education\" />\r\n            </div>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperWithIcon disabled={false} selected={props.designSelections.buildingType === BuildingType.Ancillary} onClick={() => handleClick(BuildingType.Ancillary)} icon={<Garage className=\"icon\" />} header=\"Ancillary\" />\r\n                <PaperWithIcon disabled={false} selected={props.designSelections.buildingType === BuildingType.Warehouse} onClick={() => handleClick(BuildingType.Warehouse)} icon={<Handyman className=\"icon\" />} header=\"Warehouse\" />\r\n                <PaperWithIcon disabled={false} selected={props.designSelections.buildingType === BuildingType.Workshop} onClick={() => handleClick(BuildingType.Workshop)} icon={<ChairAlt className=\"icon\" />} header=\"Workshop\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default BuildingTypeCard;\r\n","import React from 'react';\r\nimport { PaperNoIcon } from '../Paper';\r\nimport { CommercialOfficeType, DesignSelections } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst CommercialOfficeCard = (props: Props): React.ReactElement => {\r\n    const handleClick = (commercialOfficeType: CommercialOfficeType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.commercialOfficeType = commercialOfficeType;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Commercial Office Type</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={false} selected={props.designSelections.commercialOfficeType === CommercialOfficeType.GeneralOffice} onClick={() => handleClick(CommercialOfficeType.GeneralOffice)} header=\"General Office\" />\r\n                <PaperNoIcon disabled={false} selected={props.designSelections.commercialOfficeType === CommercialOfficeType.ComputerWorkstation} onClick={() => handleClick(CommercialOfficeType.ComputerWorkstation)} header=\"Computer Workstation\" />\r\n                <PaperNoIcon disabled={false} selected={props.designSelections.commercialOfficeType === CommercialOfficeType.DrawingOffice} onClick={() => handleClick(CommercialOfficeType.DrawingOffice)} header=\"Drawing Office\" />\r\n            </div>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={false} selected={props.designSelections.commercialOfficeType === CommercialOfficeType.PrintRoom} onClick={() => handleClick(CommercialOfficeType.PrintRoom)} header=\"Print Room\" />\r\n                <PaperNoIcon disabled={false} selected={props.designSelections.commercialOfficeType === CommercialOfficeType.FilingArchiveRoom} onClick={() => handleClick(CommercialOfficeType.FilingArchiveRoom)} header=\"Filing/Archive Room\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default CommercialOfficeCard;\r\n","import React from 'react';\r\nimport { PaperNoIcon } from '../Paper';\r\nimport { DesignSelections, ProductType } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst ProductTypeCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (productType: ProductType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.productType = productType;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Product Type</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={!props.designSelections.availableProductTypes.includes(ProductType.Recessed)} selected={props.designSelections.productType === ProductType.Recessed} onClick={() => handleClick(ProductType.Recessed)} header=\"Recessed\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableProductTypes.includes(ProductType.Surface)} selected={props.designSelections.productType === ProductType.Surface} onClick={() => handleClick(ProductType.Surface)} header=\"Surface\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableProductTypes.includes(ProductType.Suspended)} selected={props.designSelections.productType === ProductType.Suspended} onClick={() => handleClick(ProductType.Suspended)} header=\"Suspended\" />\r\n            </div>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={!props.designSelections.availableProductTypes.includes(ProductType.Downlights)} selected={props.designSelections.productType === ProductType.Downlights} onClick={() => handleClick(ProductType.Downlights)} header=\"Downlights\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableProductTypes.includes(ProductType.Industrial)} selected={props.designSelections.productType === ProductType.Industrial} onClick={() => handleClick(ProductType.Industrial)} header=\"Industrial\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default ProductTypeCard;\r\n","import React from 'react';\r\nimport { PaperNoIcon } from '../Paper';\r\nimport { DesignSelections, RecessedSizeType } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst CCTTypeCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (recessedSizeType: RecessedSizeType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.recessedSizeType = recessedSizeType;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Ceiling Grid Dimensions</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={!props.designSelections.availableRecessedTypes.includes(RecessedSizeType.S600x600)} selected={props.designSelections.recessedSizeType === RecessedSizeType.S600x600} onClick={() => handleClick(RecessedSizeType.S600x600)} header=\"600mm x 600mm\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableRecessedTypes.includes(RecessedSizeType.S1200x600)} selected={props.designSelections.recessedSizeType === RecessedSizeType.S1200x600} onClick={() => handleClick(RecessedSizeType.S1200x600)} header=\"1200mm x 600mm\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableRecessedTypes.includes(RecessedSizeType.S1200x300)} selected={props.designSelections.recessedSizeType === RecessedSizeType.S1200x300} onClick={() => handleClick(RecessedSizeType.S1200x300)} header=\"1200mm x 300mm\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default CCTTypeCard;\r\n","import React from 'react';\r\nimport { PaperNoIcon } from '../Paper';\r\nimport { ControlType, DesignSelections } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst ControlTypeCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (controlType: ControlType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.controlType = controlType;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Control Type</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={!props.designSelections.availableControlTypes.includes(ControlType.TrailingEdge)} selected={props.designSelections.controlType === ControlType.TrailingEdge} onClick={() => handleClick(ControlType.TrailingEdge)} header=\"Trailing Edge\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableControlTypes.includes(ControlType.LeadingEdge)} selected={props.designSelections.controlType === ControlType.LeadingEdge} onClick={() => handleClick(ControlType.LeadingEdge)} header=\"Leading Edge\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableControlTypes.includes(ControlType.V1to10)} selected={props.designSelections.controlType === ControlType.V1to10} onClick={() => handleClick(ControlType.V1to10)} header=\"1-10v\" />\r\n            </div>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={!props.designSelections.availableControlTypes.includes(ControlType.DALI)} selected={props.designSelections.controlType === ControlType.DALI} onClick={() => handleClick(ControlType.DALI)} header=\"DALI\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default ControlTypeCard;\r\n","import React from 'react';\r\nimport { PaperNoIcon } from '../Paper';\r\nimport { CCTType, DesignSelections } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst CCTTypeCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (cctType: CCTType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.cctType = cctType;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Correlated Colour Temperature</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={false} selected={props.designSelections.cctType === CCTType.Static} onClick={() => handleClick(CCTType.Static)} header=\"Static\" />\r\n                <PaperNoIcon disabled={false} selected={props.designSelections.cctType === CCTType.DynamicWhite} onClick={() => handleClick(CCTType.DynamicWhite)} header=\"Dynamic White\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableCCTTypes.includes(CCTType.WarmDimming)} selected={props.designSelections.cctType === CCTType.WarmDimming} onClick={() => handleClick(CCTType.WarmDimming)} header=\"Warm Dimming\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default CCTTypeCard;\r\n","import React from 'react';\r\nimport { PaperNoIcon } from '../Paper';\r\nimport { CCTTemperatureType, DesignSelections } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst CCTTemperatureTypeCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (temperatureType: CCTTemperatureType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.cctTemperatureType = temperatureType;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Correlated Colour Temperature</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={!props.designSelections.availableColourTemperatures.includes(CCTTemperatureType.K2700)} selected={props.designSelections.cctTemperatureType === CCTTemperatureType.K2700} onClick={() => handleClick(CCTTemperatureType.K2700)} header=\"2700K\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableColourTemperatures.includes(CCTTemperatureType.K3000)} selected={props.designSelections.cctTemperatureType === CCTTemperatureType.K3000} onClick={() => handleClick(CCTTemperatureType.K3000)} header=\"3000K\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableColourTemperatures.includes(CCTTemperatureType.K3500)} selected={props.designSelections.cctTemperatureType === CCTTemperatureType.K3500} onClick={() => handleClick(CCTTemperatureType.K3500)} header=\"3500K\" />\r\n            </div>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={!props.designSelections.availableColourTemperatures.includes(CCTTemperatureType.K4000)} selected={props.designSelections.cctTemperatureType === CCTTemperatureType.K4000}  onClick={() => handleClick(CCTTemperatureType.K4000)} header=\"4000K\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableColourTemperatures.includes(CCTTemperatureType.K5000)} selected={props.designSelections.cctTemperatureType === CCTTemperatureType.K5000} onClick={() => handleClick(CCTTemperatureType.K5000)} header=\"5000K\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default CCTTemperatureTypeCard;\r\n","import React from 'react';\r\nimport { Box, Slider } from '@mui/material';\r\nimport { DesignSelections } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst CCTDynamicTypeCard = (props: Props): React.ReactElement => {\r\n\r\n    const setValues = (values: number[]): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.cctDynamicType = values;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    const marks = [\r\n        {\r\n            value: 2700,\r\n            label: '2700K',\r\n        },\r\n        {\r\n            value: 3000,\r\n            label: '3000K',\r\n        },\r\n        {\r\n            value: 3500,\r\n            label: '3500K',\r\n        },\r\n        {\r\n            value: 4000,\r\n            label: '4000K',\r\n        },\r\n        {\r\n            value: 5000,\r\n            label: '5000K',\r\n        },\r\n    ];\r\n\r\n    const minDistance = 300;\r\n\r\n    const [value2, setValue2] = React.useState([2700, 5000]);\r\n\r\n    const handleChange2 = (\r\n        event: Event,\r\n        newValue: number | number[],\r\n        activeThumb: number,\r\n    ) => {\r\n        if (!Array.isArray(newValue)) {\r\n            return;\r\n        }\r\n\r\n        if (newValue[1] - newValue[0] < minDistance) {\r\n            if (activeThumb === 0) {\r\n                const clamped = Math.min(newValue[0], 100 - minDistance);\r\n                setValue2([clamped, clamped + minDistance]);\r\n            } else {\r\n                const clamped = Math.max(newValue[1], minDistance);\r\n                setValue2([clamped - minDistance, clamped]);\r\n            }\r\n        } else {\r\n            setValue2(newValue as number[]);\r\n        }\r\n\r\n        setValues(newValue);\r\n    };\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Correlated Colour Temperature</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center pl-4 pr-4\">\r\n                <Box sx={{ width: 500 }}>\r\n                    <Slider\r\n                        getAriaLabel={() => 'Minimum distance shift'}\r\n                        valueLabelDisplay=\"auto\"\r\n                        disableSwap\r\n                        onChange={handleChange2}\r\n                        value={value2}\r\n                        marks={marks}\r\n                        min={2700}\r\n                        max={5000}\r\n                    />\r\n                </Box>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default CCTDynamicTypeCard;","import React from 'react';\r\nimport { PaperNoIcon } from '../Paper';\r\nimport { DesignSelections, HousingColourType } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst HousingColourCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (housingColour: HousingColourType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.housingColourType = housingColour;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Housing Colour</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center pb-3\">\r\n                <PaperNoIcon disabled={!props.designSelections.availableHousingColours.includes(HousingColourType.White)} selected={props.designSelections.housingColourType === HousingColourType.White} onClick={() => handleClick(HousingColourType.White)} header=\"White\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableHousingColours.includes(HousingColourType.Black)} selected={props.designSelections.housingColourType === HousingColourType.Black} onClick={() => handleClick(HousingColourType.Black)} header=\"Black\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableHousingColours.includes(HousingColourType.Other)} selected={props.designSelections.housingColourType === HousingColourType.Other} onClick={() => handleClick(HousingColourType.Other)} header=\"Other\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default HousingColourCard;\r\n","import React from 'react';\r\nimport { PaperNoIcon } from '../Paper';\r\nimport { DesignSelections, HousingFinishType } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n}\r\n\r\nconst HousingFinishCard = (props: Props): React.ReactElement => {\r\n\r\n    const handleClick = (housingFinish: HousingFinishType): void => {\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.housingFinishType = housingFinish;\r\n        props.setDesignSelections(newDesignSelections);\r\n    }\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Housing Finish</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <PaperNoIcon disabled={false} selected={props.designSelections.housingFinishType === HousingFinishType.Any} onClick={() => handleClick(HousingFinishType.Any)} header=\"Any\" />\r\n                <PaperNoIcon disabled={!props.designSelections.availableHousingFinishes.includes(HousingFinishType.Aluminium)} selected={props.designSelections.housingFinishType === HousingFinishType.Aluminium} onClick={() => handleClick(HousingFinishType.Aluminium)} header=\"Aluminium\" />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default HousingFinishCard;\r\n","import React, { useState } from 'react';\r\nimport { Button, Switch, TextField } from '@mui/material';\r\nimport { DesignSelections } from '../../types';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setDesignSelections: React.Dispatch<React.SetStateAction<DesignSelections>>;\r\n    defaultDesignSelections: any;\r\n    fetchOptimise: any;\r\n}\r\n\r\nconst RoomDimensionCard = (props: Props): React.ReactElement => {\r\n    const [disableOptionalSettings, setDisableOptionalSettings] = React.useState(false);\r\n\r\n    const [height, setHeight] = useState<number>(props.designSelections.height);\r\n    const [width, setWidth] = useState<number>(props.designSelections.width);\r\n    const [length, setLength] = useState<number>(props.designSelections.length);\r\n    const [workingPlaneHeight, setWorkingPlaneHeight] = useState<number>(props.designSelections.roomProperties.workingPlaneHeight);\r\n    const [ceilingDrop, setCeilingDrop] = useState<number>(props.designSelections.roomProperties.ceilingDrop);\r\n    const [targetIlluminance, setTargetIlluminance] = useState<number>(props.designSelections.roomProperties.targetIlluminance);\r\n    const [reflectanceCeiling, setReflectanceCeiling] = useState<number>(props.designSelections.roomProperties.reflectanceCeiling);\r\n    const [reflectanceWall, setReflectanceWall] = useState<number>(props.designSelections.roomProperties.reflectanceWall);\r\n    const [reflectanceFloor, setReflectanceFloor] = useState<number>(props.designSelections.roomProperties.reflectanceFloor);\r\n    const [maintenanceFactor, setMaintenanceFactor] = useState<number>(props.designSelections.roomProperties.maintenanceFactor);\r\n\r\n    const setDimensions = (): void => {\r\n        if (height === 0 || width === 0 || length === 0) {\r\n            alert(\"Please enter room dimensions\");\r\n            return;\r\n        }\r\n\r\n        var newDesignSelections = { ...props.designSelections };\r\n        newDesignSelections.height = height;\r\n        newDesignSelections.width = width;\r\n        newDesignSelections.length = length;\r\n        newDesignSelections.roomProperties.workingPlaneHeight = workingPlaneHeight;\r\n        newDesignSelections.roomProperties.ceilingDrop = ceilingDrop;\r\n        newDesignSelections.roomProperties.targetIlluminance = targetIlluminance;\r\n        newDesignSelections.roomProperties.reflectanceCeiling = reflectanceCeiling;\r\n        newDesignSelections.roomProperties.reflectanceWall = reflectanceWall;\r\n        newDesignSelections.roomProperties.reflectanceFloor = reflectanceFloor;\r\n        newDesignSelections.roomProperties.maintenanceFactor = maintenanceFactor;\r\n\r\n        props.setDesignSelections(newDesignSelections);\r\n        props.fetchOptimise(newDesignSelections);\r\n    }\r\n\r\n    function handleSwitchChange(e: any) {\r\n        setDisableOptionalSettings(!e.target.checked);\r\n    };\r\n\r\n    var optionalText: string;\r\n    if (disableOptionalSettings) {\r\n        optionalText = 'Optional settings (disabled)';\r\n    } else {\r\n        optionalText = 'Optional settings (enabled)';\r\n    };\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Room Dimensions</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center pb-2\">\r\n                <TextField id=\"height\" className=\"mr-2 mb-4\" label=\"Height (m)\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"0.1\", min: 0 }} defaultValue={props.designSelections.height} onChange={(e) => setHeight(parseFloat(e.target.value))} />\r\n                <TextField id=\"width\" className=\"mr-2 mb-4\" label=\"Width (m)\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"0.1\", min: 0 }} defaultValue={props.designSelections.width} onChange={(e) => setWidth(parseFloat(e.target.value))} />\r\n                <TextField id=\"length\" className=\"mr-2 mb-4\" label=\"Length (m)\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"0.1\", min: 0 }} defaultValue={props.designSelections.length} onChange={(e) => setLength(parseFloat(e.target.value))} />\r\n            </div>\r\n\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                {optionalText}\r\n                <Switch\r\n                    checked={!disableOptionalSettings}\r\n                    onChange={handleSwitchChange}\r\n                    color=\"primary\"\r\n                />\r\n            </div>\r\n\r\n            <h2 className=\"text-center pb-3\">Calculation Settings</h2>\r\n            <div className=\"d-flex flex-wrap justify-content-center pb-2\">\r\n                <TextField disabled={disableOptionalSettings} id=\"workingPlaneHeight\" className=\"mr-2 mb-4\" label=\"Working Plane Height (m)\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"0.1\", min: 0 }} defaultValue={props.designSelections.roomProperties.workingPlaneHeight} onChange={(e) => setWorkingPlaneHeight(parseFloat(e.target.value))} />\r\n                <TextField disabled={disableOptionalSettings} id=\"ceilingDrop\" className=\"mr-2 mb-4\" label=\"Fittings Suspended By (m)\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"0.1\", min: 0 }} defaultValue={props.designSelections.roomProperties.ceilingDrop} onChange={(e) => setCeilingDrop(parseFloat(e.target.value))} />\r\n                <TextField disabled={disableOptionalSettings} id=\"targetIlluminance\" className=\"mr-2 mb-4\" label=\"Target Illuminance (Lux)\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"50\", min: 0 }} defaultValue={props.designSelections.roomProperties.targetIlluminance} onChange={(e) => setTargetIlluminance(parseFloat(e.target.value))} />\r\n            </div>\r\n            <div className=\"d-flex flex-wrap justify-content-center pb-2\">\r\n                <TextField disabled={disableOptionalSettings} id=\"reflectanceCeiling\" className=\"mr-2 mb-4\" label=\"Reflectance Ceiling\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"1\", min: 0 }} defaultValue={props.designSelections.roomProperties.reflectanceCeiling} onChange={(e) => setReflectanceCeiling(parseFloat(e.target.value))} />\r\n                <TextField disabled={disableOptionalSettings} id=\"reflectanceWall\" className=\"mr-2 mb-4\" label=\"Reflectance Walls\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"1\", min: 0 }} defaultValue={props.designSelections.roomProperties.reflectanceWall} onChange={(e) => setReflectanceWall(parseFloat(e.target.value))} />\r\n                <TextField disabled={disableOptionalSettings} id=\"reflectanceFloor\" className=\"mr-2 mb-4\" label=\"Reflectance Floor\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"1\", min: 0 }} defaultValue={props.designSelections.roomProperties.reflectanceFloor} onChange={(e) => setReflectanceFloor(parseFloat(e.target.value))} />\r\n            </div>\r\n            <div className=\"d-flex flex-wrap justify-content-center\">\r\n                <TextField disabled={disableOptionalSettings} id=\"maintenanceFactor\" className=\"mr-2 mb-4\" label=\"Maintenance Factor\" variant=\"outlined\" type=\"number\" inputProps={{ step: \"0.1\", min: 0 }} defaultValue={props.designSelections.roomProperties.maintenanceFactor} onChange={(e) => setMaintenanceFactor(parseFloat(e.target.value))} />\r\n            </div>\r\n\r\n            <div className=\"d-flex flex-wrap justify-content-center pt-3\">\r\n                <Button variant=\"contained\" onClick={() => {\r\n                    setDimensions();\r\n                }\r\n                }>Optimise</Button>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default RoomDimensionCard;\r\n","import React, { useEffect } from 'react';\r\nimport { DesignSelections, ProjectResult } from '../../types';\r\nimport Box from '@mui/material/Box';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Table from '@mui/material/Table';\r\nimport TableBody from '@mui/material/TableBody';\r\nimport TableCell from '@mui/material/TableCell';\r\nimport TableContainer from '@mui/material/TableContainer';\r\nimport TableHead from '@mui/material/TableHead';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport Paper from '@mui/material/Paper';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\r\nimport { Button } from '@mui/material';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections,\r\n    setSelectedSolution: React.Dispatch<React.SetStateAction<ProjectResult>>;\r\n}\r\n\r\ntype RowProps = {\r\n    row: ProjectResult,\r\n    setSelectedRow: React.Dispatch<React.SetStateAction<string>>\r\n}\r\n\r\nfunction Row(props: RowProps) {\r\n    const row = props.row;\r\n    const [open, setOpen] = React.useState<boolean>(false);\r\n    \r\n    return (\r\n        <React.Fragment>\r\n            <TableRow sx={{ '& > *': { borderBottom: 'unset' } }}>\r\n                <TableCell className=\"pt-0 pb-0 pl-0 pr-0\" width=\"5%\">\r\n                    <IconButton\r\n                        aria-label=\"expand row\"\r\n                        size=\"small\"\r\n                        onClick={\r\n                            () => {\r\n                                setOpen(!open);\r\n                            }\r\n                        }\r\n                    >\r\n                        {open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />}\r\n                    </IconButton>\r\n                </TableCell>\r\n                <TableCell component=\"th\" scope=\"row\" width=\"30%\">\r\n                    {row.luminaire.manufactureName}\r\n                </TableCell>\r\n                <TableCell width=\"30%\">{row.luminaire.luminaireName}</TableCell>\r\n                <TableCell width=\"25%\">{row.totalSchemeWatts}W</TableCell>\r\n                <TableCell width=\"10%\"><Button variant=\"contained\" onClick={() => { row.luminaire.luminaireName && props.setSelectedRow(row.luminaire.luminaireName) }}>View More</Button></TableCell>\r\n            </TableRow>\r\n            <TableRow>\r\n                <TableCell style={{ padding: 0 }} colSpan={5}>\r\n                    <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n                        <Box sx={{ margin: 1 }}>\r\n                            <Table size=\"small\" aria-label=\"details\" style={{ marginBottom: 10, marginTop: 10, borderBottom: \"none\" }}>\r\n                                <TableHead>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">Availability</TableCell>\r\n                                        <TableCell width=\"30%\">Wattage per m&sup2;</TableCell>\r\n                                        <TableCell width=\"25%\">Number Required</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableHead>\r\n                                <TableBody>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">{row.availability}</TableCell>\r\n                                        <TableCell width=\"30%\">{row.wattagePerArea} W/m&sup2;</TableCell>\r\n                                        <TableCell width=\"25%\">{row.numberRequired}</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableBody>\r\n                            </Table>\r\n                            <Table size=\"small\" aria-label=\"room details\" style={{ marginBottom: 10, marginTop: 10, border: \"none\" }}>\r\n                                <TableHead>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">Rows</TableCell>\r\n                                        <TableCell width=\"30%\">Columns</TableCell>\r\n                                        <TableCell width=\"25%\">Lux Level</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableHead>\r\n                                <TableBody>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">{row.rowsRequired}</TableCell>\r\n                                        <TableCell width=\"30%\">{row.columnsRequired}</TableCell>\r\n                                        <TableCell width=\"25%\">{row.luxLevel}</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableBody>\r\n                            </Table>\r\n                        </Box>\r\n                    </Collapse>\r\n                </TableCell>\r\n            </TableRow>\r\n        </React.Fragment>\r\n    );\r\n}\r\n\r\nexport default function CollapsibleTable(props: Props) {\r\n    const [selectedRow, setSelectedRow] = React.useState<string>('');\r\n\r\n    useEffect(() => {\r\n        if (selectedRow === \"\") {\r\n            return;\r\n        }\r\n\r\n        var selected = props.designSelections.solutions?.find(x => x.luminaire.luminaireName === selectedRow);\r\n\r\n        if (selected && selected.luminaire.luminaireName !== undefined) {\r\n            props.setSelectedSolution(selected);\r\n        }\r\n\r\n    }, [selectedRow]);\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Your Results</h2>\r\n            <div>\r\n                {props.designSelections.solutions && props.designSelections.solutions.length > 0 && (\r\n                    <TableContainer component={Paper}>\r\n                        <Table aria-label=\"collapsible table\">\r\n                            <TableHead>\r\n                                <TableRow>\r\n                                    <TableCell width=\"5%\" />\r\n                                    <TableCell width=\"30%\">Manufacturer</TableCell>\r\n                                    <TableCell width=\"30%\">Product</TableCell>\r\n                                    <TableCell width=\"25%\">Total Scheme Watts</TableCell>\r\n                                    <TableCell width=\"10%\" />\r\n                                </TableRow>\r\n                            </TableHead>\r\n                            <TableBody>\r\n                                {props.designSelections.solutions.map((row) => (\r\n                                    <Row key={row.id} row={row} setSelectedRow={setSelectedRow} />\r\n                                ))}\r\n                            </TableBody>\r\n                        </Table>\r\n                    </TableContainer>\r\n                )}\r\n             </div>\r\n        </div>\r\n    );\r\n}","import React from 'react';\r\nimport { TextField } from '@mui/material';\r\nimport { DesignSelections, PDFClient } from '../../types';\r\nimport { Button } from '@mui/material';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections;\r\n    setShowPdfSender: React.Dispatch<React.SetStateAction<boolean>>\r\n}\r\n\r\nconst PDFSenderCard = (props: Props): React.ReactElement => {\r\n    const [email, setEmail] = React.useState(\"\");\r\n    const path = window.location.href.replace(/\\/+$/, '');\r\n\r\n    let sendEmail = function (): void {\r\n        new PDFClient(path, undefined).generatePDF(props.designSelections, email);\r\n    }\r\n\r\n    return (\r\n        <div className=\"\">\r\n            <h2 className=\"text-center pb-3\">Email PDF</h2>\r\n\r\n            <div className=\"d-flex justify-content-center\">\r\n                <TextField id=\"emailAddress\" className=\"mr-2 mb-4\" label=\"Enter email address\" variant=\"outlined\" type=\"text\" style={{minWidth: \"300px\"}} onChange={(e) => setEmail(e.target.value)} />\r\n            </div>\r\n            <div className=\"d-flex justify-content-center\">\r\n                <Button variant=\"contained\" onClick={() => { sendEmail(); props.setShowPdfSender(false)}}>Send Email</Button>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default PDFSenderCard;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { BuildingType, CCTTemperatureType, CCTType, DesignSelectionClient, DesignSelections, EnumDescriptionClient, PDFClient } from '../../types';\r\nimport { Button } from '@mui/material';\r\nimport PDFSenderCard from './PDFSenderCard';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections\r\n}\r\n\r\nconst ResultSelectionCard = (props: Props): React.ReactElement => {\r\n    const [colourTemperature, setColourTemperature] = useState<string>(\"\");\r\n    const [cCTType, setCCTType] = useState<string>(\"\");\r\n    const [buildingType, setBuildingType] = useState<string>(\"\");\r\n    const [showEmail, setShowEmail] = useState<boolean>(false);\r\n    const path = window.location.href.replace(/\\/+$/, '');\r\n\r\n    //const [controlType, setControlType] = useState<string>(\"\");\r\n    //const [recessedSize, setRecessedSize] = useState<string>(\"\");\r\n     \r\n    let fetchColourTemperature = function (designSelections: DesignSelections): void {\r\n        if (designSelections.solution?.luminaire.luminaireColourTemperature === CCTTemperatureType.None || designSelections.buildingType === BuildingType.None) {\r\n            return;\r\n        }\r\n\r\n        new EnumDescriptionClient(path, undefined).getCCTTemperatureType(designSelections.solution.luminaire.luminaireColourTemperature).then((displayName: string) => {\r\n            setColourTemperature(displayName);\r\n        })\r\n        new EnumDescriptionClient(path, undefined).getCCTType(designSelections.solution.luminaire.luminaireColourType).then((displayName: string) => {\r\n            setCCTType(displayName);\r\n        })\r\n        new EnumDescriptionClient(path, undefined).getBuildingType(designSelections.buildingType).then((displayName: string) => {\r\n            setBuildingType(displayName);\r\n        })\r\n\r\n        //new EnumDescriptionClient(path, undefined).getControlType(designSelections.solution.luminaire.luminaireControlType).then((displayName: string) => {\r\n        //    setControlType(displayName);\r\n        //})\r\n        //new EnumDescriptionClient(path, undefined).getRecessedSize(designSelections.solution.luminaire.luminaireRecessedSize).then((displayName: string) => {\r\n        //    setRecessedSize(displayName);\r\n        //})\r\n    };\r\n\r\n    useEffect(() => {\r\n        fetchColourTemperature(props.designSelections);\r\n    }, []);\r\n\r\n    return (\r\n        <>\r\n            <div>\r\n                {props.designSelections?.solution && colourTemperature !== \"\" && !showEmail && (\r\n                    <div>\r\n                        <h2 className=\"text-center\">Project: {props.designSelections.projectName}</h2>\r\n                        {/*<div className=\"d-flex justify-content-center mt-3 mb-3\">*/}\r\n                        {/*    <Button variant=\"contained\" className=\"mx-auto\" onClick={() => {*/}\r\n                        {/*        setShowEmail(true);*/}\r\n                        {/*    }}>Email PDF Report</Button>*/}\r\n                        {/*</div>*/}\r\n                        <h4 className=\"pb-2\">Light Details</h4>\r\n                        <div className=\"d-flex justify-content-between pb-5\">\r\n                            <div className=\"w-25\">\r\n                                <h6>Manufacturer</h6>\r\n                                <p>{props.designSelections.solution.luminaire.manufactureName}</p>\r\n                                <h6>Product Reference</h6>\r\n                                <p>{props.designSelections.solution.luminaire.luminaireName}</p>\r\n                                <h6>Light Source</h6>\r\n                                <p>{cCTType}</p>\r\n                                <h6>CCT</h6>\r\n                                <p>{colourTemperature}</p>\r\n                                <h6>Delivered Lumens</h6>\r\n                                <p>{props.designSelections.solution.luminaire.deliveredLumens} lumens</p>\r\n                                <h6>IP Rating</h6>\r\n                                <p>{props.designSelections.solution.luminaire.ipRating}</p>\r\n                                <h6>IK Rating</h6>\r\n                                <p>{props.designSelections.solution.luminaire.ikRating}</p>\r\n                                <h6>Housing Colour</h6>\r\n                                <p>{props.designSelections.solution.luminaire.luminaireHousingColour}</p>\r\n                                <h6>Housing Material</h6>\r\n                                <p>{props.designSelections.solution.luminaire.luminaireHousingFinish}</p>\r\n                            </div>\r\n                            <div className=\"w-25\">\r\n                                <h6>Mount</h6>\r\n                                <p>{props.designSelections.solution.luminaire.mount}</p>\r\n                                <h6>Placement</h6>\r\n                                <p>{props.designSelections.solution.luminaire.luminaireProductType}</p>\r\n                                <h6>Driver</h6>\r\n                                <p>{props.designSelections.solution.luminaire.driver}</p>\r\n                                <h6>Control</h6>\r\n                                <p>{props.designSelections.solution.luminaire.luminaireControlType}</p>\r\n                            </div>\r\n                            <div className=\"w-25 d-flex flex-column justify-content-start\">\r\n                                {props.designSelections.solution.luminaire.image1Path && (<img src={props.designSelections.solution.luminaire.image1Path} alt=\"Light Fitting\" className=\"roomImage mb-4\" /> )}\r\n                                {props.designSelections.solution.luminaire.image2Path && (<img src={props.designSelections.solution.luminaire.image2Path} alt=\"Light Sketch\" className=\"roomImage mb-4\" /> )}\r\n                            </div>\r\n                        </div>\r\n\r\n                        <h4 className=\"pb-2\">Luminaire Details</h4>\r\n                        <div className=\"d-flex justify-content-between\">\r\n                            <div className=\"w-25\">\r\n                                <h6>Number of Fittings</h6>\r\n                                <p>{props.designSelections.solution.numberRequired}</p>\r\n                                <h6>Rows</h6>\r\n                                <p>{props.designSelections.solution.rowsRequired}</p>\r\n                                <h6>Columns</h6>\r\n                                <p>{props.designSelections.solution.columnsRequired}</p>\r\n                                <h6>Total Power</h6>\r\n                                <p>{props.designSelections.solution.totalSchemeWatts}W</p>\r\n                                <h6>Current</h6>\r\n                                <p>{((props.designSelections.solution.totalSchemeWatts / props.designSelections.solution.numberRequired) / 240).toFixed(2)}A</p>\r\n                            </div>\r\n                            <div className=\"w-25\">\r\n                                <h6>Height</h6>\r\n                                <p>{props.designSelections.solution.luminaire.heightMM}</p>\r\n                                <h6>Length</h6>\r\n                                <p>{props.designSelections.solution.luminaire.lengthMM}</p>\r\n                                <h6>Width</h6>\r\n                                <p>{props.designSelections.solution.luminaire.widthMM}</p>\r\n                                <h6>Weight</h6>\r\n                                <p>{props.designSelections.solution.luminaire.weightKG}</p>\r\n                                <h6>Wattage per m&sup2;</h6>\r\n                                <p>{props.designSelections.solution.wattagePerArea} W/m&sup2;</p>\r\n                            </div>\r\n                            <div className=\"w-25\">\r\n                                {/*<Paper className=\"lightingLayout mb-4\">*/}\r\n                                {/*   <div className=\"lightingLayoutTop\">*/}\r\n                                {/*        <div className=\"square\"></div>*/}\r\n                                {/*        <div className=\"square\"></div>*/}\r\n                                {/*        <div className=\"square\"></div>*/}\r\n                                {/*    </div>*/}\r\n                                {/*    <div className=\"lightingLayoutBottom\">*/}\r\n                                {/*        <div className=\"square\"></div>*/}\r\n                                {/*        <div className=\"square\"></div>*/}\r\n                                {/*        <div className=\"square\"></div>*/}\r\n                                {/*    </div>*/}\r\n                                {/*</Paper>*/}\r\n                                {/*    <img src={grid} alt=\"Grid\" className=\"gridImage mb-4 d-none d-md-inline\" />*/}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"pb-5\">\r\n                            {/*    <img src={grid} alt=\"Grid\" className=\"gridImage mt-4 d-md-none\" />*/}\r\n                        </div>\r\n                        <h4 className=\"pb-2\">Room Details</h4>\r\n                        <div className=\"d-flex justify-content-between pb-5\">\r\n                            <div className=\"w-25\">\r\n                                <h6>Environment Type</h6>\r\n                                <p>{buildingType} - General Office</p>\r\n                                <h6>Room Length</h6>\r\n                                <p>{props.designSelections.length}m</p>\r\n                                <h6>Room Width</h6>\r\n                                <p>{props.designSelections.width}m</p>\r\n                                <h6>Room Height</h6>\r\n                                <p>{props.designSelections.height}m</p>\r\n                                <h6>Mounting Height</h6>\r\n                                <p>{props.designSelections.height}m</p>\r\n                                <h6>Ceiling Drop</h6>\r\n                                <p>{props.designSelections.roomProperties.ceilingDrop}m</p>\r\n                            </div>\r\n                            <div className=\"w-25\">\r\n                                <h6>Ceiling Reflectance</h6>\r\n                                <p>{props.designSelections.roomProperties.reflectanceCeiling}</p>\r\n                                <h6>Wall Reflectance</h6>\r\n                                <p>{props.designSelections.roomProperties.reflectanceWall}</p>\r\n                                <h6>Floor Reflectance</h6>\r\n                                <p>{props.designSelections.roomProperties.reflectanceFloor}</p>\r\n                                <h6>Maintenance Factor</h6>\r\n                                <p>{props.designSelections.roomProperties.maintenanceFactor}</p>\r\n                            </div>\r\n                            <div className=\"w-25\"></div>\r\n                        </div>\r\n\r\n                        <h4 className=\"pb-2\">Lighting Details</h4>\r\n                        <div className=\"d-flex justify-content-between\">\r\n                            <div className=\"w-25\">\r\n                                <h6>Illuminance</h6>\r\n                                <p>{props.designSelections.solution.luxLevel} lux</p>\r\n                                <h6>Uniformity</h6>\r\n                                <p>{props.designSelections.solution.luminaire.uniformity}</p>\r\n                            </div>\r\n                            <div className=\"w-25\">\r\n                                <h6>Target Illuminance</h6>\r\n                                <p>{props.designSelections.roomProperties.targetIlluminance} lux</p>\r\n                                <h6>Target Uniformity</h6>\r\n                                <p>0.7</p>\r\n                            </div>\r\n                            <div className=\"w-25\"></div>\r\n                        </div>\r\n                    </div>\r\n                )}\r\n                {showEmail && (\r\n                    <PDFSenderCard designSelections={props.designSelections} setShowPdfSender={setShowEmail} />\r\n                )}\r\n            </div>\r\n        </>\r\n    );\r\n}\r\n\r\nexport default ResultSelectionCard; ","import React, { useEffect, useState } from 'react';\r\nimport { BuildingType, CardType, CCTTemperatureType, CCTType, CommercialOfficeType, ControlType, DesignSelectionClient, DesignSelections, HousingColourType, HousingFinishType, LanguageType, ProductType, RecessedSizeType, ProjectResult } from '../types';\r\nimport LanguageTypeCard from './cards/LanguageTypeCard';\r\nimport ProjectTypeCard from './cards/ProjectTypeCard';\r\nimport BuildingTypeCard from './cards/BuildingTypeCard';\r\nimport CommercialOfficeTypeCard from './cards/CommercialOfficeTypeCard';\r\nimport ProductTypeCard from './cards/ProductTypeCard';\r\nimport RecessedSizeTypeCard from './cards/RecessedSizeTypeCard';\r\nimport ControlTypeCard from './cards/ControlTypeCard';\r\nimport CCTTypeCard from './cards/CCTTypeCard';\r\nimport CCTTemperatureTypeCard from './cards/CCTTemperatureTypeCard';\r\nimport CCTDynamicTypeCard from './cards/CCTDynamicTypeCard';\r\nimport HousingColourCard from './cards/HousingColourCard';\r\nimport HousingFinishCard from './cards/HousingFinishCard';\r\nimport RoomDimensionCard from './cards/RoomDimensionCard';\r\nimport ResultsCard from './cards/ResultsCard';\r\nimport ResultSelectionCard from './cards/ResultSelectionCard';\r\nimport { Button } from '@mui/material';\r\n\r\nconst DefaultDesignSelections: DesignSelections = {\r\n    languageType: LanguageType.None,\r\n    selection: CardType.LanguageType,\r\n    buildingType: BuildingType.None,\r\n    commercialOfficeType: CommercialOfficeType.None,\r\n    productType: ProductType.None,\r\n    recessedSizeType: RecessedSizeType.None,\r\n    controlType: ControlType.None,\r\n    cctType: CCTType.None,\r\n    cctTemperatureType: CCTTemperatureType.None,\r\n    housingColourType: HousingColourType.None,\r\n    housingFinishType: HousingFinishType.None,\r\n    height: 0,\r\n    width: 0,\r\n    length: 0,\r\n    roomProperties: {\r\n        reflectanceCeiling: 70,\r\n        reflectanceWall: 50,\r\n        reflectanceFloor: 20,\r\n        targetIlluminance: 500,\r\n        ceilingDrop: 0,\r\n        workingPlaneHeight: 0.7,\r\n        maintenanceFactor: 0.8\r\n    },\r\n    atStart: true,\r\n    atEnd: false,\r\n};\r\n\r\nconst DefaultSelectedSolution: ProjectResult = {\r\n    id: \"\",\r\n    projectInputId: \"\",\r\n    luminaireId: \"\",\r\n    dateCreated: new Date(),\r\n    luminaire: {\r\n        id: \"\",\r\n        manufactureName: \"\",\r\n        dateCreated: new Date(),\r\n        luminaireName : \"\",\r\n        luminaireColourTemperature: CCTTemperatureType.None,\r\n        luminaireColourType: CCTType.None,\r\n        luminaireRecessedSize: RecessedSizeType.None,\r\n        luminaireControlType: ControlType.None,\r\n        luminaireHousingColour: HousingColourType.None,\r\n        luminaireHousingFinish: HousingFinishType.None,\r\n        luminaireProductType: ProductType.None,\r\n        lengthMM: 0.0,\r\n        heightMM:  0.0,\r\n        widthMM: 0.0,\r\n        deliveredLumens: 200,\r\n        uniformity: 0,\r\n        weightKG: 0.0,\r\n        driver: \"\",\r\n        ipRating: \"\",\r\n        ikRating: \"\",\r\n        mount: \"\",\r\n    },\r\n    projectInput: {\r\n        id: \"\",\r\n        projectId: \"\",\r\n        dateCreated: new Date(),\r\n        buildingType: BuildingType.None,\r\n        commercialOfficeType: CommercialOfficeType.None,\r\n        luminaireProductType: ProductType.None,\r\n        ceilingGridSize: RecessedSizeType.None,\r\n        luminaireControlType: ControlType.None,\r\n        luminaireCorrelatedColourTemperatureType: CCTType.None,\r\n        luminaireColourTemperature: CCTTemperatureType.None,\r\n        luminaireHousingColour: HousingColourType.None,\r\n        luminaireHousingFinish: HousingFinishType.None,\r\n        height: 0,\r\n        width: 0,\r\n        length: 0,\r\n        reflectanceCeiling: 70,\r\n        reflectanceWall: 50,\r\n        reflectanceFloor: 20,\r\n        targetIlluminance: 500,\r\n        ceilingDrop: 0,\r\n        workingPlaneHeight: 0.7,\r\n        maintenanceFactor: 0.8,\r\n    },\r\n    numberRequired: 0,\r\n    luxLevel: 0,\r\n    availability: \"\",\r\n    rowsRequired: 0,\r\n    columnsRequired: 0,\r\n    wattagePerArea: 0,\r\n    totalSchemeWatts: 0,\r\n    luminaireEfficacy: 0\r\n};\r\n\r\nconst Home = (): React.ReactElement => {\r\n    const path = window.location.href.replace(/\\/+$/, '');\r\n    \r\n    const [selectedSolution, setSelectedSolution] = useState<ProjectResult>(DefaultSelectedSolution);\r\n    const [designSelections, setDesignSelections] = useState<DesignSelections>(DefaultDesignSelections);\r\n\r\n    useEffect(() => {\r\n        designSelections.projectName ? document.title = \"Lighting Selector - \" + designSelections.projectName : document.title = \"Lighting Selector\";\r\n    }, [designSelections.projectName]);\r\n\r\n    let fetchNext = function (designSelections: DesignSelections): void {\r\n        new DesignSelectionClient(path, undefined).postNextCard(designSelections).then((nextDesignSelections: DesignSelections) => {\r\n            console.log('response!!! ' + JSON.stringify(nextDesignSelections));\r\n            setDesignSelections(nextDesignSelections);\r\n        })\r\n    };\r\n\r\n    let fetchPrevious = function (designSelections: DesignSelections): void {\r\n        new DesignSelectionClient(path, undefined).postPreviousCard(designSelections).then((nextDesignSelections: DesignSelections) => {\r\n            setDesignSelections(nextDesignSelections);\r\n        })\r\n    };\r\n\r\n    let fetchOptimise = function (designSelections: DesignSelections): void {\r\n        new DesignSelectionClient(path, undefined).postOptimise(designSelections).then((nextDesignSelections: DesignSelections) => {\r\n            setDesignSelections(nextDesignSelections);\r\n        })\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (designSelections.languageType === LanguageType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.LanguageType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.languageType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.projectName === \"\" || designSelections.projectName === undefined || designSelections.projectName === null) {\r\n            return;\r\n        }\r\n        console.log(designSelections.projectName)\r\n        designSelections.selection = CardType.ProjectType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.projectName]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.buildingType === BuildingType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.BuildingType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.buildingType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.commercialOfficeType === CommercialOfficeType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.CommercialOfficeType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.commercialOfficeType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.productType === ProductType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.ProductType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.productType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.recessedSizeType === RecessedSizeType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.RecessedSizeType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.recessedSizeType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.controlType === ControlType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.ControlType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.controlType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.cctType === CCTType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.CCTType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.cctType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.cctTemperatureType === CCTTemperatureType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.CCTTemperatureType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.cctTemperatureType]);\r\n\r\n    useEffect(() => {\r\n        console.log(\"dynamic type:\" + designSelections.cctDynamicType);\r\n        if (designSelections.cctDynamicType === undefined ||designSelections.cctDynamicType === null || designSelections.cctDynamicType?.length === 0) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.CCTDynamicType;\r\n    }, [designSelections.cctDynamicType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.housingColourType === HousingColourType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.HousingColourType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.housingColourType]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.housingFinishType === HousingFinishType.None) {\r\n            return;\r\n        }\r\n\r\n        designSelections.selection = CardType.HousingFinishType;\r\n        fetchNext(designSelections);\r\n    }, [designSelections.housingFinishType]);\r\n\r\n    useEffect(() => {\r\n        if (selectedSolution && selectedSolution.luminaire?.luminaireName === \"\") {\r\n            return;\r\n        }\r\n\r\n        designSelections.solution = selectedSolution;\r\n        designSelections.selection = CardType.ResultsCard;\r\n        fetchNext(designSelections);\r\n    }, [selectedSolution]);\r\n\r\n    useEffect(() => {\r\n        if (designSelections.selection === CardType.CCTDynamicType) {\r\n            return;\r\n        }\r\n\r\n    }, [designSelections.selection]);\r\n\r\n    return (\r\n      <div className=\"mw-75 mt-5\">\r\n            <div className=\"d-block\">\r\n                {designSelections.atStart && (\r\n                    <LanguageTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.ProjectType && (\r\n                    <ProjectTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.BuildingType && (\r\n                    <BuildingTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.CommercialOfficeType && (\r\n                    <CommercialOfficeTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.ProductType && (\r\n                    <ProductTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.RecessedSizeType && (\r\n                    <RecessedSizeTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.ControlType && (\r\n                    <ControlTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.CCTType && (\r\n                    <CCTTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.CCTTemperatureType && (\r\n                    <CCTTemperatureTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.CCTDynamicType && (\r\n                    <CCTDynamicTypeCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.HousingColourType && (\r\n                    <HousingColourCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.HousingFinishType && (\r\n                    <HousingFinishCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.RoomDimensionType && (\r\n                    <RoomDimensionCard\r\n                        designSelections={designSelections}\r\n                        setDesignSelections={setDesignSelections}\r\n                        defaultDesignSelections={DefaultDesignSelections}\r\n                        fetchOptimise={fetchOptimise}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.ResultsCard && (\r\n                    <ResultsCard\r\n                        designSelections={designSelections}\r\n                        setSelectedSolution={setSelectedSolution}\r\n                    />\r\n                )}\r\n                {designSelections.selection === CardType.ResultSelectionCard && (\r\n                    <ResultSelectionCard\r\n                        designSelections={designSelections}\r\n                    />\r\n                )}\r\n            </div>\r\n            <div className=\"d-flex justify-content-end mt-5 mb-5\">\r\n                {!designSelections.atStart && (\r\n                    <Button variant=\"contained\" onClick={() => fetchPrevious(designSelections)}>Back</Button>\r\n                )}\r\n                {!designSelections.atEnd && (\r\n                    <Button className=\"ml-1\" variant=\"contained\" onClick={() => fetchNext(designSelections)}>Next</Button>\r\n                )}\r\n            </div>\r\n      </div>\r\n    );\r\n}\r\n\r\nexport default Home;\r\n","import React, { useEffect } from 'react';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Table from '@mui/material/Table';\r\nimport TableBody from '@mui/material/TableBody';\r\nimport TableCell from '@mui/material/TableCell';\r\nimport TableContainer from '@mui/material/TableContainer';\r\nimport TableHead from '@mui/material/TableHead';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport Paper from '@mui/material/Paper';\r\nimport { Button } from '@mui/material';\r\nimport { Project, ProjectClient } from '../types';\r\nimport dateFormat from 'dateformat';\r\n\r\ntype RowProps = {\r\n    row: Project,\r\n    setSelectedRow: React.Dispatch<React.SetStateAction<string>>,\r\n    deleteProject: React.Dispatch<React.SetStateAction<string>>,\r\n}\r\n\r\nfunction Row(props: RowProps) {\r\n    const row = props.row;\r\n\r\n    return (\r\n        <React.Fragment>\r\n            <TableRow sx={{ '& > *': { borderBottom: 'unset' } }}>\r\n                <TableCell component=\"th\" scope=\"row\" width=\"50%\">\r\n                    {row.projectName}\r\n                </TableCell>\r\n                <TableCell component=\"th\" scope=\"row\" width=\"30%\">\r\n                    {dateFormat(row.dateCreated, 'dd/mm/yyyy hh:mm')}\r\n                </TableCell>\r\n                <TableCell width=\"10%\"><Button variant=\"outlined\" onClick={() => { row.id && props.deleteProject(row.id) }}>Delete Project</Button></TableCell>\r\n                <TableCell width=\"10%\"><Button variant=\"contained\" onClick={() => { row.id && props.setSelectedRow(row.id) }}>View Results</Button></TableCell>\r\n            </TableRow>\r\n            \r\n        </React.Fragment>\r\n    );\r\n}\r\n\r\nexport default function CollapsibleTable() {\r\n    const path = window.location.href.replace(/\\/+$/, '');\r\n    const [projects, setProjects] = React.useState<Project[]>();\r\n    const [selectedRow, setSelectedRow] = React.useState<string>('');\r\n    const history = useHistory();\r\n\r\n    let fetchProjects = function (): void {\r\n        new ProjectClient(path, undefined).getAll().then((projects: Project[]) => {\r\n            setProjects(projects);\r\n        })\r\n    };\r\n\r\n    const deleteProject = (id: string) => {\r\n        new ProjectClient(path, undefined).delete(id);\r\n        window.location.reload();\r\n    }\r\n\r\n    useEffect(() => {\r\n        fetchProjects();\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if (selectedRow === \"\") {\r\n            return;\r\n        }\r\n\r\n        history.push(`/ProjectResults/${selectedRow}`);\r\n\r\n    }, [selectedRow]);\r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"text-center pb-3\">Your Projects</h2>\r\n            <div className=\"px-5\">\r\n                {projects && projects.length > 0 && (\r\n                    <TableContainer component={Paper}>\r\n                        <Table aria-label=\"collapsible table\">\r\n                            <TableHead>\r\n                                <TableRow>\r\n                                    <TableCell width=\"50%\">Project Name</TableCell>\r\n                                    <TableCell width=\"30%\">Created</TableCell>\r\n                                    <TableCell width=\"10%\">Delete</TableCell>\r\n                                    <TableCell width=\"10%\">View</TableCell>\r\n                                </TableRow>\r\n                            </TableHead>\r\n                            <TableBody>\r\n                                {projects.map((row) => (\r\n                                    <Row key={row.id} row={row} setSelectedRow={setSelectedRow} deleteProject={deleteProject} />\r\n                                ))}\r\n                            </TableBody>\r\n                        </Table>\r\n                    </TableContainer>\r\n                )}\r\n            </div>\r\n        </div>\r\n    );\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { BuildingType, CCTTemperatureType, CCTType, DesignSelectionClient, DesignSelections, EnumDescriptionClient, PDFClient } from '../types';\r\nimport { Button } from '@mui/material';\r\nimport PDFSenderCard from './cards/PDFSenderCard';\r\n\r\ntype Props = {\r\n    designSelections: DesignSelections,\r\n    setShowLuminaire: React.Dispatch<React.SetStateAction<boolean>>\r\n}\r\n\r\nconst ResultSelectionCard = (props: Props): React.ReactElement => {\r\n    const path = window.location.href.replace(/\\/+$/, '');\r\n    const [colourTemperature, setColourTemperature] = useState<string>(\"\");\r\n    const [cCTType, setCCTType] = useState<string>(\"\");\r\n    const [buildingType, setBuildingType] = useState<string>(\"\");\r\n    const [showEmail, setShowEmail] = useState<boolean>(false);\r\n\r\n    //const [controlType, setControlType] = useState<string>(\"\");\r\n    //const [recessedSize, setRecessedSize] = useState<string>(\"\");\r\n    \r\n    let fetchColourTemperature = function (designSelections: DesignSelections): void {\r\n        if (designSelections.solution?.luminaire.luminaireColourTemperature === CCTTemperatureType.None || designSelections.solution?.luminaire.luminaireColourType === CCTType.None || designSelections.buildingType === BuildingType.None) {\r\n            return;\r\n        }\r\n\r\n        new EnumDescriptionClient(path, undefined).getCCTTemperatureType(designSelections.solution.luminaire.luminaireColourTemperature).then((displayName: string) => {\r\n            setColourTemperature(displayName);\r\n        })\r\n        new EnumDescriptionClient(path, undefined).getCCTType(designSelections.solution.luminaire.luminaireColourType).then((displayName: string) => {\r\n            setCCTType(displayName);\r\n        })\r\n        new EnumDescriptionClient(path, undefined).getBuildingType(designSelections.buildingType).then((displayName: string) => {\r\n            setBuildingType(displayName);\r\n        })\r\n        //new EnumDescriptionClient(path, undefined).getControlType(designSelections.solution.luminaire.luminaireControlType).then((displayName: string) => {\r\n        //    setControlType(displayName);\r\n        //})\r\n        //new EnumDescriptionClient(path, undefined).getRecessedSize(designSelections.solution.luminaire.luminaireRecessedSize).then((displayName: string) => {\r\n        //    setRecessedSize(displayName);\r\n        //})\r\n    };\r\n\r\n    useEffect(() => {\r\n        fetchColourTemperature(props.designSelections);\r\n    }, []);\r\n\r\n    return (\r\n        <>\r\n            <div>\r\n                {props.designSelections?.solution && colourTemperature !== \"\" && cCTType !== \"\" && !showEmail && (\r\n                    <div>\r\n                    <div className=\"d-flex justify-content-end mt-5 mb-5\">\r\n                        <Button variant=\"contained\" onClick={() => {\r\n                            setShowEmail(true);\r\n                        }}>Email PDF Report</Button>\r\n                    </div>\r\n                    <h2 className=\"text-center pb-2\">Project: {props.designSelections.projectName}</h2>\r\n                    <h4 className=\"pb-2\">Light Details</h4>\r\n                    <div className=\"d-flex justify-content-between pb-5\">\r\n                        <div className=\"w-25\">\r\n                            <h6>Manufacturer</h6>\r\n                            <p>{props.designSelections.solution.luminaire.manufactureName}</p>\r\n                            <h6>Product Reference</h6>\r\n                            <p>{props.designSelections.solution.luminaire.luminaireName}</p>\r\n                            <h6>Light Source</h6>\r\n                            <p>{cCTType}</p>\r\n                            <h6>CCT</h6>\r\n                            <p>{colourTemperature}</p>\r\n                            <h6>Delivered Lumens</h6>\r\n                            <p>{props.designSelections.solution.luminaire.deliveredLumens} lumens</p>\r\n                            <h6>IP Rating</h6>\r\n                            <p>{props.designSelections.solution.luminaire.ipRating}</p>\r\n                            <h6>IK Rating</h6>\r\n                            <p>{props.designSelections.solution.luminaire.ikRating}</p>\r\n                            <h6>Housing Colour</h6>\r\n                            <p>{props.designSelections.solution.luminaire.luminaireHousingColour}</p>\r\n                            <h6>Housing Material</h6>\r\n                            <p>{props.designSelections.solution.luminaire.luminaireHousingFinish}</p>\r\n                        </div>\r\n                        <div className=\"w-25\">\r\n                            <h6>Mount</h6>\r\n                            <p>{props.designSelections.solution.luminaire.mount}</p>\r\n                            <h6>Placement</h6>\r\n                            <p>{props.designSelections.solution.luminaire.luminaireProductType}</p>\r\n                            <h6>Driver</h6>\r\n                            <p>{props.designSelections.solution.luminaire.driver}</p>\r\n                            <h6>Control</h6>\r\n                            <p>{props.designSelections.solution.luminaire.luminaireControlType}</p>\r\n                        </div>\r\n                        <div className=\"w-25 d-flex flex-column justify-content-start\">\r\n                            {props.designSelections.solution.luminaire.image1Path && (<img src={props.designSelections.solution.luminaire.image1Path} alt=\"Light Fitting\" className=\"roomImage mb-4\" />)}\r\n                            {props.designSelections.solution.luminaire.image2Path && (<img src={props.designSelections.solution.luminaire.image2Path} alt=\"Light Sketch\" className=\"roomImage mb-4\" />)}\r\n                        </div>\r\n                    </div>\r\n\r\n                    <h4 className=\"pb-2\">Luminaire Details</h4>\r\n                    <div className=\"d-flex justify-content-between\">\r\n                        <div className=\"w-25\">\r\n                            <h6>Number of Fittings</h6>\r\n                            <p>{props.designSelections.solution.numberRequired}</p>\r\n                            <h6>Rows</h6>\r\n                            <p>{props.designSelections.solution.rowsRequired}</p>\r\n                            <h6>Columns</h6>\r\n                            <p>{props.designSelections.solution.columnsRequired}</p>\r\n                            <h6>Total Power</h6>\r\n                            <p>{props.designSelections.solution.totalSchemeWatts}W</p>\r\n                            <h6>Current</h6>\r\n                            <p>{((props.designSelections.solution.totalSchemeWatts/props.designSelections.solution.numberRequired)/240).toFixed(2)}A</p>\r\n                        </div>\r\n                        <div className=\"w-25\">\r\n                            <h6>Height</h6>\r\n                            <p>{props.designSelections.solution.luminaire.heightMM}</p>\r\n                            <h6>Length</h6>\r\n                            <p>{props.designSelections.solution.luminaire.lengthMM}</p>\r\n                            <h6>Width</h6>\r\n                            <p>{props.designSelections.solution.luminaire.widthMM}</p>\r\n                            <h6>Weight</h6>\r\n                            <p>{props.designSelections.solution.luminaire.weightKG}</p>\r\n                            <h6>Wattage per m&sup2;</h6>\r\n                            <p>{props.designSelections.solution.wattagePerArea} W/m&sup2;</p>\r\n                        </div>\r\n                        <div className=\"w-25\">\r\n                            {/*<Paper className=\"lightingLayout mb-4\">*/}\r\n                            {/*   <div className=\"lightingLayoutTop\">*/}\r\n                            {/*        <div className=\"square\"></div>*/}\r\n                            {/*        <div className=\"square\"></div>*/}\r\n                            {/*        <div className=\"square\"></div>*/}\r\n                            {/*    </div>*/}\r\n                            {/*    <div className=\"lightingLayoutBottom\">*/}\r\n                            {/*        <div className=\"square\"></div>*/}\r\n                            {/*        <div className=\"square\"></div>*/}\r\n                            {/*        <div className=\"square\"></div>*/}\r\n                            {/*    </div>*/}\r\n                            {/*</Paper>*/}\r\n                        {/*    <img src={grid} alt=\"Grid\" className=\"gridImage mb-4 d-none d-md-inline\" />*/}\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"pb-5\">\r\n                    {/*    <img src={grid} alt=\"Grid\" className=\"gridImage mt-4 d-md-none\" />*/}\r\n                    </div>\r\n                    <h4 className=\"pb-2\">Room Details</h4>\r\n                    <div className=\"d-flex justify-content-between pb-5\">\r\n                        <div className=\"w-25\">\r\n                            <h6>Environment Type</h6>\r\n                            <p>{buildingType} - General Office</p>\r\n                            <h6>Room Length</h6>\r\n                            <p>{props.designSelections.length}m</p>\r\n                            <h6>Room Width</h6>\r\n                            <p>{props.designSelections.width}m</p>\r\n                            <h6>Room Height</h6>\r\n                            <p>{props.designSelections.height}m</p>\r\n                            <h6>Mounting Height</h6>\r\n                            <p>{props.designSelections.height}m</p>\r\n                            <h6>Ceiling Drop</h6>\r\n                            <p>{props.designSelections.roomProperties.ceilingDrop}m</p>\r\n                        </div>\r\n                        <div className=\"w-25\">\r\n                            <h6>Ceiling Reflectance</h6>\r\n                                <p>{props.designSelections.roomProperties.reflectanceCeiling}</p>\r\n                            <h6>Wall Reflectance</h6>\r\n                                <p>{props.designSelections.roomProperties.reflectanceWall}</p>\r\n                            <h6>Floor Reflectance</h6>\r\n                                <p>{props.designSelections.roomProperties.reflectanceFloor}</p>\r\n                            <h6>Maintenance Factor</h6>\r\n                                <p>{props.designSelections.roomProperties.maintenanceFactor}</p>\r\n                        </div>\r\n                        <div className=\"w-25\"></div>\r\n                    </div>\r\n\r\n                    <h4 className=\"pb-2\">Lighting Details</h4>\r\n                    <div className=\"d-flex justify-content-between\">\r\n                        <div className=\"w-25\">\r\n                            <h6>Illuminance</h6>\r\n                            <p>{props.designSelections.solution.luxLevel} lux</p>\r\n                            <h6>Uniformity</h6>\r\n                            <p>{props.designSelections.solution.luminaire.uniformity}</p>\r\n                        </div>\r\n                        <div className=\"w-25\">\r\n                            <h6>Target Illuminance</h6>\r\n                                <p>{props.designSelections.roomProperties.targetIlluminance} lux</p>\r\n                            <h6>Target Uniformity</h6>\r\n                            <p>0.7</p>\r\n                        </div>\r\n                        <div className=\"w-25\"></div>\r\n                    </div>\r\n                </div>\r\n                )}\r\n                <div className=\"d-flex justify-content-end mt-5 mb-5\">\r\n                    <Button variant=\"contained\" onClick={() => {\r\n                        props.setShowLuminaire(false);\r\n                    }}>Back</Button>\r\n                </div>\r\n                {showEmail && (\r\n                    <PDFSenderCard designSelections={props.designSelections} setShowPdfSender={setShowEmail} />\r\n                )}\r\n            </div>\r\n       </>\r\n    );\r\n}\r\n\r\nexport default ResultSelectionCard; ","import React, { useEffect, useState } from 'react';\r\nimport { DesignSelections, Project, ProjectClient, ProjectResult } from '../types';\r\nimport Box from '@mui/material/Box';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Table from '@mui/material/Table';\r\nimport TableBody from '@mui/material/TableBody';\r\nimport TableCell from '@mui/material/TableCell';\r\nimport TableHead from '@mui/material/TableHead';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\r\nimport { Button, TableContainer } from '@mui/material';\r\nimport Paper from '@mui/material/Paper';\r\nimport ProjectLuminaire from './ProjectLuminaire';\r\n\r\ntype Props = {\r\n    projectId: string,\r\n}\r\n\r\ntype RowProps = {\r\n    row: ProjectResult,\r\n    setSelectedRow: React.Dispatch<React.SetStateAction<string>>\r\n}\r\n\r\nfunction Row(props: RowProps) {\r\n    const row = props.row;\r\n    const [open, setOpen] = React.useState<boolean>(false);\r\n\r\n    return (\r\n        <React.Fragment>\r\n            <TableRow sx={{ '& > *': { borderBottom: 'unset' } }}>\r\n                <TableCell className=\"pt-0 pb-0 pl-0 pr-0\" width=\"5%\">\r\n                    <IconButton\r\n                        aria-label=\"expand row\"\r\n                        size=\"small\"\r\n                        onClick={\r\n                            () => {\r\n                                setOpen(!open);\r\n                            }\r\n                        }\r\n                    >\r\n                        {open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />}\r\n                    </IconButton>\r\n                </TableCell>\r\n                <TableCell component=\"th\" scope=\"row\" width=\"30%\">\r\n                    {row.luminaire.manufactureName}\r\n                </TableCell>\r\n                <TableCell width=\"30%\">{row.luminaire.luminaireName}</TableCell>\r\n                <TableCell width=\"25%\">{row.totalSchemeWatts}W</TableCell>\r\n                <TableCell width=\"10%\"><Button variant=\"contained\" onClick={() => { row.luminaire.luminaireName && props.setSelectedRow(row.luminaire.luminaireName) }}>View More</Button></TableCell>\r\n            </TableRow>\r\n            <TableRow>\r\n                <TableCell style={{ padding: 0 }} colSpan={5}>\r\n                    <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n                        <Box sx={{ margin: 1 }}>\r\n                            <Table size=\"small\" aria-label=\"details\" style={{ marginBottom: 10, marginTop: 10, borderBottom: \"none\" }}>\r\n                                <TableHead>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">Availability</TableCell>\r\n                                        <TableCell width=\"30%\">Wattage per m&sup2;</TableCell>\r\n                                        <TableCell width=\"25%\">Number Required</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableHead>\r\n                                <TableBody>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">{row.availability}</TableCell>\r\n                                        <TableCell width=\"30%\">{row.wattagePerArea} W/m&sup2;</TableCell>\r\n                                        <TableCell width=\"25%\">{row.numberRequired}</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableBody>\r\n                            </Table>\r\n                            <Table size=\"small\" aria-label=\"room details\" style={{ marginBottom: 10, marginTop: 10, border: \"none\" }}>\r\n                                <TableHead>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">Rows</TableCell>\r\n                                        <TableCell width=\"30%\">Columns</TableCell>\r\n                                        <TableCell width=\"25%\">Lux Level</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableHead>\r\n                                <TableBody>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">{row.rowsRequired}</TableCell>\r\n                                        <TableCell width=\"30%\">{row.columnsRequired}</TableCell>\r\n                                        <TableCell width=\"25%\">{row.luxLevel}</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableBody>\r\n                            </Table>\r\n                        </Box>\r\n                    </Collapse>\r\n                </TableCell>\r\n            </TableRow>\r\n        </React.Fragment>\r\n    );\r\n}\r\n\r\nexport default function CollapsibleTable(props: Props) {\r\n    const path = window.location.href.replace(/\\/+$/, '');\r\n    const [selectedRow, setSelectedRow] = React.useState<string>('');\r\n    //const [project, setProject] = useState<Project>(null);\r\n    const [designSelections, setDesignSelections] = useState<DesignSelections>(null);\r\n    const [showLuminaire, setShowLuminaire] = useState<boolean>(false);\r\n\r\n    //useEffect(() => {\r\n    //    project.projectName ? document.title = \"Lighting Selector - \" + project.projectName : document.title = \"Lighting Selector\";\r\n    //}, [project.projectName]);\r\n\r\n    //let fetchProject = function (): void {\r\n    //    new ProjectClient(path, undefined).get(props.projectId).then((project: Project) => {\r\n    //        setProject(project);\r\n    //    })\r\n    //};\r\n\r\n    let fetchDesignSelections = function (id: string): void {\r\n        new ProjectClient(path, undefined).get(id).then((designSelections: DesignSelections) => {\r\n            setDesignSelections(designSelections);\r\n        })\r\n    };\r\n\r\n    useEffect(() => {\r\n        fetchDesignSelections(props.projectId);\r\n    }, [props.projectId]);\r\n\r\n    useEffect(() => {\r\n        if (selectedRow === \"\") {\r\n            return;\r\n        }\r\n\r\n        var selected = designSelections.solutions?.find(x => x.luminaire.luminaireName === selectedRow);\r\n\r\n        if (selected && selected.luminaire.luminaireName !== undefined) {\r\n            designSelections.solution = selected;\r\n            setDesignSelections(designSelections);\r\n            setShowLuminaire(true);\r\n        }\r\n\r\n    }, [selectedRow]);\r\n\r\n    return (\r\n        <div>\r\n            <div>\r\n                {designSelections && designSelections.solutions && designSelections.solutions.length > 0 && !showLuminaire && (\r\n                    <div>\r\n                    <h2 className=\"text-center pb-3\">Your Results</h2>\r\n                        <TableContainer component={Paper}>\r\n                            <Table aria-label=\"collapsible table\">\r\n                                <TableHead>\r\n                                    <TableRow>\r\n                                        <TableCell width=\"5%\" />\r\n                                        <TableCell width=\"30%\">Manufacturer</TableCell>\r\n                                        <TableCell width=\"30%\">Product</TableCell>\r\n                                        <TableCell width=\"25%\">Total Scheme Watts</TableCell>\r\n                                        <TableCell width=\"10%\" />\r\n                                    </TableRow>\r\n                                </TableHead>\r\n                                <TableBody>\r\n                                    {designSelections.solutions.map((row) => (\r\n                                         <Row key={row.id} row={row} setSelectedRow={setSelectedRow} />\r\n                                    ))}\r\n                                </TableBody>\r\n                            </Table>\r\n                            </TableContainer>\r\n                        </div>\r\n                )}\r\n                {showLuminaire && designSelections.solution && (\r\n                    <ProjectLuminaire\r\n                        designSelections={designSelections}\r\n                        setShowLuminaire={setShowLuminaire}\r\n                    />\r\n                )}\r\n             </div>\r\n        </div>\r\n    );\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport Home from './components/Home';\r\nimport Projects from './components/Projects';\r\nimport ProjectResults from './components/ProjectResults';\r\n\r\nimport './custom.css'\r\nimport { Client, ClientClient } from './types';\r\n\r\nfunction App(): React.ReactElement {\r\n    const displayName = Layout.name;\r\n    const path = window.location.href.replace(/\\/+$/, '');\r\n\r\n    const [logoPath, setLogoPath] = useState<string>(\"\");\r\n    const [primaryColour, setPrimaryColour] = useState<string>(\"\");\r\n    const [secondaryColour, setSecondaryColour] = useState<string>(\"\");\r\n\r\n    useEffect(() => {\r\n        new ClientClient(path, undefined).get().then((client: Client) => {\r\n            setLogoPath(client.logoPath);\r\n            setPrimaryColour(client.primaryColour);\r\n            setSecondaryColour(client.secondaryColour);\r\n        }) // https://stackoverflow.com/questions/40769551/how-to-use-google-fonts-in-react-js\r\n    }, []);\r\n\r\n    return (\r\n        <>\r\n            {logoPath !== \"\" && (\r\n                <Layout logoPath={logoPath} primaryColour={primaryColour} secondaryColour={secondaryColour}>\r\n                    <Route exact path='/' component={Home} />\r\n                    <Route exact path='/Projects' component={Projects} />\r\n                    <Route exact path=\"/ProjectResults/:id\" render={(props) => <ProjectResults projectId={props.match.params.id} />}  />\r\n                </Layout>\r\n            )}\r\n        </>\r\n    );\r\n  }\r\n\r\nexport default App;\r\n","// tslint:disable:no-console\r\n// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the 'N+1' visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n    window.window.location.href === 'localhost' ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.window.location.href === '[::1]' ||\r\n    // 127.0.0.1/8 is considered localhost for IPv4.\r\n    window.window.location.href.match(\r\n        /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n    )\r\n);\r\n\r\nexport default function register() {\r\n    if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n        // The URL constructor is available in all browsers that support SW.\r\n        const publicUrl = new URL(\r\n            process.env.PUBLIC_URL!,\r\n            window.location.toString()\r\n        );\r\n        if (publicUrl.origin !== window.location.origin) {\r\n            // Our service worker won't work if PUBLIC_URL is on a different origin\r\n            // from what our page is served on. This might happen if a CDN is used to\r\n            // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n            return;\r\n        }\r\n\r\n        window.addEventListener('load', () => {\r\n            const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n            if (isLocalhost) {\r\n                // This is running on localhost. Lets check if a service worker still exists or not.\r\n                checkValidServiceWorker(swUrl);\r\n\r\n                // Add some additional logging to localhost, pointing developers to the\r\n                // service worker/PWA documentation.\r\n                navigator.serviceWorker.ready.then(() => {\r\n                    console.log(\r\n                        'This web app is being served cache-first by a service ' +\r\n                        'worker. To learn more, visit https://goo.gl/SC7cgQ'\r\n                    );\r\n                });\r\n            } else {\r\n                // Is not local host. Just register service worker\r\n                registerValidSW(swUrl);\r\n            }\r\n        });\r\n    }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string) {\r\n    navigator.serviceWorker\r\n        .register(swUrl)\r\n        .then(registration => {\r\n            registration.onupdatefound = () => {\r\n                const installingWorker = registration.installing;\r\n                if (installingWorker) {\r\n                    installingWorker.onstatechange = () => {\r\n                        if (installingWorker.state === 'installed') {\r\n                            if (navigator.serviceWorker.controller) {\r\n                                // At this point, the old content will have been purged and\r\n                                // the fresh content will have been added to the cache.\r\n                                // It's the perfect time to display a 'New content is\r\n                                // available; please refresh.' message in your web app.\r\n                                console.log('New content is available; please refresh.');\r\n                            } else {\r\n                                // At this point, everything has been precached.\r\n                                // It's the perfect time to display a\r\n                                // 'Content is cached for offline use.' message.\r\n                                console.log('Content is cached for offline use.');\r\n                            }\r\n                        }\r\n                    };\r\n                }\r\n            };\r\n        })\r\n        .catch(error => {\r\n            console.error('Error during service worker registration:', error);\r\n        });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string) {\r\n    // Check if the service worker can be found. If it can't reload the page.\r\n    fetch(swUrl)\r\n        .then(response => {\r\n            // Ensure service worker exists, and that we really are getting a JS file.\r\n            if (\r\n                response.status === 404 ||\r\n                response.headers.get('content-type')!.indexOf('javascript') === -1\r\n            ) {\r\n                // No service worker found. Probably a different app. Reload the page.\r\n                navigator.serviceWorker.ready.then(registration => {\r\n                    registration.unregister().then(() => {\r\n                        window.location.reload();\r\n                    });\r\n                });\r\n            } else {\r\n                // Service worker found. Proceed as normal.\r\n                registerValidSW(swUrl);\r\n            }\r\n        })\r\n        .catch(() => {\r\n            console.log(\r\n                'No internet connection found. App is running in offline mode.'\r\n            );\r\n        });\r\n}\r\n\r\nexport function unregister() {\r\n    if ('serviceWorker' in navigator) {\r\n        navigator.serviceWorker.ready.then(registration => {\r\n            registration.unregister();\r\n        });\r\n    }\r\n}","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n  <BrowserRouter basename={baseUrl}>\r\n    <App />\r\n  </BrowserRouter>,\r\n  rootElement);\r\n\r\nregisterServiceWorker();"],"sourceRoot":""}