diff --git a/package-lock.json b/package-lock.json index 5aea462f..e52d7366 100644 --- a/package-lock.json +++ b/package-lock.json @@ -147,9 +147,9 @@ "dev": true }, "@types/node": { - "version": "12.12.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.11.tgz", - "integrity": "sha512-O+x6uIpa6oMNTkPuHDa9MhMMehlxLAd5QcOvKRjAFsBVpeFWTOPnXbDvILvFgFFZfQ1xh1EZi1FbXxUix+zpsQ==", + "version": "12.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz", + "integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ==", "dev": true }, "@types/tough-cookie": { @@ -319,12 +319,12 @@ "dev": true }, "ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", "dev": true, "requires": { - "type-fest": "^0.5.2" + "type-fest": "^0.8.1" } }, "ansi-regex": { @@ -862,9 +862,9 @@ } }, "eslint": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.6.0.tgz", - "integrity": "sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.0.tgz", + "integrity": "sha512-dQpj+PaHKHfXHQ2Imcw5d853PTvkUGbHk/MR68KQUl98EgKDCdh4vLRH1ZxhqeQjQFJeg8fgN0UwmNhN3l8dDQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -882,7 +882,7 @@ "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^11.7.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -895,7 +895,7 @@ "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^6.1.2", @@ -927,6 +927,20 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -1257,10 +1271,13 @@ } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } }, "graphql": { "version": "14.5.8", @@ -2894,9 +2911,9 @@ "dev": true }, "ts-jest": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.1.0.tgz", - "integrity": "sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ==", + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.2.0.tgz", + "integrity": "sha512-Yc+HLyldlIC9iIK8xEN7tV960Or56N49MDP7hubCZUeI7EbIOTsas6rXCMB4kQjLACJ7eDOF4xWEO5qumpKsag==", "dev": true, "requires": { "bs-logger": "0.x", @@ -2965,9 +2982,9 @@ } }, "type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, "typescript": { @@ -3193,6 +3210,12 @@ "string-width": "^1.0.2 || 2" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/package.json b/package.json index b380f73b..bf8fb402 100644 --- a/package.json +++ b/package.json @@ -41,20 +41,20 @@ "@types/glob": "^7.1.1", "@types/jest": "^24.0.23", "@types/jsdom": "^12.2.4", - "@types/node": "^12.12.11", + "@types/node": "^12.12.12", "@typescript-eslint/eslint-plugin": "^2.8.0", "@typescript-eslint/parser": "^2.8.0", "assert": "^2.0.0", "concurrently": "^5.0.0", "dotenv": "^8.2.0", - "eslint": "^6.6.0", + "eslint": "^6.7.0", "eslint-config-prettier": "^6.7.0", "eslint-plugin-prettier": "^3.1.1", "glob": "^7.1.6", "graphql": "^14.5.8", "mocha": "^6.2.2", "prettier": "^1.19.1", - "ts-jest": "^24.1.0", + "ts-jest": "^24.2.0", "typescript": "^3.7.2", "vscode": "^1.1.36", "vscode-test": "^1.2.3" diff --git a/typings/index.d.ts b/typings/index.d.ts index 3a306068..2241145a 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -38,8 +38,14 @@ export interface Environment { token: string } +export interface ErrorMessage { + title: string + description?: string +} + export interface MachineContext { env: Environment + error: ErrorMessage | null tutorial: G.Tutorial | null position: Position progress: Progress diff --git a/web-app/package-lock.json b/web-app/package-lock.json index 23b1b55d..69077e8b 100644 --- a/web-app/package-lock.json +++ b/web-app/package-lock.json @@ -2342,9 +2342,9 @@ } }, "@types/node": { - "version": "12.12.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.11.tgz", - "integrity": "sha512-O+x6uIpa6oMNTkPuHDa9MhMMehlxLAd5QcOvKRjAFsBVpeFWTOPnXbDvILvFgFFZfQ1xh1EZi1FbXxUix+zpsQ==" + "version": "12.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz", + "integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ==" }, "@types/prismjs": { "version": "1.16.0", @@ -2375,9 +2375,9 @@ } }, "@types/react": { - "version": "16.9.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.11.tgz", - "integrity": "sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ==", + "version": "16.9.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.13.tgz", + "integrity": "sha512-LikzRslbiufJYHyzbHSW0GrAiff8QYLMBFeZmSxzCYGXKxi8m/1PHX+rsVOwhr7mJNq+VIu2Dhf7U6mjFERK6w==", "dev": true, "requires": { "@types/prop-types": "*", @@ -6372,9 +6372,9 @@ } }, "eslint": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.6.0.tgz", - "integrity": "sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.0.tgz", + "integrity": "sha512-dQpj+PaHKHfXHQ2Imcw5d853PTvkUGbHk/MR68KQUl98EgKDCdh4vLRH1ZxhqeQjQFJeg8fgN0UwmNhN3l8dDQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -6392,7 +6392,7 @@ "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^11.7.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -6405,7 +6405,7 @@ "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^6.1.2", @@ -6417,12 +6417,12 @@ }, "dependencies": { "ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", "dev": true, "requires": { - "type-fest": "^0.5.2" + "type-fest": "^0.8.1" } }, "ansi-regex": { @@ -6495,6 +6495,15 @@ "is-glob": "^4.0.1" } }, + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -6559,6 +6568,20 @@ "mimic-fn": "^2.1.0" } }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -6621,9 +6644,9 @@ } }, "type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true } } @@ -18587,6 +18610,12 @@ } } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/web-app/package.json b/web-app/package.json index c9ce6c6c..c3c3b9ee 100644 --- a/web-app/package.json +++ b/web-app/package.json @@ -1,74 +1,73 @@ { - "name": "coderoad-app", - "version": "0.1.0", - "private": true, - "scripts": { - "build": "react-scripts build", - "postbuild": "cp -R ./build/ ../build/", - "build-storybook": "build-storybook", - "start": "react-scripts start", - "storybook": "start-storybook -p 6006", - "test": "react-scripts test" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "eslintConfig": { - "extends": "react-app" - }, - "dependencies": { - "@alifd/next": "^1.18.16", - "@alifd/theme-4": "^0.2.0", - "@apollo/react-hooks": "^3.1.3", - "apollo-boost": "^0.4.4", - "graphql": "^14.5.8", - "markdown-it": "^10.0.0", - "markdown-it-emoji": "^1.4.0", - "markdown-it-prism": "^2.0.3", - "moment": "^2.24.0", - "prismjs": "^1.17.1", - "react": "^16.12.0", - "react-dom": "^16.12.0", - "reselect": "^4.0.0", - "typescript": "^3.7.2", - "xstate": "^4.6.7" - }, - "devDependencies": { - "@babel/core": "^7.5.4", - "@storybook/addon-actions": "^5.2.6", - "@storybook/addon-knobs": "^5.2.6", - "@storybook/addon-links": "^5.2.6", - "@storybook/addons": "^5.2.6", - "@storybook/react": "^5.2.6", - "@types/graphql": "^14.5.0", - "@types/highlight.js": "^9.12.3", - "@types/jest": "^24.0.23", - "@types/markdown-it": "0.0.9", - "@types/node": "^12.12.11", - "@types/prismjs": "^1.16.0", - "@types/react": "^16.9.11", - "@types/react-dom": "^16.9.4", - "@types/storybook__react": "^4.0.2", - "@typescript-eslint/eslint-plugin": "^2.8.0", - "@typescript-eslint/parser": "^2.8.0", - "babel-loader": "8.0.5", - "babel-plugin-import": "^1.12.1", - "eslint": "^6.6.0", - "eslint-config-prettier": "^6.7.0", - "eslint-plugin-prettier": "^3.1.1", - "node-sass": "^4.13.0", - "prettier": "^1.19.1", - "react-scripts": "^3.2.0", - "sass-loader": "^8.0.0", - "typescript-eslint-parser": "^22.0.0" - } + "name": "coderoad-app", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "react-scripts build", + "postbuild": "cp -R ./build/ ../build/", + "build-storybook": "build-storybook", + "start": "react-scripts start", + "storybook": "start-storybook -p 6006", + "test": "react-scripts test" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "eslintConfig": { + "extends": "react-app" + }, + "dependencies": { + "@alifd/next": "^1.18.16", + "@alifd/theme-4": "^0.2.0", + "@apollo/react-hooks": "^3.1.3", + "apollo-boost": "^0.4.4", + "graphql": "^14.5.8", + "markdown-it": "^10.0.0", + "markdown-it-emoji": "^1.4.0", + "markdown-it-prism": "^2.0.3", + "moment": "^2.24.0", + "prismjs": "^1.17.1", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "reselect": "^4.0.0", + "typescript": "^3.7.2", + "xstate": "^4.6.7" + }, + "devDependencies": { + "@babel/core": "^7.5.4", + "@storybook/addon-actions": "^5.2.6", + "@storybook/addon-knobs": "^5.2.6", + "@storybook/addon-links": "^5.2.6", + "@storybook/addons": "^5.2.6", + "@storybook/react": "^5.2.6", + "@types/graphql": "^14.5.0", + "@types/highlight.js": "^9.12.3", + "@types/jest": "^24.0.23", + "@types/markdown-it": "0.0.9", + "@types/node": "^12.12.12", + "@types/prismjs": "^1.16.0", + "@types/react": "^16.9.13", + "@types/react-dom": "^16.9.4", + "@typescript-eslint/eslint-plugin": "^2.8.0", + "@typescript-eslint/parser": "^2.8.0", + "babel-loader": "8.0.5", + "babel-plugin-import": "^1.12.1", + "eslint": "^6.7.0", + "eslint-config-prettier": "^6.7.0", + "eslint-plugin-prettier": "^3.1.1", + "node-sass": "^4.13.0", + "prettier": "^1.19.1", + "react-scripts": "^3.2.0", + "sass-loader": "^8.0.0", + "typescript-eslint-parser": "^22.0.0" + } } diff --git a/web-app/src/Routes.tsx b/web-app/src/Routes.tsx index 15f68e05..ab947e5e 100644 --- a/web-app/src/Routes.tsx +++ b/web-app/src/Routes.tsx @@ -15,23 +15,24 @@ const { Route } = Router const tempSend = (action: any) => console.log('sent') const Routes = () => { + // TODO: refactor for typescript to understand send & context passed into React.cloneElement's return ( - + - + - + - + diff --git a/web-app/src/components/Message/index.tsx b/web-app/src/components/Message/index.tsx new file mode 100644 index 00000000..ba71e39b --- /dev/null +++ b/web-app/src/components/Message/index.tsx @@ -0,0 +1,19 @@ +import * as React from 'react' +import * as T from 'typings' +import { Message as AlifdMessage } from '@alifd/next' + +interface Props { + type: 'error' + title: string + description?: string +} + +const Message = (props: Props) => { + return ( + + {props.description} + + ) +} + +export default Message diff --git a/web-app/src/containers/LoadingPage.tsx b/web-app/src/containers/LoadingPage.tsx index 8fd5ca24..6a6572c3 100644 --- a/web-app/src/containers/LoadingPage.tsx +++ b/web-app/src/containers/LoadingPage.tsx @@ -1,24 +1,38 @@ import * as React from 'react' +import * as T from 'typings' import Loading from '../components/Loading' +import Message from '../components/Message' interface Props { - text: string + text: string + context: T.MachineContext } const styles = { - page: { - position: 'relative' as 'relative', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - width: '100%', - }, + page: { + position: 'relative' as 'relative', + display: 'flex', + flexDirection: 'column' as 'column', + alignItems: 'center', + justifyContent: 'center', + width: '100%', + }, } -const LoadingPage = ({ text }: Props) => ( -
- -
-) +const LoadingPage = ({ text, context }: Props) => { + const { error } = context + if (error) { + return ( +
+ +
+ ) + } + return ( +
+ +
+ ) +} export default LoadingPage diff --git a/web-app/src/containers/New/index.tsx b/web-app/src/containers/New/index.tsx index 08efd229..30c74c83 100644 --- a/web-app/src/containers/New/index.tsx +++ b/web-app/src/containers/New/index.tsx @@ -1,17 +1,16 @@ import * as React from 'react' import { useQuery } from '@apollo/react-hooks' import * as G from 'typings/graphql' -import * as CR from 'typings' +import * as T from 'typings' import queryTutorials from '../../services/apollo/queries/tutorials' import NewPage from './NewPage' import LoadingPage from '../LoadingPage' import ErrorView from '../../components/Error' -const Loading = () => - interface ContainerProps { - send(action: CR.Action): void + send(action: T.Action): void + context: T.MachineContext } interface TutorialsData { @@ -20,23 +19,20 @@ interface TutorialsData { const NewPageContainer = (props: ContainerProps) => { const { data, loading, error } = useQuery(queryTutorials) - if (loading) { - return - } if (error) { return } + if (loading) { + return + } + if (!data) { return null } - return ( - - - - ) + return } export default NewPageContainer diff --git a/web-app/src/services/channel/index.ts b/web-app/src/services/channel/index.ts index c7ece831..5fb0705b 100644 --- a/web-app/src/services/channel/index.ts +++ b/web-app/src/services/channel/index.ts @@ -57,6 +57,7 @@ class Channel { case 'COMMAND_START': case 'COMMAND_SUCCESS': case 'COMMAND_FAIL': + case 'ERROR': this.machineSend(action) return default: diff --git a/web-app/src/services/state/actions/api.ts b/web-app/src/services/state/actions/api.ts index 6fb730ba..3fe5ae99 100644 --- a/web-app/src/services/state/actions/api.ts +++ b/web-app/src/services/state/actions/api.ts @@ -34,6 +34,11 @@ export default { if (!result || !result.data) { // TODO: handle failed authentication console.error('ERROR: Authentication failed') + const error = { + title: 'Authentication Failed', + description: 'You may not be connected to the internet. Connect and restart the application', + } + channel.receive({ data: { type: 'ERROR', payload: { error } } }) return } const { token } = result.data.editorLogin diff --git a/web-app/src/services/state/actions/context.ts b/web-app/src/services/state/actions/context.ts index fbddd195..5d358e34 100644 --- a/web-app/src/services/state/actions/context.ts +++ b/web-app/src/services/state/actions/context.ts @@ -211,4 +211,10 @@ export default { return position }, }), + // @ts-ignore + setError: assign({ + error: (context: CR.MachineContext, event: CR.MachineEvent): string | null => { + return event.payload.error + }, + }), } diff --git a/web-app/src/services/state/machine.ts b/web-app/src/services/state/machine.ts index 25eae843..2b12db85 100644 --- a/web-app/src/services/state/machine.ts +++ b/web-app/src/services/state/machine.ts @@ -12,6 +12,7 @@ export const machine = Machine ) + .add('Loading', () => ) diff --git a/web-app/tsconfig.json b/web-app/tsconfig.json index 04664a04..821dc39c 100644 --- a/web-app/tsconfig.json +++ b/web-app/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.paths.json", "compilerOptions": { - "target": "es5", + "target": "es2018", "lib": [ "dom", "dom.iterable",