Skip to content

Commit 59cce2d

Browse files
authored
Merge pull request #79 from profcomff/DanilSemenovPR
Danil semenov pr кнопки "Поделиться" на странице лектора и в поиске
2 parents 45677a6 + f965f50 commit 59cce2d

4 files changed

Lines changed: 256 additions & 167 deletions

File tree

src/components/TheSearchBar.vue

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,17 @@
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"
@@ -71,15 +82,19 @@
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">
7790
import { SUBJECTS } from '@/constants';
7891
import { ref } from 'vue';
92+
import { copyUrlToClipboard } from '@/utils';
7993
8094
const propsParent = defineProps({
8195
isAdmin: { type: Boolean, required: true },
8296
ascending: { type: Boolean, required: true },
97+
page: { type: Number, default: 1 },
8398
});
8499
85100
const searchQuery = defineModel('searchQuery', { type: String });
@@ -94,6 +109,7 @@ const orderTypes = [
94109
'по фамилии',
95110
];
96111
const iconAscDesc = ref<string>('');
112+
const shareSuccess = ref(false);
97113
98114
const 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

Comments
 (0)