@paris-ias/list 1.0.136 → 1.0.138

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/actions/DenseItem.vue +64 -0
  3. package/dist/runtime/components/actions/ExpandedItem.vue +17 -10
  4. package/dist/runtime/components/actions/RowsItem.vue +57 -7
  5. package/dist/runtime/components/actions/View.vue +5 -17
  6. package/dist/runtime/components/affiliation/DenseItem.vue +26 -6
  7. package/dist/runtime/components/affiliation/ExpandedItem.vue +4 -0
  8. package/dist/runtime/components/affiliation/RowsItem.vue +27 -7
  9. package/dist/runtime/components/affiliation/View.vue +4 -4
  10. package/dist/runtime/components/apps/DenseItem.vue +26 -6
  11. package/dist/runtime/components/apps/ExpandedItem.vue +5 -1
  12. package/dist/runtime/components/apps/RowsItem.vue +27 -7
  13. package/dist/runtime/components/apps/View.vue +4 -4
  14. package/dist/runtime/components/disciplines/DenseItem.vue +26 -6
  15. package/dist/runtime/components/disciplines/ExpandedItem.vue +4 -0
  16. package/dist/runtime/components/disciplines/RowsItem.vue +27 -7
  17. package/dist/runtime/components/disciplines/View.vue +4 -4
  18. package/dist/runtime/components/events/Badges.vue +8 -12
  19. package/dist/runtime/components/events/DenseItem.vue +26 -16
  20. package/dist/runtime/components/events/ExpandedItem.vue +4 -0
  21. package/dist/runtime/components/events/RelatedItem.vue +4 -13
  22. package/dist/runtime/components/events/RowsItem.vue +20 -20
  23. package/dist/runtime/components/events/SlidingItem.vue +39 -47
  24. package/dist/runtime/components/events/View.vue +1 -1
  25. package/dist/runtime/components/fellowships/Badges.vue +15 -11
  26. package/dist/runtime/components/fellowships/DenseItem.vue +22 -11
  27. package/dist/runtime/components/fellowships/ExpandedItem.vue +8 -1
  28. package/dist/runtime/components/fellowships/RowsItem.vue +22 -15
  29. package/dist/runtime/components/fellowships/View.vue +2 -2
  30. package/dist/runtime/components/files/DenseItem.vue +26 -6
  31. package/dist/runtime/components/files/ExpandedItem.vue +4 -0
  32. package/dist/runtime/components/files/RowsItem.vue +27 -7
  33. package/dist/runtime/components/files/View.vue +4 -4
  34. package/dist/runtime/components/list/atoms/FiltersMenu.vue +9 -0
  35. package/dist/runtime/components/list/atoms/PerPage.vue +3 -2
  36. package/dist/runtime/components/list/atoms/ResetButton.vue +5 -1
  37. package/dist/runtime/components/list/atoms/SearchInput.vue +15 -2
  38. package/dist/runtime/components/list/atoms/SearchString.vue +169 -133
  39. package/dist/runtime/components/list/atoms/SortMenu.vue +22 -18
  40. package/dist/runtime/components/list/atoms/ViewMenu.vue +26 -14
  41. package/dist/runtime/components/list/molecules/Filters.vue +8 -8
  42. package/dist/runtime/components/list/molecules/Header.vue +10 -19
  43. package/dist/runtime/components/list/molecules/Pagination.vue +51 -48
  44. package/dist/runtime/components/list/organisms/List.vue +104 -69
  45. package/dist/runtime/components/mailing/DenseItem.vue +4 -0
  46. package/dist/runtime/components/mailing/ExpandedItem.vue +4 -0
  47. package/dist/runtime/components/mailing/RowsItem.vue +27 -7
  48. package/dist/runtime/components/mailing/View.vue +4 -4
  49. package/dist/runtime/components/misc/atoms/ImageContainer.vue +3 -45
  50. package/dist/runtime/components/misc/molecules/Related.vue +1 -1
  51. package/dist/runtime/components/news/DenseItem.vue +63 -54
  52. package/dist/runtime/components/news/ExpandedItem.vue +11 -17
  53. package/dist/runtime/components/news/RelatedItem.vue +4 -13
  54. package/dist/runtime/components/news/RowsItem.vue +21 -42
  55. package/dist/runtime/components/news/View.vue +7 -7
  56. package/dist/runtime/components/people/DenseItem.vue +16 -20
  57. package/dist/runtime/components/people/RelatedItem.vue +4 -14
  58. package/dist/runtime/components/people/RowsItem.vue +14 -23
  59. package/dist/runtime/components/projects/DenseItem.vue +17 -17
  60. package/dist/runtime/components/projects/RelatedItem.vue +4 -13
  61. package/dist/runtime/components/projects/RowsItem.vue +16 -16
  62. package/dist/runtime/components/projects/View.vue +6 -6
  63. package/dist/runtime/components/publications/DenseItem.vue +17 -15
  64. package/dist/runtime/components/publications/RelatedItem.vue +4 -13
  65. package/dist/runtime/components/publications/RowsItem.vue +18 -18
  66. package/dist/runtime/components/tags/DenseItem.vue +4 -0
  67. package/dist/runtime/components/tags/ExpandedItem.vue +4 -0
  68. package/dist/runtime/components/tags/RowsItem.vue +24 -7
  69. package/dist/runtime/components/tags/View.vue +4 -4
  70. package/dist/runtime/components/users/DenseItem.vue +24 -6
  71. package/dist/runtime/components/users/ExpandedItem.vue +5 -1
  72. package/dist/runtime/components/users/RowsItem.vue +25 -7
  73. package/dist/runtime/components/users/View.vue +4 -4
  74. package/dist/runtime/composables/useUtils.js +1 -1
  75. package/dist/runtime/plugins/pinia.js +5 -2
  76. package/dist/runtime/stores/root.d.ts +10 -9
  77. package/dist/runtime/stores/root.js +83 -119
  78. package/package.json +3 -4
@@ -1,71 +1,69 @@
1
1
  <template>
2
- <v-row
3
- v-ripple
4
- no-gutters
5
- class="cursor-pointer highlight-on-hover my-2"
6
- @click="$router.push(localePath('/activities/news/' + item.slug[locale]))"
2
+ <NuxtLink
3
+ v-if="pathPrefix"
4
+ :to="pathPrefix"
5
+ class="text-decoration-none text-black"
7
6
  >
8
- <v-col v-if="mdAndUp" align-self="center" cols="1">
9
- <MiscAtomsImageContainer
10
- cover
11
- :loading="$stores.news.loading"
12
- :src="
13
- item && item.image && item.image.url ? item.image.url : '/default.png'
14
- "
15
- :ratio="1 / 1"
16
- :name="item.slug"
17
- :slug="item.slug && item.slug[locale]"
18
- link="news-slug"
19
- width="80px"
20
- />
21
- </v-col>
22
- <v-col align-self="start" class="text-h5 dense px-2 paragraph">
23
- <v-skeleton-loader v-if="rootStore.loading" type="heading" />
24
- <template v-else>
25
- <v-skeleton-loader
26
- v-if="rootStore.loading"
27
- :type="
28
- ['chip', 'chip@2', 'chip@3', 'chip@4', 'chip@4', 'chip@4'][
29
- ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')
30
- ]
7
+ <v-row v-ripple no-gutters class="cursor-pointer highlight-on-hover my-2">
8
+ <v-col v-if="mdAndUp" align-self="center" cols="1">
9
+ <MiscAtomsImageContainer
10
+ cover
11
+ :loading="isLoading"
12
+ :src="
13
+ item && item.image && item.image.url
14
+ ? item.image.url
15
+ : '/default.png'
31
16
  "
17
+ :ratio="1 / 1"
18
+ width="80px"
32
19
  />
33
-
20
+ </v-col>
21
+ <v-col align-self="start" class="text-h5 dense px-2 paragraph">
22
+ <v-skeleton-loader v-if="isLoading" type="heading" />
34
23
  <template v-else>
35
- <v-chip
36
- class="ma-2"
37
- style="background-color: white; color: black"
38
- size="small"
39
- variant="outlined"
40
- >
41
- {{ $t(eventCategory) }}
42
- </v-chip>
43
- <MiscMoleculesChipContainer :items="item.tags" size="small" />
24
+ <v-skeleton-loader
25
+ v-if="isLoading"
26
+ :type="
27
+ ['chip', 'chip@2', 'chip@3', 'chip@4', 'chip@4', 'chip@4'][
28
+ ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')
29
+ ]
30
+ "
31
+ />
32
+
33
+ <template v-else>
34
+ <v-chip
35
+ class="ma-2"
36
+ style="background-color: white; color: black"
37
+ size="small"
38
+ variant="outlined"
39
+ >
40
+ {{ $t(eventCategory) }}
41
+ </v-chip>
42
+ <MiscMoleculesChipContainer :items="item.tags || []" size="small" />
43
+ </template>
44
+ <div
45
+ v-html="
46
+ $rootStore.search.length
47
+ ? highlightAndTruncate(
48
+ 300,
49
+ item.name,
50
+ $rootStore.search.split(' '),
51
+ )
52
+ : item.name
53
+ "
54
+ />
44
55
  </template>
45
- <div
46
- v-html="
47
- $rootStore.search.length
48
- ? highlightAndTruncate(
49
- 300,
50
- item.name,
51
- $rootStore.search.split(' '),
52
- )
53
- : item.name
54
- "
55
- />
56
- </template>
57
- </v-col>
58
- </v-row>
56
+ </v-col> </v-row
57
+ ></NuxtLink>
59
58
  </template>
60
59
 
61
60
  <script setup>
62
61
  import { useDisplay } from "vuetify"
63
62
  import { useRootStore } from "../../stores/root"
64
- import { computed, useNuxtApp, useI18n, useLocalePath } from "#imports"
63
+ import { computed, useNuxtApp, useI18n } from "#imports"
65
64
 
66
65
  const { $stores } = useNuxtApp()
67
66
  const { name, mdAndUp } = useDisplay()
68
- const localePath = useLocalePath()
69
67
  const { locale } = useI18n()
70
68
 
71
69
  const rootStore = useRootStore()
@@ -78,6 +76,15 @@ const props = defineProps({
78
76
  type: Number,
79
77
  required: true,
80
78
  },
79
+ pathPrefix: {
80
+ type: String,
81
+ required: true,
82
+ },
83
+ loading: {
84
+ type: Boolean,
85
+ required: false,
86
+ default: false,
87
+ },
81
88
  })
82
89
  const eventCategory = computed(() => {
83
90
  if (props.item.category) {
@@ -86,4 +93,6 @@ const eventCategory = computed(() => {
86
93
  return "list.filters.news.category.others"
87
94
  }
88
95
  })
96
+
97
+ const isLoading = computed(() => props.loading)
89
98
  </script>
@@ -12,10 +12,7 @@
12
12
  @click.prevent="
13
13
  expanded
14
14
  ? router.push(
15
- localePath({
16
- name: 'news-slug',
17
- params: { slug: item.slug[locale] },
18
- }),
15
+ pathPrefix
19
16
  )
20
17
  : null
21
18
  "
@@ -33,10 +30,7 @@
33
30
  @click.prevent="
34
31
  expanded
35
32
  ? router.push(
36
- localePath({
37
- name: 'news-slug',
38
- params: { slug: item.slug[locale] },
39
- }),
33
+ pathPrefix
40
34
  )
41
35
  : null
42
36
  "
@@ -66,12 +60,8 @@
66
60
  class="mt-4"
67
61
  variant="outlined"
68
62
  tile
69
- @click.prevent="
70
- router.push(
71
- localePath({
72
- name: 'news-slug',
73
- params: { slug: item.slug[locale] },
74
- }),
63
+ :to="pathPrefix"
64
+
75
65
  )
76
66
  "
77
67
  >
@@ -85,15 +75,15 @@
85
75
  <script setup>
86
76
  import { useDisplay } from "vuetify"
87
77
  import { useRootStore } from "../../stores/root"
88
- import { useRouter, useI18n, useLocalePath } from "#imports"
78
+ import { useRouter } from "#imports"
79
+
89
80
 
90
- const localePath = useLocalePath()
91
81
 
92
82
  const router = useRouter()
93
83
  const rootStore = useRootStore()
94
84
  const expanded = ref(false)
95
85
  const { name, lgAndUp } = useDisplay()
96
- const { locale } = useI18n()
86
+
97
87
  const props = defineProps({
98
88
  item: {
99
89
  type: Object,
@@ -103,6 +93,10 @@ const props = defineProps({
103
93
  type: Number,
104
94
  required: true,
105
95
  },
96
+ pathPrefix: {
97
+ type: String,
98
+ required: true,
99
+ },
106
100
  })
107
101
  </script>
108
102
 
@@ -1,12 +1,5 @@
1
1
  <template>
2
- <v-sheet
3
- :to="
4
- localePath({
5
- name: 'news-slug',
6
- params: { slug: item.name },
7
- })
8
- "
9
- >
2
+ <v-sheet>
10
3
  <v-row>
11
4
  <v-col v-if="lgAndUp" cols="3">
12
5
  <MiscAtomsImageContainer
@@ -14,8 +7,6 @@
14
7
  :src="item.image"
15
8
  :loading="rootStore.loading"
16
9
  :ratio="1 / 1"
17
- :link="item.name"
18
- name="news-slug"
19
10
  />
20
11
  </v-col>
21
12
  <v-col cols="12" lg="9">
@@ -36,11 +27,11 @@
36
27
  <script setup>
37
28
  import { useDisplay } from "vuetify"
38
29
  import { useRootStore } from "../../stores/root"
39
- import { useLocalePath } from "#imports"
40
30
 
41
- const localePath = useLocalePath()
42
31
  const rootStore = useRootStore()
43
32
  const { lgAndUp } = useDisplay()
44
33
 
45
- const props = defineProps({ item: { type: Object, required: true } })
34
+ const props = defineProps({
35
+ item: { type: Object, required: true },
36
+ })
46
37
  </script>
@@ -6,9 +6,7 @@
6
6
  cover
7
7
  :src="item.image.url ? item.image : '/default.png'"
8
8
  :ratio="1 / 1"
9
- :loading="$stores.news.loading"
10
- link="news-slug"
11
- :slug="item._path && item._path.split('/').pop()"
9
+ :loading="isLoading"
12
10
  >
13
11
  <v-chip class="ma-2" style="background-color: white; color: black">
14
12
  {{ $t(eventCategory) }}
@@ -17,7 +15,7 @@
17
15
  </v-col>
18
16
  <v-col cols="12" md="8" lg="4" class="pl-md-6">
19
17
  <v-skeleton-loader
20
- v-if="rootStore.loading || $stores['news'].loading"
18
+ v-if="isLoading"
21
19
  :type="
22
20
  [
23
21
  'heading, subtitle, text@5, ossein, button',
@@ -38,23 +36,15 @@
38
36
  <br />
39
37
  </template>
40
38
 
41
- <NuxtLink
42
- :to="
43
- localePath({
44
- name: 'news-slug',
45
- params: { slug: item.slug[locale] },
46
- })
47
- "
48
- class="text-wrap text-h5 text-md-h4 text-black"
49
- >
39
+ <div class="text-wrap text-h5 text-md-h4 text-black">
50
40
  {{ item.name }}
51
- </NuxtLink>
41
+ </div>
52
42
  <div class="tex-overline mt-3">
53
43
  {{ formatDateValue(item.date, locale) }}
54
44
  </div>
55
45
  <MiscMoleculesChipContainer
56
46
  v-if="item.tags && item.tags.length"
57
- :items="item.tags"
47
+ :items="item.tags || []"
58
48
  class="mt-4"
59
49
  />
60
50
  <template v-if="mdAndDown">
@@ -75,12 +65,7 @@
75
65
  variant="outlined"
76
66
  tile
77
67
  size="small"
78
- :to="
79
- localePath({
80
- name: 'activities-news-slug',
81
- params: { slug: item.slug[locale] },
82
- })
83
- "
68
+ :to="pathPrefix"
84
69
  >
85
70
  {{ $t("read-more") }}
86
71
  </v-btn>
@@ -89,10 +74,7 @@
89
74
  </v-col>
90
75
 
91
76
  <v-col v-if="lgAndUp" cols="12" lg="5">
92
- <v-skeleton-loader
93
- v-if="rootStore.loading || $stores.news.loading"
94
- type="text@8, ossein, button"
95
- />
77
+ <v-skeleton-loader v-if="isLoading" type="text@8, ossein, button" />
96
78
 
97
79
  <template v-else>
98
80
  <div
@@ -112,12 +94,7 @@
112
94
  class="mt-4"
113
95
  variant="outlined"
114
96
  tile
115
- :to="
116
- localePath({
117
- name: 'activities-news-slug',
118
- params: { slug: item.slug[locale] },
119
- })
120
- "
97
+ :to="pathPrefix"
121
98
  :size="
122
99
  ['small', 'small', 'small', 'default', 'default', 'large'][
123
100
  ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')
@@ -129,17 +106,15 @@
129
106
  </template>
130
107
  </v-col>
131
108
  </v-row>
132
- <!-- <MiscMoleculesSearchItem></MiscMoleculesSearchItem> -->
133
109
  </template>
134
110
 
135
111
  <script setup>
136
112
  import { useDisplay } from "vuetify"
137
113
  import { useRootStore } from "../../stores/root"
138
- import { useNuxtApp, useI18n, useLocalePath, computed } from "#imports"
114
+ import { useNuxtApp, useI18n, computed } from "#imports"
139
115
 
140
116
  const { $stores } = useNuxtApp()
141
117
  const { locale } = useI18n()
142
- const localePath = useLocalePath()
143
118
  const rootStore = useRootStore()
144
119
  const { name, smAndDown, mdAndDown, mdAndUp, lgAndUp } = useDisplay()
145
120
  const eventCategory = computed(() => {
@@ -158,19 +133,21 @@ const props = defineProps({
158
133
  type: Number,
159
134
  required: true,
160
135
  },
136
+ pathPrefix: {
137
+ type: String,
138
+ required: true,
139
+ },
140
+ loading: {
141
+ type: Boolean,
142
+ required: false,
143
+ default: false,
144
+ },
161
145
  })
162
146
 
163
147
  const processedSummary = computed(() => {
164
148
  const raw = props.item.summary || ""
165
149
 
166
- const slugPath = localePath({
167
- name: "news-slug",
168
- params: { slug: props.item.slug[locale.value] },
169
- })
170
-
171
- /* console.log("Raw summary:", raw);
172
- console.log("Slug path:", slugPath); */
173
- return replaceMarkdownLinksWithSlug(raw, slugPath)
150
+ return replaceMarkdownLinksWithSlug(raw, props.pathPrefix)
174
151
  })
175
152
 
176
153
  function replaceMarkdownLinksWithSlug(markdownText, slugPath) {
@@ -180,6 +157,8 @@ function replaceMarkdownLinksWithSlug(markdownText, slugPath) {
180
157
  return `[${text}](${slugPath}?redirect=${encodedUrl})`
181
158
  })
182
159
  }
160
+
161
+ const isLoading = computed(() => rootStore.loading || props.loading)
183
162
  </script>
184
163
 
185
164
  <style></style>
@@ -154,11 +154,11 @@
154
154
  </template>
155
155
 
156
156
  <script setup>
157
- import { useDisplay } from "vuetify";
158
- import { useNuxtApp } from "#imports";
157
+ import { useDisplay } from "vuetify"
158
+ import { useNuxtApp } from "#imports"
159
159
 
160
- const { $stores } = useNuxtApp();
161
- const { name, mdAndUp, smAndDown } = useDisplay();
160
+ const { $stores } = useNuxtApp()
161
+ const { name, mdAndUp, smAndDown } = useDisplay()
162
162
  const props = defineProps({
163
163
  item: {
164
164
  type: Object,
@@ -169,9 +169,9 @@ const props = defineProps({
169
169
  required: false,
170
170
  default: false,
171
171
  },
172
- });
172
+ })
173
173
 
174
- const today = new Date();
174
+ const today = new Date()
175
175
  /* const academicYear = ref(
176
176
  today.getMonth() > 6
177
177
  ? today.getFullYear() + "-" + (today.getFullYear() + 1)
@@ -179,5 +179,5 @@ const today = new Date();
179
179
  )
180
180
 
181
181
  ) */
182
- $stores.news.loading = false;
182
+ $stores.news.loading = false
183
183
  </script>
@@ -1,33 +1,18 @@
1
1
  <template>
2
- <v-row
3
- v-ripple
4
- no-gutters
5
- class="cursor-pointer highlight-on-hover my-2"
6
- @click="
7
- $router.push(
8
- localePath({
9
- name: 'people-slug',
10
- params: { slug: item.slug },
11
- })
12
- )
13
- "
14
- >
2
+ <v-row v-ripple no-gutters class="cursor-pointer highlight-on-hover my-2">
15
3
  <v-col v-if="mdAndUp" cols="1">
16
4
  <MiscAtomsImageContainer
17
5
  cover
18
- :loading="$stores.people.loading"
6
+ :loading="isLoading"
19
7
  :src="
20
8
  item && item.image && item.image.url ? item.image.url : '/default.png'
21
9
  "
22
10
  :ratio="1 / 1"
23
- :name="item.lastname + ' ' + item.firstname"
24
- :slug="item.slug"
25
- link="people-slug"
26
11
  :width="80"
27
12
  />
28
13
  </v-col>
29
14
  <v-col align-self="start" class="text-h6 dense px-2">
30
- <v-skeleton-loader v-if="rootStore.loading" type="heading" />
15
+ <v-skeleton-loader v-if="isLoading" type="heading" />
31
16
  <div v-else class="d-flex text-h5 align-center">
32
17
  <span
33
18
  v-html="
@@ -35,7 +20,7 @@
35
20
  ? highlightAndTruncate(
36
21
  300,
37
22
  item.firstname + ' ' + item.lastname,
38
- $rootStore.search.split(' ')
23
+ $rootStore.search.split(' '),
39
24
  )
40
25
  : item.firstname + ' ' + item.lastname
41
26
  "
@@ -51,7 +36,7 @@
51
36
  ? highlightAndTruncate(
52
37
  300,
53
38
  item.groups.vintage[0].theme,
54
- $rootStore.search.split(' ')
39
+ $rootStore.search.split(' '),
55
40
  )
56
41
  : item.groups.vintage[0].theme
57
42
  "
@@ -78,7 +63,18 @@ const props = defineProps({
78
63
  type: Number,
79
64
  required: true,
80
65
  },
66
+ pathPrefix: {
67
+ type: String,
68
+ required: true,
69
+ },
70
+ loading: {
71
+ type: Boolean,
72
+ required: false,
73
+ default: false,
74
+ },
81
75
  })
76
+
77
+ const isLoading = computed(() => props.loading)
82
78
  </script>
83
79
  <style>
84
80
  .paragraph{max-width:83ch!important}
@@ -1,12 +1,5 @@
1
1
  <template>
2
- <v-sheet
3
- :to="
4
- localePath({
5
- name: 'people-slug',
6
- params: { slug: item.slug },
7
- })
8
- "
9
- >
2
+ <v-sheet>
10
3
  <v-row>
11
4
  <v-col v-if="lgAndUp" cols="3">
12
5
  <MiscAtomsImageContainer
@@ -14,8 +7,6 @@
14
7
  :loading="rootStore.loading"
15
8
  :src="item.image"
16
9
  :ratio="1 / 1"
17
- :link="item.firstname + item.lastname"
18
- :name="people - slug"
19
10
  />
20
11
  </v-col>
21
12
  <v-col cols="12" lg="9">
@@ -34,11 +25,10 @@
34
25
  import { useDisplay } from "vuetify"
35
26
  import { useRootStore } from "../../stores/root"
36
27
 
37
- import { useLocalePath } from "#imports"
38
-
39
- const localePath = useLocalePath()
40
28
  const rootStore = useRootStore()
41
29
  const { lgAndUp } = useDisplay()
42
30
 
43
- const props = defineProps({ item: { type: Object, required: true } })
31
+ const props = defineProps({
32
+ item: { type: Object, required: true },
33
+ })
44
34
  </script>
@@ -2,30 +2,20 @@
2
2
  <v-divider v-if="index > 0" />
3
3
  <v-row
4
4
  class="my-6 ml-md-1 px-3 px-md-0 highlight-on-hover"
5
- @click="
6
- $router.push(
7
- localePath({
8
- name: 'people-slug',
9
- params: { slug: item.slug },
10
- }),
11
- )
12
- "
5
+ @click="$router.push(pathPrefix)"
13
6
  >
14
7
  <v-col v-if="mdAndUp" cols="12" md="3">
15
8
  <MiscAtomsImageContainer
16
9
  cover
17
- :loading="$stores.people.loading"
10
+ :loading="isLoading"
18
11
  :src="item.image.url ? item.image : '/default.png'"
19
12
  :ratio="1 / 1"
20
- :name="item.lastname + ' ' + item.firstname"
21
- :slug="item.slug"
22
- link="people-slug"
23
13
  />
24
14
  </v-col>
25
15
 
26
16
  <v-col cols="12" md="8">
27
17
  <v-skeleton-loader
28
- v-if="$stores.people.loading"
18
+ v-if="isLoading"
29
19
  :type="
30
20
  [
31
21
  'heading, subtitle, text@5',
@@ -39,17 +29,9 @@
39
29
  />
40
30
 
41
31
  <div v-else class="ml-md-8">
42
- <NuxtLink
43
- :to="
44
- localePath({
45
- name: 'people-slug',
46
- params: { slug: item.slug },
47
- })
48
- "
49
- class="text-wrap text-h5 text-md-h4 text-black"
50
- >
32
+ <div class="text-wrap text-h5 text-md-h4 text-black">
51
33
  {{ item.firstname + " " + item.lastname }}
52
- </NuxtLink>
34
+ </div>
53
35
  <MiscAtomsSocials v-if="item.socials" :socials="item.socials" />
54
36
  <PeoplepBadges :item="item" />
55
37
  <div
@@ -71,9 +53,11 @@
71
53
  <script setup>
72
54
  import { useDisplay } from "vuetify"
73
55
  import { useLocalePath, computed } from "#imports"
56
+ import { useRootStore } from "../../stores/root"
74
57
 
75
58
  const { name, mdAndUp } = useDisplay()
76
59
  const localePath = useLocalePath()
60
+ const rootStore = useRootStore()
77
61
  const props = defineProps({
78
62
  item: {
79
63
  type: Object,
@@ -83,6 +67,11 @@ const props = defineProps({
83
67
  type: Number,
84
68
  required: true,
85
69
  },
70
+ loading: {
71
+ type: Boolean,
72
+ required: false,
73
+ default: false,
74
+ },
86
75
  })
87
76
  const lineClamp = computed(() => {
88
77
  let base = [5, 6, 3, 6, 8, 10][
@@ -98,4 +87,6 @@ const lineClamp = computed(() => {
98
87
 
99
88
  return base
100
89
  })
90
+
91
+ const isLoading = computed(() => rootStore.loading || props.loading)
101
92
  </script>