Skip to content
Merged
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
39 changes: 21 additions & 18 deletions packages/frontend/src/lib/select/ModelSelect.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,23 @@ import Select from './Select.svelte';
import Fa from 'svelte-fa';
import type { ModelInfo } from '@shared/models/IModelInfo';

export let disabled: boolean = false;
/**
* Recommended model ids
*/
export let recommended: string[] | undefined = undefined;
interface Props {
disabled?: boolean;
/**
* Recommended model ids
*/
recommended?: string[];
/**
* List of models
*/
models: ModelInfo[];
/**
* Current value selected
*/
value: ModelInfo | undefined;
}

/**
* List of models
*/
export let models: ModelInfo[];
let { disabled = false, recommended, models, value = $bindable() }: Props = $props();

function getModelSortingScore(modelInfo: ModelInfo): number {
let score: number = 0;
Expand All @@ -22,21 +29,17 @@ function getModelSortingScore(modelInfo: ModelInfo): number {
return score;
}

/**
* Current value selected
*/
export let value: ModelInfo | undefined = undefined;

/**
* Handy mechanism to provide the mandatory property `label` and `value` to the Select component
*/
let selected: (ModelInfo & { label: string; value: string }) | undefined = undefined;
$: {
let selected: (ModelInfo & { label: string; value: string }) | undefined = $derived.by(() => {
// let's select a default model
if (value) {
selected = { ...value, label: value.name, value: value.id };
return { ...value, label: value.name, value: value.id };
} else {
return undefined;
}
}
});

function handleOnChange(nValue: (ModelInfo & { label: string; value: string }) | undefined): void {
value = nValue;
Expand Down
Loading