5757 @click.stop =" changeAscDesc"
5858 ></v-btn >
5959 </v-row >
60+
61+ <v-btn
62+ class =" w-100 mb-2"
63+ color =" primary"
64+ variant =" tonal"
65+ density =" default"
66+ prepend-icon =" mdi-share-variant"
67+ text =" Поделиться поиском"
68+ @click =" shareSearch"
69+ />
70+
6071 <v-btn
6172 v-if =" isAdmin"
6273 class =" w-100"
7182 </v-menu >
7283 </template >
7384 </v-text-field >
85+
86+ <v-snackbar v-model =" shareSuccess" color =" success" timeout =" 2000" > Ссылка скопирована в буфер обмена </v-snackbar >
7487</template >
7588
7689<script setup lang="ts">
7790import { SUBJECTS } from ' @/constants' ;
7891import { ref } from ' vue' ;
92+ import { copyUrlToClipboard } from ' @/utils' ;
7993
8094const propsParent = defineProps ({
8195 isAdmin: { type: Boolean , required: true },
8296 ascending: { type: Boolean , required: true },
97+ page: { type: Number , default: 1 },
8398});
8499
85100const searchQuery = defineModel (' searchQuery' , { type: String });
@@ -94,6 +109,7 @@ const orderTypes = [
94109 ' по фамилии' ,
95110];
96111const iconAscDesc = ref <string >(' ' );
112+ const shareSuccess = ref (false );
97113
98114const emits = defineEmits ({
99115 ' find-lecturer' : () => {
@@ -113,4 +129,22 @@ function changeAscDesc() {
113129 : ' mdi-sort-alphabetical-descending' ;
114130 emits (' changed-asc-desc' );
115131}
132+
133+ async function shareSearch() {
134+ const params: Record <string , any > = {};
135+
136+ if (searchQuery .value ) params .query = searchQuery .value ;
137+ if (order .value && order .value !== ' по релевантности' ) params .order = order .value ;
138+ if (subject .value ) params .subject = subject .value ;
139+ if (propsParent .page > 1 ) params .page = propsParent .page ;
140+
141+ // Значение ascending обратное иконке (если иконка ascending, то значение false)
142+ const isAscending = iconAscDesc .value === ' mdi-sort-alphabetical-ascending' ;
143+ if (! isAscending ) params .asc = false ;
144+
145+ shareSuccess .value = await copyUrlToClipboard (params );
146+ setTimeout (() => {
147+ shareSuccess .value = false ;
148+ }, 2000 );
149+ }
116150 </script >
0 commit comments