cyca/resources/js/components/GroupsBrowser/GroupsBrowserItem.vue
Richard Dern 400e3d01f1 Refresh
2022-01-12 00:35:37 +01:00

122 lines
4.3 KiB
Vue
Executable File

<template>
<div class="list-item">
<div class="handle">
<svg fill="currentColor" width="16" height="16">
<use v-bind:xlink:href="icon('move-v')" />
</svg>
</div>
<div class="flex-grow flex justify-between">
<div>
<h2 class="text-black dark:text-white">{{ group.name }}</h2>
<div v-if="group.creator" class="mb-1">
{{ __("Created by") }} {{ group.creator.name }}
</div>
<div class="mb-1">{{ group.description }}</div>
<div class="flex items-center space-x-1">
<span
v-if="group.pivot"
class="badge"
v-bind:class="'group-status-' + group.pivot.status"
>{{ status }}</span
>
<span
class="badge default"
v-bind:class="{
'group-invite-only': group.invite_only,
}"
v-if="group.invite_only"
>{{ __("Invite only") }}</span
>
<span
class="badge"
v-bind:class="{
success: group.auto_accept_users,
warning: !group.auto_accept_users,
}"
v-if="!group.invite_only"
>{{
group.auto_accept_users
? __("Auto-accept users")
: __("New users must be approved")
}}</span
>
</div>
</div>
</div>
<div class="badges">
<span
v-if="group.pending_users_count > 0"
class="badge warning"
v-bind:title="__('Pending users')"
><svg fill="currentColor" width="16" height="16">
<use v-bind:xlink:href="icon('group')" /></svg
>{{ group.pending_users_count }}</span
>
<span class="badge success" v-bind:title="__('Active users')"
><svg fill="currentColor" width="16" height="16">
<use v-bind:xlink:href="icon('group')" /></svg
>{{ group.active_users_count }}</span
>
<button
class="info"
v-if="group.pivot"
v-on:click="$emit('selected', group)"
>
<svg fill="currentColor" width="16" height="16">
<use v-bind:xlink:href="icon('update')" />
</svg>
<span>{{ __("Edit") }} </span>
</button>
<button
class="success"
v-if="!group.pivot"
v-on:click="$emit('join', group)"
>
<svg fill="currentColor" width="16" height="16">
<use v-bind:xlink:href="icon('join')" />
</svg>
<span
>{{ group.auto_accept_users ? __("Join") : __("Apply") }}
</span>
</button>
</div>
</div>
</template>
<script>
export default {
props: ["group", "movable"],
computed: {
status: function () {
const self = this;
if (!self.group.pivot) {
return;
}
switch (self.group.pivot.status) {
case "own":
return self.__("My own group");
case "created":
return self.__("Created by me");
case "invited":
return self.__("Invited to join");
case "accepted":
return self.__("Accepted");
case "rejected":
return self.__("Rejected");
case "left":
return self.__("Group left");
case "joining":
return self.__("Waiting for joining");
}
},
},
methods: {
select: function () {
this.$emit("selected");
},
},
};
</script>