Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions docs/documentation.toml
Original file line number Diff line number Diff line change
Expand Up @@ -555,7 +555,7 @@ selected value: <% value %>"""
[tp.system.functions.suggester]
name = "suggester"
description = "Spawns a suggester prompt and returns the user's chosen item."
definition = "tp.system.suggester(text_items: string[] | ((item: T) => string), items: T[], throw_on_cancel: boolean = false, placeholder: string = \"\", limit?: number = undefined)"
definition = "tp.system.suggester(text_items: string[] | ((item: T) => string), items: T[], throw_on_cancel: boolean = false, placeholder: string = \"\", limit?: number = undefined, default_value?: T = undefined)"

[[tp.system.functions.suggester.args]]
name = "text_items"
Expand All @@ -577,6 +577,10 @@ description = "Placeholder string of the prompt."
name = "limit"
description = "Limit the number of items rendered at once (useful to improve performance when displaying large lists)."

[[tp.system.functions.suggester.args]]
name = "default_value"
description = "Default value to initialize the suggester with."

[[tp.system.functions.suggester.examples]]
name = "Suggester"
example = """<% await tp.system.suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]) %>"""
Expand All @@ -601,10 +605,18 @@ let selectedValue = await tp.system.suggester(["Happy", "Sad", "Confused"], ["Ha
# <% selectedValue %>
selected value: <% selectedValue %>"""

[[tp.system.functions.suggester.examples]]
name = "Default value for the suggester"
example = """<%*
let selectedValue = await tp.system.suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"], false, "", undefined, "Confused");
%>
# <% selectedValue %>
selected value: <% selectedValue %>"""

[tp.system.functions.multi_suggester]
name = "multi_suggester"
description = "Spawns a suggester prompt that supports selecting multiple items and returns the user's chosen items."
definition = "tp.system.multi_suggester(text_items: string[] | ((item: T) => string), items: T[], throw_on_cancel: boolean = false, title: string = \"\", limit?: number = undefined)"
definition = "tp.system.multi_suggester(text_items: string[] | ((item: T) => string), items: T[], throw_on_cancel: boolean = false, title: string = \"\", limit?: number = undefined, default_values?: T[] = undefined)"

[[tp.system.functions.multi_suggester.args]]
name = "text_items"
Expand All @@ -626,6 +638,10 @@ description = "Text placed at the top of the modal."
name = "limit"
description = "Limit the number of items rendered at once (useful to improve performance when displaying large lists)."

[[tp.system.functions.multi_suggester.args]]
name = "default_values"
description = "Default values to initialize the suggester with."

[[tp.system.functions.multi_suggester.examples]]
name = "Multi-suggester"
example = """<% await tp.system.multi_suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]) %>"""
Expand All @@ -650,6 +666,14 @@ let selectedValues = await tp.system.multi_suggester(["Happy", "Sad", "Confused"
# <% selectedValues %>
selected values: <% selectedValues %>"""

[[tp.system.functions.multi_suggester.examples]]
name = "Default value for the suggester"
example = """<%*
let selectedValue = await tp.system.multi_suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"], false, "", undefined, ["Happy", "Confused"]);
%>
# <% selectedValue %>
selected value: <% selectedValue %>"""

[tp.web]
name = "web"
description = "This modules contains every internal function related to the web (making web requests)."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,21 +68,24 @@ export class InternalModuleSystem extends InternalModule {
items: T[],
throw_on_cancel: boolean,
placeholder: string,
limit?: number
limit?: number,
default_value?: T
) => Promise<T> {
return async <T>(
text_items: string[] | ((item: T) => string),
items: T[],
throw_on_cancel = false,
placeholder = "",
limit?: number
limit?: number,
default_value?: T
): Promise<T> => {
const suggester = new SuggesterModal(
this.plugin.app,
text_items,
items,
placeholder,
limit
limit,
default_value
);
const promise = new Promise(
(
Expand All @@ -106,21 +109,24 @@ export class InternalModuleSystem extends InternalModule {
items: T[],
throw_on_cancel: boolean,
title: string,
limit?: number
limit?: number,
default_values?: T[]
) => Promise<T[]> {
return async <T>(
text_items: string[] | ((item: T) => string),
items: T[],
throw_on_cancel = false,
title = "",
limit?: number
limit?: number,
default_values?: T[]
): Promise<T[]> => {
const suggester = new MultiSuggesterModal(
this.plugin.app,
text_items,
items,
title,
limit
limit,
default_values
);
const promise = new Promise(
(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ export class MultiSuggesterModal<T> extends Modal {
private text_items: string[] | ((item: T) => string),
private items: T[],
title: string,
limit?: number
limit?: number,
default_values?: T[]
) {
super(app);
this.setTitle(title);
Expand All @@ -49,10 +50,13 @@ export class MultiSuggesterModal<T> extends Modal {
new ButtonComponent(buttonContainer)
.setButtonText("Cancel")
.onClick(() => this.close());
if (default_values) {
this.selectedItems = default_values;
}
}

onOpen(): void {
this.display();
this.processSelectedItems();
}

display(): void {
Expand Down Expand Up @@ -85,6 +89,10 @@ export class MultiSuggesterModal<T> extends Modal {

onChooseItem(item: T): void {
this.selectedItems.push(item);
this.processSelectedItems();
}

private processSelectedItems(): void {
const filteredItems = this.items.filter((item) => {
return !this.selectedItems.some(
(selected_item) => selected_item === item
Expand Down
10 changes: 9 additions & 1 deletion src/core/functions/internal_functions/system/SuggesterModal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ export class SuggesterModal<T> extends FuzzySuggestModal<T> {
private text_items: string[] | ((item: T) => string),
private items: T[],
placeholder: string,
limit?: number
limit?: number,
private default_value?: T
) {
super(app);
this.setPlaceholder(placeholder);
Expand All @@ -22,6 +23,13 @@ export class SuggesterModal<T> extends FuzzySuggestModal<T> {
return this.items;
}

onOpen(): void {
if (this.default_value !== undefined) {
this.inputEl.value = this.getItemText(this.default_value);
this.inputEl.dispatchEvent(new InputEvent("input"));
}
}

onClose(): void {
if (!this.submitted) {
this.reject(new TemplaterError("Cancelled prompt"));
Expand Down
Loading