Unverified Commit 319d7fe8 authored by Marcos Iglesias's avatar Marcos Iglesias Committed by GitHub

refactor: Moves pages into its own folder (#624)

* Announcements, Dashboard, NotFound and Search pages into the pages folder
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Browse, Home, Preferences, and profile pages
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* TableDetail into pages folder
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Renames TableDetail into TableDetailPage
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Fixing some strict null issues
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Update betterer results
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Updates types, adds npm run check and updates stylelint rules due to prettier bug
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Updates betterer results
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Updates test coverage configuration and webpack setup for sourcemaps
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Style linting
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>

* Giving more buffer for test coverage
Signed-off-by: 's avatarMarcos Iglesias <miglesiasvalle@lyft.com>
parent 5ae93eb4
...@@ -7,10 +7,16 @@ module.exports = { ...@@ -7,10 +7,16 @@ module.exports = {
statements: 90, statements: 90,
}, },
'./js/components': { './js/components': {
branches: 60, // 75 branches: 67, // 75
functions: 65, // 75 functions: 67, // 75
lines: 65, // 75 lines: 75, // 75
statements: 70, // 75 statements: 75, // 75
},
'./js/pages': {
branches: 65, // 75
functions: 72, // 75
lines: 81, // 75
statements: 78, // 75
}, },
'./js/ducks': { './js/ducks': {
branches: 75, branches: 75,
...@@ -33,6 +39,7 @@ module.exports = { ...@@ -33,6 +39,7 @@ module.exports = {
}, },
testRegex: '(test|spec)\\.(j|t)sx?$', testRegex: '(test|spec)\\.(j|t)sx?$',
moduleDirectories: ['node_modules', 'js'], moduleDirectories: ['node_modules', 'js'],
coveragePathIgnorePatterns: ['stories/*', 'constants.ts'],
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
moduleNameMapper: { moduleNameMapper: {
'^.+\\.(css|scss)$': '<rootDir>/node_modules/jest-css-modules', '^.+\\.(css|scss)$': '<rootDir>/node_modules/jest-css-modules',
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
import * as React from 'react'; import * as React from 'react';
import { Button, Panel } from 'react-bootstrap';
import BugReportFeedbackForm from './FeedbackForm/BugReportFeedbackForm'; import BugReportFeedbackForm from './FeedbackForm/BugReportFeedbackForm';
import RatingFeedbackForm from './FeedbackForm/RatingFeedbackForm'; import RatingFeedbackForm from './FeedbackForm/RatingFeedbackForm';
import RequestFeedbackForm from './FeedbackForm/RequestFeedbackForm'; import RequestFeedbackForm from './FeedbackForm/RequestFeedbackForm';
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
import * as React from 'react'; import * as React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Modal } from 'react-bootstrap';
import AppConfig from 'config/config'; import AppConfig from 'config/config';
import AvatarLabel, { AvatarLabelProps } from 'components/common/AvatarLabel'; import AvatarLabel, { AvatarLabelProps } from 'components/common/AvatarLabel';
import LoadingSpinner from 'components/common/LoadingSpinner'; import LoadingSpinner from 'components/common/LoadingSpinner';
import { Modal } from 'react-bootstrap';
import { ResourceType, UpdateMethod, UpdateOwnerPayload } from 'interfaces'; import { ResourceType, UpdateMethod, UpdateOwnerPayload } from 'interfaces';
// TODO: Use css-modules instead of 'import' // TODO: Use css-modules instead of 'import'
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
import * as React from 'react'; import * as React from 'react';
import { OverlayTrigger, Popover } from 'react-bootstrap'; import { OverlayTrigger, Popover } from 'react-bootstrap';
import './styles.scss'; import './styles.scss';
export interface SchemaInfoProps { export interface SchemaInfoProps {
......
...@@ -6,8 +6,6 @@ import * as Avatar from 'react-avatar'; ...@@ -6,8 +6,6 @@ import * as Avatar from 'react-avatar';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { UserResource } from 'interfaces'; import { UserResource } from 'interfaces';
import Flag from 'components/common/Flag';
import { BadgeStyle } from 'config/config-types';
import { LoggingParams } from '../types'; import { LoggingParams } from '../types';
export interface UserListItemProps { export interface UserListItemProps {
......
...@@ -8,9 +8,6 @@ $shimmer-loader-items: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14; ...@@ -8,9 +8,6 @@ $shimmer-loader-items: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14;
$shimmer-loader-tag-max-width: 130; $shimmer-loader-tag-max-width: 130;
$shimmer-loader-tag-min-width: 50; $shimmer-loader-tag-min-width: 50;
.shimmer-tag-list-loader {
}
.shimmer-tag-loader-item { .shimmer-tag-loader-item {
margin: 0 $spacer-1 $spacer-1 0; margin: 0 $spacer-1 $spacer-1 0;
height: $shimmer-loader-tag-height; height: $shimmer-loader-tag-height;
......
...@@ -13,10 +13,10 @@ export interface TabsProps { ...@@ -13,10 +13,10 @@ export interface TabsProps {
onSelect?: (key: string) => void; onSelect?: (key: string) => void;
} }
interface TabInfo { export interface TabInfo {
content: JSX.Element; content: JSX.Element;
key: string; key: string;
title: string; title: string | JSX.Element;
} }
const TabsComponent: React.FC<TabsProps> = ({ const TabsComponent: React.FC<TabsProps> = ({
......
import axios, { AxiosResponse } from 'axios'; import axios, { AxiosResponse } from 'axios';
import * as qs from 'simple-query-string'; import * as qs from 'simple-query-string';
import { QueryResource, ResourceType } from 'interfaces/Resources'; import { ResourceType } from 'interfaces/Resources';
import { DashboardMetadata } from 'interfaces/Dashboard'; import { DashboardMetadata } from 'interfaces/Dashboard';
export type GetDashboardAPI = { export type GetDashboardAPI = {
......
...@@ -6,26 +6,26 @@ import 'core-js/stable'; ...@@ -6,26 +6,26 @@ import 'core-js/stable';
import * as React from 'react'; import * as React from 'react';
import * as ReactDOM from 'react-dom'; import * as ReactDOM from 'react-dom';
import * as ReduxPromise from 'redux-promise'; import * as ReduxPromise from 'redux-promise';
import createSagaMiddleware from 'redux-saga'; import createSagaMiddleware from 'redux-saga';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux'; import { createStore, applyMiddleware } from 'redux';
import { Router, Route, Switch } from 'react-router-dom'; import { Router, Route, Switch } from 'react-router-dom';
import DocumentTitle from 'react-document-title'; import DocumentTitle from 'react-document-title';
import DashboardPage from 'components/DashboardPage';
import Preloader from 'components/common/Preloader';
import { BrowserHistory } from 'utils/navigationUtils'; import { BrowserHistory } from 'utils/navigationUtils';
import AnnouncementPage from './components/AnnouncementPage';
import BrowsePage from './components/BrowsePage'; import DashboardPage from './pages/DashboardPage';
import AnnouncementPage from './pages/AnnouncementPage';
import BrowsePage from './pages/BrowsePage';
import HomePage from './pages/HomePage';
import NotFoundPage from './pages/NotFoundPage';
import SearchPage from './pages/SearchPage';
import ProfilePage from './pages/ProfilePage';
import TableDetail from './pages/TableDetailPage';
import Preloader from './components/common/Preloader';
import Footer from './components/Footer'; import Footer from './components/Footer';
import HomePage from './components/HomePage';
import NavBar from './components/NavBar'; import NavBar from './components/NavBar';
import NotFoundPage from './components/NotFoundPage';
import ProfilePage from './components/ProfilePage';
import SearchPage from './components/SearchPage';
import TableDetail from './components/TableDetail';
import rootReducer from './ducks/rootReducer'; import rootReducer from './ducks/rootReducer';
import rootSaga from './ducks/rootSaga'; import rootSaga from './ducks/rootSaga';
......
...@@ -44,5 +44,5 @@ export const mapStateToProps = (state: GlobalState) => { ...@@ -44,5 +44,5 @@ export const mapStateToProps = (state: GlobalState) => {
export default connect<StateFromProps, {}, ComponentProps>( export default connect<StateFromProps, {}, ComponentProps>(
mapStateToProps, mapStateToProps,
null {}
)(OwnerEditor); )(OwnerEditor);
...@@ -16,21 +16,9 @@ import Breadcrumb from 'components/common/Breadcrumb'; ...@@ -16,21 +16,9 @@ import Breadcrumb from 'components/common/Breadcrumb';
import BookmarkIcon from 'components/common/Bookmark/BookmarkIcon'; import BookmarkIcon from 'components/common/Bookmark/BookmarkIcon';
import EditableSection from 'components/common/EditableSection'; import EditableSection from 'components/common/EditableSection';
import LoadingSpinner from 'components/common/LoadingSpinner'; import LoadingSpinner from 'components/common/LoadingSpinner';
import TabsComponent from 'components/common/TabsComponent'; import TabsComponent, { TabInfo } from 'components/common/TabsComponent';
import DashboardOwnerEditor from 'components/DashboardPage/DashboardOwnerEditor';
import QueryList from 'components/DashboardPage/QueryList';
import ChartList from 'components/DashboardPage/ChartList';
import ResourceStatusMarker from 'components/common/ResourceStatusMarker'; import ResourceStatusMarker from 'components/common/ResourceStatusMarker';
import ResourceList from 'components/common/ResourceList'; import ResourceList from 'components/common/ResourceList';
import {
ADD_DESC_TEXT,
EDIT_DESC_TEXT,
OWNER_HEADER_TEXT,
DASHBOARD_SOURCE,
TABLES_PER_PAGE,
LAST_RUN_SUCCEEDED,
STATUS_TEXT,
} from 'components/DashboardPage/constants';
import TagInput from 'components/common/Tags/TagInput'; import TagInput from 'components/common/Tags/TagInput';
import { NO_TIMESTAMP_TEXT } from 'components/constants'; import { NO_TIMESTAMP_TEXT } from 'components/constants';
...@@ -40,6 +28,18 @@ import { getLoggingParams } from 'utils/logUtils'; ...@@ -40,6 +28,18 @@ import { getLoggingParams } from 'utils/logUtils';
import { ResourceType } from 'interfaces'; import { ResourceType } from 'interfaces';
import { DashboardMetadata } from 'interfaces/Dashboard'; import { DashboardMetadata } from 'interfaces/Dashboard';
import {
ADD_DESC_TEXT,
EDIT_DESC_TEXT,
OWNER_HEADER_TEXT,
DASHBOARD_SOURCE,
TABLES_PER_PAGE,
LAST_RUN_SUCCEEDED,
STATUS_TEXT,
} from './constants';
import ChartList from './ChartList';
import QueryList from './QueryList';
import DashboardOwnerEditor from './DashboardOwnerEditor';
import ImagePreview from './ImagePreview'; import ImagePreview from './ImagePreview';
...@@ -49,12 +49,6 @@ interface DashboardPageState { ...@@ -49,12 +49,6 @@ interface DashboardPageState {
uri: string; uri: string;
} }
type TabInfo = {
content: JSX.Element;
key: string;
title: string;
};
export interface StateFromProps { export interface StateFromProps {
isLoading: boolean; isLoading: boolean;
statusCode: number; statusCode: number;
......
...@@ -5,11 +5,6 @@ import * as React from 'react'; ...@@ -5,11 +5,6 @@ import * as React from 'react';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import {
DASHBOARD_RESOURCE_TITLE,
TABLE_RESOURCE_TITLE,
USER_RESOURCE_TITLE,
} from 'components/SearchPage/constants';
import { indexDashboardsEnabled, indexUsersEnabled } from 'config/config-utils'; import { indexDashboardsEnabled, indexUsersEnabled } from 'config/config-utils';
import { GlobalState } from 'ducks/rootReducer'; import { GlobalState } from 'ducks/rootReducer';
import { updateSearchState } from 'ducks/search/reducer'; import { updateSearchState } from 'ducks/search/reducer';
...@@ -20,6 +15,11 @@ import { ...@@ -20,6 +15,11 @@ import {
UserSearchResults, UserSearchResults,
} from 'ducks/search/types'; } from 'ducks/search/types';
import { ResourceType } from 'interfaces/Resources'; import { ResourceType } from 'interfaces/Resources';
import {
DASHBOARD_RESOURCE_TITLE,
TABLE_RESOURCE_TITLE,
USER_RESOURCE_TITLE,
} from '../constants';
const RESOURCE_SELECTOR_TITLE = 'Resource'; const RESOURCE_SELECTOR_TITLE = 'Resource';
......
...@@ -9,9 +9,9 @@ import { shallow } from 'enzyme'; ...@@ -9,9 +9,9 @@ import { shallow } from 'enzyme';
import { ResourceType } from 'interfaces'; import { ResourceType } from 'interfaces';
import ResourceSelector from 'components/SearchPage/ResourceSelector'; import ResourceSelector from 'pages/SearchPage/ResourceSelector';
import SearchFilter from 'components/SearchPage/SearchFilter'; import SearchFilter from 'pages/SearchPage/SearchFilter';
import SearchPanel from 'components/SearchPage/SearchPanel'; import SearchPanel from 'pages/SearchPage/SearchPanel';
import PaginatedApiResourceList from 'components/common/ResourceList/PaginatedApiResourceList'; import PaginatedApiResourceList from 'components/common/ResourceList/PaginatedApiResourceList';
import globalState from 'fixtures/globalState'; import globalState from 'fixtures/globalState';
......
...@@ -8,7 +8,6 @@ import * as DocumentTitle from 'react-document-title'; ...@@ -8,7 +8,6 @@ import * as DocumentTitle from 'react-document-title';
import { RouteComponentProps } from 'react-router'; import { RouteComponentProps } from 'react-router';
import { Search as UrlSearch } from 'history'; import { Search as UrlSearch } from 'history';
import LoadingSpinner from 'components/common/LoadingSpinner';
import PaginatedApiResourceList from 'components/common/ResourceList/PaginatedApiResourceList'; import PaginatedApiResourceList from 'components/common/ResourceList/PaginatedApiResourceList';
import ShimmeringResourceLoader from 'components/common/ShimmeringResourceLoader'; import ShimmeringResourceLoader from 'components/common/ShimmeringResourceLoader';
......
...@@ -32,6 +32,7 @@ $modal-dialog-width: 418px; ...@@ -32,6 +32,7 @@ $modal-dialog-width: 418px;
height: calc(#{$modal-dialog-height - $modal-header-height - $spacer-3}); height: calc(#{$modal-dialog-height - $modal-header-height - $spacer-3});
font-family: $font-family-monospace-code; font-family: $font-family-monospace-code;
font-size: $code-font-size; font-size: $code-font-size;
/* Override react-bootstrap styles to match design */ /* Override react-bootstrap styles to match design */
margin: 0 $spacer-3 !important; margin: 0 $spacer-3 !important;
padding: $spacer-1 0 !important; padding: $spacer-1 0 !important;
...@@ -51,14 +52,17 @@ $modal-dialog-width: 418px; ...@@ -51,14 +52,17 @@ $modal-dialog-width: 418px;
.modal-header { .modal-header {
border-bottom: none; border-bottom: none;
height: $modal-header-height; height: $modal-header-height;
/* Override react-bootstrap styles to match design */ /* Override react-bootstrap styles to match design */
padding: $spacer-3 !important; padding: $spacer-3 !important;
.main-title { .main-title {
@extend %text-title-w1; @extend %text-title-w1;
} }
.sub-title { .sub-title {
@extend %text-subtitle-w3; @extend %text-subtitle-w3;
color: $text-secondary; color: $text-secondary;
} }
} }
...@@ -72,13 +76,15 @@ $modal-dialog-width: 418px; ...@@ -72,13 +76,15 @@ $modal-dialog-width: 418px;
text-align: center; text-align: center;
padding: 0 !important; padding: 0 !important;
} }
.modal:before {
.modal::before {
content: ''; content: '';
display: inline-block; display: inline-block;
height: 100%; height: 100%;
vertical-align: middle; vertical-align: middle;
margin-right: -4px; margin-right: -4px;
} }
.modal-dialog { .modal-dialog {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
......
...@@ -4,17 +4,13 @@ ...@@ -4,17 +4,13 @@
import * as React from 'react'; import * as React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import ColumnDescEditableText from 'components/TableDetail/ColumnDescEditableText';
import {
ColumnListItem,
ColumnListItemProps,
mapDispatchToProps,
} from 'components/TableDetail/ColumnListItem';
import EditableSection from 'components/common/EditableSection';
import ColumnStats from 'components/TableDetail/ColumnStats';
import AppConfig from 'config/config'; import AppConfig from 'config/config';
import EditableSection from 'components/common/EditableSection';
import * as UtilMethods from 'ducks/utilMethods'; import * as UtilMethods from 'ducks/utilMethods';
import { RequestMetadataType } from 'interfaces/Notifications'; import { RequestMetadataType } from 'interfaces/Notifications';
import ColumnStats from '../ColumnStats';
import ColumnDescEditableText from '../ColumnDescEditableText';
import { ColumnListItem, ColumnListItemProps, mapDispatchToProps } from '.';
import ColumnType from './ColumnType'; import ColumnType from './ColumnType';
......
...@@ -6,8 +6,6 @@ import { Dropdown, MenuItem } from 'react-bootstrap'; ...@@ -6,8 +6,6 @@ import { Dropdown, MenuItem } from 'react-bootstrap';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import ColumnDescEditableText from 'components/TableDetail/ColumnDescEditableText';
import ColumnStats from 'components/TableDetail/ColumnStats';
import { notificationsEnabled, getMaxLength } from 'config/config-utils'; import { notificationsEnabled, getMaxLength } from 'config/config-utils';
import { openRequestDescriptionDialog } from 'ducks/notification/reducer'; import { openRequestDescriptionDialog } from 'ducks/notification/reducer';
import { OpenRequestAction } from 'ducks/notification/types'; import { OpenRequestAction } from 'ducks/notification/types';
...@@ -16,6 +14,8 @@ import { RequestMetadataType, TableColumn } from 'interfaces'; ...@@ -16,6 +14,8 @@ import { RequestMetadataType, TableColumn } from 'interfaces';
import './styles.scss'; import './styles.scss';
import EditableSection from 'components/common/EditableSection'; import EditableSection from 'components/common/EditableSection';
import ColumnStats from '../ColumnStats';
import ColumnDescEditableText from '../ColumnDescEditableText';
import ColumnType from './ColumnType'; import ColumnType from './ColumnType';
const MORE_BUTTON_TEXT = 'More options'; const MORE_BUTTON_TEXT = 'More options';
......
...@@ -3,11 +3,13 @@ ...@@ -3,11 +3,13 @@
import * as React from 'react'; import * as React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import * as ConfigUtils from 'config/config-utils'; import * as ConfigUtils from 'config/config-utils';
import ExploreButton from 'components/TableDetail/ExploreButton';
import { TableMetadata } from 'interfaces/TableMetadata'; import { TableMetadata } from 'interfaces/TableMetadata';
import { logClick } from 'ducks/utilMethods'; import { logClick } from 'ducks/utilMethods';
import ExploreButton from '.';
let mockExploreEnabled = true; let mockExploreEnabled = true;
let mockExploreUrl = 'https://test-website.com'; let mockExploreUrl = 'https://test-website.com';
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment