mirror of
https://github.com/datahub-project/datahub.git
synced 2025-12-29 10:57:52 +00:00
Merge pull request #1164 from theseyi/ts-upgrade
integrates os e-c-codecoverage with support for transpiled sources. adds fix for long delay on infinite scroll in chrome
This commit is contained in:
commit
313eaab489
@ -4,9 +4,27 @@ import loadInitializers from 'ember-load-initializers';
|
||||
import config from './config/environment';
|
||||
|
||||
const App = Application.extend({
|
||||
Resolver,
|
||||
|
||||
modulePrefix: config.modulePrefix,
|
||||
|
||||
podModulePrefix: config.podModulePrefix,
|
||||
Resolver
|
||||
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
|
||||
/**
|
||||
* disable touch events in ember's event dispatcher (Chrome scrolling fix)
|
||||
* @type {{touchstart: null, touchmove: null, touchend: null, touchcancel: null}}
|
||||
* @link https://github.com/TryGhost/Ghost-Admin/commit/0affec39320f85c94ab54e85fb8bb4103ef41947
|
||||
*/
|
||||
this.customEvents = {
|
||||
touchstart: null,
|
||||
touchmove: null,
|
||||
touchend: null,
|
||||
touchcancel: null
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
loadInitializers(App, config.modulePrefix);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import Component from '@ember/component';
|
||||
import { IAvatar } from 'wherehows-web/typings/app/avatars';
|
||||
|
||||
export default class extends Component {
|
||||
export default class AvatarMetadata extends Component {
|
||||
tagName: 'span';
|
||||
|
||||
classNames = ['avatar-metadata'];
|
||||
|
||||
@ -3,7 +3,7 @@ import { get } from '@ember/object';
|
||||
import { action } from '@ember-decorators/object';
|
||||
import { Keyboard } from 'wherehows-web/constants/keyboard';
|
||||
|
||||
export default class extends Component {
|
||||
export default class AvatarsDetail extends Component {
|
||||
containerClassNames = ['avatars-detail-modal'];
|
||||
|
||||
/**
|
||||
|
||||
@ -5,7 +5,7 @@ import ComputedProperty from '@ember/object/computed';
|
||||
import { action } from '@ember-decorators/object';
|
||||
import { singularize, pluralize } from 'ember-inflector';
|
||||
|
||||
export default class extends Component {
|
||||
export default class RollupAvatars extends Component {
|
||||
tagName = 'span';
|
||||
|
||||
classNames = ['avatar-rollup'];
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
import Component from '@ember/component';
|
||||
export default class extends Component {}
|
||||
export default class BrowserRail extends Component {}
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
import Component from '@ember/component';
|
||||
export default class extends Component {}
|
||||
export default class BrowserSummary extends Component {}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import Component from '@ember/component';
|
||||
import { action } from '@ember-decorators/object';
|
||||
|
||||
export default class extends Component {
|
||||
export default class BrowserViewport extends Component {
|
||||
/**
|
||||
* Closure action to request more entities
|
||||
*/
|
||||
|
||||
@ -109,7 +109,7 @@ export default class DatasetCompliance extends Component {
|
||||
platform: IDatasetView['platform'];
|
||||
isCompliancePolicyAvailable: boolean = false;
|
||||
showAllDatasetMemberData: boolean;
|
||||
complianceInfo: void | IComplianceInfo;
|
||||
complianceInfo: undefined | IComplianceInfo;
|
||||
|
||||
/**
|
||||
* References the ComplianceFieldIdValue enum
|
||||
|
||||
@ -28,7 +28,7 @@ export default class DatasetSchema extends Component {
|
||||
* List of schema properties for the dataset
|
||||
* @type {IDatasetColumnWithHtmlComments | IDatasetColumn}
|
||||
*/
|
||||
schemas: Array<IDatasetColumnWithHtmlComments | IDatasetColumn>;
|
||||
schemas: Array<IDatasetColumnWithHtmlComments | IDatasetColumn> = [];
|
||||
|
||||
/**
|
||||
* Reference to the jsonViewer dom element
|
||||
@ -65,7 +65,7 @@ export default class DatasetSchema extends Component {
|
||||
/**
|
||||
* Builds or rebuild the dataset schema / json view based on a flag to toggle this behaviour
|
||||
*/
|
||||
buildView() {
|
||||
buildView(this: DatasetSchema) {
|
||||
if (get(this, 'isTable')) {
|
||||
const jsonTable = get(this, 'jsonTable');
|
||||
jsonTable && this.buildTableView(jsonTable);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import Component from '@ember/component';
|
||||
|
||||
export default class extends Component {
|
||||
export default class DatasetTableRow extends Component {
|
||||
tagName = 'tr';
|
||||
}
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
import Component from '@ember/component';
|
||||
export default class extends Component {}
|
||||
export default class DatasetActions extends Component {}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import Component from '@ember/component';
|
||||
|
||||
export default class extends Component {
|
||||
export default class UpstreamDataset extends Component {
|
||||
tagName = 'section';
|
||||
|
||||
classNames = ['upstream-dataset-banner'];
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import Component from '@ember/component';
|
||||
|
||||
export default class extends Component {
|
||||
export default class UpstreamOwners extends Component {
|
||||
tagName = 'section';
|
||||
|
||||
classNames = ['upstream-owners-banner'];
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import TextField from '@ember/component/text-field';
|
||||
|
||||
export default class extends TextField {
|
||||
export default class DisableBubbleInput extends TextField {
|
||||
/**
|
||||
* Prevents click event bubbling
|
||||
*/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import Component from '@ember/component';
|
||||
|
||||
export default class extends Component {
|
||||
export default class PendulumEllipsisAnimation extends Component {
|
||||
classNames = ['ellipsis-loader'];
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ export default class PurgePolicyComponent extends Component {
|
||||
this.requestExemptionReason || (this.requestExemptionReason = false);
|
||||
}
|
||||
|
||||
didReceiveAttrs(this: PurgePolicyComponent) {
|
||||
didReceiveAttrs() {
|
||||
this._super(...arguments);
|
||||
this.checkExemption(get(this, 'purgePolicy'));
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import Component from '@ember/component';
|
||||
|
||||
export default class extends Component {
|
||||
export default class FilterRail extends Component {
|
||||
tagName = 'ul';
|
||||
|
||||
classNames = ['nacho-filter-rail'];
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import Component from '@ember/component';
|
||||
|
||||
export default class extends Component {
|
||||
export default class LinkGroup extends Component {
|
||||
tagName = 'li';
|
||||
|
||||
classNames = ['nacho-filter-card'];
|
||||
|
||||
13
wherehows-web/app/config/environment.d.ts
vendored
13
wherehows-web/app/config/environment.d.ts
vendored
@ -7,9 +7,10 @@ export default config;
|
||||
* For now these need to be managed by the developer
|
||||
* since different ember addons can materialize new entries.
|
||||
*/
|
||||
declare namespace config {
|
||||
export const environment: any;
|
||||
export const modulePrefix: string;
|
||||
export const podModulePrefix: string;
|
||||
export const locationType: string;
|
||||
}
|
||||
declare const config: {
|
||||
environment: any;
|
||||
modulePrefix: string;
|
||||
podModulePrefix: string;
|
||||
locationType: string;
|
||||
rootURL: string;
|
||||
};
|
||||
|
||||
@ -4,7 +4,7 @@ import { IBrowserRouteParams } from 'wherehows-web/routes/browse/entity';
|
||||
/**
|
||||
* Handles query params for browse.entity route
|
||||
*/
|
||||
export default class extends Controller implements IBrowserRouteParams {
|
||||
export default class BrowseEntity extends Controller implements IBrowserRouteParams {
|
||||
queryParams = ['page', 'prefix', 'size', 'platform'];
|
||||
|
||||
entity: IBrowserRouteParams['entity'];
|
||||
|
||||
@ -2,10 +2,12 @@ import Route from '@ember/routing/route';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
import Ember from 'ember'; // type import, no emit
|
||||
|
||||
export default class extends Route.extend(AuthenticatedRouteMixin) {
|
||||
export default class Browse extends Route.extend(AuthenticatedRouteMixin) {
|
||||
afterModel(_model: any, transition: Ember.Transition) {
|
||||
// Extract the entity being viewed from the transition state
|
||||
const { params: { 'browse.entity': { entity = 'datasets' } = {} } } = transition;
|
||||
const {
|
||||
params: { 'browse.entity': { entity = 'datasets' } = {} }
|
||||
} = transition;
|
||||
|
||||
// transition to entity specific sub route
|
||||
this.transitionTo('browse.entity', entity);
|
||||
|
||||
@ -19,7 +19,7 @@ export interface IBrowserRouteParams {
|
||||
prefix: string;
|
||||
}
|
||||
|
||||
export default class extends Route.extend(AuthenticatedRouteMixin) {
|
||||
export default class BrowseEntity extends Route.extend(AuthenticatedRouteMixin) {
|
||||
queryParams = refreshModelQueryParams(queryParamsKeys);
|
||||
|
||||
setupController(controller: EntityController, model: IBrowserRouteParams) {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import Route from '@ember/routing/route';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
|
||||
export default class extends Route.extend(AuthenticatedRouteMixin) {}
|
||||
export default class Datasets extends Route.extend(AuthenticatedRouteMixin) {}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import Route from '@ember/routing/route';
|
||||
|
||||
export default class extends Route {
|
||||
export default class DatasetsIndex extends Route {
|
||||
redirect() {
|
||||
// default transition to datasets route if user enters through index
|
||||
return this.transitionTo('browse.entity', 'datasets');
|
||||
|
||||
@ -12,15 +12,18 @@ import Session from 'ember-simple-auth/services/session';
|
||||
*/
|
||||
let _hasUserBeenTracked = false;
|
||||
|
||||
export default class extends Service.extend({
|
||||
export default class CurrentUser extends Service {
|
||||
/**
|
||||
* Reference to the application session service, implemented with Ember Simple Auth
|
||||
* @type {ComputedProperty<Session>}
|
||||
* @return {Service}
|
||||
*/
|
||||
session: <ComputedProperty<Session>>inject(),
|
||||
session: ComputedProperty<Session> = inject();
|
||||
|
||||
currentUser: <IUser>{},
|
||||
/**
|
||||
* Current user properties
|
||||
* @type {IUser}
|
||||
*/
|
||||
currentUser = <IUser>{};
|
||||
|
||||
/**
|
||||
* Attempt to load the currently logged in user.
|
||||
@ -29,24 +32,26 @@ export default class extends Service.extend({
|
||||
* to service.
|
||||
* @returns {Promise}
|
||||
*/
|
||||
async load(): Promise<void> {
|
||||
async load(this: CurrentUser): Promise<void> {
|
||||
const session = get(this, 'session');
|
||||
// If we have a valid session, get the currently logged in user, and set the currentUser attribute,
|
||||
// otherwise raise an exception
|
||||
if (get(this, 'session').get('isAuthenticated')) {
|
||||
if (session.isAuthenticated) {
|
||||
const user: IUser = await currentUser();
|
||||
set(this, 'currentUser', user);
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidates the current session if the session is currently valid
|
||||
* useful if, for example, the server is no able to provide the currently logged in user
|
||||
* @return {any | Promise<void>}
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
invalidateSession() {
|
||||
const sessionService = get(this, 'session');
|
||||
return get(sessionService, 'isAuthenticated') && sessionService.invalidate();
|
||||
},
|
||||
invalidateSession(this: CurrentUser): Promise<void> {
|
||||
const session = get(this, 'session');
|
||||
|
||||
return session.isAuthenticated ? session.invalidate() : Promise.resolve();
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the provided tracking function to track the currently logged in user's userId
|
||||
@ -66,4 +71,4 @@ export default class extends Service.extend({
|
||||
_hasUserBeenTracked = true;
|
||||
}
|
||||
}
|
||||
}) {}
|
||||
}
|
||||
|
||||
@ -24,6 +24,8 @@
|
||||
|
||||
.ivy-tabs-tabpanel[role='tabpanel'] {
|
||||
display: block;
|
||||
outline: none;
|
||||
|
||||
&[aria-hidden='true'] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
1
wherehows-web/app/typings/global-plugin.d.ts
vendored
1
wherehows-web/app/typings/global-plugin.d.ts
vendored
@ -2,5 +2,6 @@ import Ember from 'ember';
|
||||
|
||||
// opt-in to allow types for Ember Array Prototype extensions
|
||||
declare global {
|
||||
// eslint-disable-next-line typescript/no-empty-interface, typescript/interface-name-prefix
|
||||
interface Array<T> extends Ember.ArrayPrototypeExtensions<T> {}
|
||||
}
|
||||
|
||||
@ -7,7 +7,6 @@ module.exports = {
|
||||
'babel-plugin-transform-object-rest-spread',
|
||||
'babel-plugin-transform-class-properties'
|
||||
],
|
||||
includeTranspiledSources: ['ts'],
|
||||
reporters: ['lcov', 'html', 'json'],
|
||||
excludes: ['*/mirage/**/*', '*/tests/**/*', '*/config/**/*', '*/public/**/*', '*/vendor/**/*', '*/app/actions/**']
|
||||
};
|
||||
|
||||
@ -20,32 +20,35 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ember-decorators/babel-transforms": "^2.0.1",
|
||||
"@types/ember": "^2.8.7",
|
||||
"@types/ember": "^2.8.22",
|
||||
"@types/ember-qunit": "^3.0.2",
|
||||
"@types/ember-test-helpers": "^0.7.1",
|
||||
"@types/ember-testing-helpers": "^0.0.3",
|
||||
"@types/lodash": "^4.14.83",
|
||||
"@types/rsvp": "^4.0.0",
|
||||
"@zestia/ember-simple-infinite-scroller": "^1.0.20",
|
||||
"@types/qunit": "^2.5.0",
|
||||
"@types/rsvp": "^4.0.1",
|
||||
"@zestia/ember-simple-infinite-scroller": "^2.0.2",
|
||||
"babel-plugin-transform-async-to-generator": "^6.24.1",
|
||||
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||
"babel-plugin-transform-es2015-destructuring": "^6.23.0",
|
||||
"babel-plugin-transform-es2015-parameters": "^6.24.1",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.26.0",
|
||||
"bower": "^1.8.2",
|
||||
"broccoli-asset-rev": "^2.4.5",
|
||||
"broccoli-asset-rev": "^2.7.0",
|
||||
"broccoli-funnel": "^2.0.1",
|
||||
"broccoli-merge-trees": "^2.0.0",
|
||||
"broccoli-merge-trees": "^3.0.0",
|
||||
"codecov": "^3.0.0",
|
||||
"ember-ajax": "^3.0.0",
|
||||
"ember-basic-dropdown": "^1.0.0",
|
||||
"ember-cli": "~2.18.0",
|
||||
"ember-cli-app-version": "^3.0.0",
|
||||
"ember-cli-babel": "^6.6.0",
|
||||
"ember-cli-babel": "^6.12.0",
|
||||
"ember-cli-bootstrap-sassy": "^0.5.8",
|
||||
"ember-cli-code-coverage": "theseyi/ember-cli-code-coverage",
|
||||
"ember-cli-code-coverage": "^1.0.0-beta.4",
|
||||
"ember-cli-dependency-checker": "^2.0.0",
|
||||
"ember-cli-dependency-lint": "^1.0.3",
|
||||
"ember-cli-eslint": "^4.2.1",
|
||||
"ember-cli-eyeglass": "^3.3.1",
|
||||
"ember-cli-eyeglass": "^5.0.0",
|
||||
"ember-cli-htmlbars": "^2.0.1",
|
||||
"ember-cli-htmlbars-inline-precompile": "^1.0.0",
|
||||
"ember-cli-inject-live-reload": "^1.4.1",
|
||||
@ -54,7 +57,7 @@
|
||||
"ember-cli-qunit": "^4.1.1",
|
||||
"ember-cli-shims": "^1.1.0",
|
||||
"ember-cli-sri": "^2.1.0",
|
||||
"ember-cli-typescript": "^1.0.6",
|
||||
"ember-cli-typescript": "1.1.5",
|
||||
"ember-cli-uglify": "^2.0.0",
|
||||
"ember-composable-helpers": "^2.1.0",
|
||||
"ember-concurrency": "^0.8.15",
|
||||
@ -67,7 +70,6 @@
|
||||
"ember-math-helpers": "^2.4.0",
|
||||
"ember-metrics": "^0.12.1",
|
||||
"ember-native-dom-helpers": "^0.5.10",
|
||||
"ember-pikaday": "^2.2.4",
|
||||
"ember-power-calendar": "^0.7.1",
|
||||
"ember-power-select-typeahead": "^0.7.0",
|
||||
"ember-redux-shim": "^1.1.1",
|
||||
@ -86,13 +88,13 @@
|
||||
"eyeglass-restyle": "^1.1.0",
|
||||
"husky": "^0.14.3",
|
||||
"ivy-tabs": "^3.1.0",
|
||||
"lint-staged": "^6.0.1",
|
||||
"lint-staged": "^7.1.0",
|
||||
"loader.js": "^4.2.3",
|
||||
"node-sass": "^4.7.2",
|
||||
"prettier": "^1.10.2",
|
||||
"redux": "^3.6.0",
|
||||
"redux-thunk": "^2.2.0",
|
||||
"typescript": "^2.6.2"
|
||||
"typescript": "^2.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"dynamic-link": "^0.2.3",
|
||||
|
||||
5
wherehows-web/tests/.eslintrc.js
Normal file
5
wherehows-web/tests/.eslintrc.js
Normal file
@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
embertest: true
|
||||
}
|
||||
};
|
||||
@ -1,14 +1,16 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2015",
|
||||
"target": "es2017",
|
||||
"lib": ["es2017.object", "es2016", "dom", "dom.iterable", "scripthost"],
|
||||
"listEmittedFiles": true,
|
||||
"moduleResolution": "node",
|
||||
"allowJs": true,
|
||||
"baseUrl": ".",
|
||||
"sourceMap": true,
|
||||
"inlineSourceMap": true,
|
||||
"inlineSources": true,
|
||||
"module": "es6",
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noEmit": true,
|
||||
"noEmitOnError": true,
|
||||
"noImplicitThis": true,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user