{"version":3,"sources":["App.js","index.js"],"names":["App","props","onLoad","a","isRemoveTextOnError","console","log","updateMessage","window","fetch","process","response","json","text","Error","updateText","error","onSave","state","method","headers","body","JSON","stringify","changeText","event","target","value","setState","message","isNotSetTimeout","setTimeout","String","this","className","href","title","type","onClick","placeholder","onChange","React","Component","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"4SAmIeA,E,kDAxHb,WAAYC,GAAQ,IAAD,8BACjB,cAAMA,IA6BRC,OA9BmB,sBA8BV,4CAAAC,EAAA,6DAAOC,EAAP,gCACPC,QAAQC,IAAI,WACZ,EAAKC,cAAc,cAAc,GAF1B,kBAKkBC,OAAOC,MAAMC,wCAL/B,cAKCC,EALD,gBAMcA,EAASC,OANvB,UAOW,OADVA,EAND,QAOGC,KAPH,uBAOuB,IAAIC,MAAM,8DAPjC,QASLT,QAAQC,IAAI,oBAAqBM,EAAKC,MACtC,EAAKE,WAAWH,EAAKC,MACrB,EAAKN,cAAc,UAXd,kDAcLF,QAAQW,MAAM,kBAAd,MACA,EAAKT,cAAc,kBAChBH,GAAqB,EAAKW,WAAW,IAhBnC,0DA9BU,EAmDnBE,OAnDmB,sBAmDV,sBAAAd,EAAA,6DACPE,QAAQC,IAAI,UAAW,EAAKY,MAAML,MAClC,EAAKN,cAAc,aAAa,GAFzB,kBAKCC,OAAOC,MAAMC,uCAA+B,CAChDS,OAAQ,MACRC,QAAS,CAAE,eAAgB,oBAC3BC,KAAMC,KAAKC,UAAU,CAAEV,KAAM,EAAKK,MAAML,SARrC,OAWLR,QAAQC,IAAI,qBACZ,EAAKC,cAAc,SAZd,gDAeLF,QAAQW,MAAM,kBAAd,MACA,EAAKT,cAAc,kBAhBd,yDAnDU,EA8EnBiB,WAAa,SAAAC,GACX,EAAKV,WAAWU,EAAMC,OAAOC,OAC7B,EAAKpB,cAAc,IAAI,IAhFN,EA4FnBQ,WAAa,SAAAF,GAAI,OAAI,EAAKe,SAAS,CAAEf,UA5FlB,EAoGnBN,cAAgB,SAACsB,GAAsC,IAA7BC,EAA4B,wDACpD,EAAKF,SAAS,CAAEC,YACZC,GAAiBC,YAAW,kBAAM,EAAKH,SAAS,CAAEC,QAAS,OAAO,MApGtE,EAAKX,MAAQ,CACXL,KAAS,kBACTgB,QAAS,mBAJM,E,qDAanB,WAGE,GAFAxB,QAAQC,IAAR,yCAA8CI,uCAA9C,MAEsF,KAA1CsB,OAAOtB,wCAGjD,OAFAuB,KAAKlB,WAAW,IAChBkB,KAAK1B,cAAc,SAAS,GACrBF,QAAQW,MAAM,yFAGvBiB,KAAK/B,QAAO,K,oBAoFd,WACE,OACE,sBAAKgC,UAAU,MAAf,UAEE,oBAAIA,UAAU,QAAd,SAAsB,mBAAGC,KAAK,sBAAsBT,OAAO,SAASU,MAAM,eAApD,2BACtB,qBAAKF,UAAU,UAAf,SAA0BD,KAAKf,MAAMW,UACrC,wBAAQQ,KAAK,SAASC,QAASL,KAAK/B,OAAQgC,UAAU,OAAtD,kBACA,wBAAQG,KAAK,SAASC,QAASL,KAAKhB,OAAQiB,UAAU,OAAtD,kBACA,0BAAUK,YAAY,oBAAoBZ,MAAOM,KAAKf,MAAML,KAAM2B,SAAUP,KAAKT,WAAYU,UAAU,gB,GAxH7FO,IAAMC,WCCxBC,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,EAAD,MAEFC,SAASC,eAAe,W","file":"static/js/main.e534b223.chunk.js","sourcesContent":["import React from 'react';\n\nimport './App.css';\n\n/** App */\nclass App extends React.Component {\n /**\n * Constructor\n * \n * @param {*} props Props\n */\n constructor(props) {\n super(props);\n this.state = {\n text : 'Initializing...', // API からコンテンツをロードするまでに表示しておく内容\n message: 'Initializing...' // メッセージ\n };\n }\n \n \n // Events\n // ================================================================================\n \n /** 初期表示時 */\n componentDidMount() {\n console.log(`Component Did Mount : API URL [${process.env.REACT_APP_API_URL}]`);\n \n if(process.env.REACT_APP_API_URL == null || String(process.env.REACT_APP_API_URL) === '') {\n this.updateText('');\n this.updateMessage('Error', true);\n return console.error('Component Did Mount : Error : Environment Variable [REACT_APP_API_URL] Is Not Defined');\n }\n \n this.onLoad(true);\n }\n \n /**\n * ノートを読み込む\n * \n * @param {boolean} isRemoveTextOnError エラー時にテキストを空にする場合は `true`\n */\n onLoad = async (isRemoveTextOnError = false) => {\n console.log('On Load');\n this.updateMessage('Loading...', true);\n \n try {\n const response = await window.fetch(process.env.REACT_APP_API_URL);\n const json = await response.json();\n if(json.text == null) throw new Error('Invalid Response JSON : The [text] Property Does Not Exist');\n \n console.log('On Load : Success', json.text);\n this.updateText(json.text);\n this.updateMessage('Loaded');\n }\n catch(error) {\n console.error('On Load : Error', error);\n this.updateMessage('Failed To Load');\n if(isRemoveTextOnError) this.updateText('');\n }\n }\n \n /** ノートを保存する */\n onSave = async () => {\n console.log('On Save', this.state.text);\n this.updateMessage('Saving...', true);\n \n try {\n await window.fetch(process.env.REACT_APP_API_URL, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ text: this.state.text })\n });\n \n console.log('On Save : Success');\n this.updateMessage('Saved');\n }\n catch(error) {\n console.error('On Save : Error', error);\n this.updateMessage('Failed To Save');\n }\n }\n \n /**\n * テキストエリアの値を Props に反映する\n * \n * NOTE : `form` 要素内にないテキストエリアを入力可能にするためには `onChange` 指定が必要\n * \n * @param {Event} event Event\n */\n changeText = event => {\n this.updateText(event.target.value);\n this.updateMessage('', true);\n }\n \n \n // Common\n // ================================================================================\n \n /**\n * テキストを更新する\n * \n * @param {string} text テキスト\n */\n updateText = text => this.setState({ text });\n \n /**\n * メッセージを更新し数秒後に非表示にする\n * \n * @param {string} message メッセージ\n * @param {boolean} isNotSetTimeout メッセージを非表示にする `setTimeout()` を予約しない場合は `true` にする\n */\n updateMessage = (message, isNotSetTimeout = false) => {\n this.setState({ message });\n if(!isNotSetTimeout) setTimeout(() => this.setState({ message: '' }), 2000);\n }\n \n /** Render */\n render() {\n return (\n