Compare commits

..

No commits in common. "e04314217b13b52cecb8bd5b707dc1f34f31a568" and "68ec2e34e1efb8c168b75d71536df23a6349e592" have entirely different histories.

7 changed files with 41 additions and 4350 deletions

View File

@ -1,5 +1,4 @@
{ {
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": { "compilerOptions": {
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {

4299
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
import SidebarEntry from './SidebarEntry.svelte'; import SidebarEntry from './SidebarEntry.svelte';
$: logged_in = false; $: logged_in = false;
$: currentPage = $page.url.pathname; $: currentPage = $page.path;
const unsubscribe = UserStore.subscribe((value) => { const unsubscribe = UserStore.subscribe((value) => {
logged_in = value.isLoggedIn; logged_in = value.isLoggedIn;
@ -23,7 +23,7 @@
<div <div
class="flex flex-col w-64 h-screen px-4 py-8 bg-white border-r dark:bg-gray-800 dark:border-gray-600" class="flex flex-col w-64 h-screen px-4 py-8 bg-white border-r dark:bg-gray-800 dark:border-gray-600"
> >
<img class="h-36 w-36" src="/icon_128.png" alt="LinkyLinky Logo (White kauft.es K on red background)"> <img class="h-36 w-36" src="./icon_128.png" alt="LinkyLinky Logo (White kauft.es K on red background)">
<h2 class="text-3xl font-semibold text-gray-800 dark:text-white">LinkyLinky</h2> <h2 class="text-3xl font-semibold text-gray-800 dark:text-white">LinkyLinky</h2>
<!-- <div class="relative mt-6"> <!-- <div class="relative mt-6">
<span class="absolute inset-y-0 left-0 flex items-center pl-3"> <span class="absolute inset-y-0 left-0 flex items-center pl-3">
@ -47,7 +47,7 @@
<div class="flex flex-col justify-between flex-1 mt-6"> <div class="flex flex-col justify-between flex-1 mt-6">
<nav> <nav>
<SidebarEntry title="Dashboard" href="" pageUrl="/" bind:currentPage> <SidebarEntry title="Dashboard" href="./" pageUrl="/" bind:currentPage>
<svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path <path
d="M19 11H5M19 11C20.1046 11 21 11.8954 21 13V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V13C3 11.8954 3.89543 11 5 11M19 11V9C19 7.89543 18.1046 7 17 7M5 11V9C5 7.89543 5.89543 7 7 7M7 7V5C7 3.89543 7.89543 3 9 3H15C16.1046 3 17 3.89543 17 5V7M7 7H17" d="M19 11H5M19 11C20.1046 11 21 11.8954 21 13V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V13C3 11.8954 3.89543 11 5 11M19 11V9C19 7.89543 18.1046 7 17 7M5 11V9C5 7.89543 5.89543 7 7 7M7 7V5C7 3.89543 7.89543 3 9 3H15C16.1046 3 17 3.89543 17 5V7M7 7H17"
@ -62,7 +62,7 @@
<hr class="my-6 dark:border-gray-600" /> <hr class="my-6 dark:border-gray-600" />
{#if logged_in} {#if logged_in}
<SidebarEntry title="Manage Links" href="/links" pageUrl="/links" bind:currentPage> <SidebarEntry title="Manage Links" href="./links" pageUrl="/links" bind:currentPage>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5" class="h-5 w-5"
@ -78,7 +78,7 @@
/> />
</svg> </svg>
</SidebarEntry> </SidebarEntry>
<SidebarEntry title="All visits" href="/visits" pageUrl="/visits" bind:currentPage> <SidebarEntry title="All visits" href="./visits" pageUrl="/visits" bind:currentPage>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5" class="h-5 w-5"
@ -122,7 +122,7 @@
<span class="mx-4 font-medium">Logout</span> <span class="mx-4 font-medium">Logout</span>
</button> </button>
{:else} {:else}
<SidebarEntry title="Login" href="/login" pageUrl="/login" bind:currentPage> <SidebarEntry title="Login" href="./login" pageUrl="/login" bind:currentPage>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5" class="h-5 w-5"

View File

@ -1,7 +1,10 @@
<script> <script>
import { page } from '$app/stores';
import Apiclient from '$lib/Apiclient'; import Apiclient from '$lib/Apiclient';
import UserStore from '$lib/UserStore'; import UserStore from '$lib/UserStore';
import { onDestroy, onMount } from 'svelte'; import { onDestroy } from 'svelte';
let shortcode = $page.query.get('shortcode');
$: urlDetails = { $: urlDetails = {
shortcode: 'Loading...', shortcode: 'Loading...',
@ -11,27 +14,21 @@
}; };
$: urlVisists = []; $: urlVisists = [];
let visitQuery; let visitQuery;
let shortcode;
onMount(async () => { // Yes i know this isn't the best way to implement this, but linkylinky dashboard is just a oneshot sideproject r/n.
const params = new URLSearchParams(window.location.search); const unsubscribe = UserStore.subscribe((value) => {
let shortcode = params.get('shortcode'); if (value.isLoggedIn) {
Apiclient.getUrlDetails(shortcode).then((res) => {
// Yes i know this isn't the best way to implement this, but linkylinky dashboard is just a oneshot sideproject r/n. urlDetails = res;
const unsubscribe = UserStore.subscribe((value) => { unsubscribe();
if (value.isLoggedIn) { });
Apiclient.getUrlDetails(shortcode).then((res) => { visitQuery = Apiclient.getUrlVisits(shortcode).then((res) => {
urlDetails = res; urlVisists = res;
unsubscribe(); });
}); }
visitQuery = Apiclient.getUrlVisits(shortcode).then((res) => {
urlVisists = res;
});
}
});
onDestroy(unsubscribe);
}); });
onDestroy(unsubscribe);
</script> </script>
<h2 class="text-3xl font-bold text-gray-800 dark:text-gray-100 pb-6">Details: {shortcode}</h2> <h2 class="text-3xl font-bold text-gray-800 dark:text-gray-100 pb-6">Details: {shortcode}</h2>

View File

@ -52,7 +52,7 @@
Loading data... Loading data...
</td> </td>
<td class="px-6 py-4 whitespace-nowrap text-sm"> <td class="px-6 py-4 whitespace-nowrap text-sm">
<p href="#">Loading data...</p> <a href="#">Loading data...</a>
</td> </td>
<td class="px-6 py-4 whitespace-nowrap text-sm"> Loading data... </td> <td class="px-6 py-4 whitespace-nowrap text-sm"> Loading data... </td>
<td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium"> <td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">

View File

@ -1,30 +1,25 @@
/** @type {import('@sveltejs/kit').Config} */ import preprocess from 'svelte-preprocess';
import preprocess from "svelte-preprocess"; import staticAdapter from '@sveltejs/adapter-static';
import adapterStatic from '@sveltejs/adapter-static';
/** @type {import('@sveltejs/kit').Config} */
const config = { const config = {
kit: { kit: {
adapter: adapterStatic({ // hydrate the <div id="svelte"> element in src/app.html
// default options are shown target: '#svelte',
pages: 'build', adapter: staticAdapter(),
assets: 'build',
fallback: null,
precompress: false
}),
trailingSlash: 'always',
prerender: {
// This can be false if you're using a fallback (i.e. SPA mode)
default: true
},
files: { files: {
assets: 'static' assets: 'static'
} },
paths: {
base: '/dashboard',
},
}, },
preprocess: [ preprocess: [
preprocess({ preprocess({
postcss: true postcss: true
}) })
], ]
}; };
export default config; export default config;

View File

@ -1,12 +1,11 @@
const config = { const config = {
mode: "jit", mode: 'jit',
content: [ darkMode: 'media',
"./src/**/*.{html,js,svelte,ts}", purge: ['./src/**/*.{html,js,svelte,ts}'],
],
theme: { theme: {
extend: {}, extend: {}
}, },
plugins: [], plugins: []
}; };
module.exports = config; module.exports = config;