diff --git a/.env_example b/.env_example deleted file mode 100644 index 2e8b31fe..00000000 --- a/.env_example +++ /dev/null @@ -1,2 +0,0 @@ -DEBUG= -SECRET_KEY= \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d4e3f20f..00000000 --- a/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -frontend/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production - -# misc -frontend/.env -frontend/.DS_Store -frontend/.env.local -frontend/.env.development.local -frontend/.env.test.local -frontend/.env.production.local - -frontend/npm-debug.log* -frontend/yarn-debug.log* -frontend/yarn-error.log* - - - - -/django_env -/venv -# environment vairables -.env -# /test -# /util diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index edf02265..00000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,133 +0,0 @@ - -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, caste, color, religion, or sexual identity -and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -* Focusing on what is best not just for us as individuals, but for the - overall community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or - advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email - address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -[deepshetye1@gmail.com](mailto:deepshetye1@gmail.com). -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series -of actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or -permanent ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within -the community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.1, available at -[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - -Community Impact Guidelines were inspired by -[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. - -For answers to common questions about this code of conduct, see the FAQ at -[https://www.contributor-covenant.org/faq][FAQ]. Translations are available -at [https://www.contributor-covenant.org/translations][translations]. - -[homepage]: https://www.contributor-covenant.org -[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html -[Mozilla CoC]: https://github.com/mozilla/diversity -[FAQ]: https://www.contributor-covenant.org/faq -[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index fe179fc6..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,187 +0,0 @@ -

- ✨ Contributing ✨ -

- -
- -## 📌 Prerequisites - -### 💻 1. System requirement : - -1. Any system with basic configuration. -2. Operating System : Any (Windows / Linux / Mac). - -### 💿 2. Software requirement : - -1. Updated browser -2. Node.js installed \ - Use `node --version` to check if installed (If not, download it [here](https://nodejs.org/en/download/)). -3. Package Manager ( Recommend [Yarn](https://classic.yarnpkg.com/en/) )\ - Use `yarn --version` to check if installed (If not, download it [here](https://classic.yarnpkg.com/en/docs/install)). -4. Python3 installed\ - Use `python3 --version` to check if installed (If not download it [here](https://www.python.org/downloads/)) -5. Any text editor of your choice. - -### ⚡ 3. Skill Set Required : - -1. Knowledge of git & github. -2. JavaScript -3. [ReactJS](https://reactjs.org/) -4. [Python](https://docs.python.org/3/) -5. [Django](https://docs.djangoproject.com/en/3.2/) -6. [Firebase](https://firebase.google.com/docs/build) -7. [Axios](https://axios-http.com/docs/intro) - - -# Contributing - -Thank you for considering and taking the time to contribute! Product focuses on 100% education as well as upskilling developing countries and rural areas. - -The following are guidelines for contributing to this project. - -## How to Report Bugs - -Please open [a new issue in the appropriate GitHub repository][new-issue] with steps to reproduce the problem you're experiencing. - -Be sure to include as much information including screenshots, text output, and both your expected and actual results. - -## How to Request Enhancements - -Firstly please refer to the applicable [github-repo] and search in the [issues-list] to make sure that your idea has not been (or is not still) considered. - -If it is not yet considered or something more can be added then please create a new issue in the GitHub repository [new-issue] describing your enhancement. - -Be sure to include as much detail as possible including step-by-step descriptions, specific examples, screenshots or mockups, and reasoning for why the enhancement might be worthwhile. - -## 📌 Setting up Locale Environment - -### 🚩 Forking repository : - -1. Firstly you have to make your own copy of the project. For that, you have to fork the repository. You can find the fork button on the top-right side of the browser window. (Refer to the image below ) -2. Kindly wait till it gets forked. -3. After that copy will look like `/EdTech-Web` forked from `EdTech-Official/EdTech-Web`. - Demo fork image - -### 🚩 Clone repository : - -1. Now you have your own copy of the project. Here you have to start your work. -2. Go to the desired location on your computer where you want to set up the project. -3. Right-click there and click on `git bash`. A terminal window will pop up -4. Type the command `git clone .git` and hit enter. (Refer to the image to copy URL) -5. Wait for few seconds till the project gets copied -6. Type the command `cd EdTech-Web` and hit enter. - Demo copy image - -### 🚩 Setting up remote : - -1. Now you have to set up remote repositories. -2. Type `git remote -v` in the terminal to list remote connections to your repo. -3. It will show something like this: - -```console - -origin https://github.com//EdTech-Web.git (fetch) -origin https://github.com//EdTech-Web.git (push) - -``` - -1. Now type the command `git remote add upstream https://github.com/EdTech-Official/EdTech-Web.git` this will set-upstream as the main directory. -2. Again type in the command `git remote -v` to check if the remote has been set up correctly. -3. It should show something like this : - -```console - -origin https://github.com//EdTech-Web.git (fetch) -origin https://github.com//EdTech-Web.git (push) -upstream https://github.com/EdTech-Official/EdTech-Web.git (fetch) -upstream https://github.com/EdTech-Official/EdTech-Web.git (push) - -``` - -### 🚩 Creating a branch : - -Whenever you want to contribute to any project. It is a best practice that you should create a branch and push the branch as PR rather than directly pushing the main/master branch. - -1. `git branch` will list all the branches in the repository. -2. Now type `git branch ` to create your branch. -3. You can check the created branch by `git branch` -4. But still if you start editing the edits will go to the main branch. To change the path, type in `git checkout ` -5. Now you are ready to do the desired changes. - -## 📌 Setting up .env file : - -1. Create a new file `.env` in the root directory. -2. Copy all the default content from the `.env.example` file to the `.env` file. -3. You can edit this `.env` file to provide your own project credentials if needed in the future for specific tweaks and tests. - -## 📌 Setting up project using `yarn` : - -1. Open this cloned folder in the text editor of your choice. -2. If you do not have `yarn` installed then you can do either of the following: - - Download Yarn Package manager [here](https://classic.yarnpkg.com/en/docs/install) - - If you already have `npm` installed you can simply type in `npm install --global yarn`. - - If you already have `choco` installed you can simply type in `choco install yarn` - - If you already have `scoop` installed you can simply type in `scoop install yarn` -3. To check if the yarn has been installed correctly type in `yarn --version` this should show you the current version of yarn. -4. Open the terminal and type the following commands in it. - ``` - cd frontend && - yarn install - ``` - -### 🚩 Running in Development mode : - -1. Run: `yarn start` -2. Open [http://localhost:3000](http://localhost:3000) to view it in the browser. -3. The page will reload if you make edits. -4. You will also see any lint errors in the console. - -### 🚩 Testing changes : - -> Not yet implemented - - -### 🚩 Building project : - -1. Run the command `yarn run build` -2. Builds the app for production to the `build` folder. -3. It correctly bundles React in production mode and optimizes the build for the best performance. -4. The build is minified and the filenames include the hashes. - Your app is ready to be deployed! - -### 🚩 Running storybook : - -> Not yet implemented. - - -## 📌 Pushing your changes - -After doing the changes, and when tests are successfully passing you can push your changes to remote. - -1. Go to your terminal and type `git status` and hit enter, this will show your changes from the files. -2. Then type in `git add .` and hit enter, this will add all the files to the staging area. -3. Commit the changes by `git commit -m ""` and hit enter. -4. Now push your branch to your fork by `git push origin ` and hit enter. - -## 📌 Creating a pull request - -By this time you can see a message on your GitHub fork as `your fork is ahead of EdTech-Official: master by of commits` and you can also see a button `Compare and pull request`. - -1. Click on `Contribute` and then `Open Pull Request`.(Refer image no.1) -2. You'll be redirected to page where you'll see the made changes. -3. Click on `Create pull request` button.(Refer image no.2) -4. You will see a template.(Refer image no.3) -5. Fill the template completely by describing your change, cause of change, issue getting fixed etc. -6. After filling the template completely click on `Pull request` - Demo copy image - - Demo copy image - - Demo copy image - -[new-issue]: https://github.com/EdTech-Official/EdTech-Web/issues/new -[github-repo]: https://github.com/EdTech-Official/EdTech-Web -[issues-list]: https://github.com/EdTech-Official/EdTech-Web/issues diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 3bf961aa..00000000 --- a/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM python:3 - -ENV PYTHONUNBUFFERED 1 - -WORKDIR /app - -ADD . /app - -COPY ./requirements.txt /app/requirements.txt - -RUN pip install -r requirements.txt \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 4a2075af..00000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [2021] [Deep Shetye] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Procfile b/Procfile deleted file mode 100644 index 4fb0e36a..00000000 --- a/Procfile +++ /dev/null @@ -1,2 +0,0 @@ -release: python manage.py migrate -web: gunicorn edtech_dj.wsgi --log-file - \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index d822e2fd..00000000 --- a/README.md +++ /dev/null @@ -1,95 +0,0 @@ -

- ✨ EdTech ✨ -

- -
- One stop destination to all the needs of a contemporary college student. -
- -
- -
- -![Issues tag](https://img.shields.io/github/issues/EdTech-Official/EdTech-Web) -![Forks tag](https://img.shields.io/github/forks/EdTech-Official/EdTech-Web) -![Stars](https://img.shields.io/github/stars/EdTech-Official/EdTech-Web?style=social) -![Licence](https://img.shields.io/github/license/EdTech-Official/EdTech-Web) - - -
- -If you find any bug or have any suggestion, You can post them in issues section of this github repository. -Please refer to [CONTRIBUTING](CONTRIBUTING.md) file to know more. - -**Copyright © 2021 All Rights Reserved By [EdTech](https://github.com/EdTech-Official)** - -
- - -## ❤️ Note to new contributors - -Thank you for considering and taking the time to contribute! Before contributing kindly read and follow [Code of Conduct](CODE_OF_CONDUCT.md). To help new developers/contributors there are set of instructions added in [CONTRIBUTING.md](CONTRIBUTING.md). Which describes the intial stages for working on this project. Also refer the [MIT License](LICENSE). - -
- -## Features - -- Register and sign in page with additional social sign in options like sign-in with Facebook, Twitter, Google And GitHub account. -- Every new user signed in gets redirected to a page where user has to set his college, branch, year preferences which can be even changed later inside the user tab in app. -- Dynamic option fetched in user preferences form and submitted data gets stored in firebase firestore database. -- User state persistance: Once signed in user details are cached. -- Subjects shown to user are fetched according to user's selected preferences. -- College timetable fetched according to your year and branch. - -
- -## Technologies Used - -Visual Studio Code - -Visual Studio Code -Visual Studio Code -Visual Studio Code -Visual Studio Code -Visual Studio Code -Visual Studio Code - -
-
-
- -## 📌 Potential Maintainers : - -[Deep Shetye](https://github.com/deepshetye)\ -[Raj Naik Dhulapkar](https://github.com/RajNykDhulapkar) - -
- -## Screenshots - -![Sign Up Page](https://i.imgur.com/rFYYxcM.png) - -**Sign Up page** 👆 - -
- -![Sign In Page](https://i.imgur.com/4acqUn2.png) - -**Sign In page** 👆 - -
- -![User Preference Form](https://i.imgur.com/GSYr4kZ.png) - -**User Preference Form** 👆 - -
- -## 📌 Credits : - -This project exists, thanks to all the people who contribute. - - - - \ No newline at end of file diff --git a/__pycache__/set_default.cpython-39.pyc b/__pycache__/set_default.cpython-39.pyc deleted file mode 100644 index 3422f6c3..00000000 Binary files a/__pycache__/set_default.cpython-39.pyc and /dev/null differ diff --git a/api/__init__.py b/api/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/api/__pycache__/__init__.cpython-38.pyc b/api/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 5196685e..00000000 Binary files a/api/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/__init__.cpython-39.pyc b/api/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 64bc4c7c..00000000 Binary files a/api/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/api/__pycache__/admin.cpython-38.pyc b/api/__pycache__/admin.cpython-38.pyc deleted file mode 100644 index 7d33f545..00000000 Binary files a/api/__pycache__/admin.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/admin.cpython-39.pyc b/api/__pycache__/admin.cpython-39.pyc deleted file mode 100644 index abdc090a..00000000 Binary files a/api/__pycache__/admin.cpython-39.pyc and /dev/null differ diff --git a/api/__pycache__/apps.cpython-38.pyc b/api/__pycache__/apps.cpython-38.pyc deleted file mode 100644 index 0c9397d4..00000000 Binary files a/api/__pycache__/apps.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/apps.cpython-39.pyc b/api/__pycache__/apps.cpython-39.pyc deleted file mode 100644 index bcc9f6de..00000000 Binary files a/api/__pycache__/apps.cpython-39.pyc and /dev/null differ diff --git a/api/__pycache__/filters.cpython-38.pyc b/api/__pycache__/filters.cpython-38.pyc deleted file mode 100644 index e4e7c838..00000000 Binary files a/api/__pycache__/filters.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/filters.cpython-39.pyc b/api/__pycache__/filters.cpython-39.pyc deleted file mode 100644 index 0416d357..00000000 Binary files a/api/__pycache__/filters.cpython-39.pyc and /dev/null differ diff --git a/api/__pycache__/mixins.cpython-38.pyc b/api/__pycache__/mixins.cpython-38.pyc deleted file mode 100644 index 86c1e9f1..00000000 Binary files a/api/__pycache__/mixins.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/mixins.cpython-39.pyc b/api/__pycache__/mixins.cpython-39.pyc deleted file mode 100644 index 85debfcb..00000000 Binary files a/api/__pycache__/mixins.cpython-39.pyc and /dev/null differ diff --git a/api/__pycache__/models.cpython-38.pyc b/api/__pycache__/models.cpython-38.pyc deleted file mode 100644 index 119b0120..00000000 Binary files a/api/__pycache__/models.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/models.cpython-39.pyc b/api/__pycache__/models.cpython-39.pyc deleted file mode 100644 index cc10b1d0..00000000 Binary files a/api/__pycache__/models.cpython-39.pyc and /dev/null differ diff --git a/api/__pycache__/serializers.cpython-38.pyc b/api/__pycache__/serializers.cpython-38.pyc deleted file mode 100644 index 2ca425a9..00000000 Binary files a/api/__pycache__/serializers.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/serializers.cpython-39.pyc b/api/__pycache__/serializers.cpython-39.pyc deleted file mode 100644 index 372a37f4..00000000 Binary files a/api/__pycache__/serializers.cpython-39.pyc and /dev/null differ diff --git a/api/__pycache__/urls.cpython-38.pyc b/api/__pycache__/urls.cpython-38.pyc deleted file mode 100644 index 187f2365..00000000 Binary files a/api/__pycache__/urls.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/urls.cpython-39.pyc b/api/__pycache__/urls.cpython-39.pyc deleted file mode 100644 index 41278df9..00000000 Binary files a/api/__pycache__/urls.cpython-39.pyc and /dev/null differ diff --git a/api/__pycache__/views.cpython-38.pyc b/api/__pycache__/views.cpython-38.pyc deleted file mode 100644 index c8321b52..00000000 Binary files a/api/__pycache__/views.cpython-38.pyc and /dev/null differ diff --git a/api/__pycache__/views.cpython-39.pyc b/api/__pycache__/views.cpython-39.pyc deleted file mode 100644 index f1e35590..00000000 Binary files a/api/__pycache__/views.cpython-39.pyc and /dev/null differ diff --git a/api/admin.py b/api/admin.py deleted file mode 100644 index 09fe6d4c..00000000 --- a/api/admin.py +++ /dev/null @@ -1,104 +0,0 @@ -# from django.contrib import admin -# from .models import * -# from nested_admin import NestedModelAdmin, NestedStackedInline, NestedTabularInline -# from college.models import * - -# # class LectureTabularInline(NestedTabularInline): -# # model = Day.lectures.through -# # extra = 1 - -# # class DayTabularInline(NestedTabularInline): -# # model = Day -# # extra = 1 -# # inlines = [LectureTabularInline,] - - -# # class TimetabelAdmin(NestedModelAdmin): -# # inlines = [DayTabularInline,] - - -# # class DayAdmin(admin.ModelAdmin): -# # inlines = [ -# # LectureTabularInline -# # ] - -# # # class DayInline(admin.TabularInline): -# # # model = Day - -# # # class TimetableAdmin(admin.ModelAdmin): -# # # inlines = [ -# # # DayInline, -# # # ] - - -# class TextbookInline(admin.StackedInline): -# model = Textbook -# fields = ['title'] - - -# class MaterialInline(admin.StackedInline): -# model = Material - - -# class BranchInline(admin.StackedInline): -# model = Branch -# fields = ['branch_code', 'name'] - - -# # class CourseInline(admin.StackedInline): -# # model = Course -# # fields = ['course_code', 'name'] - - -# class SubjectAdmin(admin.ModelAdmin): -# inlines = [ -# TextbookInline -# ] - - -# # class CourseAdmin(admin.ModelAdmin): -# # inlines = [ -# # TextbookInline -# # ] - - -# class BranchAdmin(admin.ModelAdmin): -# inlines = [ -# TextbookInline -# ] - - -# class CollegeAdmin(admin.ModelAdmin): -# inlines = [ -# BranchInline, -# # CourseInline -# ] - - -# class ContributorAdmin(admin.ModelAdmin): -# inlines = [ -# MaterialInline, -# ] - - -# admin.site.register(College, CollegeAdmin) -# # admin.site.register(Course, CourseAdmin) -# admin.site.register(Branch, BranchAdmin) -# admin.site.register(Subject, SubjectAdmin) -# admin.site.register(Textbook) -# admin.site.register(Faculty) -# admin.site.register(Material) - -# admin.site.register(Recommendation) -# # admin.site.register(Portion) -# admin.site.register(Gtimetable) -# admin.site.register(Contributor, ContributorAdmin) - - -# # admin.site.register(Lecture) -# # admin.site.register(Day, DayAdmin) -# # admin.site.register(Timetable, TimetabelAdmin) - - -# # admin.site.register(Timetable, TimetableAdmin) -# # Register your models here. diff --git a/api/apps.py b/api/apps.py deleted file mode 100644 index 66656fd2..00000000 --- a/api/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class ApiConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'api' diff --git a/api/filters.py b/api/filters.py deleted file mode 100644 index 6b2b01b8..00000000 --- a/api/filters.py +++ /dev/null @@ -1,12 +0,0 @@ -import django_filters - -from api.models import * - - -class SubjectFilter(django_filters.FilterSet): - branch = django_filters.ModelChoiceFilter(field_name="branch__branch_code", - queryset=Branch.objects.all()) - - class Meta: - model = Subject - fields = ('branch',) \ No newline at end of file diff --git a/api/migrations/__init__.py b/api/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/api/migrations/__pycache__/__init__.cpython-38.pyc b/api/migrations/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index a84e22e8..00000000 Binary files a/api/migrations/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/api/migrations/__pycache__/__init__.cpython-39.pyc b/api/migrations/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 3113e465..00000000 Binary files a/api/migrations/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/api/mixins.py b/api/mixins.py deleted file mode 100644 index c68baf83..00000000 --- a/api/mixins.py +++ /dev/null @@ -1,15 +0,0 @@ -from django.db.models import Q -import operator -from functools import reduce -from django.shortcuts import get_object_or_404 - - -class MultipleFieldLookupMixin(object): - def get_object(self): - queryset = self.get_queryset() # Get the base queryset - queryset = self.filter_queryset(queryset) # Apply any filter backends - filter = {} - for field in self.lookup_fields: - filter[field] = self.kwargs[field] - q = reduce(operator.or_, (Q(x) for x in filter.items())) - return get_object_or_404(queryset, q) \ No newline at end of file diff --git a/api/models.py b/api/models.py deleted file mode 100644 index d1c02549..00000000 --- a/api/models.py +++ /dev/null @@ -1,119 +0,0 @@ -import datetime -from django.db import models -from django.db.models import base -from django.db.models.aggregates import Max -from django.db.models.base import Model -from django.utils import timezone -from django.contrib.auth.models import User -from django.core.validators import BaseValidator, RegexValidator, MaxValueValidator, MinValueValidator - -from college.models import * - - -""" -MODELS: - - COLLEGE: - fields : college_code(PK), name, established, location, full_address, link_image, website_link, static_map_src, email, linkedin, instagram, facebook, twitter, youtube - - - COURSE: - fields : id, course_code, college, name, description - - - BRANCH: - fields : id, branch_code, college, name, description - - - SUBJECT: - fields : id, subject_code, college, branch, name, year, description - - - Gsheettable: - fields : id, title, gsheet_src, college, branch, year - - - TEXTBOOK: - fields : id, title, author, link, cover_image, college, subject, branch, course, year. - - - MATERIAL: - fields : id, title, link, author, subject, branch, course, year, posted_by, date_posted, description - - - FACULTY: - fields : id, name, designation, email, phone_number, description, branch, college, is_teaching_staff - - - PORTION: - fields : id, subject, college, branch, link - - - TIMETABLE: X - fields : title, branch, course, year, semester - - - DAY: X - fields : day, timetable(FK) - - - LECTURE: X - fields : subject(FK), start_time, end_time, teacher, days(MTMF) - -""" - - -# class Portion(models.Model): -# subject = models.ForeignKey(Subject, on_delete=models.DO_NOTHING, related_name="portions") -# college = models.ForeignKey(College, on_delete=models.DO_NOTHING, related_name="portions") -# branch = models.ForeignKey(Branch, on_delete=models.DO_NOTHING, related_name="portions", blank=True, null=True) -# link = models.URLField(max_length=200) - -# def __str__(self): -# return f"Syllabus for {self.subject.subject_code}, {self.branch.branch_code} of {self.college}" - - -# class Timetable(models.Model): -# YEARS = [ -# ('FIRST', 'FIRST'), -# ('SECOND', 'SECOND'), -# ('THIRD', 'THIRD'), -# ('FOURTH', 'FOURTH'), -# ] - -# SEMESTERS = [ -# ('SEM_1', "I Semester"), -# ('SEM_2', "II Semester"), -# ('SEM_3', "III Semester"), -# ('SEM_4', "IV Semester"), -# ('SEM_5', "V Semester"), -# ('SEM_6', "VI Semester"), -# ('SEM_7', "VII Semester"), -# ('SEM_8', "VIII Semester"), -# ] - -# title = models.CharField(max_length=150) -# branch = models.ForeignKey(Branch, on_delete=models.DO_NOTHING, related_name="timetables") -# course = models.ForeignKey(Course, on_delete=models.DO_NOTHING, related_name="timetables") -# year = models.CharField(max_length=8,choices=YEARS, default='FIRST') -# semester = models.CharField(max_length=5,choices=SEMESTERS, default='FIRST') - -# def __str__(self): -# return self.title - - -# class Day(models.Model): -# DAYS = [ -# ('MON', 'Monday'), -# ('TUE', 'Tuesday'), -# ('WED', 'Wednesday'), -# ('THU', 'Thursday'), -# ('FRI', 'Friday'), -# ('SAT', 'Saturday'), -# ('SUN', 'Sunday'), -# ] -# day = models.CharField(max_length=3, choices=DAYS, default='MON') -# timetable = models.ForeignKey(Timetable, on_delete=CASCADE, related_name='days', blank=False) - -# def __str__(self): -# return f"{self.day} in {self.timetable.title}." - - -# class Lecture(models.Model): -# subject = models.ForeignKey(Subject, on_delete=models.CASCADE) -# start_time = models.TimeField() -# end_time = models.TimeField() -# teacher = models.CharField(max_length=60) -# days = models.ManyToManyField(Day, related_name='lectures', blank=True) - - -# def __str__(self): -# return f"Lecture on {self.subject.subject_code} by {self.teacher} ( {self.start_time} - {self.end_time} )" diff --git a/api/serializers.py b/api/serializers.py deleted file mode 100644 index be6aafb3..00000000 --- a/api/serializers.py +++ /dev/null @@ -1,39 +0,0 @@ -from django.core.exceptions import FieldError -from django.db import models -from django.db.models import fields -from rest_framework import serializers -from django.contrib.auth.models import User - -from drf_queryfields import QueryFieldsMixin - -from college.models import * -from content.models import * - - -# class MaterialSerializer(serializers.ModelSerializer): -# contributor_name = serializers.CharField(source='contributor.name') -# contributor_link = serializers.CharField(source='contributor.social_link') - -# class Meta: -# model = Material -# fields = '__all__' - - -# class RecommendationSerializer(serializers.ModelSerializer): -# class Meta: -# model = Recommendation -# fields = '__all__' - - -# class MaterialSerializer(serializers.ModelSerializer): -# url = serializers.HyperlinkedIdentityField( -# view_name='material-detail', -# lookup_field='pk' -# ) -# subjects = SubjectListingField(many=True, read_only=True) -# branches = BranchesListingField(many=True, read_only=True) -# years = YearsListingField(many=True, read_only=True) - -# class Meta: -# model = Material -# fields = '__all__' diff --git a/api/set_default.py b/api/set_default.py deleted file mode 100644 index e69de29b..00000000 diff --git a/api/tests.py b/api/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/api/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/api/urls.py b/api/urls.py deleted file mode 100644 index 6f2e167e..00000000 --- a/api/urls.py +++ /dev/null @@ -1,54 +0,0 @@ -from api.models import Faculty -from django.urls import path, include -from . import views -from college import views as college_views -from content import views as content_views - -urlpatterns = [ - path('', views.apiOverview, name="api-overview"), - - # college views - path('college/', college_views.CollegeList.as_view(), name='college-list'), - path('college//', - college_views.CollegeDetail.as_view(), name='college-detail'), - path('user/college/', - college_views.UsersCollege.as_view(), name='users-college'), - path('branch/', - college_views.BranchList.as_view(), name="branch-list"), - path('branch//', - college_views.BranchDetail.as_view(), name="branch-detail"), - path('subject/', - college_views.SubjectList.as_view(), name="subject-list"), - path('subject//', - college_views.SubjectDetail.as_view(), name="subject-detail"), - path('portion/', - college_views.PortionList.as_view(), name="portion-list"), - path('portion//', - college_views.PortionDetail.as_view(), name="portion-detail"), - path('faculty/', - college_views.FacultyList.as_view(), name='faculty-list'), - path('faculty//', - college_views.FacultyDetail.as_view(), name='faculty-detail'), - # path('gtimetable/', - # college_views.GtimetableList.as_view(), name="gtimetable-list"), - path('gtimetable/', - college_views.GtimetableDetail.as_view(), name="gtimetable-detail"), - - path('contributor/', content_views.ContributorList.as_view(), - name='contributor-list'), - path('contributor//', - content_views.ContributorDetail.as_view(), name='contributor-detail'), - - path('textbook/', content_views.TextbookList.as_view(), name='textbook-list'), - path('textbook//', - content_views.TextbookDetail.as_view(), name='textbook-detail'), - - path('year/', college_views.YearList.as_view(), name='year-list') - # path('material-list/', views.MaterialList.as_view(), name='material-list'), - # path('material-detail//', - # views.MaterialDetail.as_view(), name='material-detail'), - # path('contributor-detail//', name='contributor-list'), - # path('material-list/', views.MaterialList.as_view(), name='material-list'), - # path('recommendation-list/', views.RecommendationList.as_view(), - # name='recommendation-list'), -] diff --git a/api/views.py b/api/views.py deleted file mode 100644 index 4c7b9927..00000000 --- a/api/views.py +++ /dev/null @@ -1,470 +0,0 @@ -from rest_framework import filters - -from django_filters.rest_framework import DjangoFilterBackend - -from django.shortcuts import render -from django.http import JsonResponse, Http404 -import rest_framework -from rest_framework import pagination - -from rest_framework.views import APIView -from rest_framework.generics import (ListAPIView, - ListCreateAPIView, RetrieveAPIView, - RetrieveUpdateDestroyAPIView) -from rest_framework.pagination import PageNumberPagination -from rest_framework.decorators import api_view -from rest_framework.response import Response -from rest_framework.renderers import JSONRenderer -from rest_framework import status - -from django.contrib.auth.models import User -from .models import * -from .serializers import * -from .mixins import * - -from college.models import * - -from rest_framework.reverse import reverse - -from content.models import * - - -# utility classes -class ResultsSetPagination(PageNumberPagination): - page_size = 5 - page_size_query_param = 'page_size' - max_page_size = 1000 - -# end utility classes - - -@api_view(['GET']) -def apiOverview(request): - api_urls = { - "College List": { - "url": reverse('college-list', request=request), - "path": "/api/college/", - "name": "college-list", - "fields": "college_code, url, branches, name, established, location, full_address, link_image, website_link, static_map_src, email, linkedin, instagram, facebook, twitter, youtube", - "filter_fields": "college_code", - "search_fields": "college_code, name, location", - "method_allowed": "GET, POST", - "permissions": "AllowAny" - }, - "College Detail": { - "url": reverse('college-detail', request=request, args=["NITG"]), - "path": "/api/college/NITG/", - "users_college": "/api/college/me/", - "users_college_url": reverse('users-college', request=request), - "name": "college-detail", - "fields": "college_code, branches, name, established, location, full_address, link_image, website_link, static_map_src, email, linkedin, instagram, facebook, twitter, youtube", - "method_allowed": "GET, PUT, DELETE", - "permissions": "AllowAny" - }, - "Subject List": { - "url": reverse('subject-list', request=request), - "path": "/api/subject/", - "name": "subject-list", - "fields": "id, url, portions, subject_code, name, colleges, branches, years", - "filter_fields": "subject_code, colleges__college_code, branches__branch_code, years__year", - "search_fields": "subject_code, name, branches__branch_code", - "other_params": "fields", - "method_allowed": "GET, POST", - "permissions": "AllowAny" - }, - "Subject Detail": { - "url": reverse('subject-detail', request=request, args=[450]), - "path": "/api/subject/450/", - "name": "subject-detail", - "fields": "id, url, portions, subject_code, name, colleges, branches, years", - "method_allowed": "GET, PUT, DELETE", - "permissions": "AllowAny" - }, - "Faculty List": { - "url": reverse('faculty-list', request=request), - "path": "/api/faculty/", - "name": "faculty-list", - "fields": "id, url, name, branch_name, designation, email, phone_number, is_teaching_staff, branch, college", - "filter_fields": "branch__branch_code, college__college_code, is_teaching_staff", - "search_fields": "name, branch__name, branch__branch_code, designation", - "method_allowed": "GET, POST", - "permissions": "AllowAny" - }, - "Faculty Detail": { - "url": reverse('faculty-detail', request=request, args=[80]), - "path": "/api/faculty/450/", - "name": "faculty-detail", - "fields": "id, url, name, branch_name, designation, email, phone_number, is_teaching_staff, branch, college", - "method_allowed": "GET, PUT, DELETE", - "permissions": "AllowAny" - }, - "Portion List": { - "url": reverse('portion-list', request=request), - "path": "/api/portion/", - "name": "portion-list", - "fields": "id, url, link, subjects, colleges, branches, years", - "filter_fields": "branches__branch_code, colleges__college_code, subjects_subject_code, years__year", - "search_fields": "subjects__name, branches__branch_code, subjects_subject_code", - "other_params": "fields", - "method_allowed": "GET, POST", - "permissions": "AllowAny" - }, - "Portion Detail": { - "url": reverse('portion-detail', request=request, args=[200]), - "path": "/api/portion/450/", - "name": "portion-detail", - "fields": "id, url, link, subjects, colleges, branches, years", - "method_allowed": "GET, PUT, DELETE", - "permissions": "AllowAny" - }, - # "Gtimetable List": { - # "url": reverse('gtimetable-list', request=request), - # "path": "/api/gtimetable/", - # "name": "gtimetable-list", - # "fields": "id, url, link, subjects, colleges, branches, years", - # "filter_fields": "branches__branch_code, colleges__college_code, subjects_subject_code, years__year", - # "search_fields": "subjects__name, branches__branch_code, subjects_subject_code", - # "method_allowed": "GET, POST", - # "permissions": "AllowAny" - # }, - # "Gtimetable Detail": { - # "url": reverse('gtimetable-detail', request=request, args=[10]), - # "path": "/api/gtimetable/10/", - # "name": "gtimetable-detail", - # "fields": "id, url, link, subjects, colleges, branches, years", - # "method_allowed": "GET, PUT, DELETE", - # "permissions": "AllowAny" - # }, - "Contributor List": { - "url": reverse('contributor-list', request=request), - "path": "/api/contributor/", - "name": "contributor-list", - "fields": "url, name, slug, instagram, twitter, linkedin", - "search_fields": "name", - "method_allowed": "GET, POST", - "permissions": "AllowAny" - }, - "Contributor Detail": { - "url": reverse('contributor-detail', request=request, args=['raj-dhulapkar']), - "path": "/api/contributor/raj-dhulapkar/", - "name": "contributor-detail", - "fields": "url, name, slug, instagram, twitter, linkedin", - "method_allowed": "GET, PUT, DELETE", - "permissions": "AllowAny" - }, - "Textbook List": { - "url": reverse('textbook-list', request=request), - "path": "/api/textbook/", - "name": "textbook-list", - "fields": "id, url, link, subjects, colleges, branches, years, title, author, link, is_affiliate_link, cover_image", - "filter_fields": "branches__branch_code, colleges__college_code, subjects_subject_code, years__year, is_affiliate_link", - "search_fields": "name, author, subjects__name, branches__branch_code, subjects_subject_code", - "other_params": "fields", - "method_allowed": "GET, POST", - "permissions": "AllowAny" - }, - "Textbook Detail": { - "url": reverse('textbook-detail', request=request, args=[10]), - "path": "/api/textbook/450/", - "name": "textbook-detail", - "fields": "id, url, link, subjects, colleges, branches, years, title, author, link, is_affiliate_link, cover_image", - "method_allowed": "GET, PUT, DELETE", - "permissions": "AllowAny" - }, - - } - - return Response(api_urls) - - -# class MaterialList(ListAPIView): -# """ -# List all contributor [GET] -# """ -# # return the list of subjects in a college -# queryset = Material.objects.all() -# serializer_class = MaterialSerializer -# pagination_class = ResultsSetPagination - -# filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] -# filterset_fields = ['year', 'college', 'branch__branch_code', -# 'subject__subject_code', 'course__course_code'] -# search_fields = ['title', 'contributor_name', -# 'subject_name', 'subject__subject_code'] - - -# class RecommendationList(ListAPIView): -# """ -# List all faculty in a college [GET] -# """ -# # return the list of faculty in a college -# queryset = Recommendation.objects.all() -# serializer_class = RecommendationSerializer -# pagination_class = ResultsSetPagination - -# filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] -# filterset_fields = ['recommended_by_faculty__name', -# 'recommended_by_contributor__name'] -# search_fields = ['title', ] - - -# class MaterialList(ListAPIView, MultipleFieldLookupMixin): -# """ -# List all Materials [GET] -# """ -# # return the list of subjects in a college -# queryset = Material.objects.all() -# serializer_class = MaterialSerializer -# pagination_class = ResultsSetPagination - -# filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] -# filterset_fields = ['colleges__college_code', 'branches__branch_code', -# 'subjects__subject_code', 'years__year'] -# search_fields = ['title', 'author', -# 'subjects__name', 'subjects__subject_code', -# 'branches__name', 'branches__branch_code'] - - -# class MaterialDetail(RetrieveAPIView): -# queryset = Material.objects.all() -# serializer_class = MaterialSerializer -# lookup_field = 'pk' - - # # function based views - - # @api_view(['GET']) - # def UserList(request): - # users = User.objects.all() - # serializer = UserSerializer(users, many=True) - # return Response(serializer.data) - - # @api_view(['GET']) - # def userDetail(request, username): - # user = User.objects.get(username=username) - # serializer = UserSerializer(user, many=False) - # return Response(serializer.data) - - # # end function based views - - # """ Subject """ - # class SubjectList(ListAPIView): - # """ - # List all Subjects [GET] or create a new Subject [POST] - # """ - - # # return the list of subjects - # queryset = Subject.objects.all() - # serializer_class = SubjectSerializer - # pagination_class = ResultsSetPagination - - # filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] - # filterset_fields = ['year',] - # search_fields = ['name', 'subject_code'] - - # def post(self, request, format=None): - # serializer = SubjectSerializer(data=request.data) - # if serializer.is_valid(): - # serializer.save() - # return Response(serializer.data, status=status.HTTP_201_CREATED) - - # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - # class SubjectDetail(APIView): - # """ - # Retrieve [GET], update [PUT] or delete [DELETE] a Subject instance. - # """ - # def get_object(self, pk): - # try: - # return Subject.objects.get(pk=pk) - # except Subject.DoesNotExist: - # raise Http404 - - # def get(self, request, pk, format=None): - # subject = self.get_object(pk) - # serializer = SubjectSerializer(subject) - # return Response(serializer.data) - - # def put(self, request, pk, format=None): - # subject = self.get_object(pk) - # serializer = SubjectSerializer(subject, data=request.data) - # if serializer.is_valid(): - # serializer.save() - # return Response(serializer.data) - # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - # def delete(self, request, pk, format=None): - # subject = self.get_object(pk) - # subject.delete() - # return Response(status=status.HTTP_204_NO_CONTENT) - - # - - # """ Course """ - # class CourseList(ListAPIView): - # """ - # List all Subjects [GET] or create a new Course - # """ - - # # return the list of subjects - # queryset = Course.objects.all() - # serializer_class = CourseSerializer - # pagination_class = ResultsSetPagination - - # def post(self, request, format=None): - # serializer = CourseSerializer(data=request.data) - # if serializer.is_valid(): - # serializer.save() - # return Response(serializer.data, status=status.HTTP_201_CREATED) - - # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - # class CourseDetail(APIView): - # """ - # Retrieve, update or delete a Course instance. - # """ - # def get_object(self, pk): - # try: - # return Course.objects.get(pk=pk) - # except Course.DoesNotExist: - # raise Http404 - - # def get(self, request, pk, format=None): - # course = self.get_object(pk) - # serializer = CourseSerializer(course) - # return Response(serializer.data) - - # def put(self, request, pk, format=None): - # course = self.get_object(pk) - # serializer = CourseSerializer(course, data=request.data) - # if serializer.is_valid(): - # serializer.save() - # return Response(serializer.data) - # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - # def delete(self, request, pk, format=None): - # course = self.get_object(pk) - # course.delete() - # return Response(status=status.HTTP_204_NO_CONTENT) - - # """ Textbook """ - - # class TextbookList(ListAPIView): - # """ - # List all Textbooks [GET] or create a new Textbook. - # """ - # queryset = Textbook.objects.all() - # serializer_class = TextbookSerializer - # pagination_class = ResultsSetPagination - - # filter_backends = [DjangoFilterBackend] - # filterset_fields = ['subject', 'branch', 'course', 'year',] - - # def post(self, request, format=None): - # serializer = TextbookSerializer(data=request.data) - # if serializer.is_valid(): - # serializer.save() - # return Response(serializer.data, status=status.HTTP_201_CREATED) - - # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - # class TextbookDetail(APIView): - # """ - # Retrieve, update or delete a snippet instance. - # """ - # def get_object(self, pk): - # try: - # return Textbook.objects.get(pk=pk) - # except Textbook.DoesNotExist: - # raise Http404 - - # def get(self, request, pk, format=None): - # textbook = self.get_object(pk) - # serializer = TextbookSerializer(textbook) - # return Response(serializer.data) - - # def put(self, request, pk, format=None): - # textbook = self.get_object(pk) - # serializer = TextbookSerializer(textbook, data=request.data) - # if serializer.is_valid(): - # serializer.save() - # return Response(serializer.data) - # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - # def delete(self, request, pk, format=None): - # textbook = self.get_object(pk) - # textbook.delete() - # return Response(status=status.HTTP_204_NO_CONTENT) - - # # """Lectures""" - # class LectureList(ListCreateAPIView): - # queryset = Lecture.objects.all() - # serializer_class = LectureSerializer - # pagination_class = ResultsSetPagination - - # class DayList(ListCreateAPIView): - # queryset = Day.objects.all() - # serializer_class = DaySerializer - # pagination_class = ResultsSetPagination - - # class TimetableList(ListCreateAPIView): - # queryset = Timetable.objects.all() - # serializer_class = TimetableSerializer - # pagination_class = ResultsSetPagination - - # class PortionList(ListCreateAPIView): - # queryset = Portion.objects.all() - # serializer_class = PortionSerializer - # pagination_class = ResultsSetPagination - - # filter_backends = [DjangoFilterBackend] - # filterset_fields = ['subject', 'college',] - - # class PortionDetail(RetrieveUpdateDestroyAPIView): - # queryset = Portion.objects.all() - # serializer_class = PortionSerializer - - # class MaterialList(ListCreateAPIView): - # """ - # List all Materials [GET] - # """ - # queryset = Material.objects.all() - # serializer_class = MaterialSerializer - # pagination_class = ResultsSetPagination - - # filter_backends = [DjangoFilterBackend] - # filterset_fields = ['subject', 'branch', 'course', 'year',] - - # class GsheettableList(ListCreateAPIView): - # """ - # List all Materials [GET] - # """ - # queryset = Gsheettable.objects.all() - # serializer_class = GsheettableSerializer - # pagination_class = ResultsSetPagination - - # filter_backends = [DjangoFilterBackend] - # filterset_fields = ['college', 'branch', 'year',] - - # class CollegeList(ListCreateAPIView): - # """ - # List all Materials [GET] - # """ - # queryset = College.objects.all() - # serializer_class = CollegeSerializer - # pagination_class = ResultsSetPagination - - # filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] - # filterset_fields = ['college_code',] - # search_fields = ['name', 'college_code', 'location', 'description',] - - # class FacultyList(ListCreateAPIView): - # """ - # List all Materials [GET] - # """ - # queryset = Faculty.objects.all() - # serializer_class = FacultySerializer - # pagination_class = ResultsSetPagination - - # filter_backends = [DjangoFilterBackend, filters.SearchFilter,] - # filterset_fields = ['branch', 'is_teaching_staff', 'college',] - # search_fields = ['name', 'designation',] diff --git a/college/__init__.py b/college/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/college/__pycache__/__init__.cpython-38.pyc b/college/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index af5faf70..00000000 Binary files a/college/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/college/__pycache__/__init__.cpython-39.pyc b/college/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 06d79bd1..00000000 Binary files a/college/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/college/__pycache__/admin.cpython-38.pyc b/college/__pycache__/admin.cpython-38.pyc deleted file mode 100644 index 4ea56853..00000000 Binary files a/college/__pycache__/admin.cpython-38.pyc and /dev/null differ diff --git a/college/__pycache__/admin.cpython-39.pyc b/college/__pycache__/admin.cpython-39.pyc deleted file mode 100644 index 6810b78b..00000000 Binary files a/college/__pycache__/admin.cpython-39.pyc and /dev/null differ diff --git a/college/__pycache__/apps.cpython-38.pyc b/college/__pycache__/apps.cpython-38.pyc deleted file mode 100644 index add98d10..00000000 Binary files a/college/__pycache__/apps.cpython-38.pyc and /dev/null differ diff --git a/college/__pycache__/apps.cpython-39.pyc b/college/__pycache__/apps.cpython-39.pyc deleted file mode 100644 index bb680f7c..00000000 Binary files a/college/__pycache__/apps.cpython-39.pyc and /dev/null differ diff --git a/college/__pycache__/models.cpython-38.pyc b/college/__pycache__/models.cpython-38.pyc deleted file mode 100644 index d3ab178f..00000000 Binary files a/college/__pycache__/models.cpython-38.pyc and /dev/null differ diff --git a/college/__pycache__/models.cpython-39.pyc b/college/__pycache__/models.cpython-39.pyc deleted file mode 100644 index 2ce8e7b7..00000000 Binary files a/college/__pycache__/models.cpython-39.pyc and /dev/null differ diff --git a/college/__pycache__/serializers.cpython-38.pyc b/college/__pycache__/serializers.cpython-38.pyc deleted file mode 100644 index 2ba1439f..00000000 Binary files a/college/__pycache__/serializers.cpython-38.pyc and /dev/null differ diff --git a/college/__pycache__/serializers.cpython-39.pyc b/college/__pycache__/serializers.cpython-39.pyc deleted file mode 100644 index 44d6d3a5..00000000 Binary files a/college/__pycache__/serializers.cpython-39.pyc and /dev/null differ diff --git a/college/__pycache__/views.cpython-38.pyc b/college/__pycache__/views.cpython-38.pyc deleted file mode 100644 index eef5ce00..00000000 Binary files a/college/__pycache__/views.cpython-38.pyc and /dev/null differ diff --git a/college/__pycache__/views.cpython-39.pyc b/college/__pycache__/views.cpython-39.pyc deleted file mode 100644 index 4222ed43..00000000 Binary files a/college/__pycache__/views.cpython-39.pyc and /dev/null differ diff --git a/college/admin.py b/college/admin.py deleted file mode 100644 index 98a4167c..00000000 --- a/college/admin.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.contrib import admin -from college.models import * - -admin.site.register(Year) -admin.site.register(Branch) - -# Register your models here. diff --git a/college/apps.py b/college/apps.py deleted file mode 100644 index 73097938..00000000 --- a/college/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class CollegeConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'college' diff --git a/college/migrations/0001_initial.py b/college/migrations/0001_initial.py deleted file mode 100644 index 7862e22d..00000000 --- a/college/migrations/0001_initial.py +++ /dev/null @@ -1,100 +0,0 @@ -# Generated by Django 3.2.5 on 2021-08-23 16:17 - -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Branch', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('branch_code', models.CharField(max_length=8, unique=True)), - ('name', models.CharField(max_length=150)), - ], - ), - migrations.CreateModel( - name='College', - fields=[ - ('college_code', models.CharField(max_length=12, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(max_length=180)), - ('established', models.PositiveIntegerField(default=2021, validators=[django.core.validators.MinValueValidator(1900), django.core.validators.MaxValueValidator(2050)])), - ('location', models.CharField(max_length=30)), - ('full_address', models.CharField(blank=True, default='', max_length=200)), - ('link_image', models.URLField(blank=True)), - ('website_link', models.URLField(blank=True)), - ('static_map_src', models.URLField(blank=True, max_length=330)), - ('email', models.EmailField(blank=True, max_length=100)), - ('linkedin', models.URLField(blank=True, max_length=60)), - ('instagram', models.URLField(blank=True, max_length=60)), - ('facebook', models.URLField(blank=True, max_length=60)), - ('twitter', models.URLField(blank=True, max_length=60)), - ('youtube', models.URLField(blank=True, max_length=60)), - ], - ), - migrations.CreateModel( - name='Year', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('year', models.CharField(choices=[('FIRST', 'FIRST'), ('SECOND', 'SECOND'), ('THIRD', 'THIRD'), ('FOURTH', 'FOURTH')], default='FIRST', max_length=8, unique=True)), - ], - ), - migrations.CreateModel( - name='Subject', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('subject_code', models.CharField(max_length=8, unique=True)), - ('name', models.CharField(max_length=150)), - ('branches', models.ManyToManyField(related_name='subjects', to='college.Branch')), - ('colleges', models.ManyToManyField(related_name='subjects', to='college.College')), - ('years', models.ManyToManyField(related_name='subjects', to='college.Year')), - ], - ), - migrations.CreateModel( - name='Portion', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('link', models.URLField(default='', max_length=35)), - ('branches', models.ManyToManyField(related_name='portions', to='college.Branch')), - ('colleges', models.ManyToManyField(related_name='portions', to='college.College')), - ('subjects', models.ManyToManyField(related_name='portions', to='college.Subject')), - ('years', models.ManyToManyField(related_name='portions', to='college.Year')), - ], - ), - migrations.CreateModel( - name='Gtimetable', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('gsheet_src', models.URLField(max_length=90)), - ('branch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='gsheettables', to='college.branch')), - ('college', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='gsheettables', to='college.college')), - ('year', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='gsheettables', to='college.year')), - ], - ), - migrations.CreateModel( - name='Faculty', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=50)), - ('designation', models.CharField(max_length=80)), - ('email', models.EmailField(max_length=254)), - ('phone_number', models.CharField(blank=True, max_length=17)), - ('is_teaching_staff', models.BooleanField(default=True)), - ('branch', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='faculty', to='college.branch')), - ('college', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='faculty', to='college.college')), - ], - ), - migrations.AddField( - model_name='branch', - name='colleges', - field=models.ManyToManyField(related_name='branches', to='college.College'), - ), - ] diff --git a/college/migrations/0002_year_colleges.py b/college/migrations/0002_year_colleges.py deleted file mode 100644 index e65045b0..00000000 --- a/college/migrations/0002_year_colleges.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.5 on 2021-08-29 16:19 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('college', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='year', - name='colleges', - field=models.ManyToManyField(related_name='years', to='college.College'), - ), - ] diff --git a/college/migrations/__init__.py b/college/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/college/migrations/__pycache__/0001_initial.cpython-38.pyc b/college/migrations/__pycache__/0001_initial.cpython-38.pyc deleted file mode 100644 index 4a2c375c..00000000 Binary files a/college/migrations/__pycache__/0001_initial.cpython-38.pyc and /dev/null differ diff --git a/college/migrations/__pycache__/0001_initial.cpython-39.pyc b/college/migrations/__pycache__/0001_initial.cpython-39.pyc deleted file mode 100644 index c353437c..00000000 Binary files a/college/migrations/__pycache__/0001_initial.cpython-39.pyc and /dev/null differ diff --git a/college/migrations/__pycache__/0002_year_colleges.cpython-38.pyc b/college/migrations/__pycache__/0002_year_colleges.cpython-38.pyc deleted file mode 100644 index 15a648be..00000000 Binary files a/college/migrations/__pycache__/0002_year_colleges.cpython-38.pyc and /dev/null differ diff --git a/college/migrations/__pycache__/0002_year_colleges.cpython-39.pyc b/college/migrations/__pycache__/0002_year_colleges.cpython-39.pyc deleted file mode 100644 index 0c8bea6c..00000000 Binary files a/college/migrations/__pycache__/0002_year_colleges.cpython-39.pyc and /dev/null differ diff --git a/college/migrations/__pycache__/__init__.cpython-38.pyc b/college/migrations/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 19dafb63..00000000 Binary files a/college/migrations/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/college/migrations/__pycache__/__init__.cpython-39.pyc b/college/migrations/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 1b3894f4..00000000 Binary files a/college/migrations/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/college/models.py b/college/models.py deleted file mode 100644 index 4b9be4a1..00000000 --- a/college/models.py +++ /dev/null @@ -1,117 +0,0 @@ -from django.db import models -from django.core.validators import MaxValueValidator, MinValueValidator -import datetime - -# Create your models here. - - -class College(models.Model): - """ Model for all the Colleges """ - - college_code = models.CharField( - max_length=12, unique=True, primary_key=True) - name = models.CharField(max_length=180) - established = models.PositiveIntegerField(default=datetime.date.today( - ).year, validators=[MinValueValidator(1900), MaxValueValidator(2050)]) - location = models.CharField(max_length=30) - full_address = models.CharField(max_length=200, default="", blank=True) - link_image = models.URLField(max_length=200, blank=True) - website_link = models.URLField(max_length=200, blank=True) - static_map_src = models.URLField(max_length=330, blank=True) - email = models.EmailField(max_length=100, blank=True) - linkedin = models.URLField(max_length=60, blank=True) - instagram = models.URLField(max_length=60, blank=True) - facebook = models.URLField(max_length=60, blank=True) - twitter = models.URLField(max_length=60, blank=True) - youtube = models.URLField(max_length=60, blank=True) - - def __str__(self): - return self.name - - -class Branch(models.Model): - """ Model for all the Branches """ - branch_code = models.CharField(max_length=8, unique=True) - colleges = models.ManyToManyField( - College, related_name='branches') - name = models.CharField(max_length=150) - - def __str__(self): - return f"{self.branch_code}: {self.name}" - - -class Year(models.Model): - """ Model for all the Year """ - - YEARS = [ - ('FIRST', 'FIRST'), - ('SECOND', 'SECOND'), - ('THIRD', 'THIRD'), - ('FOURTH', 'FOURTH'), - ] - - year = models.CharField(max_length=8, choices=YEARS, - default='FIRST', unique=True) - colleges = models.ManyToManyField( - College, related_name='years') - - def __str__(self): - return f"{self.year}" - - -class Subject(models.Model): - - """Model for all the Subjects""" - - subject_code = models.CharField(max_length=8, unique=True) - colleges = models.ManyToManyField( - College, related_name='subjects') - branches = models.ManyToManyField( - Branch, related_name='subjects') - name = models.CharField(max_length=150) - years = models.ManyToManyField( - Year, related_name='subjects') - - def __str__(self): - return f"({self.college.college_code}, {self.branch.branch_code}): {self.subject_code}: {self.name}" - - -class Portion(models.Model): - link = models.URLField(max_length=35, default="") - subjects = models.ManyToManyField( - Subject, related_name="portions") - colleges = models.ManyToManyField( - College, related_name='portions') - branches = models.ManyToManyField( - Branch, related_name='portions') - years = models.ManyToManyField( - Year, related_name='portions') - - -class Faculty(models.Model): - """Model for all Faculty""" - name = models.CharField(max_length=50) - designation = models.CharField(max_length=80) - email = models.EmailField(max_length=254) - phone_number = models.CharField(max_length=17, blank=True) - branch = models.ForeignKey( - Branch, on_delete=models.DO_NOTHING, blank=False, related_name='faculty') - college = models.ForeignKey( - College, on_delete=models.DO_NOTHING, blank=False, related_name='faculty') - is_teaching_staff = models.BooleanField(default=True) - - def __str__(self): - return self.name - - -class Gtimetable(models.Model): - gsheet_src = models.URLField(max_length=90) - college = models.ForeignKey( - College, on_delete=models.DO_NOTHING, related_name="gsheettables") - branch = models.ForeignKey(Branch, on_delete=models.DO_NOTHING, - related_name="gsheettables", blank=True, null=True) - year = models.ForeignKey(Year, on_delete=models.DO_NOTHING, - related_name="gsheettables", blank=True, null=True) - - def __str__(self): - return f"{self.college.college_code}: Timetable for {self.branch.branch_code} {self.year.year} year." diff --git a/college/serializers.py b/college/serializers.py deleted file mode 100644 index 712116bb..00000000 --- a/college/serializers.py +++ /dev/null @@ -1,142 +0,0 @@ -from django.db.models import fields -from rest_framework import serializers -from drf_queryfields import QueryFieldsMixin -from rest_framework.utils import field_mapping - -from college.models import * - - -"""related fields""" - - -class SubjectListingField(serializers.RelatedField): - def to_representation(self, value): - return [value.subject_code, value.name] - - -class BranchesListingField(serializers.RelatedField): - def to_representation(self, value): - return f"{value.branch_code}" - - -class YearsListingField(serializers.RelatedField): - def to_representation(self, value): - return f"{value.year}" - - -"""end related fields""" - - -# college serializer -class BranchForCollegeSerializer(serializers.ModelSerializer): - # url = serializers.HyperlinkedIdentityField( - # view_name='branch-detail', - # lookup_field='pk' - # ) - value = serializers.IntegerField(source='id') - label = serializers.CharField(source='name') - - class Meta: - model = Branch - fields = ['value', 'label', ] - - -class YearSerializer(serializers.ModelSerializer): - value = serializers.CharField(source='id') - label = serializers.CharField(source='year') - - class Meta: - model = Year - fields = ('value', 'label') - - -class CollegeSerializer(QueryFieldsMixin, serializers.ModelSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='college-detail', - lookup_field='college_code' - ) - value = serializers.CharField(source='college_code') - label = serializers.CharField(source='name') - branches = BranchForCollegeSerializer(Branch, many=True, read_only=True) - years = YearSerializer(Year, many=True, read_only=True) - - class Meta: - model = College - fields = '__all__' - - -# branch serializer - -class BranchSerializer(serializers.ModelSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='branch-detail', - lookup_field='pk' - ) - - class Meta: - model = Branch - fields = '__all__' - - -# subject serializer - -class PortionForSubjectSerializer(serializers.ModelSerializer): - - url = serializers.HyperlinkedIdentityField( - view_name='portion-detail', - lookup_field='pk' - ) - - class Meta: - model = Portion - fields = ['url', 'link', ] - - -class SubjectSerializer(QueryFieldsMixin, serializers.ModelSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='subject-detail', - lookup_field='pk' - ) - portions = PortionForSubjectSerializer(Portion, many=True, read_only=True) - - class Meta: - model = Subject - fields = '__all__' - - -# portion serializer - -class PortionSerializer(QueryFieldsMixin, serializers.ModelSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='portion-detail', - lookup_field='pk' - ) - subjects = SubjectListingField(many=True, read_only=True) - branches = BranchesListingField(many=True, read_only=True) - years = YearsListingField(many=True, read_only=True) - - class Meta: - model = Portion - fields = '__all__' - - -# faculty serialize -class FacultySerializer(serializers.ModelSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='faculty-detail', - lookup_field='pk' - ) - branch_name = serializers.CharField(source='branch.name') - - class Meta: - model = Faculty - fields = '__all__' - - -# G timetable serialize -class GtimetableSerializer(serializers.ModelSerializer): - branch_code = serializers.CharField(source='branch.branch_code') - - class Meta: - model = Gtimetable - fields = '__all__' diff --git a/college/tests.py b/college/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/college/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/college/views.py b/college/views.py deleted file mode 100644 index 13ebcdfa..00000000 --- a/college/views.py +++ /dev/null @@ -1,206 +0,0 @@ -from rest_framework.views import APIView -from django.http.response import Http404 -from rest_framework.generics import (ListAPIView, - RetrieveAPIView) -from rest_framework.response import Response - -# import models -from college.models import * - -# import serializers -from college.serializers import * - -# import pagination classes -from api.views import ResultsSetPagination - - -# import filtration and search backends -from rest_framework import filters -from django_filters.rest_framework import DjangoFilterBackend - - -# college views -""" College """ - - -class CollegeList(ListAPIView): - """ - List all Subjects [GET] - """ - - # return the list of subjects - queryset = College.objects.all() - serializer_class = CollegeSerializer - pagination_class = ResultsSetPagination - - filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] - filterset_fields = ['college_code', ] - search_fields = ['name', 'college_code', 'location'] - - -class CollegeDetail(RetrieveAPIView): - """ - Retrieve [GET], update [PUT] or delete [DELETE] a Subject instance. - """ - queryset = College.objects.all() - serializer_class = CollegeSerializer - lookup_field = 'college_code' - - -class UsersCollege(APIView): - """ - Retrieve [GET], update [PUT] or delete [DELETE] a college instance. - """ - - def get_object(self, college_code): - try: - return College.objects.get(college_code=college_code) - except College.DoesNotExist: - raise Http404 - - def get(self, request, format=None): - college = self.get_object(request.user.profile.college.college_code) - serializer = CollegeSerializer(college, context={'request': request}) - return Response(serializer.data) - - -""" Branch """ - - -class BranchList(ListAPIView): - """ - List all Branches in a branches [GET] - """ - # return the list of subjects in a college - queryset = Branch.objects.all() - serializer_class = BranchSerializer - pagination_class = ResultsSetPagination - - -class BranchDetail(RetrieveAPIView): - """ - Retrieve a course in a branch [GET] - """ - queryset = Branch.objects.all() - serializer_class = BranchSerializer - lookup_field = 'pk' - - -""" Subject """ - - -class SubjectList(ListAPIView): - serializer_class = SubjectSerializer - pagination_class = ResultsSetPagination - - filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] - filterset_fields = ['years__year', 'subject_code', - 'branches__branch_code', 'colleges__college_code'] - search_fields = ['name', 'subject_code', 'branches__branch_code'] - - def get_queryset(self, request): - subjects = Subject.objects.filter( - colleges=request.user.profile.college, branches=request.user.profile.branch, years=request.user.profile.year) - return subjects - - def get(self, request, format=None): - subjects = self.get_queryset(request) - serializer = SubjectSerializer( - subjects, many=True, context={'request': request}) - return Response(serializer.data) - - -class SubjectDetail(RetrieveAPIView): - queryset = Subject.objects.all() - serializer_class = SubjectSerializer - lookup_field = 'pk' - - -""" Portins views""" - - -class PortionList(ListAPIView): - serializer_class = PortionSerializer - - filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] - filterset_fields = ['years__year', - 'subjects__subject_code', - 'branches__branch_code', 'colleges__college_code'] - search_fields = ['subjects__subject_code', - 'subjects__name', 'branches__branch_code'] - - def get_queryset(self, request): - portions = Portion.objects.filter( - colleges=request.user.profile.college, branches=request.user.profile.branch, years=request.user.profile.year) - return portions - - def get(self, request, format=None): - portions = self.get_queryset(request) - serializer = PortionSerializer( - portions, many=True, context={'request': request}) - return Response(serializer.data) - - -class PortionDetail(RetrieveAPIView): - queryset = Portion.objects.all() - serializer_class = PortionSerializer - lookup_field = 'pk' - - -""" Year List View """ - - -class YearList(ListAPIView): - queryset = Year.objects.all() - serializer_class = YearSerializer - pagination_class = ResultsSetPagination - - -""" Faculty views """ - - -class FacultyList(ListAPIView): - serializer_class = FacultySerializer - pagination_class = ResultsSetPagination - - filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] - filterset_fields = ['branch__branch_code', - 'is_teaching_staff', 'college__college_code'] - search_fields = ['name', 'branch__name', - 'branch__branch_code', 'designation'] - - def get_queryset(self, request): - faculty = Faculty.objects.filter( - college=request.user.profile.college, branch=request.user.profile.branch) - return faculty - - def get(self, request, format=None): - faculty = self.get_queryset(request) - serializer = FacultySerializer( - faculty, many=True, context={'request': request}) - return Response(serializer.data) - - -class FacultyDetail(RetrieveAPIView): - queryset = Faculty.objects.all() - serializer_class = FacultySerializer - lookup_field = 'pk' - - -# Gtimetable veiw -class GtimetableDetail(RetrieveAPIView): - - def get_object(self, request): - gtimetable = Gtimetable.objects.filter( - college=request.user.profile.college, branch=request.user.profile.branch, year=request.user.profile.year) - - if len(gtimetable) == 0: - raise Http404 - else: - return gtimetable.first() - - def get(self, request, format=None): - profile = self.get_object(request) - serializer = GtimetableSerializer( - profile, many=False, context={'request': request}) - return Response(serializer.data) diff --git a/content/__init__.py b/content/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/content/__pycache__/__init__.cpython-38.pyc b/content/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index a74f2fde..00000000 Binary files a/content/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/content/__pycache__/__init__.cpython-39.pyc b/content/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 265c1721..00000000 Binary files a/content/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/content/__pycache__/admin.cpython-38.pyc b/content/__pycache__/admin.cpython-38.pyc deleted file mode 100644 index 52875634..00000000 Binary files a/content/__pycache__/admin.cpython-38.pyc and /dev/null differ diff --git a/content/__pycache__/admin.cpython-39.pyc b/content/__pycache__/admin.cpython-39.pyc deleted file mode 100644 index a56d50fd..00000000 Binary files a/content/__pycache__/admin.cpython-39.pyc and /dev/null differ diff --git a/content/__pycache__/apps.cpython-38.pyc b/content/__pycache__/apps.cpython-38.pyc deleted file mode 100644 index ca547b11..00000000 Binary files a/content/__pycache__/apps.cpython-38.pyc and /dev/null differ diff --git a/content/__pycache__/apps.cpython-39.pyc b/content/__pycache__/apps.cpython-39.pyc deleted file mode 100644 index 21f04f94..00000000 Binary files a/content/__pycache__/apps.cpython-39.pyc and /dev/null differ diff --git a/content/__pycache__/models.cpython-38.pyc b/content/__pycache__/models.cpython-38.pyc deleted file mode 100644 index c977aaf0..00000000 Binary files a/content/__pycache__/models.cpython-38.pyc and /dev/null differ diff --git a/content/__pycache__/models.cpython-39.pyc b/content/__pycache__/models.cpython-39.pyc deleted file mode 100644 index 2dd02584..00000000 Binary files a/content/__pycache__/models.cpython-39.pyc and /dev/null differ diff --git a/content/__pycache__/serializers.cpython-38.pyc b/content/__pycache__/serializers.cpython-38.pyc deleted file mode 100644 index dc5078cb..00000000 Binary files a/content/__pycache__/serializers.cpython-38.pyc and /dev/null differ diff --git a/content/__pycache__/serializers.cpython-39.pyc b/content/__pycache__/serializers.cpython-39.pyc deleted file mode 100644 index d8ea4589..00000000 Binary files a/content/__pycache__/serializers.cpython-39.pyc and /dev/null differ diff --git a/content/__pycache__/views.cpython-38.pyc b/content/__pycache__/views.cpython-38.pyc deleted file mode 100644 index 1ec9a7aa..00000000 Binary files a/content/__pycache__/views.cpython-38.pyc and /dev/null differ diff --git a/content/__pycache__/views.cpython-39.pyc b/content/__pycache__/views.cpython-39.pyc deleted file mode 100644 index 60bba36f..00000000 Binary files a/content/__pycache__/views.cpython-39.pyc and /dev/null differ diff --git a/content/admin.py b/content/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/content/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/content/apps.py b/content/apps.py deleted file mode 100644 index 273d1694..00000000 --- a/content/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class ContentConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'content' diff --git a/content/migrations/0001_initial.py b/content/migrations/0001_initial.py deleted file mode 100644 index cb3a1067..00000000 --- a/content/migrations/0001_initial.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.5 on 2021-08-23 16:17 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Contributor', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('slug', models.SlugField(blank=True, max_length=120, null=True, unique=True)), - ('instagram', models.URLField(blank=True, max_length=100)), - ('twitter', models.URLField(blank=True, max_length=100)), - ('linkedin', models.URLField(blank=True, max_length=100)), - ], - ), - ] diff --git a/content/migrations/0002_textbook.py b/content/migrations/0002_textbook.py deleted file mode 100644 index a2ac70d6..00000000 --- a/content/migrations/0002_textbook.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 3.2.5 on 2021-08-23 16:34 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('college', '0001_initial'), - ('content', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Textbook', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=150)), - ('author', models.CharField(max_length=100)), - ('link', models.URLField(max_length=250)), - ('is_affiliate_link', models.BooleanField(default=False)), - ('cover_image', models.URLField()), - ('branches', models.ManyToManyField(related_name='textbooks', to='college.Branch')), - ('colleges', models.ManyToManyField(related_name='textbooks', to='college.College')), - ('subjects', models.ManyToManyField(related_name='textbooks', to='college.Subject')), - ('years', models.ManyToManyField(related_name='textbooks', to='college.Year')), - ], - ), - ] diff --git a/content/migrations/__init__.py b/content/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/content/migrations/__pycache__/0001_initial.cpython-38.pyc b/content/migrations/__pycache__/0001_initial.cpython-38.pyc deleted file mode 100644 index b2d8e4c3..00000000 Binary files a/content/migrations/__pycache__/0001_initial.cpython-38.pyc and /dev/null differ diff --git a/content/migrations/__pycache__/0001_initial.cpython-39.pyc b/content/migrations/__pycache__/0001_initial.cpython-39.pyc deleted file mode 100644 index 7cd107e7..00000000 Binary files a/content/migrations/__pycache__/0001_initial.cpython-39.pyc and /dev/null differ diff --git a/content/migrations/__pycache__/0002_textbook.cpython-38.pyc b/content/migrations/__pycache__/0002_textbook.cpython-38.pyc deleted file mode 100644 index 69c06dea..00000000 Binary files a/content/migrations/__pycache__/0002_textbook.cpython-38.pyc and /dev/null differ diff --git a/content/migrations/__pycache__/0002_textbook.cpython-39.pyc b/content/migrations/__pycache__/0002_textbook.cpython-39.pyc deleted file mode 100644 index f421cc20..00000000 Binary files a/content/migrations/__pycache__/0002_textbook.cpython-39.pyc and /dev/null differ diff --git a/content/migrations/__pycache__/__init__.cpython-38.pyc b/content/migrations/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 49399c5d..00000000 Binary files a/content/migrations/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/content/migrations/__pycache__/__init__.cpython-39.pyc b/content/migrations/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 224f96fb..00000000 Binary files a/content/migrations/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/content/models.py b/content/models.py deleted file mode 100644 index 0cf8e0fc..00000000 --- a/content/models.py +++ /dev/null @@ -1,70 +0,0 @@ -from college.models import * -from django.db import models -from django.db.models.signals import pre_save -from django.dispatch import receiver -from edtech_dj.util import unique_slug_generator - - -class Contributor(models.Model): - name = models.CharField(max_length=100) - slug = models.SlugField(max_length=120, null=True, blank=True, unique=True) - instagram = models.URLField(max_length=100, blank=True) - twitter = models.URLField(max_length=100, blank=True) - linkedin = models.URLField(max_length=100, blank=True) - - def __str__(self): - return self.name - - -@receiver(pre_save, sender=Contributor) -def pre_save_receiver(sender, instance, *args, **kwargs): - if not instance.slug: - instance.slug = unique_slug_generator(instance) - - -class Textbook(models.Model): - - title = models.CharField(max_length=150) - author = models.CharField(max_length=100) - link = models.URLField(max_length=250) - is_affiliate_link = models.BooleanField(default=False) - cover_image = models.URLField(max_length=200) - colleges = models.ManyToManyField( - College, related_name="textbooks") - subjects = models.ManyToManyField( - Subject, related_name="textbooks") - branches = models.ManyToManyField( - Branch, related_name="textbooks") - years = models.ManyToManyField(Year, related_name="textbooks") - - def __str__(self): - return self.title - - -# class Material(models.Model): -# title = models.CharField(max_length=150) -# link = models.URLField(max_length=200) -# contributors = models.ManyToManyField( -# Contributor, related_name="materials", blank=True, null=True) -# colleges = models.ManyToManyField( -# College, related_name="materials", blank=True, null=True) -# subjects = models.ManyToManyField( -# Subject, related_name="materials", blank=True, null=True) -# branches = models.ManyToManyField( -# Branch, related_name="materials", blank=True, null=True) -# years = models.ManyToManyField(Year, related_name="materials") - -# def __str__(self): -# return self.title - - -# class Recommendation(models.Model): -# title = models.CharField(max_length=250) -# recommended_by_faculty = models.ManyToManyField( -# Faculty, blank=True, null=True, related_name='recommendations') -# recommended_by_contributor = models.ManyToManyField( -# Contributor, blank=True, null=True, related_name='recommendations') -# link = models.URLField(max_length=200) - -# def __str__(self): -# return self.title diff --git a/content/serializers.py b/content/serializers.py deleted file mode 100644 index 341606af..00000000 --- a/content/serializers.py +++ /dev/null @@ -1,38 +0,0 @@ -from rest_framework import serializers -from drf_queryfields import QueryFieldsMixin - -from content.models import * -from college.models import * - -from college.serializers import (SubjectListingField, - BranchesListingField, - YearsListingField) - - -# contributor serializer -class ContributorSerializer(serializers.HyperlinkedModelSerializer): - # materials = MaterialSerializer(Material, many=True, read_only=True) - url = serializers.HyperlinkedIdentityField( - view_name='contributor-detail', - lookup_field='slug' - ) - - class Meta: - model = Contributor - fields = '__all__' - - -# serializer for textbook - -class TextbookSerializer(serializers.ModelSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='textbook-detail', - lookup_field='pk' - ) - subjects = SubjectListingField(many=True, read_only=True) - branches = BranchesListingField(many=True, read_only=True) - years = YearsListingField(many=True, read_only=True) - - class Meta: - model = Textbook - fields = '__all__' diff --git a/content/tests.py b/content/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/content/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/content/views.py b/content/views.py deleted file mode 100644 index 28249ea2..00000000 --- a/content/views.py +++ /dev/null @@ -1,66 +0,0 @@ -from django.http.response import Http404 -from rest_framework.generics import (ListAPIView, - RetrieveAPIView) -from rest_framework.response import Response - -# import models -from college.models import * -from content.models import * - -# import serializers -from content.serializers import * - -# import pagination classes -from api.views import ResultsSetPagination - - -# import filtration and search backends -from rest_framework import filters -from django_filters.rest_framework import DjangoFilterBackend - - -# views for contributors -class ContributorList(ListAPIView): - """ - List all contributor [GET] - """ - queryset = Contributor.objects.all() - serializer_class = ContributorSerializer - pagination_class = ResultsSetPagination - filter_backends = [filters.SearchFilter, ] - search_fields = ['name', ] - - -class ContributorDetail(RetrieveAPIView): - queryset = Contributor.objects.all() - serializer_class = ContributorSerializer - lookup_field = 'slug' - - -# views for textbooks -class TextbookList(ListAPIView): - pagination_class = ResultsSetPagination - - filter_backends = [DjangoFilterBackend, filters.SearchFilter, ] - filterset_fields = ['colleges__college_code', 'branches__branch_code', - 'subjects__subject_code', 'years__year', 'is_affiliate_link'] - search_fields = ['title', 'author', - 'subjects__name', 'subjects__subject_code', - 'branches__name', 'branches__branch_code'] - - def get_queryset(self, request): - textbooks = Textbook.objects.filter( - colleges=request.user.profile.college, branches=request.user.profile.branch, years=request.user.profile.year) - return textbooks - - def get(self, request, format=None): - textbooks = self.get_queryset(request) - serializer = TextbookSerializer( - textbooks, many=True, context={'request': request}) - return Response(serializer.data) - - -class TextbookDetail(RetrieveAPIView): - queryset = Textbook.objects.all() - serializer_class = TextbookSerializer - lookup_field = 'pk' diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index b8242563..00000000 Binary files a/db.sqlite3 and /dev/null differ diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index eaf186d2..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: '3' - -services: - web: - build: . - command: python manage.py runserver 0.0.0.0:8000 - ports: - - 8000:8000 - -# Use command `docker-compose build` to build the project -# + The above command will install all the requirements and build the image - -# Use command `docker-compose up` to run the container - -# If you don't have docker-compose installed use the following commands -# `sudo apt-get -y install python-pip` && `sudo pip install docker-compose` -# sudo docker-compose --version <-- If everything went well - - -# Error while fetching server API version: ('Connection aborted.', ConnectionRefusedError(61, 'Connection refused'))[12728] Failed to execute script docker-compose -# for this error : `sudo gpasswd -a $USER docker` && `newgrp docker` diff --git a/edtech_dj/__init__.py b/edtech_dj/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/edtech_dj/__pycache__/__init__.cpython-38.pyc b/edtech_dj/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index dea397c8..00000000 Binary files a/edtech_dj/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/__init__.cpython-39.pyc b/edtech_dj/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index cd06a500..00000000 Binary files a/edtech_dj/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/settings.cpython-38.pyc b/edtech_dj/__pycache__/settings.cpython-38.pyc deleted file mode 100644 index 2a15c9a1..00000000 Binary files a/edtech_dj/__pycache__/settings.cpython-38.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/settings.cpython-39.pyc b/edtech_dj/__pycache__/settings.cpython-39.pyc deleted file mode 100644 index ca1fa8c0..00000000 Binary files a/edtech_dj/__pycache__/settings.cpython-39.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/urls.cpython-38.pyc b/edtech_dj/__pycache__/urls.cpython-38.pyc deleted file mode 100644 index 42507d4f..00000000 Binary files a/edtech_dj/__pycache__/urls.cpython-38.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/urls.cpython-39.pyc b/edtech_dj/__pycache__/urls.cpython-39.pyc deleted file mode 100644 index b6fce1b0..00000000 Binary files a/edtech_dj/__pycache__/urls.cpython-39.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/util.cpython-38.pyc b/edtech_dj/__pycache__/util.cpython-38.pyc deleted file mode 100644 index 9136b762..00000000 Binary files a/edtech_dj/__pycache__/util.cpython-38.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/util.cpython-39.pyc b/edtech_dj/__pycache__/util.cpython-39.pyc deleted file mode 100644 index 3adfb823..00000000 Binary files a/edtech_dj/__pycache__/util.cpython-39.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/wsgi.cpython-38.pyc b/edtech_dj/__pycache__/wsgi.cpython-38.pyc deleted file mode 100644 index 929f4260..00000000 Binary files a/edtech_dj/__pycache__/wsgi.cpython-38.pyc and /dev/null differ diff --git a/edtech_dj/__pycache__/wsgi.cpython-39.pyc b/edtech_dj/__pycache__/wsgi.cpython-39.pyc deleted file mode 100644 index ec89e716..00000000 Binary files a/edtech_dj/__pycache__/wsgi.cpython-39.pyc and /dev/null differ diff --git a/edtech_dj/asgi.py b/edtech_dj/asgi.py deleted file mode 100644 index 6153532d..00000000 --- a/edtech_dj/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for edtech_dj project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'edtech_dj.settings') - -application = get_asgi_application() diff --git a/edtech_dj/settings.py b/edtech_dj/settings.py deleted file mode 100644 index add4645c..00000000 --- a/edtech_dj/settings.py +++ /dev/null @@ -1,252 +0,0 @@ -""" -Django settings for edtech_dj project. - -Generated by 'django-admin startproject' using Django 3.2.5. - -For more information on this file, see -https://docs.djangoproject.com/en/3.2/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/3.2/ref/settings/ -""" - -from pathlib import Path -import os -from typing import cast -from decouple import config -from datetime import timedelta -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = config('SECRET_KEY', cast=str) - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = config('DEBUG', cast=bool) - -ALLOWED_HOSTS = ['*'] - - -# Application definition - -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'rest_framework', - # apps - 'api.apps.ApiConfig', - 'college.apps.CollegeConfig', - 'content.apps.ContentConfig', - 'users.apps.UsersConfig', - - 'django_filters', - 'corsheaders', - 'nested_admin', - 'drf_queryfields', - - # djoser - 'djoser', - 'rest_framework.authtoken', - 'rest_framework_simplejwt', - 'rest_framework_simplejwt.token_blacklist', - 'social_django', - -] - -MIDDLEWARE = [ - 'social_django.middleware.SocialAuthExceptionMiddleware', - 'django.middleware.security.SecurityMiddleware', - 'whitenoise.middleware.WhiteNoiseMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'corsheaders.middleware.CorsMiddleware', -] - -CORS_ORIGIN_ALLOW_ALL = True - -ROOT_URLCONF = 'edtech_dj.urls' - - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - # Added directory of React Static folder ~ Deep Shetye + 3 line - 'DIRS': [ - os.path.join(BASE_DIR, 'frontend/build') - ], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - 'social_django.context_processors.backends', - 'social_django.context_processors.login_redirect' - ], - }, - }, -] - -WSGI_APPLICATION = 'edtech_dj.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/3.2/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } -} - - -EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' -EMAIL_HOST = 'smtp.gmail.com' -EMAIL_PORT = 587 -EMAIL_HOST_USER = config('EMAIL_HOST_USER', cast=str) -EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD', cast=str) -EMAIL_USE_TLS = True - -# Password validation -# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/3.2/topics/i18n/ - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_L10N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/3.2/howto/static-files/ - -STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') -# Initialized path for Static React File ~Deep Shetye + 3 lines -STATICFILES_DIRS = [ - os.path.join(BASE_DIR, 'frontend/build/static'), -] - -# For Heroku deployment || ref: 'http://whitenoise.evans.io/en/stable/django.html' ~Deep Shetye + 1 lines -STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' - -REST_FRAMEWORK = { - 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', - 'PAGE_SIZE': 20, - 'DEFAULT_PERMISSION_CLASSES': [ - 'rest_framework.permissions.AllowAny' - ], - 'DEFAULT_AUTHENTICATION_CLASSES': ( - 'rest_framework_simplejwt.authentication.JWTAuthentication', - ), -} - -AUTHENTICATION_BACKENDS = ( - 'social_core.backends.google.GoogleOAuth2', - 'social_core.backends.facebook.FacebookOAuth2', - 'django.contrib.auth.backends.ModelBackend' -) - -# simple jwt -SIMPLE_JWT = { - 'AUTH_HEADER_TYPES': ('JWT',), - 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), - 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), - 'AUTH_TOKEN_CLASSES': ( - 'rest_framework_simplejwt.tokens.AccessToken', - ) -} - -# djoser -DJOSER = { - 'LOGIN_FIELD': 'email', - 'USER_CREATE_PASSWORD_RETYPE': True, - 'USERNAME_CHANGED_EMAIL_CONFIRMATION': True, - 'PASSWORD_CHANGED_EMAIL_CONFIRMATION': True, - 'SEND_CONFIRMATION_EMAIL': True, - 'SET_USERNAME_RETYPE': True, - 'SET_PASSWORD_RETYPE': True, - 'PASSWORD_RESET_CONFIRM_URL': 'password/reset/confirm/{uid}/{token}', - 'USERNAME_RESET_CONFIRM_URL': 'email/reset/confirm/{uid}/{token}', - 'ACTIVATION_URL': 'activate/{uid}/{token}', - 'SEND_ACTIVATION_EMAIL': True, - 'SOCIAL_AUTH_TOKEN_STRATEGY': 'djoser.social.token.jwt.TokenStrategy', - 'SOCIAL_AUTH_ALLOWED_REDIRECT_URIS': [ - 'http://localhost:8000/google', 'http://localhost:8000/facebook', 'http://localhost:8000', - 'https://edtech-dj.herokuapp.com/google', 'https://edtech-dj.herokuapp.com/facebook', 'https://edtech-dj.herokuapp.com', - 'https://edtech1.herokuapp.com/google', 'https://edtech1.herokuapp.com/facebook', 'https://edtech1.herokuapp.com' - ], - 'SERIALIZERS': { - 'user_create': 'users.serializers.UserCreateSerializer', - 'user': 'users.serializers.UserCreateSerializer', - 'current_user': 'users.serializers.UserSerializer', - 'user_delete': 'djoser.serializers.UserDeleteSerializer', - } -} - -# Custom user model -AUTH_USER_MODEL = "users.User" - - -# Default primary key field type -# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' -SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = config( - 'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY', cast=str) -SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = config( - 'SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET', cast=str) -SOCIAL_AUTH_GOOGLE_OAUTH2_IGNORE_DEFAULT_SCOPE = True -SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = ['openid', - 'https://www.googleapis.com/auth/userinfo.email', - 'https://www.googleapis.com/auth/userinfo.profile' - ] -SOCIAL_AUTH_GOOGLE_OAUTH2_EXTRA_DATA = ['first_name', ] - - -SOCIAL_AUTH_FACEBOOK_KEY = config('SOCIAL_AUTH_FACEBOOK_KEY', cast=str) -SOCIAL_AUTH_FACEBOOK_SECRET = config('SOCIAL_AUTH_FACEBOOK_SECRET', cast=str) -SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] -SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = { - 'fields': 'email, first_name' -} - -SOCIAL_AUTH_TWITTER_KEY = '' -SOCIAL_AUTH_TWITTER_SECRET = '' diff --git a/edtech_dj/urls.py b/edtech_dj/urls.py deleted file mode 100644 index b9b731df..00000000 --- a/edtech_dj/urls.py +++ /dev/null @@ -1,33 +0,0 @@ -"""edtech_dj URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/3.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.conf.urls import url -from django.contrib import admin -from django.urls import path, include, re_path -from django.views.generic import TemplateView - -urlpatterns = [ - - path('admin/', admin.site.urls), - path('api/', include('api.urls')), - url(r'^nested_admin/', include('nested_admin.urls')), - path('auth/', include('djoser.urls')), - path('auth/', include('djoser.urls.jwt')), - path('auth/', include('users.urls')), - path('auth/', include('users.auth_urls')), -] - -urlpatterns += [re_path(r'^.*', - TemplateView.as_view(template_name='index.html'))] diff --git a/edtech_dj/util.py b/edtech_dj/util.py deleted file mode 100644 index d1280823..00000000 --- a/edtech_dj/util.py +++ /dev/null @@ -1,30 +0,0 @@ -import string -import random - -from django.utils.text import slugify - - -def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits): - return ''.join(random.choice(chars) for _ in range(size)) - - -def unique_slug_generator(instance, new_slug=None): - if new_slug is not None: - slug = new_slug - else: - try: - slug = slugify(instance.title) - except: - slug = slugify(instance.name) - - Klass = instance.__class__ - max_length = Klass._meta.get_field('slug').max_length - slug = slug[:max_length] - qs_exists = Klass.objects.filter(slug=slug).exists() - - if qs_exists: - new_slug = "{slug}-{randstr}".format( - slug=slug[:max_length-5], randstr=random_string_generator(size=4)) - - return unique_slug_generator(instance, new_slug=new_slug) - return slug diff --git a/edtech_dj/wsgi.py b/edtech_dj/wsgi.py deleted file mode 100644 index bf8c875b..00000000 --- a/edtech_dj/wsgi.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -WSGI config for edtech_dj project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application -from whitenoise import WhiteNoise - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'edtech_dj.settings') - -application = get_wsgi_application() - -# For Heroku || ref: 'https://www.youtube.com/watch?v=r0ECufCyyyw' ~ Deep Shetye + 1 line -application = WhiteNoise(application) diff --git a/frontend/README.md b/frontend/README.md deleted file mode 100644 index 4379bb01..00000000 --- a/frontend/README.md +++ /dev/null @@ -1,43 +0,0 @@ -``` -Folder Structure - -src -│ index.js -│ App.js -| Auth.js -| firebase.js -| privateRoute.js -| serviceWorker.js -| App.css -│ -└───components - │ Home.js - │ Login.js - | DeskTopNavBar.js - | MobileNavBar.js - │ - └───timetable - | │ Timetable.js - │ - └───portion - | │ Portion.js - │ - └───textbook - | │ Textbook.js - │ - └───notes - | │ Notes.js - │ - └───Recommendation - | │ Recommendation.js - │ - └───people - | │ People.js - │ - └───about - | │ About.js - │ - └───user - │ User.js - -``` \ No newline at end of file diff --git a/frontend/build/EdTech.svg b/frontend/build/EdTech.svg deleted file mode 100644 index 2275472a..00000000 --- a/frontend/build/EdTech.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/build/android-chrome-192x192.png b/frontend/build/android-chrome-192x192.png deleted file mode 100644 index 90d15730..00000000 Binary files a/frontend/build/android-chrome-192x192.png and /dev/null differ diff --git a/frontend/build/android-chrome-512x512.png b/frontend/build/android-chrome-512x512.png deleted file mode 100644 index b9c4485f..00000000 Binary files a/frontend/build/android-chrome-512x512.png and /dev/null differ diff --git a/frontend/build/apple-touch-icon.png b/frontend/build/apple-touch-icon.png deleted file mode 100644 index dcb614a1..00000000 Binary files a/frontend/build/apple-touch-icon.png and /dev/null differ diff --git a/frontend/build/asset-manifest.json b/frontend/build/asset-manifest.json deleted file mode 100644 index a4b8c0cb..00000000 --- a/frontend/build/asset-manifest.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "files": { - "main.css": "./static/css/main.b23f180e.chunk.css", - "main.js": "./static/js/main.e037f05e.chunk.js", - "main.js.map": "./static/js/main.e037f05e.chunk.js.map", - "runtime-main.js": "./static/js/runtime-main.80416030.js", - "runtime-main.js.map": "./static/js/runtime-main.80416030.js.map", - "static/js/2.d2fc931c.chunk.js": "./static/js/2.d2fc931c.chunk.js", - "static/js/2.d2fc931c.chunk.js.map": "./static/js/2.d2fc931c.chunk.js.map", - "index.html": "./index.html", - "static/css/main.b23f180e.chunk.css.map": "./static/css/main.b23f180e.chunk.css.map", - "static/js/2.d2fc931c.chunk.js.LICENSE.txt": "./static/js/2.d2fc931c.chunk.js.LICENSE.txt", - "static/media/Waimakariri.3ea33f90.png": "./static/media/Waimakariri.3ea33f90.png", - "static/media/logo.cdce1646.png": "./static/media/logo.cdce1646.png", - "static/media/whitelogo.602f62f5.png": "./static/media/whitelogo.602f62f5.png" - }, - "entrypoints": [ - "static/js/runtime-main.80416030.js", - "static/js/2.d2fc931c.chunk.js", - "static/css/main.b23f180e.chunk.css", - "static/js/main.e037f05e.chunk.js" - ] -} \ No newline at end of file diff --git a/frontend/build/favicon-16x16.png b/frontend/build/favicon-16x16.png deleted file mode 100644 index 66d22952..00000000 Binary files a/frontend/build/favicon-16x16.png and /dev/null differ diff --git a/frontend/build/favicon-32x32.png b/frontend/build/favicon-32x32.png deleted file mode 100644 index 0855b289..00000000 Binary files a/frontend/build/favicon-32x32.png and /dev/null differ diff --git a/frontend/build/favicon.ico b/frontend/build/favicon.ico deleted file mode 100644 index bcc1c72e..00000000 Binary files a/frontend/build/favicon.ico and /dev/null differ diff --git a/frontend/build/index.html b/frontend/build/index.html deleted file mode 100644 index 5c6245a8..00000000 --- a/frontend/build/index.html +++ /dev/null @@ -1 +0,0 @@ -EdTech
\ No newline at end of file diff --git a/frontend/build/robots.txt b/frontend/build/robots.txt deleted file mode 100644 index e9e57dc4..00000000 --- a/frontend/build/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/frontend/build/site.webmanifest b/frontend/build/site.webmanifest deleted file mode 100644 index 1a69b2a4..00000000 --- a/frontend/build/site.webmanifest +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "edtech", - "short_name": "", - "start_url": ".", - "icons": [ - { - "src": "/static/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/static/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/frontend/build/static/android-chrome-192x192.png b/frontend/build/static/android-chrome-192x192.png deleted file mode 100644 index 90d15730..00000000 Binary files a/frontend/build/static/android-chrome-192x192.png and /dev/null differ diff --git a/frontend/build/static/android-chrome-512x512.png b/frontend/build/static/android-chrome-512x512.png deleted file mode 100644 index b9c4485f..00000000 Binary files a/frontend/build/static/android-chrome-512x512.png and /dev/null differ diff --git a/frontend/build/static/css/main.b23f180e.chunk.css b/frontend/build/static/css/main.b23f180e.chunk.css deleted file mode 100644 index 04270985..00000000 --- a/frontend/build/static/css/main.b23f180e.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -:root{--nav-width:68px;--first-color:#4723d9;--first-color-light:#afa5d9;--white-color:#f7f6fb;--normal-font-size:1rem;--z-fixed:100}*{box-sizing:border-box;padding:0;margin:0}body{position:relative;font-size:1rem;font-size:var(--normal-font-size);font-family:"Nunito",sans-serif}.login_container{display:flex;height:100vh;align-items:center;background-size:cover;justify-content:center}.login_box{padding:50px;border-radius:25px;background-color:#afa5d9;background-color:var(--first-color-light)}.login_container button{border:none;background-color:#f7f6fb;background-color:var(--white-color);cursor:pointer;border-radius:25px;padding:10px 20px}.l_navbar{position:fixed;top:0;left:-30%;width:68px;width:var(--nav-width);height:100vh;background-color:#4723d9;background-color:var(--first-color);transition:all .5s ease;z-index:100;z-index:var(--z-fixed)}.l_navbar .logo_content .logo{color:#fff;display:flex;height:50px;width:100%;align-items:center;opacity:0;pointer-events:none;transition:all .5s ease}.l_navbar.show .logo_content .logo{opacity:1;pointer-events:none;width:auto}.logo_content .logo i{font-size:28px;margin-right:5px}.logo_content .logo .logo_name{font-size:20px;font-weight:400;cursor:pointer}.l_navbar .logo{padding-top:10px;padding-left:6px}.l_navbar #btn{position:absolute;color:#fff;cursor:pointer;top:6px;left:50%;font-size:22px;height:50px;width:50px;text-align:center;line-height:50px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.l_navbar.show{width:15%}.l_navbar.show #btn{left:90%}.l_navbar ul{margin-top:20px}.l_navbar ul li{position:relative;width:100%;margin:0 5px;list-style:none;line-height:50px}.l_navbar .tooltip{position:absolute;left:150px;top:0;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:6px;height:35px;width:150px;background:#fff;line-height:35px;text-align:center;box-shadow:0 5px 10px rgba(0,0,0,.2);transition:0s;opacity:0;pointer-events:none;display:block}.l_navbar.show .tooltip{display:none}.l_navbar ul li:hover .tooltip,.log-out-btn:hover .tooltip{transition:all .5s ease;opacity:1;top:50%}.l_navbar .nav_link{color:#fff;display:flex;align-items:center;text-decoration:none;border-radius:12px;white-space:nowrap;transition:all .4s ease}.l_navbar i{font-size:18px;font-weight:400;height:50px;min-width:50px;line-height:50px;text-align:center}.l_navbar .nav_name{font-size:15px;font-weight:400;opacity:0;pointer-events:none;transition:all .3s ease}.l_navbar.show .nav_name{transition:0s;opacity:1;pointer-events:auto}.l_navbar.show{color:#f7f6fb;color:var(--white-color);width:240px}.log-out-btn{display:flex;cursor:pointer}.main_content_body{padding-left:0;height:calc(100vh - 25px);width:100%;margin-top:25px}.active:before{content:"";position:absolute;left:0;width:2px;height:32px;background-color:#f7f6fb;background-color:var(--white-color)}@media screen and (min-width:768px){.header{height:calc(var(--header-height) + 1rem);padding:0 2rem 0 calc(68px + 2rem);padding:0 2rem 0 calc(var(--nav-width) + 2rem)}.header_img{width:40px;height:40px}.header_img img{width:45px}.l-navbar{left:0;padding:1rem 1rem 0 0}.show{width:224px;width:calc(var(--nav-width) + 156px)}.body-pd{padding-left:256px;padding-left:calc(var(--nav-width) + 188px)}}.center{display:flex;justify-content:center;align-items:center}.box{width:200px;height:200px;box-shadow:0 10px 20px rgba(0,0,0,.288);border-radius:23px;flex-direction:column;background:linear-gradient(90deg,#4723d9,#4223bd);background:linear-gradient(90deg,var(--first-color),#4223bd);color:#fff;position:relative;overflow:hidden;margin:5px}.box img{width:75px;height:75px;border-radius:50px}.person_name{margin-bottom:2.5px;font-size:1rem;text-align:center;margin-top:9.5px}.person_designation{margin-top:8px;font-size:.7rem;text-align:center}.arr_container,.cancel{position:absolute;width:40px;height:40px;background:#fff;bottom:0;right:0;border-radius:23px 0 23px 0;color:#464646;font-size:1.6rem;cursor:pointer;transition:all .4s}.arr_container i{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.active_arr{-webkit-transform:translate(80%,80%);transform:translate(80%,80%)}.left_container{position:absolute;background:#0f2027;width:100%;height:100%;border-radius:23px;padding:40px 0 0 20px;transition:all .4s}.off{-webkit-transform:translate(-80%,-80%) rotate(90deg);transform:translate(-80%,-80%) rotate(90deg)}.on{-webkit-transform:translate(0) rotate(0);transform:translate(0) rotate(0)}.left_container p{margin-bottom:15px;font-size:1.2rem}.left_container .icons{font-size:1.6rem;margin-top:10px}.left_container .icons i{color:#cfcfcf;cursor:pointer;margin-right:10px;transition:all .4s}.left_container .icons i:hover{color:#2c5364}.nav-menu,.top-navbar{display:none}@media screen and (min-width:440px){.l_navbar{left:0}.main_content_body{padding-left:68px;padding-left:var(--nav-width)}}@media screen and (max-width:440px){.top-navbar{display:flex;margin-left:0;height:60px;align-items:center;box-shadow:0 -15px 33px #4723d9;box-shadow:0 -15px 33px var(--first-color)}.nav-menu{background-color:#4723d9;background-color:var(--first-color);width:250px;height:100vh;display:flex;justify-content:center;position:fixed;top:0;z-index:1;left:-100%;transition:.85s}.nav-menu.active{left:0;width:100vw;transition:.35s}.nav-menu-items{width:100%}.navbar-toggle{background-color:#4723d9;background-color:var(--first-color);width:100%;height:60px;font-size:50px;display:flex;justify-content:flex-start;align-items:center}.category-list-item{list-style:none;font-size:23px;padding:15px 0}.news_category_list{display:flex;overflow-x:hidden;flex-direction:column;align-items:center}.nav_link{text-decoration:none;color:#fff}}body,input{font-family:"Poppins",sans-serif}.container{position:relative;width:100%;background-color:#fff;min-height:100vh;overflow:hidden}.forms-container{position:absolute;width:100%;height:100%;top:0;left:0}.signin-signup{position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);left:75%;width:50%;transition:1s ease-in-out .7s;display:grid;grid-template-columns:1fr;z-index:5}form{display:flex;align-items:center;justify-content:center;flex-direction:column;padding:0 5rem;transition:all .2s .7s;overflow:hidden;grid-column:1/2;grid-row:1/2}form.sign-up-form{opacity:0;z-index:1}form.sign-in-form{z-index:2}.title{font-size:2.2rem;color:#444;margin-bottom:10px}.input-field{max-width:380px;width:100%;background-color:#f0f0f0;margin:10px 0;height:55px;border-radius:55px;display:grid;grid-template-columns:15% 85%;padding:0 .4rem;position:relative}.input-field i{text-align:center;line-height:55px;color:#acacac;transition:.5s;font-size:1.1rem}.input-field input{background:none;outline:none;border:none;line-height:1;font-weight:600;font-size:1.1rem;color:#333}.input-field input::-webkit-input-placeholder{color:#aaa;font-weight:500}.input-field input:-ms-input-placeholder{color:#aaa;font-weight:500}.input-field input::placeholder{color:#aaa;font-weight:500}.social-text{padding:.7rem 0;font-size:1rem}.social-media{display:flex;flex-direction:row}.social-icon{width:50px;height:50px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:35px}.btn{width:150px;background-color:#4723d9;background-color:var(--first-color);border:none;outline:none;height:49px;border-radius:49px;color:#fff;text-transform:uppercase;font-weight:600;margin:10px 0;cursor:pointer;transition:.5s}.panels-container{position:absolute;height:100%;width:100%;top:0;left:0;display:grid;grid-template-columns:repeat(2,1fr)}.container:before{content:"";position:absolute;height:2000px;width:2000px;top:-10%;right:48%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-image:linear-gradient(-45deg,#4723d9,#3c19ca);background-image:linear-gradient(-45deg,var(--first-color),#3c19ca);transition:1.8s ease-in-out;border-radius:50%;z-index:6}.image{width:100%;transition:-webkit-transform 1.1s ease-in-out;transition:transform 1.1s ease-in-out;transition:transform 1.1s ease-in-out,-webkit-transform 1.1s ease-in-out;transition-delay:.4s}.panel{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-around;text-align:center;z-index:6}.left-panel{pointer-events:all;padding:3rem 17% 2rem 12%}.right-panel{pointer-events:none;padding:3rem 12% 2rem 17%}.panel .content{color:#fff;transition:-webkit-transform .9s ease-in-out;transition:transform .9s ease-in-out;transition:transform .9s ease-in-out,-webkit-transform .9s ease-in-out;transition-delay:.6s}.panel h3{font-weight:600;line-height:1;font-size:1.5rem}.panel p{font-size:.95rem;padding:.7rem 0}.btn.transparent{margin:0;background:none;border:2px solid #fff;width:130px;height:41px;font-weight:600;font-size:.8rem}.right-panel .content,.right-panel .image{-webkit-transform:translateX(800px);transform:translateX(800px)}.container.sign-up-mode:before{-webkit-transform:translate(100%,-50%);transform:translate(100%,-50%);right:52%}.container.sign-up-mode .left-panel .content,.container.sign-up-mode .left-panel .image{-webkit-transform:translateX(-800px);transform:translateX(-800px)}.container.sign-up-mode .signin-signup{left:25%}.container.sign-up-mode form.sign-up-form{opacity:1;z-index:2}.container.sign-up-mode form.sign-in-form{opacity:0;z-index:1}.container.sign-up-mode .right-panel .content,.container.sign-up-mode .right-panel .image{-webkit-transform:translateX(0);transform:translateX(0)}.container.sign-up-mode .left-panel{pointer-events:none}.container.sign-up-mode .right-panel{pointer-events:all}@media (max-width:870px){.container{min-height:800px;height:100vh}.signin-signup{width:100%;top:95%;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%);transition:1s ease-in-out .8s}.container.sign-up-mode .signin-signup,.signin-signup{left:50%}.panels-container{grid-template-columns:1fr;grid-template-rows:1fr 2fr 1fr}.panel{flex-direction:row;justify-content:space-around;align-items:center;padding:2.5rem 8%;grid-column:1/2}.right-panel{grid-row:3/4}.left-panel{grid-row:1/2}.image{width:200px;transition:-webkit-transform .9s ease-in-out;transition:transform .9s ease-in-out;transition:transform .9s ease-in-out,-webkit-transform .9s ease-in-out;transition-delay:.6s}.panel .content{padding-right:15%;transition:-webkit-transform .9s ease-in-out;transition:transform .9s ease-in-out;transition:transform .9s ease-in-out,-webkit-transform .9s ease-in-out;transition-delay:.8s}.panel h3{font-size:1.2rem}.panel p{font-size:.7rem;padding:.5rem 0}.btn.transparent{width:110px;height:35px;font-size:.7rem}.container:before{width:1500px;height:1500px;-webkit-transform:translateX(-50%);transform:translateX(-50%);left:30%;bottom:68%;right:auto;top:auto;transition:2s ease-in-out}.container.sign-up-mode:before{-webkit-transform:translate(-50%,100%);transform:translate(-50%,100%);bottom:32%;right:auto}.container.sign-up-mode .left-panel .content,.container.sign-up-mode .left-panel .image{-webkit-transform:translateY(-300px);transform:translateY(-300px)}.container.sign-up-mode .right-panel .content,.container.sign-up-mode .right-panel .image{-webkit-transform:translateY(0);transform:translateY(0)}.right-panel .content,.right-panel .image{-webkit-transform:translateY(300px);transform:translateY(300px)}.container.sign-up-mode .signin-signup{top:5%;-webkit-transform:translate(-50%);transform:translate(-50%)}}@media (max-width:570px){form{padding:0 1.5rem}.image{display:none}.panel .content{padding:.5rem 1rem}.container{padding:1.5rem}.container:before{bottom:72%;left:50%}.container.sign-up-mode:before{bottom:28%;left:50%}}.gd-fs{border:1px solid #dadada;display:inline-block;margin:10px 12px;width:125px;overflow:hidden;padding:10px 20px;border-radius:5px;color:#5f6368}.gd-fs:hover{border:1px solid #201f21}.gd-fs-elm{text-decoration:none;color:#5f6368;margin-left:"10px"}.gd-fs-elm:hover{color:#201f21}.gd-fs-elm .tooltip{position:absolute;border-radius:6px;padding:0 5px;width:125px;font-size:10px;background:#fff;line-height:30px;text-align:center;box-shadow:0 5px 10px rgba(0,0,0,.2);transition:0s;opacity:0;pointer-events:none;margin:55px -135px}.gd-fs-elm.show .tooltip{display:none}.gd-fs-elm:hover .tooltip{opacity:1}.tx-bk{border-radius:10px;margin:20px 0 20px 15px;display:inline-block;height:220px;border:none;width:150px;overflow:hidden}.tx-bk-img{height:140px;margin-top:10px;border-radius:10px;display:flex;justify-content:center;width:auto}.book{background:#fff;border-radius:1rem;padding:1rem 2rem}.tx-bk p{color:#617d98;font-size:.7rem;margin-top:.25rem}.book p{margin-top:.5rem}.profile #log_out{position:absolute;bottom:5px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);min-width:50px;line-height:50px;font-size:20px;border-radius:12px;text-align:center;transition:all .4s ease;background:#1d1b31}.sidebar.active .profile #log_out{left:88%;background:none}.Loader_cardWrapper__3HzP7{display:flex;height:100vh;flex-direction:column;justify-content:center;font-weight:700;align-items:center;font-size:22px}.Loader_image__1A2LL{height:13rem;margin-bottom:2rem}.Loader_spinner__3PbFL{margin-top:2rem;-webkit-animation:Loader_spin__2OIhV 1s ease-in-out infinite;animation:Loader_spin__2OIhV 1s ease-in-out infinite}@-webkit-keyframes Loader_spin__2OIhV{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes Loader_spin__2OIhV{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}} -/*# sourceMappingURL=main.b23f180e.chunk.css.map */ \ No newline at end of file diff --git a/frontend/build/static/css/main.b23f180e.chunk.css.map b/frontend/build/static/css/main.b23f180e.chunk.css.map deleted file mode 100644 index 3bb569ca..00000000 --- a/frontend/build/static/css/main.b23f180e.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://src/App.css","webpack://src/Components/Loader/Loader.module.css"],"names":[],"mappings":"AACA,MACE,gBAAiB,CACjB,qBAAsB,CACtB,2BAA4B,CAC5B,qBAAsB,CACtB,uBAAwB,CACxB,aACF,CAEA,EACE,qBAAsB,CACtB,SAAU,CACV,QACF,CAEA,KACE,iBAAkB,CAClB,cAAkC,CAAlC,iCAAkC,CAClC,+BACF,CAEA,iBACE,YAAa,CACb,YAAa,CACb,kBAAmB,CAInB,qBAAsB,CACtB,sBACF,CAEA,WACE,YAAa,CACb,kBAAmB,CACnB,wBAA0C,CAA1C,yCACF,CAEA,wBACE,WAAY,CACZ,wBAAoC,CAApC,mCAAoC,CACpC,cAAe,CAEf,kBAAmB,CAGnB,iBACF,CAUA,UACE,cAAe,CACf,KAAM,CACN,SAAU,CACV,UAAuB,CAAvB,sBAAuB,CACvB,YAAa,CACb,wBAAoC,CAApC,mCAAoC,CACpC,uBAAwB,CACxB,WAAuB,CAAvB,sBACF,CAEA,8BACE,UAAW,CACX,YAAa,CACb,WAAY,CACZ,UAAW,CACX,kBAAmB,CACnB,SAAU,CACV,mBAAoB,CACpB,uBACF,CAEA,mCACE,SAAU,CACV,mBAAoB,CACpB,UACF,CAEA,sBACE,cAAe,CACf,gBACF,CAEA,+BACE,cAAe,CACf,eAAgB,CAChB,cACF,CAEA,gBACE,gBAAiB,CACjB,gBACF,CAEA,eACE,iBAAkB,CAClB,UAAW,CACX,cAAe,CACf,OAAQ,CACR,QAAS,CACT,cAAe,CACf,WAAY,CACZ,UAAW,CACX,iBAAkB,CAClB,gBAAiB,CACjB,kCAA2B,CAA3B,0BACF,CAEA,eACE,SACF,CAEA,oBACE,QACF,CAEA,aACE,eACF,CAEA,gBACE,iBAAkB,CAClB,UAAW,CACX,YAAa,CACb,eAAgB,CAChB,gBACF,CAEA,mBACE,iBAAkB,CAClB,UAAW,CACX,KAAM,CACN,sCAAiC,CAAjC,8BAAiC,CACjC,iBAAkB,CAClB,WAAY,CACZ,WAAY,CACZ,eAAgB,CAChB,gBAAiB,CACjB,iBAAkB,CAClB,oCAAyC,CACzC,aAAc,CACd,SAAU,CACV,mBAAoB,CACpB,aACF,CAEA,wBACE,YACF,CAcA,2DACE,uBAAyB,CACzB,SAAU,CACV,OACF,CAEA,oBACE,UAAW,CACX,YAAa,CACb,kBAAmB,CACnB,oBAAqB,CACrB,kBAAmB,CACnB,kBAAmB,CACnB,uBACF,CAEA,YACE,cAAe,CACf,eAAgB,CAChB,WAAY,CACZ,cAAe,CACf,gBAAiB,CACjB,iBACF,CAEA,oBACE,cAAe,CACf,eAAgB,CAChB,SAAU,CACV,mBAAoB,CACpB,uBACF,CAEA,yBACE,aAAc,CACd,SAAU,CACV,mBACF,CAEA,eACE,aAAyB,CAAzB,wBAAyB,CACzB,WACF,CAEA,aACE,YAAa,CAEb,cACF,CAEA,mBACE,cAAe,CACf,yBAA0B,CAC1B,UAAW,CACX,eAEF,CAEA,eACE,UAAW,CACX,iBAAkB,CAClB,MAAO,CACP,SAAU,CACV,WAAY,CACZ,wBAAoC,CAApC,mCACF,CAEA,oCAME,QACE,wCAAyC,CACzC,kCAA+C,CAA/C,8CACF,CAEA,YACE,UAAW,CACX,WACF,CAEA,gBACE,UACF,CAEA,UACE,MAAO,CACP,qBACF,CAGA,MACE,WAAqC,CAArC,oCACF,CAGA,SACE,kBAA4C,CAA5C,2CACF,CACF,CAKA,QACE,YAAa,CACb,sBAAuB,CACvB,kBACF,CAMA,KACE,WAAY,CACZ,YAAa,CACb,uCAA4C,CAC5C,kBAAmB,CACnB,qBAAsB,CACtB,iDAAkE,CAAlE,4DAAkE,CAClE,UAAY,CACZ,iBAAkB,CAClB,eAAgB,CAChB,UACF,CAEA,SACE,UAAW,CACX,WAAY,CACZ,kBACF,CAEA,aACE,mBAAoB,CACpB,cAAe,CACf,iBAAkB,CAClB,gBACF,CAEA,oBACE,cAAe,CACf,eAAiB,CACjB,iBACF,CAEA,uBACE,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,eAAiB,CACjB,QAAS,CACT,OAAQ,CACR,2BAA4B,CAC5B,aAAsB,CACtB,gBAAiB,CACjB,cAAe,CACf,kBACF,CAEA,iBACE,+BAAwB,CAAxB,uBACF,CAEA,YACE,oCAA8B,CAA9B,4BACF,CAEA,gBACE,iBAAkB,CAClB,kBAAmB,CACnB,UAAW,CACX,WAAY,CACZ,kBAAmB,CACnB,qBAAsB,CACtB,kBACF,CAEA,KACE,oDAA8C,CAA9C,4CACF,CAEA,IACE,wCAAiC,CAAjC,gCACF,CAEA,kBACE,kBAAmB,CACnB,gBACF,CAEA,uBACE,gBAAiB,CACjB,eACF,CAEA,yBACE,aAAc,CACd,cAAe,CACf,iBAAkB,CAClB,kBACF,CAEA,+BACE,aACF,CAMA,sBACE,YACF,CAEA,oCACE,UACE,MACF,CACA,mBACE,iBAA8B,CAA9B,6BACF,CACF,CAEA,oCACE,YACE,YAAa,CACb,aAAgB,CAChB,WAAY,CACZ,kBAAmB,CACnB,+BAA6C,CAA7C,0CACF,CACA,UACE,wBAAoC,CAApC,mCAAoC,CACpC,WAAY,CACZ,YAAa,CACb,YAAa,CACb,sBAAuB,CACvB,cAAe,CACf,KAAM,CACN,SAAU,CACV,UAAW,CACX,eACF,CAEA,iBACE,MAAO,CACP,WAAY,CACZ,eACF,CACA,gBACE,UACF,CACA,eACE,wBAAoC,CAApC,mCAAoC,CACpC,UAAW,CACX,WAAY,CACZ,cAAe,CACf,YAAa,CACb,0BAA2B,CAC3B,kBACF,CACA,oBACE,eAAgB,CAChB,cAAe,CACf,cACF,CACA,oBACE,YAAa,CACb,iBAAkB,CAClB,qBAAsB,CACtB,kBACF,CACA,UACE,oBAAqB,CACrB,UACF,CACF,CAIA,WAEE,gCACF,CAEA,WACE,iBAAkB,CAClB,UAAW,CACX,qBAAsB,CACtB,gBAAiB,CACjB,eACF,CAEA,iBACE,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,KAAM,CACN,MACF,CAEA,eACE,iBAAkB,CAClB,OAAQ,CACR,sCAAgC,CAAhC,8BAAgC,CAChC,QAAS,CACT,SAAU,CACV,6BAA+B,CAC/B,YAAa,CACb,yBAA0B,CAC1B,SACF,CAEA,KACE,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,qBAAsB,CACtB,cAAkB,CAClB,sBAAyB,CACzB,eAAgB,CAChB,eAAkB,CAClB,YACF,CAEA,kBACE,SAAU,CACV,SACF,CAEA,kBACE,SACF,CAEA,OACE,gBAAiB,CACjB,UAAW,CACX,kBACF,CAEA,aACE,eAAgB,CAChB,UAAW,CACX,wBAAyB,CACzB,aAAc,CACd,WAAY,CACZ,kBAAmB,CACnB,YAAa,CACb,6BAA8B,CAC9B,eAAiB,CACjB,iBACF,CAEA,eACE,iBAAkB,CAClB,gBAAiB,CACjB,aAAc,CACd,cAAgB,CAChB,gBACF,CAEA,mBACE,eAAgB,CAChB,YAAa,CACb,WAAY,CACZ,aAAc,CACd,eAAgB,CAChB,gBAAiB,CACjB,UACF,CAEA,8CACE,UAAW,CACX,eACF,CAHA,yCACE,UAAW,CACX,eACF,CAHA,gCACE,UAAW,CACX,eACF,CAEA,aACE,eAAiB,CACjB,cACF,CAEA,cACE,YAAa,CAEb,kBACF,CAEA,aACE,UAAW,CACX,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,cAAe,CACf,cACF,CAEA,KACE,WAAY,CACZ,wBAAoC,CAApC,mCAAoC,CACpC,WAAY,CACZ,YAAa,CACb,WAAY,CACZ,kBAAmB,CACnB,UAAW,CACX,wBAAyB,CACzB,eAAgB,CAChB,aAAc,CACd,cAAe,CACf,cACF,CAEA,kBACE,iBAAkB,CAClB,WAAY,CACZ,UAAW,CACX,KAAM,CACN,MAAO,CACP,YAAa,CACb,mCACF,CAEA,kBACE,UAAW,CACX,iBAAkB,CAClB,aAAc,CACd,YAAa,CACb,QAAS,CACT,SAAU,CACV,kCAA2B,CAA3B,0BAA2B,CAC3B,wDAA8E,CAA9E,mEAA8E,CAC9E,2BAA4B,CAC5B,iBAAkB,CAClB,SACF,CAEA,OACE,UAAW,CACX,6CAAsC,CAAtC,qCAAsC,CAAtC,wEAAsC,CACtC,oBACF,CAEA,OACE,YAAa,CACb,qBAAsB,CACtB,oBAAqB,CACrB,4BAA6B,CAC7B,iBAAkB,CAClB,SACF,CAEA,YACE,kBAAmB,CACnB,yBACF,CAEA,aACE,mBAAoB,CACpB,yBACF,CAEA,gBACE,UAAW,CACX,4CAAsC,CAAtC,oCAAsC,CAAtC,sEAAsC,CACtC,oBACF,CAEA,UACE,eAAgB,CAChB,aAAc,CACd,gBACF,CAEA,SACE,gBAAkB,CAClB,eACF,CAEA,iBACE,QAAS,CACT,eAAgB,CAChB,qBAAsB,CACtB,WAAY,CACZ,WAAY,CACZ,eAAgB,CAChB,eACF,CAEA,0CAEE,mCAA4B,CAA5B,2BACF,CAIA,+BACE,sCAAgC,CAAhC,8BAAgC,CAChC,SACF,CAEA,wFAEE,oCAA6B,CAA7B,4BACF,CAEA,uCACE,QACF,CAEA,0CACE,SAAU,CACV,SACF,CAEA,0CACE,SAAU,CACV,SACF,CAEA,0FAEE,+BAAyB,CAAzB,uBACF,CAEA,oCACE,mBACF,CAEA,qCACE,kBACF,CAEA,yBACE,WACE,gBAAiB,CACjB,YACF,CACA,eACE,UAAW,CACX,OAAQ,CACR,uCAAiC,CAAjC,+BAAiC,CACjC,6BACF,CAEA,sDAEE,QACF,CAEA,kBACE,yBAA0B,CAC1B,8BACF,CAEA,OACE,kBAAmB,CACnB,4BAA6B,CAC7B,kBAAmB,CACnB,iBAAkB,CAClB,eACF,CAEA,aACE,YACF,CAEA,YACE,YACF,CAEA,OACE,WAAY,CACZ,4CAAsC,CAAtC,oCAAsC,CAAtC,sEAAsC,CACtC,oBACF,CAEA,gBACE,iBAAkB,CAClB,4CAAsC,CAAtC,oCAAsC,CAAtC,sEAAsC,CACtC,oBACF,CAEA,UACE,gBACF,CAEA,SACE,eAAiB,CACjB,eACF,CAEA,iBACE,WAAY,CACZ,WAAY,CACZ,eACF,CAEA,kBACE,YAAa,CACb,aAAc,CACd,kCAA2B,CAA3B,0BAA2B,CAC3B,QAAS,CACT,UAAW,CACX,UAAc,CACd,QAAY,CACZ,yBACF,CAEA,+BACE,sCAAgC,CAAhC,8BAAgC,CAChC,UAAW,CACX,UACF,CAEA,wFAEE,oCAA6B,CAA7B,4BACF,CAEA,0FAEE,+BAA0B,CAA1B,uBACF,CAEA,0CAEE,mCAA4B,CAA5B,2BACF,CAEA,uCACE,MAAO,CACP,iCAA6B,CAA7B,yBACF,CACF,CAEA,yBACE,KACE,gBACF,CAEA,OACE,YACF,CACA,gBACE,kBACF,CACA,WACE,cACF,CAEA,kBACE,UAAW,CACX,QACF,CAEA,+BACE,UAAW,CACX,QACF,CACF,CAEA,OACA,wBAAoC,CACpC,oBAAqB,CACrB,gBAAiB,CACjB,WAAW,CACX,eAAgB,CAChB,iBAAkB,CAClB,iBAAkB,CAClB,aACA,CAEA,aACE,wBACF,CAEA,WACE,oBAAqB,CACrB,aAAc,CACd,kBACF,CAEA,iBACE,aACF,CAEA,oBACE,iBAAkB,CAClB,iBAAkB,CAClB,aAAc,CACd,WAAY,CACZ,cAAe,CACf,eAAgB,CAChB,gBAAiB,CACjB,iBAAkB,CAClB,oCAAyC,CACzC,aAAc,CACd,SAAU,CACV,mBAAoB,CACpB,kBACF,CAEA,yBACE,YACF,CAEA,0BACE,SACF,CAGA,OACE,kBAAmB,CACnB,uBAAwB,CACxB,oBAAqB,CACrB,YAAa,CACb,WAAY,CAEZ,WAAY,CACZ,eACF,CAMA,WACE,YAAa,CACb,eAAgB,CAChB,kBAAmB,CACnB,YAAa,CACb,sBAAuB,CACvB,UACF,CAEA,MACE,eAAgB,CAChB,kBAAmB,CACnB,iBACF,CAEA,SACE,aAAc,CACd,eAAiB,CACjB,iBACF,CACA,QACE,gBACF,CAIA,kBACE,iBAAkB,CAClB,UAAW,CACX,QAAS,CACT,kCAA2B,CAA3B,0BAA2B,CAC3B,cAAe,CACf,gBAAiB,CACjB,cAAe,CACf,kBAAmB,CACnB,iBAAkB,CAClB,uBAAyB,CACzB,kBACF,CACA,kCACE,QAAS,CAGT,eAFF,CC56BA,2BACI,YAAa,CACb,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CACvB,eAAiB,CACjB,kBAAmB,CACnB,cACJ,CAEA,qBACI,YAAa,CACb,kBACJ,CAEA,uBACI,eAAgB,CAChB,4DAAuC,CAAvC,oDACJ,CAEA,sCACI,GACI,+BAAyB,CAAzB,uBACJ,CACJ,CAJA,8BACI,GACI,+BAAyB,CAAzB,uBACJ,CACJ","file":"main.b23f180e.chunk.css","sourcesContent":["\n:root{\n --nav-width: 68px;\n --first-color: #4723D9;\n --first-color-light: #AFA5D9;\n --white-color: #F7F6FB;\n --normal-font-size: 1rem;\n --z-fixed: 100;\n}\n\n*{\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n}\n\nbody{\n position: relative;\n font-size: var(--normal-font-size);\n font-family: 'Nunito', sans-serif;\n}\n\n.login_container{\n display: flex;\n height: 100vh;\n align-items: center;\n -webkit-background-size: cover;\n -o-background-size: cover;\n -moz-background-size: cover;\n background-size: cover;\n justify-content: center;\n}\n\n.login_box{\n padding: 50px;\n border-radius: 25px;\n background-color: var(--first-color-light);\n}\n\n.login_container button{\n border: none;\n background-color: var(--white-color);\n cursor: pointer;\n padding-top: 10px;\n border-radius: 25px;\n padding-bottom: 10px;\n padding-right: 20px;\n padding-left: 20px;\n}\n\n/* .home_screen{ */\n /* height: 100vh; */\n /* width: 100%; */\n /* display: flex; */\n /* align-items: center; */\n /* justify-content: center; */\n/* } */\n\n.l_navbar{\n position: fixed;\n top: 0;\n left: -30%;\n width: var(--nav-width);\n height: 100vh;\n background-color: var(--first-color);\n transition: all .5s ease;\n z-index: var(--z-fixed);\n}\n\n.l_navbar .logo_content .logo{\n color: #fff;\n display: flex;\n height: 50px;\n width: 100%;\n align-items: center;\n opacity: 0;\n pointer-events: none;\n transition: all 0.5s ease;\n}\n\n.l_navbar.show .logo_content .logo{\n opacity: 1;\n pointer-events: none;\n width: auto;\n}\n\n.logo_content .logo i{\n font-size: 28px;\n margin-right: 5px;\n}\n\n.logo_content .logo .logo_name{\n font-size: 20px;\n font-weight: 400;\n cursor: pointer;\n}\n\n.l_navbar .logo{\n padding-top: 10px;\n padding-left: 6px;\n}\n\n.l_navbar #btn{\n position: absolute;\n color: #fff;\n cursor: pointer;\n top: 6px;\n left: 50%;\n font-size: 22px;\n height: 50px;\n width: 50px;\n text-align: center;\n line-height: 50px;\n transform: translateX(-50%);\n}\n\n.l_navbar.show{\n width: 15%;\n}\n\n.l_navbar.show #btn{\n left: 90%;\n}\n\n.l_navbar ul{\n margin-top: 20px;\n}\n\n.l_navbar ul li{\n position: relative;\n width: 100%;\n margin: 0 5px;\n list-style: none;\n line-height: 50px;\n}\n\n.l_navbar .tooltip{\n position: absolute;\n left: 150px;\n top: 0;\n transform: translate(-50% , -50%);\n border-radius: 6px;\n height: 35px;\n width: 150px;\n background: #fff;\n line-height: 35px;\n text-align: center;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n transition: 0s;\n opacity: 0;\n pointer-events: none;\n display: block;\n}\n\n.l_navbar.show .tooltip{\n display: none;\n}\n\n.l_navbar ul li:hover .tooltip{\n transition: all 0.5s ease;\n opacity: 1;\n top: 50%;\n}\n\n.log-out-btn:hover .tooltip{\n transition: all 0.5s ease;\n opacity: 1;\n top: 50%;\n}\n\n.log-out-btn:hover .tooltip{\n transition: all 0.5s ease;\n opacity: 1;\n top: 50%;\n}\n\n.l_navbar .nav_link{\n color: #fff;\n display: flex;\n align-items: center;\n text-decoration: none;\n border-radius: 12px;\n white-space: nowrap;\n transition: all 0.4s ease;\n}\n\n.l_navbar i{\n font-size: 18px;\n font-weight: 400;\n height: 50px;\n min-width: 50px;\n line-height: 50px;\n text-align: center;\n}\n\n.l_navbar .nav_name{\n font-size: 15px;\n font-weight: 400;\n opacity: 0;\n pointer-events: none;\n transition: all 0.3s ease;\n}\n\n.l_navbar.show .nav_name{\n transition: 0s;\n opacity: 1;\n pointer-events: auto;\n}\n\n.l_navbar.show{\n color: var(--white-color);\n width: 240px;\n}\n\n.log-out-btn {\n display: flex;\n\n cursor: pointer;\n}\n\n.main_content_body{\n padding-left: 0;\n height: calc(100vh - 25px);\n width: 100%;\n margin-top: 25px;\n /* display: flex; */\n}\n\n.active::before{\n content: '';\n position: absolute;\n left: 0;\n width: 2px;\n height: 32px;\n background-color: var(--white-color);\n}\n\n@media screen and (min-width: 768px){\n /* body{\n margin: calc(var(--header-height) + 1rem) 0 0 0;\n padding-left: calc(var(--nav-width) + 2rem);\n } */\n\n .header{\n height: calc(var(--header-height) + 1rem);\n padding: 0 2rem 0 calc(var(--nav-width) + 2rem);\n }\n\n .header_img{\n width: 40px;\n height: 40px;\n }\n\n .header_img img{\n width: 45px;\n }\n\n .l-navbar{\n left: 0;\n padding: 1rem 1rem 0 0;\n }\n \n /*Show navbar desktop*/\n .show{\n width: calc(var(--nav-width) + 156px);\n }\n\n /*Add padding body desktop*/\n .body-pd{\n padding-left: calc(var(--nav-width) + 188px);\n }\n}\n\n\n\n/* CARD CSS */\n.center{\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n/* .main{ */\n /* height: 100vh; */\n/* } */\n\n.box{\n width: 200px;\n height: 200px;\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.288);\n border-radius: 23px;\n flex-direction: column;\n background: linear-gradient(to right, var(--first-color), #4223bd);\n color: white;\n position: relative;\n overflow: hidden;\n margin: 5px 5px 5px 5px;\n}\n\n.box img{\n width: 75px;\n height: 75px;\n border-radius: 50px;\n}\n\n.person_name{\n margin-bottom: 2.5px;\n font-size: 1rem;\n text-align: center;\n margin-top: 9.5px;\n}\n\n.person_designation{\n margin-top: 8px;\n font-size: 0.7rem;\n text-align: center;\n}\n\n.arr_container, .cancel{\n position: absolute;\n width: 40px;\n height: 40px;\n background: white;\n bottom: 0;\n right: 0;\n border-radius: 23px 0 23px 0;\n color: rgb(70, 70, 70);\n font-size: 1.6rem;\n cursor: pointer;\n transition: all .4s;\n}\n\n.arr_container i{\n transform: rotate(45deg);\n}\n\n.active_arr{\n transform: translate(80%, 80%);\n}\n\n.left_container{\n position: absolute;\n background: #0f2027;\n width: 100%;\n height: 100%;\n border-radius: 23px;\n padding: 40px 0 0 20px;\n transition: all .4s;\n}\n\n.off{\n transform: translate(-80%, -80%) rotate(90deg);\n}\n\n.on{\n transform: translate(0) rotate(0);\n}\n\n.left_container p{\n margin-bottom: 15px;\n font-size: 1.2rem;\n}\n\n.left_container .icons{\n font-size: 1.6rem;\n margin-top: 10px;\n}\n\n.left_container .icons i{\n color: #cfcfcf;\n cursor: pointer;\n margin-right: 10px;\n transition: all .4s;\n}\n\n.left_container .icons i:hover{\n color: #2c5364;\n}\n\n.top-navbar{\n display: none;\n}\n\n.nav-menu{\n display: none;\n}\n\n@media screen and (min-width: 440px){\n .l_navbar{\n left: 0;\n }\n .main_content_body{\n padding-left: var(--nav-width);\n }\n}\n\n@media screen and (max-width: 440px) {\n .top-navbar{\n display: flex;\n margin-left: 0px;\n height: 60px;\n align-items: center;\n box-shadow: 0px -15px 33px var(--first-color);\n }\n .nav-menu {\n background-color: var(--first-color);\n width: 250px;\n height: 100vh;\n display: flex;\n justify-content: center;\n position: fixed;\n top: 0;\n z-index: 1;\n left: -100%;\n transition: 850ms;\n }\n \n .nav-menu.active {\n left: 0;\n width: 100vw;\n transition: 350ms;\n }\n .nav-menu-items {\n width: 100%;\n }\n .navbar-toggle {\n background-color: var(--first-color);\n width: 100%;\n height: 60px;\n font-size: 50px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n }\n .category-list-item{\n list-style: none;\n font-size: 23px;\n padding: 15px 0;\n }\n .news_category_list{\n display: flex;\n overflow-x: hidden;\n flex-direction: column;\n align-items: center;\n }\n .nav_link{\n text-decoration: none;\n color: white;\n }\n}\n\n\n/* login */\nbody,\ninput {\n font-family: \"Poppins\", sans-serif;\n}\n\n.container {\n position: relative;\n width: 100%;\n background-color: #fff;\n min-height: 100vh;\n overflow: hidden;\n}\n\n.forms-container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n\n.signin-signup {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n left: 75%;\n width: 50%;\n transition: 1s 0.7s ease-in-out;\n display: grid;\n grid-template-columns: 1fr;\n z-index: 5;\n}\n\nform {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n padding: 0rem 5rem;\n transition: all 0.2s 0.7s;\n overflow: hidden;\n grid-column: 1 / 2;\n grid-row: 1 / 2;\n}\n\nform.sign-up-form {\n opacity: 0;\n z-index: 1;\n}\n\nform.sign-in-form {\n z-index: 2;\n}\n\n.title {\n font-size: 2.2rem;\n color: #444;\n margin-bottom: 10px;\n}\n\n.input-field {\n max-width: 380px;\n width: 100%;\n background-color: #f0f0f0;\n margin: 10px 0;\n height: 55px;\n border-radius: 55px;\n display: grid;\n grid-template-columns: 15% 85%;\n padding: 0 0.4rem;\n position: relative;\n}\n\n.input-field i {\n text-align: center;\n line-height: 55px;\n color: #acacac;\n transition: 0.5s;\n font-size: 1.1rem;\n}\n\n.input-field input {\n background: none;\n outline: none;\n border: none;\n line-height: 1;\n font-weight: 600;\n font-size: 1.1rem;\n color: #333;\n}\n\n.input-field input::placeholder {\n color: #aaa;\n font-weight: 500;\n}\n\n.social-text {\n padding: 0.7rem 0;\n font-size: 1rem;\n}\n\n.social-media {\n display: flex;\n /* justify-content: center; */\n flex-direction: row;\n}\n\n.social-icon {\n width: 50px;\n height: 50px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 35px;\n}\n\n.btn {\n width: 150px;\n background-color: var(--first-color);\n border: none;\n outline: none;\n height: 49px;\n border-radius: 49px;\n color: #fff;\n text-transform: uppercase;\n font-weight: 600;\n margin: 10px 0;\n cursor: pointer;\n transition: 0.5s;\n}\n\n.panels-container {\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n left: 0;\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n}\n\n.container:before {\n content: \"\";\n position: absolute;\n height: 2000px;\n width: 2000px;\n top: -10%;\n right: 48%;\n transform: translateY(-50%);\n background-image: linear-gradient(-45deg, var(--first-color) 0%, #3c19ca 100%);\n transition: 1.8s ease-in-out;\n border-radius: 50%;\n z-index: 6;\n}\n\n.image {\n width: 100%;\n transition: transform 1.1s ease-in-out;\n transition-delay: 0.4s;\n}\n\n.panel {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: space-around;\n text-align: center;\n z-index: 6;\n}\n\n.left-panel {\n pointer-events: all;\n padding: 3rem 17% 2rem 12%;\n}\n\n.right-panel {\n pointer-events: none;\n padding: 3rem 12% 2rem 17%;\n}\n\n.panel .content {\n color: #fff;\n transition: transform 0.9s ease-in-out;\n transition-delay: 0.6s;\n}\n\n.panel h3 {\n font-weight: 600;\n line-height: 1;\n font-size: 1.5rem;\n}\n\n.panel p {\n font-size: 0.95rem;\n padding: 0.7rem 0;\n}\n\n.btn.transparent {\n margin: 0;\n background: none;\n border: 2px solid #fff;\n width: 130px;\n height: 41px;\n font-weight: 600;\n font-size: 0.8rem;\n}\n\n.right-panel .image,\n.right-panel .content {\n transform: translateX(800px);\n}\n\n/* ANIMATION */\n\n.container.sign-up-mode:before {\n transform: translate(100%, -50%);\n right: 52%;\n}\n\n.container.sign-up-mode .left-panel .image,\n.container.sign-up-mode .left-panel .content {\n transform: translateX(-800px);\n}\n\n.container.sign-up-mode .signin-signup {\n left: 25%;\n}\n\n.container.sign-up-mode form.sign-up-form {\n opacity: 1;\n z-index: 2;\n}\n\n.container.sign-up-mode form.sign-in-form {\n opacity: 0;\n z-index: 1;\n}\n\n.container.sign-up-mode .right-panel .image,\n.container.sign-up-mode .right-panel .content {\n transform: translateX(0%);\n}\n\n.container.sign-up-mode .left-panel {\n pointer-events: none;\n}\n\n.container.sign-up-mode .right-panel {\n pointer-events: all;\n}\n\n@media (max-width: 870px) {\n .container {\n min-height: 800px;\n height: 100vh;\n }\n .signin-signup {\n width: 100%;\n top: 95%;\n transform: translate(-50%, -100%);\n transition: 1s 0.8s ease-in-out;\n }\n\n .signin-signup,\n .container.sign-up-mode .signin-signup {\n left: 50%;\n }\n\n .panels-container {\n grid-template-columns: 1fr;\n grid-template-rows: 1fr 2fr 1fr;\n }\n\n .panel {\n flex-direction: row;\n justify-content: space-around;\n align-items: center;\n padding: 2.5rem 8%;\n grid-column: 1 / 2;\n }\n\n .right-panel {\n grid-row: 3 / 4;\n }\n\n .left-panel {\n grid-row: 1 / 2;\n }\n\n .image {\n width: 200px;\n transition: transform 0.9s ease-in-out;\n transition-delay: 0.6s;\n }\n\n .panel .content {\n padding-right: 15%;\n transition: transform 0.9s ease-in-out;\n transition-delay: 0.8s;\n }\n\n .panel h3 {\n font-size: 1.2rem;\n }\n\n .panel p {\n font-size: 0.7rem;\n padding: 0.5rem 0;\n }\n\n .btn.transparent {\n width: 110px;\n height: 35px;\n font-size: 0.7rem;\n }\n\n .container:before {\n width: 1500px;\n height: 1500px;\n transform: translateX(-50%);\n left: 30%;\n bottom: 68%;\n right: initial;\n top: initial;\n transition: 2s ease-in-out;\n }\n\n .container.sign-up-mode:before {\n transform: translate(-50%, 100%);\n bottom: 32%;\n right: initial;\n }\n\n .container.sign-up-mode .left-panel .image,\n .container.sign-up-mode .left-panel .content {\n transform: translateY(-300px);\n }\n\n .container.sign-up-mode .right-panel .image,\n .container.sign-up-mode .right-panel .content {\n transform: translateY(0px);\n }\n\n .right-panel .image,\n .right-panel .content {\n transform: translateY(300px);\n }\n\n .container.sign-up-mode .signin-signup {\n top: 5%;\n transform: translate(-50%, 0);\n }\n}\n\n@media (max-width: 570px) {\n form {\n padding: 0 1.5rem;\n }\n\n .image {\n display: none;\n }\n .panel .content {\n padding: 0.5rem 1rem;\n }\n .container {\n padding: 1.5rem;\n }\n\n .container:before {\n bottom: 72%;\n left: 50%;\n }\n\n .container.sign-up-mode:before {\n bottom: 28%;\n left: 50%;\n }\n}\n\n.gd-fs {\nborder: 1px solid rgb(218, 218, 218);\ndisplay: inline-block;\nmargin: 10px 12px;\nwidth:125px;\noverflow: hidden;\npadding: 10px 20px;\nborder-radius: 5px;\ncolor: #5f6368;\n}\n\n.gd-fs:hover {\n border: 1px solid rgb(32,31,33);\n}\n\n.gd-fs-elm{\n text-decoration: none;\n color: #5f6368;\n margin-left: \"10px\";\n}\n\n.gd-fs-elm:hover {\n color : rgb(32,31,33);\n}\n\n.gd-fs-elm .tooltip{\n position: absolute;\n border-radius: 6px;\n padding: 0 5px;\n width: 125px;\n font-size: 10px;\n background: #fff;\n line-height: 30px;\n text-align: center;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n transition: 0s;\n opacity: 0;\n pointer-events: none;\n margin: 55px -135px;\n}\n\n.gd-fs-elm.show .tooltip{\n display: none;\n}\n\n.gd-fs-elm:hover .tooltip{\n opacity: 1;\n}\n\n/* '#696371 */\n.tx-bk {\n border-radius: 10px;\n margin: 20px 0 20px 15px;\n display: inline-block;\n height: 220px;\n border: none;\n /* border: 1px solid rgb(218, 218, 218); */\n width: 150px;\n overflow: hidden;\n}\n\n/* .tx-bk:hover {\n border: 1px solid rgb(218, 218, 218);\n} */\n\n.tx-bk-img{\n height: 140px;\n margin-top: 10px;\n border-radius: 10px;\n display: flex;\n justify-content: center;\n width: auto;\n}\n\n.book {\n background: #fff;\n border-radius: 1rem;\n padding: 1rem 2rem;\n}\n\n.tx-bk p {\n color: #617d98;\n font-size: 0.7rem;\n margin-top: 0.25rem;\n}\n.book p {\n margin-top: 0.5rem;\n}\n\n\n\n.profile #log_out{\n position: absolute;\n bottom: 5px;\n left: 50%;\n transform: translateX(-50%);\n min-width: 50px;\n line-height: 50px;\n font-size: 20px;\n border-radius: 12px;\n text-align: center;\n transition: all 0.4s ease;\n background: #1d1b31;\n}\n.sidebar.active .profile #log_out{\n left: 88%;\n}\n.sidebar.active .profile #log_out{\n background: none\n}\n\n/* \n.sidebar .profile_content{\n position: absolute;\n color: #fff;\n bottom: 0;\n left: 0;\n width: 100%;\n}\n.sidebar .profile_content .profile{\n position: relative;\n padding: 10px 6px;\n height: 60px;\n background: none;\n transition: all 0.4s ease;\n}\n.sidebar.active .profile_content .profile{\n background: #1d1b31;\n}\n.profile_content .profile .profile_details{\n display: flex;\n align-items: center;\n opacity: 0;\n pointer-events: none;\n white-space: nowrap;\n transition: all 0.4s ease;\n}\n.sidebar.active ~ .profile .profile_details{\n opacity: 1;\n pointer-events: auto;\n}\n.profile .profile_details img{\n height: 45px;\n width: 45px;\n object-fit: cover;\n border-radius: 12px;\n}\n.profile .profile_details .name_job{\n margin-left: 10px;\n}\n.profile .profile_details .name{\n font-size: 15px;\n font-weight: 400;\n}\n.profile .profile_details .job{\n font-size: 12px;\n} */",".cardWrapper {\n display: flex;\n height: 100vh;\n flex-direction: column;\n justify-content: center;\n font-weight: bold;\n align-items: center;\n font-size: 22px;\n}\n\n.image {\n height: 13rem;\n margin-bottom: 2rem;\n}\n\n.spinner {\n margin-top: 2rem;\n animation: spin 1s ease-in-out infinite;\n}\n\n@keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n}"]} \ No newline at end of file diff --git a/frontend/build/static/favicon.ico b/frontend/build/static/favicon.ico deleted file mode 100644 index bcc1c72e..00000000 Binary files a/frontend/build/static/favicon.ico and /dev/null differ diff --git a/frontend/build/static/js/2.d2fc931c.chunk.js b/frontend/build/static/js/2.d2fc931c.chunk.js deleted file mode 100644 index 6ba6f6f7..00000000 --- a/frontend/build/static/js/2.d2fc931c.chunk.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 2.d2fc931c.chunk.js.LICENSE.txt */ -(this.webpackJsonpedtech=this.webpackJsonpedtech||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(86)},function(e,t,n){"use strict";e.exports=n(45)},function(e,t,n){e.exports=n(67)},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(17);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function F(e,t){return e===t}function z(e){var t=void 0===e?{}:e,n=t.connectHOC,r=void 0===n?S:n,o=t.mapStateToPropsFactories,a=void 0===o?R:o,i=t.mapDispatchToPropsFactories,u=void 0===i?T:i,l=t.mergePropsFactories,s=void 0===l?L:l,c=t.selectorFactory,f=void 0===c?A:c;return function(e,t,n,o){void 0===o&&(o={});var i=o,l=i.pure,c=void 0===l||l,h=i.areStatesEqual,v=void 0===h?F:h,m=i.areOwnPropsEqual,y=void 0===m?C:m,g=i.areStatePropsEqual,b=void 0===g?C:g,w=i.areMergedPropsEqual,O=void 0===w?C:w,x=Object(p.a)(i,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),k=D(e,a,"mapStateToProps"),S=D(t,u,"mapDispatchToProps"),E=D(n,s,"mergeProps");return r(f,Object(d.a)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:k,initMapDispatchToProps:S,initMergeProps:E,pure:c,areStatesEqual:v,areOwnPropsEqual:y,areStatePropsEqual:b,areMergedPropsEqual:O},x))}}var V=z();function U(){return Object(r.useContext)(a)}var H=function(e,t){return e===t};function B(e){void 0===e&&(e=a);var t=e===a?U:function(){return Object(r.useContext)(e)};return function(e,n){void 0===n&&(n=H);var o=t(),a=function(e,t,n,o){var a,i=Object(r.useReducer)((function(e){return e+1}),0)[1],u=Object(r.useMemo)((function(){return new s(n,o)}),[n,o]),l=Object(r.useRef)(),f=Object(r.useRef)(),d=Object(r.useRef)(),p=Object(r.useRef)(),h=n.getState();try{if(e!==f.current||h!==d.current||l.current){var v=e(h);a=void 0!==p.current&&t(v,p.current)?p.current:v}else a=p.current}catch(m){throw l.current&&(m.message+="\nThe error may be correlated with this previous error:\n"+l.current.stack+"\n\n"),m}return c((function(){f.current=e,d.current=h,p.current=a,l.current=void 0})),c((function(){function e(){try{var e=n.getState(),r=f.current(e);if(t(r,p.current))return;p.current=r,d.current=e}catch(m){l.current=m}i()}return u.onStateChange=e,u.trySubscribe(),e(),function(){return u.tryUnsubscribe()}}),[n,u]),a}(e,n,o.store,o.subscription);return Object(r.useDebugValue)(a),a}}var $,W=B(),q=n(20);$=q.unstable_batchedUpdates,i=$},function(e,t,n){"use strict";n.d(t,"a",(function(){return x})),n.d(t,"b",(function(){return C})),n.d(t,"c",(function(){return y})),n.d(t,"d",(function(){return M})),n.d(t,"e",(function(){return m})),n.d(t,"f",(function(){return E})),n.d(t,"g",(function(){return I})),n.d(t,"h",(function(){return A})),n.d(t,"i",(function(){return D})),n.d(t,"j",(function(){return F})),n.d(t,"k",(function(){return L}));var r=n(15),o=n(1),a=n.n(o),i=(n(21),n(16)),u=n(30),l=n(14),s=n(7),c=n(31),f=n.n(c),d=(n(24),n(12)),p=n(18),h=n.n(p),v=function(e){var t=Object(u.a)();return t.displayName=e,t}("Router-History"),m=function(e){var t=Object(u.a)();return t.displayName=e,t}("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._isMounted?n.setState({location:e}):n._pendingLocation=e}))),n}Object(r.a)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&this.unlisten()},n.render=function(){return a.a.createElement(m.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.a.createElement(v.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.a.Component);a.a.Component;var g=function(e){function t(){return e.apply(this,arguments)||this}Object(r.a)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.props.onMount&&this.props.onMount.call(this,this)},n.componentDidUpdate=function(e){this.props.onUpdate&&this.props.onUpdate.call(this,this,e)},n.componentWillUnmount=function(){this.props.onUnmount&&this.props.onUnmount.call(this,this)},n.render=function(){return null},t}(a.a.Component);var b={},w=0;function O(e,t){return void 0===e&&(e="/"),void 0===t&&(t={}),"/"===e?e:function(e){if(b[e])return b[e];var t=f.a.compile(e);return w<1e4&&(b[e]=t,w++),t}(e)(t,{pretty:!0})}function x(e){var t=e.computedMatch,n=e.to,r=e.push,o=void 0!==r&&r;return a.a.createElement(m.Consumer,null,(function(e){e||Object(l.a)(!1);var r=e.history,u=e.staticContext,c=o?r.push:r.replace,f=Object(i.c)(t?"string"===typeof n?O(n,t.params):Object(s.a)({},n,{pathname:O(n.pathname,t.params)}):n);return u?(c(f),null):a.a.createElement(g,{onMount:function(){c(f)},onUpdate:function(e,t){var n=Object(i.c)(t.to);Object(i.f)(n,Object(s.a)({},f,{key:n.key}))||c(f)},to:n})}))}var k={},S=0;function E(e,t){void 0===t&&(t={}),("string"===typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,u=void 0!==i&&i,l=n.sensitive,s=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=k[n]||(k[n]={});if(r[e])return r[e];var o=[],a={regexp:f()(e,o,t),keys:o};return S<1e4&&(r[e]=a,S++),a}(n,{end:a,strict:u,sensitive:s}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var c=l[0],d=l.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=d[n],e}),{})}}),null)}var C=function(e){function t(){return e.apply(this,arguments)||this}return Object(r.a)(t,e),t.prototype.render=function(){var e=this;return a.a.createElement(m.Consumer,null,(function(t){t||Object(l.a)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?E(n.pathname,e.props):t.match,o=Object(s.a)({},t,{location:n,match:r}),i=e.props,u=i.children,c=i.component,f=i.render;return Array.isArray(u)&&0===u.length&&(u=null),a.a.createElement(m.Provider,{value:o},o.match?u?"function"===typeof u?u(o):u:c?a.a.createElement(c,o):f?f(o):null:"function"===typeof u?u(o):null)}))},t}(a.a.Component);function P(e){return"/"===e.charAt(0)?e:"/"+e}function _(e,t){if(!e)return t;var n=P(e);return 0!==t.pathname.indexOf(n)?t:Object(s.a)({},t,{pathname:t.pathname.substr(n.length)})}function j(e){return"string"===typeof e?e:Object(i.e)(e)}function T(e){return function(){Object(l.a)(!1)}}function R(){}a.a.Component;var M=function(e){function t(){return e.apply(this,arguments)||this}return Object(r.a)(t,e),t.prototype.render=function(){var e=this;return a.a.createElement(m.Consumer,null,(function(t){t||Object(l.a)(!1);var n,r,o=e.props.location||t.location;return a.a.Children.forEach(e.props.children,(function(e){if(null==r&&a.a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?E(o.pathname,Object(s.a)({},e.props,{path:i})):t.match}})),r?a.a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.a.Component);function L(e){var t="withRouter("+(e.displayName||e.name)+")",n=function(t){var n=t.wrappedComponentRef,r=Object(d.a)(t,["wrappedComponentRef"]);return a.a.createElement(m.Consumer,null,(function(t){return t||Object(l.a)(!1),a.a.createElement(e,Object(s.a)({},r,t,{ref:n}))}))};return n.displayName=t,n.WrappedComponent=e,h()(n,e)}var N=a.a.useContext;function I(){return N(v)}function A(){return N(m).location}function D(){var e=N(m).match;return e?e.params:{}}function F(e){var t=A(),n=N(m).match;return e?E(t.pathname,e):n}},function(e,t,n){e.exports=n(68)},function(e,t,n){"use strict";var r=n(1),o=Object.prototype.hasOwnProperty;var a=new WeakMap,i=0;var u=function(){function e(e){void 0===e&&(e={}),this.cache=new Map(Object.entries(e)),this.subs=[]}return e.prototype.get=function(e){var t=this.serializeKey(e)[0];return this.cache.get(t)},e.prototype.set=function(e,t){var n=this.serializeKey(e)[0];this.cache.set(n,t),this.notify()},e.prototype.keys=function(){return Array.from(this.cache.keys())},e.prototype.has=function(e){var t=this.serializeKey(e)[0];return this.cache.has(t)},e.prototype.clear=function(){this.cache.clear(),this.notify()},e.prototype.delete=function(e){var t=this.serializeKey(e)[0];this.cache.delete(t),this.notify()},e.prototype.serializeKey=function(e){var t=null;if("function"===typeof e)try{e=e()}catch(n){e=""}return Array.isArray(e)?(t=e,e=function(e){if(!e.length)return"";for(var t="arg",n=0;n-1&&(t.subs[r]=t.subs[t.subs.length-1],t.subs.length--)}}},e.prototype.notify=function(){for(var e=0,t=this.subs;en.errorRetryCount)){var a=Math.min(o.retryCount,8),i=~~((Math.random()+.5)*(1<0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0));return Promise.all(c).then((function(){return f.get(r)}))}return Promise.resolve(f.get(r))},R=function(e,t,n,r){var o=E[e];if(e&&o)for(var a=0;a0));return[2,Promise.all(v).then((function(){if(s)throw s;return f.get(o)}))]}if(s)throw s;return[2,l]}}))}))};Object.defineProperty(g.Provider,"default",{value:p});g.Provider;var L=function(){for(var e=this,t=[],n=0;n2?t[2]:2===t.length&&"object"===typeof t[1]?t[1]:{}),i=t.length>2||2===t.length&&"function"===typeof t[1]||null===t[1]?t[1]:a.fetcher,u=f.serializeKey(o),l=u[0],s=u[1],c=u[2],d=u[3],y=Object(r.useRef)(a);m((function(){y.current=a}));var j=function(){return a.revalidateOnMount||!a.initialData&&void 0===a.revalidateOnMount},T=function(){var e=f.get(l);return"undefined"===typeof e?a.initialData:e},L=function(){return!!f.get(d)||l&&j()},N=T(),I=f.get(c),A=L(),D=Object(r.useRef)({data:!1,error:!1,isValidating:!1}),F=Object(r.useRef)({data:N,error:I,isValidating:A});Object(r.useDebugValue)(F.current.data);var z,V,U=Object(r.useState)({})[1],H=Object(r.useCallback)((function(e){var t=!1;for(var n in e)F.current[n]!==e[n]&&(F.current[n]=e[n],D.current[n]&&(t=!0));if(t){if(B.current||!W.current)return;U({})}}),[]),B=Object(r.useRef)(!1),$=Object(r.useRef)(l),W=Object(r.useRef)(!1),q=Object(r.useCallback)((function(e){for(var t,n=[],r=1;r=0&&(n[r]=n[n.length-1],n.pop())}},Y=Object(r.useCallback)((function(t){return void 0===t&&(t={}),b(e,void 0,void 0,(function(){var e,n,r,o,u,p,h,v,m,g;return w(this,(function(b){switch(b.label){case 0:if(!l||!i)return[2,!1];if(B.current)return[2,!1];if(y.current.isPaused())return[2,!1];e=t.retryCount,n=void 0===e?0:e,r=t.dedupe,o=void 0!==r&&r,u=!0,p="undefined"!==typeof O[l]&&o,b.label=1;case 1:return b.trys.push([1,6,,7]),H({isValidating:!0}),f.set(d,!0),p||R(l,F.current.data,F.current.error,!0),h=void 0,v=void 0,p?(v=x[l],[4,O[l]]):[3,3];case 2:return h=b.sent(),[3,5];case 3:return a.loadingTimeout&&!f.get(l)&&setTimeout((function(){u&&q("onLoadingSlow",l,a)}),a.loadingTimeout),O[l]=null!==s?i.apply(void 0,s):i(l),x[l]=v=_(),[4,O[l]];case 4:h=b.sent(),setTimeout((function(){delete O[l],delete x[l]}),a.dedupingInterval),q("onSuccess",h,l,a),b.label=5;case 5:return x[l]>v?[2,!1]:C[l]&&(v<=C[l]||v<=P[l]||0===P[l])?(H({isValidating:!1}),[2,!1]):(f.set(c,void 0),f.set(d,!1),m={isValidating:!1},"undefined"!==typeof F.current.error&&(m.error=void 0),a.compare(F.current.data,h)||(m.data=h),a.compare(f.get(l),h)||f.set(l,h),H(m),p||R(l,h,m.error,!1),[3,7]);case 6:return g=b.sent(),delete O[l],delete x[l],y.current.isPaused()?(H({isValidating:!1}),[2,!1]):(f.set(c,g),F.current.error!==g&&(H({isValidating:!1,error:g}),p||R(l,void 0,g,!1)),q("onError",g,l,a),a.shouldRetryOnError&&q("onErrorRetry",g,l,a,Y,{retryCount:n+1,dedupe:!0}),[3,7]);case 7:return u=!1,[2,!0]}}))}))}),[l]);if(m((function(){if(l){B.current=!1;var e=W.current;W.current=!0;var t=F.current.data,n=T();$.current=l,a.compare(t,n)||H({data:n});var r=function(){return Y({dedupe:!0})};(e||j())&&("undefined"===typeof n||h?r():v(r));var o=!1,i=K(k,(function(){!o&&y.current.revalidateOnFocus&&(o=!0,r(),setTimeout((function(){return o=!1}),y.current.focusThrottleInterval))})),u=K(S,(function(){y.current.revalidateOnReconnect&&r()})),s=K(E,(function(e,t,n,o,i){void 0===e&&(e=!0),void 0===i&&(i=!0);var u={},l=!1;return"undefined"===typeof t||a.compare(F.current.data,t)||(u.data=t,l=!0),F.current.error!==n&&(u.error=n,l=!0),"undefined"!==typeof o&&F.current.isValidating!==o&&(u.isValidating=o,l=!0),l&&H(u),!!e&&(i?r():Y())}));return function(){H=function(){return null},B.current=!0,i(),u(),s()}}}),[l,Y]),m((function(){var t=null;return y.current.refreshInterval&&(t=setTimeout((function n(){return b(e,void 0,void 0,(function(){return w(this,(function(e){switch(e.label){case 0:return F.current.error||!y.current.refreshWhenHidden&&!y.current.isDocumentVisible()||!y.current.refreshWhenOffline&&!y.current.isOnline()?[3,2]:[4,Y({dedupe:!0})];case 1:e.sent(),e.label=2;case 2:return y.current.refreshInterval&&t&&(t=setTimeout(n,y.current.refreshInterval)),[2]}}))}))}),y.current.refreshInterval)),function(){t&&(clearTimeout(t),t=null)}}),[a.refreshInterval,a.refreshWhenHidden,a.refreshWhenOffline,Y]),a.suspense){if(z=f.get(l),V=f.get(c),"undefined"===typeof z&&(z=N),"undefined"===typeof V&&(V=I),"undefined"===typeof z&&"undefined"===typeof V){if(O[l]||Y(),O[l]&&"function"===typeof O[l].then)throw O[l];z=O[l]}if("undefined"===typeof z&&V)throw V}var G=Object(r.useMemo)((function(){var e={revalidate:Y,mutate:Q};return Object.defineProperties(e,{error:{get:function(){return D.current.error=!0,a.suspense?V:$.current===l?F.current.error:I},enumerable:!0},data:{get:function(){return D.current.data=!0,a.suspense?z:$.current===l?F.current.data:N},enumerable:!0},isValidating:{get:function(){return D.current.isValidating=!0,!!l&&F.current.isValidating},enumerable:!0}}),e}),[Y,N,I,Q,l,a.suspense,V,z]);return G};t.a=L},function(e,t,n){"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";var r=n(33),o=Object.prototype.toString;function a(e){return"[object Array]"===o.call(e)}function i(e){return"undefined"===typeof e}function u(e){return null!==e&&"object"===typeof e}function l(e){if("[object Object]"!==o.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function s(e){return"[object Function]"===o.call(e)}function c(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),a(e))for(var n=0,r=e.length;n=0;d--){var p=i[d];"."===p?a(i,d):".."===p?(a(i,d),f++):f&&(a(i,d),f--)}if(!s)for(;f--;f)i.unshift("..");!s||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function u(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"===typeof t||"object"===typeof n){var r=u(t),o=u(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1},s=n(14);function c(e){return"/"===e.charAt(0)?e:"/"+e}function f(e){return"/"===e.charAt(0)?e.substr(1):e}function d(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function v(e,t,n,o){var a;"string"===typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(a=Object(r.a)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(u){throw u instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):u}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function y(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"===typeof e?e(t,n):e;"string"===typeof a?"function"===typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),f({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=v(e,t,d(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,f({action:r,location:o}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&t0?g(j,--P):0,E--,10===_&&(E=1,S--),_}function L(){return _=P2||D(_)>3?"":" "}function H(e,t){for(;--t&&L()&&!(_<48||_>102||_>57&&_<65||_>70&&_<97););return A(e,I()+(t<6&&32==N()&&32==L()))}function B(e){for(;L();)switch(_){case e:return P;case 34:case 39:return B(34===e||39===e?e:_);case 40:41===e&&B(e);break;case 92:L()}return P}function $(e,t){for(;L()&&e+_!==57&&(e+_!==84||47!==N()););return"/*"+A(t,P-1)+"*"+h(47===e?e:L())}function W(e){for(;!D(N());)L();return A(e,P)}function q(e){return z(Q("",null,null,null,[""],e=F(e),0,[0],e))}function Q(e,t,n,r,o,a,i,u,l){for(var s=0,c=0,f=i,d=0,p=0,v=0,y=1,g=1,b=1,O=0,k="",S=o,E=a,C=r,P=k;g;)switch(v=O,O=L()){case 34:case 39:case 91:case 40:P+=V(O);break;case 9:case 10:case 13:case 32:P+=U(v);break;case 92:P+=H(I()-1,7);continue;case 47:switch(N()){case 42:case 47:x(Y($(L(),I()),t,n),l);break;default:P+="/"}break;case 123*y:u[s++]=w(P)*b;case 125*y:case 59:case 0:switch(O){case 0:case 125:g=0;case 59+c:p>0&&w(P)-f&&x(p>32?G(P+";",r,n,f-1):G(m(P," ","")+";",r,n,f-2),l);break;case 59:P+=";";default:if(x(C=K(P,t,n,s,c,o,u,k,S=[],E=[],f),a),123===O)if(0===c)Q(P,t,C,C,S,a,f,u,E);else switch(d){case 100:case 109:case 115:Q(e,C,C,r&&x(K(e,C,C,0,0,o,u,k,o,S=[],f),E),o,E,f,u,r?S:E);break;default:Q(P,C,C,C,[""],E,f,u,E)}}s=c=p=0,y=b=1,k=P="",f=i;break;case 58:f=1+w(P),p=v;default:if(y<1)if(123==O)--y;else if(125==O&&0==y++&&125==M())continue;switch(P+=h(O),O*y){case 38:b=c>0?1:(P+="\f",-1);break;case 44:u[s++]=(w(P)-1)*b,b=1;break;case 64:45===N()&&(P+=V(L())),d=N(),c=w(k=P+=W(I())),O++;break;case 45:45===v&&2==w(P)&&(y=0)}}return a}function K(e,t,n,r,o,a,i,u,l,s,c){for(var d=o-1,h=0===o?a:[""],y=O(h),g=0,w=0,x=0;g0?h[k]+" "+S:m(S,/&\f/g,h[k])))&&(l[x++]=E);return T(e,t,n,0===o?f:u,l,s,c)}function Y(e,t,n){return T(e,t,n,c,h(_),b(e,2,-2),0)}function G(e,t,n,r){return T(e,t,n,d,b(e,0,r),b(e,r+1,-1),r)}function X(e,t){switch(function(e,t){return(((t<<2^g(e,0))<<2^g(e,1))<<2^g(e,2))<<2^g(e,3)}(e,t)){case 5103:return s+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return s+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return s+e+l+e+u+e+e;case 6828:case 4268:return s+e+u+e+e;case 6165:return s+e+u+"flex-"+e+e;case 5187:return s+e+m(e,/(\w+).+(:[^]+)/,s+"box-$1$2"+u+"flex-$1$2")+e;case 5443:return s+e+u+"flex-item-"+m(e,/flex-|-self/,"")+e;case 4675:return s+e+u+"flex-line-pack"+m(e,/align-content|flex-|-self/,"")+e;case 5548:return s+e+u+m(e,"shrink","negative")+e;case 5292:return s+e+u+m(e,"basis","preferred-size")+e;case 6060:return s+"box-"+m(e,"-grow","")+s+e+u+m(e,"grow","positive")+e;case 4554:return s+m(e,/([^-])(transform)/g,"$1"+s+"$2")+e;case 6187:return m(m(m(e,/(zoom-|grab)/,s+"$1"),/(image-set)/,s+"$1"),e,"")+e;case 5495:case 3959:return m(e,/(image-set\([^]*)/,s+"$1$`$1");case 4968:return m(m(e,/(.+:)(flex-)?(.*)/,s+"box-pack:$3"+u+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+s+e+e;case 4095:case 3583:case 4068:case 2532:return m(e,/(.+)-inline(.+)/,s+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(w(e)-1-t>6)switch(g(e,t+1)){case 109:if(45!==g(e,t+4))break;case 102:return m(e,/(.+:)(.+)-([^]+)/,"$1"+s+"$2-$3$1"+l+(108==g(e,t+3)?"$3":"$2-$3"))+e;case 115:return~y(e,"stretch")?X(m(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==g(e,t+1))break;case 6444:switch(g(e,w(e)-3-(~y(e,"!important")&&10))){case 107:return m(e,":",":"+s)+e;case 101:return m(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+s+(45===g(e,14)?"inline-":"")+"box$3$1"+s+"$2$3$1"+u+"$2box$3")+e}break;case 5936:switch(g(e,t+11)){case 114:return s+e+u+m(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return s+e+u+m(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return s+e+u+m(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return s+e+u+e+e}return e}function J(e,t){for(var n="",r=O(e),o=0;o=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},fe={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},de=/[A-Z]|^ms/g,pe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,he=function(e){return 45===e.charCodeAt(1)},ve=function(e){return null!=e&&"boolean"!==typeof e},me=te((function(e){return he(e)?e:e.replace(de,"-$&").toLowerCase()})),ye=function(e,t){switch(e){case"animation":case"animationName":if("string"===typeof t)return t.replace(pe,(function(e,t,n){return be={name:t,styles:n,next:be},t}))}return 1===fe[e]||he(e)||"number"!==typeof t||0===t?t:t+"px"};function ge(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return be={name:n.name,styles:n.styles,next:be},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)be={name:r.name,styles:r.styles,next:be},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e){return(Ae="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var De=n(29),Fe=n.n(De);function ze(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ve(e,t){for(var n=0;n-1}function ot(e){return rt(e)?window.pageYOffset:e.scrollTop}function at(e,t){rt(e)?window.scrollTo(0,t):e.scrollTop=t}function it(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function ut(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Je,o=ot(e),a=t-o,i=10,u=0;function l(){var t=it(u+=i,o,a,n);at(e,t),u=p)return{placement:"bottom",maxHeight:t};if(k>=p&&!i)return a&&ut(l,S,C),{placement:"bottom",maxHeight:t};if(!i&&k>=r||i&&O>=r)return a&&ut(l,S,C),{placement:"bottom",maxHeight:i?O-g:k-g};if("auto"===o||i){var P=t,_=i?w:x;return _>=r&&(P=Math.min(_-g-u.controlHeight,t)),{placement:"top",maxHeight:P}}if("bottom"===o)return a&&at(l,S),{placement:"bottom",maxHeight:t};break;case"top":if(w>=p)return{placement:"top",maxHeight:t};if(x>=p&&!i)return a&&ut(l,E,C),{placement:"top",maxHeight:t};if(!i&&x>=r||i&&w>=r){var j=t;return(!i&&x>=r||i&&w>=r)&&(j=i?w-b:x-b),a&&ut(l,E,C),{placement:"top",maxHeight:j}}return{placement:"bottom",maxHeight:t};default:throw new Error('Invalid placement provided "'.concat(o,'".'))}return s}var ht=function(e){return"auto"===e?"bottom":e},vt=Object(o.createContext)({getPortalPlacement:null}),mt=function(e){Be(n,e);var t=Xe(n);function n(){var e;ze(this,n);for(var r=arguments.length,o=new Array(r),a=0;ae.length)&&(t=e.length);for(var n=0,r=new Array(t);n0,v=f-d-s,m=!1;v>t&&u.current&&(r&&r(e),u.current=!1),h&&l.current&&(i&&i(e),l.current=!1),h&&t>v?(n&&!u.current&&n(e),p.scrollTop=f,m=!0,u.current=!0):!h&&-t>s&&(a&&!l.current&&a(e),p.scrollTop=0,m=!0,l.current=!0),m&&function(e){e.preventDefault(),e.stopPropagation()}(e)}}),[]),d=Object(o.useCallback)((function(e){f(e,e.deltaY)}),[f]),p=Object(o.useCallback)((function(e){s.current=e.changedTouches[0].clientY}),[]),h=Object(o.useCallback)((function(e){var t=s.current-e.changedTouches[0].clientY;f(e,t)}),[f]),v=Object(o.useCallback)((function(e){if(e){var t=!!dt&&{passive:!1};"function"===typeof e.addEventListener&&e.addEventListener("wheel",d,t),"function"===typeof e.addEventListener&&e.addEventListener("touchstart",p,t),"function"===typeof e.addEventListener&&e.addEventListener("touchmove",h,t)}}),[h,p,d]),m=Object(o.useCallback)((function(e){e&&("function"===typeof e.removeEventListener&&e.removeEventListener("wheel",d,!1),"function"===typeof e.removeEventListener&&e.removeEventListener("touchstart",p,!1),"function"===typeof e.removeEventListener&&e.removeEventListener("touchmove",h,!1))}),[h,p,d]);return Object(o.useEffect)((function(){if(t){var e=c.current;return v(e),function(){m(e)}}}),[t,v,m]),function(e){c.current=e}}({isEnabled:void 0===r||r,onBottomArrive:e.onBottomArrive,onBottomLeave:e.onBottomLeave,onTopArrive:e.onTopArrive,onTopLeave:e.onTopLeave}),u=function(e){var t=e.isEnabled,n=e.accountForScrollbars,r=void 0===n||n,a=Object(o.useRef)({}),i=Object(o.useRef)(null),u=Object(o.useCallback)((function(e){if(vn){var t=document.body,n=t&&t.style;if(r&&sn.forEach((function(e){var t=n&&n[e];a.current[e]=t})),r&&mn<1){var o=parseInt(a.current.paddingRight,10)||0,i=document.body?document.body.clientWidth:0,u=window.innerWidth-i+o||0;Object.keys(cn).forEach((function(e){var t=cn[e];n&&(n[e]=t)})),n&&(n.paddingRight="".concat(u,"px"))}t&&hn()&&(t.addEventListener("touchmove",fn,yn),e&&(e.addEventListener("touchstart",pn,yn),e.addEventListener("touchmove",dn,yn))),mn+=1}}),[]),l=Object(o.useCallback)((function(e){if(vn){var t=document.body,n=t&&t.style;mn=Math.max(mn-1,0),r&&mn<1&&sn.forEach((function(e){var t=a.current[e];n&&(n[e]=t)})),t&&hn()&&(t.removeEventListener("touchmove",fn,yn),e&&(e.removeEventListener("touchstart",pn,yn),e.removeEventListener("touchmove",dn,yn)))}}),[]);return Object(o.useEffect)((function(){if(t){var e=i.current;return u(e),function(){l(e)}}}),[t,u,l]),function(e){i.current=e}}({isEnabled:n});return Te(a.a.Fragment,null,n&&Te("div",{onClick:gn,css:bn}),t((function(e){i(e),u(e)})))}var On={clearIndicator:Mt,container:function(e){var t=e.isDisabled;return{label:"container",direction:e.isRtl?"rtl":null,pointerEvents:t?"none":null,position:"relative"}},control:function(e){var t=e.isDisabled,n=e.isFocused,r=e.theme,o=r.colors,a=r.borderRadius,i=r.spacing;return{label:"control",alignItems:"center",backgroundColor:t?o.neutral5:o.neutral0,borderColor:t?o.neutral10:n?o.primary:o.neutral20,borderRadius:a,borderStyle:"solid",borderWidth:1,boxShadow:n?"0 0 0 1px ".concat(o.primary):null,cursor:"default",display:"flex",flexWrap:"wrap",justifyContent:"space-between",minHeight:i.controlHeight,outline:"0 !important",position:"relative",transition:"all 100ms","&:hover":{borderColor:n?o.primary:o.neutral30}}},dropdownIndicator:Rt,group:function(e){var t=e.theme.spacing;return{paddingBottom:2*t.baseUnit,paddingTop:2*t.baseUnit}},groupHeading:function(e){var t=e.theme.spacing;return{label:"group",color:"#999",cursor:"default",display:"block",fontSize:"75%",fontWeight:"500",marginBottom:"0.25em",paddingLeft:3*t.baseUnit,paddingRight:3*t.baseUnit,textTransform:"uppercase"}},indicatorsContainer:function(){return{alignItems:"center",alignSelf:"stretch",display:"flex",flexShrink:0}},indicatorSeparator:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing.baseUnit,o=n.colors;return{label:"indicatorSeparator",alignSelf:"stretch",backgroundColor:t?o.neutral10:o.neutral20,marginBottom:2*r,marginTop:2*r,width:1}},input:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return{margin:r.baseUnit/2,paddingBottom:r.baseUnit/2,paddingTop:r.baseUnit/2,visibility:t?"hidden":"visible",color:o.neutral80}},loadingIndicator:function(e){var t=e.isFocused,n=e.size,r=e.theme,o=r.colors,a=r.spacing.baseUnit;return{label:"loadingIndicator",color:t?o.neutral60:o.neutral20,display:"flex",padding:2*a,transition:"color 150ms",alignSelf:"center",fontSize:n,lineHeight:1,marginRight:n,textAlign:"center",verticalAlign:"middle"}},loadingMessage:bt,menu:function(e){var t,n=e.placement,r=e.theme,o=r.borderRadius,a=r.spacing,i=r.colors;return $e(t={label:"menu"},function(e){return e?{bottom:"top",top:"bottom"}[e]:"bottom"}(n),"100%"),$e(t,"backgroundColor",i.neutral0),$e(t,"borderRadius",o),$e(t,"boxShadow","0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)"),$e(t,"marginBottom",a.menuGutter),$e(t,"marginTop",a.menuGutter),$e(t,"position","absolute"),$e(t,"width","100%"),$e(t,"zIndex",1),t},menuList:function(e){var t=e.maxHeight,n=e.theme.spacing.baseUnit;return{maxHeight:t,overflowY:"auto",paddingBottom:n,paddingTop:n,position:"relative",WebkitOverflowScrolling:"touch"}},menuPortal:function(e){var t=e.rect,n=e.offset,r=e.position;return{left:t.left,position:r,top:n,width:t.width,zIndex:1}},multiValue:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius;return{label:"multiValue",backgroundColor:t.colors.neutral10,borderRadius:r/2,display:"flex",margin:n.baseUnit/2,minWidth:0}},multiValueLabel:function(e){var t=e.theme,n=t.borderRadius,r=t.colors,o=e.cropWithEllipsis;return{borderRadius:n/2,color:r.neutral80,fontSize:"85%",overflow:"hidden",padding:3,paddingLeft:6,textOverflow:o?"ellipsis":null,whiteSpace:"nowrap"}},multiValueRemove:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius,o=t.colors;return{alignItems:"center",borderRadius:r/2,backgroundColor:e.isFocused&&o.dangerLight,display:"flex",paddingLeft:n.baseUnit,paddingRight:n.baseUnit,":hover":{backgroundColor:o.dangerLight,color:o.danger}}},noOptionsMessage:gt,option:function(e){var t=e.isDisabled,n=e.isFocused,r=e.isSelected,o=e.theme,a=o.spacing,i=o.colors;return{label:"option",backgroundColor:r?i.primary:n?i.primary25:"transparent",color:t?i.neutral20:r?i.neutral0:"inherit",cursor:"default",display:"block",fontSize:"inherit",padding:"".concat(2*a.baseUnit,"px ").concat(3*a.baseUnit,"px"),width:"100%",userSelect:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)",":active":{backgroundColor:!t&&(r?i.primary:i.primary50)}}},placeholder:function(e){var t=e.theme,n=t.spacing;return{label:"placeholder",color:t.colors.neutral50,marginLeft:n.baseUnit/2,marginRight:n.baseUnit/2,position:"absolute",top:"50%",transform:"translateY(-50%)"}},singleValue:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return{label:"singleValue",color:t?o.neutral40:o.neutral80,marginLeft:r.baseUnit/2,marginRight:r.baseUnit/2,maxWidth:"calc(100% - ".concat(2*r.baseUnit,"px)"),overflow:"hidden",position:"absolute",textOverflow:"ellipsis",whiteSpace:"nowrap",top:"50%",transform:"translateY(-50%)"}},valueContainer:function(e){var t=e.theme.spacing;return{alignItems:"center",display:"flex",flex:1,flexWrap:"wrap",padding:"".concat(t.baseUnit/2,"px ").concat(2*t.baseUnit,"px"),WebkitOverflowScrolling:"touch",position:"relative",overflow:"hidden"}}};var xn,kn={borderRadius:4,colors:{primary:"#2684FF",primary75:"#4C9AFF",primary50:"#B2D4FF",primary25:"#DEEBFF",danger:"#DE350B",dangerLight:"#FFBDAD",neutral0:"hsl(0, 0%, 100%)",neutral5:"hsl(0, 0%, 95%)",neutral10:"hsl(0, 0%, 90%)",neutral20:"hsl(0, 0%, 80%)",neutral30:"hsl(0, 0%, 70%)",neutral40:"hsl(0, 0%, 60%)",neutral50:"hsl(0, 0%, 50%)",neutral60:"hsl(0, 0%, 40%)",neutral70:"hsl(0, 0%, 30%)",neutral80:"hsl(0, 0%, 20%)",neutral90:"hsl(0, 0%, 10%)"},spacing:{baseUnit:4,controlHeight:38,menuGutter:8}},Sn={"aria-live":"polite",backspaceRemovesValue:!0,blurInputOnSelect:lt(),captureMenuScroll:!lt(),closeMenuOnSelect:!0,closeMenuOnScroll:!1,components:{},controlShouldRenderValue:!0,escapeClearsValue:!1,filterOption:function(e,t){var n=Ke({ignoreCase:!0,ignoreAccents:!0,stringify:un,trim:!0,matchFrom:"any"},xn),r=n.ignoreCase,o=n.ignoreAccents,a=n.stringify,i=n.trim,u=n.matchFrom,l=i?an(t):t,s=i?an(a(e)):a(e);return r&&(l=l.toLowerCase(),s=s.toLowerCase()),o&&(l=on(l),s=rn(s)),"start"===u?s.substr(0,l.length)===l:s.indexOf(l)>-1},formatGroupLabel:function(e){return e.label},getOptionLabel:function(e){return e.label},getOptionValue:function(e){return e.value},isDisabled:!1,isLoading:!1,isMulti:!1,isRtl:!1,isSearchable:!0,isOptionDisabled:function(e){return!!e.isDisabled},loadingMessage:function(){return"Loading..."},maxMenuHeight:300,minMenuHeight:140,menuIsOpen:!1,menuPlacement:"bottom",menuPosition:"absolute",menuShouldBlockScroll:!1,menuShouldScrollIntoView:!function(){try{return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}catch(u){return!1}}(),noOptionsMessage:function(){return"No options"},openMenuOnFocus:!1,openMenuOnClick:!0,options:[],pageSize:5,placeholder:"Select...",screenReaderStatus:function(e){var t=e.count;return"".concat(t," result").concat(1!==t?"s":""," available")},styles:{},tabIndex:"0",tabSelectsValue:!0};function En(e,t,n,r){return{type:"option",data:t,isDisabled:Rn(e,t,n),isSelected:Mn(e,t,n),label:jn(e,t),value:Tn(e,t),index:r}}function Cn(e,t){return e.options.map((function(n,r){if(n.options){var o=n.options.map((function(n,r){return En(e,n,t,r)})).filter((function(t){return _n(e,t)}));return o.length>0?{type:"group",data:n,options:o,index:r}:void 0}var a=En(e,n,t,r);return _n(e,a)?a:void 0})).filter((function(e){return!!e}))}function Pn(e){return e.reduce((function(e,t){return"group"===t.type?e.push.apply(e,Bt(t.options.map((function(e){return e.data})))):e.push(t.data),e}),[])}function _n(e,t){var n=e.inputValue,r=void 0===n?"":n,o=t.data,a=t.isSelected,i=t.label,u=t.value;return(!Nn(e)||!a)&&Ln(e,{label:i,value:u,data:o},r)}var jn=function(e,t){return e.getOptionLabel(t)},Tn=function(e,t){return e.getOptionValue(t)};function Rn(e,t,n){return"function"===typeof e.isOptionDisabled&&e.isOptionDisabled(t,n)}function Mn(e,t,n){if(n.indexOf(t)>-1)return!0;if("function"===typeof e.isOptionSelected)return e.isOptionSelected(t,n);var r=Tn(e,t);return n.some((function(t){return Tn(e,t)===r}))}function Ln(e,t,n){return!e.filterOption||e.filterOption(t,n)}var Nn=function(e){var t=e.hideSelectedOptions,n=e.isMulti;return void 0===t?n:t},In=1,An=function(e){Be(n,e);var t=Xe(n);function n(e){var r;return ze(this,n),(r=t.call(this,e)).state={ariaSelection:null,focusedOption:null,focusedValue:null,inputIsHidden:!1,isFocused:!1,selectValue:[],clearFocusValueOnUpdate:!1,inputIsHiddenAfterUpdate:void 0,prevProps:void 0},r.blockOptionHover=!1,r.isComposing=!1,r.commonProps=void 0,r.initialTouchX=0,r.initialTouchY=0,r.instancePrefix="",r.openAfterFocus=!1,r.scrollToFocusedOptionOnUpdate=!1,r.userIsDragging=void 0,r.controlRef=null,r.getControlRef=function(e){r.controlRef=e},r.focusedOptionRef=null,r.getFocusedOptionRef=function(e){r.focusedOptionRef=e},r.menuListRef=null,r.getMenuListRef=function(e){r.menuListRef=e},r.inputRef=null,r.getInputRef=function(e){r.inputRef=e},r.focus=r.focusInput,r.blur=r.blurInput,r.onChange=function(e,t){var n=r.props,o=n.onChange,a=n.name;t.name=a,r.ariaOnChange(e,t),o(e,t)},r.setValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"set-value",n=arguments.length>2?arguments[2]:void 0,o=r.props,a=o.closeMenuOnSelect,i=o.isMulti;r.onInputChange("",{action:"set-value"}),a&&(r.setState({inputIsHiddenAfterUpdate:!i}),r.onMenuClose()),r.setState({clearFocusValueOnUpdate:!0}),r.onChange(e,{action:t,option:n})},r.selectOption=function(e){var t=r.props,n=t.blurInputOnSelect,o=t.isMulti,a=t.name,i=r.state.selectValue,u=o&&r.isOptionSelected(e,i),l=r.isOptionDisabled(e,i);if(u){var s=r.getOptionValue(e);r.setValue(i.filter((function(e){return r.getOptionValue(e)!==s})),"deselect-option",e)}else{if(l)return void r.ariaOnChange(e,{action:"select-option",name:a});o?r.setValue([].concat(Bt(i),[e]),"select-option",e):r.setValue(e,"select-option")}n&&r.blurInput()},r.removeValue=function(e){var t=r.props.isMulti,n=r.state.selectValue,o=r.getOptionValue(e),a=n.filter((function(e){return r.getOptionValue(e)!==o})),i=t?a:a[0]||null;r.onChange(i,{action:"remove-value",removedValue:e}),r.focusInput()},r.clearValue=function(){var e=r.state.selectValue;r.onChange(r.props.isMulti?[]:null,{action:"clear",removedValues:e})},r.popValue=function(){var e=r.props.isMulti,t=r.state.selectValue,n=t[t.length-1],o=t.slice(0,t.length-1),a=e?o:o[0]||null;r.onChange(a,{action:"pop-value",removedValue:n})},r.getValue=function(){return r.state.selectValue},r.cx=function(){for(var e=arguments.length,t=new Array(e),n=0;n5||a>5}},r.onTouchEnd=function(e){r.userIsDragging||(r.controlRef&&!r.controlRef.contains(e.target)&&r.menuListRef&&!r.menuListRef.contains(e.target)&&r.blurInput(),r.initialTouchX=0,r.initialTouchY=0)},r.onControlTouchEnd=function(e){r.userIsDragging||r.onControlMouseDown(e)},r.onClearIndicatorTouchEnd=function(e){r.userIsDragging||r.onClearIndicatorMouseDown(e)},r.onDropdownIndicatorTouchEnd=function(e){r.userIsDragging||r.onDropdownIndicatorMouseDown(e)},r.handleInputChange=function(e){var t=e.currentTarget.value;r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange(t,{action:"input-change"}),r.props.menuIsOpen||r.onMenuOpen()},r.onInputFocus=function(e){r.props.onFocus&&r.props.onFocus(e),r.setState({inputIsHiddenAfterUpdate:!1,isFocused:!0}),(r.openAfterFocus||r.props.openMenuOnFocus)&&r.openMenu("first"),r.openAfterFocus=!1},r.onInputBlur=function(e){r.menuListRef&&r.menuListRef.contains(document.activeElement)?r.inputRef.focus():(r.props.onBlur&&r.props.onBlur(e),r.onInputChange("",{action:"input-blur"}),r.onMenuClose(),r.setState({focusedValue:null,isFocused:!1}))},r.onOptionHover=function(e){r.blockOptionHover||r.state.focusedOption===e||r.setState({focusedOption:e})},r.shouldHideSelectedOptions=function(){return Nn(r.props)},r.onKeyDown=function(e){var t=r.props,n=t.isMulti,o=t.backspaceRemovesValue,a=t.escapeClearsValue,i=t.inputValue,u=t.isClearable,l=t.isDisabled,s=t.menuIsOpen,c=t.onKeyDown,f=t.tabSelectsValue,d=t.openMenuOnFocus,p=r.state,h=p.focusedOption,v=p.focusedValue,m=p.selectValue;if(!l&&("function"!==typeof c||(c(e),!e.defaultPrevented))){switch(r.blockOptionHover=!0,e.key){case"ArrowLeft":if(!n||i)return;r.focusValue("previous");break;case"ArrowRight":if(!n||i)return;r.focusValue("next");break;case"Delete":case"Backspace":if(i)return;if(v)r.removeValue(v);else{if(!o)return;n?r.popValue():u&&r.clearValue()}break;case"Tab":if(r.isComposing)return;if(e.shiftKey||!s||!f||!h||d&&r.isOptionSelected(h,m))return;r.selectOption(h);break;case"Enter":if(229===e.keyCode)break;if(s){if(!h)return;if(r.isComposing)return;r.selectOption(h);break}return;case"Escape":s?(r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange("",{action:"menu-close"}),r.onMenuClose()):u&&a&&r.clearValue();break;case" ":if(i)return;if(!s){r.openMenu("first");break}if(!h)return;r.selectOption(h);break;case"ArrowUp":s?r.focusOption("up"):r.openMenu("last");break;case"ArrowDown":s?r.focusOption("down"):r.openMenu("first");break;case"PageUp":if(!s)return;r.focusOption("pageup");break;case"PageDown":if(!s)return;r.focusOption("pagedown");break;case"Home":if(!s)return;r.focusOption("first");break;case"End":if(!s)return;r.focusOption("last");break;default:return}e.preventDefault()}},r.instancePrefix="react-select-"+(r.props.instanceId||++In),r.state.selectValue=tt(e.value),r}return Ue(n,[{key:"componentDidMount",value:function(){this.startListeningComposition(),this.startListeningToTouch(),this.props.closeMenuOnScroll&&document&&document.addEventListener&&document.addEventListener("scroll",this.onScroll,!0),this.props.autoFocus&&this.focusInput()}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.isDisabled,r=t.menuIsOpen,o=this.state.isFocused;(o&&!n&&e.isDisabled||o&&r&&!e.menuIsOpen)&&this.focusInput(),o&&n&&!e.isDisabled&&this.setState({isFocused:!1},this.onMenuClose),this.menuListRef&&this.focusedOptionRef&&this.scrollToFocusedOptionOnUpdate&&(!function(e,t){var n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),o=t.offsetHeight/3;r.bottom+o>n.bottom?at(e,Math.min(t.offsetTop+t.clientHeight-e.offsetHeight+o,e.scrollHeight)):r.top-o-1&&(i=u)}this.scrollToFocusedOptionOnUpdate=!(o&&this.menuListRef),this.setState({inputIsHiddenAfterUpdate:!1,focusedValue:null,focusedOption:a[i]},(function(){return t.onMenuOpen()}))}},{key:"focusValue",value:function(e){var t=this.state,n=t.selectValue,r=t.focusedValue;if(this.props.isMulti){this.setState({focusedOption:null});var o=n.indexOf(r);r||(o=-1);var a=n.length-1,i=-1;if(n.length){switch(e){case"previous":i=0===o?0:-1===o?a:o-1;break;case"next":o>-1&&o0&&void 0!==arguments[0]?arguments[0]:"first",t=this.props.pageSize,n=this.state.focusedOption,r=this.getFocusableOptions();if(r.length){var o=0,a=r.indexOf(n);n||(a=-1),"up"===e?o=a>0?a-1:r.length-1:"down"===e?o=(a+1)%r.length:"pageup"===e?(o=a-t)<0&&(o=0):"pagedown"===e?(o=a+t)>r.length-1&&(o=r.length-1):"last"===e&&(o=r.length-1),this.scrollToFocusedOptionOnUpdate=!0,this.setState({focusedOption:r[o],focusedValue:null})}}},{key:"getTheme",value:function(){return this.props.theme?"function"===typeof this.props.theme?this.props.theme(kn):Ke(Ke({},kn),this.props.theme):kn}},{key:"getCommonProps",value:function(){var e=this.clearValue,t=this.cx,n=this.getStyles,r=this.getValue,o=this.selectOption,a=this.setValue,i=this.props,u=i.isMulti,l=i.isRtl,s=i.options;return{clearValue:e,cx:t,getStyles:n,getValue:r,hasValue:this.hasValue(),isMulti:u,isRtl:l,options:s,selectOption:o,selectProps:i,setValue:a,theme:this.getTheme()}}},{key:"hasValue",value:function(){return this.state.selectValue.length>0}},{key:"hasOptions",value:function(){return!!this.getFocusableOptions().length}},{key:"isClearable",value:function(){var e=this.props,t=e.isClearable,n=e.isMulti;return void 0===t?n:t}},{key:"isOptionDisabled",value:function(e,t){return Rn(this.props,e,t)}},{key:"isOptionSelected",value:function(e,t){return Mn(this.props,e,t)}},{key:"filterOption",value:function(e,t){return Ln(this.props,e,t)}},{key:"formatOptionLabel",value:function(e,t){if("function"===typeof this.props.formatOptionLabel){var n=this.props.inputValue,r=this.state.selectValue;return this.props.formatOptionLabel(e,{context:t,inputValue:n,selectValue:r})}return this.getOptionLabel(e)}},{key:"formatGroupLabel",value:function(e){return this.props.formatGroupLabel(e)}},{key:"startListeningComposition",value:function(){document&&document.addEventListener&&(document.addEventListener("compositionstart",this.onCompositionStart,!1),document.addEventListener("compositionend",this.onCompositionEnd,!1))}},{key:"stopListeningComposition",value:function(){document&&document.removeEventListener&&(document.removeEventListener("compositionstart",this.onCompositionStart),document.removeEventListener("compositionend",this.onCompositionEnd))}},{key:"startListeningToTouch",value:function(){document&&document.addEventListener&&(document.addEventListener("touchstart",this.onTouchStart,!1),document.addEventListener("touchmove",this.onTouchMove,!1),document.addEventListener("touchend",this.onTouchEnd,!1))}},{key:"stopListeningToTouch",value:function(){document&&document.removeEventListener&&(document.removeEventListener("touchstart",this.onTouchStart),document.removeEventListener("touchmove",this.onTouchMove),document.removeEventListener("touchend",this.onTouchEnd))}},{key:"renderInput",value:function(){var e=this.props,t=e.isDisabled,n=e.isSearchable,o=e.inputId,i=e.inputValue,u=e.tabIndex,l=e.form,s=this.getComponents().Input,c=this.state.inputIsHidden,f=this.commonProps,d=o||this.getElementId("input"),p={"aria-autocomplete":"list","aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"]};return n?a.a.createElement(s,r({},f,{autoCapitalize:"none",autoComplete:"off",autoCorrect:"off",id:d,innerRef:this.getInputRef,isDisabled:t,isHidden:c,onBlur:this.onInputBlur,onChange:this.handleInputChange,onFocus:this.onInputFocus,spellCheck:"false",tabIndex:u,form:l,type:"text",value:i},p)):a.a.createElement(ln,r({id:d,innerRef:this.getInputRef,onBlur:this.onInputBlur,onChange:Je,onFocus:this.onInputFocus,readOnly:!0,disabled:t,tabIndex:u,form:l,value:""},p))}},{key:"renderPlaceholderOrValue",value:function(){var e=this,t=this.getComponents(),n=t.MultiValue,o=t.MultiValueContainer,i=t.MultiValueLabel,u=t.MultiValueRemove,l=t.SingleValue,s=t.Placeholder,c=this.commonProps,f=this.props,d=f.controlShouldRenderValue,p=f.isDisabled,h=f.isMulti,v=f.inputValue,m=f.placeholder,y=this.state,g=y.selectValue,b=y.focusedValue,w=y.isFocused;if(!this.hasValue()||!d)return v?null:a.a.createElement(s,r({},c,{key:"placeholder",isDisabled:p,isFocused:w}),m);if(h)return g.map((function(t,l){var s=t===b;return a.a.createElement(n,r({},c,{components:{Container:o,Label:i,Remove:u},isFocused:s,isDisabled:p,key:"".concat(e.getOptionValue(t)).concat(l),index:l,removeProps:{onClick:function(){return e.removeValue(t)},onTouchEnd:function(){return e.removeValue(t)},onMouseDown:function(e){e.preventDefault(),e.stopPropagation()}},data:t}),e.formatOptionLabel(t,"value"))}));if(v)return null;var O=g[0];return a.a.createElement(l,r({},c,{data:O,isDisabled:p}),this.formatOptionLabel(O,"value"))}},{key:"renderClearIndicator",value:function(){var e=this.getComponents().ClearIndicator,t=this.commonProps,n=this.props,o=n.isDisabled,i=n.isLoading,u=this.state.isFocused;if(!this.isClearable()||!e||o||!this.hasValue()||i)return null;var l={onMouseDown:this.onClearIndicatorMouseDown,onTouchEnd:this.onClearIndicatorTouchEnd,"aria-hidden":"true"};return a.a.createElement(e,r({},t,{innerProps:l,isFocused:u}))}},{key:"renderLoadingIndicator",value:function(){var e=this.getComponents().LoadingIndicator,t=this.commonProps,n=this.props,o=n.isDisabled,i=n.isLoading,u=this.state.isFocused;if(!e||!i)return null;return a.a.createElement(e,r({},t,{innerProps:{"aria-hidden":"true"},isDisabled:o,isFocused:u}))}},{key:"renderIndicatorSeparator",value:function(){var e=this.getComponents(),t=e.DropdownIndicator,n=e.IndicatorSeparator;if(!t||!n)return null;var o=this.commonProps,i=this.props.isDisabled,u=this.state.isFocused;return a.a.createElement(n,r({},o,{isDisabled:i,isFocused:u}))}},{key:"renderDropdownIndicator",value:function(){var e=this.getComponents().DropdownIndicator;if(!e)return null;var t=this.commonProps,n=this.props.isDisabled,o=this.state.isFocused,i={onMouseDown:this.onDropdownIndicatorMouseDown,onTouchEnd:this.onDropdownIndicatorTouchEnd,"aria-hidden":"true"};return a.a.createElement(e,r({},t,{innerProps:i,isDisabled:n,isFocused:o}))}},{key:"renderMenu",value:function(){var e=this,t=this.getComponents(),n=t.Group,o=t.GroupHeading,i=t.Menu,u=t.MenuList,l=t.MenuPortal,s=t.LoadingMessage,c=t.NoOptionsMessage,f=t.Option,d=this.commonProps,p=this.state.focusedOption,h=this.props,v=h.captureMenuScroll,m=h.inputValue,y=h.isLoading,g=h.loadingMessage,b=h.minMenuHeight,w=h.maxMenuHeight,O=h.menuIsOpen,x=h.menuPlacement,k=h.menuPosition,S=h.menuPortalTarget,E=h.menuShouldBlockScroll,C=h.menuShouldScrollIntoView,P=h.noOptionsMessage,_=h.onMenuScrollToTop,j=h.onMenuScrollToBottom;if(!O)return null;var T,R=function(t,n){var o=t.type,i=t.data,u=t.isDisabled,l=t.isSelected,s=t.label,c=t.value,h=p===i,v=u?void 0:function(){return e.onOptionHover(i)},m=u?void 0:function(){return e.selectOption(i)},y="".concat(e.getElementId("option"),"-").concat(n),g={id:y,onClick:m,onMouseMove:v,onMouseOver:v,tabIndex:-1};return a.a.createElement(f,r({},d,{innerProps:g,data:i,isDisabled:u,isSelected:l,key:y,label:s,type:o,value:c,isFocused:h,innerRef:h?e.getFocusedOptionRef:void 0}),e.formatOptionLabel(t.data,"menu"))};if(this.hasOptions())T=this.getCategorizedOptions().map((function(t){if("group"===t.type){var i=t.data,u=t.options,l=t.index,s="".concat(e.getElementId("group"),"-").concat(l),c="".concat(s,"-heading");return a.a.createElement(n,r({},d,{key:s,data:i,options:u,Heading:o,headingProps:{id:c,data:t.data},label:e.formatGroupLabel(t.data)}),t.options.map((function(e){return R(e,"".concat(l,"-").concat(e.index))})))}if("option"===t.type)return R(t,"".concat(t.index))}));else if(y){var M=g({inputValue:m});if(null===M)return null;T=a.a.createElement(s,d,M)}else{var L=P({inputValue:m});if(null===L)return null;T=a.a.createElement(c,d,L)}var N={minMenuHeight:b,maxMenuHeight:w,menuPlacement:x,menuPosition:k,menuShouldScrollIntoView:C},I=a.a.createElement(mt,r({},d,N),(function(t){var n=t.ref,o=t.placerProps,l=o.placement,s=o.maxHeight;return a.a.createElement(i,r({},d,N,{innerRef:n,innerProps:{onMouseDown:e.onMenuMouseDown,onMouseMove:e.onMenuMouseMove},isLoading:y,placement:l}),a.a.createElement(wn,{captureEnabled:v,onTopArrive:_,onBottomArrive:j,lockEnabled:E},(function(t){return a.a.createElement(u,r({},d,{innerRef:function(n){e.getMenuListRef(n),t(n)},isLoading:y,maxHeight:s,focusedOption:p}),T)})))}));return S||"fixed"===k?a.a.createElement(l,r({},d,{appendTo:S,controlElement:this.controlRef,menuPlacement:x,menuPosition:k}),I):I}},{key:"renderFormField",value:function(){var e=this,t=this.props,n=t.delimiter,r=t.isDisabled,o=t.isMulti,i=t.name,u=this.state.selectValue;if(i&&!r){if(o){if(n){var l=u.map((function(t){return e.getOptionValue(t)})).join(n);return a.a.createElement("input",{name:i,type:"hidden",value:l})}var s=u.length>0?u.map((function(t,n){return a.a.createElement("input",{key:"i-".concat(n),name:i,type:"hidden",value:e.getOptionValue(t)})})):a.a.createElement("input",{name:i,type:"hidden"});return a.a.createElement("div",null,s)}var c=u[0]?this.getOptionValue(u[0]):"";return a.a.createElement("input",{name:i,type:"hidden",value:c})}}},{key:"renderLiveRegion",value:function(){var e=this.commonProps,t=this.state,n=t.ariaSelection,o=t.focusedOption,i=t.focusedValue,u=t.isFocused,l=t.selectValue,s=this.getFocusableOptions();return a.a.createElement(Gt,r({},e,{ariaSelection:n,focusedOption:o,focusedValue:i,isFocused:u,selectValue:l,focusableOptions:s}))}},{key:"render",value:function(){var e=this.getComponents(),t=e.Control,n=e.IndicatorsContainer,o=e.SelectContainer,i=e.ValueContainer,u=this.props,l=u.className,s=u.id,c=u.isDisabled,f=u.menuIsOpen,d=this.state.isFocused,p=this.commonProps=this.getCommonProps();return a.a.createElement(o,r({},p,{className:l,innerProps:{id:s,onKeyDown:this.onKeyDown},isDisabled:c,isFocused:d}),this.renderLiveRegion(),a.a.createElement(t,r({},p,{innerRef:this.getControlRef,innerProps:{onMouseDown:this.onControlMouseDown,onTouchEnd:this.onControlTouchEnd},isDisabled:c,isFocused:d,menuIsOpen:f}),a.a.createElement(i,r({},p,{isDisabled:c}),this.renderPlaceholderOrValue(),this.renderInput()),a.a.createElement(n,r({},p,{isDisabled:c}),this.renderClearIndicator(),this.renderLoadingIndicator(),this.renderIndicatorSeparator(),this.renderDropdownIndicator())),this.renderMenu(),this.renderFormField())}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=t.prevProps,r=t.clearFocusValueOnUpdate,o=t.inputIsHiddenAfterUpdate,a=e.options,i=e.value,u=e.menuIsOpen,l=e.inputValue,s={};if(n&&(i!==n.value||a!==n.options||u!==n.menuIsOpen||l!==n.inputValue)){var c=tt(i),f=u?function(e,t){return Pn(Cn(e,t))}(e,c):[],d=r?function(e,t){var n=e.focusedValue,r=e.selectValue.indexOf(n);if(r>-1){if(t.indexOf(n)>-1)return n;if(r-1?n:t[0]}(t,f),focusedValue:d,clearFocusValueOnUpdate:!1}}var p=null!=o&&e!==n?{inputIsHidden:o,inputIsHiddenAfterUpdate:void 0}:{};return Ke(Ke(Ke({},s),p),{},{prevProps:e})}}]),n}(o.Component);An.defaultProps=Sn;var Dn={defaultInputValue:"",defaultMenuIsOpen:!1,defaultValue:null},Fn=(n(89),n(90),n(95),n(97),n(98),n(99),o.Component,function(e){var t,n;return n=t=function(t){Be(o,t);var n=Xe(o);function o(){var e;ze(this,o);for(var t=arguments.length,r=new Array(t),a=0;a1?n-1:0),o=1;o=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}n.d(t,"a",(function(){return r}))},,function(e,t,n){"use strict";var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;function i(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,t){for(var n,u,l=i(e),s=1;s=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(this.props,[]);return function(e){c.forEach((function(t){return delete e[t]}))}(o),o.className=this.props.inputClassName,o.id=this.state.inputId,o.style=n,i.default.createElement("div",{className:this.props.className,style:t},this.renderStyles(),i.default.createElement("input",r({},o,{ref:this.inputRef})),i.default.createElement("div",{ref:this.sizerRef,style:s},e),this.props.placeholder?i.default.createElement("div",{ref:this.placeHolderSizerRef,style:s},this.props.placeholder):null)}}]),t}(a.Component);h.propTypes={className:u.default.string,defaultValue:u.default.any,extraWidth:u.default.oneOfType([u.default.number,u.default.string]),id:u.default.string,injectStyles:u.default.bool,inputClassName:u.default.string,inputRef:u.default.func,inputStyle:u.default.object,minWidth:u.default.oneOfType([u.default.number,u.default.string]),onAutosize:u.default.func,onChange:u.default.func,placeholder:u.default.string,placeholderIsMinWidth:u.default.bool,style:u.default.object,value:u.default.any},h.defaultProps={minWidth:1,injectStyles:!0},t.default=h},function(e,t,n){"use strict";(function(e){var r=n(1),o=n.n(r),a=n(15),i=n(21),u=n.n(i),l=1073741823,s="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof window?window:"undefined"!==typeof e?e:{};function c(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,r){e=n,t.forEach((function(t){return t(e,r)}))}}}var f=o.a.createContext||function(e,t){var n,o,i="__create-react-context-"+function(){var e="__global_unique_id__";return s[e]=(s[e]||0)+1}()+"__",f=function(e){function n(){var t;return(t=e.apply(this,arguments)||this).emitter=c(t.props.value),t}Object(a.a)(n,e);var r=n.prototype;return r.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},r.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a===1/i:a!==a&&i!==i)?n=0:(n="function"===typeof t?t(r,o):l,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},r.render=function(){return this.props.children},n}(r.Component);f.childContextTypes=((n={})[i]=u.a.object.isRequired,n);var d=function(t){function n(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,n){0!==((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}Object(a.a)(n,t);var r=n.prototype;return r.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=void 0===t||null===t?l:t},r.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=void 0===e||null===e?l:e},r.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},r.getValue=function(){return this.context[i]?this.context[i].get():e},r.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(r.Component);return d.contextTypes=((o={})[i]=u.a.object,o),{Provider:f,Consumer:d}};t.a=f}).call(this,n(87))},function(e,t,n){var r=n(88);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return u(a(e,t),t)},e.exports.tokensToFunction=u,e.exports.tokensToRegExp=d;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,u="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var f=n[0],d=n[1],p=n.index;if(u+=e.slice(i,p),i=p+f.length,d)u+=d[1];else{var h=e[i],v=n[2],m=n[3],y=n[4],g=n[5],b=n[6],w=n[7];u&&(r.push(u),u="");var O=null!=v&&null!=h&&h!==v,x="+"===b||"*"===b,k="?"===b||"*"===b,S=n[2]||c,E=y||g;r.push({name:m||a++,prefix:v||"",delimiter:S,optional:k,repeat:x,partial:O,asterisk:!!w,pattern:E?s(E):w?".*":"[^"+l(S)+"]+?"})}}return ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){u.headers[e]=r.merge(a)})),e.exports=u}).call(this,n(73))},function(e,t,n){"use strict";var r=n(13),o=n(75),a=n(77),i=n(34),u=n(78),l=n(81),s=n(82),c=n(38);e.exports=function(e){return new Promise((function(t,n){var f=e.data,d=e.headers;r.isFormData(f)&&delete d["Content-Type"];var p=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",v=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";d.Authorization="Basic "+btoa(h+":"+v)}var m=u(e.baseURL,e.url);if(p.open(e.method.toUpperCase(),i(m,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,p.onreadystatechange=function(){if(p&&4===p.readyState&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in p?l(p.getAllResponseHeaders()):null,a={data:e.responseType&&"text"!==e.responseType?p.response:p.responseText,status:p.status,statusText:p.statusText,headers:r,config:e,request:p};o(t,n,a),p=null}},p.onabort=function(){p&&(n(c("Request aborted",e,"ECONNABORTED",p)),p=null)},p.onerror=function(){n(c("Network Error",e,null,p)),p=null},p.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(c(t,e,"ECONNABORTED",p)),p=null},r.isStandardBrowserEnv()){var y=(e.withCredentials||s(m))&&e.xsrfCookieName?a.read(e.xsrfCookieName):void 0;y&&(d[e.xsrfHeaderName]=y)}if("setRequestHeader"in p&&r.forEach(d,(function(e,t){"undefined"===typeof f&&"content-type"===t.toLowerCase()?delete d[t]:p.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(p.withCredentials=!!e.withCredentials),e.responseType)try{p.responseType=e.responseType}catch(g){if("json"!==e.responseType)throw g}"function"===typeof e.onDownloadProgress&&p.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){p&&(p.abort(),n(e),p=null)})),f||(f=null),p.send(f)}))}},function(e,t,n){"use strict";var r=n(76);e.exports=function(e,t,n,o,a){var i=new Error(e);return r(i,t,n,o,a)}},function(e,t,n){"use strict";var r=n(13);e.exports=function(e,t){t=t||{};var n={},o=["url","method","data"],a=["headers","auth","proxy","params"],i=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],u=["validateStatus"];function l(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function s(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(n[o]=l(void 0,e[o])):n[o]=l(e[o],t[o])}r.forEach(o,(function(e){r.isUndefined(t[e])||(n[e]=l(void 0,t[e]))})),r.forEach(a,s),r.forEach(i,(function(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(n[o]=l(void 0,e[o])):n[o]=l(void 0,t[o])})),r.forEach(u,(function(r){r in t?n[r]=l(e[r],t[r]):r in e&&(n[r]=l(void 0,e[r]))}));var c=o.concat(a).concat(i).concat(u),f=Object.keys(e).concat(Object.keys(t)).filter((function(e){return-1===c.indexOf(e)}));return r.forEach(f,s),n}},function(e,t,n){"use strict";function r(e){this.message=e}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,e.exports=r},function(e,t){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0})).join("&")},t.parseUrl=function(e,t){t=Object.assign({decode:!0},t);var n=s(e,"#"),r=o(n,2),a=r[0],i=r[1];return Object.assign({url:a.split("?")[0]||"",query:b(y(e),t)},t&&t.parseFragmentIdentifier&&i?{fragmentIdentifier:h(i,t)}:{})},t.stringifyUrl=function(e,n){n=Object.assign(r({encode:!0,strict:!0},f,!0),n);var o=m(e.url).split("?")[0]||"",a=t.extract(e.url),i=t.parse(a,{sort:!1}),u=Object.assign(i,e.query),l=t.stringify(u,n);l&&(l="?".concat(l));var s=function(e){var t="",n=e.indexOf("#");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(s="#".concat(n[f]?p(e.fragmentIdentifier,n):e.fragmentIdentifier)),"".concat(o).concat(l).concat(s)},t.pick=function(e,n,o){o=Object.assign(r({parseFragmentIdentifier:!0},f,!1),o);var a=t.parseUrl(e,o),i=a.url,u=a.query,l=a.fragmentIdentifier;return t.stringifyUrl({url:i,query:c(u,n),fragmentIdentifier:l},o)},t.exclude=function(e,n,r){var o=Array.isArray(n)?function(e){return!n.includes(e)}:function(e,t){return!n(e,t)};return t.pick(e,o,r)}},function(e,t,n){"use strict";var r=n(22).compose;t.__esModule=!0,t.composeWithDevTools="undefined"!==typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"===typeof arguments[0]?r:r.apply(null,arguments)},t.devToolsEnhancer="undefined"!==typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__?window.__REDUX_DEVTOOLS_EXTENSION__:function(){return function(e){return e}}},function(e,t,n){"use strict";function r(e){return function(t){var n=t.dispatch,r=t.getState;return function(t){return function(o){return"function"===typeof o?o(n,r,e):t(o)}}}}var o=r();o.withExtraArgument=r,t.a=o},function(e,t,n){"use strict";var r=n(27),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,u=60110,l=60112;t.Suspense=60113;var s=60115,c=60116;if("function"===typeof Symbol&&Symbol.for){var f=Symbol.for;o=f("react.element"),a=f("react.portal"),t.Fragment=f("react.fragment"),t.StrictMode=f("react.strict_mode"),t.Profiler=f("react.profiler"),i=f("react.provider"),u=f("react.context"),l=f("react.forward_ref"),t.Suspense=f("react.suspense"),s=f("react.memo"),c=f("react.lazy")}var d="function"===typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n