diff --git a/.vscode/settings.json b/.vscode/settings.json index e008e58daf..3b1c906757 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,6 +19,7 @@ "vue-app", "@dpc-sdp/ripple-tide-search", "@dpc-sdp/ripple-tide-event", + "@dpc-sdp/ripple-tide-topic", "@dpc-sdp/nuxt-ripple-preview", "@dpc-sdp/nuxt-ripple", "@dpc-sdp/ripple-tide-media", diff --git a/examples/nuxt-app/nuxt.config.ts b/examples/nuxt-app/nuxt.config.ts index 4cdb03fef9..af42fe531b 100644 --- a/examples/nuxt-app/nuxt.config.ts +++ b/examples/nuxt-app/nuxt.config.ts @@ -20,6 +20,7 @@ export default defineNuxtConfig({ '@dpc-sdp/nuxt-ripple-analytics', '@dpc-sdp/nuxt-ripple-preview', '@dpc-sdp/ripple-tide-event', + '@dpc-sdp/ripple-tide-topic', '@dpc-sdp/ripple-tide-landing-page', '@dpc-sdp/ripple-tide-grant', '@dpc-sdp/ripple-tide-publication', diff --git a/examples/nuxt-app/package.json b/examples/nuxt-app/package.json index fbe3f967e1..ba22009b22 100644 --- a/examples/nuxt-app/package.json +++ b/examples/nuxt-app/package.json @@ -25,6 +25,7 @@ "@dpc-sdp/nuxt-ripple-analytics": "workspace:*", "@dpc-sdp/nuxt-ripple-preview": "workspace:*", "@dpc-sdp/ripple-tide-event": "workspace:*", + "@dpc-sdp/ripple-tide-topic": "workspace:*", "@dpc-sdp/ripple-tide-grant": "workspace:*", "@dpc-sdp/ripple-tide-landing-page": "workspace:*", "@dpc-sdp/ripple-tide-media": "workspace:*", diff --git a/packages/nuxt-ripple-analytics/package.json b/packages/nuxt-ripple-analytics/package.json index 30c71b18c5..238eef4067 100644 --- a/packages/nuxt-ripple-analytics/package.json +++ b/packages/nuxt-ripple-analytics/package.json @@ -17,6 +17,7 @@ "@dpc-sdp/nuxt-ripple": "workspace:*", "@dpc-sdp/ripple-tide-api": "workspace:*", "@dpc-sdp/ripple-tide-event": "workspace:*", + "@dpc-sdp/ripple-tide-topic": "workspace:*", "@dpc-sdp/ripple-tide-grant": "workspace:*", "@dpc-sdp/ripple-tide-landing-page": "workspace:*", "@dpc-sdp/ripple-tide-media": "workspace:*", diff --git a/packages/nuxt-ripple-cli/src/commands/init/_templates/layer/latest/package.json.t b/packages/nuxt-ripple-cli/src/commands/init/_templates/layer/latest/package.json.t index d93e0c977e..4ba5d4aafe 100644 --- a/packages/nuxt-ripple-cli/src/commands/init/_templates/layer/latest/package.json.t +++ b/packages/nuxt-ripple-cli/src/commands/init/_templates/layer/latest/package.json.t @@ -22,6 +22,7 @@ to: package.json "@dpc-sdp/nuxt-ripple-preview": "<%= rplVersion %>", "@dpc-sdp/ripple-tide-api": "<%= rplVersion %>", "@dpc-sdp/ripple-tide-event": "<%= rplVersion %>", + "@dpc-sdp/ripple-tide-topic": "<%= rplVersion %>", "@dpc-sdp/ripple-tide-grant": "<%= rplVersion %>", "@dpc-sdp/ripple-tide-landing-page": "<%= rplVersion %>", "@dpc-sdp/ripple-tide-media": "<%= rplVersion %>", diff --git a/packages/nuxt-ripple-cli/src/commands/init/_templates/layer/latest/playground/nuxt.config.ts.t b/packages/nuxt-ripple-cli/src/commands/init/_templates/layer/latest/playground/nuxt.config.ts.t index 1d008c8462..77ead54f3e 100644 --- a/packages/nuxt-ripple-cli/src/commands/init/_templates/layer/latest/playground/nuxt.config.ts.t +++ b/packages/nuxt-ripple-cli/src/commands/init/_templates/layer/latest/playground/nuxt.config.ts.t @@ -24,6 +24,7 @@ export default defineNuxtConfig({ '@dpc-sdp/nuxt-ripple-analytics', '@dpc-sdp/nuxt-ripple-preview', '@dpc-sdp/ripple-tide-event', + '@dpc-sdp/ripple-tide-topic', '@dpc-sdp/ripple-tide-landing-page', '@dpc-sdp/ripple-tide-grant', '@dpc-sdp/ripple-tide-publication', diff --git a/packages/nuxt-ripple-cli/src/commands/init/_templates/site/latest/nuxt.config.ts.t b/packages/nuxt-ripple-cli/src/commands/init/_templates/site/latest/nuxt.config.ts.t index 97884437d0..6a343aa425 100644 --- a/packages/nuxt-ripple-cli/src/commands/init/_templates/site/latest/nuxt.config.ts.t +++ b/packages/nuxt-ripple-cli/src/commands/init/_templates/site/latest/nuxt.config.ts.t @@ -9,6 +9,7 @@ export default defineNuxtConfig({ '@dpc-sdp/nuxt-ripple-analytics', '@dpc-sdp/nuxt-ripple-preview', '@dpc-sdp/ripple-tide-event', + '@dpc-sdp/ripple-tide-topic', '@dpc-sdp/ripple-tide-landing-page', '@dpc-sdp/ripple-tide-grant', '@dpc-sdp/ripple-tide-publication', diff --git a/packages/ripple-tide-search/components/TideSearchListingPage.vue b/packages/ripple-tide-search/components/TideSearchListingPage.vue index 41e3a1ab07..77de47871d 100644 --- a/packages/ripple-tide-search/components/TideSearchListingPage.vue +++ b/packages/ripple-tide-search/components/TideSearchListingPage.vue @@ -133,10 +133,16 @@ onAggregationUpdateHook.value = (aggs) => { } const handleSearchSubmit = () => { - // Submitting the search term should also 'apply' the filters, but the filters live in a seperate form. - // To solve this, when the search term form is submitted, we trigger a submission of the filters form, - // it is there where the actual search request will be triggered. - submitForm('tide-search-filter-form') + if (props.userFilters && props.userFilters.length) { + // Submitting the search term should also 'apply' the filters, but the filters live in a seperate form. + // To solve this, when the search term form is submitted, we trigger a submission of the filters form, + // it is there where the actual search request will be triggered. + // This will only work if there is an actual filter form to submit. + submitForm('tide-search-filter-form') + } else { + // If there's no filters in the form, we need to just do the search without submitting the filter form + submitSearch() + } } const handleFilterSubmit = (form) => { @@ -233,6 +239,7 @@ const numAppliedFilters = computed(() => { @update:input-value="handleUpdateSearchTerm" /> + + + + diff --git a/packages/ripple-tide-topic/mapping/index.ts b/packages/ripple-tide-topic/mapping/index.ts new file mode 100644 index 0000000000..104ed3574f --- /dev/null +++ b/packages/ripple-tide-topic/mapping/index.ts @@ -0,0 +1,30 @@ +import type { IRplTideModuleMapping } from '@dpc-sdp/ripple-tide-api/types' +import { + tidePageBaseMapping, + tidePageBaseIncludes +} from '@dpc-sdp/nuxt-ripple/mapping' + +const tideTopicModule: IRplTideModuleMapping = { + mapping: { + ...tidePageBaseMapping(), + type: () => 'topic', + title: (field) => + `${field.type === 'taxonomy_term--tags' ? 'Tags' : 'Topic'} - ${ + field.name + }`, + header: { + title: 'name' + }, + filter: { + field: (field) => { + return field.type === 'taxonomy_term--tags' + ? 'field_tags_name' + : 'field_topic_name' + }, + value: 'name' + } + }, + includes: [...tidePageBaseIncludes()] +} + +export default tideTopicModule diff --git a/packages/ripple-tide-topic/nuxt.config.ts b/packages/ripple-tide-topic/nuxt.config.ts new file mode 100644 index 0000000000..268da7f8c1 --- /dev/null +++ b/packages/ripple-tide-topic/nuxt.config.ts @@ -0,0 +1 @@ +export default defineNuxtConfig({}) diff --git a/packages/ripple-tide-topic/package.json b/packages/ripple-tide-topic/package.json new file mode 100644 index 0000000000..e1664a46b8 --- /dev/null +++ b/packages/ripple-tide-topic/package.json @@ -0,0 +1,18 @@ +{ + "license": "Apache-2.0", + "name": "@dpc-sdp/ripple-tide-topic", + "description": "Ripple mappings and components for Tide topics and tags", + "main": "./nuxt.config.ts", + "exports": { + ".": "./nuxt.config.ts", + "./mapping": "./mapping/index.ts", + "./types": "./types.ts" + }, + "version": "2.1.0-alpha.188", + "dependencies": { + "@dpc-sdp/nuxt-ripple": "workspace:*", + "@dpc-sdp/ripple-tide-api": "workspace:*", + "@dpc-sdp/ripple-ui-core": "workspace:*", + "@dpc-sdp/ripple-tide-search": "workspace:*" + } +} diff --git a/packages/ripple-tide-topic/server/plugins/topic.ts b/packages/ripple-tide-topic/server/plugins/topic.ts new file mode 100644 index 0000000000..8046a5d6ff --- /dev/null +++ b/packages/ripple-tide-topic/server/plugins/topic.ts @@ -0,0 +1,8 @@ +import { defineNitroPlugin } from 'nitropack/dist/runtime/plugin' +import topicMapping from './../../mapping' +import type { NitroApp } from 'nitropack' + +export default defineNitroPlugin(async (nitroApp: NitroApp) => { + nitroApp.tide?.pageApi.setContentType('topic', topicMapping) + nitroApp.tide?.pageApi.setContentType('tags', topicMapping) +}) diff --git a/packages/ripple-tide-topic/types.ts b/packages/ripple-tide-topic/types.ts new file mode 100644 index 0000000000..597b20ad22 --- /dev/null +++ b/packages/ripple-tide-topic/types.ts @@ -0,0 +1,17 @@ +import type { TidePageBase } from '@dpc-sdp/ripple-tide-api/types' + +export interface TideTopicPage extends TidePageBase { + /** + * @description RplHeader component + */ + header: { + title: string + } + /** + * @description Props for component wrapper + */ + filter: { + field: string + value: string + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 919d4a9266..eb9cfdb560 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -254,6 +254,9 @@ importers: '@dpc-sdp/ripple-tide-search': specifier: workspace:* version: link:../../packages/ripple-tide-search + '@dpc-sdp/ripple-tide-topic': + specifier: workspace:* + version: link:../../packages/ripple-tide-topic devDependencies: '@dpc-sdp/ripple-test-utils': specifier: workspace:* @@ -404,6 +407,9 @@ importers: '@dpc-sdp/ripple-tide-search': specifier: workspace:* version: link:../ripple-tide-search + '@dpc-sdp/ripple-tide-topic': + specifier: workspace:* + version: link:../ripple-tide-topic '@dpc-sdp/ripple-ui-forms': specifier: workspace:* version: link:../ripple-ui-forms @@ -719,6 +725,21 @@ importers: specifier: 1.19.1 version: 1.19.1 + packages/ripple-tide-topic: + dependencies: + '@dpc-sdp/nuxt-ripple': + specifier: workspace:* + version: link:../nuxt-ripple + '@dpc-sdp/ripple-tide-api': + specifier: workspace:* + version: link:../ripple-tide-api + '@dpc-sdp/ripple-tide-search': + specifier: workspace:* + version: link:../ripple-tide-search + '@dpc-sdp/ripple-ui-core': + specifier: workspace:* + version: link:../ripple-ui-core + packages/ripple-ui-core: dependencies: '@nuxt/kit': @@ -1597,7 +1618,7 @@ packages: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 @@ -3576,14 +3597,14 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.7 '@babel/types': 7.22.5 /@babel/traverse@7.21.3: resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 '@babel/generator': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 @@ -3644,7 +3665,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 /@babel/types@7.22.4: @@ -3666,7 +3687,7 @@ packages: /@badeball/cypress-configuration@4.2.0: resolution: {integrity: sha512-8Dc6diBW8zUycpCFbr7vqQ8ioNZMvpHV79KGdHVpwpRtkFX6enwG82CKU9DeWys6Ou5dFpXw6NYNYNb46y7UYA==} dependencies: - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.7 debug: 4.3.4(supports-color@8.1.1) esbuild: 0.14.54 glob: 7.2.3 @@ -5676,13 +5697,6 @@ packages: jest-get-type: 28.0.2 dev: true - /@jest/expect-utils@29.4.2: - resolution: {integrity: sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.4.3 - dev: true - /@jest/expect-utils@29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8290,7 +8304,7 @@ packages: resolution: {integrity: sha512-KC2H3IU302juWxChevEbzvr7axBrf0SQI7DQg116KwxChmMvUrO1Z50pnT7i+s9rnYN461OYNj5A7gCoc6cOCQ==} dependencies: '@babel/generator': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.7 '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 '@storybook/csf': 0.1.1 @@ -8944,7 +8958,7 @@ packages: /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.7 '@babel/types': 7.22.5 /@types/babel__traverse@7.18.3: @@ -9805,7 +9819,7 @@ packages: dependencies: consola: 2.15.3 defu: 6.1.2 - h3: 1.6.6 + h3: 1.7.1 hookable: 5.5.3 mlly: 1.3.0 ohash: 1.1.2 @@ -9841,7 +9855,7 @@ packages: dependencies: '@unrouted/core': 0.5.0 cors: 2.8.5 - h3: 1.6.6 + h3: 1.7.1 dev: true /@unrouted/preset-node@0.5.0: @@ -9851,7 +9865,7 @@ packages: '@unrouted/plugins': 0.5.0 compression: 1.7.4 defu: 6.1.2 - h3: 1.6.6 + h3: 1.7.1 pathe: 1.1.1 sirv: 2.0.2 ufo: 1.1.2 @@ -10040,7 +10054,7 @@ packages: /@vue/compiler-sfc@3.3.4: resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} dependencies: - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.7 '@vue/compiler-core': 3.3.4 '@vue/compiler-dom': 3.3.4 '@vue/compiler-ssr': 3.3.4 @@ -15106,10 +15120,10 @@ packages: resolution: {integrity: sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.4.2 + '@jest/expect-utils': 29.5.0 jest-get-type: 29.4.3 jest-matcher-utils: 29.5.0 - jest-message-util: 29.4.2 + jest-message-util: 29.5.0 jest-util: 29.5.0 dev: true @@ -15206,7 +15220,7 @@ packages: resolution: {integrity: sha512-MAU9ci3XdpqOX1aoIoyL2DMzW97P8LYeJxIUkfXhOfsrkH4KLHFaYDwKN0B2l6tqedVJWiTIJtWmxmZfa05vOQ==} dependencies: enhanced-resolve: 5.12.0 - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 ufo: 1.1.2 dev: true @@ -17765,7 +17779,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.21.3 - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -18180,21 +18194,6 @@ packages: stack-utils: 2.0.6 dev: true - /jest-message-util@29.4.2: - resolution: {integrity: sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 29.5.0 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.5.0 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - /jest-message-util@29.5.0: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -18559,7 +18558,7 @@ packages: '@types/node': 18.15.10 chalk: 4.1.2 ci-info: 3.8.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 picomatch: 2.3.1 /jest-validate@28.1.3: @@ -18681,7 +18680,6 @@ packages: /jiti@1.19.1: resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==} hasBin: true - dev: true /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -21983,7 +21981,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -26911,7 +26909,7 @@ packages: fast-glob: 3.3.0 local-pkg: 0.4.3 magic-string: 0.27.0 - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 pkg-types: 1.0.3 scule: 1.0.0 @@ -27277,11 +27275,11 @@ packages: /untyped@1.3.2: resolution: {integrity: sha512-z219Z65rOGD6jXIvIhpZFfwWdqQckB8sdZec2NO+TkcH1Bph7gL0hwLzRJs1KsOo4Jz4mF9guBXhsEnyEBGVfw==} dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.9 '@babel/standalone': 7.22.4 - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 defu: 6.1.2 - jiti: 1.18.2 + jiti: 1.19.1 mri: 1.2.0 scule: 1.0.0 transitivePeerDependencies: @@ -27541,7 +27539,7 @@ packages: dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 vite: 4.1.5(@types/node@18.15.10) @@ -27586,7 +27584,7 @@ packages: vue-tsc: optional: true dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 ansi-escapes: 4.3.2 chalk: 4.1.2 chokidar: 3.5.3 diff --git a/tsconfig.json b/tsconfig.json index ed6b0497ee..31c0f49cac 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,7 +27,8 @@ "@dpc-sdp/ripple-tide-grant": ["ripple-tide-grant/src"], "@dpc-sdp/ripple-tide-landing-page": ["ripple-tide-landing-page/src"], "@dpc-sdp/ripple-tide-media": ["ripple-tide-media/src"], - "@dpc-sdp/ripple-tide-publication": ["ripple-tide-publication/src"] + "@dpc-sdp/ripple-tide-publication": ["ripple-tide-publication/src"], + "@dpc-sdp/ripple-tide-topic": ["ripple-tide-topic/src"] } }, "exclude": ["**/*.stories.ts", "**/*.stories.mdx"]