Skip to content
This repository was archived by the owner on Jan 13, 2025. It is now read-only.

Commit 1d9cd68

Browse files
authored
fix(linear-progress): restores progress when determinate set to true (#1698)
Fixes a bug where the progress was set to 1 after determinate was toggled from false to true, regardless of what progress was set to before. The progress value is stored in the Foundation instance, defaulting to 0 to follow #1694. Fixes #1531
1 parent c989b43 commit 1d9cd68

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

packages/mdc-linear-progress/foundation.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@ export default class MDCLinearProgressFoundation extends MDCFoundation {
4646
init() {
4747
this.determinate_ = !this.adapter_.hasClass(cssClasses.INDETERMINATE_CLASS);
4848
this.reverse_ = this.adapter_.hasClass(cssClasses.REVERSED_CLASS);
49+
this.progress_ = 0;
4950
}
5051

5152
setDeterminate(isDeterminate) {
5253
this.determinate_ = isDeterminate;
5354
if (this.determinate_) {
5455
this.adapter_.removeClass(cssClasses.INDETERMINATE_CLASS);
56+
this.setScale_(this.adapter_.getPrimaryBar(), this.progress_);
5557
} else {
5658
this.adapter_.addClass(cssClasses.INDETERMINATE_CLASS);
5759
this.setScale_(this.adapter_.getPrimaryBar(), 1);
@@ -60,6 +62,7 @@ export default class MDCLinearProgressFoundation extends MDCFoundation {
6062
}
6163

6264
setProgress(value) {
65+
this.progress_ = value;
6366
if (this.determinate_) {
6467
this.setScale_(this.adapter_.getPrimaryBar(), value);
6568
}

test/unit/mdc-linear-progress/foundation.test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,28 @@ test('#setDeterminate removes class', () => {
6363
td.verify(mockAdapter.removeClass(cssClasses.INDETERMINATE_CLASS));
6464
});
6565

66+
test('#setDeterminate restores previous progress value after toggled from false to true', () => {
67+
const {foundation, mockAdapter} = setupTest();
68+
const primaryBar = {};
69+
td.when(mockAdapter.getPrimaryBar()).thenReturn(primaryBar);
70+
foundation.init();
71+
foundation.setProgress(0.123);
72+
foundation.setDeterminate(false);
73+
foundation.setDeterminate(true);
74+
td.verify(mockAdapter.setStyle(primaryBar, 'transform', 'scaleX(0.123)'), {times: 2});
75+
});
76+
77+
test('#setDeterminate updates progress value set while determinate is false after determinate is true', () => {
78+
const {foundation, mockAdapter} = setupTest();
79+
const primaryBar = {};
80+
td.when(mockAdapter.getPrimaryBar()).thenReturn(primaryBar);
81+
foundation.init();
82+
foundation.setDeterminate(false);
83+
foundation.setProgress(0.123);
84+
foundation.setDeterminate(true);
85+
td.verify(mockAdapter.setStyle(primaryBar, 'transform', 'scaleX(0.123)'));
86+
});
87+
6688
test('#setProgress sets transform', () => {
6789
const {foundation, mockAdapter} = setupTest();
6890
td.when(mockAdapter.hasClass(cssClasses.INDETERMINATE_CLASS)).thenReturn(false);

0 commit comments

Comments
 (0)