Skip to content

Commit 245ac07

Browse files
feat: ✨ Add setting to use "latest" plugin version by default
Thanks @mnaoumov
2 parents 849240e + 114a0dc commit 245ac07

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

src/settings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export interface Settings {
2626
debuggingMode: boolean;
2727
notificationsEnabled: boolean;
2828
personalAccessToken?: string;
29+
selectLatestPluginVersionByDefault: boolean;
2930
}
3031

3132
export const DEFAULT_SETTINGS: Settings = {
@@ -41,6 +42,7 @@ export const DEFAULT_SETTINGS: Settings = {
4142
debuggingMode: false,
4243
notificationsEnabled: true,
4344
personalAccessToken: "",
45+
selectLatestPluginVersionByDefault: false,
4446
};
4547

4648
/**

src/ui/AddNewPluginModal.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,14 @@ export default class AddNewPluginModal extends Modal {
120120
}
121121

122122
private updateVersionDropdown(settingEl: Setting, versions: ReleaseVersion[], selected = ""): void {
123+
let selectedVersion: string;
124+
123125
settingEl.clear();
126+
if (versions.length > 0 && !selected && this.plugin.settings.selectLatestPluginVersionByDefault) {
127+
selectedVersion = "latest";
128+
} else {
129+
selectedVersion = selected;
130+
}
124131

125132
const VERSION_THRESHOLD = 20;
126133

@@ -133,11 +140,13 @@ export default class AddNewPluginModal extends Modal {
133140
for (const version of versions) {
134141
dropdown.addOption(version.version, `${version.version} ${version.prerelease ? "(Prerelease)" : ""}`);
135142
}
136-
dropdown.setValue(selected);
137-
dropdown.onChange((value) => {
143+
const changeHandler = (value: string) => {
138144
this.version = value;
139145
this.updateAddButtonState();
140-
});
146+
};
147+
dropdown.onChange(changeHandler);
148+
dropdown.setValue(selectedVersion);
149+
changeHandler(selectedVersion);
141150

142151
dropdown.selectEl.addClass("brat-version-selector");
143152
dropdown.selectEl.style.width = "100%";
@@ -146,7 +155,7 @@ export default class AddNewPluginModal extends Modal {
146155
// Use suggest modal for many versions
147156
settingEl.addButton((button) => {
148157
button
149-
.setButtonText(selected === "latest" ? "Latest version" : selected || "Select a version...")
158+
.setButtonText(selectedVersion === "latest" ? "Latest version" : selectedVersion || "Select a version...")
150159
.setClass("brat-version-selector")
151160
.setClass("button")
152161
.onClick((e: Event) => {
@@ -156,7 +165,7 @@ export default class AddNewPluginModal extends Modal {
156165
prerelease: false,
157166
};
158167
const suggestedVersions: ReleaseVersion[] = [latest, ...versions];
159-
const modal = new VersionSuggestModal(this.app, this.address, suggestedVersions, selected, (version: string) => {
168+
const modal = new VersionSuggestModal(this.app, this.address, suggestedVersions, selectedVersion, (version: string) => {
160169
this.version = version;
161170
button.setButtonText(version === "latest" ? "Latest version" : version || "Select a version...");
162171
this.updateAddButtonState();

src/ui/SettingsTab.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ export class BratSettingsTab extends PluginSettingTab {
5959
});
6060
});
6161

62+
new Setting(containerEl)
63+
.setName("Select latest plugin version by default")
64+
.setDesc("If enabled the latest version will be selected by default when adding a new plugin.")
65+
.addToggle((cb: ToggleComponent) => {
66+
cb.setValue(this.plugin.settings.selectLatestPluginVersionByDefault).onChange(async (value: boolean) => {
67+
this.plugin.settings.selectLatestPluginVersionByDefault = value;
68+
await this.plugin.saveSettings();
69+
});
70+
});
71+
6272
promotionalLinks(containerEl, true);
6373
containerEl.createEl("hr");
6474
new Setting(containerEl).setName("Beta plugin list").setHeading();

0 commit comments

Comments
 (0)