Skip to content

Commit 7c49b53

Browse files
Merge pull request #1297 from CleverCloud/cc-button/fix-waiting-vs-disabled
cc-button: avoid setting both `disabled` & `waiting` at the same time
2 parents 0dfe8f4 + 6d5ee32 commit 7c49b53

File tree

6 files changed

+20
-15
lines changed

6 files changed

+20
-15
lines changed

src/components/cc-addon-admin/cc-addon-admin.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export class CcAddonAdmin extends LitElement {
142142
<cc-button
143143
primary
144144
?skeleton=${isSkeleton}
145-
?disabled=${isFormDisabled}
145+
?disabled=${isFormDisabled && state.type !== 'updatingName'}
146146
?waiting=${state.type === 'updatingName'}
147147
@cc-button:click=${this._onNameSubmit}
148148
>${i18n('cc-addon-admin.update')}</cc-button
@@ -166,7 +166,7 @@ export class CcAddonAdmin extends LitElement {
166166
<cc-button
167167
primary
168168
?skeleton=${isSkeleton}
169-
?disabled=${isFormDisabled}
169+
?disabled=${isFormDisabled && state.type !== 'updatingTags'}
170170
?waiting=${state.type === 'updatingTags'}
171171
@cc-button:click=${this._onTagsSubmit}
172172
>${i18n('cc-addon-admin.tags-update')}</cc-button
@@ -185,7 +185,7 @@ export class CcAddonAdmin extends LitElement {
185185
<cc-button
186186
danger
187187
?skeleton=${isSkeleton}
188-
?disabled=${isFormDisabled}
188+
?disabled=${isFormDisabled && state.type !== 'deleting'}
189189
?waiting=${state.type === 'deleting'}
190190
@cc-button:click=${this._onDeleteSubmit}
191191
>${i18n('cc-addon-admin.delete')}</cc-button

src/components/cc-button/cc-button.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,12 @@ export class CcButton extends LitElement {
240240
this._cancelClick();
241241
}
242242
}
243+
244+
if (this.waiting && this.disabled) {
245+
throw new Error(
246+
'`waiting` and `disabled` cannot be set to true at the same time, see https://github.com/CleverCloud/clever-components/issues/1124 for more info',
247+
);
248+
}
243249
}
244250

245251
render() {

src/components/cc-domain-management/cc-domain-management.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ export class CcDomainManagement extends LitElement {
570570
class="mark-primary"
571571
primary
572572
outlined
573-
?disabled=${isMarkingPrimaryDisabled}
573+
?disabled=${isMarkingPrimaryDisabled && domainItemStateType !== 'marking-primary'}
574574
?waiting="${domainItemStateType === 'marking-primary'}"
575575
a11y-name="${i18n('cc-domain-management.list.btn.primary.a11y-name', { domain: hostWithWildcard })}"
576576
.icon=${iconPrimary}

src/components/cc-email-list/cc-email-list.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ export class CcEmailList extends LitElement {
250250
*/
251251
_renderSecondarySection(secondaryAddressStates) {
252252
const addresses = [...secondaryAddressStates].sort(sortBy('address'));
253-
const markingAsPrimary = addresses.some((item) => item.state === 'marking-as-primary');
253+
const isOneRowMarkingPrimary = addresses.some((item) => item.state === 'marking-as-primary');
254254

255255
return html`
256256
<cc-block-section slot="content-body">
@@ -260,6 +260,7 @@ export class CcEmailList extends LitElement {
260260
<ul class="secondary-addresses">
261261
${addresses.map((secondaryAddress) => {
262262
const isBusy = secondaryAddress.state === 'marking-as-primary' || secondaryAddress.state === 'deleting';
263+
const isDisabled = (isOneRowMarkingPrimary || isBusy) && secondaryAddress.state !== 'marking-as-primary';
263264
264265
return html`
265266
<li class="address-line secondary">
@@ -271,7 +272,7 @@ export class CcEmailList extends LitElement {
271272
<cc-button
272273
@cc-button:click=${() => this._onMarkAsPrimary(secondaryAddress.address)}
273274
?waiting="${secondaryAddress.state === 'marking-as-primary'}"
274-
?disabled="${markingAsPrimary || isBusy}"
275+
?disabled="${isDisabled}"
275276
a11y-name="${i18n('cc-email-list.secondary.action.mark-as-primary.accessible-name', {
276277
address: secondaryAddress.address,
277278
})}"
@@ -285,7 +286,7 @@ export class CcEmailList extends LitElement {
285286
.icon=${iconDelete}
286287
@cc-button:click=${() => this._onDelete(secondaryAddress.address)}
287288
?waiting="${secondaryAddress.state === 'deleting'}"
288-
?disabled="${isBusy}"
289+
?disabled="${isBusy && secondaryAddress.state !== 'deleting'}"
289290
a11y-name="${i18n('cc-email-list.secondary.action.delete.accessible-name', {
290291
address: secondaryAddress.address,
291292
})}"

src/components/cc-env-var-form/cc-env-var-form.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ export class CcEnvVarForm extends LitElement {
356356
357357
<cc-button
358358
success
359-
?disabled=${isFormDisabled}
359+
?disabled=${isFormDisabled && !isSaving}
360360
?waiting="${isSaving}"
361361
@cc-button:click=${this._onUpdateForm}
362362
>${i18n('cc-env-var-form.update')}</cc-button

src/components/cc-ssh-key-list/cc-ssh-key-list.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,12 @@ export class CcSshKeyList extends LitElement {
285285
(key) => key.name,
286286
(key) => {
287287
const name = key.name;
288-
const isDisabled = !skeleton && key.state !== 'idle';
288+
const isWaiting = !skeleton && key.state !== 'idle';
289289
const classes = {
290290
'key--personal': type === 'personal',
291291
'key--github': type === 'github',
292292
'key--skeleton': skeleton,
293-
'is-disabled': isDisabled,
293+
'is-waiting': isWaiting,
294294
};
295295
296296
return html`
@@ -311,10 +311,9 @@ export class CcSshKeyList extends LitElement {
311311
a11y-name="${i18n('cc-ssh-key-list.personal.delete.a11y', { name })}"
312312
class="key__button key__button--personal"
313313
.icon="${iconBin}"
314-
?disabled=${isDisabled}
315314
danger
316315
outlined
317-
?waiting=${isDisabled}
316+
?waiting=${isWaiting}
318317
>
319318
${i18n('cc-ssh-key-list.personal.delete')}
320319
</cc-button>
@@ -327,8 +326,7 @@ export class CcSshKeyList extends LitElement {
327326
a11y-name="${i18n('cc-ssh-key-list.github.import.a11y', { name })}"
328327
class="key__button key__button--github"
329328
.icon="${iconAdd}"
330-
?disabled=${isDisabled}
331-
?waiting=${isDisabled}
329+
?waiting=${isWaiting}
332330
>
333331
${i18n('cc-ssh-key-list.github.import')}
334332
</cc-button>
@@ -401,7 +399,7 @@ export class CcSshKeyList extends LitElement {
401399
grid-template-columns: min-content 1fr;
402400
}
403401
404-
.key.is-disabled {
402+
.key.is-waiting {
405403
cursor: default;
406404
opacity: var(--cc-opacity-when-disabled);
407405
}

0 commit comments

Comments
 (0)