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}