From 0cb468f390994797c0febf7edb1f66a7fb086764 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Fri, 25 Sep 2020 17:52:11 -0400 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20support=20for?= =?UTF-8?q?=20loading=20indicator=20via=20ember-loading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/core/app/helpers/is-loading.js | 24 ++++++++++ ui/core/app/routes/application.js | 14 ++++++ ui/core/app/styles/app.scss | 25 +++++++++++ ui/core/app/templates/application.hbs | 4 +- ui/core/package.json | 1 + yarn.lock | 63 +++++++++++++++++++++++++-- 6 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 ui/core/app/helpers/is-loading.js diff --git a/ui/core/app/helpers/is-loading.js b/ui/core/app/helpers/is-loading.js new file mode 100644 index 000000000..ca34b363a --- /dev/null +++ b/ui/core/app/helpers/is-loading.js @@ -0,0 +1,24 @@ +import Helper from '@ember/component/helper'; +import { inject as service } from '@ember/service'; + +/** + * This helper returns true or false based on the state of the ember-loading + * service's `isLoading` attribute. + */ +export default class extends Helper { + + // =services + + @service loading; + + // =methods + + /** + * Returns true if "something" is loading according to ember-loading. + * @return {boolean} + */ + compute() { + return this.loading.isLoading; + } + +} diff --git a/ui/core/app/routes/application.js b/ui/core/app/routes/application.js index 0a6c58271..881f99f33 100644 --- a/ui/core/app/routes/application.js +++ b/ui/core/app/routes/application.js @@ -5,6 +5,7 @@ import { getOwner } from '@ember/application'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { later } from '@ember/runloop'; +import loading from 'ember-loading/decorator'; /** * Entry route for the application. @@ -60,11 +61,24 @@ export default class ApplicationRoute extends Route.extend( this.session.invalidate(); } + /** + * Hooks into ember-loading to kick off loading indicator in the + * application template. + * @return {Transition} returns the transition on a passthrough basis, + * because it is a promise on which ember-loading can watch for resolution. + */ + @action + @loading + loading() { + return true; + } + /** * Invalidates the session if a 401 error occurs and returns false to * prevent further error handling. * Returns true in all other cases, allowing error handling to occur (such * as displaying the `error.hbs` template, if one exists). + * @param {Error} e */ @action error(e) { diff --git a/ui/core/app/styles/app.scss b/ui/core/app/styles/app.scss index a17433ebf..df612afed 100644 --- a/ui/core/app/styles/app.scss +++ b/ui/core/app/styles/app.scss @@ -40,3 +40,28 @@ } } } + +.rose-header { + position: relative; + + &.loading { + &::after { + content: " "; + position: absolute; + top: 100%; + left: 0; + right: 0; + height: 3px; + + background: repeating-linear-gradient(to right, #fff, #fff, var(--info), #fff, #fff); + background-size: 200% auto; + background-position: 0 100%; + animation: gradient 1s linear infinite; + + @keyframes gradient { + 0% { background-position: 0 0; } + 100% { background-position: -200% 0; } + } + } + } +} diff --git a/ui/core/app/templates/application.hbs b/ui/core/app/templates/application.hbs index 06a6a4291..8e16b5615 100644 --- a/ui/core/app/templates/application.hbs +++ b/ui/core/app/templates/application.hbs @@ -4,9 +4,8 @@ - + - {{#if this.session.isAuthenticated}} {{/if}} - diff --git a/ui/core/package.json b/ui/core/package.json index 212ce3416..ee54d5c47 100644 --- a/ui/core/package.json +++ b/ui/core/package.json @@ -63,6 +63,7 @@ "ember-inline-svg": "^1.0.0", "ember-intl": "^5.1.1", "ember-load-initializers": "^2.1.1", + "ember-loading": "^0.4.0", "ember-maybe-import-regenerator": "^0.1.6", "ember-modifier": "^1.0.3", "ember-notify": "^6.0.0", diff --git a/yarn.lock b/yarn.lock index 03ce48f88..02168b019 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4410,7 +4410,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.26.0, babel-core@^6.26.3: +babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.26.3: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== @@ -4743,6 +4743,11 @@ babel-plugin-htmlbars-inline-precompile@^3.0.1: resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.1.0.tgz#85085b50385277f2b331ebd54e22fa91aadc24e8" integrity sha512-ar6c4YVX6OV7Dzpq7xRyllQrHwVEzJf41qysYULnD6tu6TS+y1FxT2VcEvMC6b9Rq9xoHMzvB79HO3av89JCGg== +babel-plugin-htmlbars-inline-precompile@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.2.0.tgz#c4882ea875d0f5683f0d91c1f72e29a4f14b5606" + integrity sha512-IUeZmgs9tMUGXYu1vfke5I18yYJFldFGdNFQOWslXTnDWXzpwPih7QFduUqvT+awDpDuNtXpdt5JAf43Q1Hhzg== + babel-plugin-istanbul@^5.1.0, babel-plugin-istanbul@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" @@ -8410,7 +8415,7 @@ ember-cli-babel@7.19.0: rimraf "^3.0.1" semver "^5.5.0" -ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.9.2: +ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.2: version "6.18.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA== @@ -8585,6 +8590,26 @@ ember-cli-htmlbars@^4.0.0, ember-cli-htmlbars@^4.2.2: strip-bom "^4.0.0" walk-sync "^2.0.2" +ember-cli-htmlbars@^4.2.3: + version "4.4.0" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.4.0.tgz#7ca17d5ca8f7550984346d9e6e93da0c3323f8d9" + integrity sha512-ohgctqk7dXIZR4TgN0xRoUYltWhghFJgqmtuswQTpZ7p74RxI9PKx+E8WV/95mGcPzraesvMNBg5utQNvcqgNg== + dependencies: + "@ember/edition-utils" "^1.2.0" + babel-plugin-htmlbars-inline-precompile "^3.2.0" + broccoli-debug "^0.6.5" + broccoli-persistent-filter "^2.3.1" + broccoli-plugin "^3.1.0" + common-tags "^1.8.0" + ember-cli-babel-plugin-helpers "^1.1.0" + fs-tree-diff "^2.0.1" + hash-for-dep "^1.5.1" + heimdalljs-logger "^0.1.10" + json-stable-stringify "^1.0.1" + semver "^6.3.0" + strip-bom "^4.0.0" + walk-sync "^2.0.2" + ember-cli-inject-live-reload@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.0.2.tgz#95edb543b386239d35959e5ea9579f5382976ac7" @@ -8725,7 +8750,7 @@ ember-cli-typescript@3.0.0: stagehand "^1.0.0" walk-sync "^2.0.0" -ember-cli-typescript@^2.0.2: +ember-cli-typescript@^2.0.0-rc.2, ember-cli-typescript@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-2.0.2.tgz#464984131fbdc05655eb61d1c3cdd911d3137f0d" integrity sha512-7I5azCTxOgRDN8aSSnJZIKSqr+MGnT+jLTUbBYqF8wu6ojs2DUnTePxUcQMcvNh3Q3B1ySv7Q/uZFSjdU9gSjA== @@ -8918,6 +8943,16 @@ ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-co ember-cli-version-checker "^2.1.1" semver "^5.4.1" +ember-concurrency@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-0.10.1.tgz#aae4528540391a7278e2c193a146b5474cad5ec2" + integrity sha512-KdvR5TEfnLov4igeIZiVueFOL0kMjkabMQrioipegey+NF23SSYThc/y2rKv109D92lTAJgC6Vp7+j2RtXqD+w== + dependencies: + babel-core "^6.24.1" + ember-cli-babel "^6.8.2" + ember-compatibility-helpers "^1.2.0" + ember-maybe-import-regenerator "^0.1.5" + ember-concurrency@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-1.3.0.tgz#66f90fb792687470bcee1172adc0ebf33f5e8b9c" @@ -8996,6 +9031,15 @@ ember-data@~3.16.0: ember-cli-typescript "^3.1.3" ember-inflector "^3.0.1" +ember-decorators-polyfill@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ember-decorators-polyfill/-/ember-decorators-polyfill-1.1.5.tgz#49203c302ea4486618ba4866923ec657cf2c9f3d" + integrity sha512-O154i8sLoVjsiKzSqxGRfHGr+N+drT6mRrLDbNgJCnW/V5uLg/ppZFpUsrdxuXnp5Q9us3OfXV1nX2CH+7bUpA== + dependencies: + ember-cli-babel "^7.1.2" + ember-cli-version-checker "^3.1.3" + ember-compatibility-helpers "^1.2.0" + ember-disable-prototype-extensions@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/ember-disable-prototype-extensions/-/ember-disable-prototype-extensions-1.1.3.tgz#1969135217654b5e278f9fe2d9d4e49b5720329e" @@ -9190,7 +9234,18 @@ ember-load-initializers@^2.1.1: ember-cli-babel "^7.11.0" ember-cli-typescript "^2.0.2" -ember-maybe-import-regenerator@^0.1.6: +ember-loading@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/ember-loading/-/ember-loading-0.4.0.tgz#4909a6585b351c9540a26bf20ab086986b427acf" + integrity sha512-x5JDBdCc0AjoMcUyTFtO3lqZ5ye2Sn4STm0dInSYm21pOmwkHB9bxMH8vyWj9JEiLKY6+Vb6PC0WbRM/SOn31Q== + dependencies: + ember-cli-babel "^7.18.0" + ember-cli-htmlbars "^4.2.3" + ember-cli-typescript "^2.0.0-rc.2" + ember-concurrency "^0.10.0" + ember-decorators-polyfill "^1.1.5" + +ember-maybe-import-regenerator@^0.1.5, ember-maybe-import-regenerator@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ember-maybe-import-regenerator/-/ember-maybe-import-regenerator-0.1.6.tgz#35d41828afa6d6a59bc0da3ce47f34c573d776ca" integrity sha1-NdQYKK+m1qWbwNo85H80xXPXdso= From 8ec8d76f93d5b415ab33f715bc8dab96a9506218 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Fri, 25 Sep 2020 18:09:56 -0400 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20apply=20loading=20in?= =?UTF-8?q?dicator=20to=20all=20route=20persistence=20fn's?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/core/app/routes/scopes/scope/auth-methods.js | 3 +++ .../routes/scopes/scope/auth-methods/auth-method/accounts.js | 3 +++ .../auth-methods/auth-method/accounts/account/set-password.js | 2 ++ ui/core/app/routes/scopes/scope/authenticate/method.js | 2 ++ ui/core/app/routes/scopes/scope/groups.js | 3 +++ ui/core/app/routes/scopes/scope/groups/group/add-members.js | 2 ++ ui/core/app/routes/scopes/scope/groups/group/members.js | 2 ++ ui/core/app/routes/scopes/scope/orgs.js | 2 ++ ui/core/app/routes/scopes/scope/projects.js | 3 +++ .../app/routes/scopes/scope/projects/project/host-catalogs.js | 3 +++ .../projects/project/host-catalogs/host-catalog/host-sets.js | 3 +++ .../host-catalogs/host-catalog/host-sets/host-set/add-hosts.js | 2 ++ .../host-catalogs/host-catalog/host-sets/host-set/hosts.js | 2 ++ .../scope/projects/project/host-catalogs/host-catalog/hosts.js | 3 +++ ui/core/app/routes/scopes/scope/projects/project/targets.js | 3 +++ .../scope/projects/project/targets/target/add-host-sets.js | 2 ++ .../scopes/scope/projects/project/targets/target/host-sets.js | 2 ++ ui/core/app/routes/scopes/scope/roles.js | 3 +++ ui/core/app/routes/scopes/scope/roles/role/add-principals.js | 2 ++ ui/core/app/routes/scopes/scope/roles/role/grants.js | 2 ++ ui/core/app/routes/scopes/scope/roles/role/principals.js | 2 ++ ui/core/app/routes/scopes/scope/users.js | 3 +++ 22 files changed, 54 insertions(+) diff --git a/ui/core/app/routes/scopes/scope/auth-methods.js b/ui/core/app/routes/scopes/scope/auth-methods.js index 149cec2ef..d68b2833b 100644 --- a/ui/core/app/routes/scopes/scope/auth-methods.js +++ b/ui/core/app/routes/scopes/scope/auth-methods.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeAuthMethodsRoute extends Route { // =services @@ -44,6 +45,7 @@ export default class ScopesScopeAuthMethodsRoute extends Route { * @param {AuthMethodModel} authMethod */ @action + @loading async save(authMethod) { const { isNew } = authMethod; try { @@ -67,6 +69,7 @@ export default class ScopesScopeAuthMethodsRoute extends Route { * @param {AuthMethodModel} authMethod */ @action + @loading async delete(authMethod) { try { await authMethod.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts.js b/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts.js index e2846e829..752e063f0 100644 --- a/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts.js +++ b/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route { // =services @@ -40,6 +41,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route * @param {AccountModel} account */ @action + @loading async save(account, password) { const { isNew } = account; const adapterOptions = {}; @@ -67,6 +69,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route * @param {AccountModel} account */ @action + @loading async delete(account) { try { await account.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js b/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js index f650a1860..03a582d1b 100644 --- a/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js +++ b/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSettingsRoute extends Route { // =services @@ -33,6 +34,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSettingsRout * @param {string} password */ @action + @loading async setPassword(account, password) { try { await account.setPassword(password); diff --git a/ui/core/app/routes/scopes/scope/authenticate/method.js b/ui/core/app/routes/scopes/scope/authenticate/method.js index 7a0ce5580..891fbea04 100644 --- a/ui/core/app/routes/scopes/scope/authenticate/method.js +++ b/ui/core/app/routes/scopes/scope/authenticate/method.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeAuthenticateMethodRoute extends Route { // =services @@ -38,6 +39,7 @@ export default class ScopesScopeAuthenticateMethodRoute extends Route { * If authentication fails, notifies with an alert. */ @action + @loading async authenticate(creds) { this.resetCredentials(); const authenticatorName = 'authenticator:password'; diff --git a/ui/core/app/routes/scopes/scope/groups.js b/ui/core/app/routes/scopes/scope/groups.js index c221b3277..e8e607967 100644 --- a/ui/core/app/routes/scopes/scope/groups.js +++ b/ui/core/app/routes/scopes/scope/groups.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeGroupsRoute extends Route { // =services @@ -44,6 +45,7 @@ export default class ScopesScopeGroupsRoute extends Route { * @param {GroupModel} group */ @action + @loading async save(group) { const { isNew } = group; try { @@ -64,6 +66,7 @@ export default class ScopesScopeGroupsRoute extends Route { * @param {GroupModel} group */ @action + @loading async delete(group) { try { await group.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/groups/group/add-members.js b/ui/core/app/routes/scopes/scope/groups/group/add-members.js index 9cb5fc3e1..240e0a442 100644 --- a/ui/core/app/routes/scopes/scope/groups/group/add-members.js +++ b/ui/core/app/routes/scopes/scope/groups/group/add-members.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { hash } from 'rsvp'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeGroupsGroupAddMembersRoute extends Route { // =services @@ -63,6 +64,7 @@ export default class ScopesScopeGroupsGroupAddMembersRoute extends Route { * @param {[string]} userIDs */ @action + @loading async addMembers(group, userIDs) { try { await group.addMembers(userIDs); diff --git a/ui/core/app/routes/scopes/scope/groups/group/members.js b/ui/core/app/routes/scopes/scope/groups/group/members.js index f51d8a0b9..8b3c34bc4 100644 --- a/ui/core/app/routes/scopes/scope/groups/group/members.js +++ b/ui/core/app/routes/scopes/scope/groups/group/members.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import { hash, all } from 'rsvp'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeGroupsGroupMembersRoute extends Route { // =services @@ -36,6 +37,7 @@ export default class ScopesScopeGroupsGroupMembersRoute extends Route { * @param {UserModel} member */ @action + @loading async removeMember(group, member) { try { await group.removeMember(member.id); diff --git a/ui/core/app/routes/scopes/scope/orgs.js b/ui/core/app/routes/scopes/scope/orgs.js index 30a6c938f..a1e85bb9e 100644 --- a/ui/core/app/routes/scopes/scope/orgs.js +++ b/ui/core/app/routes/scopes/scope/orgs.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeOrgsRoute extends Route { // =services @@ -48,6 +49,7 @@ export default class ScopesScopeOrgsRoute extends Route { * @param {Event} e */ @action + @loading async save(org) { const { isNew } = org; try { diff --git a/ui/core/app/routes/scopes/scope/projects.js b/ui/core/app/routes/scopes/scope/projects.js index 0a6895e54..51650f447 100644 --- a/ui/core/app/routes/scopes/scope/projects.js +++ b/ui/core/app/routes/scopes/scope/projects.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsRoute extends Route { // =services @@ -60,6 +61,7 @@ export default class ScopesScopeProjectsRoute extends Route { * @param {Event} e */ @action + @loading async save(project) { const { isNew } = project; try { @@ -80,6 +82,7 @@ export default class ScopesScopeProjectsRoute extends Route { * @param {ProjectModel} project */ @action + @loading async delete(project) { try { await project.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs.js index 9989ec112..31618cf93 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsProjectHostCatalogsRoute extends Route { // =services @@ -38,6 +39,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsRoute extends Route { * @param {Event} e */ @action + @loading async save(hostCatalog) { const { isNew } = hostCatalog; try { @@ -61,6 +63,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsRoute extends Route { * @param {ProjectModel} project */ @action + @loading async delete(project) { try { await project.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets.js index ddd865912..008429df4 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsRoute extends Route { // =services @@ -43,6 +44,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsRo * @param {Event} e */ @action + @loading async save(hostSet) { try { const { isNew } = hostSet; @@ -66,6 +68,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsRo * @param {HostSetModel} hostSet */ @action + @loading async delete(hostSet) { try { await hostSet.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js index 33e9af6c2..75fd25649 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { hash } from 'rsvp'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHostSetAddHostsRoute extends Route { // =services @@ -87,6 +88,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHo * @param {HostSetModel} hostSet */ @action + @loading async addHosts(hostSet, hostIDs) { try { await hostSet.addHosts(hostIDs); diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.js index 772d07357..e13798b48 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { hash, all } from 'rsvp'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHostSetHostsRoute extends Route { // =services @@ -35,6 +36,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHo * @param {HostModel} host */ @action + @loading async removeHost(hostSet, host) { try { const scopeID = this.modelFor('scopes.scope.projects.project').id; diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/hosts.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/hosts.js index 1bab7ab3a..b0ce74d38 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/hosts.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/hosts.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostsRoute extends Route { // =services @@ -43,6 +44,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostsRoute * @param {Event} e */ @action + @loading async save(host) { try { const { isNew } = host; @@ -66,6 +68,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostsRoute * @param {HostModel} host */ @action + @loading async delete(host) { try { await host.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/projects/project/targets.js b/ui/core/app/routes/scopes/scope/projects/project/targets.js index d6f1c0a56..501343e8d 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/targets.js +++ b/ui/core/app/routes/scopes/scope/projects/project/targets.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsProjectTargetsRoute extends Route { // =services @@ -38,6 +39,7 @@ export default class ScopesScopeProjectsProjectTargetsRoute extends Route { * @param {Event} e */ @action + @loading async save(target) { const { isNew } = target; try { @@ -58,6 +60,7 @@ export default class ScopesScopeProjectsProjectTargetsRoute extends Route { * @param {TargetModel} target */ @action + @loading async delete(target) { try { await target.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/projects/project/targets/target/add-host-sets.js b/ui/core/app/routes/scopes/scope/projects/project/targets/target/add-host-sets.js index cedda2034..5736ae317 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/targets/target/add-host-sets.js +++ b/ui/core/app/routes/scopes/scope/projects/project/targets/target/add-host-sets.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { all } from 'rsvp'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsProjectTargetsTargetAddHostSetsRoute extends Route { // =services @@ -70,6 +71,7 @@ export default class ScopesScopeProjectsProjectTargetsTargetAddHostSetsRoute ext // =actions @action + @loading async save(target, hostSetIDs) { try { await target.addHostSets(hostSetIDs); diff --git a/ui/core/app/routes/scopes/scope/projects/project/targets/target/host-sets.js b/ui/core/app/routes/scopes/scope/projects/project/targets/target/host-sets.js index c0678f8da..1633c5713 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/targets/target/host-sets.js +++ b/ui/core/app/routes/scopes/scope/projects/project/targets/target/host-sets.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { all, hash } from 'rsvp'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeProjectsProjectTargetsTargetHostSetsRoute extends Route { // =services @@ -53,6 +54,7 @@ export default class ScopesScopeProjectsProjectTargetsTargetHostSetsRoute extend * @param {HostSetModel} hostSet */ @action + @loading async removeHostSet(target, hostSet) { try { await target.removeHostSet(hostSet.id); diff --git a/ui/core/app/routes/scopes/scope/roles.js b/ui/core/app/routes/scopes/scope/roles.js index a3dd0bd66..84c6e7a8d 100644 --- a/ui/core/app/routes/scopes/scope/roles.js +++ b/ui/core/app/routes/scopes/scope/roles.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeRolesRoute extends Route { // =services @@ -44,6 +45,7 @@ export default class ScopesScopeRolesRoute extends Route { * @param {RoleModel} role */ @action + @loading async save(role) { const { isNew } = role; try { @@ -64,6 +66,7 @@ export default class ScopesScopeRolesRoute extends Route { * @param {RoleModel} role */ @action + @loading async delete(role) { try { await role.destroyRecord(); diff --git a/ui/core/app/routes/scopes/scope/roles/role/add-principals.js b/ui/core/app/routes/scopes/scope/roles/role/add-principals.js index e5ff631ff..6d0bb1d46 100644 --- a/ui/core/app/routes/scopes/scope/roles/role/add-principals.js +++ b/ui/core/app/routes/scopes/scope/roles/role/add-principals.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { hash } from 'rsvp'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeRolesRoleAddPrincipalsRoute extends Route { // =services @@ -57,6 +58,7 @@ export default class ScopesScopeRolesRoleAddPrincipalsRoute extends Route { * @param {[string]} principalIDs */ @action + @loading async addPrincipals(role, principalIDs) { try { await role.addPrincipals(principalIDs); diff --git a/ui/core/app/routes/scopes/scope/roles/role/grants.js b/ui/core/app/routes/scopes/scope/roles/role/grants.js index ac73cf1ea..d09901515 100644 --- a/ui/core/app/routes/scopes/scope/roles/role/grants.js +++ b/ui/core/app/routes/scopes/scope/roles/role/grants.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeRolesRoleGrantsRoute extends Route { // =services @@ -54,6 +55,7 @@ export default class ScopesScopeRolesRoleGrantsRoute extends Route { * @param {RoleModel} role */ @action + @loading async save(role) { try { await role.saveGrants(); diff --git a/ui/core/app/routes/scopes/scope/roles/role/principals.js b/ui/core/app/routes/scopes/scope/roles/role/principals.js index 3337b3437..00cc77303 100644 --- a/ui/core/app/routes/scopes/scope/roles/role/principals.js +++ b/ui/core/app/routes/scopes/scope/roles/role/principals.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { all } from 'rsvp'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeRolesRolePrincipalsRoute extends Route { // =services @@ -60,6 +61,7 @@ export default class ScopesScopeRolesRolePrincipalsRoute extends Route { * @param {UserModel, GroupModel} principal */ @action + @loading async removePrincipal(principal) { try { const role = this.modelFor('scopes.scope.roles.role'); diff --git a/ui/core/app/routes/scopes/scope/users.js b/ui/core/app/routes/scopes/scope/users.js index 46847ddc3..bc6b6cf02 100644 --- a/ui/core/app/routes/scopes/scope/users.js +++ b/ui/core/app/routes/scopes/scope/users.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import loading from 'ember-loading/decorator'; export default class ScopesScopeUsersRoute extends Route { // =services @@ -45,6 +46,7 @@ export default class ScopesScopeUsersRoute extends Route { * @param {Event} e */ @action + @loading async save(user) { const { isNew } = user; try { @@ -65,6 +67,7 @@ export default class ScopesScopeUsersRoute extends Route { * @param {UserModel} user */ @action + @loading async delete(user) { try { await user.destroyRecord(); From 6ebf9ec9c2e2f27ee315f09bba0e7720413cf134 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Fri, 25 Sep 2020 18:25:04 -0400 Subject: [PATCH 3/3] =?UTF-8?q?chore:=20=F0=9F=A4=96=20tweak?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/core/app/routes/application.js | 3 +-- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ui/core/app/routes/application.js b/ui/core/app/routes/application.js index 881f99f33..387c8fef2 100644 --- a/ui/core/app/routes/application.js +++ b/ui/core/app/routes/application.js @@ -64,8 +64,7 @@ export default class ApplicationRoute extends Route.extend( /** * Hooks into ember-loading to kick off loading indicator in the * application template. - * @return {Transition} returns the transition on a passthrough basis, - * because it is a promise on which ember-loading can watch for resolution. + * @return {boolean} always returns true */ @action @loading diff --git a/yarn.lock b/yarn.lock index b9cf5ea34..a205584da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5092,7 +5092,7 @@ babel-plugin-htmlbars-inline-precompile@^3.2.0: resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.2.0.tgz#c4882ea875d0f5683f0d91c1f72e29a4f14b5606" integrity sha512-IUeZmgs9tMUGXYu1vfke5I18yYJFldFGdNFQOWslXTnDWXzpwPih7QFduUqvT+awDpDuNtXpdt5JAf43Q1Hhzg== -babel-plugin-istanbul@^5.1.0, babel-plugin-istanbul@^5.2.0: +babel-plugin-istanbul@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==