From 3abdd97a1e08133d9e80366c0d792bcf325a6005 Mon Sep 17 00:00:00 2001 From: oliviareichl Date: Thu, 6 Feb 2025 17:14:55 +0100 Subject: [PATCH 1/8] WIP: display a places list on the places page --- composables/use-get-places.ts | 19 ++++++ package.json | 1 + pages/explore/places.vue | 99 ++++++++++++++++++++++++++++-- pnpm-lock.yaml | 108 ++++++++++++++++++++++++--------- scripts/generate-api-client.ts | 2 +- types/api.ts | 4 ++ 6 files changed, 200 insertions(+), 33 deletions(-) create mode 100644 composables/use-get-places.ts diff --git a/composables/use-get-places.ts b/composables/use-get-places.ts new file mode 100644 index 0000000..f26f619 --- /dev/null +++ b/composables/use-get-places.ts @@ -0,0 +1,19 @@ +import { useQuery } from "@tanstack/vue-query"; + +import type { PlacesResults } from "@/types/api"; + +export function useGetPlaces() { + const { $api } = useNuxtApp(); + return useQuery({ + queryKey: ["placelist"] as const, + async queryFn() { + const response = await $api["apis_api_apis_ontology.place_list"]({ + queries: { + limit: 475, + }, + }); + + return response as PlacesResults; + }, + }); +} diff --git a/package.json b/package.json index 32b8f32..83f6848 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@nuxtjs/i18n": "^8.5.5", "@nuxtjs/mdc": "^0.13.2", "@radix-icons/vue": "^1.0.0", + "@sindresorhus/transliterate": "^1.6.0", "@stefanprobst/netlify-cms-oauth-client": "^0.4.0", "@tailwindcss/typography": "^0.5.15", "@tanstack/vue-query": "^5.59.16", diff --git a/pages/explore/places.vue b/pages/explore/places.vue index c67df27..9db2080 100644 --- a/pages/explore/places.vue +++ b/pages/explore/places.vue @@ -1,5 +1,7 @@ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5679f4a..4c619dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: '@radix-icons/vue': specifier: ^1.0.0 version: 1.0.0(vue@3.5.12(typescript@5.6.3)) + '@sindresorhus/transliterate': + specifier: ^1.6.0 + version: 1.6.0 '@stefanprobst/netlify-cms-oauth-client': specifier: ^0.4.0 version: 0.4.0 @@ -155,7 +158,7 @@ importers: version: 1.2.0(typescript@5.6.3) '@babel/plugin-transform-named-capturing-groups-regex': specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.25.9) + version: 7.25.9(@babel/core@7.26.7) '@nuxt/devtools': specifier: ^1.6.0 version: 1.6.0(rollup@4.24.0)(vite@5.4.10(@types/node@20.17.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3)) @@ -239,7 +242,7 @@ importers: version: 5.4.10(@types/node@20.17.0)(terser@5.36.0) vite-plugin-babel: specifier: ^1.3.0 - version: 1.3.0(@babel/core@7.25.9)(vite@5.4.10(@types/node@20.17.0)(terser@5.36.0)) + version: 1.3.0(@babel/core@7.26.7)(vite@5.4.10(@types/node@20.17.0)(terser@5.36.0)) vue-tsc: specifier: ^2.1.6 version: 2.1.6(typescript@5.6.3) @@ -1643,6 +1646,10 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@sindresorhus/transliterate@1.6.0': + resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} + engines: {node: '>=12'} + '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} @@ -7205,9 +7212,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.25.9)': + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.2.0 semver: 6.3.1 @@ -7260,6 +7280,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.25.9': dependencies: '@babel/traverse': 7.25.9 @@ -7334,24 +7363,34 @@ snapshots: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-module-transforms': 7.25.9(@babel/core@7.25.9) + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-simple-access': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.9) + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.25.9)': @@ -7365,14 +7404,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.7) transitivePeerDependencies: - supports-color @@ -8688,6 +8738,10 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} + '@sindresorhus/transliterate@1.6.0': + dependencies: + escape-string-regexp: 5.0.0 + '@socket.io/component-emitter@3.1.2': {} '@stefanprobst/lib@0.1.4': {} @@ -10073,7 +10127,7 @@ snapshots: dependencies: '@vitest/spy': 2.1.3 estree-walker: 3.0.3 - magic-string: 0.30.12 + magic-string: 0.30.17 optionalDependencies: vite: 5.4.10(@types/node@20.17.0)(terser@5.36.0) @@ -10089,7 +10143,7 @@ snapshots: '@vitest/snapshot@2.1.3': dependencies: '@vitest/pretty-format': 2.1.3 - magic-string: 0.30.12 + magic-string: 0.30.17 pathe: 1.1.2 '@vitest/spy@2.1.3': @@ -10280,7 +10334,7 @@ snapshots: '@vuedx/template-ast-types@0.7.1': dependencies: - '@vue/compiler-core': 3.5.12 + '@vue/compiler-core': 3.5.13 '@vueuse/core@10.11.1(vue@3.5.12(typescript@5.6.3))': dependencies: @@ -11186,12 +11240,12 @@ snapshots: detypes@0.8.0: dependencies: - '@babel/core': 7.25.9 - '@babel/preset-typescript': 7.25.9(@babel/core@7.25.9) + '@babel/core': 7.26.7 + '@babel/preset-typescript': 7.25.9(@babel/core@7.26.7) '@vue/compiler-dom': 3.5.12 '@vue/compiler-sfc': 3.5.12 '@vuedx/template-ast-types': 0.7.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 prettier: 3.3.3 typescript: 5.6.3 transitivePeerDependencies: @@ -13943,7 +13997,7 @@ snapshots: postcss-html@1.7.0: dependencies: htmlparser2: 8.0.2 - js-tokens: 9.0.0 + js-tokens: 9.0.1 postcss: 8.4.47 postcss-safe-parser: 6.0.0(postcss@8.4.47) @@ -15573,9 +15627,9 @@ snapshots: - supports-color - terser - vite-plugin-babel@1.3.0(@babel/core@7.25.9)(vite@5.4.10(@types/node@20.17.0)(terser@5.36.0)): + vite-plugin-babel@1.3.0(@babel/core@7.26.7)(vite@5.4.10(@types/node@20.17.0)(terser@5.36.0)): dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.26.7 vite: 5.4.10(@types/node@20.17.0)(terser@5.36.0) vite-plugin-checker@0.8.0(eslint@8.57.1)(optionator@0.9.4)(stylelint@16.10.0(typescript@5.6.3))(typescript@5.6.3)(vite@5.4.10(@types/node@20.17.0)(terser@5.36.0))(vue-tsc@2.1.6(typescript@5.6.3)): @@ -15655,10 +15709,10 @@ snapshots: '@vitest/spy': 2.1.3 '@vitest/utils': 2.1.3 chai: 5.1.2 - debug: 4.3.7 - magic-string: 0.30.12 + debug: 4.4.0 + magic-string: 0.30.17 pathe: 1.1.2 - std-env: 3.7.0 + std-env: 3.8.0 tinybench: 2.9.0 tinyexec: 0.3.1 tinypool: 1.0.1 diff --git a/scripts/generate-api-client.ts b/scripts/generate-api-client.ts index b509c7f..ff4178f 100644 --- a/scripts/generate-api-client.ts +++ b/scripts/generate-api-client.ts @@ -19,7 +19,7 @@ async function generate() { pathname: "/apis/swagger/schema", searchParams: createUrlSearchParams({ format: "json" }), }), - prefixes: ["/api/work-detail/{id}", "/api/work-preview"], + prefixes: ["/api/work-detail/{id}", "/api/work-preview", "/apis/api/apis_ontology.place"], dist: outputFilePath, }; diff --git a/types/api.ts b/types/api.ts index 4b6d445..e170564 100644 --- a/types/api.ts +++ b/types/api.ts @@ -7,6 +7,8 @@ type Api = ApiOf; export type SearchFilters = ZodiosQueryParamsByPath; export type SearchResults = ZodiosResponseByPath; export type WorkDetail = ZodiosResponseByPath; +export type PlacesFilters = ZodiosQueryParamsByPath; +export type PlacesResults = ZodiosResponseByPath; export type SearchFacetLanguage = NonNullable; export type SearchFacetTopic = NonNullable; @@ -14,4 +16,6 @@ export type SearchFacetWorkType = NonNullable; export type SearchFacetYearEnd = NonNullable; export type SearchFacetYearStart = NonNullable; +export type Places = NonNullable; + export type SearchResultFacets = NonNullable; From 6230b67bb82572911b0af47b23a926b14b7821ed Mon Sep 17 00:00:00 2001 From: oliviareichl Date: Mon, 10 Feb 2025 17:00:27 +0100 Subject: [PATCH 2/8] WIP: places data list view, layout break --- layouts/default.vue | 2 +- nuxt.config.ts | 6 ++ pages/explore/places.vue | 122 +++++++++++++++++++++++++++++++-------- pnpm-lock.yaml | 48 ++++----------- styles/index.css | 6 +- 5 files changed, 120 insertions(+), 64 deletions(-) diff --git a/layouts/default.vue b/layouts/default.vue index f568320..a0ed4eb 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -96,7 +96,7 @@ router.afterEach((to, from) => {