mirror of
https://github.com/ZwareBear/awx.git
synced 2026-04-05 15:41:49 -05:00
Boolean / Smart Search (#3631)
* Part 1: building new search components Directives: smart-search, column-sort, paginate Service: QuerySet Model: DjangoSearchModel * Part 2: Implementing new search components, de-implementing old search components Remove old code: * tagSearch directive * old pagination strategy * old column sorting strategy * lookup Add new directives to list/form generator: * smart-search, * paginate * column-sort Connect $state + dataset resolution * upgrade ui-router lib to v1.0.0-beta3 * Custom $urlMatcherFactory.type - queryset * Render lists, forms, related, lookups in named views * Provide html templates in list/form/lookup/related state definitions * Provide dataset through resolve block in state definitions Update utilities * isEmpty filter * use async validation strategy in awlookup directive * Part 3: State implementations (might split into per-module commits) * Support optional state definition flag: squashSearchUrl. *_search params are only URI-encoded if squashSearchUrl is falsey. * * Fix list badge counts * Clear search input after search term(s) applied * Chain of multiple search terms in one submission * Hook up activity stream * Hook up portal mode * Fix pagination range calculations * Hook up organization sub-list views * Hook up listDefinition.search defaults * Fix ng-disabled conditions reflecting RBAC access on form fields * Fix actively-editing indicator in generated lists * form generator - fix undefined span, remove dead event listeners * wrap hosts/groups lists in a panel, fix groups list error * Smart search directive: clear all search tags * Search tags - ‘Clear All’ text - 12px Search key - remove top padding/margin Search key - reverse bolding of relationship fields / label, add commas Search tags - remove padding-bottom Lookup modal - “X” close button styled incorrectly Lookup modal - List title not rendered Lookup modal - 20px margin between buttons * Portal Mode Fix default column-sort on jobs list Hide column-oort on job status column Apply custom search bar sizes * stateDefinition.factory Return ES6 Promise instead of $q promise. $q cannot be safely provided during module.config() phase Some generated state trees (inventory / inventoryManage) need to be reduced to one promise. Side-step issues caused by ui-router de-registering ALL registered states that match placeholder state name/url pattern. e.g. inventories.lazyLoad() would de-register inventoryManage states if a page refresh occured @ /#/inventories/** * Combine generated state trees: inventories + inventoryManage Hook up inventory sync schedule list/form add /form edit views * Hook up system job schedule list/add/edit states * Fix breadcrumb of generated states in /setup view Fix typo in scheduler search prefix * Remove old search system deritus from list definitions * Fix breadcrumb definitions in states registered in app.js config block * Transclude list action buttons in generated form lists * Lookup Modal passes acceptance criterea: Modal cancel/exit - don’t update form field’s ng-model Modal save - do update form field's ng-model Transclude generated list contents into <lookup-modal> directive Lookup modal test spec * Fix typo in merge conflict resolution * Disable failing unit tests pending revision * Integrate smart-search architechture into add-permissions modal * use a semicolon delimiter instead of comma to avoid collision with django __in comparator * Hook up Dashboard > Hosts states, update Dashboard Inventory/Project counts with new search filters * Misc bug splat Add 20px spacing around root ui-view Fix missing closing div in related views Remove dupe line in smart-search controller * Remove defunct LookupHelper code * Rebuild inventories list status tooltips on updates to dataset Code cleanup - remove defunct modules Remove LookupHelper / LookupInit code Remove pre-RBAC permissions module * Add mising stateTree / basePath properties to form definitions * Resolve i18n conflicts in list and form generator Freeze dependencies * Integrate sockets * Final bug splat: fix jobs > job details and jobs > scheduled routing fix mis-resolved merge conflicts swap console.info for $log.debug
This commit is contained in:
@@ -18,6 +18,8 @@ export default
|
||||
addTitle: i18n._('New User'),
|
||||
editTitle: '{{ username }}',
|
||||
name: 'user',
|
||||
// the top-most node of generated state tree
|
||||
stateTree: 'users',
|
||||
forceListeners: true,
|
||||
tabs: true,
|
||||
|
||||
@@ -25,26 +27,23 @@ export default
|
||||
first_name: {
|
||||
label: i18n._('First Name'),
|
||||
type: 'text',
|
||||
addRequired: true,
|
||||
editRequired: true,
|
||||
capitalize: true,
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)',
|
||||
required: true,
|
||||
capitalize: true
|
||||
},
|
||||
last_name: {
|
||||
label: i18n._('Last Name'),
|
||||
type: 'text',
|
||||
addRequired: true,
|
||||
editRequired: true,
|
||||
capitalize: true,
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)',
|
||||
required: true,
|
||||
capitalize: true
|
||||
},
|
||||
email: {
|
||||
label: i18n._('Email'),
|
||||
type: 'email',
|
||||
addRequired: true,
|
||||
editRequired: true,
|
||||
autocomplete: false,
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)',
|
||||
required: true,
|
||||
autocomplete: false
|
||||
},
|
||||
username: {
|
||||
label: i18n._('Username'),
|
||||
@@ -54,46 +53,42 @@ export default
|
||||
init: true
|
||||
},
|
||||
autocomplete: false,
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)'
|
||||
},
|
||||
organization: {
|
||||
label: i18n._('Organization'),
|
||||
type: 'lookup',
|
||||
list: 'OrganizationList',
|
||||
basePath: 'organizations',
|
||||
sourceModel: 'organization',
|
||||
sourceField: 'name',
|
||||
addRequired: true,
|
||||
editRequired: false,
|
||||
required: true,
|
||||
excludeMode: 'edit',
|
||||
ngClick: 'lookUpOrganization()',
|
||||
awRequiredWhen: {
|
||||
reqExpression: "orgrequired",
|
||||
init: true
|
||||
},
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)'
|
||||
},
|
||||
password: {
|
||||
label: i18n._('Password'),
|
||||
type: 'sensitive',
|
||||
hasShowInputButton: true,
|
||||
ngShow: 'ldap_user == false && socialAuthUser === false && external_account === null',
|
||||
addRequired: true,
|
||||
editRequired: false,
|
||||
ngRequired: "$state.match('add')",
|
||||
labelNGClass: "{'prepend-asterisk' : $state.matches('add')}",
|
||||
ngChange: "clearPWConfirm('password_confirm')",
|
||||
autocomplete: false,
|
||||
chkPass: true,
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)'
|
||||
},
|
||||
password_confirm: {
|
||||
label: i18n._('Confirm Password'),
|
||||
type: 'sensitive',
|
||||
hasShowInputButton: true,
|
||||
ngShow: 'ldap_user == false && socialAuthUser === false && external_account === null',
|
||||
addRequired: true,
|
||||
editRequired: false,
|
||||
ngRequired: "$state.match('add')",
|
||||
labelNGClass: "{'prepend-asterisk' : $state.matches('add')}",
|
||||
awPassMatch: true,
|
||||
associated: 'password',
|
||||
autocomplete: false,
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)'
|
||||
},
|
||||
user_type: {
|
||||
label: i18n._('User Type'),
|
||||
@@ -102,30 +97,33 @@ export default
|
||||
disableChooseOption: true,
|
||||
ngModel: 'user_type',
|
||||
ngShow: 'current_user["is_superuser"]',
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngDisabled: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)'
|
||||
},
|
||||
},
|
||||
|
||||
buttons: {
|
||||
cancel: {
|
||||
ngClick: 'formCancel()',
|
||||
ngShow: '(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngShow: '(user_obj.summary_fields.user_capabilities.edit || !canAdd)'
|
||||
},
|
||||
close: {
|
||||
ngClick: 'formCancel()',
|
||||
ngShow: '!(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngShow: '!(user_obj.summary_fields.user_capabilities.edit || !canAdd)'
|
||||
},
|
||||
save: {
|
||||
ngClick: 'formSave()',
|
||||
ngDisabled: true,
|
||||
ngShow: '(user_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
ngShow: '(user_obj.summary_fields.user_capabilities.edit || !canAdd)'
|
||||
}
|
||||
},
|
||||
|
||||
related: {
|
||||
organizations: {
|
||||
basePath: 'users/:id/organizations',
|
||||
awToolTip: i18n._('Please save before assigning to organizations'),
|
||||
basePath: 'api/v1/users/{{$stateParams.user_id}}/organizations',
|
||||
search: {
|
||||
page_size: '10'
|
||||
},
|
||||
dataPlacement: 'top',
|
||||
type: 'collection',
|
||||
title: i18n._('Organizations'),
|
||||
@@ -144,11 +142,14 @@ export default
|
||||
label: 'Description'
|
||||
}
|
||||
},
|
||||
hideOnSuperuser: true
|
||||
//hideOnSuperuser: true // RBAC defunct
|
||||
},
|
||||
teams: {
|
||||
basePath: 'users/:id/teams',
|
||||
awToolTip: i18n._('Please save before assigning to teams'),
|
||||
basePath: 'api/v1/users/{{$stateParams.user_id}}/teams',
|
||||
search: {
|
||||
page_size: '10'
|
||||
},
|
||||
dataPlacement: 'top',
|
||||
type: 'collection',
|
||||
title: i18n._('Teams'),
|
||||
@@ -166,9 +167,15 @@ export default
|
||||
label: 'Description'
|
||||
}
|
||||
},
|
||||
hideOnSuperuser: true
|
||||
//hideOnSuperuser: true // RBAC defunct
|
||||
},
|
||||
roles: {
|
||||
permissions: {
|
||||
basePath: 'api/v1/users/{{$stateParams.user_id}}/roles/',
|
||||
search: {
|
||||
page_size: '10',
|
||||
// @todo ask about name field / serializer on this endpoint
|
||||
order_by: 'id'
|
||||
},
|
||||
awToolTip: i18n._('Please save before assigning to organizations'),
|
||||
dataPlacement: 'top',
|
||||
hideSearchAndActions: true,
|
||||
@@ -196,6 +203,12 @@ export default
|
||||
noSort: true
|
||||
},
|
||||
},
|
||||
// @issue https://github.com/ansible/ansible-tower/issues/3487
|
||||
// actions: {
|
||||
// add: {
|
||||
|
||||
// }
|
||||
// }
|
||||
fieldActions: {
|
||||
"delete": {
|
||||
label: i18n._('Remove'),
|
||||
@@ -205,7 +218,7 @@ export default
|
||||
ngShow: 'permission.summary_fields.user_capabilities.unattach'
|
||||
}
|
||||
},
|
||||
hideOnSuperuser: true
|
||||
//hideOnSuperuser: true // RBAC defunct
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user