fetch identification in Address.vue

feat/vaults
Tomáš Mládek 2021-03-21 20:29:30 +01:00 committed by Tomáš Mládek
parent b051529da6
commit fef616a92f
2 changed files with 50 additions and 7 deletions

View File

@ -2,14 +2,19 @@
<div class="address">
<a v-if="isFile" :href="`/api/raw/${address}`">{{ address }}</a>
<template v-else>
<router-link v-if="link" :to="{name: 'Inspect', params: {address}}">{{ address }}</router-link>
<template v-else>{{ address }}</template>
<router-link v-if="link" :to="{ name: 'Inspect', params: { address } }">
{{ inferredId || address }}
</router-link>
<template v-else>{{ inferredId || address }}</template>
</template>
</div>
</template>
<script lang="ts">
import {defineComponent} from "vue";
import { ListingResult } from "@/types/base";
import { fetcher } from "@/utils";
import useSWRV from "swrv";
import { computed, defineComponent } from "vue";
export default defineComponent({
name: "Address",
@ -17,13 +22,51 @@ export default defineComponent({
address: String,
link: {
type: Boolean,
default: false
default: false,
},
isFile: {
type: Boolean,
default: false
default: false,
},
resolve: {
type: Boolean,
default: true
}
}
},
setup(props) {
const { data: addressEntries } = useSWRV<ListingResult, unknown>(
() => `/api/obj/${props.address}`,
fetcher
);
const { data: typeId } = useSWRV<ListingResult, unknown>(() => {
if (!props.isFile && props.resolve) {
const entries = Object.values(addressEntries?.value || {});
const isEntry = entries.find(
(entry) => entry.entity === props.address && entry.attribute === "IS"
);
if (isEntry) {
return `/api/obj?query=(matches "${isEntry.value.c}" "TYPE_ID" ?)`;
}
}
return null;
}, fetcher);
const inferredId = computed(() => {
const typeIdValue = Object.values(typeId?.value || {})[0];
if (typeIdValue) {
return Object.values(addressEntries?.value || []).find(
(entry) =>
entry.entity === props.address &&
entry.attribute === typeIdValue.value.c
)?.value.c;
}
});
return {
inferredId,
};
},
});
</script>

View File

@ -1,7 +1,7 @@
<template>
<div class="inspect">
<h2>
<Address :address="address" :is-file="backlinks.some(([_, e]) => e.attribute === 'FILE_IS')"/>
<Address :address="address" :is-file="backlinks.some(([_, e]) => e.attribute === 'FILE_IS')" :resolve="false"/>
</h2>
<div v-if="!error">
<template v-if="attributes.length">