From c4405105f86dbe35e5a86bc27b253a8612ac0a61 Mon Sep 17 00:00:00 2001 From: Dwayne Harris Date: Fri, 15 Nov 2019 12:02:46 -0500 Subject: [PATCH] WIP --- package-lock.json | 102 ++++++++++++++++++++ package.json | 3 + src/components/app.tsx | 8 +- src/components/controls/button.tsx | 5 +- src/components/controls/checkbox-field.tsx | 2 +- src/components/controls/file-field.tsx | 2 +- src/components/create-group-form.tsx | 4 +- src/components/create-group-step.tsx | 3 +- src/components/create-user-form.tsx | 7 +- src/components/create-user-step.tsx | 5 +- src/components/group-list-item.tsx | 6 +- src/components/horizontal-rule.tsx | 2 +- src/components/pages/apps.tsx | 2 + src/components/pages/create-app.tsx | 13 ++- src/components/pages/developers.tsx | 23 +++-- src/components/pages/edit-app.tsx | 104 +++++++++++---------- src/components/pages/group-admin.tsx | 4 +- src/components/pages/groups.tsx | 3 +- src/components/pages/loading.tsx | 13 ++- src/components/pages/register-group.tsx | 15 ++- src/components/pages/register.tsx | 18 ++-- src/components/spinner.tsx | 26 ++---- src/images/caret-down.svg | 1 + src/styles/app.css | 36 ++++++- src/styles/spinner.css | 47 ---------- src/themes.ts | 6 +- webpack.config.ts | 8 ++ 27 files changed, 297 insertions(+), 171 deletions(-) create mode 100644 src/images/caret-down.svg delete mode 100644 src/styles/spinner.css diff --git a/package-lock.json b/package-lock.json index 68d9ed3..eb561f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -213,6 +213,17 @@ "@types/node": "*" } }, + "@types/copy-webpack-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/copy-webpack-plugin/-/copy-webpack-plugin-5.0.0.tgz", + "integrity": "sha512-yQHocgdgES7W5Q2UyxJ5cj/E6MrV1zq3MZ8jdApS9NJKqax+rux9IE3QAbBmNCGbgivEsejrkIq3Rm76JLubkg==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*", + "@types/webpack": "*" + } + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -1866,6 +1877,54 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "copy-webpack-plugin": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.5.tgz", + "integrity": "sha512-7N68eIoQTyudAuxkfPT7HzGoQ+TsmArN/I3HFwG+lVE3FNzqvZKIiaxtYh4o3BIznioxUvx9j26+Rtsc9htQUQ==", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "serialize-javascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.0.tgz", + "integrity": "sha512-a/mxFfU00QT88umAJQsNWOnUKckhNCqOl028N48e7wFmo2/EHpTo9Wso+iJJCMrQnmFvcjto5RJdAHEvVhcyUQ==", + "dev": true + } + } + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -2258,6 +2317,15 @@ "randombytes": "^2.0.0" } }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -2774,6 +2842,28 @@ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, + "file-loader": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.2.0.tgz", + "integrity": "sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", + "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -4202,6 +4292,12 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -7105,6 +7201,12 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", diff --git a/package.json b/package.json index 34b90c9..86da0b4 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "deploy:prod": "run-s deploy:batch:prod deploy:config:prod" }, "devDependencies": { + "@types/copy-webpack-plugin": "^5.0.0", "@types/html-webpack-plugin": "^3.2.1", "@types/lodash": "^4.14.146", "@types/mini-css-extract-plugin": "^0.8.0", @@ -33,7 +34,9 @@ "@types/webpack-bundle-analyzer": "^2.13.3", "@types/webpack-dev-server": "^3.4.0", "@types/zxcvbn": "^4.4.0", + "copy-webpack-plugin": "^5.0.5", "css-loader": "^3.2.0", + "file-loader": "^4.2.0", "html-webpack-plugin": "^3.2.0", "mini-css-extract-plugin": "^0.8.0", "npm-run-all": "^4.1.5", diff --git a/src/components/app.tsx b/src/components/app.tsx index 8084f4d..2827147 100644 --- a/src/components/app.tsx +++ b/src/components/app.tsx @@ -9,16 +9,16 @@ import { getFetching } from 'src/selectors' import getConfig from 'src/config' import { LOCAL_STORAGE_ACCESS_TOKEN_KEY } from 'src/constants' -import { useTheme } from 'src/hooks' +import { useDeepCompareEffect, useTheme } from 'src/hooks' import { AppState, AppThunkDispatch } from 'src/types' import Footer from './footer' import Logo from './logo' import NavigationMenu from './navigation-menu' import NotificationContainer from './notification-container' -import Spinner from './spinner' import Search from './search' import SelfInfo from './self-info' +import Spinner from './spinner' import About from './pages/about' import Apps from './pages/apps' @@ -38,8 +38,6 @@ import ViewPost from './pages/view-post' import ViewUser from './pages/view-user' import '../styles/app.css' -import '../styles/spinner.css' -import { useDeepCompareEffect } from 'src/hooks' const App: FC = () => { const theme = useTheme() @@ -133,7 +131,7 @@ const App: FC = () => {
- {fetching && } + {fetching && }
diff --git a/src/components/controls/button.tsx b/src/components/controls/button.tsx index 94c1f78..253cd18 100644 --- a/src/components/controls/button.tsx +++ b/src/components/controls/button.tsx @@ -1,10 +1,9 @@ import React, { FC, MouseEventHandler } from 'react' import noop from 'lodash/noop' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { faSpinner } from '@fortawesome/free-solid-svg-icons' import { IconDefinition } from '@fortawesome/fontawesome-common-types' -import Spinner from 'src/components/spinner' - export interface Props { text: string icon?: IconDefinition @@ -30,7 +29,7 @@ const Button: FC = ({ text, icon, loading, color, backgroundColor, onClic return ( ) diff --git a/src/components/controls/checkbox-field.tsx b/src/components/controls/checkbox-field.tsx index e9288e4..6026fe8 100644 --- a/src/components/controls/checkbox-field.tsx +++ b/src/components/controls/checkbox-field.tsx @@ -15,7 +15,7 @@ const CheckboxField: FC = ({ name, children }) => { const dispatch = useDispatch() return ( -