mirror of
https://github.com/datahub-project/datahub.git
synced 2025-12-27 18:07:57 +00:00
adds support for compliance filter query param on compliance route
This commit is contained in:
parent
cd94e5af6f
commit
e6c61a9536
@ -50,4 +50,4 @@ const descendantDatasetRouteClassFactory = ({ selectedTab }: { selectedTab: Tabs
|
||||
};
|
||||
};
|
||||
|
||||
export { Tabs, descendantDatasetRouteClassFactory, setTabSelectedOnAncestorController };
|
||||
export { Tabs, descendantDatasetRouteClassFactory };
|
||||
|
||||
@ -5,7 +5,7 @@ import { or } from '@ember/object/computed';
|
||||
import { encodeUrn } from 'wherehows-web/utils/validators/urn';
|
||||
import { Tabs } from 'wherehows-web/constants/datasets/shared';
|
||||
import { action } from '@ember-decorators/object';
|
||||
import { DatasetPlatform } from 'wherehows-web/constants';
|
||||
import { DatasetPlatform, TagFilter } from 'wherehows-web/constants';
|
||||
import { IDatasetView } from 'wherehows-web/typings/api/datasets/dataset';
|
||||
import { next } from '@ember/runloop';
|
||||
import { IAppConfig } from 'wherehows-web/typings/api/configurator/configurator';
|
||||
@ -135,6 +135,13 @@ export default class DatasetController extends Controller {
|
||||
*/
|
||||
requiresUserAction: ComputedProperty<boolean> = or('isNewComplianceInfo', 'compliancePolicyHasDrift');
|
||||
|
||||
/**
|
||||
* Indicates the current query value for the compliance tags to be filtered by
|
||||
* @type {(TagFilter | undefined)}
|
||||
* @memberof DatasetController
|
||||
*/
|
||||
complianceTagFilter: TagFilter | undefined;
|
||||
|
||||
/**
|
||||
* Converts the uri on a model to a usable URN format
|
||||
* @type {ComputedProperty<string>}
|
||||
|
||||
19
wherehows-web/app/controllers/datasets/dataset/compliance.ts
Normal file
19
wherehows-web/app/controllers/datasets/dataset/compliance.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import Controller from '@ember/controller';
|
||||
import { TagFilter } from 'wherehows-web/constants';
|
||||
|
||||
export default class DatasetComplianceController extends Controller {
|
||||
queryParams = [
|
||||
{
|
||||
fieldFilter: {
|
||||
as: 'field_filter'
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
/**
|
||||
* Binding for field_filter query parameter used to set the filter value for the compliance tags
|
||||
* @type {(TagFilter | undefined)}
|
||||
* @memberof DatasetComplianceController
|
||||
*/
|
||||
fieldFilter: TagFilter | undefined;
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
import Route from '@ember/routing/route';
|
||||
import { setProperties } from '@ember/object';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
import { refreshModelQueryParams } from 'wherehows-web/utils/helpers/routes';
|
||||
import { refreshModelForQueryParams } from 'wherehows-web/utils/helpers/routes';
|
||||
import BrowseEntityController from 'wherehows-web/controllers/browse/entity';
|
||||
|
||||
const queryParamsKeys: Array<keyof IBrowserRouteParams> = ['page', 'prefix', 'platform', 'size'];
|
||||
@ -27,7 +27,7 @@ export default class BrowseEntity extends Route.extend(AuthenticatedRouteMixin,
|
||||
}
|
||||
}
|
||||
}) {
|
||||
queryParams = refreshModelQueryParams(queryParamsKeys);
|
||||
queryParams = refreshModelForQueryParams(queryParamsKeys);
|
||||
|
||||
setupController(this: BrowseEntity, controller: BrowseEntityController, model: IBrowserRouteParams) {
|
||||
// sets the entity property on the controller in addition to the model
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
import Ember from 'ember'; // type import, no emit, access to Ember.Transition interface
|
||||
import Route from '@ember/routing/route';
|
||||
import { get, set, setProperties } from '@ember/object';
|
||||
import Configurator from 'wherehows-web/services/configurator';
|
||||
import Notifications, { NotificationEvent } from 'wherehows-web/services/notifications';
|
||||
import { refreshModelQueryParams } from 'wherehows-web/utils/helpers/routes';
|
||||
import { refreshModelForQueryParams } from 'wherehows-web/utils/helpers/routes';
|
||||
import isUrn, {
|
||||
convertWhUrnToLiUrn,
|
||||
decodeUrn,
|
||||
@ -34,7 +33,7 @@ export default class DatasetRoute extends Route {
|
||||
@service
|
||||
notifications: Notifications;
|
||||
|
||||
queryParams = refreshModelQueryParams(['urn']);
|
||||
queryParams = refreshModelForQueryParams(['urn']);
|
||||
|
||||
/**
|
||||
* Resolves an IDatasetView if params can be parsed into a valid urn
|
||||
@ -73,7 +72,7 @@ export default class DatasetRoute extends Route {
|
||||
throw new TypeError(`Could not parse identifier ${dataset_id}. Please ensure format is valid.`);
|
||||
}
|
||||
|
||||
afterModel(resolvedModel: object, transition: Ember.Transition): void {
|
||||
afterModel(resolvedModel: object, transition: import('ember').Ember.Transition): void {
|
||||
const { dataset_id } = transition.params['datasets.dataset'];
|
||||
|
||||
// Check is dataset_id is a number, and replace with urn
|
||||
|
||||
@ -1,3 +1,32 @@
|
||||
import { set } from '@ember/object';
|
||||
import { descendantDatasetRouteClassFactory, Tabs } from 'wherehows-web/constants/datasets/shared';
|
||||
import DatasetComplianceController from 'wherehows-web/controllers/datasets/dataset/compliance';
|
||||
import { refreshModelForQueryParams } from 'wherehows-web/utils/helpers/routes';
|
||||
import { IDatasetView } from 'wherehows-web/typings/api/datasets/dataset';
|
||||
import DatasetController from 'wherehows-web/controllers/datasets/dataset';
|
||||
|
||||
export default descendantDatasetRouteClassFactory({ selectedTab: Tabs.Compliance });
|
||||
export default class Compliance extends descendantDatasetRouteClassFactory({ selectedTab: Tabs.Compliance }) {
|
||||
queryParams = refreshModelForQueryParams(['fieldFilter']);
|
||||
|
||||
setupController(controller: DatasetComplianceController, model: IDatasetView): void {
|
||||
const { setPropOnAncestorController } = this;
|
||||
|
||||
super.setupController(controller, model);
|
||||
|
||||
// set the compliance tagFilter on the ancestor controller
|
||||
setPropOnAncestorController('complianceTagFilter', controller.fieldFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a DatasetController property K to the supplied value
|
||||
* @template K keyof DatasetController
|
||||
* @param {K} prop the property on the DatasetController to be set
|
||||
* @param {DatasetController[K]} value value to be applied to prop
|
||||
* @returns {DatasetController[K]}
|
||||
* @memberof Compliance
|
||||
*/
|
||||
setPropOnAncestorController = <K extends keyof DatasetController>(
|
||||
prop: K,
|
||||
value: DatasetController[K]
|
||||
): DatasetController[K] => set(this.controllerFor('datasets.dataset'), prop, value);
|
||||
}
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
import Route from '@ember/routing/route';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
import createSearchEntries from 'wherehows-web/utils/datasets/create-search-entries';
|
||||
import { refreshModelQueryParams } from 'wherehows-web/utils/helpers/routes';
|
||||
import { refreshModelForQueryParams } from 'wherehows-web/utils/helpers/routes';
|
||||
import { readSearch } from 'wherehows-web/utils/api/search';
|
||||
import { action } from '@ember-decorators/object';
|
||||
|
||||
export default class SearchRoute extends Route.extend(AuthenticatedRouteMixin) {
|
||||
// Set `refreshModel` for each queryParam to true
|
||||
// so each url state change results in a full transition
|
||||
queryParams = refreshModelQueryParams(['category', 'page', 'facets', 'keyword']);
|
||||
queryParams = refreshModelForQueryParams(['category', 'page', 'facets', 'keyword']);
|
||||
|
||||
/**
|
||||
* Makes an API call and process search entries
|
||||
*/
|
||||
async model(apiParams: any) {
|
||||
async model(apiParams: any): Promise<{ keywords: string; data: Array<any> }> {
|
||||
const { result } = await readSearch(apiParams);
|
||||
const { keywords, data } = result || { keywords: '', data: [] };
|
||||
createSearchEntries(data, keywords);
|
||||
@ -24,7 +24,7 @@ export default class SearchRoute extends Route.extend(AuthenticatedRouteMixin) {
|
||||
* Add spinner when model is loading
|
||||
*/
|
||||
@action
|
||||
loading(transition: any) {
|
||||
loading(transition: import('ember').Ember.Transition): void {
|
||||
let controller = this.controllerFor('search');
|
||||
controller.set('searchLoading', true);
|
||||
transition.promise.finally(function() {
|
||||
|
||||
@ -1,8 +1,12 @@
|
||||
import SearchController from 'wherehows-web/controllers/search';
|
||||
import DatasetController from 'wherehows-web/controllers/datasets/dataset';
|
||||
import DatasetComplianceController from 'wherehows-web/controllers/datasets/dataset/compliance';
|
||||
|
||||
declare module '@ember/controller' {
|
||||
// eslint-disable-next-line typescript/interface-name-prefix
|
||||
interface Registry {
|
||||
search: SearchController;
|
||||
'datasets.dataset': DatasetController;
|
||||
'datasets.dataset.compliance': DatasetComplianceController;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,10 @@
|
||||
import { arrayReduce } from 'wherehows-web/utils/array';
|
||||
|
||||
/**
|
||||
* For each given query param, creates an object with `refreshModel` set to true
|
||||
* @param {Array<string>} [params=[]]
|
||||
* @returns {{}}
|
||||
* @returns {Record<string, { refreshModel: true }>}
|
||||
*/
|
||||
export const refreshModelQueryParams = (params: Array<string> = []): {} =>
|
||||
params.reduce((queryParams, param) => ({ ...queryParams, [param]: { refreshModel: true } }), {});
|
||||
|
||||
export const refreshModelForQueryParams = (params: Array<string> = []): Record<string, { refreshModel: true }> =>
|
||||
arrayReduce((queryParams, param: string) => ({ ...queryParams, [param]: { refreshModel: true } }), {})(params);
|
||||
|
||||
@ -0,0 +1,12 @@
|
||||
import { module, test } from 'qunit';
|
||||
import { setupTest } from 'ember-qunit';
|
||||
|
||||
module('Unit | Controller | datasets/dataset/compliance', function(hooks): void {
|
||||
setupTest(hooks);
|
||||
|
||||
test('it exists', function(assert): void {
|
||||
let controller = this.owner.lookup('controller:datasets/dataset/compliance');
|
||||
assert.ok(controller);
|
||||
assert.ok(controller.hasOwnProperty('fieldFilter'), 'fieldFilter queryParam has binding to controller attribute');
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user