feat(profile): 相互リンク機能の追加 (MisskeyIO#675)
This commit is contained in:
parent
b059162324
commit
b6a5a36eaa
37 changed files with 1130 additions and 20 deletions
|
@ -11,9 +11,24 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
<option :value="null">{{ i18n.ts.notes }}</option>
|
||||
<option value="all">{{ i18n.ts.all }}</option>
|
||||
<option value="files">{{ i18n.ts.withFiles }}</option>
|
||||
<option value="mutualBanners">{{ i18n.ts.mutualBanner }}</option>
|
||||
</MkTab>
|
||||
</template>
|
||||
<MkNotes :noGap="true" :pagination="pagination" :class="$style.tl"/>
|
||||
<MkNotes v-if="tab !== 'mutualBanners'" :noGap="true" :pagination="pagination" :class="$style.tl"/>
|
||||
<div v-else>
|
||||
<div v-if="mutualBanners && mutualBanners.length > 0" :class="$style.mutualBanners">
|
||||
<div v-for="(mutualBanner, i) in mutualBanners" :key="i" class="_margin">
|
||||
<MkLink :hideIcon="true" :url="mutualBanner.url">
|
||||
<img :class="$style.banner" :src="mutualBanner.imgUrl"/>
|
||||
</MkLink>
|
||||
<p>{{ (mutualBanner.description === '' || mutualBanner.description === null) ? i18n.ts.noDescription : mutualBanner.description }}</p>
|
||||
<MkButton v-if="$i?.id === user.id" @click="mutualBannerUnFollow(mutualBanner.id)">{{ i18n.ts.unfollow }}</MkButton>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<p>{{ i18n.ts.nothing }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</MkStickyContainer>
|
||||
</template>
|
||||
|
||||
|
@ -23,11 +38,17 @@ import * as Misskey from 'misskey-js';
|
|||
import MkNotes from '@/components/MkNotes.vue';
|
||||
import MkTab from '@/components/MkTab.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import MkLink from '@/components/MkLink.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import { $i } from '@/account.js';
|
||||
import * as os from '@/os.js';
|
||||
|
||||
const props = defineProps<{
|
||||
user: Misskey.entities.UserDetailed;
|
||||
}>();
|
||||
|
||||
const mutualBanners = ref(props.user.mutualBanners);
|
||||
|
||||
const tab = ref<string | null>('all');
|
||||
|
||||
const pagination = computed(() => tab.value === 'featured' ? {
|
||||
|
@ -47,6 +68,17 @@ const pagination = computed(() => tab.value === 'featured' ? {
|
|||
withChannelNotes: true,
|
||||
},
|
||||
});
|
||||
|
||||
function mutualBannerUnFollow(id:string) {
|
||||
os.apiWithDialog('i/update', {
|
||||
mutualBannerPining: [
|
||||
...($i?.mutualBanners?.map(banner => banner.id) ?? []).filter(bannerId => bannerId !== id),
|
||||
],
|
||||
});
|
||||
if (mutualBanners.value) {
|
||||
mutualBanners.value = mutualBanners.value.filter(banner => banner.id !== id);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" module>
|
||||
|
@ -60,4 +92,20 @@ const pagination = computed(() => tab.value === 'featured' ? {
|
|||
border-radius: var(--radius);
|
||||
overflow: clip;
|
||||
}
|
||||
|
||||
.banner {
|
||||
max-width: 300px;
|
||||
min-width: 200px;
|
||||
max-height: 60px;
|
||||
min-height: 40px;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.mutualBanners{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-around;
|
||||
background: var(--panel);
|
||||
border-radius: var(--radius);
|
||||
}
|
||||
</style>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue