Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove injectI18n in dashboard plugin. #44580

Merged
merged 6 commits into from
Sep 5, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,10 @@

import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { injectI18n, FormattedMessage } from '@kbn/i18n/react';
import { FormattedMessage } from '@kbn/i18n/react';
import { i18n } from '@kbn/i18n';

import {
EuiLink,
EuiButton,
EuiEmptyPrompt,
} from '@elastic/eui';
import { EuiLink, EuiButton, EuiEmptyPrompt } from '@elastic/eui';

import { TableListView } from './../../table_list_view';

Expand All @@ -37,8 +33,7 @@ export const EMPTY_FILTER = '';
// and not supporting server-side paging.
// This component does not try to tackle these problems (yet) and is just feature matching the legacy component
// TODO support server side sorting/paging once title and description are sortable on the server.
class DashboardListingUi extends React.Component {

export class DashboardListing extends React.Component {
constructor(props) {
super(props);
}
Expand All @@ -54,21 +49,15 @@ class DashboardListingUi extends React.Component {
listingLimit={this.props.listingLimit}
initialFilter={this.props.initialFilter}
noItemsFragment={this.getNoItemsMessage()}
entityName={
i18n.translate('kbn.dashboard.listing.table.entityName', {
defaultMessage: 'dashboard'
})
}
entityNamePlural={
i18n.translate('kbn.dashboard.listing.table.entityNamePlural', {
defaultMessage: 'dashboards'
})
}
tableListTitle={
i18n.translate('kbn.dashboard.listing.dashboardsTitle', {
defaultMessage: 'Dashboards'
})
}
entityName={i18n.translate('kbn.dashboard.listing.table.entityName', {
defaultMessage: 'dashboard',
})}
entityNamePlural={i18n.translate('kbn.dashboard.listing.table.entityNamePlural', {
defaultMessage: 'dashboards',
})}
tableListTitle={i18n.translate('kbn.dashboard.listing.dashboardsTitle', {
defaultMessage: 'Dashboards',
})}
/>
);
}
Expand Down Expand Up @@ -146,15 +135,14 @@ class DashboardListingUi extends React.Component {
/>
</div>
);

}

getTableColumns() {
const tableColumns = [
{
field: 'title',
name: i18n.translate('kbn.dashboard.listing.table.titleColumnName', {
defaultMessage: 'Title'
defaultMessage: 'Title',
}),
sortable: true,
render: (field, record) => (
Expand All @@ -164,22 +152,22 @@ class DashboardListingUi extends React.Component {
>
{field}
</EuiLink>
)
),
},
{
field: 'description',
name: i18n.translate('kbn.dashboard.listing.table.descriptionColumnName', {
defaultMessage: 'Description'
defaultMessage: 'Description',
}),
dataType: 'string',
sortable: true,
}
},
];
return tableColumns;
}
}

DashboardListingUi.propTypes = {
DashboardListing.propTypes = {
createItem: PropTypes.func.isRequired,
findItems: PropTypes.func.isRequired,
deleteItems: PropTypes.func.isRequired,
Expand All @@ -190,8 +178,6 @@ DashboardListingUi.propTypes = {
initialFilter: PropTypes.string,
};

DashboardListingUi.defaultProps = {
DashboardListing.defaultProps = {
initialFilter: EMPTY_FILTER,
};

export const DashboardListing = injectI18n(DashboardListingUi);
Original file line number Diff line number Diff line change
Expand Up @@ -17,72 +17,80 @@
* under the License.
*/

jest.mock('ui/notify',
jest.mock(
'ui/notify',
() => ({
toastNotifications: {
addWarning: () => {},
}
}), { virtual: true });
},
}),
{ virtual: true }
);

jest.mock('lodash',
jest.mock(
'lodash',
() => ({
...require.requireActual('lodash'),
// mock debounce to fire immediately with no internal timer
debounce: function (func) {
debounce: func => {
function debounced(...args) {
return func.apply(this, args);
}
return debounced;
}
}), { virtual: true });
},
}),
{ virtual: true }
);

import React from 'react';
import { shallowWithIntl } from 'test_utils/enzyme_helpers';
import { shallow } from 'enzyme';

import {
DashboardListing,
} from './dashboard_listing';
import { DashboardListing } from './dashboard_listing';

const find = (num) => {
const find = num => {
const hits = [];
for (let i = 0; i < num; i++) {
hits.push({
id: `dashboard${i}`,
title: `dashboard${i} title`,
description: `dashboard${i} desc`
description: `dashboard${i} desc`,
});
}
return Promise.resolve({
total: num,
hits: hits
hits: hits,
});
};

test('renders empty page in before initial fetch to avoid flickering', () => {
const component = shallowWithIntl(<DashboardListing.WrappedComponent
findItems={find.bind(null, 2)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1000}
hideWriteControls={false}
/>);
expect(component).toMatchSnapshot();
});

describe('after fetch', () => {
test('initialFilter', async () => {
const component = shallowWithIntl(<DashboardListing.WrappedComponent
const component = shallow(
<DashboardListing
findItems={find.bind(null, 2)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1000}
hideWriteControls={false}
initialFilter="my dashboard"
/>);
/>
);
expect(component).toMatchSnapshot();
});

describe('after fetch', () => {
test('initialFilter', async () => {
const component = shallow(
<DashboardListing
findItems={find.bind(null, 2)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1000}
hideWriteControls={false}
initialFilter="my dashboard"
/>
);

// Ensure all promises resolve
await new Promise(resolve => process.nextTick(resolve));
Expand All @@ -93,15 +101,17 @@ describe('after fetch', () => {
});

test('renders table rows', async () => {
const component = shallowWithIntl(<DashboardListing.WrappedComponent
findItems={find.bind(null, 2)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1000}
hideWriteControls={false}
/>);
const component = shallow(
<DashboardListing
findItems={find.bind(null, 2)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1000}
hideWriteControls={false}
/>
);

// Ensure all promises resolve
await new Promise(resolve => process.nextTick(resolve));
Expand All @@ -112,15 +122,17 @@ describe('after fetch', () => {
});

test('renders call to action when no dashboards exist', async () => {
const component = shallowWithIntl(<DashboardListing.WrappedComponent
findItems={find.bind(null, 0)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1}
hideWriteControls={false}
/>);
const component = shallow(
<DashboardListing
findItems={find.bind(null, 0)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1}
hideWriteControls={false}
/>
);

// Ensure all promises resolve
await new Promise(resolve => process.nextTick(resolve));
Expand All @@ -131,15 +143,17 @@ describe('after fetch', () => {
});

test('hideWriteControls', async () => {
const component = shallowWithIntl(<DashboardListing.WrappedComponent
findItems={find.bind(null, 0)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1}
hideWriteControls={true}
/>);
const component = shallow(
<DashboardListing
findItems={find.bind(null, 0)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1}
hideWriteControls={true}
/>
);

// Ensure all promises resolve
await new Promise(resolve => process.nextTick(resolve));
Expand All @@ -150,15 +164,17 @@ describe('after fetch', () => {
});

test('renders warning when listingLimit is exceeded', async () => {
const component = shallowWithIntl(<DashboardListing.WrappedComponent
findItems={find.bind(null, 2)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1}
hideWriteControls={false}
/>);
const component = shallow(
<DashboardListing
findItems={find.bind(null, 2)}
deleteItems={() => {}}
createItem={() => {}}
editItem={() => {}}
getViewUrl={() => {}}
listingLimit={1}
hideWriteControls={false}
/>
);

// Ensure all promises resolve
await new Promise(resolve => process.nextTick(resolve));
Expand Down
Loading