Merge pull request #5642 from christianbeeznest/fixes-updates30
	
		
	
				
					
				
			Internal: Add missing GroupSearch filepull/5646/head
						commit
						aaeb7dcb0a
					
				@ -0,0 +1,86 @@ | 
				
			||||
<template> | 
				
			||||
  <BaseCard class="mb-2"> | 
				
			||||
    <template #header> | 
				
			||||
      <div class="px-4 py-2 -mb-2 bg-gray-15"> | 
				
			||||
        <h2 class="text-h5">{{ headerTitle }}</h2> | 
				
			||||
      </div> | 
				
			||||
    </template> | 
				
			||||
    <div class="flex flex-col items-end"> | 
				
			||||
      <div class="w-full flex justify-between items-center mb-2"> | 
				
			||||
        <label for="search-query" class="mr-2">{{ t('Groups') }}</label> | 
				
			||||
        <BaseInputText | 
				
			||||
          id="search-query" | 
				
			||||
          v-model="query" | 
				
			||||
          class="flex-grow" | 
				
			||||
          label="" | 
				
			||||
        /> | 
				
			||||
      </div> | 
				
			||||
      <BaseButton | 
				
			||||
        label="Search" | 
				
			||||
        icon="search" | 
				
			||||
        @click="handleFormSearch" | 
				
			||||
        type="secondary" | 
				
			||||
        class="self-end" | 
				
			||||
      /> | 
				
			||||
    </div> | 
				
			||||
  </BaseCard> | 
				
			||||
 | 
				
			||||
  <BaseCard v-if="groups.length" class="mb-2"> | 
				
			||||
    <template #header> | 
				
			||||
      <div class="px-4 py-2 -mb-2 bg-gray-15"> | 
				
			||||
        <h2 class="text-h5">{{ t('Groups') }}</h2> | 
				
			||||
      </div> | 
				
			||||
    </template> | 
				
			||||
    <div class="grid md:grid-cols-2 lg:grid-cols-4 gap-4 p-4"> | 
				
			||||
      <div v-for="group in groups" :key="group.id" class="group-card"> | 
				
			||||
        <div class="group-image flex justify-center"> | 
				
			||||
          <img :src="group.image" class="rounded w-16 h-16" /> | 
				
			||||
        </div> | 
				
			||||
        <div class="group-info text-center"> | 
				
			||||
          <h3>{{ group.name }}</h3> | 
				
			||||
          <p>{{ group.description }}</p> | 
				
			||||
          <a :href="group.url"> | 
				
			||||
            <BaseButton label="See more" type="secondary" class="mt-2" icon="" /> | 
				
			||||
          </a> | 
				
			||||
        </div> | 
				
			||||
      </div> | 
				
			||||
    </div> | 
				
			||||
  </BaseCard> | 
				
			||||
</template> | 
				
			||||
 | 
				
			||||
<script setup> | 
				
			||||
import { ref, computed } from "vue"; | 
				
			||||
import BaseCard from "../../components/basecomponents/BaseCard.vue"; | 
				
			||||
import BaseInputText from "../../components/basecomponents/BaseInputText.vue"; | 
				
			||||
import BaseButton from "../../components/basecomponents/BaseButton.vue"; | 
				
			||||
import { useI18n } from "vue-i18n"; | 
				
			||||
import { useNotification } from "../../composables/notification"; | 
				
			||||
import { useSocialInfo } from "../../composables/useSocialInfo"; | 
				
			||||
 | 
				
			||||
const query = ref(''); | 
				
			||||
const { t } = useI18n(); | 
				
			||||
const notification = useNotification(); | 
				
			||||
const { user, loadGroup, groupInfo, isLoading } = useSocialInfo(); | 
				
			||||
const groups = ref([]); | 
				
			||||
 | 
				
			||||
const headerTitle = computed(() => { | 
				
			||||
  return query.value ? `${t('Results for')} "${query.value}"` : t('Search Groups'); | 
				
			||||
}); | 
				
			||||
 | 
				
			||||
const handleFormSearch = async () => { | 
				
			||||
  if (!query.value.trim()) { | 
				
			||||
    notification.showWarningNotification('Please enter a search term.'); | 
				
			||||
    return; | 
				
			||||
  } | 
				
			||||
  try { | 
				
			||||
    const response = await fetch(`/social-network/search?query=${query.value}&type=group`); | 
				
			||||
    const data = await response.json(); | 
				
			||||
    if (!response.ok) { | 
				
			||||
      throw new Error(data.message || 'Server response error'); | 
				
			||||
    } | 
				
			||||
    groups.value = data.results; | 
				
			||||
  } catch (error) { | 
				
			||||
    console.error('There has been a problem with your fetch operation:', error); | 
				
			||||
  } | 
				
			||||
}; | 
				
			||||
</script> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue