From 3b48d147d1f2e883052cfab4eb2182b926da4492 Mon Sep 17 00:00:00 2001 From: "MD. Ariful Alam" Date: Tue, 24 Aug 2021 12:07:09 +0600 Subject: [PATCH] Display blog post --- package-lock.json | 342 ++++++++++++++++++++++++----------- package.json | 1 + src/App.js | 1 + src/components/AvatarCard.js | 10 +- src/components/Blog.js | 165 +++++++++++++++-- src/components/Project.js | 6 +- src/config.js | 4 + 7 files changed, 405 insertions(+), 124 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9712c1f..8acf4ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", + "article-api": "^1.0.5", "axios": "^0.21.1", "daisyui": "^1.12.1", "moment": "^2.29.1", @@ -19,7 +20,6 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-icons": "^4.2.0", - "react-lazyload": "^3.2.0", "react-redux": "^7.2.4", "react-scripts": "4.0.3", "sass": "^1.38.0", @@ -1238,11 +1238,14 @@ } }, "node_modules/@babel/runtime": { - "version": "7.12.18", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.18.tgz", - "integrity": "sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", + "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", "dependencies": { "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { @@ -2210,17 +2213,6 @@ "node": ">=10" } }, - "node_modules/@testing-library/dom/node_modules/@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@testing-library/jest-dom": { "version": "5.14.1", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.14.1.tgz", @@ -2242,17 +2234,6 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@testing-library/jest-dom/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -2281,17 +2262,6 @@ "react-dom": "*" } }, - "node_modules/@testing-library/react/node_modules/@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@testing-library/user-event": { "version": "12.8.3", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.8.3.tgz", @@ -2307,17 +2277,6 @@ "@testing-library/dom": ">=7.21.4" } }, - "node_modules/@testing-library/user-event/node_modules/@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@types/anymatch": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", @@ -3468,6 +3427,15 @@ "node": ">=8" } }, + "node_modules/article-api": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/article-api/-/article-api-1.0.5.tgz", + "integrity": "sha512-96bPduc0VL4IeQsl3WW/q25X8Rq24qYKlqa98JhKQA3BesP6BE2+yf8M1XWZvfUC2/xMGaVPFdGrE67wuEKAbQ==", + "dependencies": { + "axios": "^0.21.1", + "string-strip-html": "^8.3.0" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -10965,6 +10933,16 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -10998,11 +10976,21 @@ "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", "dev": true }, + "node_modules/lodash.trim": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz", + "integrity": "sha1-NkJefukL5KpeJ7zruFt9EepHqlc=" + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, + "node_modules/lodash.without": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", + "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=" + }, "node_modules/loglevel": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", @@ -14148,6 +14136,44 @@ "node": ">= 0.6" } }, + "node_modules/ranges-apply": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ranges-apply/-/ranges-apply-5.1.0.tgz", + "integrity": "sha512-VF3a0XUuYS/BQHv2RaIyX1K7S1hbfrs64hkGKgPVk0Y7p4XFwSucjTTttrBqmkcmB/PZx5ISTZdxErRZi/89aQ==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "ranges-merge": "^7.1.0" + } + }, + "node_modules/ranges-merge": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ranges-merge/-/ranges-merge-7.1.0.tgz", + "integrity": "sha512-coTHcyAEIhoEdsBs9f5f+q0rmy7UHvS/5nfuXzuj5oLX/l/tbqM5uxRb6eh8WMdetXia3lK67ZO4tarH4ieulQ==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "ranges-push": "^5.1.0", + "ranges-sort": "^4.1.0" + } + }, + "node_modules/ranges-push": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ranges-push/-/ranges-push-5.1.0.tgz", + "integrity": "sha512-vqGcaGq7GWV1zBa9w83E+dzYkOvE9/3pIRUPvLf12c+mGQCf1nesrkBI7Ob8taN2CC9V1HDSJx0KAQl0SgZftA==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "ranges-merge": "^7.1.0", + "string-collapse-leading-whitespace": "^5.1.0", + "string-trim-spaces-only": "^3.1.0" + } + }, + "node_modules/ranges-sort": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ranges-sort/-/ranges-sort-4.1.0.tgz", + "integrity": "sha512-GOQgk6UtsrfKFeYa53YLiBVnLINwYmOk5l2QZG1csZpT6GdImUwooh+/cRrp7b+fYawZX/rnyA3Ul+pdgQBIzA==", + "dependencies": { + "@babel/runtime": "^7.14.0" + } + }, "node_modules/raw-body": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", @@ -14354,15 +14380,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" }, - "node_modules/react-lazyload": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-lazyload/-/react-lazyload-3.2.0.tgz", - "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw==", - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", - "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/react-redux": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", @@ -16582,6 +16599,24 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-collapse-leading-whitespace": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-collapse-leading-whitespace/-/string-collapse-leading-whitespace-5.1.0.tgz", + "integrity": "sha512-mYz9/Kb5uvRB4DZj46zILwI4y9lD9JsvXG9Xb7zjbwm0I/R40G7oFfMsqJ28l2d7gWMTLJL569NfJQVLQbnHCw==", + "dependencies": { + "@babel/runtime": "^7.14.0" + } + }, + "node_modules/string-left-right": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-left-right/-/string-left-right-4.1.0.tgz", + "integrity": "sha512-ic/WvfNVUygWWsgg8akzSzp2NuttfhrdbH7QmSnda5b5RFmT9aCEDiS/M+gmTJwtFy7+b/2AXU4Z6vejcePQqQ==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isplainobject": "^4.0.6" + } + }, "node_modules/string-length": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", @@ -16599,6 +16634,34 @@ "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" }, + "node_modules/string-strip-html": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.3.0.tgz", + "integrity": "sha512-1+rjTPt0JjpFr1w0bfNL1S6O0I9fJDqM+P3pFTpC6eEEpIXhmBvPLnaQoEuWarswiH219qCefDSxTLxGQyHKUg==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "html-entities": "^2.3.2", + "lodash.isplainobject": "^4.0.6", + "lodash.trim": "^4.5.1", + "lodash.without": "^4.4.0", + "ranges-apply": "^5.1.0", + "ranges-push": "^5.1.0", + "string-left-right": "^4.1.0" + } + }, + "node_modules/string-strip-html/node_modules/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" + }, + "node_modules/string-trim-spaces-only": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-trim-spaces-only/-/string-trim-spaces-only-3.1.0.tgz", + "integrity": "sha512-AW7RSi3+QtE6wR+4m/kmwlyy39neBbCIzrzzu1/RGzNRiPKQOeB3rGzr4ubg4UIQgYtr2w0PrxhKPXgyqJ0vaQ==", + "dependencies": { + "@babel/runtime": "^7.14.0" + } + }, "node_modules/string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -20369,9 +20432,9 @@ } }, "@babel/runtime": { - "version": "7.12.18", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.18.tgz", - "integrity": "sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", + "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -21060,16 +21123,6 @@ "dom-accessibility-api": "^0.5.6", "lz-string": "^1.4.4", "pretty-format": "^26.6.2" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - } } }, "@testing-library/jest-dom": { @@ -21088,14 +21141,6 @@ "redent": "^3.0.0" }, "dependencies": { - "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -21114,16 +21159,6 @@ "requires": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^7.28.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - } } }, "@testing-library/user-event": { @@ -21132,16 +21167,6 @@ "integrity": "sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ==", "requires": { "@babel/runtime": "^7.12.5" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - } } }, "@types/anymatch": { @@ -22073,6 +22098,15 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, + "article-api": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/article-api/-/article-api-1.0.5.tgz", + "integrity": "sha512-96bPduc0VL4IeQsl3WW/q25X8Rq24qYKlqa98JhKQA3BesP6BE2+yf8M1XWZvfUC2/xMGaVPFdGrE67wuEKAbQ==", + "requires": { + "axios": "^0.21.1", + "string-strip-html": "^8.3.0" + } + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -27979,6 +28013,16 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -28012,11 +28056,21 @@ "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", "dev": true }, + "lodash.trim": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz", + "integrity": "sha1-NkJefukL5KpeJ7zruFt9EepHqlc=" + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, + "lodash.without": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", + "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=" + }, "loglevel": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", @@ -30469,6 +30523,44 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, + "ranges-apply": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ranges-apply/-/ranges-apply-5.1.0.tgz", + "integrity": "sha512-VF3a0XUuYS/BQHv2RaIyX1K7S1hbfrs64hkGKgPVk0Y7p4XFwSucjTTttrBqmkcmB/PZx5ISTZdxErRZi/89aQ==", + "requires": { + "@babel/runtime": "^7.14.0", + "ranges-merge": "^7.1.0" + } + }, + "ranges-merge": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ranges-merge/-/ranges-merge-7.1.0.tgz", + "integrity": "sha512-coTHcyAEIhoEdsBs9f5f+q0rmy7UHvS/5nfuXzuj5oLX/l/tbqM5uxRb6eh8WMdetXia3lK67ZO4tarH4ieulQ==", + "requires": { + "@babel/runtime": "^7.14.0", + "ranges-push": "^5.1.0", + "ranges-sort": "^4.1.0" + } + }, + "ranges-push": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ranges-push/-/ranges-push-5.1.0.tgz", + "integrity": "sha512-vqGcaGq7GWV1zBa9w83E+dzYkOvE9/3pIRUPvLf12c+mGQCf1nesrkBI7Ob8taN2CC9V1HDSJx0KAQl0SgZftA==", + "requires": { + "@babel/runtime": "^7.14.0", + "ranges-merge": "^7.1.0", + "string-collapse-leading-whitespace": "^5.1.0", + "string-trim-spaces-only": "^3.1.0" + } + }, + "ranges-sort": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ranges-sort/-/ranges-sort-4.1.0.tgz", + "integrity": "sha512-GOQgk6UtsrfKFeYa53YLiBVnLINwYmOk5l2QZG1csZpT6GdImUwooh+/cRrp7b+fYawZX/rnyA3Ul+pdgQBIzA==", + "requires": { + "@babel/runtime": "^7.14.0" + } + }, "raw-body": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", @@ -30631,12 +30723,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" }, - "react-lazyload": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-lazyload/-/react-lazyload-3.2.0.tgz", - "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw==", - "requires": {} - }, "react-redux": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", @@ -32394,6 +32480,24 @@ "safe-buffer": "~5.2.0" } }, + "string-collapse-leading-whitespace": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-collapse-leading-whitespace/-/string-collapse-leading-whitespace-5.1.0.tgz", + "integrity": "sha512-mYz9/Kb5uvRB4DZj46zILwI4y9lD9JsvXG9Xb7zjbwm0I/R40G7oFfMsqJ28l2d7gWMTLJL569NfJQVLQbnHCw==", + "requires": { + "@babel/runtime": "^7.14.0" + } + }, + "string-left-right": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-left-right/-/string-left-right-4.1.0.tgz", + "integrity": "sha512-ic/WvfNVUygWWsgg8akzSzp2NuttfhrdbH7QmSnda5b5RFmT9aCEDiS/M+gmTJwtFy7+b/2AXU4Z6vejcePQqQ==", + "requires": { + "@babel/runtime": "^7.14.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isplainobject": "^4.0.6" + } + }, "string-length": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", @@ -32408,6 +32512,36 @@ "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" }, + "string-strip-html": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.3.0.tgz", + "integrity": "sha512-1+rjTPt0JjpFr1w0bfNL1S6O0I9fJDqM+P3pFTpC6eEEpIXhmBvPLnaQoEuWarswiH219qCefDSxTLxGQyHKUg==", + "requires": { + "@babel/runtime": "^7.14.0", + "html-entities": "^2.3.2", + "lodash.isplainobject": "^4.0.6", + "lodash.trim": "^4.5.1", + "lodash.without": "^4.4.0", + "ranges-apply": "^5.1.0", + "ranges-push": "^5.1.0", + "string-left-right": "^4.1.0" + }, + "dependencies": { + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" + } + } + }, + "string-trim-spaces-only": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-trim-spaces-only/-/string-trim-spaces-only-3.1.0.tgz", + "integrity": "sha512-AW7RSi3+QtE6wR+4m/kmwlyy39neBbCIzrzzu1/RGzNRiPKQOeB3rGzr4ubg4UIQgYtr2w0PrxhKPXgyqJ0vaQ==", + "requires": { + "@babel/runtime": "^7.14.0" + } + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", diff --git a/package.json b/package.json index c5f06f9..8a9df8a 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", + "article-api": "^1.0.5", "axios": "^0.21.1", "daisyui": "^1.12.1", "moment": "^2.29.1", diff --git a/src/App.js b/src/App.js index 56c6e96..7ea572e 100644 --- a/src/App.js +++ b/src/App.js @@ -153,6 +153,7 @@ function App() {
+
diff --git a/src/components/AvatarCard.js b/src/components/AvatarCard.js index fc60016..9562f39 100644 --- a/src/components/AvatarCard.js +++ b/src/components/AvatarCard.js @@ -39,13 +39,15 @@ const AvatarCard = () => {
-
- { + +
+ { loading ? ( skeleton({ width: 'w-48', height: 'h-8' }) - ) : profile.name + ) : {profile.name} } -
+ +
{ loading ? ( diff --git a/src/components/Blog.js b/src/components/Blog.js index 8554cc4..99d9ee4 100644 --- a/src/components/Blog.js +++ b/src/components/Blog.js @@ -1,24 +1,163 @@ -import { useSelector } from "react-redux"; +import { getDevtoArticle, getMediumArticle } from "article-api"; +import moment from "moment"; +import { Fragment, memo, useEffect, useState } from "react"; +import { CgHashtag } from 'react-icons/cg'; +import config from "../config"; import { skeleton } from "../helpers/utils"; -const { Fragment } = require("react") - const Blog = () => { - const loading = useSelector(state => state.loading); + const [articles, setArticles] = useState(null); + + useEffect(() => { + if ( + typeof config.blog !== 'undefined' && + typeof config.blog.source !== 'undefined' && + typeof config.blog.username !== 'undefined' && + config.blog.source && + config.blog.username + ) { + if (config.blog.source === 'medium') { + getMediumArticle({ + user: config.blog.username + }) + .then(res => { + setArticles(res); + }); + } else if (config.blog.source === 'dev.to') { + getDevtoArticle({ + user: config.blog.username + }) + .then(res => { + setArticles(res); + }); + } + } + }, []) return ( -
-
-
-
-
- {loading ? skeleton({width: 'w-20', height: 'h-8'}) : 'Blog'} -
+ <> +
+
+
+
+
+
    +
  • +
    +
    + {!articles ? skeleton({width: 'w-28', height: 'h-8'}) : 'Recent Posts'} +
    + { + !articles ? skeleton({width: 'w-8', height: 'h-8'}) : ( + + + + ) + } +
    +
  • +
+
+
+
+
-
+ + {/* */} + ) } -export default Blog; \ No newline at end of file +export default memo(Blog); \ No newline at end of file diff --git a/src/components/Project.js b/src/components/Project.js index 7044d5d..287601b 100644 --- a/src/components/Project.js +++ b/src/components/Project.js @@ -95,8 +95,8 @@ const Project = () => {
- {/*
-
+
+
  • @@ -116,7 +116,7 @@ const Project = () => {
-
*/} +
{(loading || !repo) ? renderSkeleton() : renderProjects()} diff --git a/src/config.js b/src/config.js index a69466f..a20c84f 100644 --- a/src/config.js +++ b/src/config.js @@ -3,6 +3,10 @@ module.exports = { email: 'contact@arifszn.com', // optional linkedinUsername: 'ariful-alam', // optional dribbbleUsername: '', // optional + blog: { + source: 'dev.to', // medium | dev.to + username: 'arifszn', + }, skills: [ 'PHP', 'Laravel',