upend/webui/src/components/display/UpLink.svelte

57 lines
1.2 KiB
Svelte
Raw Normal View History

2021-11-11 23:37:42 +01:00
<script lang="ts">
import { getContext } from "svelte";
2021-12-19 19:25:16 +01:00
import { useNavigate, useLocation, useParams } from "svelte-navigator";
import { readable, Writable } from "svelte/store";
2021-11-11 23:37:42 +01:00
import type { Address, VALUE_TYPE } from "upend/types";
const params = useParams();
const location = useLocation();
2021-12-19 19:25:16 +01:00
const navigate = useNavigate();
2021-11-11 23:37:42 +01:00
export let to: {
2021-11-11 23:37:42 +01:00
entity?: Address;
attribute?: string;
value?: { t: VALUE_TYPE; c: string };
};
2021-11-11 23:37:42 +01:00
const context = getContext("browse") as
| { index: Writable<number> }
| undefined;
2022-01-28 16:46:08 +01:00
const index = context ? context.index : readable(0);
2021-11-11 23:37:42 +01:00
2021-12-19 19:25:16 +01:00
function onClick() {
if (to.entity) {
if ($location.pathname.startsWith("/browse")) {
let addresses = $params.addresses.split(",");
const routerTo =
"/browse/" +
addresses
.slice(0, $index + 1)
.concat([to.entity])
.join(",");
navigate(routerTo);
return true;
} else {
navigate(`/browse/${to.entity}`);
}
2021-11-30 23:28:50 +01:00
}
2021-11-11 23:37:42 +01:00
}
</script>
2021-12-19 19:25:16 +01:00
<a
class="uplink"
href="/#/browse/{to.entity}"
on:click|preventDefault={onClick}
>
2021-11-11 23:37:42 +01:00
<slot />
2021-12-19 19:25:16 +01:00
</a>
<style lang="scss">
:global(.uplink) {
text-decoration: none;
}
</style>