@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,14 +1,9 @@
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/events/' + item.slug[locale]))"
7
- >
2
+ <v-row v-ripple no-gutters class="cursor-pointer highlight-on-hover my-2">
8
3
  <v-col v-if="mdAndUp" cols="1">
9
4
  <MiscAtomsDateStamp
10
5
  v-if="item.start"
11
- :loading="$stores['events'].loading"
6
+ :loading="isLoading"
12
7
  :date-start="item.start"
13
8
  :date-stop="item.stop"
14
9
  class="pr-6 mt-md-2"
@@ -17,14 +12,11 @@
17
12
  <v-col v-if="mdAndUp" cols="1">
18
13
  <MiscAtomsImageContainer
19
14
  cover
20
- :loading="$stores.events.loading"
15
+ :loading="isLoading"
21
16
  :src="
22
17
  item && item.image && item.image.url ? item.image.url : '/default.png'
23
18
  "
24
19
  :ratio="1 / 1"
25
- :name="item.name"
26
- :slug="item.slug && item.slug[locale]"
27
- link="events-slug"
28
20
  :width="80"
29
21
  />
30
22
  </v-col>
@@ -63,25 +55,26 @@
63
55
  :value="`${highlightAndTruncate(
64
56
  85,
65
57
  item.summary,
66
- $rootStore.search.split(' ')
58
+ $rootStore.search.split(' '),
67
59
  )}`"
68
60
  />
69
61
  </v-col>
70
62
 
71
63
  <v-col align-self="center" cols="auto">
72
- <EventsBadges :item />
64
+ <EventsBadges :item :pathPrefix />
73
65
  </v-col>
74
66
  </v-row>
75
67
  </template>
76
68
 
77
69
  <script setup>
78
- import { useLocalePath, useI18n, useNuxtApp } from "#imports"
70
+ import { useI18n, useNuxtApp, computed } from "#imports"
79
71
  import { useDisplay } from "vuetify"
72
+ import { useRootStore } from "../../stores/root"
80
73
  const { $rootStore } = useNuxtApp()
81
- const { smAndDown, mdAndUp, lgAndUp } = useDisplay()
74
+ const { smAndDown, mdAndUp } = useDisplay()
82
75
 
83
76
  const { locale } = useI18n()
84
- const localePath = useLocalePath()
77
+ const rootStore = useRootStore()
85
78
  const props = defineProps({
86
79
  item: {
87
80
  type: Object,
@@ -91,5 +84,22 @@ const props = defineProps({
91
84
  type: Number,
92
85
  required: true,
93
86
  },
87
+ pathPrefix: {
88
+ type: String,
89
+ required: true,
90
+ },
91
+ loading: {
92
+ type: Boolean,
93
+ required: false,
94
+ default: false,
95
+ },
94
96
  })
97
+
98
+ const isLoading = computed(() => props.loading)
95
99
  </script>
100
+ <!-- <NuxtLink
101
+ v-if="item && item.slug"
102
+ :to="pathPrefix"
103
+ class="text-decoration-none text-black"
104
+ >
105
+ </NuxtLink> -->
@@ -5,6 +5,10 @@
5
5
  <script lang="ts" setup>
6
6
  const props = defineProps({
7
7
  item: { type: Object, required: true },
8
+ pathPrefix: {
9
+ type: String,
10
+ required: true,
11
+ },
8
12
  })
9
13
  </script>
10
14
 
@@ -1,21 +1,12 @@
1
1
  <template>
2
- <v-sheet
3
- :to="
4
- localePath({
5
- name: 'activities-events-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
13
6
  cover
14
7
  :src="item.image"
15
8
  :ratio="1 / 1"
16
- :link="item.name"
17
9
  :loading="rootStore.loading"
18
- name="activities-events-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>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <v-divider v-if="index > 0" />
3
+
3
4
  <v-row class="py-8 px-6 highlight-on-hover" no-gutters>
4
5
  <v-col cols="12" md="1">
5
6
  <MiscAtomsDateStamp
6
7
  v-if="item.start"
7
- :loading="$stores['events'].loading"
8
+ :loading="isLoading"
8
9
  :date-start="item.start"
9
10
  :date-stop="item.stop"
10
11
  class="pr-6 mt-md-2"
@@ -14,7 +15,7 @@
14
15
  <v-row no-gutters>
15
16
  <v-col cols="12" class="pr-lg-6">
16
17
  <v-skeleton-loader
17
- v-if="rootStore.loading || $stores['events'].loading"
18
+ v-if="isLoading"
18
19
  :type="
19
20
  [
20
21
  'heading, subtitle, text@6,subtitle, text, ossein, button, button',
@@ -28,18 +29,9 @@
28
29
  />
29
30
 
30
31
  <div v-else>
31
- <nuxt-link
32
- v-if="item.name"
33
- :to="
34
- localePath({
35
- name: 'activities-events-slug',
36
- params: { slug: item.slug[locale] },
37
- })
38
- "
39
- class="text-h4 text-black text-wrap mt-4"
40
- >
32
+ <div v-if="item.name" class="text-h4 text-black text-wrap mt-4">
41
33
  {{ item.name }}
42
- </nuxt-link>
34
+ </div>
43
35
  <div class="mt-2 text-h6 text-overline font-weight-black">
44
36
  {{ $t("list.filters.events.category." + item.category) }}
45
37
  </div>
@@ -69,7 +61,7 @@
69
61
  >
70
62
  <v-col cols="12">
71
63
  <v-skeleton-loader
72
- v-if="rootStore.loading || $stores['events'].loading"
64
+ v-if="isLoading"
73
65
  :type="
74
66
  ['article, heading, text, heading, text, button, button'][
75
67
  ['md'].indexOf(name || 'md')
@@ -86,9 +78,7 @@
86
78
  <v-col cols="12" md="4">
87
79
  <MiscAtomsImageContainer
88
80
  cover
89
- :slug="item.slug[locale]"
90
- link="activities-events-slug"
91
- :loading="$stores['events'].loading"
81
+ :loading="isLoading"
92
82
  :src="item.image && item.image.url ? item.image : '/default.png'"
93
83
  :ratio="1 / 1"
94
84
  />
@@ -99,11 +89,10 @@
99
89
  <script setup>
100
90
  import { useDisplay } from "vuetify"
101
91
  import { useRootStore } from "../../stores/root"
102
- import { useNuxtApp, useI18n, useLocalePath } from "#imports"
92
+ import { useNuxtApp, computed } from "#imports"
103
93
 
104
- const { locale } = useI18n()
105
94
  const { name, mdAndDown, lgAndUp } = useDisplay()
106
- const localePath = useLocalePath()
95
+
107
96
  const rootStore = useRootStore()
108
97
  const { $stores } = useNuxtApp()
109
98
  const props = defineProps({
@@ -115,5 +104,16 @@ const props = defineProps({
115
104
  type: Number,
116
105
  required: true,
117
106
  },
107
+ pathPrefix: {
108
+ type: String,
109
+ required: true,
110
+ },
111
+ loading: {
112
+ type: Boolean,
113
+ required: false,
114
+ default: false,
115
+ },
118
116
  })
117
+
118
+ const isLoading = computed(() => rootStore.loading || props.loading)
119
119
  </script>
@@ -1,65 +1,57 @@
1
1
  <template>
2
- <v-sheet v-motion class="d-flex sliding-item flex-md-row flex-column px-6">
3
- <MiscAtomsDateStamp
4
- :date-start="item.start"
5
- :date-stop="item.stop"
6
- :loading="loading"
7
- class="mr-4 mb-6 mb-md-0"
8
- style="min-width: 70px"
9
- />
10
- <div
11
- class="d-flex flex-column"
12
- :style="
13
- 'min-width:' +
14
- [250, 300, 350, 380, 430, 460][
15
- ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')
16
- ] +
17
- 'px!important;'
18
- "
19
- >
20
- <MiscAtomsImageContainer
21
- cover
22
- :ratio="1"
23
- :src="item.image"
24
- link="activities-events-slug"
25
- :slug="item.id"
2
+ <NuxtLink
3
+ v-if="item && item.slug"
4
+ :to="pathPrefix"
5
+ class="text-decoration-none text-black"
6
+ >
7
+ <v-sheet v-motion class="d-flex sliding-item flex-md-row flex-column px-6">
8
+ <MiscAtomsDateStamp
9
+ :date-start="item.start"
10
+ :date-stop="item.stop"
26
11
  :loading="loading"
27
- :to="
28
- localePath({
29
- name: 'activities-events-slug',
30
- params: { slug: item.slug[locale] },
31
- })
32
- "
33
- style="cursor: pointer"
12
+ class="mr-4 mb-6 mb-md-0"
13
+ style="min-width: 70px"
34
14
  />
35
- <nuxt-link
36
- class="mt-6 pl-0 text-h6 text-md-h5 font-weight-medium sliding-item-title cursor-pointer"
37
- :to="
38
- localePath({
39
- name: 'activities-events-slug',
40
- params: { slug: item.slug[locale] },
41
- })
15
+ <div
16
+ class="d-flex flex-column"
17
+ :style="
18
+ 'min-width:' +
19
+ [250, 300, 350, 380, 430, 460][
20
+ ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')
21
+ ] +
22
+ 'px!important;'
42
23
  "
43
24
  >
44
- <div class="text-overline text-uppercase">
45
- {{ $t(item.category) }}
25
+ <MiscAtomsImageContainer
26
+ cover
27
+ :ratio="1"
28
+ :src="item.image"
29
+ :loading="loading"
30
+ />
31
+ <div
32
+ class="mt-6 pl-0 text-h6 text-md-h5 font-weight-medium sliding-item-title cursor-pointer"
33
+ >
34
+ <div class="text-overline text-uppercase">
35
+ {{ $t(item.category) }}
36
+ </div>
37
+ {{ item.name }}
46
38
  </div>
47
- {{ item.name }}
48
- </nuxt-link>
49
- </div>
50
- </v-sheet>
39
+ </div>
40
+ </v-sheet></NuxtLink
41
+ >
51
42
  </template>
52
43
  <script setup>
53
44
  import { useDisplay } from "vuetify"
54
- import { useLocalePath, useI18n } from "#imports"
55
- const { locale } = useI18n()
56
45
 
57
46
  const { name } = useDisplay()
58
- const localePath = useLocalePath()
59
47
 
60
48
  defineProps({
61
49
  item: { type: Object, required: true },
62
50
  loading: { type: Boolean, required: true, default: false },
51
+ pathPrefix: {
52
+ type: String,
53
+ required: true,
54
+ },
63
55
  })
64
56
  </script>
65
57
  <style lang="scss"></style>
@@ -330,7 +330,7 @@ const panel = ref(["presentation"])
330
330
 
331
331
  function redirectToMap(long, lat) {
332
332
  router.push(
333
- `https://www.openstreetmap.org/?mlat=${lat}&amp;mlon=${long}#map=19/${lat}/${long}`
333
+ `https://www.openstreetmap.org/?mlat=${lat}&amp;mlon=${long}#map=19/${lat}/${long}`,
334
334
  )
335
335
  }
336
336
  </script>
@@ -23,29 +23,33 @@
23
23
  </template>
24
24
 
25
25
  <script setup>
26
- import { getLocalizedDate } from "../../composables/useUtils";
27
- import { computed } from "#imports";
26
+ import { getLocalizedDate } from "../../composables/useUtils"
27
+ import { computed } from "#imports"
28
28
 
29
29
  const props = defineProps({
30
30
  item: { type: Object, required: true },
31
31
  view: { type: Boolean, required: false, default: false },
32
- });
32
+ pathPrefix: {
33
+ type: String,
34
+ required: true,
35
+ },
36
+ })
33
37
 
34
38
  const registrationStatus = computed(() => {
35
- const currentDate = new Date();
36
- const startDate = new Date(props.item.applicationStart);
37
- const endDate = new Date(props.item.applicationStop);
39
+ const currentDate = new Date()
40
+ const startDate = new Date(props.item.applicationStart)
41
+ const endDate = new Date(props.item.applicationStop)
38
42
  switch (true) {
39
43
  case currentDate < startDate:
40
- return 0;
44
+ return 0
41
45
  case currentDate > startDate && currentDate < endDate:
42
- return 1;
46
+ return 1
43
47
  case currentDate > startDate && currentDate > endDate:
44
- return 2;
48
+ return 2
45
49
  default:
46
- return false;
50
+ return false
47
51
  }
48
- });
52
+ })
49
53
  </script>
50
54
 
51
55
  <style lang="scss" scoped></style>
@@ -1,14 +1,9 @@
1
1
  <template>
2
- <v-row
3
- v-ripple
4
- no-gutters
5
- class="cursor-pointer highlight-on-hover"
6
- @click="
7
- $router.push(localePath('/activities/fellowships/' + item.slug[locale]))
8
- "
9
- >
2
+ <v-row v-ripple no-gutters class="cursor-pointer highlight-on-hover">
10
3
  <v-col align-self="center" cols="8" class="text-h5 dense">
4
+ <v-skeleton-loader v-if="isLoading" type="heading" />
11
5
  <div
6
+ v-else
12
7
  v-html="
13
8
  $rootStore.search.length
14
9
  ? highlightAndTruncate(300, item.name, $rootStore.search.split(' '))
@@ -18,7 +13,9 @@
18
13
  <FellowshipsBadges :item="item" />
19
14
  </v-col>
20
15
  <v-col align-self="center" cols="4">
16
+ <v-skeleton-loader v-if="isLoading" type="chip@3" class="mt-2" />
21
17
  <MiscMoleculesChipContainer
18
+ v-else
22
19
  :items="[
23
20
  $t('list.filters.fellowships.fellowshipType.' + item.fellowshipType),
24
21
  ...(props.item && props.item.disciplines
@@ -32,10 +29,11 @@
32
29
  </template>
33
30
 
34
31
  <script setup>
35
- import { useLocalePath, useI18n, useNuxtApp } from "#imports"
32
+ import { useNuxtApp } from "#imports"
33
+ import { useRootStore } from "../../stores/root"
34
+ import { computed } from "#imports"
36
35
  const { $rootStore } = useNuxtApp()
37
- const { locale } = useI18n()
38
- const localePath = useLocalePath()
36
+
39
37
  const props = defineProps({
40
38
  item: {
41
39
  type: Object,
@@ -45,5 +43,18 @@ const props = defineProps({
45
43
  type: Number,
46
44
  required: true,
47
45
  },
46
+
47
+ pathPrefix: {
48
+ type: String,
49
+ required: true,
50
+ },
51
+ loading: {
52
+ type: Boolean,
53
+ required: false,
54
+ default: false,
55
+ },
48
56
  })
57
+
58
+ const rootStore = useRootStore()
59
+ const isLoading = computed(() => rootStore.loading || props.loading)
49
60
  </script>
@@ -2,6 +2,13 @@
2
2
  <div></div>
3
3
  </template>
4
4
 
5
- <script lang="ts" setup></script>
5
+ <script lang="ts" setup>
6
+ defineProps({
7
+ pathPrefix: {
8
+ type: String,
9
+ required: true,
10
+ },
11
+ })
12
+ </script>
6
13
 
7
14
  <style></style>
@@ -1,19 +1,12 @@
1
1
  <template>
2
2
  <v-col cols="12" md="6" class="highlight-on-hover">
3
3
  <div v-ripple class="border-thin pa-6">
4
- <FellowshipsBadges :item="item" />
4
+ <FellowshipsBadges :item :pathPrefix />
5
5
  <div class="d-flex">
6
- <nuxt-link
7
- :to="
8
- localePath({
9
- name: 'activities-fellowships-slug',
10
- params: { slug: item.slug[locale] },
11
- })
12
- "
13
- class="text-h4 text-black text-wrap mt-4 pb-4"
14
- >
6
+ <v-skeleton-loader v-if="isLoading" type="heading" />
7
+ <div v-else class="text-h4 text-black text-wrap mt-4 pb-4">
15
8
  {{ item.name }}
16
- </nuxt-link>
9
+ </div>
17
10
  </div>
18
11
  <div
19
12
  class="text-wrap clamped-text d-flex"
@@ -24,9 +17,12 @@
24
17
  ]
25
18
  "
26
19
  >
27
- <MDC v-if="item.description" :value="item.description" />
20
+ <v-skeleton-loader v-if="isLoading" type="text@4" />
21
+ <MDC v-else-if="item.description" :value="item.description" />
28
22
  </div>
23
+ <v-skeleton-loader v-if="isLoading" type="chip@3" class="mt-2" />
29
24
  <MiscMoleculesChipContainer
25
+ v-else
30
26
  :items="[
31
27
  $t('list.filters.fellowships.fellowshipType.' + item.fellowshipType),
32
28
  ...(props.item && props.item.disciplines
@@ -41,11 +37,10 @@
41
37
 
42
38
  <script setup>
43
39
  import { useDisplay } from "vuetify"
44
- import { useLocalePath, useI18n } from "#imports"
40
+ import { computed } from "#imports"
41
+ import { useRootStore } from "../../stores/root"
45
42
 
46
43
  const { name } = useDisplay()
47
- const localePath = useLocalePath()
48
- const { locale } = useI18n()
49
44
 
50
45
  const props = defineProps({
51
46
  item: {
@@ -56,7 +51,19 @@ const props = defineProps({
56
51
  type: Number,
57
52
  required: true,
58
53
  },
54
+ pathPrefix: {
55
+ type: String,
56
+ required: true,
57
+ },
58
+ loading: {
59
+ type: Boolean,
60
+ required: false,
61
+ default: false,
62
+ },
59
63
  })
64
+
65
+ const rootStore = useRootStore()
66
+ const isLoading = computed(() => rootStore.loading || props.loading)
60
67
  </script>
61
68
 
62
69
  <style lang="scss"></style>
@@ -10,7 +10,7 @@
10
10
  <!-- FELLOWSHIP IMAGE -->
11
11
  <MiscAtomsImageContainer
12
12
  contain
13
- :loading
13
+ :loading="loading"
14
14
  :src="item.image"
15
15
  :ratio="1 / 1"
16
16
  />
@@ -131,7 +131,7 @@
131
131
  :items="item.fellows || []"
132
132
  type="people"
133
133
  lazy
134
- :loading
134
+ :loading="loading"
135
135
  >
136
136
  <div :class="mdAndUp ? 'text-h5' : 'text-h6'">
137
137
  {{ $t("this-fellowship-alumni") }}
@@ -1,14 +1,34 @@
1
1
  <template>
2
- {{ item }}
2
+ <v-row
3
+ class="my-2 highlight-on-hover"
4
+ no-gutters
5
+ @click="$router.push(pathPrefix)"
6
+ >
7
+ <v-col cols="12" class="px-4">
8
+ <v-skeleton-loader v-if="isLoading" type="avatar, text@6" />
9
+ <template v-else>
10
+ <div class="text-h6">{{ item.name || item.filename }}</div>
11
+ <div v-if="item.description" class="text-body-2 mt-1">
12
+ <MDC :value="item.description" />
13
+ </div>
14
+ </template>
15
+ </v-col>
16
+ </v-row>
17
+ <v-divider />
3
18
  </template>
4
19
 
5
20
  <script setup>
6
- defineProps({
7
- item: {
8
- type: Object,
9
- required: true,
10
- },
21
+ import { computed } from "#imports"
22
+ import { useRootStore } from "../../stores/root"
23
+
24
+ const rootStore = useRootStore()
25
+ const props = defineProps({
26
+ item: { type: Object, required: true },
27
+ pathPrefix: { type: String, required: true },
28
+ loading: { type: Boolean, default: false },
11
29
  })
30
+
31
+ const isLoading = computed(() => rootStore.loading || props.loading)
12
32
  </script>
13
33
 
14
34
  <style></style>
@@ -10,6 +10,10 @@ const props = defineProps({
10
10
  type: Object,
11
11
  required: true,
12
12
  },
13
+ pathPrefix: {
14
+ type: String,
15
+ required: true,
16
+ },
13
17
  })
14
18
  </script>
15
19
 
@@ -1,14 +1,34 @@
1
1
  <template>
2
- {{ item }}
2
+ <v-row
3
+ class="highlight-on-hover pa-3"
4
+ no-gutters
5
+ @click="$router.push(pathPrefix)"
6
+ >
7
+ <v-col cols="12" class="px-6">
8
+ <v-skeleton-loader v-if="isLoading" type="avatar, text@8, button" />
9
+ <template v-else>
10
+ <div class="text-h6">{{ item.name || item.filename }}</div>
11
+ <div v-if="item.description" class="mt-2">
12
+ <MDC :value="item.description" />
13
+ </div>
14
+ </template>
15
+ </v-col>
16
+ </v-row>
17
+ <v-divider />
3
18
  </template>
4
19
 
5
20
  <script setup>
6
- defineProps({
7
- item: {
8
- type: Object,
9
- required: true,
10
- },
11
- });
21
+ import { computed } from "#imports"
22
+ import { useRootStore } from "../../stores/root"
23
+
24
+ const rootStore = useRootStore()
25
+ const props = defineProps({
26
+ item: { type: Object, required: true },
27
+ pathPrefix: { type: String, required: true },
28
+ loading: { type: Boolean, default: false },
29
+ })
30
+
31
+ const isLoading = computed(() => rootStore.loading || props.loading)
12
32
  </script>
13
33
 
14
34
  <style></style>
@@ -3,9 +3,9 @@
3
3
  </template>
4
4
 
5
5
  <script setup>
6
- import { useNuxtApp } from "#imports";
6
+ import { useNuxtApp } from "#imports"
7
7
 
8
- const { $stores } = useNuxtApp();
8
+ const { $stores } = useNuxtApp()
9
9
  defineProps({
10
10
  item: {
11
11
  type: Object,
@@ -16,7 +16,7 @@ defineProps({
16
16
  required: false,
17
17
  default: false,
18
18
  },
19
- });
19
+ })
20
20
 
21
- $stores.files.loading = false;
21
+ $stores.files.loading = false
22
22
  </script>