diff --git a/src/lib/components/AutoComplete.svelte b/src/lib/components/AutoComplete.svelte new file mode 100644 index 0000000..d63b4a0 --- /dev/null +++ b/src/lib/components/AutoComplete.svelte @@ -0,0 +1,33 @@ + + + diff --git a/src/lib/components/CreateNewAdventure.svelte b/src/lib/components/CreateNewAdventure.svelte index 8b236c6..2f76868 100644 --- a/src/lib/components/CreateNewAdventure.svelte +++ b/src/lib/components/CreateNewAdventure.svelte @@ -17,13 +17,35 @@ const dispatch = createEventDispatcher(); import { onMount } from "svelte"; import { addActivityType, generateDescription, getImage } from "$lib"; + import AutoComplete from "./AutoComplete.svelte"; let modal: HTMLDialogElement; - onMount(() => { + let activityTypes: string[] = []; + + $: selected = ""; + + // on selection add to activityTypes + $: { + if (selected) { + newAdventure = addActivityType(selected, newAdventure); + + if (activityInput.length === 0) { + activityInput = selected; + } else { + activityInput = activityInput + ", " + selected; + } + selected = ""; + } + } + + onMount(async () => { modal = document.getElementById("my_modal_1") as HTMLDialogElement; if (modal) { modal.showModal(); } + let activityFetch = await fetch("/api/activitytypes?type=" + type); + let res = await activityFetch.json(); + activityTypes = res.types; }); function create() { @@ -133,6 +155,7 @@ bind:value={activityInput} class="input input-bordered w-full max-w-xs" /> +
diff --git a/src/lib/components/EditModal.svelte b/src/lib/components/EditModal.svelte index 82021f2..3a0c135 100644 --- a/src/lib/components/EditModal.svelte +++ b/src/lib/components/EditModal.svelte @@ -5,18 +5,42 @@ const dispatch = createEventDispatcher(); import { onMount } from "svelte"; import { addActivityType, generateDescription, getImage } from "$lib"; + import AutoComplete from "./AutoComplete.svelte"; let modal: HTMLDialogElement; console.log(adventureToEdit.id); let originalName = adventureToEdit.name; - onMount(() => { + let activityTypes: string[] = []; + + $: selected = ""; + + // on selection add to activityTypes + $: { + if (selected) { + adventureToEdit = addActivityType(selected, adventureToEdit); + + if (activityInput.length === 0) { + activityInput = selected; + } else { + activityInput = activityInput + ", " + selected; + } + selected = ""; + } + } + + onMount(async () => { modal = document.getElementById("my_modal_1") as HTMLDialogElement; if (modal) { modal.showModal(); } activityInput = (adventureToEdit?.activityTypes || []).join(", "); + let activityFetch = await fetch( + "/api/activitytypes?type=" + adventureToEdit.type + ); + let res = await activityFetch.json(); + activityTypes = res.types; }); function submit() { @@ -120,6 +144,7 @@ bind:value={activityInput} class="input input-bordered w-full max-w-xs" /> +
diff --git a/src/routes/api/activitytypes/+server.ts b/src/routes/api/activitytypes/+server.ts index bd401c4..6b551e7 100644 --- a/src/routes/api/activitytypes/+server.ts +++ b/src/routes/api/activitytypes/+server.ts @@ -48,5 +48,8 @@ export const GET: RequestHandler = async ({ url, locals }) => { } }); + // remove duplicates + array = [...new Set(array)]; + return json({ types: array }, { status: 200 }); }; diff --git a/src/routes/planner/+page.server.ts b/src/routes/planner/+page.server.ts index 65f4418..57342a5 100644 --- a/src/routes/planner/+page.server.ts +++ b/src/routes/planner/+page.server.ts @@ -8,7 +8,10 @@ export const load: PageServerLoad = async (event) => { } const response = await event.fetch("/api/planner"); const result = await response.json(); + const activityTypes = await event.fetch("/api/activitytypes?type=planner"); + const activityTypesResult = await activityTypes.json(); return { result, + activityTypesResult, }; }; diff --git a/src/routes/planner/+page.svelte b/src/routes/planner/+page.svelte index 28c4dd2..7781f85 100644 --- a/src/routes/planner/+page.svelte +++ b/src/routes/planner/+page.svelte @@ -19,15 +19,16 @@ let adventuresPlans: Adventure[] = []; let tripPlans: Trip[] = []; + let activityTypes: String[] = []; + let isLoadingIdeas: boolean = true; let isLoadingTrips: boolean = true; onMount(async () => { - console.log(data); getAllTrips(); - console.log(tripPlans); adventuresPlans = data.result; isLoadingIdeas = false; + activityTypes = data.activityTypesResult.types; }); let isShowingMoreFields: boolean = false; @@ -38,8 +39,6 @@ let adventureToEdit: Adventure | undefined; - console.log(data); - function showToast(action: string) { toastAction = action; isShowingToast = true; @@ -65,10 +64,16 @@ } async function savePlan(event: { detail: Adventure }) { + let types: String[] = []; + if (event.detail.activityTypes && event.detail.activityTypes.length > 0) { + types = event.detail.activityTypes; + } let newArray = await saveAdventure(event.detail, adventuresPlans); if (newArray.length > 0) { adventuresPlans = newArray; showToast("Adventure updated successfully!"); + activityTypes = activityTypes.concat(types); + activityTypes = [...new Set(activityTypes)]; } else { showToast("Failed to update adventure"); } @@ -93,10 +98,16 @@ const createNewAdventure = async (event: { detail: Adventure }) => { isShowingMoreFields = false; + let types: String[] = []; + if (event.detail.activityTypes && event.detail.activityTypes.length > 0) { + types = event.detail.activityTypes; + } let newArray = await addAdventure(event.detail, adventuresPlans); if (newArray.length > 0) { adventuresPlans = newArray; showToast("Adventure added successfully!"); + activityTypes = activityTypes.concat(types); + activityTypes = [...new Set(activityTypes)]; } else { showToast("Failed to add adventure"); } @@ -221,10 +232,12 @@
- Filter by: Activity Type   + Activity Type  
{/if}