From 4dffc7aaa65980804101543805b5edc7460bbae5 Mon Sep 17 00:00:00 2001 From: Luccas Mateus de Medeiros Gomes Date: Wed, 24 May 2023 12:21:19 -0300 Subject: [PATCH] [examples/ckan-ssg][m] - use the @portaljs/ckan lib --- examples/ckan-ssg/package-lock.json | 98 +++++++++++++++++++ examples/ckan-ssg/package.json | 15 +-- .../pages/@org/[org]/[dataset]/index.tsx | 11 +-- examples/ckan-ssg/pages/index.tsx | 14 +-- 4 files changed, 118 insertions(+), 20 deletions(-) diff --git a/examples/ckan-ssg/package-lock.json b/examples/ckan-ssg/package-lock.json index acaac766..a83ad110 100644 --- a/examples/ckan-ssg/package-lock.json +++ b/examples/ckan-ssg/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@heroicons/react": "^2.0.17", + "@portaljs/ckan": "^0.0.2", "next": "13.3.1", "next-seo": "^6.0.0", "octokit": "^2.0.14", @@ -717,6 +718,20 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@portaljs/ckan": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@portaljs/ckan/-/ckan-0.0.2.tgz", + "integrity": "sha512-L1SeLFrLnNt5WZkJt0eQMs7RVxHMJg7B1cuFBdVy8PCcjfVK6p7DJEZW9ppM0wLDjvx/UgcMIx5BinywaX+gow==", + "dependencies": { + "formik": "^2.2.9", + "swr": "^2.1.5", + "timeago.js": "^4.0.2" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "node_modules/@rushstack/eslint-patch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", @@ -1598,6 +1613,14 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -2420,6 +2443,34 @@ "is-callable": "^1.1.3" } }, + "node_modules/formik": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", + "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "dependencies": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/formik/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -2752,6 +2803,14 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -3391,6 +3450,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "node_modules/lodash.castarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", @@ -4950,6 +5014,11 @@ "react": "^18.2.0" } }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -5492,6 +5561,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swr": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.1.5.tgz", + "integrity": "sha512-/OhfZMcEpuz77KavXST5q6XE9nrOBOVcBLWjMT+oAE/kQHyE3PASrevXCtQDZ8aamntOfFkbVJp7Il9tNBQWrw==", + "dependencies": { + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", @@ -5599,6 +5679,11 @@ "node": ">=0.8" } }, + "node_modules/timeago.js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz", + "integrity": "sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==" + }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -5609,6 +5694,11 @@ "globrex": "^0.1.2" } }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5897,6 +5987,14 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/examples/ckan-ssg/package.json b/examples/ckan-ssg/package.json index fad0b793..57373a4d 100644 --- a/examples/ckan-ssg/package.json +++ b/examples/ckan-ssg/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@heroicons/react": "^2.0.17", + "@portaljs/ckan": "^0.0.2", "next": "13.3.1", "next-seo": "^6.0.0", "octokit": "^2.0.14", @@ -20,14 +21,14 @@ }, "devDependencies": { "@tailwindcss/typography": "^0.5.9", - "autoprefixer": "^10.4.14", - "postcss": "^8.4.23", - "tailwindcss": "^3.3.1", - "eslint": "8.39.0", - "eslint-config-next": "13.3.1", - "typescript": "5.0.4", "@types/node": "18.16.0", "@types/react": "18.0.38", - "@types/react-dom": "18.0.11" + "@types/react-dom": "18.0.11", + "autoprefixer": "^10.4.14", + "eslint": "8.39.0", + "eslint-config-next": "13.3.1", + "postcss": "^8.4.23", + "tailwindcss": "^3.3.1", + "typescript": "5.0.4" } } diff --git a/examples/ckan-ssg/pages/@org/[org]/[dataset]/index.tsx b/examples/ckan-ssg/pages/@org/[org]/[dataset]/index.tsx index d233e7a2..f14a3665 100644 --- a/examples/ckan-ssg/pages/@org/[org]/[dataset]/index.tsx +++ b/examples/ckan-ssg/pages/@org/[org]/[dataset]/index.tsx @@ -11,8 +11,9 @@ import { ServerIcon, UserIcon, } from '@heroicons/react/20/solid'; +import { CKAN } from '@portaljs/ckan'; -const dms = getConfig().publicRuntimeConfig.DMS; +const backend_url = getConfig().publicRuntimeConfig.DMS; const formatter = new Intl.DateTimeFormat('en-US', { year: 'numeric', @@ -25,14 +26,12 @@ const formatter = new Intl.DateTimeFormat('en-US', { }); export const getServerSideProps: GetServerSideProps = async (context) => { + const ckan = new CKAN(backend_url) const { dataset } = context.query; - const response = await fetch( - `${dms}/api/3/action/package_show?id=${dataset}` - ); - const _dataset = await response.json(); + const _dataset = await ckan.getDatasetDetails(dataset as string) return { props: { - dataset: _dataset.result, + dataset: _dataset, }, }; }; diff --git a/examples/ckan-ssg/pages/index.tsx b/examples/ckan-ssg/pages/index.tsx index 7e7ba63a..c1968b02 100644 --- a/examples/ckan-ssg/pages/index.tsx +++ b/examples/ckan-ssg/pages/index.tsx @@ -1,7 +1,8 @@ import getConfig from 'next/config'; import styles from './index.module.css'; +import { CKAN } from '@portaljs/ckan'; -const dms = getConfig().publicRuntimeConfig.DMS +const backend_url = getConfig().publicRuntimeConfig.DMS const formatter = new Intl.DateTimeFormat('en-US', { year: 'numeric', @@ -15,12 +16,11 @@ const formatter = new Intl.DateTimeFormat('en-US', { export async function getServerSideProps() { - const response = await fetch(`${dms}/api/3/action/package_search`) - const datasets = await response.json() - const datasetsWithDetails = await Promise.all(datasets.result.results.map(async (dataset) => { - const response = await fetch(`${dms}/api/3/action/package_show?id=` + dataset.name) - const json = await response.json() - return json.result + const ckan = new CKAN(backend_url) + const { datasets } = await ckan.packageSearch({ limit: 1000, offset: 0, groups:[], orgs: [], tags: []}) + const datasetsWithDetails = await Promise.all(datasets.map(async (dataset) => { + const _dataset = await ckan.getDatasetDetails(dataset.name) + return _dataset })) return {