2024-02-26 22:45:08 +01:00
|
|
|
<script lang="ts" context="module">
|
|
|
|
|
export interface SearchCameraFilter {
|
|
|
|
|
make?: string;
|
|
|
|
|
model?: string;
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<script lang="ts">
|
|
|
|
|
import { SearchSuggestionType, getSearchSuggestions } from '@immich/sdk';
|
|
|
|
|
import Combobox, { toComboBoxOptions } from '../combobox.svelte';
|
2024-02-27 08:37:37 -08:00
|
|
|
import { handlePromiseError } from '$lib/utils';
|
2024-02-26 22:45:08 +01:00
|
|
|
|
|
|
|
|
export let filters: SearchCameraFilter;
|
|
|
|
|
|
|
|
|
|
let makes: string[] = [];
|
|
|
|
|
let models: string[] = [];
|
|
|
|
|
|
|
|
|
|
$: makeFilter = filters.make;
|
|
|
|
|
$: modelFilter = filters.model;
|
2024-02-27 08:37:37 -08:00
|
|
|
$: handlePromiseError(updateMakes(modelFilter));
|
|
|
|
|
$: handlePromiseError(updateModels(makeFilter));
|
2024-02-26 22:45:08 +01:00
|
|
|
|
|
|
|
|
async function updateMakes(model?: string) {
|
|
|
|
|
makes = await getSearchSuggestions({
|
|
|
|
|
$type: SearchSuggestionType.CameraMake,
|
|
|
|
|
model,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function updateModels(make?: string) {
|
|
|
|
|
models = await getSearchSuggestions({
|
|
|
|
|
$type: SearchSuggestionType.CameraModel,
|
|
|
|
|
make,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<div id="camera-selection">
|
|
|
|
|
<p class="immich-form-label">CAMERA</p>
|
|
|
|
|
|
|
|
|
|
<div class="grid grid-cols-[repeat(auto-fit,minmax(10rem,1fr))] gap-5 mt-1">
|
|
|
|
|
<div class="w-full">
|
|
|
|
|
<Combobox
|
2024-03-19 12:56:41 +00:00
|
|
|
id="camera-make"
|
|
|
|
|
label="Make"
|
2024-02-26 22:45:08 +01:00
|
|
|
on:select={({ detail }) => (filters.make = detail?.value)}
|
2024-03-19 12:56:41 +00:00
|
|
|
options={toComboBoxOptions(makes)}
|
2024-02-26 22:45:08 +01:00
|
|
|
placeholder="Search camera make..."
|
2024-03-19 12:56:41 +00:00
|
|
|
selectedOption={makeFilter ? { label: makeFilter, value: makeFilter } : undefined}
|
2024-02-26 22:45:08 +01:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="w-full">
|
|
|
|
|
<Combobox
|
2024-03-19 12:56:41 +00:00
|
|
|
id="camera-model"
|
|
|
|
|
label="Model"
|
2024-02-26 22:45:08 +01:00
|
|
|
on:select={({ detail }) => (filters.model = detail?.value)}
|
2024-03-19 12:56:41 +00:00
|
|
|
options={toComboBoxOptions(models)}
|
2024-02-26 22:45:08 +01:00
|
|
|
placeholder="Search camera model..."
|
2024-03-19 12:56:41 +00:00
|
|
|
selectedOption={modelFilter ? { label: modelFilter, value: modelFilter } : undefined}
|
2024-02-26 22:45:08 +01:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|