diff --git a/applications/jupyterhub/src/chauthenticator/README.rst b/applications/jupyterhub/src/chauthenticator/README.rst new file mode 100644 index 00000000..e370a397 --- /dev/null +++ b/applications/jupyterhub/src/chauthenticator/README.rst @@ -0,0 +1,21 @@ +cloudharness keycloak authenticator +=================================== + +Authenticator to use Jupyterhub with the keycloak gatekeeper. + + +Running Tests: +-------------- + +.. code-block:: bash + + pip install -r test-requirements.txt + pip install -e . + pytest + +PyTest does a lot of caching and may run into troubles if old files linger around. +Use one ore more of the following commands to clean up before running pytest. + +.. code-block:: bash + + find ./ -name '*.pyc' -delete diff --git a/applications/jupyterhub/src/chauthenticator/chauthenticator/auth.py b/applications/jupyterhub/src/chauthenticator/chauthenticator/auth.py new file mode 100644 index 00000000..3f32dac6 --- /dev/null +++ b/applications/jupyterhub/src/chauthenticator/chauthenticator/auth.py @@ -0,0 +1,96 @@ +import random +import sys +import logging + +from jupyterhub.auth import Authenticator +from jupyterhub.handlers import BaseHandler +from tornado import gen +from traitlets import Bool +from jupyterhub.utils import url_path_join +from cloudharness.auth import AuthClient + +handler = logging.StreamHandler(sys.stdout) +handler.setLevel(logging.DEBUG) +logging.getLogger().addHandler(handler) + +class CloudHarnessAuthenticateHandler(BaseHandler): + """ + Handler for /chkclogin + Creates a new user based on the keycloak user, and auto starts their server + """ + def initialize(self, force_new_server, process_user): + super().initialize() + self.force_new_server = force_new_server + self.process_user = process_user + + @gen.coroutine + def get(self): + self.clear_login_cookie() + + try: + + accessToken = self.request.cookies.get( + 'kc-access', None) or self.request.cookies.get('accessToken', None) + print("Token", accessToken) + if accessToken == '-1' or not accessToken: + import socket + raw_user = self.user_from_username("a-%s-%0.5x" % (socket.inet_aton(self.request.remote_ip).hex(), random.randint(0, 99999))) + else: + accessToken = accessToken.value + user_data = AuthClient.decode_token(accessToken) + username = user_data['sub'] + print("Username", username, "-",user_data['preferred_username']) + raw_user = self.user_from_username(username) + print("JH user: ", raw_user.__dict__) + self.set_login_cookie(raw_user) + except Exception as e: + logging.error("Error getting user from session", exc_info=True) + raise + + user = yield gen.maybe_future(self.process_user(raw_user, self)) + self.redirect(self.get_next_url(user)) + + +class CloudHarnessAuthenticator(Authenticator): + """ + JupyterHub Authenticator for use with Cloud Harness + When JupyterHub is configured to use this authenticator, the client + needs to set the accessToken domain cookie + """ + + auto_login = True + login_service = 'chkc' + + force_new_server = Bool( + True, + help=""" + Stop the user's server and start a new one when visiting /hub/chlogin + When set to True, users going to /hub/chlogin will *always* get a + new single-user server. When set to False, they'll be + redirected to their current session if one exists. + """, + config=True + ) + + def process_user(self, user, handler): + """ + Do additional arbitrary things to the created user before spawn. + user is a user object, and handler is a CloudHarnessAuthenticateHandler + object. Should return the new user object. + This method can be a @tornado.gen.coroutine. + Note: This is primarily for overriding in subclasses + """ + return user + + def get_handlers(self, app): + # FIXME: How to do this better? + extra_settings = { + 'force_new_server': self.force_new_server, + 'process_user': self.process_user + } + return [ + ('/chkclogin', CloudHarnessAuthenticateHandler, extra_settings) + ] + + def login_url(self, base_url): + return url_path_join(base_url, 'chkclogin') diff --git a/applications/jupyterhub/src/osb_jupyter/osb_jupyter/jupyterhub.py b/applications/jupyterhub/src/osb_jupyter/osb_jupyter/jupyterhub.py index 267778d6..423e5c50 100755 --- a/applications/jupyterhub/src/osb_jupyter/osb_jupyter/jupyterhub.py +++ b/applications/jupyterhub/src/osb_jupyter/osb_jupyter/jupyterhub.py @@ -22,6 +22,8 @@ def affinity_spec(key, value): 'topologyKey': 'kubernetes.io/hostname' } +class CookieNotFound(Exception): + pass def change_pod_manifest(self: KubeSpawner): """ @@ -40,7 +42,7 @@ def change_pod_manifest(self: KubeSpawner): def get_from_cookie(cookie_name): cookie = self.handler.request.cookies.get(cookie_name, None) if cookie is None: - raise Exception( + raise CookieNotFound( "Required cookie not found. Check that the cookie named '%s' is set." % cookie_name) return cookie.value @@ -51,6 +53,8 @@ def user_volume_is_legacy(user_id): def workspace_volume_is_legacy(workspace_id): return int(workspace_id) < self.config['apps']['jupyterhub'].get('legacyworkspacemax', 0) + appname = self.image.split('/')[-1].split(':')[0] + try: workspace_id = get_from_cookie('workspaceId') volume_name = f'workspace-{workspace_id}' @@ -81,7 +85,7 @@ def workspace_volume_is_legacy(workspace_id): 'user': str(self.user.id), } - appname = self.image.split('/')[-1].split(':')[0] + self.common_labels = labels self.extra_labels = labels @@ -107,6 +111,17 @@ def workspace_volume_is_legacy(workspace_id): 'mountPath': '/opt/workspace', 'readOnly': not write_access }) + except CookieNotFound: + # Setup a readonly default session + self.pod_name = f'anonymous-{self.user.username}-{appname}' + from pprint import pprint + pprint(self.volumes) + + self.volumes = [] + pprint(self.volume_mounts) + self.volume_mounts = [] + self.maxAge + except Exception as e: log.error('Change pod manifest failed due to an error.', exc_info=True) diff --git a/applications/jupyterlab-minimal/Dockerfile b/applications/jupyterlab-minimal/Dockerfile index 56dedad7..c055ce77 100644 --- a/applications/jupyterlab-minimal/Dockerfile +++ b/applications/jupyterlab-minimal/Dockerfile @@ -1,3 +1,7 @@ FROM jupyter/base-notebook:hub-1.4.2 -COPY hub/jupyter_notebook_config.py /etc/jupyter/jupyter_notebook_config.py \ No newline at end of file +COPY hub/jupyter_notebook_config.py /etc/jupyter/jupyter_notebook_config.py +USER root +RUN mkdir /opt/workspace +RUN chown -R jovyan:users /opt/workspace +USER jovyan \ No newline at end of file diff --git a/applications/jupyterlab/Dockerfile b/applications/jupyterlab/Dockerfile index 8c6b3983..b3313c70 100644 --- a/applications/jupyterlab/Dockerfile +++ b/applications/jupyterlab/Dockerfile @@ -37,7 +37,13 @@ RUN jupyter labextension install plotlywidget USER root ### Some aliases -RUN echo -e '\n\nalias cd..="cd .." \nalias h=history \nalias ll="ls -alt" \nalias jnml="java -classpath /opt/conda/lib/python3.9/site-packages/pyneuroml/lib/jNeuroML-*-jar-with-dependencies.jar org.neuroml.JNeuroML"\n' >> ~/.bashrc +RUN echo -e '\n\nalias cd..="cd .." \nalias h=history \nalias ll="ls -alt" \n' >> ~/.bashrc + +### Set up jnml, reusing pynml jar +RUN echo -e '#!/bin/bash\n#Reusing the jNeuroML jar from the pip installed pyNeuroML for the jnml command\n\njava -classpath /opt/conda/lib/python3.9/site-packages/pyneuroml/lib/jNeuroML-*-jar-with-dependencies.jar org.neuroml.JNeuroML $@' >> /opt/conda/bin/jnml +RUN chmod +x /opt/conda/bin/jnml +ENV JNML_HOME=/opt/conda/bin + RUN cat ~/.bashrc diff --git a/applications/jupyterlab/requirements.txt b/applications/jupyterlab/requirements.txt index 5fd4862f..c822378c 100644 --- a/applications/jupyterlab/requirements.txt +++ b/applications/jupyterlab/requirements.txt @@ -3,7 +3,7 @@ pyelectro git+https://github.com/NeuralEnsemble/neurotune.git #### NEURON & NetPyNE -neuron +neuron==8.1 # Install specific version of NetPyNE git+https://github.com/Neurosim-lab/netpyne.git@osbv2#egg=netpyne @@ -11,14 +11,17 @@ git+https://github.com/Neurosim-lab/netpyne.git@osbv2#egg=netpyne #### Other simulators # Arbor -arbor +arbor==0.6.0 + +# EDEN +eden-simulator==0.2.1 # Brian brian2 brian2tools # PyNN -pynn==0.10.0 +pynn==0.10.1 # elephant elephant @@ -42,12 +45,7 @@ seaborn torch==1.11.0+cpu # For MDF -git+https://github.com/SheffieldML/GPy.git@devel -dask==2.30.0 -distributed==2.30.1 -protobuf==3.17.0 -git+https://github.com/SheffieldML/GPy.git@devel -#modeci_mdf==0.3.3 # big jump in size of image... +modeci_mdf==0.4.5 # big jump in size of image... scikit-learn # Required for some Neuromatch Academy material fasttext # Required for some Neuromatch Academy material @@ -63,4 +61,4 @@ ipympl plotly #### Final updates -numpy # Removes some issues with LFPy... +numpy # Removes some issues with LFPy... \ No newline at end of file diff --git a/applications/netpyne/Dockerfile b/applications/netpyne/Dockerfile index 24838c84..3e58e618 100644 --- a/applications/netpyne/Dockerfile +++ b/applications/netpyne/Dockerfile @@ -1,8 +1,8 @@ FROM node:13.14 as jsbuild ENV REPO=https://github.com/MetaCell/NetPyNE-UI.git -ENV BRANCH_TAG=osb2-dev +ENV BRANCH_TAG=release/1.0.0 ENV FOLDER=netpyne -RUN echo "no-cache 2023-3-15b" +RUN echo "no-cache 2023-4-14" RUN git clone $REPO -b $BRANCH_TAG $FOLDER RUN rm -Rf .git @@ -20,9 +20,7 @@ RUN mv node_modules/@metacell . && rm -Rf node_modules/* && mv @metacell node_mo FROM jupyter/base-notebook:hub-1.4.2 ENV NB_UID=jovyan ENV FOLDER=netpyne - -# branch with latest neuroml updates -ARG NETPYNE_CORE_BRANCH_TAG=osbv2-dev +ENV NP_LFPYKIT_HEAD_FILE=/home/jovyan/nyhead.mat USER root @@ -35,32 +33,11 @@ RUN conda install python=3.7 -y WORKDIR $FOLDER COPY --from=jsbuild --chown=1000:1000 $FOLDER/requirements.txt requirements.txt -RUN pip install -r requirements.txt --no-cache-dir --prefer-binary +RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip &&\ + pip install -r requirements.txt --prefer-binary COPY --from=jsbuild --chown=1000:1000 $FOLDER . - - -# Temporary fix for deprecated api usage on some requirement -# RUN pip install setuptools==45 - -#RUN conda install pandas=0.23.4 -y - -RUN jupyter nbextension install --py --symlink --sys-prefix jupyter_geppetto -RUN jupyter nbextension enable --py --sys-prefix jupyter_geppetto -RUN jupyter nbextension enable --py --sys-prefix widgetsnbextension -RUN jupyter serverextension enable --py --sys-prefix jupyter_geppetto - -RUN python utilities/install.py --npm-skip --netpyne $NETPYNE_CORE_BRANCH_TAG - - - - -RUN jupyter labextension disable @jupyterlab/hub-extension - - - -USER root COPY overrides/hub/jupyter_notebook_config.py /etc/jupyter/jupyter_notebook_config.py @@ -70,18 +47,46 @@ RUN rm -f ~/.jupyter/*.json RUN chown $NB_UID . RUN chown $NB_UID /opt RUN rm -Rf workspace -# RUN wget -P `pip show LFPykit | grep "Location:" | awk '{print $2"/lfpykit"}'` https://www.parralab.org/nyhead/sa_nyhead.mat + USER $NB_UID # sym link workspace pvc to $FOLDER RUN mkdir -p /opt/workspace RUN mkdir -p /opt/user -RUN ln -s /opt/workspace workspace + + ENV NEURON_HOME=/opt/conda + +USER root + +RUN jupyter nbextension install --py --symlink --sys-prefix jupyter_geppetto +RUN jupyter nbextension enable --py --sys-prefix jupyter_geppetto +RUN jupyter nbextension enable --py --sys-prefix widgetsnbextension +RUN jupyter serverextension enable --py --sys-prefix jupyter_geppetto + +RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip &&\ + python utilities/install.py --npm-skip --no-test + +COPY overrides/requirements.txt overrides/requirements.txt +RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip &&\ + pip install -r overrides/requirements.txt + +RUN mv workspace /opt/workspace/tutorials +RUN ln -s /opt/workspace workspace + +RUN jupyter labextension disable @jupyterlab/hub-extension + + +USER $NB_UID + + EXPOSE 8888 ENTRYPOINT ["tini", "-g", "--"] + + + CMD ./NetPyNE-UI diff --git a/applications/netpyne/overrides/requirements.txt b/applications/netpyne/overrides/requirements.txt new file mode 100644 index 00000000..b1236668 --- /dev/null +++ b/applications/netpyne/overrides/requirements.txt @@ -0,0 +1,2 @@ +lfpykit==0.5.1 +git+https://github.com/Neurosim-lab/netpyne.git@osbv2 \ No newline at end of file diff --git a/applications/osb-portal/package-lock.json b/applications/osb-portal/package-lock.json index 8617c29b..da52ca54 100644 --- a/applications/osb-portal/package-lock.json +++ b/applications/osb-portal/package-lock.json @@ -1,12 +1,12 @@ { "name": "frontend", - "version": "0.5.0", + "version": "0.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "frontend", - "version": "0.5.0", + "version": "0.7.0", "license": "ISC", "dependencies": { "@emotion/react": "^11.10.5", @@ -16,7 +16,7 @@ "@mui/material": "^5.10.15", "@mui/styles": "^5.10.15", "@mui/types": "^7.2.2", - "@reduxjs/toolkit": "^1.6.2", + "@reduxjs/toolkit": "^1.9.3", "@sentry/react": "^6.3.5", "assert": "^2.0.0", "axios": "^0.21.4", @@ -26,15 +26,15 @@ "markdown-it": "^12.0.0", "pretty-bytes": "^5.6.0", "qs": "^6.10.1", - "react": "^17.0.0", - "react-dom": "^17.0.0", + "react": "^18.0.0", + "react-dom": "^18.0.0", "react-dropzone": "^11.0.1", "react-infinite-scroll-component": "^6.1.0", "react-markdown": "^6.0.2", "react-markdown-editor-lite": "^1.2.4", - "react-redux": "^7.2.0", - "react-router": "^5.2.0", - "react-router-dom": "^5.2.0", + "react-redux": "^8.0.5", + "react-router": "^6.0.0", + "react-router-dom": "^6.0.0", "react-show-more-text": "^1.5.0", "redux": "^4.1.0", "redux-logger": "^3.0.6", @@ -101,6 +101,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -113,6 +114,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -133,6 +135,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -141,6 +144,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -170,6 +174,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -181,6 +186,7 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -189,6 +195,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -202,6 +209,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -246,6 +254,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "dev": true, "dependencies": { "@babel/types": "^7.19.3", "@jridgewell/gen-mapping": "^0.3.2", @@ -284,6 +293,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", @@ -301,6 +311,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -372,6 +383,7 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -392,6 +404,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, "dependencies": { "@babel/template": "^7.18.10", "@babel/types": "^7.19.0" @@ -404,6 +417,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -438,6 +452,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -456,6 +471,7 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -518,6 +534,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -541,6 +558,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -565,6 +583,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -588,6 +607,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "dev": true, "dependencies": { "@babel/template": "^7.18.10", "@babel/traverse": "^7.19.0", @@ -611,6 +631,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", + "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -1895,6 +1916,7 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.18.10", @@ -1908,6 +1930,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -1919,6 +1942,7 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -1927,6 +1951,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -1940,6 +1965,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.19.3", @@ -1960,6 +1986,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -1971,6 +1998,7 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -1979,6 +2007,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -1992,6 +2021,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -3118,6 +3148,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3131,6 +3162,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -3139,6 +3171,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -3156,12 +3189,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.15", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3588,18 +3623,18 @@ } }, "node_modules/@reduxjs/toolkit": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.6.2.tgz", - "integrity": "sha512-HbfI/hOVrAcMGAYsMWxw3UJyIoAS9JTdwddsjlr5w3S50tXhWb+EMyhIw+IAvCVCLETkzdjgH91RjDSYZekVBA==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.3.tgz", + "integrity": "sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==", "dependencies": { - "immer": "^9.0.6", - "redux": "^4.1.0", - "redux-thunk": "^2.3.0", - "reselect": "^4.0.0" + "immer": "^9.0.16", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.7" }, "peerDependencies": { - "react": "^16.14.0 || ^17.0.0", - "react-redux": "^7.2.1" + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" }, "peerDependenciesMeta": { "react": { @@ -3610,6 +3645,14 @@ } } }, + "node_modules/@remix-run/router": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.4.0.tgz", + "integrity": "sha512-BJ9SxXux8zAg991UmT8slpwpsd31K1dHHbD3Ba4VzD+liLQ4WAMSxQp2d2ZPRPfN0jN2NPRowcSSoM7lCaF08Q==", + "engines": { + "node": ">=14" + } + }, "node_modules/@sentry/browser": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.3.5.tgz", @@ -3906,7 +3949,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dev": true, "dependencies": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" @@ -4226,6 +4268,11 @@ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "node_modules/@types/webpack": { "version": "4.41.21", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.21.tgz", @@ -4930,9 +4977,9 @@ } }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -5791,6 +5838,7 @@ "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5905,6 +5953,7 @@ "version": "1.0.30001442", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6856,7 +6905,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true }, "node_modules/emittery": { "version": "0.10.2", @@ -6895,9 +6945,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", - "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -7225,6 +7275,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -7777,18 +7828,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -8393,6 +8432,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -8717,19 +8757,6 @@ "he": "bin/he" } }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, "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", @@ -9006,9 +9033,9 @@ } }, "node_modules/immer": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", - "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==", + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -11391,6 +11418,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -11398,12 +11426,6 @@ "node": ">=4" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -11425,6 +11447,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -12242,20 +12265,6 @@ "node": ">=6" } }, - "node_modules/mini-create-react-context": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", - "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "@babel/runtime": "^7.5.5", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -12391,7 +12400,8 @@ "node_modules/node-releases": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", @@ -13422,28 +13432,26 @@ } }, "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^18.2.0" } }, "node_modules/react-dropzone": { @@ -13523,77 +13531,76 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-redux": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz", - "integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", "dependencies": { - "@babel/runtime": "^7.5.5", - "hoist-non-react-statics": "^3.3.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^16.9.0" + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" }, "peerDependencies": { - "react": "^16.8.3", - "redux": "^2.0.0 || ^3.0.0 || ^4.0.0-0" + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" }, "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, "react-dom": { "optional": true }, "react-native": { "optional": true + }, + "redux": { + "optional": true } } }, + "node_modules/react-redux/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.9.0.tgz", + "integrity": "sha512-51lKevGNUHrt6kLuX3e/ihrXoXCa9ixY/nVWRLlob4r/l0f45x3SzBvYJe3ctleLUQQ5fVa4RGgJOTH7D9Umhw==", + "dependencies": { + "@remix-run/router": "1.4.0" + }, + "engines": { + "node": ">=14" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.9.0.tgz", + "integrity": "sha512-/seUAPY01VAuwkGyVBPCn1OXfVbaWGGu4QN9uj0kCPcTyNYgL1ldZpxZUpRU7BLheKQI4Twtl/OW2nHRF1u26Q==", "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.4.0", + "react-router": "6.9.0" + }, + "engines": { + "node": ">=14" }, "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" + "react": ">=16.8", + "react-dom": ">=16.8" } }, "node_modules/react-show-more-text": { @@ -13662,9 +13669,9 @@ } }, "node_modules/redux": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", - "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "dependencies": { "@babel/runtime": "^7.9.2" } @@ -13716,9 +13723,9 @@ } }, "node_modules/redux-thunk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.0.tgz", - "integrity": "sha512-/y6ZKQNU/0u8Bm7ROLq9Pt/7lU93cT0IucYMrubo89ENjxPa7i8pqLKu6V4X7/TvYovQ6x01unTeyeZ9lgXiTA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", "peerDependencies": { "redux": "^4" } @@ -14033,11 +14040,6 @@ "node": ">=4" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", @@ -14239,12 +14241,11 @@ } }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { @@ -15078,11 +15079,6 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", @@ -15544,6 +15540,7 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -15574,6 +15571,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": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", @@ -15638,11 +15643,6 @@ "node": ">=10.12.0" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -15721,9 +15721,9 @@ } }, "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -15752,9 +15752,9 @@ } }, "node_modules/webpack": { - "version": "5.70.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", - "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", + "version": "5.76.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.3.tgz", + "integrity": "sha512-18Qv7uGPU8b2vqGeEEObnfICyw2g39CHlDEK4I7NK13LOur1d0HGmGNKGT58Eluwddpn3oEejwvBPoP4M7/KSA==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -15762,24 +15762,24 @@ "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", + "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.2", + "enhanced-resolve": "^5.10.0", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", + "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "bin": { @@ -16417,6 +16417,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -16426,6 +16427,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -16444,12 +16446,14 @@ "@babel/compat-data": { "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", - "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==" + "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==", + "dev": true }, "@babel/core": { "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -16472,6 +16476,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -16479,12 +16484,14 @@ "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true }, "@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -16494,7 +16501,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -16527,6 +16535,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "dev": true, "requires": { "@babel/types": "^7.19.3", "@jridgewell/gen-mapping": "^0.3.2", @@ -16556,6 +16565,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "dev": true, "requires": { "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", @@ -16566,7 +16576,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -16620,7 +16631,8 @@ "@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", @@ -16635,6 +16647,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, "requires": { "@babel/template": "^7.18.10", "@babel/types": "^7.19.0" @@ -16644,6 +16657,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16669,6 +16683,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -16683,7 +16698,8 @@ "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true } } }, @@ -16730,6 +16746,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16747,6 +16764,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -16764,7 +16782,8 @@ "@babel/helper-validator-option": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true }, "@babel/helper-wrap-function": { "version": "7.19.0", @@ -16782,6 +16801,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "dev": true, "requires": { "@babel/template": "^7.18.10", "@babel/traverse": "^7.19.0", @@ -16801,7 +16821,8 @@ "@babel/parser": { "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==" + "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", + "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -17665,6 +17686,7 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.18.10", @@ -17675,6 +17697,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -17682,12 +17705,14 @@ "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true }, "@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -17700,6 +17725,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.19.3", @@ -17717,6 +17743,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -17724,12 +17751,14 @@ "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true }, "@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -17739,7 +17768,8 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true } } }, @@ -17898,8 +17928,7 @@ "@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "requires": {} + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==" }, "@emotion/utils": { "version": "1.2.0", @@ -18594,6 +18623,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -18603,12 +18633,14 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true }, "@jridgewell/source-map": { "version": "0.3.2", @@ -18623,12 +18655,14 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "@jridgewell/trace-mapping": { "version": "0.3.15", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -18811,8 +18845,7 @@ "@mui/types": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", - "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", - "requires": {} + "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==" }, "@mui/utils": { "version": "5.10.15", @@ -18874,16 +18907,21 @@ "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, "@reduxjs/toolkit": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.6.2.tgz", - "integrity": "sha512-HbfI/hOVrAcMGAYsMWxw3UJyIoAS9JTdwddsjlr5w3S50tXhWb+EMyhIw+IAvCVCLETkzdjgH91RjDSYZekVBA==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.3.tgz", + "integrity": "sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==", "requires": { - "immer": "^9.0.6", - "redux": "^4.1.0", - "redux-thunk": "^2.3.0", - "reselect": "^4.0.0" + "immer": "^9.0.16", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.7" } }, + "@remix-run/router": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.4.0.tgz", + "integrity": "sha512-BJ9SxXux8zAg991UmT8slpwpsd31K1dHHbD3Ba4VzD+liLQ4WAMSxQp2d2ZPRPfN0jN2NPRowcSSoM7lCaF08Q==" + }, "@sentry/browser": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.3.5.tgz", @@ -19156,7 +19194,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dev": true, "requires": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" @@ -19476,6 +19513,11 @@ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "@types/webpack": { "version": "4.41.21", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.21.tgz", @@ -19951,8 +19993,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", - "dev": true, - "requires": {} + "dev": true }, "@webpack-cli/info": { "version": "1.2.3", @@ -19967,8 +20008,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", - "dev": true, - "requires": {} + "dev": true }, "@xtuc/ieee754": { "version": "1.2.0", @@ -19999,24 +20039,22 @@ } }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true }, "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} + "dev": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "aggregate-error": { "version": "3.1.0", @@ -20073,8 +20111,7 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true, - "requires": {} + "dev": true }, "ansi-escapes": { "version": "4.3.2", @@ -20341,8 +20378,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "make-dir": { "version": "3.1.0", @@ -20650,6 +20686,7 @@ "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, "requires": { "caniuse-lite": "^1.0.30001400", "electron-to-chromium": "^1.4.251", @@ -20731,7 +20768,8 @@ "caniuse-lite": { "version": "1.0.30001442", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", - "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==" + "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", + "dev": true }, "ccount": { "version": "1.1.0", @@ -21455,7 +21493,8 @@ "electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true }, "emittery": { "version": "0.10.2", @@ -21482,9 +21521,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", - "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -21716,7 +21755,8 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-html": { "version": "1.0.3", @@ -21974,8 +22014,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-jest": { "version": "27.0.4", @@ -22055,8 +22094,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} + "dev": true }, "eslint-scope": { "version": "5.1.1", @@ -22100,14 +22138,6 @@ "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - } } }, "esprima": { @@ -22569,7 +22599,8 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -22800,19 +22831,6 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, "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", @@ -23009,8 +23027,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "ignore": { "version": "5.1.8", @@ -23026,9 +23043,9 @@ "optional": true }, "immer": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", - "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==" + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" }, "import-fresh": { "version": "3.3.0", @@ -24144,8 +24161,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "29.0.0", @@ -24762,12 +24778,7 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-even-better-errors": { @@ -24790,7 +24801,8 @@ "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, "jss": { "version": "10.9.2", @@ -25403,15 +25415,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mini-create-react-context": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", - "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", - "requires": { - "@babel/runtime": "^7.5.5", - "tiny-warning": "^1.0.3" - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -25528,7 +25531,8 @@ "node-releases": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "dev": true }, "normalize-path": { "version": "3.0.0", @@ -26049,8 +26053,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -26283,22 +26286,20 @@ } }, "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" } }, "react-dropzone": { @@ -26360,61 +26361,40 @@ } }, "react-redux": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz", - "integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", "requires": { - "@babel/runtime": "^7.5.5", - "hoist-non-react-statics": "^3.3.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^16.9.0" + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } } }, "react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - } + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.9.0.tgz", + "integrity": "sha512-51lKevGNUHrt6kLuX3e/ihrXoXCa9ixY/nVWRLlob4r/l0f45x3SzBvYJe3ctleLUQQ5fVa4RGgJOTH7D9Umhw==", + "requires": { + "@remix-run/router": "1.4.0" } }, "react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.9.0.tgz", + "integrity": "sha512-/seUAPY01VAuwkGyVBPCn1OXfVbaWGGu4QN9uj0kCPcTyNYgL1ldZpxZUpRU7BLheKQI4Twtl/OW2nHRF1u26Q==", "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.4.0", + "react-router": "6.9.0" } }, "react-show-more-text": { @@ -26467,9 +26447,9 @@ } }, "redux": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", - "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "requires": { "@babel/runtime": "^7.9.2" } @@ -26489,8 +26469,7 @@ "version": "2.13.8", "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz", "integrity": "sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg==", - "dev": true, - "requires": {} + "dev": true }, "redux-devtools-instrument": { "version": "1.9.6", @@ -26511,10 +26490,9 @@ } }, "redux-thunk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.0.tgz", - "integrity": "sha512-/y6ZKQNU/0u8Bm7ROLq9Pt/7lU93cT0IucYMrubo89ENjxPa7i8pqLKu6V4X7/TvYovQ6x01unTeyeZ9lgXiTA==", - "requires": {} + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==" }, "regenerate": { "version": "1.4.2", @@ -26751,11 +26729,6 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", @@ -26885,12 +26858,11 @@ } }, "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "schema-utils": { @@ -26908,8 +26880,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -27533,11 +27504,6 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, "tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", @@ -27848,6 +27814,7 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", + "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -27862,6 +27829,11 @@ "punycode": "^2.1.0" } }, + "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==" + }, "util": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", @@ -27916,11 +27888,6 @@ "convert-source-map": "^1.6.0" } }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -27969,9 +27936,9 @@ } }, "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -27993,9 +27960,9 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "webpack": { - "version": "5.70.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", - "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", + "version": "5.76.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.3.tgz", + "integrity": "sha512-18Qv7uGPU8b2vqGeEEObnfICyw2g39CHlDEK4I7NK13LOur1d0HGmGNKGT58Eluwddpn3oEejwvBPoP4M7/KSA==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -28003,24 +27970,24 @@ "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", + "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.2", + "enhanced-resolve": "^5.10.0", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", + "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" } }, @@ -28398,8 +28365,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "requires": {} + "dev": true }, "xtend": { "version": "4.0.2", diff --git a/applications/osb-portal/package.json b/applications/osb-portal/package.json index 5f8bbc8c..c84f7c4a 100644 --- a/applications/osb-portal/package.json +++ b/applications/osb-portal/package.json @@ -30,7 +30,7 @@ "@mui/material": "^5.10.15", "@mui/styles": "^5.10.15", "@mui/types": "^7.2.2", - "@reduxjs/toolkit": "^1.6.2", + "@reduxjs/toolkit": "^1.9.3", "@sentry/react": "^6.3.5", "assert": "^2.0.0", "axios": "^0.21.4", @@ -40,15 +40,15 @@ "markdown-it": "^12.0.0", "pretty-bytes": "^5.6.0", "qs": "^6.10.1", - "react": "^17.0.0", - "react-dom": "^17.0.0", + "react": "^18.0.0", + "react-dom": "^18.0.0", "react-dropzone": "^11.0.1", "react-infinite-scroll-component": "^6.1.0", "react-markdown": "^6.0.2", "react-markdown-editor-lite": "^1.2.4", - "react-redux": "^7.2.0", - "react-router": "^5.2.0", - "react-router-dom": "^5.2.0", + "react-redux": "^8.0.5", + "react-router": "^6.0.0", + "react-router-dom": "^6.0.0", "react-show-more-text": "^1.5.0", "redux": "^4.1.0", "redux-logger": "^3.0.6", diff --git a/applications/osb-portal/src/App.tsx b/applications/osb-portal/src/App.tsx index e7b79a7c..4819f80a 100644 --- a/applications/osb-portal/src/App.tsx +++ b/applications/osb-portal/src/App.tsx @@ -2,8 +2,8 @@ import * as React from "react"; import { BrowserRouter as Router, Route, - Switch, - useHistory, + Routes, + useNavigate, } from "react-router-dom"; import { ThemeProvider, @@ -30,6 +30,7 @@ import { } from "./components"; import Box from "@mui/material/Box"; import { UserInfo } from "./types/user"; +import SampleIframePage from "./pages/SampleIframePage"; declare module "@mui/styles/defaultTheme" { // eslint-disable-next-line @typescript-eslint/no-empty-interface @@ -52,14 +53,14 @@ const styles = { }; const UserActionThenRedirect = ({ userAction, user }) => { - const history = useHistory(); + const navigate = useNavigate(); React.useEffect(() => { if (user) { - history.push("/"); + navigate("/"); } else { userAction(); } - }, [history, user, userAction]); + }, [navigate, user, userAction]); return <>; }; @@ -83,60 +84,90 @@ export const App = (props: AppProps) => {
- - - - - - - - - - - - + + + + } + /> + + + + } + /> + - - - } + /> + - - - - - - - - - - - - - - - - - - - - - - - - + element={ + + + + } + /> + + + + } + /> + + + + } + /> + + + + } + /> + + } + /> + + } + /> + + } + /> + + )} + diff --git a/applications/osb-portal/src/components/MainDrawer/MainDrawer.tsx b/applications/osb-portal/src/components/MainDrawer/MainDrawer.tsx index d0619e5c..0a55026f 100644 --- a/applications/osb-portal/src/components/MainDrawer/MainDrawer.tsx +++ b/applications/osb-portal/src/components/MainDrawer/MainDrawer.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; //theme import { makeStyles, useTheme } from "@mui/styles"; @@ -193,7 +193,7 @@ export const MainDrawer = (props: { const openCreatMenu = Boolean(anchorEl); - const history = useHistory(); + const navigate = useNavigate(); @@ -308,7 +308,7 @@ export const MainDrawer = (props: { } > history.push("/")} + onClick={() => navigate("/")} selected={isWorkspacesPage} > @@ -324,7 +324,7 @@ export const MainDrawer = (props: { history.push("/repositories")} + onClick={() => navigate("/repositories")} selected={isRepositoriesPage} > diff --git a/applications/osb-portal/src/components/auth/ProtectedRouter.tsx b/applications/osb-portal/src/components/auth/ProtectedRouter.tsx index 666a4a54..2b3c9fe0 100644 --- a/applications/osb-portal/src/components/auth/ProtectedRouter.tsx +++ b/applications/osb-portal/src/components/auth/ProtectedRouter.tsx @@ -1,17 +1,11 @@ import React from "react"; -import { Route, Redirect } from "react-router-dom"; +import { Route } from "react-router-dom"; -export const ProtectedRoute = ({ ...rest }) => { - return ( - {rest.children} - ) : rest.login !== undefined ? ( - rest.login() - ) : null - } - /> - ); -}; +export const ProtectedRoute = ({ children, user, login}) => { + if(!user) { + login(); + return <> + } + return children; +} + diff --git a/applications/osb-portal/src/components/common/OSBChipList.tsx b/applications/osb-portal/src/components/common/OSBChipList.tsx index 263f3f14..1cd4dfd6 100644 --- a/applications/osb-portal/src/components/common/OSBChipList.tsx +++ b/applications/osb-portal/src/components/common/OSBChipList.tsx @@ -16,9 +16,6 @@ interface OSBChipListProps { const useStyles = makeStyles((theme) => ({ chipBox: { paddingTop: theme.spacing(2), - paddingBottom: theme.spacing(2), - paddingLeft: theme.spacing(1), - marginBottom: theme.spacing(2), "& h6": { fontWeight: "bold", color: bgInputs, diff --git a/applications/osb-portal/src/components/header/Banner.tsx b/applications/osb-portal/src/components/header/Banner.tsx index 51bce37b..199c848b 100644 --- a/applications/osb-portal/src/components/header/Banner.tsx +++ b/applications/osb-portal/src/components/header/Banner.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import makeStyles from '@mui/styles/makeStyles'; import Typography from "@mui/material/Typography"; import Box from "@mui/material/Box"; @@ -30,7 +30,7 @@ const useStyles = makeStyles((theme) => ({ export const Banner = (props: any) => { const classes = useStyles(); - const history = useHistory(); + const navigate = useNavigate(); const user: UserInfo = props.user; const handleSignup = () => { props.register(); @@ -66,7 +66,7 @@ export const Banner = (props: any) => { ) : null} diff --git a/applications/osb-portal/src/components/header/Header.tsx b/applications/osb-portal/src/components/header/Header.tsx index 5c660069..ad7fee46 100644 --- a/applications/osb-portal/src/components/header/Header.tsx +++ b/applications/osb-portal/src/components/header/Header.tsx @@ -1,7 +1,7 @@ import * as React from "react"; -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; -import { Toolbar, Box, Button, Paper, Popper, MenuItem, MenuList, ClickAwayListener, Link } from "@mui/material"; +import { Toolbar, Box, Button, Paper, Popper, MenuItem, MenuList, ClickAwayListener, Link, CircularProgress } from "@mui/material"; import PersonIcon from "@mui/icons-material/Person"; import {BetaIcon, OSBLogo} from "../icons"; @@ -32,8 +32,15 @@ const styles = ({ alignItems: 'center', height: '22px', overflow: 'hidden', - - + }, + logoChip: { + backgroundColor: "rgba(255, 255, 255, 0.2)", + borderRadius: "2px", + fontSize: "9px", + px: "5px", + py: "2px", + lineHeight: 1.4, + fontWeight: 700, }, }); @@ -41,7 +48,7 @@ export const Header = (props: any) => { const [menuOpen, setMenuOpen] = React.useState(false); const menuAnchorRef = React.useRef(null); - const history = useHistory(); + const navigate = useNavigate(); const handleMenuToggle = () => { setMenuOpen((prevOpen) => !prevOpen); @@ -61,7 +68,7 @@ export const Header = (props: any) => { }; const handleMyAccount = () => { - history.push(`/user/${user.username}`); + navigate(`/user/${user.username}`); setMenuOpen(false); }; const handleAccountHelp = () => { @@ -70,7 +77,10 @@ export const Header = (props: any) => { }; const headerText = - user === null ? ( + user === undefined ? ( + + ) : + (user === null ? ( @@ -119,7 +129,7 @@ export const Header = (props: any) => { {user.username} - ); + )); const handleToggleDrawer = (e: any) => { if (props.drawerEnabled) { @@ -132,10 +142,13 @@ export const Header = (props: any) => { return ( + - + + v2.0 + {headerText} diff --git a/applications/osb-portal/src/components/icons.tsx b/applications/osb-portal/src/components/icons.tsx index 5c0266dd..350e2887 100644 --- a/applications/osb-portal/src/components/icons.tsx +++ b/applications/osb-portal/src/components/icons.tsx @@ -96,24 +96,30 @@ export const BetaIcon = (props: SvgIconProps) => ( export const OSBLogo = (props: SvgIconProps) => ( - - - - - - + + + + + + ); @@ -198,11 +204,31 @@ export const AreaChartIcon = (props: SvgIconProps) => ( export const ViewInArIcon = (props: SvgIconProps) => ( - - - - - + + + + + @@ -211,4 +237,3 @@ export const ViewInArIcon = (props: SvgIconProps) => ( ); - diff --git a/applications/osb-portal/src/components/menu/MainMenu.tsx b/applications/osb-portal/src/components/menu/MainMenu.tsx index 82b976fb..9a5901c3 100644 --- a/applications/osb-portal/src/components/menu/MainMenu.tsx +++ b/applications/osb-portal/src/components/menu/MainMenu.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import makeStyles from '@mui/styles/makeStyles'; import Box from "@mui/material/Box"; import { MainMenuItem } from "./MainMenuItem"; @@ -27,7 +27,7 @@ const useStyles = makeStyles(() => ({ export const MainMenu = (props: any) => { const classes = useStyles(); - const history = useHistory(); + const navigate = useNavigate(); const handleDialogOpen = () => { props.openDialog(); @@ -69,18 +69,18 @@ export const MainMenu = (props: any) => { items={[ { label: "Repositories", - callback: () => history.push("/repositories"), - checked: history.location.pathname === "/repositories", + callback: () => navigate("/repositories"), + checked: navigate.location.pathname === "/repositories", }, { label: "Workspaces", - callback: () => history.push("/"), - checked: history.location.pathname === "/", + callback: () => navigate("/"), + checked: navigate.location.pathname === "/", }, ]} /> - {history.location.pathname === "/" ? ( + {navigate.location.pathname === "/" ? ( @@ -91,12 +91,12 @@ export const MainMenu = (props: any) => { items={[ { label: "Repositories", - callback: () => history.push("/repositories"), + callback: () => navigate("/repositories"), }, ]} popperPlacement="bottom-end" /> - ) : history.location.pathname === "/repositories" ? ( + ) : navigate.location.pathname === "/repositories" ? ( @@ -104,7 +104,7 @@ export const MainMenu = (props: any) => { } className={classes.flipButton} - items={[{ label: "Workspaces", callback: () => history.push("/") }]} + items={[{ label: "Workspaces", callback: () => navigate("/") }]} popperPlacement="bottom-end" /> ) : null} diff --git a/applications/osb-portal/src/components/repository/RepositoryActionsMenu.tsx b/applications/osb-portal/src/components/repository/RepositoryActionsMenu.tsx index 7a10b2a7..db7bf1e5 100644 --- a/applications/osb-portal/src/components/repository/RepositoryActionsMenu.tsx +++ b/applications/osb-portal/src/components/repository/RepositoryActionsMenu.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; @@ -39,7 +39,7 @@ export default (props: RepositoryActionsMenuProps) => { const [repositoryEditorOpen, setRepositoryEditorOpen] = React.useState(false); const canEdit = canEditRepository(props.user, props.repository); - const history = useHistory(); + const navigate = useNavigate(); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); @@ -63,7 +63,7 @@ export default (props: RepositoryActionsMenuProps) => { }; const handleOpenRepository = () => { - history.push(`/repositories/${props.repository.id}`); + navigate(`/repositories/${props.repository.id}`); }; const handleDeleteRepository = () => { diff --git a/applications/osb-portal/src/components/repository/RespositoriesTable.tsx b/applications/osb-portal/src/components/repository/RespositoriesTable.tsx index cf0cf267..36e75b59 100644 --- a/applications/osb-portal/src/components/repository/RespositoriesTable.tsx +++ b/applications/osb-portal/src/components/repository/RespositoriesTable.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; // components import Chip from "@mui/material/Chip"; @@ -43,6 +43,7 @@ import { StyledShowMoreText, StyledTableContainer, } from "../styled/Tables"; +import Link from "@mui/material/Link"; interface RepositoriesProps { repositories: OSBRepository[]; @@ -71,7 +72,7 @@ export const RepositoriesList = (props: RepositoriesProps) => { compact } = props; - const history = useHistory(); + const navigate = useNavigate(); const [expanded, setExpanded] = React.useState(false); @@ -122,7 +123,9 @@ export const RepositoriesList = (props: RepositoriesProps) => { className="col" sx={{ display: "flex", flexDirection: "column" }} > - {row.name} + handleRepositoryClick(row)}> + {row.name} + {row.summary && ( { textTransform: "capitalize", color: chipTextColor, }} - onClick={() => history.push(`/user/${row?.user?.id}`)} + onClick={() => navigate(`/user/${row?.user?.id}`)} > {row.user.username} @@ -183,6 +186,7 @@ export const RepositoriesList = (props: RepositoriesProps) => { onClick={handleTypeClick && (() => handleTypeClick(type))} key={type} label={type} + size="small" clickable={true} className="content-types-tag" onDelete={handleTypeUnclick && @@ -207,6 +211,7 @@ export const RepositoriesList = (props: RepositoriesProps) => { onClick={handleTagClick && (() => handleTagClick(tagObject))} key={tagObject.id} label={tagObject.tag} + size="small" clickable={true} onDelete={ handleTagUnclick && searchFilterValues?.tags?.includes( diff --git a/applications/osb-portal/src/components/workspace/ExistingWorkspaceSelector.tsx b/applications/osb-portal/src/components/workspace/ExistingWorkspaceSelector.tsx index 410e045c..90839a63 100644 --- a/applications/osb-portal/src/components/workspace/ExistingWorkspaceSelector.tsx +++ b/applications/osb-portal/src/components/workspace/ExistingWorkspaceSelector.tsx @@ -1,6 +1,7 @@ import * as React from "react"; +import debounce from "lodash/debounce"; -import makeStyles from '@mui/styles/makeStyles'; +import makeStyles from "@mui/styles/makeStyles"; import Button from "@mui/material/Button"; import Box from "@mui/material/Box"; import Grid from "@mui/material/Grid"; @@ -11,6 +12,9 @@ import workspaceService from "../../service/WorkspaceService"; import WorkspaceCard from "./WorkspaceCard"; import { Workspace } from "../../types/workspace"; import { linkColor } from "../../theme"; +import searchFilter from "../../types/searchFilter"; +import SearchFilterReposWorkspaces from "../common/SearchFilterReposWorkspaces"; +import { Page } from "../../types/model"; const useStyles = makeStyles((theme) => ({ workspacesBox: { @@ -83,18 +87,60 @@ export const ExistingWorkspaceEditor = ( const [activeCardClassNames, setActiveCardClassNames] = React.useState< string[] >([]); + const [searchFilterValues, setSearchFilterValues] = + React.useState({ + text: undefined, + tags: [], + types: [], + }); const [workspaces, setWorkspaces] = React.useState(null); + const debouncedHandleSearchFilter = debounce((newTextFilter: string) => { + setSearchFilterValues({ + ...searchFilterValues, + text: newTextFilter, + tags: newTextFilter + ? [...searchFilterValues?.tags, newTextFilter] + : searchFilterValues?.tags, + }); + }, 500); + + + + const isSearchFieldsEmpty = + searchFilterValues.tags.length === 0 && + searchFilterValues.types.length === 0 && + (typeof searchFilterValues.text === "undefined" || + searchFilterValues.text === ""); + + const setWorkspacesFromPage = (retrievedWorkspaces: Page): void => { + setWorkspaces(retrievedWorkspaces.items); + setActiveCardClassNames( + Array(retrievedWorkspaces.items.length).fill("not-active") + ); + }; + + const getWorkspacesList = (payload?) => { + setWorkspaces(null); + + if (payload?.searchFilterValues) { + workspaceService + .fetchWorkspacesByFilter(null, null, 1, searchFilterValues, 100) + .then(setWorkspacesFromPage); + } else { + workspaceService + .fetchWorkspaces(null, null, 1, 100) + .then(setWorkspacesFromPage); + } + }; + React.useEffect(() => { - workspaceService - .fetchWorkspaces(null, null, 1, 1000) - .then((retrievedWorkspaces) => { - setWorkspaces(retrievedWorkspaces.items); - setActiveCardClassNames( - Array(retrievedWorkspaces.items.length).fill("not-active") - ); - }); - }, []); + if (isSearchFieldsEmpty) { + getWorkspacesList(); + } else { + getWorkspacesList({ searchFilterValues }); + } + }, [searchFilterValues]); const handleWorkspaceSelection = (index: number) => { const placeHolderArray = Array(workspaces.length).fill("not-active"); @@ -105,7 +151,17 @@ export const ExistingWorkspaceEditor = ( return ( <> - + + + debouncedHandleSearchFilter(newTextFilter) + } + searchFilterValues={searchFilterValues} + setSearchFilterValues={setSearchFilterValues} + hasTypes={false} + /> + + {workspaces ? ( {workspaces && @@ -115,10 +171,10 @@ export const ExistingWorkspaceEditor = ( item={true} key={workspace.id} xs={6} - sm={4} + sm={6} md={4} - lg={4} - xl={3} + lg={3} + xl={2} > diff --git a/applications/osb-portal/src/components/workspace/drawer/WorkspaceDrawer.tsx b/applications/osb-portal/src/components/workspace/drawer/WorkspaceDrawer.tsx index 7f393309..7497067b 100644 --- a/applications/osb-portal/src/components/workspace/drawer/WorkspaceDrawer.tsx +++ b/applications/osb-portal/src/components/workspace/drawer/WorkspaceDrawer.tsx @@ -1,15 +1,22 @@ import * as React from "react"; -import { useParams } from "react-router-dom"; +import { useParams, useSearchParams } from "react-router-dom"; import clsx from "clsx"; import { useTheme } from "@mui/material/styles"; -import makeStyles from '@mui/styles/makeStyles'; +import makeStyles from "@mui/styles/makeStyles"; import Drawer from "@mui/material/Drawer"; import Box from "@mui/material/Box"; import IconButton from "@mui/material/IconButton"; import Divider from "@mui/material/Divider"; import { WorkspaceInteractions } from "../.."; -import { OSBApplications, ResourceStatus, Workspace, WorkspaceResource } from "../../../types/workspace"; +import { + OSBApplications, + ResourceStatus, + Workspace, + WorkspaceResource, +} from "../../../types/workspace"; + +import workspaceResourceService from "../../../service/WorkspaceResourceService"; import { ShareIcon, ArrowLeft, ArrowRight } from "../../icons"; import { UserInfo } from "../../../types/user"; @@ -20,9 +27,7 @@ const useStyles = makeStyles((theme) => ({ drawerContent: { width: 400, }, - menuButton: { - - }, + menuButton: {}, hide: { display: "none", }, @@ -99,80 +104,103 @@ export const WorkspaceDrawer: React.FunctionComponent = ({ const classes = useStyles(); const { app } = useParams<{ app: string }>(); + const searchParams = useSearchParams()[0]; + // Keep drawer closed for jupyter by default const [open, setOpen] = React.useState(app === "jupyter" ? false : true); const getActiveResource = () => { - if (workspace.lastOpen != null) { - if (!app || workspace.lastOpen.type.application === OSBApplications[app]) { + + const resourceFromParam = searchParams.get("resource"); + if (resourceFromParam) { + return workspace.resources.find( + (resource) => resource.name === resourceFromParam + ); + } else if (workspace.lastOpen != null) { + if ( + !app || + workspace.lastOpen.type.application === OSBApplications[app] + ) { return workspace.lastOpen; - } - } - if (app) { + } + } else if (app) { return workspace.resources.find( (resource) => resource.type.application === OSBApplications[app] && resource.status === ResourceStatus.available ); } else if (workspace.resources?.length) { - return workspace.resources.find(resource => resource.status === ResourceStatus.available); + return workspace.resources.find( + (resource) => resource.status === ResourceStatus.available + ); } }; - const [currentResource, setCurrentResource] = - React.useState(getActiveResource()); + const currentResource = getActiveResource(); + + React.useEffect(() => { + if(user && workspace.user.id === user.id && currentResource) { + workspaceResourceService + .workspacesControllerWorkspaceResourceOpen(currentResource.id) + .catch(() => { + console.error("Error opening resource, ResourceOpen function failed!"); + }); + } + return () => {} + }, [currentResource]); const handleToggleDrawer = () => setOpen(!open); - return user && - workspace && ( - - + -
- -
-
- -
- - {open ? ( - - ) : ( - - )} - + })} + classes={{ + paper: clsx(classes.drawerPaper, { + [classes.drawerOpen]: open, + [classes.drawerClose]: !open, + }), + }} + > +
+ +
+
+ +
+ + {open ? ( + + ) : ( + + )} + +
-
- + - - - {children} + + + {children} + - + ) ); }; diff --git a/applications/osb-portal/src/components/workspace/drawer/WorkspaceInteractions.tsx b/applications/osb-portal/src/components/workspace/drawer/WorkspaceInteractions.tsx index 360f7a8d..92ba3163 100644 --- a/applications/osb-portal/src/components/workspace/drawer/WorkspaceInteractions.tsx +++ b/applications/osb-portal/src/components/workspace/drawer/WorkspaceInteractions.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { useHistory } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import makeStyles from "@mui/styles/makeStyles"; import { styled } from "@mui/styles"; @@ -105,10 +105,9 @@ interface WorkspaceProps { deleteWorkspace: (wsId: number) => null; user: UserInfo; [propName: string]: any; - openResource: (r: WorkspaceResource) => any; refreshWorkspacePage?: () => void; currentResource: WorkspaceResource; - openResourceAction?: (resource: WorkspaceResource) => void; + hideTabs: Boolean; } const SidebarBox = styled(Box)(({ theme }) => ({ @@ -145,7 +144,7 @@ const SidebarIconButton = styled(IconButton)(({ theme }) => ({ })); export default (props: WorkspaceProps | any) => { - const { workspace, refreshWorkspace } = props; + const { workspace, refreshWorkspace, hideTabs } = props; const classes = useStyles(); const [tabValue, setTabValue] = React.useState(0); @@ -186,7 +185,7 @@ export default (props: WorkspaceProps | any) => { {props.open ? ( - { label="My Assets" sx={{ pl: "0.75rem", pr: "0.75rem", fontSize: "0.75rem" }} /> - + } @@ -258,9 +257,7 @@ export default (props: WorkspaceProps | any) => { workspace={workspace} currentResource={props.currentResource} refreshWorkspace={handleWorkspaceRefresh} - openResource={props.openResource} user={props.user} - openResourceAction={props.openResourceAction} /> diff --git a/applications/osb-portal/src/components/workspace/drawer/WorkspaceResourceBrowser.tsx b/applications/osb-portal/src/components/workspace/drawer/WorkspaceResourceBrowser.tsx index b22391bc..df2ed439 100644 --- a/applications/osb-portal/src/components/workspace/drawer/WorkspaceResourceBrowser.tsx +++ b/applications/osb-portal/src/components/workspace/drawer/WorkspaceResourceBrowser.tsx @@ -1,4 +1,5 @@ import * as React from "react"; +import { useNavigate } from "react-router-dom"; //theme import { styled } from "@mui/styles"; @@ -90,17 +91,15 @@ const OSBResourceItem = (props: { resource: WorkspaceResource; active: boolean; refreshWorkspace: () => void; - openResource: (r: WorkspaceResource) => any; - lastOpenResourceId: number; + currentResourceId: number; Icon: JSX.Element; - openResourceAction?: (resource: WorkspaceResource) => void; + workspaceId: number; }) => { const { resource, active, refreshWorkspace, - openResource, - openResourceAction, + workspaceId, Icon, } = props; const canOpenFile: boolean = @@ -108,6 +107,7 @@ const OSBResourceItem = (props: { const [waiting, setWaiting] = React.useState( resource.status === ResourceStatus.pending ); + let navigate = useNavigate(); React.useEffect(() => { setWaiting(resource.status === ResourceStatus.pending); @@ -127,13 +127,10 @@ const OSBResourceItem = (props: { const handleOpenResource = (e: any) => { - openResource && openResource(resource); - return workspaceResourceService - .workspacesControllerWorkspaceResourceOpen(resource.id) - .then(openResourceAction ? (() => openResourceAction(resource)) : refreshWorkspace) - .catch(() => { - console.error("Error opening resource, ResourceOpen function failed!"); - }); + navigate( + {pathname: `/workspace/open/${workspaceId}/${resource.type.application.code}`, + search: `?resource=${resource.name}`}, + ) }; return ( @@ -179,24 +176,24 @@ const OSBResourceItem = (props: { interface WorkspaceProps { workspace: Workspace; refreshWorkspace: () => void; - openResource?: (r: WorkspaceResource) => any; currentResource: WorkspaceResource; user: UserInfo; - openResourceAction?: (resource: WorkspaceResource) => void; } const WorkspaceResourceBrowser = (props: WorkspaceProps) => { - const { workspace, refreshWorkspace, openResource, currentResource, openResourceAction } = props; + const { workspace, refreshWorkspace, currentResource } = props; - const lastOpenResourceId = currentResource?.id ?? -1; + const currentResourceId = currentResource?.id ?? -1; + if (!workspace.resources || workspace.resources.length === 0) { + return null; + } + const resources = workspace.resources.filter( (resource) => resource.id !== undefined && resource.id !== -1 ); - if (!resources || resources.length === 0) { - return null; - } + const experimentalResources = resources.filter( (resource) => resource.resourceType === ResourceType.E @@ -244,12 +241,11 @@ const WorkspaceResourceBrowser = (props: WorkspaceProps) => { ))} diff --git a/applications/osb-portal/src/index.ejs b/applications/osb-portal/src/index.ejs index eadb32e0..96cc4aa4 100644 --- a/applications/osb-portal/src/index.ejs +++ b/applications/osb-portal/src/index.ejs @@ -9,7 +9,7 @@ -
+
loading...