Set disabled class on TagInput from WithAutocomplete

This commit is contained in:
Henrik Giesel 2021-09-08 14:27:46 +02:00
parent eb3bc08420
commit 7bdf9aaf00
5 changed files with 23 additions and 14 deletions

View file

@ -16,7 +16,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
</script> </script>
<div {id} class="dropdown-menu" aria-labelledby={labelledby}> <div {id} class="dropdown-menu" aria-labelledby={labelledby}>
<div class={`dropdown-content ${className}`}> <div class="dropdown-content {className}">
<slot /> <slot />
</div> </div>
</div> </div>

View file

@ -22,9 +22,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
</script> </script>
<button <button
bind:this={buttonRef}
{id} {id}
tabindex="-1" tabindex="-1"
bind:this={buttonRef}
class="autocomplete-item btn {className}" class="autocomplete-item btn {className}"
class:btn-day={!nightMode} class:btn-day={!nightMode}
class:btn-night={nightMode} class:btn-night={nightMode}

View file

@ -452,16 +452,18 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
<div class="adjust-position"> <div class="adjust-position">
<WithAutocomplete <WithAutocomplete
drop="up" drop="up"
class="d-flex flex-column" class="d-flex flex-column cap-items"
{suggestionsPromise} {suggestionsPromise}
on:update={updateSuggestions} on:update={updateSuggestions}
on:select={({ detail }) => onAutocomplete(detail.selected)} on:select={({ detail }) => onAutocomplete(detail.selected)}
on:choose={({ detail }) => onAutocomplete(detail.chosen)} on:choose={({ detail }) => onAutocomplete(detail.chosen)}
let:createAutocomplete let:createAutocomplete
let:disabled
> >
<TagInput <TagInput
id={tag.id} id={tag.id}
class="tag-input position-absolute top-0 start-0 ps-2 py-0" class="tag-input position-absolute start-0 top-0 ps-2 py-0"
{disabled}
bind:name={activeName} bind:name={activeName}
bind:input={activeInput} bind:input={activeInput}
on:focus={() => { on:focus={() => {
@ -529,8 +531,15 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
} }
} }
.adjust-position :global(.tag-input) { .adjust-position {
:global(.tag-input) {
/* recreates positioning of Tag component */ /* recreates positioning of Tag component */
border-left: 1px solid transparent; border-left: 1px solid transparent;
} }
:global(.cap-items) {
max-height: 7rem;
overflow-y: scroll;
}
}
</style> </style>

View file

@ -17,6 +17,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
export let name: string; export let name: string;
export let input: HTMLInputElement; export let input: HTMLInputElement;
export let disabled: boolean;
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
@ -231,6 +232,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
<input <input
{id} {id}
class={className} class={className}
class:disabled
bind:this={input} bind:this={input}
bind:value={name} bind:value={name}
type="text" type="text"

View file

@ -14,21 +14,20 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
let className: string = ""; let className: string = "";
export { className as class }; export { className as class };
export let drop: "down" | "up" | "left" | "right" = "down"; export let drop: "down" | "up" = "down";
export let suggestionsPromise: Promise<string[]>; export let suggestionsPromise: Promise<string[]>;
let target: HTMLElement; let disabled = true;
let dropdown: Dropdown; let dropdown: Dropdown;
let suggestionsItems: string[] = []; let suggestionsItems: string[] = [];
$: suggestionsPromise.then((items) => { $: suggestionsPromise.then((items) => {
if (items.length > 0) { if (items.length > 0) {
// disabled class will tell Bootstrap not to show menu on clicking disabled = false;
target.classList.remove("disabled");
dropdown.show(); dropdown.show();
} else { } else {
dropdown.hide(); dropdown.hide();
target.classList.add("disabled"); disabled = true;
} }
suggestionsItems = items; suggestionsItems = items;
@ -90,7 +89,6 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
(createDropdown: (element: HTMLElement) => Dropdown) => (createDropdown: (element: HTMLElement) => Dropdown) =>
(element: HTMLElement): any => { (element: HTMLElement): any => {
dropdown = createDropdown(element); dropdown = createDropdown(element);
target = element;
const api = { const api = {
hide: dropdown.hide, hide: dropdown.hide,
@ -131,7 +129,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
</script> </script>
<WithDropdown {drop} toggleOpen={false} let:createDropdown> <WithDropdown {drop} toggleOpen={false} let:createDropdown>
<slot createAutocomplete={createAutocomplete(createDropdown)} /> <slot createAutocomplete={createAutocomplete(createDropdown)} {disabled} />
<DropdownMenu class={className}> <DropdownMenu class={className}>
{#each suggestionsItems as suggestion, index} {#each suggestionsItems as suggestion, index}