2021-02-24 19:06:48 +01:00
|
|
|
<template>
|
|
|
|
<div class="activity-item">
|
2022-07-12 10:55:28 +02:00
|
|
|
<o-icon :icon="'cog'" :type="iconColor" />
|
2021-02-24 19:06:48 +01:00
|
|
|
<div class="subject">
|
2022-07-12 10:55:28 +02:00
|
|
|
<i18n-t :keypath="translation" tag="p">
|
|
|
|
<template #group>
|
|
|
|
<router-link
|
|
|
|
v-if="activity.object"
|
|
|
|
:to="{
|
|
|
|
name: RouteName.GROUP,
|
|
|
|
params: {
|
|
|
|
preferredUsername: subjectParams.group_federated_username,
|
|
|
|
},
|
|
|
|
}"
|
|
|
|
>{{ subjectParams.group_name }}</router-link
|
|
|
|
>
|
|
|
|
<b v-else>{{ subjectParams.group_name }}</b>
|
|
|
|
</template>
|
|
|
|
<template #profile>
|
|
|
|
<popover-actor-card :actor="activity.author" :inline="true">
|
|
|
|
<b>
|
|
|
|
{{
|
|
|
|
$t("{'@'}{username}", {
|
|
|
|
username: usernameWithDomain(activity.author),
|
|
|
|
})
|
|
|
|
}}</b
|
|
|
|
></popover-actor-card
|
|
|
|
></template
|
|
|
|
></i18n-t
|
2021-02-24 19:06:48 +01:00
|
|
|
>
|
2022-07-12 10:55:28 +02:00
|
|
|
<i18n-t
|
|
|
|
:keypath="detail"
|
2021-02-24 19:06:48 +01:00
|
|
|
v-for="detail in details"
|
|
|
|
:key="detail"
|
|
|
|
tag="p"
|
2021-06-15 17:25:33 +02:00
|
|
|
class="has-text-grey-dark"
|
2021-02-24 19:06:48 +01:00
|
|
|
>
|
2022-07-12 10:55:28 +02:00
|
|
|
<template #profile>
|
|
|
|
<popover-actor-card :actor="activity.author" :inline="true">
|
|
|
|
<b>
|
|
|
|
{{
|
|
|
|
$t("{'@'}{username}", {
|
|
|
|
username: usernameWithDomain(activity.author),
|
|
|
|
})
|
|
|
|
}}</b
|
|
|
|
></popover-actor-card
|
|
|
|
>
|
|
|
|
</template>
|
|
|
|
<template #group>
|
|
|
|
<router-link
|
|
|
|
v-if="activity.object"
|
|
|
|
:to="{
|
2021-02-24 19:06:48 +01:00
|
|
|
name: RouteName.GROUP,
|
2022-07-12 10:55:28 +02:00
|
|
|
params: { preferredUsername: usernameWithDomain(activity.object as IActor) },
|
2021-02-24 19:06:48 +01:00
|
|
|
}"
|
2022-07-12 10:55:28 +02:00
|
|
|
>{{ subjectParams.group_name }}</router-link
|
|
|
|
>
|
|
|
|
<b v-else>{{ subjectParams.group_name }}</b>
|
|
|
|
</template>
|
|
|
|
<template #old_group_name>
|
|
|
|
<b v-if="subjectParams.old_group_name">{{
|
|
|
|
subjectParams.old_group_name
|
|
|
|
}}</b>
|
|
|
|
</template>
|
|
|
|
</i18n-t>
|
2021-06-15 17:25:33 +02:00
|
|
|
<small class="has-text-grey-dark activity-date">{{
|
2022-07-12 10:55:28 +02:00
|
|
|
formatTimeString(activity.insertedAt)
|
2021-02-24 19:06:48 +01:00
|
|
|
}}</small>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
2022-07-12 10:55:28 +02:00
|
|
|
<script lang="ts" setup>
|
|
|
|
import {
|
|
|
|
useIsActivityAuthorCurrentActor,
|
|
|
|
useActivitySubjectParams,
|
|
|
|
} from "@/composition/activity";
|
|
|
|
import { IActivity } from "@/types/activity.model";
|
|
|
|
import { IActor, IGroup, usernameWithDomain } from "@/types/actor";
|
2021-02-24 19:06:48 +01:00
|
|
|
import { ActivityGroupSubject, GroupVisibility, Openness } from "@/types/enums";
|
2022-07-12 10:55:28 +02:00
|
|
|
import { computed } from "vue";
|
2021-02-24 19:06:48 +01:00
|
|
|
import RouteName from "../../router/name";
|
|
|
|
import PopoverActorCard from "../Account/PopoverActorCard.vue";
|
2022-07-12 10:55:28 +02:00
|
|
|
import { formatTimeString } from "@/filters/datetime";
|
2021-02-24 19:06:48 +01:00
|
|
|
|
2022-07-12 10:55:28 +02:00
|
|
|
const props = defineProps<{
|
|
|
|
activity: IActivity;
|
|
|
|
}>();
|
2021-02-24 19:06:48 +01:00
|
|
|
|
2022-07-12 10:55:28 +02:00
|
|
|
const isAuthorCurrentActor = useIsActivityAuthorCurrentActor()(props.activity);
|
2021-02-24 19:06:48 +01:00
|
|
|
|
2022-07-12 10:55:28 +02:00
|
|
|
const subjectParams = useActivitySubjectParams()(props.activity);
|
2021-02-24 19:06:48 +01:00
|
|
|
|
2022-07-12 10:55:28 +02:00
|
|
|
const translation = computed((): string | undefined => {
|
|
|
|
switch (props.activity.subject) {
|
|
|
|
case ActivityGroupSubject.GROUP_CREATED:
|
|
|
|
if (isAuthorCurrentActor) {
|
|
|
|
return "You created the group {group}.";
|
2021-02-24 19:06:48 +01:00
|
|
|
}
|
2022-07-12 10:55:28 +02:00
|
|
|
return "{profile} created the group {group}.";
|
|
|
|
case ActivityGroupSubject.GROUP_UPDATED:
|
|
|
|
if (isAuthorCurrentActor) {
|
|
|
|
return "You updated the group {group}.";
|
2021-02-24 19:06:48 +01:00
|
|
|
}
|
2022-07-12 10:55:28 +02:00
|
|
|
return "{profile} updated the group {group}.";
|
|
|
|
default:
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const iconColor = computed((): string | undefined => {
|
|
|
|
switch (props.activity.subject) {
|
|
|
|
case ActivityGroupSubject.GROUP_CREATED:
|
|
|
|
return "is-success";
|
|
|
|
case ActivityGroupSubject.GROUP_UPDATED:
|
|
|
|
return "is-grey";
|
|
|
|
default:
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const group = computed(() => props.activity.object as IGroup);
|
|
|
|
|
|
|
|
const details = computed((): string[] => {
|
|
|
|
const localDetails = [];
|
|
|
|
const changes = subjectParams.group_changes.split(",");
|
|
|
|
if (changes.includes("name") && subjectParams.old_group_name) {
|
|
|
|
localDetails.push("{old_group_name} was renamed to {group}.");
|
|
|
|
}
|
|
|
|
if (changes.includes("visibility") && group.value.visibility) {
|
|
|
|
switch (group.value.visibility) {
|
|
|
|
case GroupVisibility.PRIVATE:
|
|
|
|
localDetails.push("Visibility was set to private.");
|
|
|
|
break;
|
|
|
|
case GroupVisibility.PUBLIC:
|
|
|
|
localDetails.push("Visibility was set to public.");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
localDetails.push("Visibility was set to an unknown value.");
|
|
|
|
break;
|
2021-02-24 19:06:48 +01:00
|
|
|
}
|
2022-07-12 10:55:28 +02:00
|
|
|
}
|
|
|
|
if (changes.includes("openness") && group.value.openness) {
|
|
|
|
switch (group.value.openness) {
|
|
|
|
case Openness.INVITE_ONLY:
|
|
|
|
localDetails.push("The group can now only be joined with an invite.");
|
|
|
|
break;
|
|
|
|
case Openness.MODERATED:
|
|
|
|
localDetails.push(
|
|
|
|
"The group can now be joined by anyone, but new members need to be approved by an administrator."
|
|
|
|
);
|
|
|
|
break;
|
|
|
|
case Openness.OPEN:
|
|
|
|
localDetails.push("The group can now be joined by anyone.");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
localDetails.push("Unknown value for the openness setting.");
|
|
|
|
break;
|
2021-02-24 19:06:48 +01:00
|
|
|
}
|
|
|
|
}
|
2022-07-12 10:55:28 +02:00
|
|
|
if (changes.includes("address") && group.value.physicalAddress) {
|
|
|
|
localDetails.push("The group's physical address was changed.");
|
|
|
|
}
|
|
|
|
if (changes.includes("avatar") && group.value.avatar) {
|
|
|
|
localDetails.push("The group's avatar was changed.");
|
|
|
|
}
|
|
|
|
if (changes.includes("banner") && group.value.banner) {
|
|
|
|
localDetails.push("The group's banner was changed.");
|
|
|
|
}
|
|
|
|
if (changes.includes("summary") && group.value.summary) {
|
|
|
|
localDetails.push("The group's short description was changed.");
|
|
|
|
}
|
|
|
|
return localDetails;
|
|
|
|
});
|
2021-02-24 19:06:48 +01:00
|
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
@import "./activity.scss";
|
|
|
|
</style>
|