@paris-ias/list 1.0.137 → 1.0.139

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 (49) 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 -14
  4. package/dist/runtime/components/actions/RowsItem.vue +56 -10
  5. package/dist/runtime/components/actions/View.vue +5 -17
  6. package/dist/runtime/components/affiliation/DenseItem.vue +26 -10
  7. package/dist/runtime/components/affiliation/RowsItem.vue +26 -10
  8. package/dist/runtime/components/apps/DenseItem.vue +26 -10
  9. package/dist/runtime/components/apps/RowsItem.vue +26 -10
  10. package/dist/runtime/components/disciplines/DenseItem.vue +26 -10
  11. package/dist/runtime/components/disciplines/RowsItem.vue +26 -10
  12. package/dist/runtime/components/events/DenseItem.vue +12 -3
  13. package/dist/runtime/components/events/RowsItem.vue +12 -5
  14. package/dist/runtime/components/fellowships/DenseItem.vue +14 -0
  15. package/dist/runtime/components/fellowships/RowsItem.vue +16 -2
  16. package/dist/runtime/components/fellowships/View.vue +2 -2
  17. package/dist/runtime/components/files/DenseItem.vue +25 -10
  18. package/dist/runtime/components/files/RowsItem.vue +26 -10
  19. package/dist/runtime/components/list/atoms/FiltersMenu.vue +9 -0
  20. package/dist/runtime/components/list/atoms/PerPage.vue +3 -2
  21. package/dist/runtime/components/list/atoms/ResetButton.vue +5 -1
  22. package/dist/runtime/components/list/atoms/SearchInput.vue +15 -2
  23. package/dist/runtime/components/list/atoms/SearchString.vue +169 -133
  24. package/dist/runtime/components/list/atoms/SortMenu.vue +22 -18
  25. package/dist/runtime/components/list/atoms/ViewMenu.vue +26 -14
  26. package/dist/runtime/components/list/molecules/Filters.vue +4 -4
  27. package/dist/runtime/components/list/molecules/GlobalSearchInput.vue +12 -14
  28. package/dist/runtime/components/list/molecules/Header.vue +11 -20
  29. package/dist/runtime/components/list/molecules/Pagination.vue +51 -48
  30. package/dist/runtime/components/list/molecules/ResultsContainer.vue +5 -2
  31. package/dist/runtime/components/list/organisms/List.vue +105 -74
  32. package/dist/runtime/components/list/organisms/Results.vue +31 -17
  33. package/dist/runtime/components/mailing/RowsItem.vue +26 -10
  34. package/dist/runtime/components/news/DenseItem.vue +59 -45
  35. package/dist/runtime/components/news/RowsItem.vue +11 -7
  36. package/dist/runtime/components/people/DenseItem.vue +10 -8
  37. package/dist/runtime/components/people/RowsItem.vue +11 -2
  38. package/dist/runtime/components/projects/DenseItem.vue +11 -4
  39. package/dist/runtime/components/projects/RowsItem.vue +10 -3
  40. package/dist/runtime/components/publications/DenseItem.vue +12 -8
  41. package/dist/runtime/components/publications/RowsItem.vue +12 -4
  42. package/dist/runtime/components/tags/RowsItem.vue +23 -10
  43. package/dist/runtime/components/users/DenseItem.vue +24 -10
  44. package/dist/runtime/components/users/RowsItem.vue +24 -10
  45. package/dist/runtime/composables/useUtils.js +1 -1
  46. package/dist/runtime/plugins/pinia.js +5 -2
  47. package/dist/runtime/stores/root.d.ts +10 -9
  48. package/dist/runtime/stores/root.js +82 -117
  49. package/package.json +1 -1
@@ -8,7 +8,7 @@
8
8
  <v-col v-if="mdAndUp" align-self="center" cols="1">
9
9
  <MiscAtomsImageContainer
10
10
  cover
11
- :loading="$stores.projects.loading"
11
+ :loading="isLoading"
12
12
  :src="
13
13
  item && item.image && item.image.url ? item.image.url : '/default.png'
14
14
  "
@@ -17,7 +17,7 @@
17
17
  />
18
18
  </v-col>
19
19
  <v-col align-self="center" class="text-h5 dense pl-2">
20
- <v-skeleton-loader v-if="rootStore.loading" type="heading" />
20
+ <v-skeleton-loader v-if="isLoading" type="heading" />
21
21
  <span
22
22
  v-else
23
23
  v-html="
@@ -27,14 +27,14 @@
27
27
  "
28
28
  />
29
29
  <v-skeleton-loader
30
- v-if="rootStore.loading"
30
+ v-if="isLoading"
31
31
  :type="
32
32
  ['chip', 'chip@2', 'chip@3', 'chip@4', 'chip@4', 'chip@4'][
33
33
  ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')
34
34
  ]
35
35
  "
36
36
  />
37
- <MiscMoleculesChipContainer :items="item.tags" size="small" />
37
+ <MiscMoleculesChipContainer :items="item.tags || []" size="small" />
38
38
 
39
39
  <MDC
40
40
  v-if="item.summary"
@@ -68,6 +68,11 @@ const props = defineProps({
68
68
  type: String,
69
69
  required: true,
70
70
  },
71
+ loading: {
72
+ type: Boolean,
73
+ required: false,
74
+ default: false,
75
+ },
71
76
  })
72
77
  const eventCategory = computed(() => {
73
78
  if (props.item.category) {
@@ -76,4 +81,6 @@ const eventCategory = computed(() => {
76
81
  return "list.filters.news.category.others"
77
82
  }
78
83
  })
84
+
85
+ const isLoading = computed(() => props.loading)
79
86
  </script>
@@ -4,7 +4,7 @@
4
4
  <MiscAtomsImageContainer
5
5
  contain
6
6
  :src="item.image"
7
- :loading="$stores.projects.loading"
7
+ :loading="isLoading"
8
8
  :ratio="1 / 1"
9
9
  />
10
10
  </v-col>
@@ -19,7 +19,7 @@
19
19
  @click="router.push(pathPrefix)"
20
20
  >
21
21
  <v-skeleton-loader
22
- v-if="rootStore.loading"
22
+ v-if="isLoading"
23
23
  type="heading,ossein,text@8,ossein,button,button"
24
24
  />
25
25
 
@@ -75,7 +75,7 @@
75
75
  <script setup>
76
76
  import { useDisplay } from "vuetify"
77
77
  import { useRootStore } from "../../stores/root"
78
- import { useRouter, useI18n } from "#imports"
78
+ import { useRouter, useI18n, computed } from "#imports"
79
79
 
80
80
  const { locale } = useI18n()
81
81
 
@@ -96,7 +96,14 @@ const props = defineProps({
96
96
  type: String,
97
97
  required: true,
98
98
  },
99
+ loading: {
100
+ type: Boolean,
101
+ required: false,
102
+ default: false,
103
+ },
99
104
  })
105
+
106
+ const isLoading = computed(() => rootStore.loading || props.loading)
100
107
  </script>
101
108
 
102
109
  <style lang="scss"></style>
@@ -8,7 +8,7 @@
8
8
  <v-col v-if="mdAndUp" cols="1" class="align-center">
9
9
  <MiscAtomsImageContainer
10
10
  cover
11
- :loading="$stores.people.loading"
11
+ :loading="isLoading"
12
12
  :src="
13
13
  item && item.image && item.image.url ? item.image.url : '/default.png'
14
14
  "
@@ -19,7 +19,7 @@
19
19
  <v-col class="pl-2">
20
20
  <div class="inline-flex flex-row flex-wrap">
21
21
  <v-skeleton-loader
22
- v-if="rootStore.loading"
22
+ v-if="isLoading"
23
23
  :type="
24
24
  ['chip', 'chip@2', 'chip@3', 'chip@4', 'chip@4', 'chip@4'][
25
25
  ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')
@@ -47,11 +47,11 @@
47
47
  </v-chip>
48
48
  <MiscMoleculesChipContainer
49
49
  v-if="item.tags && item.tags.length"
50
- :items="item.tags"
50
+ :items="item.tags || []"
51
51
  size="small"
52
52
  />
53
53
  </template>
54
- <v-skeleton-loader v-if="rootStore.loading" type="heading" />
54
+ <v-skeleton-loader v-if="isLoading" type="heading" />
55
55
  <span
56
56
  v-else
57
57
  class="text-h5 dense paragraph"
@@ -76,10 +76,9 @@
76
76
  <script setup>
77
77
  import { useDisplay } from "vuetify"
78
78
  import { useRootStore } from "../../stores/root"
79
- import { computed, useNuxtApp, useI18n } from "#imports"
79
+ import { computed, useI18n } from "#imports"
80
80
  const rootStore = useRootStore()
81
81
 
82
- const { $stores } = useNuxtApp()
83
82
  const { name, mdAndUp } = useDisplay()
84
83
  const { locale } = useI18n()
85
84
  const props = defineProps({
@@ -95,11 +94,15 @@ const props = defineProps({
95
94
  type: String,
96
95
  required: true,
97
96
  },
97
+ loading: {
98
+ type: Boolean,
99
+ required: false,
100
+ default: false,
101
+ },
98
102
  })
99
103
 
100
104
  const eventCategory = computed(() => {
101
105
  if (props.item.category) {
102
- console.log("props.item.category: ", props.item.category)
103
106
  return "list.filters.publications.category." + props.item.category
104
107
  } else {
105
108
  return false
@@ -107,10 +110,11 @@ const eventCategory = computed(() => {
107
110
  })
108
111
  const eventType = computed(() => {
109
112
  if (props.item.type) {
110
- console.log("props.item.type: ", props.item.type)
111
113
  return "list.filters.publications.type." + props.item.type
112
114
  } else {
113
115
  return false
114
116
  }
115
117
  })
118
+
119
+ const isLoading = computed(() => props.loading)
116
120
  </script>
@@ -3,7 +3,7 @@
3
3
  <MiscAtomsImageContainer
4
4
  contain
5
5
  :src="item.image.url ? item.image : '/default.png'"
6
- :loading="$stores.publications.loading"
6
+ :loading="isLoading"
7
7
  :ratio="1 / 1"
8
8
  />
9
9
  </v-col>
@@ -19,7 +19,7 @@
19
19
  >
20
20
  <div>
21
21
  <v-skeleton-loader
22
- v-if="$stores.publications.loading"
22
+ v-if="isLoading"
23
23
  type="heading,ossein,text@8,ossein,button,button"
24
24
  />
25
25
 
@@ -77,10 +77,11 @@
77
77
 
78
78
  <script setup>
79
79
  import { useDisplay } from "vuetify"
80
- import { useNuxtApp, useI18n, useRouter } from "#imports"
80
+ import { useRouter, computed } from "#imports"
81
+ import { useRootStore } from "../../stores/root"
81
82
 
82
83
  const { name } = useDisplay()
83
- const { $stores } = useNuxtApp()
84
+ const rootStore = useRootStore()
84
85
  const router = useRouter()
85
86
  const props = defineProps({
86
87
  item: {
@@ -94,7 +95,14 @@ const props = defineProps({
94
95
  type: String,
95
96
  required: true,
96
97
  },
98
+ loading: {
99
+ type: Boolean,
100
+ required: false,
101
+ default: false,
102
+ },
97
103
  })
104
+
105
+ const isLoading = computed(() => rootStore.loading || props.loading)
98
106
  </script>
99
107
 
100
108
  <style lang="scss"></style>
@@ -1,18 +1,31 @@
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="heading, text@6" />
9
+ <template v-else>
10
+ <div class="text-h6">{{ item.name }}</div>
11
+ </template>
12
+ </v-col>
13
+ </v-row>
14
+ <v-divider />
3
15
  </template>
4
16
 
5
17
  <script setup>
6
- defineProps({
7
- item: {
8
- type: Object,
9
- required: true,
10
- },
11
- pathPrefix: {
12
- type: String,
13
- required: true,
14
- },
18
+ import { computed } from "#imports"
19
+ import { useRootStore } from "../../stores/root"
20
+
21
+ const rootStore = useRootStore()
22
+ const props = defineProps({
23
+ item: { type: Object, required: true },
24
+ pathPrefix: { type: String, required: true },
25
+ loading: { type: Boolean, default: false },
15
26
  })
27
+
28
+ const isLoading = computed(() => rootStore.loading || props.loading)
16
29
  </script>
17
30
 
18
31
  <style></style>
@@ -1,18 +1,32 @@
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="heading, text@6" />
9
+ <template v-else>
10
+ <div class="text-h6">{{ item.name }}</div>
11
+ <div v-if="item.email" class="text-body-2 mt-1">{{ item.email }}</div>
12
+ </template>
13
+ </v-col>
14
+ </v-row>
15
+ <v-divider />
3
16
  </template>
4
17
 
5
18
  <script setup>
6
- defineProps({
7
- item: {
8
- type: Object,
9
- required: true,
10
- },
11
- pathPrefix: {
12
- type: String,
13
- required: true,
14
- },
19
+ import { computed } from "#imports"
20
+ import { useRootStore } from "../../stores/root"
21
+
22
+ const rootStore = useRootStore()
23
+ const props = defineProps({
24
+ item: { type: Object, required: true },
25
+ pathPrefix: { type: String, required: true },
26
+ loading: { type: Boolean, default: false },
15
27
  })
28
+
29
+ const isLoading = computed(() => rootStore.loading || props.loading)
16
30
  </script>
17
31
 
18
32
  <style></style>
@@ -1,18 +1,32 @@
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="heading, text@8, button" />
9
+ <template v-else>
10
+ <div class="text-h6">{{ item.name }}</div>
11
+ <div v-if="item.email" class="text-body-2 mt-1">{{ item.email }}</div>
12
+ </template>
13
+ </v-col>
14
+ </v-row>
15
+ <v-divider />
3
16
  </template>
4
17
 
5
18
  <script setup>
6
- defineProps({
7
- item: {
8
- type: Object,
9
- required: true,
10
- },
11
- pathPrefix: {
12
- type: String,
13
- required: true,
14
- },
19
+ import { computed } from "#imports"
20
+ import { useRootStore } from "../../stores/root"
21
+
22
+ const rootStore = useRootStore()
23
+ const props = defineProps({
24
+ item: { type: Object, required: true },
25
+ pathPrefix: { type: String, required: true },
26
+ loading: { type: Boolean, default: false },
15
27
  })
28
+
29
+ const isLoading = computed(() => rootStore.loading || props.loading)
16
30
  </script>
17
31
 
18
32
  <style></style>
@@ -49,7 +49,7 @@ export const formatDateValue = (date, locale) => {
49
49
  export const highlightAndTruncate = (stop, text, query) => {
50
50
  try {
51
51
  if (!text) {
52
- return "toto";
52
+ return "";
53
53
  }
54
54
  if (query?.length && query[0]?.length) {
55
55
  if (text.length > stop) {
@@ -1,6 +1,6 @@
1
1
  import { createDynamicStore } from "../stores/factory.js";
2
2
  import { useRootStore } from "../stores/root.js";
3
- import { defineNuxtPlugin, useAppConfig } from "#app";
3
+ import { defineNuxtPlugin, useAppConfig } from "#imports";
4
4
  export default defineNuxtPlugin(async (nuxtApp) => {
5
5
  const appConfig = useAppConfig();
6
6
  const moduleImports = {
@@ -107,6 +107,8 @@ export default defineNuxtPlugin(async (nuxtApp) => {
107
107
  const stores = {};
108
108
  const queries = {};
109
109
  const models = {};
110
+ const rootStore = useRootStore();
111
+ rootStore.setLoading(true);
110
112
  const builtFilters = await import("../public/filters.json");
111
113
  console.log("INITIALIZING STORES");
112
114
  await Promise.all(
@@ -125,7 +127,8 @@ export default defineNuxtPlugin(async (nuxtApp) => {
125
127
  }
126
128
  })
127
129
  );
128
- const rootStore = useRootStore();
130
+ console.log(" STORES LOADED");
131
+ rootStore.setLoading(false);
129
132
  nuxtApp.provide("models", models);
130
133
  nuxtApp.provide("rootStore", rootStore);
131
134
  nuxtApp.provide("stores", stores);
@@ -28,33 +28,34 @@ export declare const useRootStore: import("pinia").StoreDefinition<"rootStore",
28
28
  loadRouteQuery(type: string): void;
29
29
  setFiltersCount(type: string): void;
30
30
  updateRouteQuery(type: string): void;
31
- resetState(type: string, lang?: string): Promise<void>;
32
- updateSort({ value, type, lang, }: {
31
+ resetState(type: string, lang?: string): void;
32
+ updateSort({ value, type, }: {
33
33
  value: (number | string)[];
34
34
  type: string;
35
35
  lang?: string;
36
- }): Promise<void>;
36
+ }): void;
37
37
  updateView({ value, type, lang, }: {
38
38
  value: string;
39
39
  type: string;
40
40
  lang?: string;
41
- }): Promise<void>;
42
- updateFilter(key: string, val: unknown, type: string, lang: string): Promise<void>;
41
+ }): void;
42
+ updateFilter(key: string, val: unknown, type: string, lang: string): void;
43
43
  updateItemsPerPage({ value, type, lang, }: {
44
44
  value: number;
45
45
  type: string;
46
46
  lang?: string;
47
- }): Promise<void>;
47
+ }): void;
48
48
  updatePage({ page, type, lang, }: {
49
49
  page: number;
50
50
  type: string;
51
51
  lang?: string;
52
- }): Promise<void>;
52
+ }): void;
53
53
  updateSearch({ type, search, lang, }: {
54
54
  type: string;
55
55
  search: string;
56
56
  lang: string;
57
- }): Promise<void>;
58
- update(type: string, lang?: string): Promise<boolean>;
57
+ }): void;
58
+ buildListVariables(type: string, lang?: string): any;
59
+ applyListResult(type: string, data: Record<string, any>, itemsPerPageOverride?: number): void;
59
60
  }>;
60
61
  export {};