diff --git a/web/.env b/web/.env new file mode 100644 index 0000000..88668b6 --- /dev/null +++ b/web/.env @@ -0,0 +1 @@ +VITE_ENDPOINT=http://localhost:8000 diff --git a/web/.env.production b/web/.env.production new file mode 100644 index 0000000..cf6e652 --- /dev/null +++ b/web/.env.production @@ -0,0 +1 @@ +VITE_ENDPOINT=https://fej.roosens.me/api diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..d451ff1 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,5 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..a797a27 --- /dev/null +++ b/web/README.md @@ -0,0 +1,27 @@ +# Vue 3 + Typescript + Vite + +This template should help get you started developing with Vue 3 and Typescript in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur). Make sure to enable `vetur.experimental.templateInterpolationService` in settings! + +### If Using ` + + diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..ae1647d --- /dev/null +++ b/web/package.json @@ -0,0 +1,20 @@ +{ + "name": "fej-frontend", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "serve": "vite preview" + }, + "dependencies": { + "vue": "^3.0.5", + "vue-router": "^4.0.6" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^1.2.1", + "@vue/compiler-sfc": "^3.0.5", + "typescript": "^4.1.3", + "vite": "^2.2.1", + "vue-tsc": "^0.0.25" + } +} diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/web/public/favicon.ico differ diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..ca4df88 --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/web/src/api/ivago.ts b/web/src/api/ivago.ts new file mode 100644 index 0000000..662e531 --- /dev/null +++ b/web/src/api/ivago.ts @@ -0,0 +1,32 @@ +export class Street { + name: string; + city: string; + + constructor(name: string, city: string) { + this.name = name; + this.city = city; + } +} + +export class Ivago { + base_url: string; + + constructor(url: string) { + this.base_url = url; + } + + async search(search_term: string): Promise { + var r = await fetch(`${this.base_url}/ivago/search?` + new URLSearchParams({ + q: search_term, + })); + + if (!r.ok) { + return Promise.reject(); + } + + var json = await r.json(); + + return json.map((o: {name: string, city: string}) => new Street(o.name, o.city)); + } +} + diff --git a/web/src/assets/logo.png b/web/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/web/src/assets/logo.png differ diff --git a/web/src/components/HelloWorld.vue b/web/src/components/HelloWorld.vue new file mode 100644 index 0000000..12f05c8 --- /dev/null +++ b/web/src/components/HelloWorld.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/web/src/components/Home.vue b/web/src/components/Home.vue new file mode 100644 index 0000000..f5cc87a --- /dev/null +++ b/web/src/components/Home.vue @@ -0,0 +1,13 @@ + + + diff --git a/web/src/components/Ivago.vue b/web/src/components/Ivago.vue new file mode 100644 index 0000000..923f85c --- /dev/null +++ b/web/src/components/Ivago.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/web/src/components/Nav.vue b/web/src/components/Nav.vue new file mode 100644 index 0000000..fcf9c26 --- /dev/null +++ b/web/src/components/Nav.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100644 index 0000000..af7463e --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,8 @@ +import { createApp } from 'vue'; +import App from './App.vue'; +import router from './router'; + +const app = createApp(App) +app.use(router) + +app.mount('#app') diff --git a/web/src/router.ts b/web/src/router.ts new file mode 100644 index 0000000..2d7fa58 --- /dev/null +++ b/web/src/router.ts @@ -0,0 +1,21 @@ +import { createWebHistory, createRouter } from "vue-router"; +import Home from './components/Home.vue'; +import Ivago from './components/Ivago.vue'; + +const routes = [ + { + path: "/", + component: Home, + }, + { + path: "/ivago", + component: Ivago, + }, +]; + +const router = createRouter({ + history: createWebHistory(), + routes, +}); + +export default router; diff --git a/web/src/shims-vue.d.ts b/web/src/shims-vue.d.ts new file mode 100644 index 0000000..ac1ded7 --- /dev/null +++ b/web/src/shims-vue.d.ts @@ -0,0 +1,5 @@ +declare module '*.vue' { + import { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..e754e65 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "jsx": "preserve", + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "types": ["vite/client"] + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/web/vite.config.ts b/web/vite.config.ts new file mode 100644 index 0000000..315212d --- /dev/null +++ b/web/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()] +})