diff --git a/webui/src/bug/BugQuery.graphql b/webui/src/pages/bug/BugQuery.graphql
similarity index 100%
rename from webui/src/bug/BugQuery.graphql
rename to webui/src/pages/bug/BugQuery.graphql
diff --git a/webui/src/bug/BugQuery.tsx b/webui/src/pages/bug/BugQuery.tsx
similarity index 99%
rename from webui/src/bug/BugQuery.tsx
rename to webui/src/pages/bug/BugQuery.tsx
index 2ecf718ce9510ba300a0baa3eb097449ce1fe474..2a70a2f84f676f29c72837a028cc96f5c9e117b6 100644
--- a/webui/src/bug/BugQuery.tsx
+++ b/webui/src/pages/bug/BugQuery.tsx
@@ -1,7 +1,8 @@
-import CircularProgress from '@material-ui/core/CircularProgress';
import React from 'react';
import { RouteComponentProps } from 'react-router-dom';
+import CircularProgress from '@material-ui/core/CircularProgress';
+
import Bug from './Bug';
import { useGetBugQuery } from './BugQuery.generated';
diff --git a/webui/src/pages/bug/CommentForm.graphql b/webui/src/pages/bug/CommentForm.graphql
new file mode 100644
index 0000000000000000000000000000000000000000..33d211938e35acb209ef71ba2b0f56cbc16dfa03
--- /dev/null
+++ b/webui/src/pages/bug/CommentForm.graphql
@@ -0,0 +1,5 @@
+mutation AddComment($input: AddCommentInput!) {
+ addComment(input: $input) {
+ operation { id }
+ }
+}
diff --git a/webui/src/pages/bug/CommentForm.tsx b/webui/src/pages/bug/CommentForm.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..3724baf096b59a8d6e4b9c927d90960e13137229
--- /dev/null
+++ b/webui/src/pages/bug/CommentForm.tsx
@@ -0,0 +1,146 @@
+import React, { useState, useRef } from 'react';
+
+import Button from '@material-ui/core/Button';
+import Paper from '@material-ui/core/Paper';
+import Tab from '@material-ui/core/Tab';
+import Tabs from '@material-ui/core/Tabs';
+import TextField from '@material-ui/core/TextField';
+import { makeStyles, Theme } from '@material-ui/core/styles';
+
+import Content from 'src/components/Content';
+
+import { useAddCommentMutation } from './CommentForm.generated';
+import { TimelineDocument } from './TimelineQuery.generated';
+
+type StyleProps = { loading: boolean };
+const useStyles = makeStyles(theme => ({
+ container: {
+ margin: theme.spacing(2, 0),
+ padding: theme.spacing(0, 2, 2, 2),
+ },
+ textarea: {},
+ tabContent: {
+ margin: theme.spacing(2, 0),
+ },
+ preview: {
+ borderBottom: `solid 3px ${theme.palette.grey['200']}`,
+ minHeight: '5rem',
+ },
+ actions: {
+ display: 'flex',
+ justifyContent: 'flex-end',
+ },
+}));
+
+type TabPanelProps = {
+ children: React.ReactNode;
+ value: number;
+ index: number;
+} & React.HTMLProps;
+function TabPanel({ children, value, index, ...props }: TabPanelProps) {
+ return (
+
+ {value === index && children}
+
+ );
+}
+
+const a11yProps = (index: number) => ({
+ id: `editor-tab-${index}`,
+ 'aria-controls': `editor-tabpanel-${index}`,
+});
+
+type Props = {
+ bugId: string;
+};
+
+function CommentForm({ bugId }: Props) {
+ const [addComment, { loading }] = useAddCommentMutation();
+ const [input, setInput] = useState('');
+ const [tab, setTab] = useState(0);
+ const classes = useStyles({ loading });
+ const form = useRef(null);
+
+ const submit = () => {
+ addComment({
+ variables: {
+ input: {
+ prefix: bugId,
+ message: input,
+ },
+ },
+ refetchQueries: [
+ // TODO: update the cache instead of refetching
+ {
+ query: TimelineDocument,
+ variables: {
+ id: bugId,
+ first: 100,
+ },
+ },
+ ],
+ awaitRefetchQueries: true,
+ }).then(() => setInput(''));
+ };
+
+ const handleSubmit = (e: React.FormEvent) => {
+ e.preventDefault();
+ submit();
+ };
+
+ const handleKeyDown = (e: React.KeyboardEvent) => {
+ // Submit on cmd/ctrl+enter
+ if ((e.metaKey || e.altKey) && e.keyCode === 13) {
+ submit();
+ }
+ };
+
+ return (
+
+
+
+ );
+}
+
+export default CommentForm;
diff --git a/webui/src/bug/LabelChange.tsx b/webui/src/pages/bug/LabelChange.tsx
similarity index 87%
rename from webui/src/bug/LabelChange.tsx
rename to webui/src/pages/bug/LabelChange.tsx
index 572579bdd18dc54ac4b713954812528707b70055..93fa8a32eb9b1c491d171b4b53279b3999f5ddbf 100644
--- a/webui/src/bug/LabelChange.tsx
+++ b/webui/src/pages/bug/LabelChange.tsx
@@ -1,15 +1,16 @@
-import { makeStyles } from '@material-ui/core/styles';
import React from 'react';
-import Author from '../Author';
-import Date from '../Date';
-import Label from '../Label';
+import { makeStyles } from '@material-ui/core/styles';
+
+import Author from 'src/components/Author';
+import Date from 'src/components/Date';
+import Label from 'src/components/Label';
import { LabelChangeFragment } from './LabelChangeFragment.generated';
const useStyles = makeStyles(theme => ({
main: {
- ...theme.typography.body1,
+ ...theme.typography.body2,
marginLeft: theme.spacing(1) + 40,
},
author: {
diff --git a/webui/src/bug/LabelChangeFragment.graphql b/webui/src/pages/bug/LabelChangeFragment.graphql
similarity index 70%
rename from webui/src/bug/LabelChangeFragment.graphql
rename to webui/src/pages/bug/LabelChangeFragment.graphql
index 631de70c3661948d71396b89b4a875a771f87a7a..82d41235c335edd5c942aa06dfc54c8f388a0709 100644
--- a/webui/src/bug/LabelChangeFragment.graphql
+++ b/webui/src/pages/bug/LabelChangeFragment.graphql
@@ -1,5 +1,4 @@
-#import "../Author.graphql"
-#import "../Label.graphql"
+#import "../../components/fragments.graphql"
fragment LabelChange on LabelChangeTimelineItem {
date
diff --git a/webui/src/bug/Message.tsx b/webui/src/pages/bug/Message.tsx
similarity index 90%
rename from webui/src/bug/Message.tsx
rename to webui/src/pages/bug/Message.tsx
index c8d0710dfab011dfda2b4027ec29c0d4091746e9..4a438b775bf0408a07f6e0ff7a2b789a9c89debd 100644
--- a/webui/src/bug/Message.tsx
+++ b/webui/src/pages/bug/Message.tsx
@@ -1,11 +1,11 @@
+import React from 'react';
+
import Paper from '@material-ui/core/Paper';
import { makeStyles } from '@material-ui/core/styles';
-import React from 'react';
-import Author from '../Author';
-import { Avatar } from '../Author';
-import Content from '../Content';
-import Date from '../Date';
+import Author, { Avatar } from 'src/components/Author';
+import Content from 'src/components/Content';
+import Date from 'src/components/Date';
import { AddCommentFragment } from './MessageCommentFragment.generated';
import { CreateFragment } from './MessageCreateFragment.generated';
@@ -31,6 +31,7 @@ const useStyles = makeStyles(theme => ({
padding: '0.5rem 1rem',
borderBottom: '1px solid #ddd',
display: 'flex',
+ backgroundColor: '#e2f1ff',
},
title: {
flex: 1,
diff --git a/webui/src/bug/MessageCommentFragment.graphql b/webui/src/pages/bug/MessageCommentFragment.graphql
similarity index 68%
rename from webui/src/bug/MessageCommentFragment.graphql
rename to webui/src/pages/bug/MessageCommentFragment.graphql
index 38d626d0fd6429ee86e5e133dc1d76d040b6beac..00f8342d749d97256fa9d6624e1dfe3ab582f711 100644
--- a/webui/src/bug/MessageCommentFragment.graphql
+++ b/webui/src/pages/bug/MessageCommentFragment.graphql
@@ -1,4 +1,4 @@
-#import "../Author.graphql"
+#import "../../components/fragments.graphql"
fragment AddComment on AddCommentTimelineItem {
createdAt
diff --git a/webui/src/bug/MessageCreateFragment.graphql b/webui/src/pages/bug/MessageCreateFragment.graphql
similarity index 66%
rename from webui/src/bug/MessageCreateFragment.graphql
rename to webui/src/pages/bug/MessageCreateFragment.graphql
index 08477470aeb32ff2b347e06ccc97f11abf137af3..4cae819db1a0131edafed4a9e7b95b3e2acfbe96 100644
--- a/webui/src/bug/MessageCreateFragment.graphql
+++ b/webui/src/pages/bug/MessageCreateFragment.graphql
@@ -1,4 +1,4 @@
-#import "../Author.graphql"
+#import "../../components/fragments.graphql"
fragment Create on CreateTimelineItem {
createdAt
diff --git a/webui/src/bug/SetStatus.tsx b/webui/src/pages/bug/SetStatus.tsx
similarity index 55%
rename from webui/src/bug/SetStatus.tsx
rename to webui/src/pages/bug/SetStatus.tsx
index 3e1a798964dcb436b0dca934a9de743d5d5db21c..e9674424d25dc0eb44d5a3dde1bbb198aa6f57f4 100644
--- a/webui/src/bug/SetStatus.tsx
+++ b/webui/src/pages/bug/SetStatus.tsx
@@ -1,16 +1,21 @@
-import { makeStyles } from '@material-ui/core/styles';
import React from 'react';
-import Author from '../Author';
-import Date from '../Date';
+import { makeStyles } from '@material-ui/core/styles';
+
+import { Status } from '../../gqlTypes';
+import Author from 'src/components/Author';
+import Date from 'src/components/Date';
import { SetStatusFragment } from './SetStatusFragment.generated';
const useStyles = makeStyles(theme => ({
main: {
- ...theme.typography.body1,
+ ...theme.typography.body2,
marginLeft: theme.spacing(1) + 40,
},
+ author: {
+ fontWeight: 'bold',
+ },
}));
type Props = {
@@ -19,10 +24,14 @@ type Props = {
function SetStatus({ op }: Props) {
const classes = useStyles();
+ const status = { [Status.Open]: 'reopened', [Status.Closed]: 'closed' }[
+ op.status
+ ];
+
return (
-
- {op.status.toLowerCase()} this
+
+ {status} this
);
diff --git a/webui/src/bug/SetStatusFragment.graphql b/webui/src/pages/bug/SetStatusFragment.graphql
similarity index 63%
rename from webui/src/bug/SetStatusFragment.graphql
rename to webui/src/pages/bug/SetStatusFragment.graphql
index 0fdea01b635f209992a5c831efdfbfeb6d6b9dfe..d83804097b586790dacdde0e2b0475b34b69210b 100644
--- a/webui/src/bug/SetStatusFragment.graphql
+++ b/webui/src/pages/bug/SetStatusFragment.graphql
@@ -1,4 +1,4 @@
-#import "../Author.graphql"
+#import "../../components/fragments.graphql"
fragment SetStatus on SetStatusTimelineItem {
date
diff --git a/webui/src/bug/SetTitle.tsx b/webui/src/pages/bug/SetTitle.tsx
similarity index 57%
rename from webui/src/bug/SetTitle.tsx
rename to webui/src/pages/bug/SetTitle.tsx
index 0b088e0bdf4abef59c6a7c561b931ea62a8c0bd9..64b97517bd4efae36e9e73c53d0ed70a3fd42711 100644
--- a/webui/src/bug/SetTitle.tsx
+++ b/webui/src/pages/bug/SetTitle.tsx
@@ -1,17 +1,25 @@
-import { makeStyles } from '@material-ui/core/styles';
import React from 'react';
-import Author from '../Author';
-import Date from '../Date';
+import { makeStyles } from '@material-ui/core/styles';
+
+import Author from 'src/components/Author';
+import Date from 'src/components/Date';
import { SetTitleFragment } from './SetTitleFragment.generated';
const useStyles = makeStyles(theme => ({
main: {
- ...theme.typography.body1,
+ ...theme.typography.body2,
marginLeft: theme.spacing(1) + 40,
},
- bold: {
+ author: {
+ fontWeight: 'bold',
+ },
+ before: {
+ fontWeight: 'bold',
+ textDecoration: 'line-through',
+ },
+ after: {
fontWeight: 'bold',
},
}));
@@ -24,11 +32,11 @@ function SetTitle({ op }: Props) {
const classes = useStyles();
return (
-
+ changed the title from
- {op.was}
+ {op.was} to
- {op.title}
+ {op.title}
);
diff --git a/webui/src/bug/SetTitleFragment.graphql b/webui/src/pages/bug/SetTitleFragment.graphql
similarity index 64%
rename from webui/src/bug/SetTitleFragment.graphql
rename to webui/src/pages/bug/SetTitleFragment.graphql
index 432c44492ef68b9cf1d6954cafa9dec15a716f51..2225dfd376cd2be1d5746349ac84210a548968cb 100644
--- a/webui/src/bug/SetTitleFragment.graphql
+++ b/webui/src/pages/bug/SetTitleFragment.graphql
@@ -1,4 +1,4 @@
-#import "../Author.graphql"
+#import "../../components/fragments.graphql"
fragment SetTitle on SetTitleTimelineItem {
date
diff --git a/webui/src/bug/Timeline.tsx b/webui/src/pages/bug/Timeline.tsx
similarity index 99%
rename from webui/src/bug/Timeline.tsx
rename to webui/src/pages/bug/Timeline.tsx
index ba0f9fc7e3f6d506613bd8c0280624f78009047c..73c88cdfdb8bb44281f01f0d92de3cca66c65be0 100644
--- a/webui/src/bug/Timeline.tsx
+++ b/webui/src/pages/bug/Timeline.tsx
@@ -1,6 +1,7 @@
-import { makeStyles } from '@material-ui/core/styles';
import React from 'react';
+import { makeStyles } from '@material-ui/core/styles';
+
import LabelChange from './LabelChange';
import Message from './Message';
import SetStatus from './SetStatus';
diff --git a/webui/src/bug/TimelineQuery.graphql b/webui/src/pages/bug/TimelineQuery.graphql
similarity index 100%
rename from webui/src/bug/TimelineQuery.graphql
rename to webui/src/pages/bug/TimelineQuery.graphql
diff --git a/webui/src/bug/TimelineQuery.tsx b/webui/src/pages/bug/TimelineQuery.tsx
similarity index 99%
rename from webui/src/bug/TimelineQuery.tsx
rename to webui/src/pages/bug/TimelineQuery.tsx
index 9c4cf183c508be5ef0df61eb3d420463efde55d7..74eed52b213d12c7166515f2b6b7408a0fdaff8b 100644
--- a/webui/src/bug/TimelineQuery.tsx
+++ b/webui/src/pages/bug/TimelineQuery.tsx
@@ -1,6 +1,7 @@
-import CircularProgress from '@material-ui/core/CircularProgress';
import React from 'react';
+import CircularProgress from '@material-ui/core/CircularProgress';
+
import Timeline from './Timeline';
import { useTimelineQuery } from './TimelineQuery.generated';
diff --git a/webui/src/pages/bug/index.tsx b/webui/src/pages/bug/index.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..a3bbcea4f6408182e2822ac8693fcb8ee55f7ad3
--- /dev/null
+++ b/webui/src/pages/bug/index.tsx
@@ -0,0 +1 @@
+export { default } from './BugQuery';
diff --git a/webui/src/list/BugRow.graphql b/webui/src/pages/list/BugRow.graphql
similarity index 67%
rename from webui/src/list/BugRow.graphql
rename to webui/src/pages/list/BugRow.graphql
index 3f9a1ef6006f3f872c5ab643885a0654d4056cd2..547c09d8ef8cf91c966f50788eab8a075ea906ed 100644
--- a/webui/src/list/BugRow.graphql
+++ b/webui/src/pages/list/BugRow.graphql
@@ -1,5 +1,4 @@
-#import "../Author.graphql"
-#import "../Label.graphql"
+#import "../../components/fragments.graphql"
fragment BugRow on Bug {
id
diff --git a/webui/src/list/BugRow.tsx b/webui/src/pages/list/BugRow.tsx
similarity index 93%
rename from webui/src/list/BugRow.tsx
rename to webui/src/pages/list/BugRow.tsx
index f94538a71ebbd78ab75831baef8ee580438c08df..9c1883a387b9507cb722d334944ccadf083cd97f 100644
--- a/webui/src/list/BugRow.tsx
+++ b/webui/src/pages/list/BugRow.tsx
@@ -1,15 +1,16 @@
+import React from 'react';
+import { Link } from 'react-router-dom';
+
import TableCell from '@material-ui/core/TableCell/TableCell';
import TableRow from '@material-ui/core/TableRow/TableRow';
import Tooltip from '@material-ui/core/Tooltip/Tooltip';
import { makeStyles } from '@material-ui/core/styles';
import CheckCircleOutline from '@material-ui/icons/CheckCircleOutline';
import ErrorOutline from '@material-ui/icons/ErrorOutline';
-import React from 'react';
-import { Link } from 'react-router-dom';
-import Date from '../Date';
-import Label from '../Label';
-import { Status } from '../gqlTypes';
+import Date from 'src/components/Date';
+import Label from 'src/components/Label';
+import { Status } from 'src/gqlTypes';
import { BugRowFragment } from './BugRow.generated';
@@ -99,9 +100,9 @@ function BugRow({ bug }: Props) {
- {bug.humanId} opened
+ {bug.humanId} opened
- by {bug.author.displayName}
+ by {bug.author.displayName}
diff --git a/webui/src/list/Filter.tsx b/webui/src/pages/list/Filter.tsx
similarity index 98%
rename from webui/src/list/Filter.tsx
rename to webui/src/pages/list/Filter.tsx
index 30b52de83e811b6e95dd19c4992d9c4426e26093..0635e7f053b427dcd618071e600259d4fe440837 100644
--- a/webui/src/list/Filter.tsx
+++ b/webui/src/pages/list/Filter.tsx
@@ -1,12 +1,13 @@
+import clsx from 'clsx';
+import { LocationDescriptor } from 'history';
+import React, { useState, useRef } from 'react';
+import { Link } from 'react-router-dom';
+
import Menu from '@material-ui/core/Menu';
import MenuItem from '@material-ui/core/MenuItem';
import { SvgIconProps } from '@material-ui/core/SvgIcon';
import { makeStyles } from '@material-ui/core/styles';
import ArrowDropDown from '@material-ui/icons/ArrowDropDown';
-import clsx from 'clsx';
-import { LocationDescriptor } from 'history';
-import React, { useState, useRef } from 'react';
-import { Link } from 'react-router-dom';
export type Query = { [key: string]: Array };
@@ -153,7 +154,7 @@ function FilterDropdown({
export type FilterProps = {
active: boolean;
- to: LocationDescriptor;
+ to: LocationDescriptor; // the target on click
icon?: React.ComponentType;
children: React.ReactNode;
};
diff --git a/webui/src/list/FilterToolbar.graphql b/webui/src/pages/list/FilterToolbar.graphql
similarity index 100%
rename from webui/src/list/FilterToolbar.graphql
rename to webui/src/pages/list/FilterToolbar.graphql
diff --git a/webui/src/list/FilterToolbar.tsx b/webui/src/pages/list/FilterToolbar.tsx
similarity index 89%
rename from webui/src/list/FilterToolbar.tsx
rename to webui/src/pages/list/FilterToolbar.tsx
index b95b10bc6e16b1dec8e81dbb073ed70dec70590c..c568a9dd31d7a388c13c06fda2c16b051d727d38 100644
--- a/webui/src/list/FilterToolbar.tsx
+++ b/webui/src/pages/list/FilterToolbar.tsx
@@ -1,10 +1,11 @@
import { pipe } from '@arrows/composition';
+import { LocationDescriptor } from 'history';
+import React from 'react';
+
import Toolbar from '@material-ui/core/Toolbar';
import { makeStyles } from '@material-ui/core/styles';
import CheckCircleOutline from '@material-ui/icons/CheckCircleOutline';
import ErrorOutline from '@material-ui/icons/ErrorOutline';
-import { LocationDescriptor } from 'history';
-import React from 'react';
import {
FilterDropdown,
@@ -31,7 +32,7 @@ const useStyles = makeStyles(theme => ({
// This prepends the filter text with a count
type CountingFilterProps = {
- query: string;
+ query: string; // the query used as a source to count the number of element
children: React.ReactNode;
} & FilterProps;
function CountingFilter({ query, children, ...props }: CountingFilterProps) {
@@ -71,6 +72,12 @@ function FilterToolbar({ query, queryLocation }: Props) {
...params,
[key]: [value],
});
+ const toggleParam = (key: string, value: string) => (
+ params: Query
+ ): Query => ({
+ ...params,
+ [key]: params[key] && params[key].includes(value) ? [] : [value],
+ });
const clearParam = (key: string) => (params: Query): Query => ({
...params,
[key]: [],
@@ -86,7 +93,7 @@ function FilterToolbar({ query, queryLocation }: Props) {
clearParam('sort'),
stringify
)(params)}
- to={pipe(replaceParam('status', 'open'), loc)(params)}
+ to={pipe(toggleParam('status', 'open'), loc)(params)}
icon={ErrorOutline}
>
open
@@ -98,7 +105,7 @@ function FilterToolbar({ query, queryLocation }: Props) {
clearParam('sort'),
stringify
)(params)}
- to={pipe(replaceParam('status', 'closed'), loc)(params)}
+ to={pipe(toggleParam('status', 'closed'), loc)(params)}
icon={CheckCircleOutline}
>
closed
diff --git a/webui/src/list/List.tsx b/webui/src/pages/list/List.tsx
similarity index 99%
rename from webui/src/list/List.tsx
rename to webui/src/pages/list/List.tsx
index cebd13f288a7bc619588d249a8f604c8ce0eb454..c1cae1221ac8b5c6722003e626d2900fafe85c98 100644
--- a/webui/src/list/List.tsx
+++ b/webui/src/pages/list/List.tsx
@@ -1,6 +1,7 @@
+import React from 'react';
+
import Table from '@material-ui/core/Table/Table';
import TableBody from '@material-ui/core/TableBody/TableBody';
-import React from 'react';
import BugRow from './BugRow';
import { BugListFragment } from './ListQuery.generated';
diff --git a/webui/src/list/ListQuery.graphql b/webui/src/pages/list/ListQuery.graphql
similarity index 100%
rename from webui/src/list/ListQuery.graphql
rename to webui/src/pages/list/ListQuery.graphql
diff --git a/webui/src/list/ListQuery.tsx b/webui/src/pages/list/ListQuery.tsx
similarity index 99%
rename from webui/src/list/ListQuery.tsx
rename to webui/src/pages/list/ListQuery.tsx
index 84b724317a66646abc052a55c94be243bc45a7ea..2d8c698a59a9ca34719f6246b371b199761bc707 100644
--- a/webui/src/list/ListQuery.tsx
+++ b/webui/src/pages/list/ListQuery.tsx
@@ -1,3 +1,7 @@
+import { ApolloError } from 'apollo-boost';
+import React, { useState, useEffect, useRef } from 'react';
+import { useLocation, useHistory, Link } from 'react-router-dom';
+
import IconButton from '@material-ui/core/IconButton';
import InputBase from '@material-ui/core/InputBase';
import Paper from '@material-ui/core/Paper';
@@ -6,9 +10,6 @@ import ErrorOutline from '@material-ui/icons/ErrorOutline';
import KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';
import KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';
import Skeleton from '@material-ui/lab/Skeleton';
-import { ApolloError } from 'apollo-boost';
-import React, { useState, useEffect, useRef } from 'react';
-import { useLocation, useHistory, Link } from 'react-router-dom';
import FilterToolbar from './FilterToolbar';
import List from './List';
@@ -163,7 +164,7 @@ function ListQuery() {
const location = useLocation();
const history = useHistory();
const params = new URLSearchParams(location.search);
- const query = params.get('q') || '';
+ const query = params.has('q') ? params.get('q') || '' : 'status:open';
const [input, setInput] = useState(query);
diff --git a/webui/src/pages/list/index.ts b/webui/src/pages/list/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8a91ce70c6fd4c1548dac249e96943ba45b00230
--- /dev/null
+++ b/webui/src/pages/list/index.ts
@@ -0,0 +1 @@
+export { default } from './ListQuery';
diff --git a/webui/src/theme.ts b/webui/src/theme.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d41cd731d7e4de4f89536a335e182bebbe52c70e
--- /dev/null
+++ b/webui/src/theme.ts
@@ -0,0 +1,11 @@
+import { createMuiTheme } from '@material-ui/core/styles';
+
+const theme = createMuiTheme({
+ palette: {
+ primary: {
+ main: '#263238',
+ },
+ },
+});
+
+export default theme;
diff --git a/webui/tsconfig.json b/webui/tsconfig.json
index 30ba544ba3d13853bfa0729b345acfa5b6b09d89..4e83eef30419aa46ec2625d7137a831298b387aa 100644
--- a/webui/tsconfig.json
+++ b/webui/tsconfig.json
@@ -1,7 +1,11 @@
{
"compilerOptions": {
"target": "es5",
- "lib": ["dom", "dom.iterable", "esnext"],
+ "lib": [
+ "dom",
+ "dom.iterable",
+ "esnext"
+ ],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
@@ -14,7 +18,13 @@
"isolatedModules": true,
"noEmit": true,
"jsx": "react",
- "typeRoots": ["node_modules/@types/", "types/"]
+ "typeRoots": [
+ "node_modules/@types/",
+ "types/"
+ ],
+ "baseUrl": "."
},
- "include": ["src"]
+ "include": [
+ "src"
+ ]
}