In my application I have a select that I use to choose an item. When I delete an item from the array I want to update the list but I cannot find a way to do it
App.svelte
<script>
import Car from './Cars.svelte'
import MaintainCar from './MaintainCar.svelte'
import { cars } from './store.js'
</script>
<Car {cars}/>
<MaintainCar {cars} />
Cars.svelte
<script>
export let cars
export let selected_car = ''
let colour = ''
let car_list = getCars($cars)
$: colour = $cars[selected_car]
function getCars(cars) {
let car_list = []
for (const [key, value] of Object.entries(cars)) {
car_list.push(key);
}
if (!selected_car) {
selected_car = car_list[0]
colour = cars[selected_car]
}
return car_list
}
function selectCar() {
colour = $cars[selected_car]
}
</script>
<select bind:value={selected_car} on:click={selectCar}>
{#each car_list as car}
<option value={car}>
{car}
</option>
{/each}
</select>
<input type="text" bind:value={colour} placeholder="colour"/>
MaintainCars.svelte
<div id='maintain'>
<input type="text" bind:value={car} placeholder="car"/>
<input type="text" bind:value={colour} placeholder="colour"/>
<div>
<button class="select-button" on:click={deleteCar}>Delete</button>
</div>
</div>
<script>
export let cars
let car = ''
$: colour = checkCar(car)
function checkCar(car) {
colour = '';
if (car && car in $cars) {
colour = $cars[car];
}
return colour
}
function deleteCar() {
if (car in $cars) {
delete $cars[car]
car = ''
colour = ''
console.log($cars)
}
}
</script>
store.js
import { writable } from 'svelte/store'
export const cars = writable({'Audi': 'red', 'BMW':'blue', 'Hillman': 'green'})