mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-11-06 22:46:03 +08:00
Add no search results page to Global search page [SCI-10481]
This commit is contained in:
parent
50e3311033
commit
d24f3b76a8
15 changed files with 78 additions and 69 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-files"></i>
|
<i class="sn-icon sn-icon-files"></i>
|
||||||
|
|
@ -51,19 +51,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'AssetsComponent',
|
name: 'AssetsComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'assets'
|
group: 'assets'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-experiment"></i>
|
<i class="sn-icon sn-icon-experiment"></i>
|
||||||
|
|
@ -44,18 +44,15 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ExperimentsComponent',
|
name: 'ExperimentsComponent',
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-folder"></i>
|
<i class="sn-icon sn-icon-folder"></i>
|
||||||
|
|
@ -42,19 +42,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'FoldersComponent',
|
name: 'FoldersComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'project_folders'
|
group: 'project_folders'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div v-if="!disabled" ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="!disabled && total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-label-templates"></i>
|
<i class="sn-icon sn-icon-label-templates"></i>
|
||||||
|
|
@ -45,19 +45,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'LabelTemplatesComponent',
|
name: 'LabelTemplatesComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'label_templates'
|
group: 'label_templates'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-protocols-templates"></i>
|
<i class="sn-icon sn-icon-protocols-templates"></i>
|
||||||
|
|
@ -54,19 +54,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'MyModuleProtocolsComponent',
|
name: 'MyModuleProtocolsComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'module_protocols'
|
group: 'module_protocols'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-task"></i>
|
<i class="sn-icon sn-icon-task"></i>
|
||||||
|
|
@ -48,18 +48,15 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'MyModulesComponent',
|
name: 'MyModulesComponent',
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-projects"></i>
|
<i class="sn-icon sn-icon-projects"></i>
|
||||||
|
|
@ -46,19 +46,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ProjectsComponent',
|
name: 'ProjectsComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'projects'
|
group: 'projects'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-protocols-templates"></i>
|
<i class="sn-icon sn-icon-protocols-templates"></i>
|
||||||
|
|
@ -45,19 +45,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ProtocolsComponent',
|
name: 'ProtocolsComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'protocols'
|
group: 'protocols'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-reports"></i>
|
<i class="sn-icon sn-icon-reports"></i>
|
||||||
|
|
@ -53,19 +53,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ReportsComponent',
|
name: 'ReportsComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'reports'
|
group: 'reports'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-inventory"></i>
|
<i class="sn-icon sn-icon-inventory"></i>
|
||||||
|
|
@ -47,19 +47,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'RepositoryRowsComponent',
|
name: 'RepositoryRowsComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'repository_rows'
|
group: 'repository_rows'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': total || loading }">
|
<div ref="content" class="bg-white rounded" :class="{ 'p-4 mb-4': results.length || loading }">
|
||||||
<template v-if="total">
|
<template v-if="total && results.length">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
<h2 class="flex items-center gap-2 mt-0 mb-4">
|
||||||
<i class="sn-icon sn-icon-results"></i>
|
<i class="sn-icon sn-icon-results"></i>
|
||||||
|
|
@ -50,19 +50,16 @@
|
||||||
</template>
|
</template>
|
||||||
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
<Loader v-if="loading" :total="total" :loaderRows="loaderRows" :loaderYPadding="loaderYPadding"
|
||||||
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
:loaderHeight="loaderHeight" :loaderGap="loaderGap" :reachedEnd="reachedEnd" />
|
||||||
|
<NoSearchResult v-else-if="showNoSearchResult" :noSearchResultHeight="noSearchResultHeight" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Loader from '../loader.vue';
|
|
||||||
import searchMixin from './search_mixin';
|
import searchMixin from './search_mixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ResultsComponent',
|
name: 'ResultsComponent',
|
||||||
mixins: [searchMixin],
|
mixins: [searchMixin],
|
||||||
components: {
|
|
||||||
Loader
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
group: 'results'
|
group: 'results'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import axios from '../../../packs/custom_axios.js';
|
import axios from '../../../packs/custom_axios.js';
|
||||||
import StringWithEllipsis from '../../shared/string_with_ellipsis.vue';
|
import StringWithEllipsis from '../../shared/string_with_ellipsis.vue';
|
||||||
import SortFlyout from './sort_flyout.vue';
|
import SortFlyout from './sort_flyout.vue';
|
||||||
|
import Loader from '../loader.vue';
|
||||||
|
import NoSearchResult from '../no_search_result.vue';
|
||||||
/* global GLOBAL_CONSTANTS */
|
/* global GLOBAL_CONSTANTS */
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
@ -12,7 +14,9 @@ export default {
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
StringWithEllipsis,
|
StringWithEllipsis,
|
||||||
SortFlyout
|
SortFlyout,
|
||||||
|
Loader,
|
||||||
|
NoSearchResult
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -25,7 +29,8 @@ export default {
|
||||||
fullDataLoaded: false,
|
fullDataLoaded: false,
|
||||||
loaderHeight: 24,
|
loaderHeight: 24,
|
||||||
loaderGap: 10,
|
loaderGap: 10,
|
||||||
loaderYPadding: 10
|
loaderYPadding: 10,
|
||||||
|
noSearchResultHeight: 0
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|
@ -78,6 +83,9 @@ export default {
|
||||||
},
|
},
|
||||||
reachedEnd() {
|
reachedEnd() {
|
||||||
return Math.ceil(this.total / GLOBAL_CONSTANTS.SEARCH_LIMIT) === this.page;
|
return Math.ceil(this.total / GLOBAL_CONSTANTS.SEARCH_LIMIT) === this.page;
|
||||||
|
},
|
||||||
|
showNoSearchResult() {
|
||||||
|
return this.selected && !this.loading && !this.results.length;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -117,6 +125,10 @@ export default {
|
||||||
this.disabled = response.data.meta.disabled;
|
this.disabled = response.data.meta.disabled;
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
this.page = response.data.meta.next_page;
|
this.page = response.data.meta.next_page;
|
||||||
|
if (this.results.length === 0 && this.selected) {
|
||||||
|
const availableHeight = window.innerHeight - this.$refs.content.getBoundingClientRect().top;
|
||||||
|
this.noSearchResultHeight = availableHeight - 20;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
<div :class="`h-[${loaderHeight}px]`" class="w-96 max-w-96 animate-skeleton rounded"></div>
|
<div :class="`h-[${loaderHeight}px]`" class="w-96 max-w-96 animate-skeleton rounded"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="reachedEnd" class="flex items-center">
|
<div v-if="reachedEnd" class="flex items-center mb-6">
|
||||||
<p class="text-sm text-sn-blue flex items-center gap-3 m-auto">
|
<p class="text-sm text-sn-blue flex items-center gap-3 m-auto">
|
||||||
<span class="sn-icon sn-icon-flag"></span>
|
<span class="sn-icon sn-icon-flag"></span>
|
||||||
<span>{{ i18n.t('search.index.reached_end') }}</span>
|
<span>{{ i18n.t('search.index.reached_end') }}</span>
|
||||||
|
|
|
||||||
28
app/javascript/vue/global_search/no_search_result.vue
Normal file
28
app/javascript/vue/global_search/no_search_result.vue
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
<template>
|
||||||
|
<div ref="noSearchResult">
|
||||||
|
<div class="flex flex-col gap-6 bg-sn-white text-center relative top-1/4">
|
||||||
|
<div><span class=" inline-block sn-icon sn-icon-search"></span></div>
|
||||||
|
<div class="">
|
||||||
|
<p class="text-sn-black text-2xl font-semibold">
|
||||||
|
{{ i18n.t('search.index.no_results_text') }}
|
||||||
|
</p>
|
||||||
|
<p class="text-sn-dark-grey text-base">
|
||||||
|
{{ i18n.t('search.index.adjust_search_text') }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'NoSearchResult',
|
||||||
|
props: {
|
||||||
|
noSearchResultHeight: { type: Number, default: 0 }
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$refs.noSearchResult.style.height = `${this.noSearchResultHeight}px`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
@ -486,6 +486,8 @@ en:
|
||||||
atoz: "Name A to Z"
|
atoz: "Name A to Z"
|
||||||
ztoa: "Name Z to A"
|
ztoa: "Name Z to A"
|
||||||
reached_end: "You’ve reached the end of the list"
|
reached_end: "You’ve reached the end of the list"
|
||||||
|
no_results_text: "No search results found"
|
||||||
|
adjust_search_text: "Try adjusting your search or filter to find what you are looking for."
|
||||||
comments:
|
comments:
|
||||||
save_changes: "Save changes"
|
save_changes: "Save changes"
|
||||||
empty_state:
|
empty_state:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue