Timer based Button text in SharePoint Framework
Overview
Buttons are the clickable HTML elements to which we can put a static text throughout its life in an application. In some cases, we change the button text based on the state of the application.
In this article, we will explore how we can set a button text based on a ticking timer. Not just for button text, but you can use the same pattern for setting text to any UI controls. We will use setInterval()
and clearInterval()
methods.
Why timer based text for controls?
Well, there are no regular business cases for this as such. However, in some scenarios this can be helpful including below:
- You have a modal dialog open with some informative text which can take 5 seconds for a normal user to read. You think, your users should spend time reading that information before they simply close the dialog.
- Hurry up your participants to submit their response in a Quiz based application.
Show me the code
Let us get into the code part by scaffolding React based SPFx solution.
React state
Define the state as below:
export interface ITimeControlsState {
counter: number;
buttonText: string;
}
counter
represents the incremented timer value to be shown as control text.buttonText
represents the text to be set to button (or any control).
In the constructor, set the default values:
constructor(props: ITimeControlsProps) {
super(props);
this.state = {
counter: 1,
buttonText: "1"
};
}
Implement Code
At class level, declare a variable intervalId
to hold the ID value of the timer that is set. Later, we will use this ID value to cancel the timer.
private intervalId: number;
In the componentDidMount()
method, start by setting the interval.
public componentDidMount() {
const thisBoundedIncrementer = this.incrementCounter.bind(this);
this.intervalId = setInterval(thisBoundedIncrementer, 1000);
}
private incrementCounter(): void {
if (this.state.counter <= 5) {
const { counter } = this.state;
this.setState({ counter: counter + 1, buttonText: (counter + 1).toString() });
}
else {
this.setState({ buttonText: "Close" });
clearInterval(this.intervalId);
}
}
Clear the interval, when the timer value is reached.
The Outcome
Here is how the final implementation looks like.
Summary
We can set a button text based on a ticking timer using setInterval()
and clearInterval()
methods.
Code download
The code developed during this article can be found here:
https://github.com/nanddeepn/code-samples/tree/master/SPFx/WebParts/spfx-timer-based-controls-text
Leave a comment