diff --git a/package-lock.json b/package-lock.json index 533b99f..5e3131d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2310,6 +2310,205 @@ "@babel/runtime": "^7.12.5" } }, + "@tiptap/core": { + "version": "2.0.0-beta.103", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.103.tgz", + "integrity": "sha512-tCU94zEJgv/mADMZ0dM1/+23uJoc2YyrRauEekt6Yd44TdPTJSDk7v82GJdmMLWj5mDjLbXVL7kvrJpi0/4zjg==", + "requires": { + "@types/prosemirror-commands": "^1.0.4", + "@types/prosemirror-inputrules": "^1.0.4", + "@types/prosemirror-keymap": "^1.0.4", + "@types/prosemirror-model": "^1.13.2", + "@types/prosemirror-schema-list": "^1.0.3", + "@types/prosemirror-state": "^1.2.7", + "@types/prosemirror-transform": "^1.1.4", + "@types/prosemirror-view": "^1.19.0", + "prosemirror-commands": "^1.1.10", + "prosemirror-inputrules": "^1.1.3", + "prosemirror-keymap": "^1.1.3", + "prosemirror-model": "^1.14.3", + "prosemirror-schema-list": "^1.1.5", + "prosemirror-state": "^1.3.4", + "prosemirror-transform": "^1.3.2", + "prosemirror-view": "^1.20.0" + } + }, + "@tiptap/extension-blockquote": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.15.tgz", + "integrity": "sha512-Cso44KsYsqKqaNveQmx5KVaLy9krq5AzE9WhGVDBSFqWhvuIJkQYrTRBbOTfUDs/st9VuwJrbjTDD65ow50wEw==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-bold": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.15.tgz", + "integrity": "sha512-jKyV6iiwhxwa0+7uuKD74jNDVNLNOS1GmU14MgaA95pY5e1fyaRBPPX8Gtt89niz2CLOY711AV17RPZTe/e60w==" + }, + "@tiptap/extension-bubble-menu": { + "version": "2.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.33.tgz", + "integrity": "sha512-EvXSXyeLFnOAEPvbVz9B4ppP+paDGyK/Fy9b36fkH0hacFLS/lKb/8HrfTXItc0uZIe6xY6RhXTdkx1eAPTdTA==", + "requires": { + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.20.0", + "tippy.js": "^6.3.1" + } + }, + "@tiptap/extension-bullet-list": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.15.tgz", + "integrity": "sha512-5i44JzsZOh8Ci6CuYRQy6W3jCpYgX0+VuJKeHvZ6Aomy4Qqrtc9Jk43PBmCj91lNUUtH6Io9l+kDrLCumEFnEg==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-code": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.16.tgz", + "integrity": "sha512-Kakg/RMiVrxjzIkLVDXtbCzRh/9W8dgSG04IhMZNOI8N9vWn8Z78jdUyxEEDTcL/JyWWcMxn9AsJw2U5ajO3pA==" + }, + "@tiptap/extension-code-block": { + "version": "2.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.17.tgz", + "integrity": "sha512-u3RY991mXtjuw+trVaDwbAhuPPlU8l6kS4rXIxWJ5W/sNElbmfHLVu7RP++YwM8KOQrCrQl8TJbZTEIekMw61w==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-document": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.0.0-beta.13.tgz", + "integrity": "sha512-nrufdKziA/wovaY4DjGkc8OGuIZi8CH8CW3+yYfeWbruwFKkyZHlZy9nplFWSEqBHPAeqD+px9r91yGMW3ontA==" + }, + "@tiptap/extension-dropcursor": { + "version": "2.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.19.tgz", + "integrity": "sha512-rslIcVvD42NNh5sEbkCkG03DWMFBrS5KoK+lDOdIcC1DjmTtpVgcLvvE01btzaB3ljx+UVqI2Zaxa6VOiTeEMw==", + "requires": { + "@types/prosemirror-dropcursor": "^1.0.3", + "prosemirror-dropcursor": "^1.3.5" + } + }, + "@tiptap/extension-floating-menu": { + "version": "2.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.27.tgz", + "integrity": "sha512-PgoqO5OxBDMFZroXFD7mpwfDLxeG44xFHu6WK4Gf3O8jqGAQpEr4rMKyTnoNL9PYFhEwtNBzxUopumOT0Po/zQ==", + "requires": { + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.20.0", + "tippy.js": "^6.3.1" + } + }, + "@tiptap/extension-gapcursor": { + "version": "2.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.19.tgz", + "integrity": "sha512-GZYMR+Z45bn87CMuOHyxzTJOFoCv58mNakIBdSGX+8A+ExBFeZr/qLqxDxN3wz+LRqy7pREe5K3UxJxpsYnCzA==", + "requires": { + "@types/prosemirror-gapcursor": "^1.0.4", + "prosemirror-gapcursor": "^1.1.5" + } + }, + "@tiptap/extension-hard-break": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.16.tgz", + "integrity": "sha512-vRw8OIJlvlr17Y7mtJGL/dWbotX9fjgmA/zYqL//UIXQjp1FWW5JMh5E1Z5+jlJpGWjsWGH8fHpGSM2JCZVPRw==" + }, + "@tiptap/extension-heading": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.15.tgz", + "integrity": "sha512-UoXDwEdCV9KiPh0wj0jj2Jt6VDqkoTaSU3d9bmEBLwg1Gjgbuv39JDst7oxSqbf9rgbl3txbeOy35wVBKe9CqA==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-history": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.16.tgz", + "integrity": "sha512-nrNwV8a7zUt1t2I/kPX5Y6N9vZ8mrugimJIQmPGIp/4mmw1SEUzkaPpIsv6+ELmqMHSDktQ0ofb3pXeWDXWZvw==", + "requires": { + "@types/prosemirror-history": "^1.0.3", + "prosemirror-history": "^1.2.0" + } + }, + "@tiptap/extension-horizontal-rule": { + "version": "2.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.19.tgz", + "integrity": "sha512-RrU7+inExgC+rRmFWoTxALbu/IgRGRik11LPhMhqrCB+n0XFRUMyVEb/jbfgHWVrPmTXq0MbSWW6LYw3iREzRA==", + "requires": { + "prosemirror-state": "^1.3.4" + } + }, + "@tiptap/extension-italic": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.15.tgz", + "integrity": "sha512-ZCz1vCysLdvOUrwODuyBP0BDaemCLh6ib7qTYoSDKdive9kfn0Vc5Fg3o8xgHrtrUfwKIJz/sWOknjDEGIc9cw==" + }, + "@tiptap/extension-list-item": { + "version": "2.0.0-beta.14", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.14.tgz", + "integrity": "sha512-t6xwEqP+d5443Ul2Jvqz9kXb3ro7bA7yY9HA0vskm3120WxxHW9jxgxZN+82Ot5Tm7nXOAlsN6vuqnt4idnxZQ==" + }, + "@tiptap/extension-ordered-list": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.15.tgz", + "integrity": "sha512-j9Xh8CYtV+C/wrTXEWN+U7NJIQ/cQrjta80Mm2hFiE2KDtFNkpsPqG6UBoky04EPFphR5xDUsO1nCT7T7Tei5A==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-paragraph": { + "version": "2.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.17.tgz", + "integrity": "sha512-qCQVCf9c2hgaeIdfy22PaoZyW5Vare/1aGkOEAaZma5RjrUbV9hrRKwoW9LsDjnh1EN1fIeKdg02yEhnHWtG8A==" + }, + "@tiptap/extension-strike": { + "version": "2.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.17.tgz", + "integrity": "sha512-+WRd0RuCK4+jFKNVN+4rHTa5VMqqGDO2uc+TknkqhFqWp/z96OAGlpHJOwPrnW1fLbpjEBBQIr1vVYSw6KgcZg==" + }, + "@tiptap/extension-text": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.13.tgz", + "integrity": "sha512-0EtAwuRldCAoFaL/iXgkRepEeOd55rPg5N4FQUN1xTwZT7PDofukP0DG/2jff/Uj17x4uTaJAa9qlFWuNnDvjw==" + }, + "@tiptap/react": { + "version": "2.0.0-beta.66", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.0.0-beta.66.tgz", + "integrity": "sha512-K76clMM7ejdVqrhHo2f83sKtqbr9+ZplPRKZZReSOye+LDzZ/lvvbSPfE3ZeCNolbpCO1YGbBfTGL0LGZKgtNQ==", + "requires": { + "@tiptap/extension-bubble-menu": "^2.0.0-beta.33", + "@tiptap/extension-floating-menu": "^2.0.0-beta.27", + "prosemirror-view": "^1.20.0" + } + }, + "@tiptap/starter-kit": { + "version": "2.0.0-beta.102", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.102.tgz", + "integrity": "sha512-RcqanW+1d8fwur3DTu/FxzU/UiO8yo4/LacZg6oQ9glbpdfPjkmRQ99yJ+Q4TJgMubl8LZ3952jrhq5H3OCb7Q==", + "requires": { + "@tiptap/core": "^2.0.0-beta.103", + "@tiptap/extension-blockquote": "^2.0.0-beta.15", + "@tiptap/extension-bold": "^2.0.0-beta.15", + "@tiptap/extension-bullet-list": "^2.0.0-beta.15", + "@tiptap/extension-code": "^2.0.0-beta.16", + "@tiptap/extension-code-block": "^2.0.0-beta.17", + "@tiptap/extension-document": "^2.0.0-beta.13", + "@tiptap/extension-dropcursor": "^2.0.0-beta.19", + "@tiptap/extension-gapcursor": "^2.0.0-beta.19", + "@tiptap/extension-hard-break": "^2.0.0-beta.16", + "@tiptap/extension-heading": "^2.0.0-beta.15", + "@tiptap/extension-history": "^2.0.0-beta.16", + "@tiptap/extension-horizontal-rule": "^2.0.0-beta.19", + "@tiptap/extension-italic": "^2.0.0-beta.15", + "@tiptap/extension-list-item": "^2.0.0-beta.14", + "@tiptap/extension-ordered-list": "^2.0.0-beta.15", + "@tiptap/extension-paragraph": "^2.0.0-beta.17", + "@tiptap/extension-strike": "^2.0.0-beta.17", + "@tiptap/extension-text": "^2.0.0-beta.13" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -2562,6 +2761,11 @@ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, + "@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -2577,6 +2781,108 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" }, + "@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-dropcursor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.3.tgz", + "integrity": "sha512-b0/8njnJ4lwyHKcGuCMf3x7r1KjxyugB1R/c2iMCjplsJHSC7UY9+OysqgJR5uUXRekUSGniiLgBtac/lvH6wg==", + "requires": { + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-gapcursor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.4.tgz", + "integrity": "sha512-9xKjFIG5947dzerFvkLWp6F53JwrUYoYwh3SgcTFEp8SbSfNNrez/PFYVZKPnoqPoaK5WtTdQTaMwpCV9rXQIg==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-history": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.3.tgz", + "integrity": "sha512-5TloMDRavgLjOAKXp1Li8u0xcsspzbT1Cm9F2pwHOkgvQOz1jWQb2VIXO7RVNsFjLBZdIXlyfSLivro3DuMWXg==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-inputrules": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-inputrules/-/prosemirror-inputrules-1.0.4.tgz", + "integrity": "sha512-lJIMpOjO47SYozQybUkpV6QmfuQt7GZKHtVrvS+mR5UekA8NMC5HRIVMyaIauJLWhKU6oaNjpVaXdw41kh165g==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "requires": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-model": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.13.2.tgz", + "integrity": "sha512-a2rDB0aZ+7aIP7uBqQq1wLb4Hg4qqEvpkCqvhsgT/gG8IWC0peCAZfQ24sgTco0qSJLeDgIbtPeU6mgr869/kg==", + "requires": { + "@types/orderedmap": "*" + } + }, + "@types/prosemirror-schema-list": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-list/-/prosemirror-schema-list-1.0.3.tgz", + "integrity": "sha512-uWybOf+M2Ea7rlbs0yLsS4YJYNGXYtn4N+w8HCw3Vvfl6wBAROzlMt0gV/D/VW/7J/LlAjwMezuGe8xi24HzXA==", + "requires": { + "@types/orderedmap": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-state": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.7.tgz", + "integrity": "sha512-clJf5uw3/XQnBJtl2RqYXoLMGBySnLYl43xtDvFfQZKkLnnYcM1SDU8dcz7lWjl2Dm+H98RpLOl44pp7DYT+wA==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-transform": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.4.tgz", + "integrity": "sha512-HP1PauvkqSgDquZut8HaLOTUDQ6jja/LAy4OA7tTS1XG7wqRnX3gLUyEj0mD6vFd4y8BPkNddNdOh/BeGHlUjg==", + "requires": { + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-view": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.19.0.tgz", + "integrity": "sha512-Y8OX9L+Yni0HgXAN9wcNSf61IId13uqpURnRC5WkmCOlVDsr35vfGjj+tcaQL4dZzblsu3bRkXI/c0oGXp+xgw==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, "@types/q": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", @@ -3969,15 +4275,9 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "bootstrap": { -<<<<<<< HEAD - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.0.tgz", - "integrity": "sha512-bs74WNI9BgBo3cEovmdMHikSKoXnDgA6VQjJ7TyTotU6L7d41ZyCEEelPwkYEzsG/Zjv3ie9IE3EMAje0W9Xew==" -======= "version": "3.4.1", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz", "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==" ->>>>>>> greg }, "brace-expansion": { "version": "1.1.11", @@ -4764,6 +5064,14 @@ "sha.js": "^2.4.8" } }, + "cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -5551,6 +5859,16 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, + "draft-js": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.11.7.tgz", + "integrity": "sha512-ne7yFfN4sEL82QPQEn80xnADR8/Q6ALVworbC5UOSzOvjffmYfFsr3xSZtxbIirti14R7Y33EZC5rivpLgIbsg==", + "requires": { + "fbjs": "^2.0.0", + "immutable": "~3.7.4", + "object-assign": "^4.1.1" + } + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -5652,6 +5970,11 @@ } } }, + "enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ=" + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -6805,6 +7128,36 @@ "bser": "2.1.1" } }, + "fbjs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-2.0.0.tgz", + "integrity": "sha512-8XA8ny9ifxrAWlyhAbexXcs3rRMtxWcs3M0lctLfB49jRDHiaxj+Mo0XxbwE7nKZYzgCFoq64FS+WFd4IycPPQ==", + "requires": { + "core-js": "^3.6.4", + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + } + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -7804,6 +8157,11 @@ "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" }, + "immutable": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" + }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -9915,6 +10273,14 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, + "json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=", + "requires": { + "string-convert": "^0.2.0" + } + }, "json3": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", @@ -10658,6 +11024,11 @@ } } }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, "node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -11005,6 +11376,11 @@ "word-wrap": "^1.2.3" } }, + "orderedmap": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.1.tgz", + "integrity": "sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ==" + }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -12489,6 +12865,109 @@ "warning": "^4.0.0" } }, + "prosemirror-commands": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.1.10.tgz", + "integrity": "sha512-IWyBBXNAd44RM6NnBPljwq+/CM2oYCQJkF+YhKEAZNwzW0uFdGf4qComhjbKZzqFdu6Iub2ZhNsXgwPibA0lCQ==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-dropcursor": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.5.tgz", + "integrity": "sha512-tNUwcF2lPAkwKBZPZRtbxpwljnODRNZ3eiYloN1DSUqDjMT1nBZm0nejaEMS1TvNQ+3amibUSAiV4hX+jpASFA==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "prosemirror-gapcursor": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.1.5.tgz", + "integrity": "sha512-SjbUZq5pgsBDuV3hu8GqgIpZR5eZvGLM+gPQTqjVVYSMUCfKW3EGXTEYaLHEl1bGduwqNC95O3bZflgtAb4L6w==", + "requires": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "prosemirror-history": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.2.0.tgz", + "integrity": "sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ==", + "requires": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "prosemirror-inputrules": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.1.3.tgz", + "integrity": "sha512-ZaHCLyBtvbyIHv0f5p6boQTIJjlD6o2NPZiEaZWT2DA+j591zS29QQEMT4lBqwcLW3qRSf7ZvoKNbf05YrsStw==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-keymap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.4.tgz", + "integrity": "sha512-Al8cVUOnDFL4gcI5IDlG6xbZ0aOD/i3B17VT+1JbHWDguCgt/lBHVTHUBcKvvbSg6+q/W4Nj1Fu6bwZSca3xjg==", + "requires": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "prosemirror-model": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.14.3.tgz", + "integrity": "sha512-yzZlBaSxfUPIIP6U5Edh5zKxJPZ5f7bwZRhiCuH3UYkWhj+P3d8swHsbuAMOu/iDatDc5J/Qs5Mb3++mZf+CvQ==", + "requires": { + "orderedmap": "^1.1.0" + } + }, + "prosemirror-schema-list": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.5.tgz", + "integrity": "sha512-9gadhga/wySVfb/iZ2vOpndbG0XroeLw0HkkZN5demNbOea6U5oQtJmvyYWC7ZVf3WkhmVdVsOXrllM9JcC20A==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-transform": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.3.2.tgz", + "integrity": "sha512-/G6d/u9Mf6Bv3H1XR8VxhpjmUO75LYmnvj+s3ZfZpakU1hnQbsvCEybml1B3f2IWUAAQRFkbO1PnsbFhLZsYsw==", + "requires": { + "prosemirror-model": "^1.0.0" + } + }, + "prosemirror-view": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.20.0.tgz", + "integrity": "sha512-OqU/bHUIiJhpyb2ytX4fLalYAJJOyZ0k5H0AibP/WPsdHq9CqmJFU676gO+N8WWhR5tVz1NxsqMZgEBy5Lc6GQ==", + "requires": { + "prosemirror-model": "^1.14.3", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -13003,6 +13482,18 @@ "workbox-webpack-plugin": "5.1.4" } }, + "react-slick": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.28.1.tgz", + "integrity": "sha512-JwRQXoWGJRbUTE7eZI1rGIHaXX/4YuwX6gn7ulfvUZ4vFDVQAA25HcsHSYaUiRCduTr6rskyIuyPMpuG6bbluw==", + "requires": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + } + }, "react-transition-group": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", @@ -13375,6 +13866,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "resolve": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", @@ -13610,6 +14106,11 @@ } } }, + "rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, "rowdy-logger": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/rowdy-logger/-/rowdy-logger-1.0.2.tgz", @@ -14534,6 +15035,11 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=" + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -15014,6 +15520,14 @@ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, + "tippy.js": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.1.tgz", + "integrity": "sha512-JnFncCq+rF1dTURupoJ4yPie5Cof978inW6/4S6kmWV7LL9YOSEVMifED3KdrVPEG+Z/TFH2CDNJcQEfaeuQww==", + "requires": { + "@popperjs/core": "^2.8.3" + } + }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -15195,6 +15709,11 @@ "is-typedarray": "^1.0.0" } }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" + }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -15518,6 +16037,11 @@ "browser-process-hrtime": "^1.0.0" } }, + "w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, "w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", diff --git a/package.json b/package.json index 4a36c8c..32abfdb 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,12 @@ "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^12.8.3", + "@tiptap/react": "^2.0.0-beta.66", + "@tiptap/starter-kit": "^2.0.0-beta.102", "axios": "^0.21.1", "bootstrap": "^3.4.1", "cors": "^2.8.5", + "draft-js": "^0.11.7", "express": "^4.17.1", "jquery": "^3.6.0", "mongoose": "^6.0.4", @@ -19,6 +22,7 @@ "react-multi-carousel": "^2.6.5", "react-router-dom": "^5.2.1", "react-scripts": "4.0.3", + "react-slick": "^0.28.1", "reactstrap": "^8.10.0", "rowdy-logger": "^1.0.2", "web-vitals": "^1.1.2" diff --git a/public/images/Moped.jpg b/public/images/Moped.jpg new file mode 100644 index 0000000..f59808f Binary files /dev/null and b/public/images/Moped.jpg differ diff --git a/public/images/Moped.png b/public/images/Moped.png deleted file mode 100644 index f7a005a..0000000 Binary files a/public/images/Moped.png and /dev/null differ diff --git a/public/images/airport.jpeg b/public/images/airport.jpeg index 5b0ab78..d33601e 100644 Binary files a/public/images/airport.jpeg and b/public/images/airport.jpeg differ diff --git a/public/images/citybg.jpg b/public/images/citybg.jpg new file mode 100644 index 0000000..31bbade Binary files /dev/null and b/public/images/citybg.jpg differ diff --git a/public/index.html b/public/index.html index aa069f2..f9d5c75 100644 --- a/public/index.html +++ b/public/index.html @@ -2,14 +2,28 @@ - + + + + + + + - + - React App + Wayfarer App @@ -39,5 +53,17 @@ To begin the development, run `npm start` or `yarn start`. To create a production bundle, use `npm run build` or `yarn build`. --> + + + + + + + + diff --git a/public/manifest.json b/public/manifest.json index 080d6c7..773e443 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -6,17 +6,9 @@ "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" } + + ], "start_url": ".", "display": "standalone", diff --git a/src/App.css b/src/App.css index 832756a..937af3e 100644 --- a/src/App.css +++ b/src/App.css @@ -6,11 +6,12 @@ } .header { border: 1px solid black; - font-family: 'Bellota Text'; + font-family: 'Bellota Text', 'Sans'; font-size: 30px; color: white; padding: 5px; - background: rgba(250, 249, 249, 0.611); + background: rgb(170, 194, 216); + display: float; } .logobanner { display: inline; @@ -34,8 +35,6 @@ .search{ padding-right: 2px; } -.authentication{ -} .pics{ height: 400px; @@ -61,11 +60,42 @@ border: 1px solid black; margin: auto; } -.App{ +/* .App{ background-position: fixed center; background-size: cover; - height: 100vh; -} + +} */ /* .city-show-page{ +} */ + -} */ \ No newline at end of file + +/* Styling the Index Carousel */ +/* .carousel-pics{ +} */ +.cityindeximage{ + width:400px; + height: 300px; +} +.cities-index{ + margin: 0 auto; + padding: 20px; + background-repeat: no-repeat; + background-size: cover; +} +.carousel-container{ + padding: 20px; + background-color: rgba(255,255,255,0.7); +} +.carousel-index{ + text-align: center; +} +.cityindexname{ + font-size: 20px; + color: white; + font-family: 'Bellota Text', 'Sans'; + text-align: center; + position: fixed; + bottom: 125px; + margin-left: 150px; +} diff --git a/src/App.js b/src/App.js index 33dec7a..2011b03 100644 --- a/src/App.js +++ b/src/App.js @@ -15,14 +15,11 @@ import CityCarousel from './partials/CityCarousel' function App() { return (
+ className="App">
-
); diff --git a/src/components/Header.jsx b/src/components/Header.jsx index d6ee6a2..b117bf6 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -1,14 +1,18 @@ import React from 'react'; +import { Link } from 'react-router-dom' function Header(){ return(
- +
  • Search
  •   -
  • Authentication
  •   + Sign-Up   + Login   + +
  • Cities
  •  
diff --git a/src/config/Routes.jsx b/src/config/Routes.jsx index ca6088a..b7091fe 100644 --- a/src/config/Routes.jsx +++ b/src/config/Routes.jsx @@ -1,11 +1,17 @@ import React from 'react'; import HomePage from '../pages/HomePage'; + import CitiesIndexPage from '../pages/CitiesIndexPage'; import ArticlePage from '../pages/ArticlePage'; import CityShowPage from '../pages/CityShowPage'; import { Switch, Route } from 'react-router-dom'; import CreateCity from '../pages/CreateCity'; import CityModel from '../models/CityModel' +import CreateArticlePage from '../pages/CreateArticlePage'; +import SignupPage from '../pages/SignupPage'; +import LoginPage from '../pages/LoginPage' +// import CityModel from '../models/CityModel'; + function Routes(){ @@ -16,6 +22,12 @@ function Routes(){ {/* */} + + + + } /> + + } /> @@ -23,10 +35,14 @@ function Routes(){ {/* { }} /> */} - + + } /> + + } /> + ) diff --git a/src/index.css b/src/index.css index ad5c070..7a39cd4 100644 --- a/src/index.css +++ b/src/index.css @@ -5,6 +5,13 @@ body { sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + +} + +html,body,#root,.App,.homepage-css{ + background-position: fixed center; + background-size: cover; + min-height: 100vh; } code { diff --git a/src/index.js b/src/index.js index 50314c3..b6d88ec 100644 --- a/src/index.js +++ b/src/index.js @@ -4,14 +4,16 @@ import { BrowserRouter as Router } from 'react-router-dom'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; +import 'react-bootstrap' + //bootstrap stuff // import Bootstrap from '/node_modules/react-bootstrap' // import'./node_modules/bootstrap/dist/css/bootstrap.css'; // import'./node_modules/bootstrap/dist/css/bootstrap-theme.css'; -import $ from 'jquery'; +// import $ from 'jquery'; import Popper from 'popper.js'; -import 'bootstrap/dist/js/bootstrap.bundle.min'; +// import './bootstrap/dist/js/bootstrap.bundle.min'; import 'bootstrap/dist/css/bootstrap.min.css'; ReactDOM.render( diff --git a/src/models/ArticleModel.js b/src/models/ArticleModel.js new file mode 100644 index 0000000..24d2c0b --- /dev/null +++ b/src/models/ArticleModel.js @@ -0,0 +1,24 @@ +const url = 'http://localhost:4000/api/cities/'; +//store logic to make api calls (fetch/axios here) +class ArticleModel { + static all() { + // fetch method uses a JS promise + // when we call fetch, fetch is promising that at some point there will be a response + return fetch(url) + .then((response)=>{ + return response.json() //convert response to json + }) + .catch((err)=>{ + console.log(err) + // show user a message describing error + + }) + } + // will make fetch call to get a single game by it's id + static show(articleId, cityId){ + return fetch(`${url}/${cityId}/${articleId}`) + .then((response)=> response.json()) + + } +} +export default ArticleModel; \ No newline at end of file diff --git a/src/models/CityModel.js b/src/models/CityModel.js index 53420cc..95026b0 100644 --- a/src/models/CityModel.js +++ b/src/models/CityModel.js @@ -18,6 +18,9 @@ class CityModel { static show(cityId){ return fetch(`${url}/${cityId}`) .then((response)=> response.json()) + .catch((err)=>{ + console.log(err) + }) } } diff --git a/src/pages/ArticlePage.jsx b/src/pages/ArticlePage.jsx index 6729137..2b37a29 100644 --- a/src/pages/ArticlePage.jsx +++ b/src/pages/ArticlePage.jsx @@ -1,10 +1,44 @@ import React from 'react' -function ArticlePage() { - return( -
-

article

+import ArticleModel from '../models/ArticleModel' +class ArticlePage extends React.Component{ + state = { + content:'' + } + + componentDidMount(){ + const articleId = this.props.match.params.articleId + const cityId = this.props.match.params.cityId + + console.log(articleId) + ArticleModel.show(articleId, cityId).then((data)=>{ + console.log(data) + + this.setState({ + content:data.content + }) + }) + + } + setHTML = ()=>{ + return{ + __html:this.state.content + } + + } + render(){ + console.log(this.props) + return( + +
+ +
+ +
- ) + ) + } } + + export default ArticlePage \ No newline at end of file diff --git a/src/pages/CitiesIndexPage.jsx b/src/pages/CitiesIndexPage.jsx index ff82a73..dc93e56 100644 --- a/src/pages/CitiesIndexPage.jsx +++ b/src/pages/CitiesIndexPage.jsx @@ -3,7 +3,6 @@ import CityModel from '../models/CityModel'; import CityShowPage from '../pages/CityShowPage' import {Link} from 'react-router-dom' import IndexCarousel from '../partials/IndexCarousel' -import MultiCarousel from 'react-multi-carousel'; // const axios = require('axios').default; import axios from 'axios' @@ -16,36 +15,50 @@ import axios from 'axios' class CitiesIndexPage extends Component { state = { cityData: [], - inputVal: '' + inputVal: '', + inputImage:'' } - componentDidMount = () =>{ - //make fetch called here, or at least reference the game model which has it + + fetchData = () =>{ CityModel.all().then((data)=>{ console.log(data) this.setState({cityData:data}) }) } - renderCities(){ - const citiesJSX = this.state.cityData.map((cityObj, idx)=>{ - return( - -

{cityObj.city}

- {/* */} - - ) + + deleteCity = (id) => { + console.log('delete city activated') + const cityDataArray = this.state.cityData.filter((cityObj)=>{ + console.log(cityObj._id, id) + if( cityObj._id == id ){ + return false + } else { + return true + } }) - return citiesJSX + this.setState({cityData:cityDataArray}) + } + + componentDidMount = () =>{ + console.log('mounted') + //make fetch called here, or at least reference the game model which has it + this.fetchData() } + handleChange =(event) => { this.setState({inputVal:event.target.value}) } + handleImageChange =(event) => { + this.setState({inputImage:event.target.value}) + } handleFormSubmit = (event) => { event.preventDefault() console.log('form was submitted') // start out by making the axios api call to ur db in the backend, need to hit the POST route and create a new city, need the underlying route to match what is set up in the express server axios.post('http://localhost:4000/api/cities', { //pass in the object of the new city, containing the actual data that is to be added, for now it is only the name of the city - city: this.state.inputVal + city: this.state.inputVal, + image: this.state.inputImage // the .then() returns our response from the server, the response is the data containing the new city }).then((response)=>{ // because it's buried in some data we have to dig a bit to find it, look in the components tab in the google tools @@ -62,10 +75,16 @@ class CitiesIndexPage extends Component { render() { console.log(this.state) return ( -
-

All Cities

- -
{this.renderCities()}
+
+
+ +

Add a City

+

Add a Pic

+
-
); } diff --git a/src/pages/CityShowPage.jsx b/src/pages/CityShowPage.jsx index ce23fc8..d80fb21 100644 --- a/src/pages/CityShowPage.jsx +++ b/src/pages/CityShowPage.jsx @@ -1,13 +1,15 @@ import '../cityShowPage.css' import React from 'react' import CityModel from '../models/CityModel' +import { Link } from 'react-router-dom' // fetch data for the game in particular by it's id /* */ class CityShowPage extends React.Component{ state = { city:'', - image:'' + image:'', + articles:[] } componentDidMount() { @@ -18,22 +20,42 @@ class CityShowPage extends React.Component{ this.setState({ city: data.city, - image: data.inpmmage - + image: data.image, + articles: data.articles }) }) } + renderArticles = () =>{ + let articlesJSX = this.state.articles.map((article)=>{ + return( +
+ +
+ ) + }) + return articlesJSX + } render(){ - console.log(this.props) + return(
-

City Show Page

-

{this.state.city}

- {/* */} -
+ +

{this.state.city}

+ + {this.renderArticles()} +
+

Create an article

+ +
+
) } - } -export default CityShowPage \ No newline at end of file +export default CityShowPage + diff --git a/src/pages/CreateArticlePage.jsx b/src/pages/CreateArticlePage.jsx new file mode 100644 index 0000000..ddc13ac --- /dev/null +++ b/src/pages/CreateArticlePage.jsx @@ -0,0 +1,197 @@ +import React, { useState } from 'react' +import { Redirect } from 'react-router-dom' +import { useEditor, EditorContent } from '@tiptap/react' +import StarterKit from '@tiptap/starter-kit' +import axios from 'axios' + +// import './styles.scss' + +class MenuBar extends React.Component{ + render(props){ + if (!this.props.editor) { + return null + } else { + return ( + + <> + + + + + + + + + + + + + + + + + + + + ) + } + } +} + +export default (props) => { + const [articleContent, setArticleContent] = useState('') + const [shouldRedirect, setShouldRedirect] = useState(false) + const editor = useEditor({ + extensions: [ + StarterKit, + ], + content: ` +

+ Hi there, +

+

+ this is a basic example of tiptap. Sure, there are all kind of basic text styles you’d probably expect from a text editor. But wait until you see the lists: +

+
    +
  • + That’s a bullet list with one … +
  • +
  • + … or two list items. +
  • +
+ `, + onUpdate() { + const html = this.getHTML() + setArticleContent(html) + + } + }) + const submittingFunction = (event) =>{ + // const json = getJSON() + event.preventDefault() + console.log(articleContent) + //do axios POST here + + axios.post(`http://localhost:4000/api/cities/${props.match.params.id}`, { + content:articleContent + }) + .then((response)=>{ + console.log(response) + setShouldRedirect(true) + }) + } + let jsx = '' + if (shouldRedirect){ + return( + + ) + + } else{ + return ( +
+
+ + + + +
+ ) + + } +} \ No newline at end of file diff --git a/src/pages/CreatePostPage.jsx b/src/pages/CreatePostPage.jsx index 20ad643..4df9882 100644 --- a/src/pages/CreatePostPage.jsx +++ b/src/pages/CreatePostPage.jsx @@ -1,10 +1,30 @@ -import React from 'react' -function CreatePostPage(){ - return( -
+import React from 'react'; +import ReactDOM from 'react-dom'; +import {Editor, EditorState} from 'draft-js'; +import 'draft-js/dist/Draft.css'; -
- ) +class MyEditor extends React.Component { + + constructor(props) { + super(props); + this.state = {editorState: EditorState.createEmpty()}; + this.onChange = editorState => this.setState({editorState}); + } + + // MyInput = () => { + // const [value, setValue] = useState(''); + // const onChange = (evt) => setValue(evt.target.value); + + // return ; + // }; + + render() { + return ( + + ); + } } -export default CreatePostPage \ No newline at end of file +// ReactDOM.render(, document.getElementById('container')); + +export default MyEditor \ No newline at end of file diff --git a/src/pages/HomePage.jsx b/src/pages/HomePage.jsx index 1006126..97a90c5 100644 --- a/src/pages/HomePage.jsx +++ b/src/pages/HomePage.jsx @@ -2,7 +2,9 @@ import React from 'react' import CityCarousel from '../partials/CityCarousel' function HomePage(){ return( -
+
) diff --git a/src/pages/LoginPage.jsx b/src/pages/LoginPage.jsx new file mode 100644 index 0000000..37184be --- /dev/null +++ b/src/pages/LoginPage.jsx @@ -0,0 +1,65 @@ +import React from "react"; +import axios from 'axios'; + +class LoginPage extends React.Component { + state = { + username: "", + password: "", + }; + + onSubmit = (event) => { + event.preventDefault(); + axios.post('http://localhost:4000/login', { + username: this.state.username, + password: this.state.password + }) + .then((response) => { + // console.log(response) + this.props.history.push('/cities') + console.log(this.props); + }) + .catch(function (error) { + console.log(error); + }); + + }; + + handleUsernameChange = (event) => { + this.setState({ username: event.target.value }); + }; + handlePasswordChange = (event) => { + this.setState({ password: event.target.value }); + }; + + render() { + return ( +
+ + +
+
+ + +
+
+ +
+ ); + } +} + +export default LoginPage; diff --git a/src/pages/SignupPage.jsx b/src/pages/SignupPage.jsx new file mode 100644 index 0000000..a9a9c2f --- /dev/null +++ b/src/pages/SignupPage.jsx @@ -0,0 +1,65 @@ +import React from "react"; +import axios from 'axios'; + +class SignupPage extends React.Component { + state = { + username: "", + password: "", + }; + + onSubmit = (event) => { + event.preventDefault(); + axios.post('http://localhost:4000/signup', { + username: this.state.username, + password: this.state.password + }) + .then((response) => { + // console.log(response) + this.props.history.push('/cities') + console.log(this.props); + }) + .catch(function (error) { + console.log(error); + }); + + }; + + handleUsernameChange = (event) => { + this.setState({ username: event.target.value }); + }; + handlePasswordChange = (event) => { + this.setState({ password: event.target.value }); + }; + + render() { + return ( +
+ + +
+
+ + +
+
+ +
+ ); + } +} + +export default SignupPage; diff --git a/src/partials/IndexCarousel.jsx b/src/partials/IndexCarousel.jsx index 5f06be1..b162380 100644 --- a/src/partials/IndexCarousel.jsx +++ b/src/partials/IndexCarousel.jsx @@ -1,67 +1,66 @@ -import Carousel from 'react-multi-carousel'; +import Slider from 'react-slick'; import React from 'react' -import 'react-multi-carousel/lib/styles.css' -import { Link } from 'react-router-dom' +// import "~slick-carousel/slick/slick.css"; +// import "~slick-carousel/slick/slick-theme.css"; +import { Link, Redirect } from 'react-router-dom' +import axios from 'axios'; -const responsive= { - desktop: { - breakpoint: { max: 3000, min: 1024 }, - items: 3, - slidesToSlide: 3 // optional, default to 1. - }, - tablet: { - breakpoint: { max: 1024, min: 464 }, - items: 2, - slidesToSlide: 2 // optional, default to 1. - }, - mobile: { - breakpoint: { max: 464, min: 0 }, - items: 1, - slidesToSlide: 1 // optional, default to 1. - } - }; - class IndexCarousel extends React.Component { - - renderCities(){ - const citiesJSX = this.state.cityData.map((cityObj, idx)=>{ - return( - -

{cityObj.city}

- {/* */} - - ) - }) - return citiesJSX - } - - render(){ +class IndexCarousel extends React.Component { + state = {redirect: null} - return( - - - {/* NEXT STEPS: MOVE CITY DATA INTO INDEXCAROUSEL, CREATE A FORM FOR NEW CITY NAME - AND IMAGE, DYNAMICALLY ADD FORM DATA TO CAROUSEL */} -
Item 1
-
Item 2
-
Item 3
-
Item 4
-
- ) - } + handleDelete = (id) => { + axios.delete(`http://localhost:4000/api/cities/${id}`) + .then(() => { + this.props.deleteCity(id) + }) + } + carouselItems = () => { + const citiesJSX = this.props.cityData.map((cityObj, idx) => { + return ( +
+ + +

{cityObj.city}

+ {/* */} + + {/* */} +
+ ) + }) + return citiesJSX } + render() { + // if (this.state.redirect===true){ + // return + // } + if (this.state.redirect){ + return + } + const settings = { + dots: true, + infinite: true, + speed: 500, + slidesToShow: 1, + slidesToScroll: 1, + }; + if (this.props.cityData.length < 3){ + settings.slidesToShow= this.props.cityData.length + } else if (this.props.cityData.length >= 3){ + settings.slidesToShow= 3 + } + return ( +
+ + {this.carouselItems()} + +
+ ); + + } + +} + export default IndexCarousel \ No newline at end of file