From 2ab6c3a6bee19a6996506731bcb884b37c868a1b Mon Sep 17 00:00:00 2001 From: shmck Date: Sat, 1 Feb 2020 12:58:27 -0800 Subject: [PATCH 01/12] setup notification --- src/editor/commands.ts | 3 --- typings/index.d.ts | 1 - web-app/src/services/notify/index.tsx | 26 ++++++++++++++++++ web-app/src/services/state/actions/index.ts | 13 +++++++++ web-app/src/services/state/actions/test.ts | 24 +++++++++++++++++ web-app/src/services/state/machine.ts | 29 ++++++++------------- 6 files changed, 74 insertions(+), 22 deletions(-) create mode 100644 web-app/src/services/notify/index.tsx create mode 100644 web-app/src/services/state/actions/index.ts create mode 100644 web-app/src/services/state/actions/test.ts diff --git a/src/editor/commands.ts b/src/editor/commands.ts index ecbf1153..f4f6c722 100644 --- a/src/editor/commands.ts +++ b/src/editor/commands.ts @@ -57,13 +57,10 @@ export const createCommands = ({ extensionPath, workspaceState, workspaceRoot }: testRunner = createTestRunner(config, { onSuccess: (payload: Payload) => { // send test pass message back to client - notify({ message: 'PASS' }) webview.send({ type: 'TEST_PASS', payload }) - // update local storage }, onFail: (payload: Payload, message: string) => { // send test fail message back to client - notify({ message: `FAIL ${message}` }) webview.send({ type: 'TEST_FAIL', payload }) }, onError: (payload: Payload) => { diff --git a/typings/index.d.ts b/typings/index.d.ts index 27e6d9c2..ffcfaa12 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -83,7 +83,6 @@ export interface MachineStateSchema { TestRunning: {} TestPass: {} TestFail: {} - TestError: {} StepNext: {} LevelComplete: {} } diff --git a/web-app/src/services/notify/index.tsx b/web-app/src/services/notify/index.tsx new file mode 100644 index 00000000..d7f2961e --- /dev/null +++ b/web-app/src/services/notify/index.tsx @@ -0,0 +1,26 @@ +import { Notification } from '@alifd/next' + +interface Props { + key: string + title: string + content: string + duration?: number + onClose?: () => void + icon?: string +} + +Notification.config({ + placement: 'topRight', +}) + +const notify = (props: Props) => { + Notification.open({ + key: props.key, + title: props.title, + content: props.content, + duration: props.duration, + onClose: props.onClose, + }) +} + +export default notify diff --git a/web-app/src/services/state/actions/index.ts b/web-app/src/services/state/actions/index.ts new file mode 100644 index 00000000..4671ae24 --- /dev/null +++ b/web-app/src/services/state/actions/index.ts @@ -0,0 +1,13 @@ +import editorActions from './editor' +import commandActions from './command' +import contextActions from './context' +import testActions from './test' + +const createActions = (editorSend: any) => ({ + ...editorActions(editorSend), + ...commandActions, + ...contextActions, + ...testActions, +}) + +export default createActions diff --git a/web-app/src/services/state/actions/test.ts b/web-app/src/services/state/actions/test.ts new file mode 100644 index 00000000..87af39ca --- /dev/null +++ b/web-app/src/services/state/actions/test.ts @@ -0,0 +1,24 @@ +import * as CR from 'typings' +import { ActionFunctionMap } from 'xstate' +import notify from '../../notify' + +const testActions: ActionFunctionMap = { + testPass() { + notify({ + key: 'test', + title: 'Success!', + content: '', + duration: 1500, + }) + }, + testFail(context, event) { + notify({ + key: 'test', + title: 'Fail', + content: '', + duration: 3000, + }) + }, +} + +export default testActions diff --git a/web-app/src/services/state/machine.ts b/web-app/src/services/state/machine.ts index 44b92190..383e9e59 100644 --- a/web-app/src/services/state/machine.ts +++ b/web-app/src/services/state/machine.ts @@ -1,17 +1,11 @@ import * as CR from 'typings' import { assign, Machine, MachineOptions } from 'xstate' -import editorActions from './actions/editor' -import commandActions from './actions/command' -import contextActions from './actions/context' +import createActions from './actions' import * as services from './services' const createOptions = ({ editorSend }: any): MachineOptions => ({ activities: {}, - actions: { - ...editorActions(editorSend), - ...contextActions, - ...commandActions, - }, + actions: createActions(editorSend), guards: {}, services: {}, delays: {}, @@ -195,16 +189,16 @@ export const createMachine = (options: any) => { on: { TEST_PASS: { target: 'TestPass', - actions: ['updateStepProgress'], + actions: ['updateStepProgress', 'testPass'], + }, + TEST_FAIL: { + target: 'TestFail', + actions: ['testFail'], + }, + TEST_ERROR: { + target: 'TestFail', + actions: ['testFail'], }, - TEST_FAIL: 'TestFail', - TEST_ERROR: 'TestError', - }, - }, - TestError: { - onEntry: ['testFail'], - after: { - 0: 'Normal', }, }, TestPass: { @@ -214,7 +208,6 @@ export const createMachine = (options: any) => { }, }, TestFail: { - onEntry: ['testFail'], after: { 0: 'Normal', }, From dee668457ae54a9ce7871c99040da78d2c687561 Mon Sep 17 00:00:00 2001 From: shmck Date: Sat, 1 Feb 2020 16:48:54 -0800 Subject: [PATCH 02/12] build with fonts --- web-app/.storybook/config.ts | 2 +- web-app/.storybook/webpack.config.js | 18 +- web-app/config-overrides.js | 17 +- web-app/src/containers/LoadingPage.tsx | 2 + web-app/src/index.tsx | 2 +- web-app/src/styles/font.scss | 35 ++++ web-app/src/styles/fonts/next-icon.svg | 182 ++++++++++++++++++ web-app/src/styles/fonts/next-icon.woff2 | Bin 0 -> 5600 bytes web-app/src/styles/fonts/roboto-bold.woff2 | Bin 0 -> 20248 bytes web-app/src/styles/fonts/roboto-light.woff2 | Bin 0 -> 19544 bytes web-app/src/styles/fonts/roboto-medium.woff2 | Bin 0 -> 20044 bytes web-app/src/styles/fonts/roboto-regular.woff2 | Bin 0 -> 19988 bytes web-app/src/styles/fonts/roboto-thin.woff2 | Bin 0 -> 18944 bytes web-app/src/styles/{index.css => index.scss} | 4 +- 14 files changed, 241 insertions(+), 21 deletions(-) create mode 100644 web-app/src/styles/font.scss create mode 100644 web-app/src/styles/fonts/next-icon.svg create mode 100644 web-app/src/styles/fonts/next-icon.woff2 create mode 100644 web-app/src/styles/fonts/roboto-bold.woff2 create mode 100644 web-app/src/styles/fonts/roboto-light.woff2 create mode 100644 web-app/src/styles/fonts/roboto-medium.woff2 create mode 100644 web-app/src/styles/fonts/roboto-regular.woff2 create mode 100644 web-app/src/styles/fonts/roboto-thin.woff2 rename web-app/src/styles/{index.css => index.scss} (82%) diff --git a/web-app/.storybook/config.ts b/web-app/.storybook/config.ts index 608ab73b..73cabb0b 100644 --- a/web-app/.storybook/config.ts +++ b/web-app/.storybook/config.ts @@ -1,5 +1,5 @@ import { configure } from '@storybook/react' -import '../src/styles/index.css' +import '../src/styles/index.scss' // setup acquireVsCodeApi mock // @ts-ignore diff --git a/web-app/.storybook/webpack.config.js b/web-app/.storybook/webpack.config.js index 976bf67a..06c6a292 100644 --- a/web-app/.storybook/webpack.config.js +++ b/web-app/.storybook/webpack.config.js @@ -13,15 +13,15 @@ module.exports = ({ config }) => { test: /\.(ts|tsx)$/, loader: require.resolve('babel-loader'), options: { - plugins: [ - [ - 'babel-plugin-import', - { - libraryName: '@alifd/next', - style: true, - }, - ], - ], + // plugins: [ + // [ + // 'babel-plugin-import', + // { + // libraryName: '@alifd/next', + // style: true, + // }, + // ], + // ], presets: [ // react-app ['react-app', { flow: false, typescript: true }], diff --git a/web-app/config-overrides.js b/web-app/config-overrides.js index ef550e0d..70581445 100644 --- a/web-app/config-overrides.js +++ b/web-app/config-overrides.js @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const path = require('path') -const { addBabelPreset, addBabelPlugin, addWebpackModuleRule } = require('customize-cra') +const { addBabelPreset, addWebpackModuleRule, addWebpackPlugin } = require('customize-cra') module.exports = function override(config) { addWebpackModuleRule({ @@ -17,13 +16,13 @@ module.exports = function override(config) { })(config) // load @alifd/next component css - addBabelPlugin([ - 'babel-plugin-import', - { - libraryName: '@alifd/next', - style: true, - }, - ])(config) + // addBabelPlugin([ + // 'babel-plugin-import', + // { + // libraryName: '@alifd/next', + // style: true, + // }, + // ])(config) // setup emotion styles addBabelPreset('@emotion/babel-preset-css-prop')(config) diff --git a/web-app/src/containers/LoadingPage.tsx b/web-app/src/containers/LoadingPage.tsx index 30c49fe3..b4a759b7 100644 --- a/web-app/src/containers/LoadingPage.tsx +++ b/web-app/src/containers/LoadingPage.tsx @@ -2,6 +2,7 @@ import * as React from 'react' import * as T from 'typings' import { css, jsx } from '@emotion/core' import Loading from '../components/Loading' +import { Icon } from '@alifd/next' import Message from '../components/Message' interface Props { @@ -31,6 +32,7 @@ const LoadingPage = ({ text, context }: Props) => { } return (
+
) diff --git a/web-app/src/index.tsx b/web-app/src/index.tsx index 232053d2..507de699 100644 --- a/web-app/src/index.tsx +++ b/web-app/src/index.tsx @@ -5,7 +5,7 @@ import App from './App' // init error logging import './services/sentry/init' // init initial styles -import './styles/index.css' +import './styles/index.scss' // init listeners import './services/listeners' diff --git a/web-app/src/styles/font.scss b/web-app/src/styles/font.scss new file mode 100644 index 00000000..7ada1ee1 --- /dev/null +++ b/web-app/src/styles/font.scss @@ -0,0 +1,35 @@ +@charset "UTF-8"; + +@font-face { + font-family: 'NextIcon'; + src: url('/styles/fonts/next-icon.woff2') format('woff2'), url('/styles/fonts/next-icon.svg#NextIcon') format('svg'); +} +@font-face { + font-family: 'Roboto'; + src: url('/styles/fonts/roboto-thin.woff2') format('woff2'); + font-weight: 200; +} + +@font-face { + font-family: 'Roboto'; + src: url('/styles/fonts/roboto-light.woff2') format('woff2'); + font-weight: 300; +} + +@font-face { + font-family: 'Roboto'; + src: url('/styles/fonts/roboto-regular.woff2') format('woff2'); + font-weight: 400; +} + +@font-face { + font-family: 'Roboto'; + src: url('/styles/fonts/roboto-medium.woff2') format('woff2'); + font-weight: 500; +} + +@font-face { + font-family: 'Roboto'; + src: url('/styles/fonts/roboto-bold.woff2') format('woff2'); + font-weight: 700; +} diff --git a/web-app/src/styles/fonts/next-icon.svg b/web-app/src/styles/fonts/next-icon.svg new file mode 100644 index 00000000..cb348dc4 --- /dev/null +++ b/web-app/src/styles/fonts/next-icon.svg @@ -0,0 +1,182 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web-app/src/styles/fonts/next-icon.woff2 b/web-app/src/styles/fonts/next-icon.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0aa04583002b020dbdfd767a5158b84c154b0acf GIT binary patch literal 5600 zcmV<66(8z%Pew8T0RR9102SZ>3jhEB04^8+02Pt|0RR9100000000000000000000 z0000SLIzd9#B5IvPjMj(=N~JYc zO;fIQm^3WsM}GV%rL-vkkD~76sDYyFcpk#T+wT3l&m4+Du_F!LwUganBaFVKVp;w^%JjhUe$j+kbyVujsKz3>YfQV7?E>!40Dv! z6&MA5f&P)oFlGjKU<@oun-ZfB;o*1Y6%!;ye_*?5STD@`-@g#}e0kNUn(rm8d5x?v z!s$Z}2I}^bxl~=Nu1Q)W1PgZ00{lS^5WLL)T$xSEXfdk4EKK?NDoy!6Lmvh*Q~HxB zWI0p(vzXnMr&|EFeN|;S*=+kVi)9cBj^&*t(5KE=ea4?|HD^8grE?m=1((6t%)`~U zE?(c5GAu;W_^OA)06}A8W_|hoyP8viI~l-St^+mCB`8LJ!$l0G#U#H$$CWRn4HTZD zAKrYRg#cK(B6y_3@xrLbFUS$7<7%s4pz-6trX}D2W8i{4sfA`&qbEF$XrO&O<2X++ zSLdp}kXCdg#l?-m;s^u7B~#-P(-&>f zt)nZ>T9=TKRFKj%P*Kw}WWe-5CYVMliSqc0^mIT-x<-saQQUc*&9S)V)Q6Qk)63K2+9p45Os60^B$`CZ$ zkj$$L(Wi^%%ZkD6QmqKx5Y_bz9$rPA#xfMrr*!1Q&mgb_VtHtT&2CVO(WkxB!U!jT zSyHi!%<~PUAE0&2#b%%p0{!}V?Nd%KheK@8qFgrjIRaB98BnxM^&S`0hhSXKerR(m zsW_37p-x!QSJjCL{JcU;lp69tjgDYrgBKZCTj!a6_d!eZ|E;TbB!wW%L4}l&isg73 z0#>-8+6x3orXhB&&R!ngB6rYjeDfodVk-tRJ6e`?s7at^w8xgTb%Cnh*0O4D9H%rH z;Pa*x!e%{bhk_g8?O)Yez0SJMuQK+>Tj#XiRh??JjI*6*-Jb&iw=SiwJ44g=$OCjA z-{lcVk^q4#L!yE1IzXI9vz|aJMK7C_7~R8QC8D80u7)Z{!BB@lUa0sdgR;ZtnVMg0P|B+dQ*Mh>L^YLDl$ouAE`I5 zO|KiQv`V{c&+*fBrOMpJXH3g4FD@@|vP{Q{)M$m>Q!W!Fxl55V#00ijUDbKIIwIUU z9DgW;J3J|!Pa1C7xMQeCrc!Us5UOT%%Lm0W-$oLgpkfUsd2UAfredB`2;fv^QeIi9 zu_MBGegr0)9jTM`Luo~?RubHhQqiRH)#M=sCJxG1j2X6APyv!)B9~XDv_|T%ir6FN zX4|raQ-z$|FlJT4Wb+$MCn{2PDp8VgYPULLHk0{cnIV(RECiso2reD0n?&#IG|A=3 z^Q}p7==|0;`|wyFc?;KWiRB?Kx`Ss;i^R$goU zkTR7OiuwGHi0JDBvX+o(ykS_KbxwHL+F0IceP&f@;ROBc+hNj$zma8MSEjEuH=cKi z-KQ)Qc6D~ceKdc@F&*B--2$iK+o(qr40MNd@uEp?!A>r#DC+B*`ll1~jk(J{Pep5u ztQf$%$bv6AC`a~{HG^2u+zKMpbQiBs)-C0|g5dyAA1h%!1+7l5gY0IcO3Gck&E6rm zHp4TmYZjG<79=+ezQgFG)?QllldwjO5fUj7`wuSc%|vN={*9{{Y1~~fP><<$@q5m@w%vQQveqia8t>8n zAGKV42j4mZ-rvs|3p@R_#@f{SdrsW%>NDc%M3C#4n!W*;C(6soS+djG)WMRDhL85Y zyk!@`S2{Tgb3}Xv)Z0T1DCHxf;-dWwMaydq<+N7X_4$m2J5Rd!5%bBdd5IRyp)Tp< zBAs<=$v+zNM{|6UIVuVgy&#IqN~|Wo;J#E>p2P}80I0@YTuOW{d{wSPT%l>ekX2u-rM?uu zP?jOq0bnRt^~F{8EBj(gdLK@mO zOTk+oF`i+-AN4cT^fe}RmaxT9b}MHn3w5UZTLCY+{vmLKyuomkRvFOw@YZUR$gNG* zG$SXYpabhB9l^J!lX-_ZM2v-@vFl)?#)>^$=+(4*nEzBz>t+vn%i2ml+w=UEl!M%r zV3+npy!`MX@Az$6YRRTWFXKrUJNspKpr7$|4$9ubAQMPWJ}OK^CN3Mh2P(<@OB?n& zuJ&Zs?$G*LYB3(B7kK8hK31Mh2``1xmAD42OGkE4l?yef52aQP8#CtH;|d*W^r;h# z6|4zfpYPN(ol<95@vSv^H6Oi{Y>i;04~%*<^vFtU2I;UQ_ҷ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 literal 0 HcmV?d00001 diff --git a/web-app/src/styles/fonts/roboto-bold.woff2 b/web-app/src/styles/fonts/roboto-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9fd172f9dc8ab4b9a2781692aea4c05c8b0aaad9 GIT binary patch literal 20248 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 literal 0 HcmV?d00001 diff --git a/web-app/src/styles/index.css b/web-app/src/styles/index.scss similarity index 82% rename from web-app/src/styles/index.css rename to web-app/src/styles/index.scss index 93d2fe5f..6d2eb747 100644 --- a/web-app/src/styles/index.css +++ b/web-app/src/styles/index.scss @@ -1,4 +1,6 @@ -@import '~@alifd/theme-4/dist/next.css'; +@import '~@alifd/next/index.scss'; +/* @import '~@alifd/theme-4/dist/next.css'; */ +@import './font.scss'; html { height: 100%; From e3f7a8416d7c87e5a3eb6d21066c87ca2cc845fc Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 10:17:30 -0800 Subject: [PATCH 03/12] create script to map fonts --- package-lock.json | 329 ++++++++++++++++++ package.json | 4 +- resources/public/favicon.ico | Bin 3870 -> 0 bytes resources/public/index.html | 40 --- resources/public/manifest.json | 15 - scripts/fixFontPaths.js | 26 ++ tsconfig.json | 2 +- web-app/.storybook/config.ts | 2 +- web-app/src/containers/LoadingPage.tsx | 2 - web-app/src/index.tsx | 2 +- .../{styles => resources}/fonts/next-icon.svg | 0 .../fonts/next-icon.woff2 | Bin .../fonts/roboto-bold.woff2 | Bin .../fonts/roboto-light.woff2 | Bin .../fonts/roboto-medium.woff2 | Bin .../fonts/roboto-regular.woff2 | Bin .../fonts/roboto-thin.woff2 | Bin web-app/src/styles/font.css | 36 ++ web-app/src/styles/font.scss | 35 -- web-app/src/styles/{index.scss => index.css} | 4 +- 20 files changed, 399 insertions(+), 98 deletions(-) delete mode 100644 resources/public/favicon.ico delete mode 100644 resources/public/index.html delete mode 100644 resources/public/manifest.json create mode 100644 scripts/fixFontPaths.js rename web-app/src/{styles => resources}/fonts/next-icon.svg (100%) rename web-app/src/{styles => resources}/fonts/next-icon.woff2 (100%) rename web-app/src/{styles => resources}/fonts/roboto-bold.woff2 (100%) rename web-app/src/{styles => resources}/fonts/roboto-light.woff2 (100%) rename web-app/src/{styles => resources}/fonts/roboto-medium.woff2 (100%) rename web-app/src/{styles => resources}/fonts/roboto-regular.woff2 (100%) rename web-app/src/{styles => resources}/fonts/roboto-thin.woff2 (100%) create mode 100644 web-app/src/styles/font.css delete mode 100644 web-app/src/styles/font.scss rename web-app/src/styles/{index.scss => index.css} (89%) diff --git a/package-lock.json b/package-lock.json index 7fa5001f..38448394 100644 --- a/package-lock.json +++ b/package-lock.json @@ -632,6 +632,27 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" }, + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "dev": true, + "requires": { + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + } + } + }, "agent-base": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", @@ -693,6 +714,12 @@ "sprintf-js": "~1.0.2" } }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -701,6 +728,15 @@ "safer-buffer": "~2.1.0" } }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -717,6 +753,12 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -741,6 +783,12 @@ "tweetnacl": "^0.14.3" } }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, "binary-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", @@ -883,12 +931,38 @@ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -912,6 +986,18 @@ "which": "^1.2.9" } }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -932,6 +1018,16 @@ } } }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -963,6 +1059,12 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -1038,6 +1140,12 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, "encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", @@ -1074,6 +1182,28 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -1087,6 +1217,16 @@ "es6-promise": "^4.0.3" } }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1301,6 +1441,23 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "dev": true + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1978,6 +2135,34 @@ "type-check": "~0.3.2" } }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", @@ -2065,6 +2250,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -2096,6 +2287,12 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "dev": true + }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", @@ -2195,6 +2392,28 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -2295,6 +2514,12 @@ "picomatch": "^2.0.7" } }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "dev": true + }, "regexpp": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", @@ -2394,6 +2619,38 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", + "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -2404,6 +2661,30 @@ "signal-exit": "^3.0.2" } }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -2492,6 +2773,19 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -2502,6 +2796,12 @@ "source-map": "^0.6.0" } }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2693,6 +2993,12 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -2721,6 +3027,12 @@ "punycode": "^2.1.0" } }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, "url-parse": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", @@ -2731,6 +3043,23 @@ "requires-port": "^1.0.0" } }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", diff --git a/package.json b/package.json index 624c281e..9f9df309 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "build": "rm -rf build && npm run build:ext && npm run build:web", "build:ext": "tsc -p ./", "build:web": "cd web-app && npm run build", - "postbuild:web": "cp -R ./web-app/build/ ./build/", + "postbuild:web": "cp -R ./web-app/build/ ./build/ && node scripts/fixFontPaths.js", "postinstall": "node ./node_modules/vscode/bin/install", "lint": "eslint src/**/*ts", "machine": "node ./out/state/index.js", @@ -50,8 +50,10 @@ "eslint": "^6.8.0", "eslint-config-prettier": "^6.10.0", "eslint-plugin-prettier": "^3.1.2", + "glob": "^7.1.6", "graphql": "^14.6.0", "prettier": "^1.19.1", + "resolve-url-loader": "^3.1.1", "ts-jest": "^25.1.0", "typescript": "^3.7.5", "vscode": "^1.1.36", diff --git a/resources/public/favicon.ico b/resources/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/resources/public/index.html b/resources/public/index.html deleted file mode 100644 index ed0ebafa..00000000 --- a/resources/public/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - React App - - - -
- - - diff --git a/resources/public/manifest.json b/resources/public/manifest.json deleted file mode 100644 index ef19ec24..00000000 --- a/resources/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - } - ], - "start_url": "./index.html", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/scripts/fixFontPaths.js b/scripts/fixFontPaths.js new file mode 100644 index 00000000..e9a2e111 --- /dev/null +++ b/scripts/fixFontPaths.js @@ -0,0 +1,26 @@ +/* + * css url font paths do not match up from the web-app as it is moved inside of build + * in order to load fonts and icons, these paths must be reconciled. + */ +const fs = require('fs') // eslint-disable-line + +// find the generated main css file +const getMainCSSFile = () => { + const regex = /^main.[a-z0-9]+.chunk.css$/ + const mainCss = fs.readdirSync('build/static/css').filter(filename => filename.match(regex)) + if (!mainCss.length) { + throw new Error('No main.css file found in build/static/css') + } + return mainCss[0] +} + +// remap the font paths from the borken /fonts/ => ../../fonts/ +const remapFontPaths = () => { + const mainCSSFile = getMainCSSFile() + const file = fs.readFileSync(`build/static/css/${mainCSSFile}`, 'utf8') + const fontUrlRegex = /url\(\/fonts\//g + const remappedFile = file.replace(fontUrlRegex, 'url(../../fonts/') + fs.writeFileSync(`build/static/css/${mainCSSFile}`, remappedFile) +} + +remapFontPaths() diff --git a/tsconfig.json b/tsconfig.json index 07e13f13..598c0d55 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,5 +25,5 @@ "allowJs": true, "removeComments": true }, - "exclude": ["node_modules", ".vscode-test", "build", "resources", "web-app", "*.js", "*.test.ts"] + "exclude": ["node_modules", ".vscode-test", "build", "resources", "web-app", "*.js", "*.test.ts", "scripts"] } diff --git a/web-app/.storybook/config.ts b/web-app/.storybook/config.ts index 73cabb0b..608ab73b 100644 --- a/web-app/.storybook/config.ts +++ b/web-app/.storybook/config.ts @@ -1,5 +1,5 @@ import { configure } from '@storybook/react' -import '../src/styles/index.scss' +import '../src/styles/index.css' // setup acquireVsCodeApi mock // @ts-ignore diff --git a/web-app/src/containers/LoadingPage.tsx b/web-app/src/containers/LoadingPage.tsx index b4a759b7..30c49fe3 100644 --- a/web-app/src/containers/LoadingPage.tsx +++ b/web-app/src/containers/LoadingPage.tsx @@ -2,7 +2,6 @@ import * as React from 'react' import * as T from 'typings' import { css, jsx } from '@emotion/core' import Loading from '../components/Loading' -import { Icon } from '@alifd/next' import Message from '../components/Message' interface Props { @@ -32,7 +31,6 @@ const LoadingPage = ({ text, context }: Props) => { } return (
-
) diff --git a/web-app/src/index.tsx b/web-app/src/index.tsx index 507de699..232053d2 100644 --- a/web-app/src/index.tsx +++ b/web-app/src/index.tsx @@ -5,7 +5,7 @@ import App from './App' // init error logging import './services/sentry/init' // init initial styles -import './styles/index.scss' +import './styles/index.css' // init listeners import './services/listeners' diff --git a/web-app/src/styles/fonts/next-icon.svg b/web-app/src/resources/fonts/next-icon.svg similarity index 100% rename from web-app/src/styles/fonts/next-icon.svg rename to web-app/src/resources/fonts/next-icon.svg diff --git a/web-app/src/styles/fonts/next-icon.woff2 b/web-app/src/resources/fonts/next-icon.woff2 similarity index 100% rename from web-app/src/styles/fonts/next-icon.woff2 rename to web-app/src/resources/fonts/next-icon.woff2 diff --git a/web-app/src/styles/fonts/roboto-bold.woff2 b/web-app/src/resources/fonts/roboto-bold.woff2 similarity index 100% rename from web-app/src/styles/fonts/roboto-bold.woff2 rename to web-app/src/resources/fonts/roboto-bold.woff2 diff --git a/web-app/src/styles/fonts/roboto-light.woff2 b/web-app/src/resources/fonts/roboto-light.woff2 similarity index 100% rename from web-app/src/styles/fonts/roboto-light.woff2 rename to web-app/src/resources/fonts/roboto-light.woff2 diff --git a/web-app/src/styles/fonts/roboto-medium.woff2 b/web-app/src/resources/fonts/roboto-medium.woff2 similarity index 100% rename from web-app/src/styles/fonts/roboto-medium.woff2 rename to web-app/src/resources/fonts/roboto-medium.woff2 diff --git a/web-app/src/styles/fonts/roboto-regular.woff2 b/web-app/src/resources/fonts/roboto-regular.woff2 similarity index 100% rename from web-app/src/styles/fonts/roboto-regular.woff2 rename to web-app/src/resources/fonts/roboto-regular.woff2 diff --git a/web-app/src/styles/fonts/roboto-thin.woff2 b/web-app/src/resources/fonts/roboto-thin.woff2 similarity index 100% rename from web-app/src/styles/fonts/roboto-thin.woff2 rename to web-app/src/resources/fonts/roboto-thin.woff2 diff --git a/web-app/src/styles/font.css b/web-app/src/styles/font.css new file mode 100644 index 00000000..79c95e00 --- /dev/null +++ b/web-app/src/styles/font.css @@ -0,0 +1,36 @@ +@charset "UTF-8"; + +@font-face { + font-family: 'NextIcon'; + src: url('~resources/fonts/next-icon.woff2') format('woff2'), + url('~resources/fonts/next-icon.svg#NextIcon') format('svg'); +} +@font-face { + font-family: 'Roboto'; + src: url('~resources/fonts/roboto-thin.woff2') format('woff2'); + font-weight: 200; +} + +@font-face { + font-family: 'Roboto'; + src: url('~resources/fonts/roboto-light.woff2') format('woff2'); + font-weight: 300; +} + +@font-face { + font-family: 'Roboto'; + src: url('~resources/fonts/roboto-regular.woff2') format('woff2'); + font-weight: 400; +} + +@font-face { + font-family: 'Roboto'; + src: url('~resources/fonts/roboto-medium.woff2') format('woff2'); + font-weight: 500; +} + +@font-face { + font-family: 'Roboto'; + src: url('~resources/fonts/roboto-bold.woff2') format('woff2'); + font-weight: 700; +} diff --git a/web-app/src/styles/font.scss b/web-app/src/styles/font.scss deleted file mode 100644 index 7ada1ee1..00000000 --- a/web-app/src/styles/font.scss +++ /dev/null @@ -1,35 +0,0 @@ -@charset "UTF-8"; - -@font-face { - font-family: 'NextIcon'; - src: url('/styles/fonts/next-icon.woff2') format('woff2'), url('/styles/fonts/next-icon.svg#NextIcon') format('svg'); -} -@font-face { - font-family: 'Roboto'; - src: url('/styles/fonts/roboto-thin.woff2') format('woff2'); - font-weight: 200; -} - -@font-face { - font-family: 'Roboto'; - src: url('/styles/fonts/roboto-light.woff2') format('woff2'); - font-weight: 300; -} - -@font-face { - font-family: 'Roboto'; - src: url('/styles/fonts/roboto-regular.woff2') format('woff2'); - font-weight: 400; -} - -@font-face { - font-family: 'Roboto'; - src: url('/styles/fonts/roboto-medium.woff2') format('woff2'); - font-weight: 500; -} - -@font-face { - font-family: 'Roboto'; - src: url('/styles/fonts/roboto-bold.woff2') format('woff2'); - font-weight: 700; -} diff --git a/web-app/src/styles/index.scss b/web-app/src/styles/index.css similarity index 89% rename from web-app/src/styles/index.scss rename to web-app/src/styles/index.css index 6d2eb747..de51430e 100644 --- a/web-app/src/styles/index.scss +++ b/web-app/src/styles/index.css @@ -1,6 +1,6 @@ -@import '~@alifd/next/index.scss'; +@import '~@alifd/next/dist/next.min.css'; /* @import '~@alifd/theme-4/dist/next.css'; */ -@import './font.scss'; +@import './font.css'; html { height: 100%; From 27324bc3398d7355766ccdc7f6f9f185ffc315d2 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 10:54:20 -0800 Subject: [PATCH 04/12] use default checkbox --- web-app/src/components/Checkbox/index.tsx | 24 ++--------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/web-app/src/components/Checkbox/index.tsx b/web-app/src/components/Checkbox/index.tsx index e8db70f1..6f3b583d 100644 --- a/web-app/src/components/Checkbox/index.tsx +++ b/web-app/src/components/Checkbox/index.tsx @@ -1,19 +1,5 @@ import * as React from 'react' -import { css, jsx } from '@emotion/core' - -const styles = { - box: { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - }, - input: { - border: '1px solid black', - }, - loading: { - backgroundColor: 'red', - }, -} +import { Checkbox as AlifdCheckbox } from '@alifd/next' interface Props { status: 'COMPLETE' | 'INCOMPLETE' | 'ACTIVE' @@ -26,13 +12,7 @@ const Checkbox = (props: Props) => { const checked = props.status === 'COMPLETE' - return ( -
- -
- ) + return } export default Checkbox From f7d82c8800eabed606e558f8aca97d759d4dc9d1 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 11:25:43 -0800 Subject: [PATCH 05/12] cleanup load processes --- web-app/src/components/Message/index.tsx | 27 ++++++++++++++++--- .../index.tsx | 10 +++---- .../containers/Tutorial/LevelPage/Level.tsx | 4 +-- web-app/stories/Commands.stories.tsx | 4 +-- web-app/stories/TestNotify.stories.tsx | 22 +++++++++++++++ 5 files changed, 54 insertions(+), 13 deletions(-) rename web-app/src/components/{ProcessEvents => ProcessMessages}/index.tsx (65%) create mode 100644 web-app/stories/TestNotify.stories.tsx diff --git a/web-app/src/components/Message/index.tsx b/web-app/src/components/Message/index.tsx index 35a2caf8..c0696a7e 100644 --- a/web-app/src/components/Message/index.tsx +++ b/web-app/src/components/Message/index.tsx @@ -2,15 +2,34 @@ import { Message as AlifdMessage } from '@alifd/next' import * as React from 'react' interface Props { - type: 'error' + type?: 'success' | 'warning' | 'error' | 'notice' | 'help' | 'loading' title: string - description?: string + shape?: 'inline' | 'addon' | 'toast' + size?: 'medium' | 'large' + children?: string + closeable?: boolean + onClose?: () => void + handleClose?: () => void } const Message = (props: Props) => { + const [visible, setVisible] = React.useState(true) + function onClose() { + if (props.onClose) { + props.onClose() + } + setVisible(false) + } return ( - - {props.description} + + {props.children} ) } diff --git a/web-app/src/components/ProcessEvents/index.tsx b/web-app/src/components/ProcessMessages/index.tsx similarity index 65% rename from web-app/src/components/ProcessEvents/index.tsx rename to web-app/src/components/ProcessMessages/index.tsx index 255fad96..6a716ce2 100644 --- a/web-app/src/components/ProcessEvents/index.tsx +++ b/web-app/src/components/ProcessMessages/index.tsx @@ -1,4 +1,4 @@ -import { Message as AlifdMessage } from '@alifd/next' +import Message from '../Message' import * as React from 'react' import * as T from 'typings' import { css, jsx } from '@emotion/core' @@ -15,19 +15,19 @@ const styles = { } // display a list of active processes -const ProcessEvents = ({ processes }: Props) => { +const ProcessMessages = ({ processes }: Props) => { if (!processes.length) { return null } return (
{processes.map(process => ( - + {process.description} - + ))}
) } -export default ProcessEvents +export default ProcessMessages diff --git a/web-app/src/containers/Tutorial/LevelPage/Level.tsx b/web-app/src/containers/Tutorial/LevelPage/Level.tsx index 4f745c44..97034380 100644 --- a/web-app/src/containers/Tutorial/LevelPage/Level.tsx +++ b/web-app/src/containers/Tutorial/LevelPage/Level.tsx @@ -4,7 +4,7 @@ import * as G from 'typings/graphql' import { css, jsx } from '@emotion/core' import Button from '../../../components/Button' import Markdown from '../../../components/Markdown' -import ProcessEvents from '../../../components/ProcessEvents' +import ProcessMessages from '../../../components/ProcessMessages' import Step from './Step' const styles = { @@ -109,7 +109,7 @@ const Level = ({ level, onContinue, onLoadSolution, processes }: Props) => { {processes.length > 0 && (
- +
)} diff --git a/web-app/stories/Commands.stories.tsx b/web-app/stories/Commands.stories.tsx index 87677d27..7b4b8c58 100644 --- a/web-app/stories/Commands.stories.tsx +++ b/web-app/stories/Commands.stories.tsx @@ -1,6 +1,6 @@ import { storiesOf } from '@storybook/react' import React from 'react' -import ProcessEvents from '../src/components/ProcessEvents' +import ProcessMessages from '../src/components/ProcessMessages' import SideBarDecorator from './utils/SideBarDecorator' const styles = { @@ -13,7 +13,7 @@ const styles = { storiesOf('Components', module) .addDecorator(SideBarDecorator) .add('Processes', () => ( - { + return ( +
+ +
+ ) + }) From feeaf975d10da72015b07011f863ee68696bec04 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 12:00:53 -0800 Subject: [PATCH 06/12] fix loading pages --- web-app/src/Routes.tsx | 6 +++--- web-app/src/containers/Overview/index.tsx | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/web-app/src/Routes.tsx b/web-app/src/Routes.tsx index 091c718d..352bfe91 100644 --- a/web-app/src/Routes.tsx +++ b/web-app/src/Routes.tsx @@ -23,7 +23,7 @@ const Routes = () => { - + @@ -32,11 +32,11 @@ const Routes = () => { - + {/* Tutorial */} - + diff --git a/web-app/src/containers/Overview/index.tsx b/web-app/src/containers/Overview/index.tsx index 2e999a3c..e0fa6d19 100644 --- a/web-app/src/containers/Overview/index.tsx +++ b/web-app/src/containers/Overview/index.tsx @@ -5,6 +5,7 @@ import * as G from 'typings/graphql' import ErrorView from '../../components/Error' import queryTutorial from '../../services/apollo/queries/tutorial' import OverviewPage from './OverviewPage' +import LoadingPage from '../../containers/LoadingPage' interface PageProps { context: CR.MachineContext @@ -35,7 +36,7 @@ const Overview = (props: PageProps) => { }) if (loading) { - return
Loading Summary...
+ return } if (error) { From 8dc00aa2b653c57992cbd2dd0782707754a090e6 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 12:01:03 -0800 Subject: [PATCH 07/12] setup test notify --- typings/index.d.ts | 7 ++++ .../src/components/ProcessMessages/index.tsx | 10 ++++- web-app/src/containers/LoadingPage.tsx | 4 +- .../containers/Tutorial/LevelPage/Level.tsx | 5 ++- .../containers/Tutorial/LevelPage/index.tsx | 12 +++++- web-app/src/services/notify/index.tsx | 26 ------------- web-app/src/services/state/actions/test.ts | 39 +++++++++++-------- web-app/src/services/state/machine.ts | 1 + web-app/stories/Commands.stories.tsx | 29 ++++++++++++++ web-app/stories/TestNotify.stories.tsx | 22 ----------- 10 files changed, 84 insertions(+), 71 deletions(-) delete mode 100644 web-app/src/services/notify/index.tsx delete mode 100644 web-app/stories/TestNotify.stories.tsx diff --git a/typings/index.d.ts b/typings/index.d.ts index ffcfaa12..5fe546f8 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -42,6 +42,12 @@ export interface ErrorMessage { description?: string } +export interface TestStatus { + type: 'success' | 'warning' | 'error' | 'loading' + title: string + content?: string +} + export interface MachineContext { env: Environment error: ErrorMessage | null @@ -49,6 +55,7 @@ export interface MachineContext { position: Position progress: Progress processes: ProcessEvent[] + testStatus: TestStatus | null } export interface MachineEvent { diff --git a/web-app/src/components/ProcessMessages/index.tsx b/web-app/src/components/ProcessMessages/index.tsx index 6a716ce2..24f42e76 100644 --- a/web-app/src/components/ProcessMessages/index.tsx +++ b/web-app/src/components/ProcessMessages/index.tsx @@ -4,6 +4,7 @@ import * as T from 'typings' import { css, jsx } from '@emotion/core' interface Props { + testStatus: T.TestStatus | null processes: T.ProcessEvent[] } @@ -15,7 +16,14 @@ const styles = { } // display a list of active processes -const ProcessMessages = ({ processes }: Props) => { +const ProcessMessages = ({ processes, testStatus }: Props) => { + if (testStatus) { + return ( + + {testStatus.content} + + ) + } if (!processes.length) { return null } diff --git a/web-app/src/containers/LoadingPage.tsx b/web-app/src/containers/LoadingPage.tsx index 30c49fe3..ede5cdb8 100644 --- a/web-app/src/containers/LoadingPage.tsx +++ b/web-app/src/containers/LoadingPage.tsx @@ -25,7 +25,9 @@ const LoadingPage = ({ text, context }: Props) => { if (error) { return (
- + + {error.description} +
) } diff --git a/web-app/src/containers/Tutorial/LevelPage/Level.tsx b/web-app/src/containers/Tutorial/LevelPage/Level.tsx index 97034380..cff1beeb 100644 --- a/web-app/src/containers/Tutorial/LevelPage/Level.tsx +++ b/web-app/src/containers/Tutorial/LevelPage/Level.tsx @@ -68,11 +68,12 @@ const styles = { interface Props { level: G.Level & { status: T.ProgressStatus; index: number; steps: Array } processes: T.ProcessEvent[] + testStatus: T.TestStatus | null onContinue(): void onLoadSolution(): void } -const Level = ({ level, onContinue, onLoadSolution, processes }: Props) => { +const Level = ({ level, onContinue, onLoadSolution, processes, testStatus }: Props) => { if (!level.steps) { throw new Error('No Stage steps found') } @@ -109,7 +110,7 @@ const Level = ({ level, onContinue, onLoadSolution, processes }: Props) => { {processes.length > 0 && (
- +
)} diff --git a/web-app/src/containers/Tutorial/LevelPage/index.tsx b/web-app/src/containers/Tutorial/LevelPage/index.tsx index 7e47bde0..4c74179f 100644 --- a/web-app/src/containers/Tutorial/LevelPage/index.tsx +++ b/web-app/src/containers/Tutorial/LevelPage/index.tsx @@ -10,7 +10,7 @@ interface PageProps { } const LevelSummaryPageContainer = (props: PageProps) => { - const { position, progress, processes, error } = props.context + const { position, progress, processes, testStatus, error } = props.context const version = selectors.currentVersion(props.context) const levelData: G.Level = selectors.currentLevel(props.context) @@ -48,7 +48,15 @@ const LevelSummaryPageContainer = (props: PageProps) => { }), } - return + return ( + + ) } export default LevelSummaryPageContainer diff --git a/web-app/src/services/notify/index.tsx b/web-app/src/services/notify/index.tsx deleted file mode 100644 index d7f2961e..00000000 --- a/web-app/src/services/notify/index.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Notification } from '@alifd/next' - -interface Props { - key: string - title: string - content: string - duration?: number - onClose?: () => void - icon?: string -} - -Notification.config({ - placement: 'topRight', -}) - -const notify = (props: Props) => { - Notification.open({ - key: props.key, - title: props.title, - content: props.content, - duration: props.duration, - onClose: props.onClose, - }) -} - -export default notify diff --git a/web-app/src/services/state/actions/test.ts b/web-app/src/services/state/actions/test.ts index 87af39ca..f1eafcc9 100644 --- a/web-app/src/services/state/actions/test.ts +++ b/web-app/src/services/state/actions/test.ts @@ -1,24 +1,29 @@ import * as CR from 'typings' -import { ActionFunctionMap } from 'xstate' -import notify from '../../notify' +import { assign, ActionFunctionMap } from 'xstate' const testActions: ActionFunctionMap = { - testPass() { - notify({ - key: 'test', + // @ts-ignore + testStart: assign({ + testStatus: () => ({ + type: 'loading', + title: 'Test running...', + }), + }), + // @ts-ignore + testPass: assign({ + testStatus: () => ({ + type: 'success', title: 'Success!', - content: '', - duration: 1500, - }) - }, - testFail(context, event) { - notify({ - key: 'test', - title: 'Fail', - content: '', - duration: 3000, - }) - }, + }), + }), + // @ts-ignore + testFail: assign({ + testStatus: () => ({ + type: 'warning', + title: 'Fail!', + content: 'Test failed for some reason', + }), + }), } export default testActions diff --git a/web-app/src/services/state/machine.ts b/web-app/src/services/state/machine.ts index 383e9e59..9274d759 100644 --- a/web-app/src/services/state/machine.ts +++ b/web-app/src/services/state/machine.ts @@ -27,6 +27,7 @@ export const createMachine = (options: any) => { complete: false, }, processes: [], + testStatus: null, }, states: { Start: { diff --git a/web-app/stories/Commands.stories.tsx b/web-app/stories/Commands.stories.tsx index 7b4b8c58..3481fbb5 100644 --- a/web-app/stories/Commands.stories.tsx +++ b/web-app/stories/Commands.stories.tsx @@ -14,6 +14,7 @@ storiesOf('Components', module) .addDecorator(SideBarDecorator) .add('Processes', () => ( )) + .add('Test Start', () => ( + + )) + .add('Test Pass', () => ( + + )) + .add('Test Fail', () => ( + + )) diff --git a/web-app/stories/TestNotify.stories.tsx b/web-app/stories/TestNotify.stories.tsx deleted file mode 100644 index 06c579f1..00000000 --- a/web-app/stories/TestNotify.stories.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { storiesOf } from '@storybook/react' -import React from 'react' -import { css, jsx } from '@emotion/core' -import SideBarDecorator from './utils/SideBarDecorator' -import Message from '../src/components/Message' - -const styles = { - container: { - display: 'flex' as 'flex', - flexDirection: 'column' as 'column', - }, -} - -storiesOf('Test Notification', module) - .addDecorator(SideBarDecorator) - .add('Toast', () => { - return ( -
- -
- ) - }) From fc5d41c8664c69fea2d4418b06eaae272e1fdd89 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 12:54:42 -0800 Subject: [PATCH 08/12] fix issue with timeout --- src/editor/commands.ts | 4 +- web-app/src/components/Message/index.tsx | 9 ++-- .../ProcessMessages/TestMessage.tsx | 43 +++++++++++++++++++ .../src/components/ProcessMessages/index.tsx | 11 ++--- web-app/src/containers/LoadingPage.tsx | 4 +- .../containers/Tutorial/LevelPage/Level.tsx | 2 +- web-app/src/services/state/actions/test.ts | 4 +- 7 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 web-app/src/components/ProcessMessages/TestMessage.tsx diff --git a/src/editor/commands.ts b/src/editor/commands.ts index f4f6c722..ad1911e3 100644 --- a/src/editor/commands.ts +++ b/src/editor/commands.ts @@ -60,8 +60,8 @@ export const createCommands = ({ extensionPath, workspaceState, workspaceRoot }: webview.send({ type: 'TEST_PASS', payload }) }, onFail: (payload: Payload, message: string) => { - // send test fail message back to client - webview.send({ type: 'TEST_FAIL', payload }) + // send test fail message back to client with failure message + webview.send({ type: 'TEST_FAIL', payload: { ...payload, message } }) }, onError: (payload: Payload) => { // send test error message back to client diff --git a/web-app/src/components/Message/index.tsx b/web-app/src/components/Message/index.tsx index c0696a7e..c0f428d2 100644 --- a/web-app/src/components/Message/index.tsx +++ b/web-app/src/components/Message/index.tsx @@ -3,10 +3,11 @@ import * as React from 'react' interface Props { type?: 'success' | 'warning' | 'error' | 'notice' | 'help' | 'loading' - title: string shape?: 'inline' | 'addon' | 'toast' size?: 'medium' | 'large' - children?: string + title: string + content?: string + closed?: boolean closeable?: boolean onClose?: () => void handleClose?: () => void @@ -23,13 +24,13 @@ const Message = (props: Props) => { return ( - {props.children} + {props.content} ) } diff --git a/web-app/src/components/ProcessMessages/TestMessage.tsx b/web-app/src/components/ProcessMessages/TestMessage.tsx new file mode 100644 index 00000000..acdd2e5b --- /dev/null +++ b/web-app/src/components/ProcessMessages/TestMessage.tsx @@ -0,0 +1,43 @@ +import Message from '../Message' +import * as React from 'react' +import * as T from 'typings' +import { css, jsx } from '@emotion/core' + +const durations = { + success: 1000, + warning: 4500, + error: 4500, + loading: Infinity, +} + +const useTimeout = ({ duration, key }: { duration: number; key: string }) => { + const [timeoutClose, setTimeoutClose] = React.useState(false) + React.useEffect(() => { + setTimeoutClose(false) + const timeout = setTimeout(() => { + setTimeoutClose(true) + }, duration) + return () => { + clearTimeout(timeout) + } + }, [key]) + return timeoutClose +} + +const TestMessage = (props: T.TestStatus) => { + const duration = durations[props.type] + const timeoutClose = useTimeout({ duration, key: props.title }) + return ( + + ) +} + +export default TestMessage diff --git a/web-app/src/components/ProcessMessages/index.tsx b/web-app/src/components/ProcessMessages/index.tsx index 24f42e76..42faf14e 100644 --- a/web-app/src/components/ProcessMessages/index.tsx +++ b/web-app/src/components/ProcessMessages/index.tsx @@ -2,6 +2,7 @@ import Message from '../Message' import * as React from 'react' import * as T from 'typings' import { css, jsx } from '@emotion/core' +import TestMessage from './TestMessage' interface Props { testStatus: T.TestStatus | null @@ -18,11 +19,7 @@ const styles = { // display a list of active processes const ProcessMessages = ({ processes, testStatus }: Props) => { if (testStatus) { - return ( - - {testStatus.content} - - ) + return } if (!processes.length) { return null @@ -30,9 +27,7 @@ const ProcessMessages = ({ processes, testStatus }: Props) => { return (
{processes.map(process => ( - - {process.description} - + ))}
) diff --git a/web-app/src/containers/LoadingPage.tsx b/web-app/src/containers/LoadingPage.tsx index ede5cdb8..f375034a 100644 --- a/web-app/src/containers/LoadingPage.tsx +++ b/web-app/src/containers/LoadingPage.tsx @@ -25,9 +25,7 @@ const LoadingPage = ({ text, context }: Props) => { if (error) { return (
- - {error.description} - +
) } diff --git a/web-app/src/containers/Tutorial/LevelPage/Level.tsx b/web-app/src/containers/Tutorial/LevelPage/Level.tsx index cff1beeb..f2a1a115 100644 --- a/web-app/src/containers/Tutorial/LevelPage/Level.tsx +++ b/web-app/src/containers/Tutorial/LevelPage/Level.tsx @@ -108,7 +108,7 @@ const Level = ({ level, onContinue, onLoadSolution, processes, testStatus }: Pro - {processes.length > 0 && ( + {(testStatus || processes.length > 0) && (
diff --git a/web-app/src/services/state/actions/test.ts b/web-app/src/services/state/actions/test.ts index f1eafcc9..25af8402 100644 --- a/web-app/src/services/state/actions/test.ts +++ b/web-app/src/services/state/actions/test.ts @@ -18,10 +18,10 @@ const testActions: ActionFunctionMap = { }), // @ts-ignore testFail: assign({ - testStatus: () => ({ + testStatus: (context, event) => ({ type: 'warning', title: 'Fail!', - content: 'Test failed for some reason', + content: event.payload.message, }), }), } From f6b0bdaafc6b6a8035fe63f2e92fac4036e7c986 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 13:01:17 -0800 Subject: [PATCH 09/12] ensure loading state is displayed --- web-app/src/components/ProcessMessages/TestMessage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-app/src/components/ProcessMessages/TestMessage.tsx b/web-app/src/components/ProcessMessages/TestMessage.tsx index acdd2e5b..57b7eb2e 100644 --- a/web-app/src/components/ProcessMessages/TestMessage.tsx +++ b/web-app/src/components/ProcessMessages/TestMessage.tsx @@ -7,7 +7,7 @@ const durations = { success: 1000, warning: 4500, error: 4500, - loading: Infinity, + loading: 300000, } const useTimeout = ({ duration, key }: { duration: number; key: string }) => { From a85dd93b91fb683e28af1a8431896852dc591bae Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 13:07:50 -0800 Subject: [PATCH 10/12] cleanup package.json and webpack config --- package-lock.json | 352 --------------------------- package.json | 3 - web-app/.storybook/webpack.config.js | 18 +- web-app/config-overrides.js | 16 +- 4 files changed, 17 insertions(+), 372 deletions(-) diff --git a/package-lock.json b/package-lock.json index 38448394..76a57ed0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -411,23 +411,6 @@ "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", "dev": true }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, "@types/istanbul-lib-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", @@ -488,12 +471,6 @@ "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", "dev": true }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, "@types/node": { "version": "13.5.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-13.5.3.tgz", @@ -632,27 +609,6 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" }, - "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", - "dev": true, - "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" - }, - "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - } - } - }, "agent-base": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", @@ -714,12 +670,6 @@ "sprintf-js": "~1.0.2" } }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -728,15 +678,6 @@ "safer-buffer": "~2.1.0" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -753,12 +694,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -783,12 +718,6 @@ "tweetnacl": "^0.14.3" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, "binary-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", @@ -931,38 +860,12 @@ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "requires": { - "arity-n": "^1.0.4" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -986,18 +889,6 @@ "which": "^1.2.9" } }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -1018,16 +909,6 @@ } } }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1059,12 +940,6 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -1140,12 +1015,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, "encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", @@ -1182,28 +1051,6 @@ "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -1217,16 +1064,6 @@ "es6-promise": "^4.0.3" } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1441,23 +1278,6 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", - "dev": true - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2135,34 +1955,6 @@ "type-check": "~0.3.2" } }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", @@ -2250,12 +2042,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -2287,12 +2073,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", - "dev": true - }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", @@ -2392,28 +2172,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -2514,12 +2272,6 @@ "picomatch": "^2.0.7" } }, - "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", - "dev": true - }, "regexpp": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", @@ -2619,38 +2371,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "2.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -2661,30 +2381,6 @@ "signal-exit": "^3.0.2" } }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "dev": true, - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -2773,19 +2469,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -2796,12 +2479,6 @@ "source-map": "^0.6.0" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2993,12 +2670,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -3027,12 +2698,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "url-parse": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", @@ -3043,23 +2708,6 @@ "requires-port": "^1.0.0" } }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", diff --git a/package.json b/package.json index 9f9df309..79a20b5f 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ "@types/assert": "^1.4.5", "@types/chokidar": "^2.1.3", "@types/dotenv": "^8.2.0", - "@types/glob": "^7.1.1", "@types/jest": "^25.1.1", "@types/jsdom": "^12.2.4", "@types/node": "^13.5.3", @@ -50,10 +49,8 @@ "eslint": "^6.8.0", "eslint-config-prettier": "^6.10.0", "eslint-plugin-prettier": "^3.1.2", - "glob": "^7.1.6", "graphql": "^14.6.0", "prettier": "^1.19.1", - "resolve-url-loader": "^3.1.1", "ts-jest": "^25.1.0", "typescript": "^3.7.5", "vscode": "^1.1.36", diff --git a/web-app/.storybook/webpack.config.js b/web-app/.storybook/webpack.config.js index 06c6a292..976bf67a 100644 --- a/web-app/.storybook/webpack.config.js +++ b/web-app/.storybook/webpack.config.js @@ -13,15 +13,15 @@ module.exports = ({ config }) => { test: /\.(ts|tsx)$/, loader: require.resolve('babel-loader'), options: { - // plugins: [ - // [ - // 'babel-plugin-import', - // { - // libraryName: '@alifd/next', - // style: true, - // }, - // ], - // ], + plugins: [ + [ + 'babel-plugin-import', + { + libraryName: '@alifd/next', + style: true, + }, + ], + ], presets: [ // react-app ['react-app', { flow: false, typescript: true }], diff --git a/web-app/config-overrides.js b/web-app/config-overrides.js index 70581445..a806937f 100644 --- a/web-app/config-overrides.js +++ b/web-app/config-overrides.js @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const { addBabelPreset, addWebpackModuleRule, addWebpackPlugin } = require('customize-cra') +const { addBabelPreset, addWebpackModuleRule, addBabelPlugin } = require('customize-cra') module.exports = function override(config) { addWebpackModuleRule({ @@ -16,13 +16,13 @@ module.exports = function override(config) { })(config) // load @alifd/next component css - // addBabelPlugin([ - // 'babel-plugin-import', - // { - // libraryName: '@alifd/next', - // style: true, - // }, - // ])(config) + addBabelPlugin([ + 'babel-plugin-import', + { + libraryName: '@alifd/next', + style: true, + }, + ])(config) // setup emotion styles addBabelPreset('@emotion/babel-preset-css-prop')(config) From 5a6120bbe4bb350676f4fffd7326e10a91f10ec7 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 13:18:05 -0800 Subject: [PATCH 11/12] cleanup button styles --- web-app/src/components/Button/index.tsx | 11 ++++++++++- web-app/src/containers/Overview/OverviewPage.tsx | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/web-app/src/components/Button/index.tsx b/web-app/src/components/Button/index.tsx index c9a87397..bb4aa7ae 100644 --- a/web-app/src/components/Button/index.tsx +++ b/web-app/src/components/Button/index.tsx @@ -7,10 +7,19 @@ interface Props { disabled?: boolean type?: 'primary' | 'secondary' | 'normal' onClick?: () => void + size?: 'small' | 'medium' | 'large' + iconSize?: 'xxs' | 'xs' | 'small' | 'medium' | 'large' | 'xl' | 'xxl' | 'xxxl' } const Button = (props: Props) => ( - + {props.children} ) diff --git a/web-app/src/containers/Overview/OverviewPage.tsx b/web-app/src/containers/Overview/OverviewPage.tsx index 2bcaa8c4..51c3d65f 100644 --- a/web-app/src/containers/Overview/OverviewPage.tsx +++ b/web-app/src/containers/Overview/OverviewPage.tsx @@ -1,6 +1,7 @@ import * as React from 'react' import * as G from 'typings/graphql' import Button from '../../components/Button' +import Icon from '../../components/Icon' import Markdown from '../../components/Markdown' const footerHeight = '3rem' @@ -23,11 +24,13 @@ const styles = { fontSize: '1rem', }, header: { + display: 'flex', height: '2rem', backgroundColor: '#EBEBEB', fontSize: '1rem', lineHeight: '1rem', padding: '10px 1rem', + alignItems: 'center', }, levelList: { padding: '0rem 1rem', @@ -61,7 +64,10 @@ const Summary = ({ title, description, levels, onNext, onBack }: Props) => (
- + +    CodeRoad
From be1e1dbe28b8888c84afb81a05f99e778ec01b20 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Feb 2020 14:58:52 -0800 Subject: [PATCH 12/12] fixes #99. Broken continue --- web-app/src/services/state/machine.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-app/src/services/state/machine.ts b/web-app/src/services/state/machine.ts index 9274d759..b10109b7 100644 --- a/web-app/src/services/state/machine.ts +++ b/web-app/src/services/state/machine.ts @@ -125,7 +125,7 @@ export const createMachine = (options: any) => { ContinueTutorial: { on: { TUTORIAL_START: { - target: '#tutorial', + target: '#tutorial-level', actions: ['continueConfig'], }, TUTORIAL_SELECT: 'SelectTutorial',